Repository navigation
fix(zig): port the boj-invoke CLI to Zig 0.16 process.Init - #355
Merged
Merged
Conversation
Zig 0.16 removed std.heap.GeneralPurposeAllocator and std.process.argsAlloc, so `zig build invoke` failed and took down the E2E (Full REST + MCP Bridge) and catalogue-truthfulness probe jobs. main now takes std.process.Init for the allocator, Io runtime and argv; writes go through std.Io.File.writeStreamingAll. Also applies zig fmt, which the file already failed on main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019j8She9eTFx54r6aL6sCHP Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 50 minutes. View limit detailsLimit details: You’ve used the included review currently available. Review configuration: ⚙️ Run configuration
📒 Files selected for processing (1)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
hyperpolymath
enabled auto-merge (squash)
October 7, 2026 11:19
🏁 path-claims benchCommit NumbersHost-dependent — compare deltas across commits, not absolute values. |
🔍 Hypatia Security ScanFindings: 113 issues detected
View findings[
{
"reason": "Job `sonarqube` in build.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": ".github/workflows/build.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "sonarqube"
},
{
"reason": "Job `triage` in label-triage.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": ".github/workflows/label-triage.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "triage"
},
{
"reason": "Job `sync` in labels.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": ".github/workflows/labels.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "sync"
},
{
"reason": "Job `deploy` in pages-deploy.yml has no `timeout-minutes:` declaration. Default is 6 hours — a stuck codeload fetch or runner hang can burn budget. Add `timeout-minutes: 10` (or proportional).",
"type": "missing_timeout_minutes",
"file": ".github/workflows/pages-deploy.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"recipe_id": "recipe-add-workflow-timeout-minutes",
"job": "deploy"
},
{
"reason": "Step uses `peter-evans/repository-dispatch` with `token: ${{ secrets.FARM_DISPATCH_TOKEN }}` but has no `if: secrets.FARM_DISPATCH_TOKEN != ''` gate. On repos where the secret hasn't been propagated the action fails on every push, red-maining the repo. Add the step-level gate (or env+if pattern) so the missing-secret path is a clean skip instead of a red.",
"type": "secret_action_without_presence_gate",
"file": ".github/workflows/instant-sync.yml",
"action": "peter-evans/repository-dispatch",
"rule_module": "workflow_audit",
"severity": "high",
"fix_recipe": "add_secret_presence_gate"
},
{
"reason": "codeql.yml does not list `language: actions` in its matrix, but the repo has workflow files. CodeQL's `actions` language scans workflow YAML for injection and other CI/CD-specific weaknesses — every repo with workflows benefits. Add an entry to `matrix.include` with `language: actions` + `build-mode: none`.",
"type": "codeql_missing_actions_language",
"file": ".github/workflows/codeql.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium",
"fix_recipe": "add_codeql_actions_language"
},
{
"line": 39,
"reason": "job in .github/workflows/labels.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/labels.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
},
{
"line": 46,
"reason": "job in .github/workflows/push-email-notify.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/push-email-notify.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
},
{
"line": 32,
"reason": "job in .github/workflows/build.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/build.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
},
{
"line": 44,
"reason": "job in .github/workflows/container-publish.yml references `secrets.*` but does not install `step-security/harden-runner` — review outbound-egress monitoring",
"type": "RE001",
"file": ".github/workflows/container-publish.yml",
"action": "report",
"rule_module": "research_extensions",
"severity": "medium"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
8 of 12 tasks
hyperpolymath
added a commit
that referenced
this pull request
Oct 7, 2026
…-empty (#356) ## Summary This is the last red check on the Zig 0.16 path (#354 bench, #355 invoke CLI). With #355 merged, **E2E — Full REST + MCP Bridge** builds and runs: 38 of 39 pass. The one failure is `teranga tier has cartridges (expected '1', got '0')`. The bundled `cartridges/` tree was retired, so the E2E catalogue is now `tests/fixtures/cartridges`, and all 23 of its manifests declare `"tier": "Ayo"`. The assertion can never pass against that catalogue, so this is a stale test rather than a defect in the menu. ## Changes - `tests/e2e_full.sh` Step 3: the "Teranga is non-empty" check is replaced by: - for each tier (teranga, shield, ayo), the menu count equals the number of manifests under `$BOJ_CARTRIDGES_PATH` declaring that tier (case-folded, matching `router.ex`); - `tier_teranga + tier_shield + tier_ayo == summary.total`, so no cartridge can silently fall outside the three tiers. - The new assertions don't assume any tier is non-empty. Tier assignments are being re-audited under the trust-tier ruling, so adding a fake Teranga fixture would have pre-empted that work. ## Type of change Test fix. No production code changes. ## 📌 New pins Head SHA: **7c192f068f9b20d5e70fd722ebe6bc3d1f41f98b**. No action, lockfile or container pins are added or changed. ## RSR Quality Checklist ### Required - [x] Tests pass: `bash tests/e2e_full.sh` locally reports `Results: 42 passed, 0 failed, 0 skipped (of 42)` with rc 0. - [x] Code is formatted: `bash -n tests/e2e_full.sh` reports no syntax errors. The repo has no shell formatter gate. - [x] Linter is clean: no new warnings. - [x] No banned language patterns: shell and jq only. - [x] No `unsafe` blocks. Not applicable. - [x] No banned functions. - [x] SPDX headers: the existing header is unchanged. - [x] No secrets. ### As Applicable - [ ] `.machine_readable/*`. Not applicable: A2ML is retired (D308). - [ ] Documentation, TOPOLOGY, CHANGELOG. Not applicable: test-only change. - [ ] New dependencies. Not applicable: `jq` is already installed by the workflow. - [ ] ABI/FFI. Not applicable. ## Testing - Full suite locally on Zig 0.16.0 and the Elixir backend: 42/42 pass. The new checks report teranga 0, shield 0, ayo 23, total 23. - Mutant controls, run on the new block in isolation against the real fixtures: - correct menu: 4/4 pass; - one cartridge dropped from `tier_ayo`: 2 fail (the ayo count and the total); - a cartridge in the wrong tier: 2 fail (the teranga count and the ayo count). ## Pre-existing red checks (deferred, not introduced here) - `SonarQube`: red on main, tracked in #338. - `governance / UUID v7 conformance`: red on main, tracked in #347. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_019j8She9eTFx54r6aL6sCHP Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.
Summary
Follow-up to #354 (the bench). Zig 0.16 also removed
std.heap.GeneralPurposeAllocatorandstd.process.argsAlloc. Because of that,zig build invokefails withsrc/boj_invoke_cli.zig:45:23: error: root source file struct 'heap' has no member named 'GeneralPurposeAllocator'. That takes down E2E — Full REST + MCP Bridge, which is red on main, and the Catalogue truthfulness--probejob. Plainzig buildnever builds theinvokestep, which is why the local check on #354 missed it.Changes
ffi/zig/src/boj_invoke_cli.zig:mainnow takesstd.process.Initand usesinit.gpa,init.io, andinit.minimal.args.toSlice(arena). stdout/stderr arestd.Io.File, written withwriteStreamingAll(io, …).emitJsonthreadsiothrough.mainandemitJson(§5d).zig fmtapplied. The file was already failingzig fmt --checkon main.Type of change
Bug fix (build break under the pinned Zig 0.16.0 toolchain). No behaviour change: the verbs, JSON output and exit codes are the same.
📌 New pins
Head SHA: cfe5989. No action, lockfile or container pins are added or changed.
RSR Quality Checklist
Required
zig build test --summary allreports 41/41 steps succeeded and 316/316 tests passed.zig fmt --check ffi/zig/src/boj_invoke_cli.zigrc 0.unsafeblocks without// SAFETY:comments. Not applicable: Zig, and no new unsafe constructs..envfiles.As Applicable
.machine_readable/*updates. Not applicable: no project-state change. A2ML is retired estate-wide (D308).TOPOLOGY.md. Not applicable.Testing
Run locally with Zig 0.16.0:
zig build invoke: rc 0 (it failed on main).boj-invoke libfeedback_mcp.so probeprinted{"ok":true,"name":"feedback-mcp","version":"0.1.0"}with rc 0. The error paths were also checked: no args gives rc 2, a missing .so givesFileNotFoundwith rc 3, and an unknown verb gives rc 2.bash tests/truthfulness_check.sh --probe:truthfulness: OK — 23 cartridges checked (probe=1).zig build test: 316/316 tests pass.Pre-existing red checks (deferred, not introduced here)
SonarQube: red on main, tracked in Three pre-existing red non-required checks on main: Allowlist Preflight (empty GH_TOKEN), Workflow security linter (duplicatewithin abi-drift.yml), SonarQube (403) #338.governance / UUID v7 conformance: red on main, tracked in governance / UUID v7 conformance is red on main: v5 UUID literal in .machine_readable/CLADE.a2ml #347.🤖 Generated with Claude Code
https://claude.ai/code/session_019j8She9eTFx54r6aL6sCHP