Skip to content

fix(ci): echidna-verify — honest absence Guards for agda-lol & idris2-a2ml - #828

Merged
hyperpolymath merged 2 commits into
mainfrom
fix/748-echidna-honest-guards
Sep 17, 2026
Merged

hyperpolymath merged 2 commits into
mainfrom
fix/748-echidna-honest-guards

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Closes #748.

The disease (before this PR)

Neither job carried the Nothing to type-check guard that idris2-avow got:

  • agda-lol: find lol/proofs/theories / cd lol/proofs — crashes at the Type-check step. Corpora evicted to the lol repo.
  • idris2-a2ml: cd a2ml — crashes AFTER an ~18-minute pack bootstrap, every single run. Corpus evicted to the a2ml repo.

The fix

Each job opens with a Guard — proofs are evicted from this repo step immediately after checkout: if the corpus directory is absent it emits a ::notice (honest, visible in the UI) and sets present=false; the expensive steps (Cache pack, Install Idris2 via pack, Type-check normative A2ML core / Install Agda, Type-check proofs, Postulate audit) are conditioned on steps.guard.outputs.present == 'true'. Upload log keeps if: always() (already ignores missing files).

Pulling the guard ahead of the toolchain spend is strictly stronger than the avow job's in-step guard — the cron stops burning install/bootstrap minutes on a 404. If a corpus ever returns, the jobs verify it again unchanged; they are dormant, not deleted, so the check names keep reporting on the branch on every proof-touching run.

Also in the PR:

  • Workflow header Scope comment now states the corpora are evicted and explains the Guard contract.
  • CICD-WORKFLOW-CATALOG.md: row claimed "Echidna smart contract verification" — this is the ECHIDNA trust pipeline (Agda/Idris2 proofs), not the smart-contract fuzzer. Description corrected + guard behaviour documented (docs ride the PR per protocol).

Validation

  • PyYAML parses the workflow; gating verified programmatically (exactly the intended steps GATED; idris2-avow untouched — 0 new if: lines there)
  • bash -n on both extracted guard blocks
  • git diff origin/main --stat: 2 files, +44/−1; working tree clean of foreign edits

Close-out per protocol on merge: evidence comment → close #748 completed → board item → Done; catalog/GLOSSARY sweep already in this diff.

…-a2ml jobs

Both jobs crashed on proof corpora that were permanently evicted from this
repo (agda-lol: find/cd lol/proofs failed at the Type-check step after the
apt install; idris2-a2ml: cd a2ml failed AFTER an ~18-minute pack bootstrap,
every run). idris2-avow got the 'Nothing to type-check' in-step guard long
ago; these two never did (issue #748).

Each job now opens with a presence Guard right after checkout that emits a
honest ::notice and sets present=false; the toolchain-install, type-check
and audit steps (a2ml: cache/install/type-check) run only when the corpus
is present. If the corpora ever return, the jobs verify them again,
unchanged. Job outcome is green-but-honest, not silently-so: the notice
says the corpus is absent.

Corrected CICD-WORKFLOW-CATALOG.md: the row claimed 'Echidna smart
contract verification' — this workflow is the ECHIDNA trust pipeline
(Agda/Idris2 proofs), not the smart-contract fuzzer — and now documents
the guard behaviour.

Validation: PyYAML parse, bash -n on both guard blocks, diff = 2 files
+44/-1, working tree clean of foreign edits.

Refs #748
@coderabbitai

coderabbitai Bot commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

Next included review available in 41 minutes.

Check out review usage here.

View limit details

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

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

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: fbf6667d-095d-4eff-93f5-eef53b295873

📥 Commits

Reviewing files that changed from the base of the PR and between cfbb662 and fb77bf6.

📒 Files selected for processing (2)
  • .github/workflows/echidna-verify.yml
  • CICD-WORKFLOW-CATALOG.md

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.

@hyperpolymath
hyperpolymath merged commit 3cdaa69 into main Sep 17, 2026
17 of 22 checks passed
@hyperpolymath
hyperpolymath deleted the fix/748-echidna-honest-guards branch September 17, 2026 20:11
@sonarqubecloud

Copy link
Copy Markdown

hyperpolymath added a commit that referenced this pull request Sep 17, 2026
…; no ruleset pins its context) (#836)

Refs #748 (eviction half, now sanctioned by the retirement ruling).

## Ruling applied

The a2ml project is **officially retired** (owner ruling, 2026-09-17).
#828's presence Guards assumed wake-if-corpus-returns; for A2ML the
corpus never can, so the `idris2-a2ml` job is **evicted, not guarded**.
Job block, `push: paths` filters, detect-job regex alternatives, and
`trust-summary` references all removed/reworded.

## Anti-deadlock verification (before removing a check context)

- **Live org ruleset** `Optimus-Branch` (#23359343, active, org scope)
required contexts: `CodeQL`, `CodeRabbit`, `SonarCloud Code Analysis`,
`governance / Code quality + docs`, `.github/dependabot.yml`, `uses ⊆
actions.lock`. **No proof contexts.**
- `config/rulesets/*.json` (the canon ruleset files): no proof contexts.
- Conclusion: deleting the job cannot deadlock any PR. The in-file claim
"`Idris2 - a2ml proofs` is a REQUIRED context" was **stale** — corrected
in the filter-rationale comment.

## What survives (unchanged)

- `agda-lol` — full gate-set Guard from #828 (lol is not retired).
- `idris2-avow` — its original in-step guard.
- `trust-summary` — dangling `needs:` removed; the a2ml row becomes an
informational `_evicted_` note (a table pretending the job ran would be
the new dishonesty).
- Always-on-PR shape **deliberately kept** even though the
required-context rationale died: the Guards cost seconds, and this
workflow doubles as the repo's proof-hygiene canary.

## Validation

- PyYAML parse: jobs = `detect-proof-changes, agda-lol, idris2-avow,
trust-summary`; no dangling `needs`
- Residual `a2ml` mentions are **only** the retirement annotations
(scope note, stale-context correction, summary row)
- Diff: 2 files, +23/−110 (working-tree dirt quarantined — only the two
intended files staged)
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.

echidna-verify: required context Idris2 — a2ml proofs is vacuously green on every PR and red on every cron

1 participant