Repository navigation
Gate PRs on zizmor's online audits, audit dependabot.yml, rename the CI lock, guard workflow PR approval - #233
Merged
Conversation
…CI lock, guard workflow PR approval Implements the verified 2026-09-25 GitHub audit gaps for this repository: - validate.yml: the required zizmor step runs the online audits with the read-only job token and fails on findings (overturns closure section 4's rejected alternative); both zizmor runs audit "." so dependabot.yml is collected. Regression tests pin the token and forbid --offline. - catalog-freshness.yml / saturation-tracking.yml: same-line comments on the 5 job-level grants zizmor pedantic flagged; saturation test uses scopes(). - tests: cross-workflow guard that no workflow can approve a PR (the can_approve setting stays on for propose's gh pr create); dependabot.yml zizmor pass plus a no-cooldown failing control. - .github/requirements-ci.lock -> requirements-ci.txt (byte-identical) so the dependency graph can see zizmor; pip version updates stay off. - dependabot.yml header and closure section 8 record why npm/uv/NuGet have no version-update entry and that OSV-Scanner is the only alert path for graph-invisible locks. - Fork PR approval: decision recorded; the owner applies the PUT (no live setting changed here). 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. |
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
seathatflowsinourveins
pushed a commit
that referenced
this pull request
Sep 25, 2026
…y branch evidence.json was rebuilt from main's copy. This branch's convergence-record entry and its ten sim-capacity file registrations were re-applied. The CI lock path this branch still carried was not re-registered, because #233 renamed it. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
seathatflowsinourveins
pushed a commit
that referenced
this pull request
Sep 25, 2026
…porate-action and credential guards Main moved 19 commits since 5ed8538. The conflicts were resolved by keeping both sides: - native_strategy.py: AdaptiveStrategy takes both halted= (E4) and corporate_action_guard= (#222). The constructor keeps the halt and callback-fault state and the corporate-action guard state. cancel_expired keeps the halted-exit skip (E4) and gains #222's symbols= immediate-cancel set. - runner.py: the strategy gets both halted=controller.is_halted and the corporate-action guard. The shutdown runs stop_halt_seed() inside #222's try/finally, so the corporate-action refresh cleanup still runs if the halt-seed stop raises. - source-hashes.json: the union of both sides' keys, every digest recomputed from the merged tree. - manifests/evidence.json: main's registry, plus the branch's new engine-nautilus probe, with all stale digests refreshed. The branch's entries for the renamed CI lock (#233) and the renamed grype fixture (#224) are dropped. Checks on the merged tree: - pinned rc5 runtime, 23 paper modules: 1,320 tests OK (2 skipped); - full python3 -m unittest: 4,944 tests OK (600 skipped); - validate.py, evidence_manifest.py --check, and the source-hashes manifest test: pass. 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.
Summary
Implements the verified gaps from the 2026-09-25 GitHub audit for this repository. The workflow YAML and
dependabot.ymlchanges are in this one PR. No live repository setting is changed. The decision records are the new section "GitHub hardening follow-up (2026-09-25)" indocs/decisions/2026-09-22-github-automation-closure.mdand "Approval guard (2026-09-25)" indocs/decisions/2026-09-23-bot-pr-dispatch.md.validate.yml's required zizmor step getsGH_TOKEN: ${{ github.token }}and drops--offline, so impostor-commit, known-vulnerable-actions, ref-confusion and ref-version-mismatch findings failvalidate. No scope is added.ValidateZizmorGateTestspins the token line and forbids--offline,--no-exit-codes, SARIF output andcontinue-on-error, because zizmor 1.30.1 with no token silently falls back to offline mode and exits 0. This overturns closure section 4's rejected "online PR gate": 90 zizmor analyses on main, 0 results.dependabot.ymlvalidate.ymlandsecurity-scan.yml'szizmor-online) now audit.. NewDependabotConfigSecurityCoverageTests: the file passes, and a copy withoutcooldownexits 13 withdependabot-cooldown.# whycomments on the 5 grants incatalog-freshness.yml(propose) andsaturation-tracking.yml.test_saturation_ledger.pynow compares throughscopes(). At pedantic persona, zizmor'sundocumented-permissionsfindings go from 4 to 0.can_approve_pull_request_reviewssetting stays on, becauseproposeneeds it forgh pr create. NewNoWorkflowApprovesPullRequestsTestsallowspull-requests: writeonly oncatalog-freshness.yml:proposeand allows noactions: write. It fails on any review/approve call, onwrite-alland on inline permissions. The overturn condition is recorded: move to an App token before requiring approvals..github/requirements-ci.lockto.github/requirements-ci.txt(byte-identical, same SHA-256). Live references are updated; pip version updates stay off. The post-merge SBOM check and its fallback are in section 8. OSV-Scanner is recorded as the only alert path for the NuGet and.lock-named pip locks.dependabot.ymlheader, a section 8 bullet with an overturn condition, and the ownership sentence indocs/github-automation.md.gh api -X PUT ... approval_policy=all_external_contributorscommand given in the record; this PR does not change the setting.Kept as decided (not edited):
blueprints/convergence-practice/ci-security/qualified-workflow.yml.txtis a hash-bound experiment input.docs/github-automation-evidence.jsonstay as they were run.catalogs/landscape/foundation.json,layer-verdicts-20260922.jsonand the handbook still names the old lock. The closure record corrects it until the next lane run.The evidence hashes in
manifests/evidence.jsonare refreshed for every registered file this PR edits.Checks (local, this head)
python3 scripts/validate.pyand every othervalidate-job integrity check: exit 0--offline --no-config --no-ignores --persona regular --strict-collection .: 19 inputs, no findingspython3 -m unittest(with the pinned zizmor on PATH): 4752 tests, 604 skipped, 2 failures. Both also fail onorigin/main6568f47 on this Mac and are unrelated to this PR:test_new_host_grand_listtest_recorded_host_gets_non_null_measured_in_the_grand_list(the local user name matches insiderecorded-host; open Match the user name as a whole token in host_receipts.sanitize() #227) andtest_adoption_bootstrap_macosLlamaWrapperQuotingTests(SIP/varsymlink; open Make the macOS bootstrap tests pass on a SIP-enabled Mac without npm (tests only; supersedes #178) #228)node --test blueprints/native-skill-practice/test-contract.cjs: 6 pass, 0 failBefore merging, check that this PR's
validatelog has no zizmor "offline mode" warning.🤖 Generated with Claude Code