fix(pins): guard root manifest.json, not server.json alone - #245
Merged
Conversation
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The gate has a
SERVER_JSON_SPLITclass for exactly this failure and still missed it:check_server_json()only ever openedserver.json.automatised-pipeline carried
manifest.jsonat 0.8.0 whileserver.jsonand every marketplace pin read 0.8.2.check_marketplace_pins.pyexited 0 on that tree for two releases, and sincerelease.ymlcopiesmanifest.jsonverbatim 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 tocheck_root_manifests().Evidence: 18 tests pass. Deleting the
manifest.jsonrow 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.