Skip to content

GitHub practice re-check 2026-09-25: Actions allow-list (selected), dated SOTA comparison, drift recorded - #302

Merged
seathatflowsinourveins merged 5 commits into
mainfrom
claude/github-practice-recheck-20260925
Sep 25, 2026
Merged

seathatflowsinourveins merged 5 commits into
mainfrom
claude/github-practice-recheck-20260925

Conversation

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator

Scope and base

  • Lane: lane:foundation. This re-checks our GitHub practice against current primary sources (2026-09-25) and closes the one real policy gap.
  • Base: rebased onto origin/main at the time of the hot-file commit.
  • What was already current (verified, nothing to change): every action pin is on its current release (checkout v7.0.1, codeql-action v4.38.1, scorecard-action v2.4.4, harden-runner v2.21.1, attest v4.2.2, zizmor 1.30.1). The Node 20 removal on 2026-09-23 does not affect any of them. No workflow uses pull_request_target or workflow_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 plus step-security/harden-runner@* and ossf/scorecard-action@*.
    • verified_allowed: false.
    • sha_pinning_required: true.
    • Workflow permissions stay at default read. can_approve_pull_request_reviews stays true, because catalog-freshness propose must open PRs and required approvals are 0 (see the approval guard in 2026-09-23-bot-pr-dispatch.md).
    • Fork approval: all_external_contributors.
  • tests/test_workflow_hardening.py: ActionsAllowListTests fails CI offline if any workflow uses: 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:
    • the source comparison;
    • the adoption of the allow-list, with its after-GET and rollback;
    • the fork-approval after-GET, which closes a pending step;
    • read-back ownership: private agent-ecosystem github_settings.py observe mode;
    • Scorecard structural alerts accepted, each with an overturn: Code-Review and Branch-Protection need a second human; Maintained depends on repo age; Fuzzing → the property-based-testing skill trial; CII badge = an optional owner step;
    • SLSA v1.2 Source L3 as the target (L4 needs two humans);
    • dated non-adoptions: merge queue, code_quality/code_coverage, required_reviewers, secret-alert-resolution, partner validity checks, Copilot-only rules;
    • the §8 pip-graph status.
  • 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)

  • Before-GET, 2026-09-25T22:56:28Z: {"enabled":true,"allowed_actions":"all","sha_pinning_required":true}. selected-actions answered 409.
  • PUT of actions/permissions and actions/permissions/selected-actions, taken from the committed JSON.
  • After-GET, 22:56:29Z: allowed_actions: selected, sha_pinning_required: true, github_owned_allowed: true, verified_allowed: false, patterns_allowed as committed. Workflow permissions read / true. Fork approval all_external_contributors.
  • Confirmation on main after the change, as a peer session asked:
  • Read-back: agent-ecosystem scripts/github_settings.py --check → native-agent-stack/actions-selected-actions: pass, actions-sha-pinning: pass, overall ok: true. This is the companion agent-ecosystem PR.
  • Rollback: 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

Evidence-class table

Claim Class
Live settings before and after native_proven (read-only GET, owner gh)
Allow-list lets real runs through native_proven (2 successful workflow_dispatch runs on main)
Every workflow uses: is allowed offline test (ActionsAllowListTests)
Current-practice comparison primary-source review (GitHub changelog and docs, OpenSSF Scorecard, SLSA v1.2, zizmor), dated 2026-09-25

Commands run

gh api repos/seathatflowsinourveins/native-agent-stack/actions/permissions            # before / after
gh api --method PUT .../actions/permissions --input <from .github/actions-permissions.json>
gh api --method PUT .../actions/permissions/selected-actions --input <same>
gh workflow run token-report.yml --ref main ; gh workflow run scorecard.yml --ref main  # both success
uv run --no-project --with jsonschema --with pyyaml python -m unittest discover -s tests -p "test_workflow*.py"   # 66 OK
python3 scripts/validate.py                                                             # passed

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 added sha_pinning_required to every documented PUT.

  • Independent review: a separate headless claude -p session (Sonnet). Result: needs_changes → 3 findings, all fixed in the repair commit:

    The reviewer independently verified the rest as clean: every live GET, both run conclusions, tests, and that allowed_actions=selected covers every uses: on main.

  • Codex cross-family review: skipped. Codex is at its usage limit until 2026-09-30.

🤖 Generated with Claude Code

Scout and others added 5 commits September 25, 2026 19:16
…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>
@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Sep 25, 2026
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@seathatflowsinourveins
seathatflowsinourveins enabled auto-merge (squash) September 25, 2026 23:19
@seathatflowsinourveins
seathatflowsinourveins merged commit 8d691c1 into main Sep 25, 2026
24 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the claude/github-practice-recheck-20260925 branch September 25, 2026 23:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant