Skip to content

fix(pins): guard root manifest.json, not server.json alone - #245

Merged
cdeust merged 2 commits into
mainfrom
fix/pin-gate-manifest-json-172
Jul 29, 2026
Merged

fix(pins): guard root manifest.json, not server.json alone#245
cdeust merged 2 commits into
mainfrom
fix/pin-gate-manifest-json-172

Conversation

@cdeust

@cdeust cdeust commented Jul 29, 2026

Copy link
Copy Markdown
Owner

The gate has a SERVER_JSON_SPLIT class for exactly this failure and still missed it: check_server_json() only ever opened server.json.

automatised-pipeline carried manifest.json at 0.8.0 while server.json and every marketplace pin read 0.8.2. check_marketplace_pins.py exited 0 on that tree for two releases, and since release.yml copies manifest.json verbatim into the .mcpb, the wrong version shipped to every install (cdeust/ai-architect-mcp-codebase#172).

Replaces the single-file check with a one-row-per-manifest table. Adding a manifest is now a row, not a branch — the hardcoded filename is what made this invisible. Absent file and missing version key both stay non-failures: Cortex has neither manifest, AP has both.

check_server_json() is removed rather than left as a shim; callers and tests moved to check_root_manifests().

Evidence: 18 tests pass. Deleting the manifest.json row makes the two incident-replay assertions fail (FAILED (failures=2)), so the regression test bites rather than merely passing.

Next: AP's byte-identical copy is updated in a follow-up once this lands, so its weekly canonical-diff job stays green.

cdeust and others added 2 commits July 29, 2026 10:06
automatised-pipeline carried manifest.json at 0.8.0 while server.json and
every marketplace pin read 0.8.2, and this gate exited 0 on that tree for
two releases. The SERVER_JSON_SPLIT class existed for exactly this
failure but check_server_json() only ever opened server.json. Because
release.yml copies manifest.json verbatim into the .mcpb bundle, the
wrong version shipped to every install (AP #172).

Replaces the single-file check with a one-row-per-manifest table, so
adding a manifest is a row rather than a branch — a hardcoded filename is
what made this invisible in the first place. An absent file and a missing
version key both stay non-failures: this repo has neither manifest, AP
has both, and demanding every row exist everywhere would be a false
positive in one repo rather than a guard in both.

check_server_json() is removed rather than kept as a shim; its callers
and tests move to check_root_manifests().

Verified: 18 tests pass; removing the manifest.json row makes the two new
incident-replay assertions fail, so the regression test bites.

Refs cdeust/ai-architect-mcp-codebase#172

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcNA6gSRXjdvJQX9qKMzTU
…n tests

The three MANIFEST_JSON_SPLIT tests moved the canonical count, and the
doc-claim gate caught eleven stale advertisements plus the committed
tests badge — which is the gate doing its job at the point the drift is
introduced.

Badge regenerated with scripts/generate_repo_badges.py rather than
hand-edited; check_doc_claims.py and --check both pass.

Refs cdeust/ai-architect-mcp-codebase#172

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcNA6gSRXjdvJQX9qKMzTU
@cdeust
cdeust merged commit f606c37 into main Jul 29, 2026
15 checks passed
@cdeust
cdeust deleted the fix/pin-gate-manifest-json-172 branch July 29, 2026 10:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant