Problem
The corpus contract — "one minimal spec per ir-spec-matrix.md row per format that can express it" (CLAUDE.md, architecture.md §5) — is unverifiable: matrix rows have no IDs, the 37 corpus files aren't mapped to rows, and nothing fails when a row goes uncovered. Concretely uncovered today despite ✅ matrix entries and claimed lowering support in ir-design.md §14:
This is the test that keeps "lossless by default" honest — and when the AsyncAPI compiler lands, its corpus will be built by imitating this one; an unsystematic template gets copied five times.
Proposed direction
Give matrix rows stable keys (a key column in ir-spec-matrix.md). In each compiler's conformance test, declare rowKey → caseFile plus an explicit exclusion list (row X: not expressible / policy-only) and assert the union covers every row marked ✅/⚠ for that format. Add the missing OpenAPI cases. Size: M.
Acceptance
- Removing a corpus case (or adding a matrix row) without updating the mapping fails a test.
- The five uncovered rows above have cases asserting lossless capture.
Problem
The corpus contract — "one minimal spec per
ir-spec-matrix.mdrow per format that can express it" (CLAUDE.md,architecture.md§5) — is unverifiable: matrix rows have no IDs, the 37 corpus files aren't mapped to rows, and nothing fails when a row goes uncovered. Concretely uncovered today despite ✅ matrix entries and claimed lowering support inir-design.md§14:xmlobject →XMLHintsitemSchema/itemEncoding→Content.Item(see also bug openapi: itemEncoding preserved in Extensions despite the first-class Content.ItemEncoding field #38)in: querystringparametersparent/kindThis is the test that keeps "lossless by default" honest — and when the AsyncAPI compiler lands, its corpus will be built by imitating this one; an unsystematic template gets copied five times.
Proposed direction
Give matrix rows stable keys (a key column in
ir-spec-matrix.md). In each compiler's conformance test, declarerowKey → caseFileplus an explicit exclusion list (row X: not expressible / policy-only) and assert the union covers every row marked ✅/⚠ for that format. Add the missing OpenAPI cases. Size: M.Acceptance