ContractManifest
Describes one architectural contract: its `id` and `version` (a two-part contract version such as `0.1`), the capabilities it requires/provides/suggests, its surface requirements, and optional links to the contract's Academy unit and migration guide. A pure value object: {@see fromArray()} validates, {@see toArray()} serializes deterministically. `adapterRequirements` is deliberately NOT modelled in slice 1: the resolver does not yet resolve adapters, and a field the engine never reads is decorative metadata (spec §25 anti-pattern 5). It returns as a typed field when adapter resolution lands (ROADMAP P10).
ContractManifest::__construct()
public function __construct(string $id, string $version, array $requiresCapabilities = [], array $providesCapabilities = [], array $suggestsCapabilities = [], array $surfaceRequirements = [], ?string $academyUrl = null, ?string $migrationUrl = null):Parameters
| Name | Type | Description |
|---|---|---|
| $id | string | |
| $version | string | |
| $requiresCapabilities | list<string> | |
| $providesCapabilities | list<string> | |
| $suggestsCapabilities | list<string> | |
| $surfaceRequirements | list<string> | |
| $academyUrl | ?string | |
| $migrationUrl | ?string |
ContractManifest::fromArray()
public static function fromArray(array $data): selfBuild a contract manifest from a decoded array, validating `id` (non-empty) and `version` (a valid — possibly two-part — version).
Parameters
| Name | Type | Description |
|---|---|---|
| $data | array<string, mixed> |
Throws
InvalidManifestException On a missing/empty required field or an invalid version.
ContractManifest::toArray()
public function toArray(): arraySerialize to an array with a fixed, deterministic key order.