Context
Follow-up to #403 / PR #434, which landed the INV-5 response-shape gate as a first slice: it validates the 6 seed-drivable read tools' success payloads against their mapped OpenAPI response schemas (reusing the REST validator), with an honest burn-down (INV5_READ_PENDING, 21 tools) and 3 documented shape exemptions (INV5_SHAPE_EXEMPT). CodeRabbit correctly noted the gate does not yet cover the full #403 ask.
Remaining coverage (burn-down)
- Remaining read tools — drive the 21
INV5_READ_PENDING tools once per-tool non-empty fixtures exist (each needs representative seeded entities). Move each from pending → driven as its fixture lands.
- Write/destructive tool response shapes — INV-4 pins write-tool request fields, but their response payloads are unvalidated. Add success-shape validation for write tools (needs stateful setup/teardown per tool).
- Error-path shapes — validate the
{ isError: true, content } failure envelope shape across tools (currently only success shapes are checked).
- Reconcile the 3 exemptions —
get_spec, get_library_conventions, get_project_revision_nomenclature reshape vs their REST ops (inherited inside payload vs meta.inherited at envelope top level). Decide: align the MCP payloads to REST, or keep exempt with a documented rationale.
Gating
- Each addition keeps the contract gate green and the completeness invariant honest (driven + exempt + pending must equal the full mapped set).
- Update ADR-044 as coverage lands.
Context
Follow-up to #403 / PR #434, which landed the INV-5 response-shape gate as a first slice: it validates the 6 seed-drivable read tools' success payloads against their mapped OpenAPI response schemas (reusing the REST validator), with an honest burn-down (
INV5_READ_PENDING, 21 tools) and 3 documented shape exemptions (INV5_SHAPE_EXEMPT). CodeRabbit correctly noted the gate does not yet cover the full#403ask.Remaining coverage (burn-down)
INV5_READ_PENDINGtools once per-tool non-empty fixtures exist (each needs representative seeded entities). Move each from pending → driven as its fixture lands.{ isError: true, content }failure envelope shape across tools (currently only success shapes are checked).get_spec,get_library_conventions,get_project_revision_nomenclaturereshape vs their REST ops (inheritedinside payload vsmeta.inheritedat envelope top level). Decide: align the MCP payloads to REST, or keep exempt with a documented rationale.Gating