Repository navigation
Capability gate: retain scored results, enforce tool identity and directory-change forms (GPT-6 review repair); first host receipts with that review - #440
Merged
seathatflowsinourveins merged 6 commits intoSep 27, 2026
Conversation
… directory changes A GPT-6 cross-family review of the first capability-gate host receipts (recorded at 55fc8d1) returned needs_changes. This repairs the harness so re-recorded receipts can claim what the checks verify: - run_gate.py retains each run's promptfoo results file (the Codex items every verdict is scored from) under a private state directory (0700/0600, never overwritten) and prints its sha256 in the verdict line; a run whose results cannot be retained fails. - assertions.js completedResult counts only the prescribed tool (config.tool) with every argument in the row's `call`; the jcodemunch detail is the symbol id plus the full signature. - M13 rejects pushd, popd, chdir, Set-Location and -C/--chdir/--directory besides cd, including in the ctx_execute_file snippet; the README states that the shell item carries no working directory. - Tests: 26 (was 22); decision record amended. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…PT-6 review's needs_changes The three receipts recorded at main 55fc8d1 (jcodemunch-mcp 1.108.319, ai-memory 2.4.1, context-mode 1.0.169 for M13), each passing, with the codex_lane review a GPT-6 cross-family reviewer appended under its own identity: needs_changes (results not retained; tool identity and M13 directory checks weaker than the limitations state; the M13 receipt omits the shell reconciliation limitation). Kept as recorded; the repaired harness in this branch re-records receipts that supersede them. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…he M13 sentinel in retained results The GPT-6 re-check of the repair found that an attached -C (env -C/dir) still passed the directory-change check. The check now covers a short-option group containing C with its directory separate or attached, --work-tree, --git-dir, --wd, --working-directory, Push-/Pop-Location, and chroot, nsenter, unshare, systemd-run and sudo, in the forms each tool's --help gives on the workstation. The README now claims only these syntactic forms. Re-scoring the retained smoke results with the final assertions showed that promptfoo 0.123.1's sanitizer (src/util/sanitizer.ts) wrote vars.token as [REDACTED] in all 52 M13 rows, so the retained file could not re-derive the own-token verdicts. The hook now stores the token as vars.sentinel (kept verbatim, confirmed with an echo-provider eval), and an M13 run whose results file lacks any row's sentinel fails. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
docs/lanes.md hot-file protocol: main's manifests/evidence.json with the branch's eleven files re-registered (the three first receipts newly), and the component evidence matrix regenerated. The first ai-memory receipt counts as dissented under its standing needs_changes review; no status changes (flip-rule violations 0). Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…e-retain-identity-20260927
seathatflowsinourveins
deleted the
claude/capability-gate-retain-identity-20260927
branch
September 27, 2026 23:28
This was referenced Sep 27, 2026
seathatflowsinourveins
added a commit
that referenced
this pull request
Sep 28, 2026
…first recording; GPT-6 review agree) + dashboard gate row (#442) * Capability-gate host receipts round 2 (at main eb5ca78), superseding the first recording, with GPT-6 review agree The three gates re-ran live through host_receipts.py record --supersedes at the published repair (#440). Each receipt quotes only its own verdict line, which carries the retained results' sha256. The GPT-6 cross-family reviewer independently re-applied assertions.js to the retained results (260/260, 10/10, 10/10 component verdicts; hashes 3/3; M13 sentinels 52/52) and recorded codex_lane agree on each receipt itself. The grand-dashboard gets the codex-capability-gate row. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Register the round-2 capability-gate receipts and dashboard row (hot files) docs/lanes.md hot-file protocol after merging origin/main at b26add9 (#439): main's manifests/evidence.json with the three -2 receipts and observability/grand-dashboard/state.json registered, and the component evidence matrix regenerated (flip-rule violations 0). Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> --------- Co-authored-by: Scout <scout@local> Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
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.
Scope
needs_changes.7fa3849c(Pre-push registry gate: run the three registry tests on every pushed commit #438), merged into the branch ate0e863ae;manifests/evidence.jsonre-registered per docs/lanes.md (the result equals git's automatic merge)lane:foundationtools/capability-gate/: run_gate.py, assertions.js, m13_hooks.js, the jcodemunch and ai-memory configs, README.md;tests/test_capability_gate.py;docs/decisions/2026-09-27-capability-gate-harness.md(amendment);evidence/hosts/nativestack-5975wx-20260925/;manifests/evidence.json(registration only) and the regenerated reports.Why
The three receipts recorded at
55fc8d17passed, but they claimed more than the harness verified. A read-only GPT-6 review (codex exec,gpt-6-astraat max) found this and appended its own verdict to each receipt, under its own identity, ascodex_laneneeds_changes.docs/acceptance-evidence-policy.md, "Preserve the returned result").run_gate.pykeeps each run's results file in a private state directory atnative-agent-stack/capability-gate/<gate>-<UTC>-<pid>/results.json. Directories are 0700 and the file 0600; it is never overwritten. The verdict line prints the file's sha256, and a run that cannot retain the file fails.completedResultcounts only the tool the config names (orderormemory_query), called with every argument field the row'scallprescribes. The jcodemunch detail is now the symbol id (<file>::<name>#function) plus the full signature.cdbut no other directory change, and the shell item has no working-directory field.DIRECTORY_CHANGEnow rejects the directory-change forms each tool's--helpgives on the workstation (GNU coreutils 9.4env, GNU make 4.3, GNU tar 1.35, git 2.43.0, sudo 1.9.15p5, util-linux 2.39.3, systemd 255); the README lists them. The README states that the check is a list of syntactic forms, and that a working-directory argument to the shell tool itself is invisible to the scorer.-C(env -C/dir) still passed the first repair.622d54d1:-Cis now caught whether its directory is separate or attached, and when grouped with other short options. Regression cases cover the attached, grouped and argument-list forms.src/util/sanitizer.ts) had writtenvars.tokenas[REDACTED]in all 52 M13 rows. The retained file could therefore not re-derive the own-token verdicts, the property P1 claims.m13_hooks.jsstores the token asvars.sentinel. An echo-provider eval confirmed that promptfoo keeps that name verbatim and redactstoken. An M13 run whose results file lacks any row's sentinel now fails.SOTA sources
34f74d34):openai:codex-sdkprovider and its raw items (src/providers/openai/codex-sdk.ts:2430);javascriptassertions with assertion-levelconfig;src/util/sanitizer.ts), read in the installeddistand confirmed by an eval.@openai/codex-sdk0.153.4 (bundled):dist/index.d.tsdefinesCommandExecutionItem(command, aggregated_output, exit_code, status; no working directory) andMcpToolCallItem(server, tool, arguments, result).search_symbolsreturnsid,file,lineandsignatureper symbol, as observed through the MCP server on 2026-09-27.--helpon the workstation, as listed in the P2 row above.docs/acceptance-evidence-policy.md: "Preserve the returned result" and "Confirm consequential claims through independent observations".Evidence-class table
55fc8d17. Each carries the GPT-6 reviewer'scodex_laneneeds_changes, recorded under an identity other than the recorder's.evidence/hosts/nativestack-5975wx-20260925/…--{jcodemunch-mcp,ai-memory,context-mode}--use--20260927.jsontokenas[REDACTED]in the results file and keepssentinelverbatim.echoprovider)promptfoo eval -o results.jsonwith both varspython3 -m unittest tests.test_capability_gate(27 tests)Local commands run
Independent review
dc05ec64.-Cstill passed, so the verdict wasRECHECK: not resolved.622d54d1fixes that gap and the sentinel redaction found in verification.f025fb1eto review622d54d1, and returnedPRHEAD: ready.-Cgap is closed: 24 direct checks rejected every form, and relative reads still pass.vars.tokenreader remains, and the installed sanitizer redacts none of the harness's vars.e0e863aeonly merges Pre-push registry gate: run the three registry tests on every pushed commit #438 and re-registers the manifest.Host evidence
nativestack-5975wx-20260925(linux-wsl2-x86_64) at55fc8d17.622d54d1.🤖 Generated with Claude Code