Skip to content

Commit 5d48bcb

Browse files
authored
Merge pull request #312 from metaobjectsdev/docs/conformance-requirements-boundary
docs(conformance): record where requirements are gated, and where they deliberately are not
2 parents 0bdbffe + bcccb2b commit 5d48bcb

1 file changed

Lines changed: 25 additions & 0 deletions

File tree

docs/CONFORMANCE.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,30 @@ library-vs-pipeline divergences (see the `_comment` block in each port's
5353
are tracked as known-gaps rather than silently patched — the runner treats listed
5454
fixtures as passing, but a future port-level reconciliation pass would close them.
5555

56+
### Split coverage: where a feature is gated, and where it deliberately is not
57+
58+
The matrix is corpus-shaped, so a feature whose coverage splits — across several
59+
corpora, or between its *vocabulary* and its *behaviour* — never gets a row of its
60+
own, and its boundary ends up discoverable only from the feature doc. The split ones
61+
are recorded here instead.
62+
63+
**Capability requirements** ([features/requirements.md](features/requirements.md)):
64+
65+
- *Vocabulary — gated in all five ports.* The types, their attributes and their closed
66+
enums travel in `registry-conformance`'s byte-matched manifest, which every port
67+
reproduces exactly, and accept/reject behaviour is pinned by `requirement-*` fixtures
68+
in `fixtures/conformance/`. A port that drifts on what it will load fails.
69+
- *Checks — TypeScript only, by decision.* The `meta verify` diagnostics over
70+
requirements ship in the TypeScript CLI; the other ports load and validate and stop
71+
there. Same call as [ADR-0015](../spec/decisions/ADR-0015-single-shared-migrate-engine.md):
72+
one implementation of a build-time gate rather than five, where the gate is not a
73+
per-port runtime concern. `verify-conformance` therefore holds no requirement cases,
74+
and that absence is deliberate rather than a gap.
75+
76+
Stated as mechanisms rather than as a list of attribute names on purpose — the
77+
requirement vocabulary has a breaking change scheduled (FR-038), which moves what the
78+
manifest contains without moving the boundary between the two halves.
79+
5680
Per-port runners + commands:
5781

5882
| Port | Metamodel + YAML + render + verify | Persistence | API contract |
@@ -91,6 +115,7 @@ unit-test runners (`bun test`, `dotnet test`, `pytest`, `mvn test`) pull Docker.
91115
| `template-*`, `error-template-*` | [features/templates-and-payloads.md](features/templates-and-payloads.md) |
92116
| `origin-*`, `error-origin-*` | [features/templates-and-payloads.md](features/templates-and-payloads.md) (payload origins) |
93117
| `projection-*`, `error-projection-*`, `field-readonly-on-view-projection` | [features/source-kinds.md](features/source-kinds.md) (projections + the object taxonomy, ADR-0028) |
118+
| `requirement-*`, `error-unknown-attr-requirement` | [features/requirements.md](features/requirements.md) (vocabulary only — the `meta verify` checks are TS-owned; see "Split coverage" above) |
94119
| `smoke-empty-metadata` | [features/entities.md](features/entities.md) |
95120

96121
### `fixtures/yaml-conformance/` (15)

0 commit comments

Comments
 (0)