feat!: retire the bundled cartridges/ tree — boj-server-cartridges registry is canonical - #300
Conversation
Executes the cartridge-extraction endgame (handover prompt 5): deletes the 128-cartridge bundled tree (1,721 files) now that boj-server#158's catalog fallback chain has burned in and scripts/fetch-cartridges.sh supplies the runtime fetch from the canonical hyperpolymath/boj-server-cartridges registry. - E2E runs against a tracked fixture catalog (tests/fixtures/cartridges): 22 builtin manifests + a buildable feedback-mcp FFI (15/15 tests green, .so at the manifest's so_path) + local-coord-mcp manifest for the bridge contract test (23/23 coord_* tools verified). - nickel-validator + generate-offline-menu resolve via BOJ_CARTRIDGES_PATH (flat cache layout), historical in-repo path kept as fallback. - zig-test now gates the core ffi/zig tree; per-cartridge builds are gated in the cartridges repo. abi-drift + lsp-dap-bsp gates retired via run=false (skipped = passing) to avoid phantom required contexts until their jobs are ported to the cartridges repo. - proofs/truthfulness/e2e/fuzz path filters narrowed; Justfile fmt/watch fixed (find over a missing dir hard-fails); status text repointed at the registry. - release.yml untouched — it already fetches from the registry. - version 0.4.7 → 0.5.0 (removal is a breaking packaging change). Operator note: the live local-coord-mcp.service unit was built from the bundled tree; migrate it to a fetched cache (fetch-cartridges.sh) before deleting the leftover untracked cartridges/ directory on disk. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
🔍 Hypatia Security ScanFindings: 110 issues detected
View findings[
{
"reason": "Issue in build.yml",
"type": "missing_timeout_minutes",
"file": "build.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in pages-deploy.yml",
"type": "missing_timeout_minutes",
"file": "pages-deploy.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in push-email-notify.yml",
"type": "missing_timeout_minutes",
"file": "push-email-notify.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in instant-sync.yml",
"type": "secret_action_without_presence_gate",
"file": "instant-sync.yml",
"action": "peter-evans/repository-dispatch",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "Issue in codeql.yml",
"type": "codeql_missing_actions_language",
"file": "codeql.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "believe_me undermines formal verification (4 occurrences, CWE-704)",
"type": "believe_me",
"file": "/home/runner/work/boj-server/boj-server/src/abi/Boj/SafetyLemmas.idr",
"action": "flag",
"rule_module": "code_safety",
"severity": "critical"
},
{
"reason": "Shell execution -- validate input before passing to shell (1 occurrences, CWE-78)",
"type": "js_exec_sync",
"file": "/home/runner/work/boj-server/boj-server/mcp-bridge/lib/nickel-validator.js",
"action": "flag",
"rule_module": "code_safety",
"severity": "high"
},
{
"reason": "eval() -- arbitrary code execution (2 occurrences, CWE-94)",
"type": "js_eval",
"file": "/home/runner/work/boj-server/boj-server/mcp-bridge/lib/security.js",
"action": "flag",
"rule_module": "code_safety",
"severity": "critical"
},
{
"reason": "Deno -A grants all permissions -- use specific --allow-* flags (1 occurrences, CWE-250)",
"type": "js_deno_all_perms",
"file": "/home/runner/work/boj-server/boj-server/mcp-bridge/main.d.ts",
"action": "flag",
"rule_module": "code_safety",
"severity": "high"
},
{
"reason": "Zig @ptrCast performs unchecked pointer type conversion (1 occurrences, CWE-704)",
"type": "zig_ptr_cast",
"file": "/home/runner/work/boj-server/boj-server/ffi/zig/src/cartridge_shim.zig",
"action": "flag",
"rule_module": "code_safety",
"severity": "high"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
🏁 path-claims benchCommit NumbersHost-dependent — compare deltas across commits, not absolute values. |
|
Note Automatic reviews are paused because your trial's included automatic processing has been used for this period. Upgrade now, or comment "Gitar review" to run a review anytime. Code Review ✅ Approved 1 resolved / 1 findingsRetires the bundled cartridges tree and bumps version to 0.5.0, establishing boj-server-cartridges as the canonical registry. Consider updating the generate-offline-menu usage comment to specify Deno instead of node.
✅ 1 resolved✅ Quality: generate-offline-menu usage says
|
| Compact |
|
Important
Your trial ends in 6 days — upgrade now to keep code review, CI analysis, auto-apply, custom automations, and more.
Was this helpful? React with 👍 / 👎 | Gitar
✅ All code review findings resolved.
Follow-up to #300, which merged before this heal commit reached the branch — main's E2E / Aspect / readme-derive are red until this lands. - **catalog.ex**: fall back to the repo's own pinned schema mirror when the cartridges root has no sibling `schemas/` dir (the E2E fixture catalog and ad-hoc `BOJ_CARTRIDGES_PATH` caches don't ship one) — `BojRest.Catalog` no longer crashes at boot. - **aspect_tests.sh**: `nullglob` around the Aspect-4 cartridge loop so the retired tree audits zero cartridges instead of failing on a literal `*`; completeness gating lives in boj-server-cartridges. - **README.md**: regenerated from README.adoc per the readme-derive recipe. Also clears a stale AGPL sentence #284 removed from the adoc without rederiving (pre-existing fail-and-tell debt). Verified locally: derived README.md is byte-identical to the check's expectation; catalog fallback path exercised by the fixture layout. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
PR A of the BoJ 0.16 campaign
Executes the June cartridge-extraction endgame (handover
cartridge-05): deletes the bundled 128-cartridge tree (1,721 files, −190k lines). Prereqs long satisfied: #158 (catalog fallback chain) merged 2026-05-26 and burned in;scripts/fetch-cartridges.shalready supplies the flat-cache fetch from the canonical registry (release.yml has used it all along — untouched here).What changed
tests/fixtures/cartridges): 22 builtin manifests + buildablefeedback-mcpFFI +local-coord-mcpmanifest for the bridge contract test.BOJ_CARTRIDGES_PATH(flat cache), old in-repo path kept as graceful fallback.ffi/zigtree only; per-cartridge FFI gating lives in boj-server-cartridges.run=falsein the detector — skipped jobs report success, so no phantom required contexts. Their subject matter (per-cartridge iseriser drift, LSP/DAP/BSP conformance) should be ported to the cartridges repo, then these workflows + required contexts can be deleted (follow-up).fmt/fmt-check/build-watchfixed (findover the missing dir hard-fails); status/README text repointed at the registry; CLAUDE.md TS-exemption table updated (the 6 exempted adapters left with the tree).Verified locally
feedback-mcpFFI:zig build test15/15 green on CI's Zig 0.15.2;.solands at the manifest'sso_path.coord_*tools exposed bybuildToolList().⚠ Operator action before disk cleanup
The live
local-coord-mcp.servicesystemd unit runs the adapter built inside the (now untracked)cartridges/leftovers, and the Nickel contracts fallback also resolves there. Migrate the unit + setBOJ_CARTRIDGES_PATH(viascripts/fetch-cartridges.sh) before deleting the leftover directory. This PR deliberately does not touch disk state outside git.Next in the campaign: PR B ports
ffi/zig+ the canonical shim to Zig 0.16.0.🤖 Generated with Claude Code