Skip to content

CI hygiene: allow-fail expiry, dead playground workflows, ruleset snapshot (ultraplan Phase 0/2) - #417

Merged
hyperpolymath merged 3 commits into
mainfrom
arena/8040463d-echidna
Oct 9, 2026
Merged

hyperpolymath merged 3 commits into
mainfrom
arena/8040463d-echidna

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Part of the ultraplan (docs/planning/ULTRAPLAN-2026-10-09.adoc), ratified by the owner. Scope chosen: CI hygiene first.

What changes

  • Allow-fail expiry (Phase 2.3, CI: allow-fail units need an owner and an expiry (ultraplan Phase 2.3) #416). All 14 continue-on-error units carry # allow-fail: issue=#416 expires=2026-11-30. scripts/ci/check-allow-fail-expiry.py runs in the workflow linter and fails on a missing marker, a bad date, or an expired one. It does not change what any job does.
  • Dead playground workflows (Phase 0.6). Nine files under echidna-playground/.github/workflows/ never ran, because GitHub reads only the root. Moved unchanged to echidna-playground/ci-templates/, with a README.
  • Ruleset snapshot (Phase 0.5, partial). .github/rulesets/live/ holds the five enforced rulesets. scripts/ci/check-ruleset-drift.py compares live state with them. It needs admin read, so it is not in CI yet.

Verified locally

  • Checker: 14 units found, exit 0 on 2026-10-09, exit 1 once the date passes.
  • Drift check: 5 snapshots match live (drift 0). A changed enforcement state is detected, and so is a missing snapshot.
  • All 35 workflow files parse as YAML. test-issue-regressions.sh passes.

Not in this PR (owner actions)

hyperpolymath and others added 2 commits October 9, 2026 18:40
Read-only recon of the repository, CI, public deployment, issues, and
estate decisions, written up as a proposal for owner ratification:

- truth ledger: claims in README/CLAUDE.md that the code does not back
  (integrity fail-open, unwired certificates, unread --sandbox, SPARK
  gate with enforcement off, unauthenticated public execution endpoint)
- CI/CD measurements from 400 runs, lane-based target design, and a
  disposition for each of the 35 workflow files
- community health and the issue backlog, with dispositions
- phased plan (containment, one verdict, one pipeline, CI, data, status,
  proof assurance, wire, research) with exit criteria
- ruling packet D-A to D-N, each with the (E) arm recommended

No code, workflow, ruleset, or secret was changed.

Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
…t snapshot

Ultraplan Phase 0.6 and Phase 2.3, tracking issue #416.

- Every continue-on-error unit (14) carries '# allow-fail: issue=#416
  expires=2026-11-30'. scripts/ci/check-allow-fail-expiry.py runs in the
  workflow linter and fails on a missing marker, a bad date, or an expired one.
- Nine workflow files under echidna-playground/.github/workflows/ never ran
  (GitHub reads only the root). Moved, unchanged, to echidna-playground/ci-templates/.
- .github/rulesets/live/ snapshots the five enforced rulesets (volatile fields
  stripped). scripts/ci/check-ruleset-drift.py compares live state with it. It
  needs admin read and is not yet in CI (owner action: read-only secret).

No behaviour change to any job: the annotations are comments, and the playground
files were not reachable from any trigger.

Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 6 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: a82bad0d-9158-487b-b24a-5ea1fc8b9fb0

📥 Commits

Reviewing files that changed from the base of the PR and between 645d7a2 and 64f0c0c.


📒 Files selected for processing (25)
  • .github/rulesets/README.adoc
  • .github/rulesets/live/Branch-Floor.json
  • .github/rulesets/live/Immutable-Tags.json
  • .github/rulesets/live/Require-Signed-Commits.json
  • .github/rulesets/live/Secret-Scan-Floor.json
  • .github/rulesets/live/echidna-proof-stack-branch.json
  • .github/workflows/boj-build.yml
  • .github/workflows/chapel-ci.yml
  • .github/workflows/container-ci.yml
  • .github/workflows/live-provers.yml
  • .github/workflows/static-analysis-gate.yml
  • .github/workflows/workflow-linter.yml
  • docs/planning/ULTRAPLAN-2026-10-09.adoc
  • echidna-playground/ci-templates/README.adoc
  • echidna-playground/ci-templates/codeql.yml
  • echidna-playground/ci-templates/governance.yml
  • echidna-playground/ci-templates/hypatia-scan.yml
  • echidna-playground/ci-templates/instant-sync.yml
  • echidna-playground/ci-templates/mirror.yml
  • echidna-playground/ci-templates/scorecard-enforcer.yml
  • echidna-playground/ci-templates/scorecard.yml
  • echidna-playground/ci-templates/secret-scanner.yml
  • echidna-playground/ci-templates/security-checks.yml
  • scripts/ci/check-allow-fail-expiry.py
  • scripts/ci/check-ruleset-drift.py


  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@@ -0,0 +1,73 @@
#!/usr/bin/env python3
@@ -0,0 +1,88 @@
#!/usr/bin/env python3
@hyperpolymath
hyperpolymath marked this pull request as ready for review October 9, 2026 19:10
@hyperpolymath
hyperpolymath merged commit c7c57cf into main Oct 9, 2026
32 of 36 checks passed
@hyperpolymath
hyperpolymath deleted the arena/8040463d-echidna branch October 9, 2026 19:11
hyperpolymath added a commit that referenced this pull request Oct 9, 2026
…n since #412) (#419)

Fixes the lockfile step that has been red on `main` since #412.

PR #412 (dependabot, actions group) moved `mvp-smoke.yml` and
`s4-loop.yml` from `taiki-e/install-action@v2.87.22` to `v2.87.26`, but
did not update `actions.lock`. The `Verify immutable action lockfile`
step then fails, which makes `lint-workflows` / Workflow Security Linter
red on `main`.

The change is one lock entry: `v2.87.26` at the upstream tag commit
`f7e5d7c`, with the same `owner_id` and `repo_id`. No workflow
references `v2.87.22` any more, so that entry is replaced.

Verified:
- No workflow file references an unlocked action ref (checked by parsing
every `uses:`).
- The authoritative `gh-actions-lock --rescan --no-fix` could not be run
from the agent sandbox (its release download is outside the allow-list).
CI is the verifier here.

Note: this PR was prepared after #417 had already merged, so it is based
on current `main`.

Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
hyperpolymath added a commit that referenced this pull request Oct 9, 2026
… check) (#423)

Removes Python from the CI checkers. The estate language policy bans
Python, and #417 added two Python checkers. They are the only `.py`
files in the repository, so the governance "banned-language files" check
fails on them.

`main` also went red on the Static Analysis Gate after #417 (it passed
at `645d7a2`). These files are the first suspect for that. The Hypatia
job log is not readable from the sandbox, so this is not confirmed.
Please check the gate on `main` after this lands.

## What changed
- `scripts/ci/check-allow-fail-expiry.sh` replaces the Python version.
It is bash with GNU `date`, and it keeps the same output and exit codes.
- `scripts/ci/check-ruleset-drift.sh` replaces the Python version. It is
bash with `gh` and `jq`, and it keeps the same canonicalisation and exit
codes.
- The linter step calls the script through `bash`. The rulesets README
and the ultraplan are updated to match.

## How it was checked
- Allow-fail: output and exit codes match the Python version at
2026-10-09 (14 units, exit 0) and 2026-12-01 (exit 1). Missing-marker,
invalid-date and warning-window fixtures also match.
- Drift: zero drift against the five live rulesets. A tampered snapshot
gives the same two findings as the Python version. `--write` reproduces
the committed snapshots after canonicalisation.
- The Python-free tree has no `.py` files (`git ls-files '*.py'` is
empty).

---------

Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants