Repository navigation
GitHub practice re-check 2026-09-25: Actions allow-list (selected), dated SOTA comparison, drift recorded - #302
Merged
seathatflowsinourveins merged 5 commits intoSep 25, 2026
Conversation
…t, allow-list test, doc closure Coordinator-verified live GETs today confirm allowed_actions is still "all" while every third-party `uses:` in this repository is already step-security/harden-runner or ossf/scorecard-action. Commit the target that tightens it: - .github/actions-permissions.json (new): committed target for actions/permissions + selected-actions + permissions/workflow (allowed_actions: selected, github_owned_allowed: true, patterns_allowed: [step-security/harden-runner@*, ossf/scorecard-action@*], sha_pinning_required: true; workflow_permissions.can_approve_pull_request_reviews stays true with a can_approve_reason citing the 2026-09-23 bot-pr-dispatch approval guard; fork_pr_contributor_approval: all_external_contributors). - tests/test_workflow_hardening.py: ActionsAllowListTests asserts every workflow's `uses:` is GitHub-owned or matches a patterns_allowed entry, and that the committed JSON targets allowed_actions "selected" with sha_pinning_required true. - docs/decisions/2026-09-22-github-automation-closure.md: append "2026-09-25 re-check against current practice" -- primary-source comparison against the 10 cited upstream references, the allow-list adoption (After-GET: pending coordinator), the fork-approval after-GET (all_external_contributors, closing the prior pending step), settings read-back ownership, the 5 open Scorecard alerts accepted with overturns, the SLSA v1.2 Source-track L3 target, 6 dated non-adoptions, the open section-8 pip graph-update status, and already-current pins. - docs/github-automation.md: mark "Ruleset upgrade, 2026-09-22" superseded by the current .github/main-ruleset.json and the closure record, and replace the "until then the live value is unchanged" fork-approval wording with the dated after-GET. Tests: uv run --no-project --with jsonschema --with pyyaml python -m unittest tests.test_workflow_hardening -v (57 passed); ... discover -s tests -p "test_workflow*.py" (66 passed); plus the six other tests/ modules that reference docs/github-automation.md or this closure record (234 passed, 6 skipped -- pre-existing platform-only skips). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Independent review found two supported defects in b6134fe6: - .github/actions-permissions.json used an invented key `fork_pr_contributor_approval` for the fork-PR-contributor-approval setting. The real REST field, already verified live and used correctly elsewhere in this same record (closure.md GET at :1390 and PUT at :1403/:1405), is `approval_policy`. Renamed so the committed target is a literal mirror of the endpoint it represents. - The "allowed_actions: selected adoption" bullet in the closure record had no rollback command, unlike the neighboring fork-approval bullet which pairs Rollback with Overturn. Added a one-line revert PUT (back to allowed_actions=all) so the coordinator has an immediate unblock path if a needed action is missing from patterns_allowed after the live PUT. Tests: uv run --no-project --with jsonschema --with pyyaml python -m unittest tests.test_workflow_hardening -v -> 57 passed (includes ActionsAllowListTests, unaffected by either fix). Full test_workflow*.py discovery -> 66 passed. Also ran the other three test modules whose docstrings reference the closure record (test_adoption_bootstrap_macos, test_workflow_security_coverage, test_osv_lockfile_coverage) -> 136 passed, 5 skipped (macOS-only), confirming neither fix touches their assertions. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ha_pinning_required Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… the two changelog sources, record the sota-sources ruleset drift Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
seathatflowsinourveins
enabled auto-merge (squash)
September 25, 2026 23:19
seathatflowsinourveins
deleted the
claude/github-practice-recheck-20260925
branch
September 25, 2026 23:59
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 and base
lane:foundation. This re-checks our GitHub practice against current primary sources (2026-09-25) and closes the one real policy gap.origin/mainat the time of the hot-file commit.pull_request_targetorworkflow_run. Dependabot's 7-day cooldown is at least the new 3-day default. The 3 rulesets match the committed JSON exactly.What changes
.github/actions-permissions.json(new): the committed Actions policy.allowed_actions: selected: GitHub-owned actions plusstep-security/harden-runner@*andossf/scorecard-action@*.verified_allowed: false.sha_pinning_required: true.read.can_approve_pull_request_reviewsstaystrue, because catalog-freshnessproposemust open PRs and required approvals are 0 (see the approval guard in2026-09-23-bot-pr-dispatch.md).all_external_contributors.tests/test_workflow_hardening.py:ActionsAllowListTestsfails CI offline if any workflowuses:falls outside that policy.docs/decisions/2026-09-22-github-automation-closure.md: a new section, "2026-09-25 re-check against current practice", recording:github_settings.pyobserve mode;code_quality/code_coverage,required_reviewers, secret-alert-resolution, partner validity checks, Copilot-only rules;docs/github-automation.md: the stale "Ruleset upgrade, 2026-09-22" text is marked superseded, and the fork-approval wording is replaced with the dated after-GET.Live change (applied by the coordinator, owner gh)
{"enabled":true,"allowed_actions":"all","sha_pinning_required":true}.selected-actionsanswered 409.actions/permissionsandactions/permissions/selected-actions, taken from the committed JSON.allowed_actions: selected,sha_pinning_required: true,github_owned_allowed: true,verified_allowed: false,patterns_allowedas committed. Workflow permissions read / true. Fork approvalall_external_contributors.mainafter the change, as a peer session asked:token-report(harden-runner): success, https://github.com/seathatflowsinourveins/native-agent-stack/actions/runs/36198993979scorecard(harden-runner + ossf/scorecard-action): success, https://github.com/seathatflowsinourveins/native-agent-stack/actions/runs/36198995108scripts/github_settings.py --check→native-agent-stack/actions-selected-actions: pass,actions-sha-pinning: pass, overallok: true. This is the companion agent-ecosystem PR.gh api --method PUT repos/seathatflowsinourveins/native-agent-stack/actions/permissions -f allowed_actions=all -F enabled=true -F sha_pinning_required=true.SOTA sources
scripts/github_settings.pyobserve mode; no new checker.Evidence-class table
workflow_dispatchruns onmain)uses:is allowedActionsAllowListTests)Commands run
Review
Writer: one writer unit with an adversarial verifier and one repair round. Two findings were fixed: the fork-approval field is renamed to the real
approval_policy, and a rollback was added. The coordinator addedsha_pinning_requiredto every documented PUT.Independent review: a separate headless
claude -psession (Sonnet). Result: needs_changes → 3 findings, all fixed in the repair commit:sota-sourcesruleset drift was not surfaced. It is now recorded as open drift for Top rule: research first, never self-write without a SOTA source; required sota-sources check #294's owner; applying it would block every open PR that predates the job.The reviewer independently verified the rest as clean: every live GET, both run conclusions, tests, and that
allowed_actions=selectedcovers everyuses:onmain.Codex cross-family review: skipped. Codex is at its usage limit until 2026-09-30.
🤖 Generated with Claude Code