Repository navigation
Harden the last three workflows, pin exact release comments, and give native-token-e2e discriminating fixtures - #370
Merged
seathatflowsinourveins merged 2 commits intoSep 26, 2026
Conversation
… native-token-e2e discriminating fixtures - step-security/harden-runner (e14015d5, v2.21.1) in audit mode is the first step of native-token-tools, source, destination and synthetic-restore, so all 32 ubuntu jobs start with it; HASH_FROZEN is empty and a guard keeps the four jobs hardened. The off-host recovery plans refresh only their prospective bindings, as in 37a3b43; no workflow step has run yet (the PR's hosted native-token-tools run and each off-host dispatch are first). - Six major-only pin comments name exact releases (v7.0.1, v8.0.1), guarded offline against zizmor's online ref-version-mismatch audit. - native_token_ci.py: discriminating RTK long-log, MarkItDown multi-element, ast-grep multi-line shell=True, Repomix compression and TOON tabular checks, each held against its baseline; one fixture failure no longer skips the next. - docs/foundation-stack.md follows manifests/stack.json (table, gh release view example, vLLM compatibility sentence), guarded by tests/test_foundation_stack_pins.py; docs/github-automation.md's harden-runner paragraph states the current coverage and cites only existing tests (new guard). - Review repairs: the decision quotes the fix round's operative overturn and names the off-host ground as awaiting coordinator acceptance; wording no longer claims the step ran locally; markers name v2026.09.26.2; the empty HASH_FROZEN check is reported as skipped. Evidence: evidence/artifacts/token-workflow-hardening-20260926/ (local integration, local static analysis, documented API checks). Decision: docs/decisions/2026-09-26-token-workflow-hardening.md. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Hot-file commit per docs/lanes.md: main's manifests/evidence.json with this branch's 12 changed and 12 new files re-registered through host_receipts.register_file; component_matrix.py and new_host_grand_list.py --write left their reports unchanged. validate.py, evidence_manifest.py --check and host_receipts.py validate pass. Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
seathatflowsinourveins
deleted the
claude/gha-hardening-fixtures-20260926
branch
September 26, 2026 21:18
This was referenced Sep 26, 2026
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
Hardening. step-security/harden-runner in audit mode (
e14015d5… # v2.21.1) is now the first step of the four remaining unhardened jobs:native-token-tools(native-token-e2e.yml)sourceanddestination(native-offhost-app-state.yml)synthetic-restore(native-offhost-restore.yml)All 32 ubuntu jobs and 3 of 4 macOS jobs now start with the step, 35 uses in all. The only exemption left is the ownership exemption for
hardware-profile-smoke.yml:macos-profile, andHASH_FROZENis empty. A guard test keeps the four jobs hardened.No run has executed the step in these jobs yet.
native-token-toolsrun is the first.native-token-e2e.ymlruns onpull_requestwith a paths filter. The local--installruns only re-recorded the harness receipts against the new workflow bytes (fb06cf92…); they callnative_token_ci.pydirectly, so no workflow step ran.workflow_dispatchonly), the next dispatch is its first run with the step. The off-host plans had only their prospective bindings refreshed, as37a3b436did.Pin comments. Six major-only comments (
# v7/# v8) now name exact releases (# v7.0.1/# v8.0.1); no SHA changed. This prevents a zizmorref-version-mismatchfinding from failing the requiredvalidatejob when upstream movesv7/v8. A new offline test guards it.Discriminating fixtures in
scripts/native_token_ci.py. Each tool gets an input on which its real behaviour differs from a passthrough, and is checked against that baseline:rtk proxybyte-exact with 0 saved; default window 10 commitsshell=Truecalls)--compressdocs/foundation-stack.mdnow followsmanifests/stack.json, guarded by the newtests/test_foundation_stack_pins.py.docs/github-automation.mdstates the current coverage and cites only existing tests, guarded by a new test.gh api; 12 are at their latest release.codeql-action/upload-sarifis on v4.38.1: v4.38.2 (09-24) is inside Dependabot's 7-day cooldown, so 10-05 is the first eligible run. No advisories affect any pinned version. The Dependabot config is untouched.Lane and merge
lane:foundation.manifests/evidence.jsonchanges only by the re-registration protocol: 12 new files and 12 re-hashed, with noreceipts[]change. The changed plans are foundation blueprints (blueprints/convergence-practice/).dde28cc2, which is currentorigin/main; head is5c5e2a50.git merge-tree --write-tree origin/main HEADexits 0 (clean).docs/github-automation.mdcarries the marker twice andblueprints/convergence-practice/offhost-app-state/README.mdonce, as "changed afterv2026.09.26.2". Both show inscripts/release_due.py'schangedlist.native-token-toolsrun id and artifact.What changed
.github/workflows/native-token-e2e.yml: harden-runner as the first step ofnative-token-tools, plus exact-release comments..github/workflows/native-offhost-app-state.ymland.github/workflows/native-offhost-restore.yml: harden-runner as the first step ofsource,destinationandsynthetic-restore, plus exact-release comments.blueprints/convergence-practice/offhost-app-state/plan.jsonandblueprints/convergence-practice/offhost-restore/hosted-plan.json: prospective workflow-hash bindings refreshed with a corrections line, as37a3b436did.blueprints/convergence-practice/offhost-app-state/README.md(with the marker) andblueprints/convergence-practice/offhost-restore/README.md: one sentence each.scripts/native_token_ci.py: the discriminating fixtures and baselines, with failures isolated per fixture.fixtures/ast_grep_shell_calls.pyandfixtures/markitdown-multi-element.html(new): the fixture inputs.tests/test_native_token_ci.py: fixture and baseline tests.tests/test_workflow_hardening.py:test_github_automation_cites_only_existing_testsHASH_FROZENcheck skips while nothing is frozentests/test_foundation_stack_pins.py(new): every release link andgh release viewcommand indocs/foundation-stack.mdmust name themanifests/stack.jsonpin of its repository.docs/foundation-stack.md: follows the manifest, with a dated history note:docs/github-automation.md: the harden-runner paragraph now states the measured coverage; three dated sentences carry the markers.docs/decisions/2026-09-26-token-workflow-hardening.md(new): the decision record, with its alternatives and overturn conditions.evidence/artifacts/token-workflow-hardening-20260926/(9 new files):README.md,runs.jsonand two receiptscontrols.jsonandcontrols_driver.pymutation_check.pyactions_latest.pyandactions-latest.jsonmanifests/evidence.json: registration only (hot-file protocol, last commit).Verification
These are the final acceptance commands at head
5c5e2a50(repair round 2), run with the CI venv's Python. The worktree held only two untracked notes files.test_hash_frozen_exemptions_are_still_pinned(no workflow is hash-frozen) and the existing conditionaltest_the_cell_check_rejects_wrong_and_missing_release_notes.test_pre_commit_gatepassed the first time, and/tmp/.gitwas absent before and after.--installruns gave 108 commands and 42/42 checks each.test_foundation_stack_pins: before,FAIL ['akitaonrails/ai-memory 2.3.2 (manifest: 2.4.1)'] != []; after, ok.test_github_automation_cites_only_existing_tests: failed before, ok after.local_integration: harness runs and real-tool controls.gh apireleases, tags, advisories and runs.synthetic: the unit tests.Reviews
Adversarial review (Claude Opus) of the build: 1 medium and 4 low defects, 6 nits. It found no defect in the harness code, the workflows or the tests. Round 1 (
816a879dand5c5e2a50) fixed or corrected all of them; none was rejected.docs/foundation-stack.mdcontradicted itselfgh release view v2.4.1, vLLM text from thefreshnessnote; newtests/test_foundation_stack_pins.pyfailing-firstv2026.09.26v2026.09.26.2; marker check rc 1 before, rc 0 after--installruns re-recorded the harness receipts and the PR's hosted run is the step's first execution; "four earlier receipts" corrected to "ten retained files"test_github_automation_cites_only_existing_testsfailing-firstHASH_FROZENtest could not failskipTestwhenHASH_FROZENis emptyFORMERLY_HASH_FROZENruns.jsonmanifests/evidence.jsonis sharedCross-family review (GPT-6) of
5c5e2a50: verdictNO DEFECTS.gpt-6-astra, reasoning effort max, sandbox read-only, approval never.5c5e2a50against basedde28cc2.5c5e2a50.Residuals
These are copied verbatim from the notes. Repair round 2 is the final round and carries round 1's items 1-5 unchanged.
native-token-toolsrun is the step's first execution and completes that job's overturn. Retain its run id and artifact before merge.validatejob.wt-ws2andwt-ws2bare abandoned./tmp/.gitcreator on the host (absent during this round's runs as well), and the items owned elsewhere.codex-rev/review-pb-wp10.mdand.err, with the scope inpbrev/gpt6-scope-wp10.md), which is not evidence of record. Before merge, the coordinator should carry the reviewer, model, head5c5e2a50, rc 0, verdict and token count into the PR body or a sanitized receipt. This round did not add a receipt, because that would need a commit and re-registration outside its brief.Item 6 is now covered: the Reviews section above carries the reviewer, model, head, rc, verdict and token count.
The items owned elsewhere, verbatim from the build report as it stood then. The
MEMORY.mditem was withdrawn in round 1 as already fixed.manifests/stack.jsonclaude-code 2.1.278 and codex 0.155.1 (upstream v2.1.283 / rust-v0.157.1), withgrand-catalog-handbook.md:200,202,602,619,631,637(and verdict excerpts at 1176–1193, 1588, 1685, 1706),recipes/claude-native-profile.md:31andrecipes/README.md:86: u4/u5.docs/token-efficiency-stack.md:179("RTK 0.49.0 gives Codex instructions, not a hook") and the redirected Headroom links attoken-efficiency-stack.md:39andtoken-session-handbook.md:130: new-machine files, also edited by the u-units.docs/stack.md: a labelled 09-19 snapshot, 11 rows behind.catalogs/us-equities/models.*, no Opus 5.5 entry): needs a decision.codex_job.py:15,273--search: landscape sweep owner.foundation-stack.md:199claude/claude-opus-5andopus[1m]in the settings template: user model choice.SKILL.md:17and thegpt-5-4-promptingskill: upstream text.SOTA sources
e14015d583714f6e62063499dc959a02595150a1; tagv2.21.1resolves to this commit, checked withgh api.egress-policy: auditusage: https://github.com/step-security/harden-runner.99a054ed):crates/zizmor/src/audit/ref_version_mismatch.rsandcrates/zizmor/src/models/version.rs: why a moving major-tag comment raises a Medium finding.cooldown(https://docs.github.com/en/code-security/dependabot/working-with-dependabot/dependabot-options-reference): the 7-day cooldown behind the codeql-action v4.38.2 timing.src/cmds/git/git_cmd.rs(the default 10-commit window, the trailer filter and the[+N lines omitted]form the RTK oracle follows) andsrc/core/guard.rs._, which hid a leaked marker in the first control run.@toon-format/cli4.1.1 (https://github.com/toon-format/toon/releases/tag/v4.1.1): the tabular encoding. The encoder is bundled, with no runtime dependencies.docs/decisions/2026-09-22-actions-hardening-fix-round.md: the operative overturn, "a re-run of that evidence which re-pins the workflow with the step in place".37a3b436(2026-09-20): the precedent for refreshing prospective bindings.docs/lanes.md: the hot-file protocol.docs/acceptance-evidence-policy.md: evidence classes.🤖 Generated with Claude Code