Skip to content

chore: unblock CI — revert 5 dependabot major bumps + .trusted-base-ignore FP fix + deno.lock populate#128

Merged
hyperpolymath merged 3 commits into
mainfrom
chore/revert-dependabot-major-bumps-broke-ci
May 30, 2026
Merged

chore: unblock CI — revert 5 dependabot major bumps + .trusted-base-ignore FP fix + deno.lock populate#128
hyperpolymath merged 3 commits into
mainfrom
chore/revert-dependabot-major-bumps-broke-ci

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

@hyperpolymath hyperpolymath commented May 30, 2026

Summary — auto-merge deadlock breaker

This branch bundles three required-check fixes that had been split across PRs #126, #127, #128 — but each PR's required-checks failed because they depended on the others. Solo PRs deadlocked; this PR closes the chain.

Bundled commits

  1. chore(deps): revert 5 dependabot major-version bumps that broke CI (original chore: unblock CI — revert 5 dependabot major bumps + .trusted-base-ignore FP fix + deno.lock populate #128 scope)

    Five dependabot major bumps merged 2026-05-29 without call-site updates: axum 0.7→0.8 (chore(deps): bump axum from 0.7.9 to 0.8.9 #120), rand 0.9→0.10 (chore(deps): bump rand from 0.9.4 to 0.10.1 #121), criterion 0.5→0.8 (chore(deps): bump criterion from 0.5.1 to 0.8.2 #122), nom 7→8 (chore(deps): bump nom from 7.1.3 to 8.0.0 #123), rustyline 15→18 (chore(deps): bump rustyline from 15.0.0 to 18.0.0 #124). Each shipped real API breaks:

    • rand 0.10 renamed RngRngExt (because upstream rand_core renamed RngCoreRng); use rand::Rng no longer brings random_range / random in scope.
    • nom 8 moved from closure-based to trait-based combinators (alt(args)(input)alt(args).parse(input)).
    • axum 0.8 transitively pulls a different tower-http (compile mismatch in follow_redirect/policy/mod.rs).

    Reverts all 5 back to the May-28 working state. cargo check --lib cleans in ~2 min locally.

  2. chore(governance): populate empty deno.lock with minimal valid v4 lockfile (was chore(governance): populate empty deno.lock with minimal valid v4 lockfile #127)

    Replaces the 0-byte deno.lock (tracked since 3b03087 for sweep visibility) with {"version":"4","remote":{}}. Unblocks governance / Language / package anti-pattern policy which fails on deno run lockfile parse before reaching the actual .ts walk.

  3. chore(governance): clear 12 trusted-base false-positive escape hatches (was chore(governance): clear 12 trusted-base false-positive escape hatches #126)

    Adds .trusted-base-ignore for 4 Rust pattern-detector tables (10 hits) — same FP class as the believe_me audit in docs/PROOF-NEEDS.md (zero real escapes). Adds -- AXIOM: / -- TRUSTED: magic-word lines in the script's 5-line window for two real Agda postulates (funext, Conflicts).

Why bundled

Each individual PR failed its OWN required checks because it depended on the others' fixes:

Bundling resolves the chicken-and-egg. #126 and #127 are closed as superseded with backlinks.

Verification

Seam-gaps captured (out of scope)

  1. Dependabot major bumps + always-auto-merge interact badly. Per the standing estate hook feedback_always_automerge_prs, auto-merge is universal. For major bumps without paired code updates, that's structurally unsafe — the only checks that DID gate the merges (validation gates) don't compile the workspace. Worth a follow-up: either Dependabot config to draft major bumps, or a per-repo guard requiring manual review for major-version-only PRs.

  2. standards check-ts-allowlist.ts could pass --no-lock — the script is a read-only file walker that doesn't import anything, so the lockfile is irrelevant. Adding --no-lock makes it robust to this entire failure class estate-wide.

  3. standards rust-ci-reusable doesn't pass --lockedcargo check / cargo test happily auto-update Cargo.lock during CI, masking version drift. Adding --locked to the reusable would surface drift the first time it happens, instead of when the next major hits.

Test plan

Refs: #92 (broader baseline failures — this PR addresses the compile + trusted-base + language-policy slices). Supersedes #126, #127.

Five dependabot major bumps merged 2026-05-29 in a single chain without
the call sites being updated:

  #120  axum       0.7.9   → 0.8.9
  #121  rand       0.9.4   → 0.10.1
  #122  criterion  0.5.1   → 0.8.2
  #123  nom        7.1.3   → 8.0.0
  #124  rustyline  15.0.0  → 18.0.0

All five auto-merged green (per the estate's auto-merge hook) because
`Validate K9 contracts` / `governance / Code quality` are content checks
that don't compile the workspace. The real `Rust CI` job and the
`Live Provers` workflow have been red on `main` for every push since:

  error[E0599]: no method named `random_range` found for struct `StdRng`
                in the current scope
    --> src/rust/agent/swarm.rs:250:32
    ::: .../rand-0.10.1/src/rng.rs:159:8

  error[E0618]: expected function, found `Choice<(fn(_) -> Result<…>>
    --> src/rust/provers/lean.rs:24:38
    [nom 8's `alt(...)` no longer returns a callable closure]

Root cause: each bump shipped a real API break that needed call-site
updates:

  * rand 0.10 renamed the `Rng` trait to `RngExt` (because upstream
    `rand_core` renamed `RngCore` → `Rng`). Existing `use rand::Rng`
    no longer imports `random_range` / `random` methods.

  * nom 8 moved from closure-based to trait-based combinators —
    `alt(args)(input)` is now `alt(args).parse(input)` everywhere.

  * axum 0.8, criterion 0.8, rustyline 18 also ship breaking changes
    that the call sites have not been updated for (reverted in the
    same commit to keep CI green; bumping any one of them individually
    requires the matching code update).

Resolution: revert all five back to the May-28 working state. Locally
`cargo check --lib` cleans in ~2 min against this lockfile.

The bumps are NOT being thrown away — they should land again as 5
follow-up PRs, each bundling the matching code update. That keeps
"dependabot caught a major version" signal alive while preventing
this class of break.

Effect: `Rust CI`, `Live Provers` (Tier-1 + Tier-2 matrices) and
`MVP Smoke` should return green on this branch.

Refs: #92 (broader baseline failures — this PR addresses the
compile-error slice that gates everything downstream).
…kfile

`deno.lock` has been an empty (0-byte) file since commit 3b03087
("chore: track (empty) deno.lock for M5 sweep", 2026-05-21). Deno 2.x
treats empty lockfiles as a parse error:

    error: Failed reading lockfile at '/.../deno.lock'
    Caused by: Lockfile was empty

The estate governance check
(`governance / Language / package anti-pattern policy` in
governance-reusable.yml) runs
`deno run --allow-read .standards-checkout/scripts/check-ts-allowlist.ts`
which fails on lockfile parse before reaching the actual `.ts` walk.

Fix: write the minimal valid Deno-2 lockfile JSON:

    { "version": "4", "remote": {} }

This preserves the "track lockfile" intent of 3b03087 (the file stays
committed and visible to estate-wide sweeps) while letting Deno 2.x
parse it. When real remote imports are added, `deno cache --lock` will
populate the `remote` object on its own.

Effect: `governance / Language / package anti-pattern policy` returns
green; the check-ts-allowlist.ts walker actually runs.

Refs: #92 (the broader baseline failures, this PR addresses the
language anti-pattern slice only).
The estate's check-trusted-base.sh (standards#203) flagged 12 markers on
main since #112 (2026-05-28) — all 12 are detector-pattern false
positives, structurally identical to the believe_me FP audit recorded
in docs/PROOF-NEEDS.md §"believe_me audit (2026-05-18)" (21 hits, zero
real escapes).

Resolution:

* 10 Rust hits across 4 files are pattern-detector tables. Each holds a
  `Vec<DangerousPattern>` (or equivalent) that *enumerates* the very
  `unsafePerformIO` / `unsafeCoerce` / `Obj.magic` strings the scanner
  is hunting. The scanner's naive substring grep can't tell "uses the
  pattern" from "names the pattern in a detector table". Added a new
  `.trusted-base-ignore` (whole-path exemption, format mirrors the
  scanner's documented spec) covering the four files:
    - src/rust/verification/axiom_tracker.rs
    - crates/echidna-core-spark/src/axiom_tracker.rs
    - src/rust/corpus/agda.rs
    - src/rust/corpus/idris2.rs

* 2 Agda postulates are real well-justified axioms:
    - `funext` (function extensionality) in proofs/agda/Basic.agda
    - `Conflicts` (abstract parameter) in proofs/agda/SoundnessPreservation.agda
  Both already had INTENTIONAL AXIOM / INTENTIONAL PARAMETER prose
  documentation, but outside the script's 5-line preceding-marker
  window. Added an `-- AXIOM:` / `-- TRUSTED:` magic-word line
  immediately before each `postulate` so the scanner sees it.

Effect: `governance / Trusted-base reduction policy` should now report
[OK] (12 markers exempted via .trusted-base-ignore + inline magic), up
from the 12/12 undocumented failure on main.

Refs: #92 (broader baseline failures, this PR addresses the
trusted-base slice only).
@hyperpolymath hyperpolymath changed the title chore(deps): revert 5 dependabot major-version bumps that broke CI chore: unblock CI — revert 5 dependabot major bumps + .trusted-base-ignore FP fix + deno.lock populate May 30, 2026
@hyperpolymath hyperpolymath merged commit 4920e04 into main May 30, 2026
40 of 44 checks passed
@hyperpolymath hyperpolymath deleted the chore/revert-dependabot-major-bumps-broke-ci branch May 30, 2026 14:42
hyperpolymath added a commit that referenced this pull request May 30, 2026
`MVP Smoke (Best Effort)` has been failing with exit code 127 on every
push:

  /home/runner/work/_temp/…/sh: line 1: just: command not found
  ##[error]Process completed with exit code 127.

The workflow's final step is `just --justfile Justfile mvp-env`, but the
`ubuntu-latest` runner image does not include `just` and no step
installs it. Adding the canonical SHA-pinned `taiki-e/install-action`
between `Cache Cargo` and `Build release` (also runtime-relevant for
the smoke recipe) restores green.

SHA pin (`184183c… # v2.78.1`) matches the estate convention already
used across hypatia (ci.yml, security.yml, tests.yml,
build-gossamer-gui.yml). Tool selector `tool: just` is the standard
single-package form.

Effect: `MVP Smoke (Best Effort)` returns success on this branch and on
every subsequent push to `main`.

Refs: noted as one of the orthogonal failures on PR #128's checks
during the 2026-05-30 dependabot-deadlock triage.
hyperpolymath added a commit that referenced this pull request May 30, 2026
…ridge

Chapel-CI has been red on every push since the workflow + sources
were authored (commit e44815a, 2026-04-20) — zero successful runs in
the 100-run history. Two independent pre-existing breakages:

## Job 1: `Compile Chapel Metalayer` — `extern "C" { ... }` parse error

`chapel_ffi_exports.chpl` wrapped its 35 prover-id / category-id
`c_int` constants in a single `extern "C" { ... }` block. That syntax
is the Chapel "extern blocks" feature, which requires the Chapel
compiler to be built with LLVM + clang headers available. The
official `chapel-2.3.0-1.ubuntu24.amd64.deb` the workflow installs is
not built with that combination — so the parser bails at line 29:

  chapel_ffi_exports.chpl:29: syntax error: near '{'
  …
  parallel_proof_search.chpl:186: syntax error: near 'proc'   (cascade)

The constants are also `#define`d on the C side in
`src/zig_ffi/chapel_ffi_exports.h` — that is the canonical copy any
non-Chapel consumer reads. The Chapel copy only needs to be visible
to Chapel code; emitting it as a C-visible symbol via an `extern`
block is unnecessary. Dropping the wrapper and keeping the 35
declarations as plain module-level `const`s fixes the parse without
losing any contract. (Documented in-place; the comment block above
the constants points to the C header as the source of truth.)

## Job 2: `Build & Test Zig FFI Bridge` — Zig 0.14 API on 0.13 install

`src/zig_ffi/build.zig` line 1 already documents
`// Compatible with Zig 0.14+/0.15+`. Lines 23, 52, 74 use
`b.addLibrary(.{ ... .linkage = … })` which is the 0.14+ unified
`Build.addLibrary` API; Zig 0.13 only exposes the older
`addSharedLibrary` / `addStaticLibrary`. The workflow pinned
`mlugg/setup-zig@… with: version: 0.13.0` for both `zig-ffi` and
`rust-chapel-real` jobs, so every run hit:

  build.zig:23:18: error: no field or member function named 'addLibrary' in 'Build'

Bumping both pins to `0.14.0` matches what the source already
declares.

## Effect

Both jobs should compile on this branch. `rust-chapel-feature` (Job
3) was previously skipped via the `needs: zig-ffi` dependency — with
Job 2 green, Job 3 actually runs. Job 4 (`rust-chapel-real`) is
`continue-on-error: true` so its outcome stays advisory.

Surfaced during the 2026-05-30 dependabot-deadlock triage as one of
the orthogonal failures on PR #128. None of these jobs are required
checks, so this PR doesn't unblock anything blocking the merge queue
— it just makes Chapel L2.1 actually verifiable on CI for the first
time, which matters as L2.2-L2.7 land.

Refs: handover/TODO.md P3 "L2.1 ✅ Done" — the "done" status was
based on local builds; CI verification has been broken from day 1.
hyperpolymath added a commit that referenced this pull request May 30, 2026
## Summary

Targeted sync of five drifted rows in `docs/ROADMAP.md` to what
`handover/TODO.md`, `handover/STATE.md`, `docs/PROVER_COUNT.md`, and the
commit history actually say. No new claims, no scope change — pure
stale-row cleanup.

## Corrections

| Row | Before | After | Authority |
|---|---|---|---|
| §2 stage 1c | `[in progress, 28 to go]` | `[done 2026‑04‑26 ✓ — 50/50
named extractors]` | TODO.md S1 batches (12+20+6 = 50) |
| §2 stage 4c | `[86/91 done; 5 suggest_tactics stubs remain]` | `[91/91
real impl ✓; 5 still heuristic-only — GNN-ranking is end-state]` |
PROVER_COUNT.md §TL;DR |
| §3 row "Every important solver" Today | `5 suggest_tactics stubs` |
`91/91 with real suggest_tactics (5 still heuristic-only)` | same |
| §4 row S1 status | `in flight` | `done 2026‑04‑26 ✓ (50/50)` | same |
| §4 row S4 status | `design pending — needs Verisim schema` | `wired
2026‑04‑27 ✓` (read paths + write path + tests/s4_loop_closure.rs) | The
doc's own §4 "Sprint critical path" subsection already says this |
| §4 row S5 status | `partly done — 86/91 already real` | `mostly done —
91/91 real; gnn_augment_tactics wired into 5 pilots per c4bc272` |
PROVER_COUNT.md + commit log |
| Header "Last revised" | 2026‑04‑20 | 2026‑05‑30 (prior date preserved)
| this PR |

## Why now

Found during a wider triage of open issues + active CI work. The 5 rows
above conflict with documents/commits/code that explicitly disagree; per
§7 ("When a stage sub-item lands, mark its line [done YYYY‑MM‑DD ✓]"),
they were due for an update.

## Test plan

- [x] Each correction verified against the cited authority.
- [x] No new claims; only stale-row sync.
- [ ] CI: no code changes, governance/lint should pass.

## Notes

This PR addresses **only** the truthfulness drift. The broader CI red on
`main` (compile errors from the dependabot major bumps) is being
addressed in PR #128.
hyperpolymath added a commit that referenced this pull request May 30, 2026
…ridge (#131)

## Summary

Fixes two pre-existing, independent breakages that have kept `Chapel
Accelerator CI` red on every run since it was first authored
(2026-04-20, commit e44815a) — zero successes in the 100-run history.

| Job | Symptom | Root cause | Fix |
|---|---|---|---|
| `Compile Chapel Metalayer` | `chapel_ffi_exports.chpl:29: syntax
error: near '{'` (cascading into parallel_proof_search.chpl) | `extern
\"C\" { ... }` is Chapel's "extern blocks" feature, requiring Chapel
built with LLVM + clang headers. The official
`chapel-2.3.0-1.ubuntu24.amd64.deb` is not. | Drop the wrapper. The 35
prover-id / category-id `c_int` constants are also `#define`d in
`src/zig_ffi/chapel_ffi_exports.h` — that's the canonical source for any
non-Chapel consumer. The Chapel copies only need module-level scope. |
| `Build & Test Zig FFI Bridge` | `build.zig:23: no field or member
function named 'addLibrary' in 'Build'` | `build.zig` line 1 declares
"Compatible with Zig 0.14+/0.15+" and uses the unified
`Build.addLibrary` API. Workflow pinned `mlugg/setup-zig@… with:
version: 0.13.0`. | Bump the two `version: 0.13.0` lines in
chapel-ci.yml to `0.14.0` (matches what build.zig declares). |

## Test plan

- [ ] CI: `Compile Chapel Metalayer` returns success on this branch.
- [ ] CI: `Build & Test Zig FFI Bridge` returns success on this branch.
- [ ] CI: `Rust Build with Chapel Feature` (Job 3) actually runs (was
previously skipped because Job 2 failed).

## Note on scope

None of these are required checks; this PR doesn't unblock anything
blocking the merge queue. It makes Chapel L2.1 actually CI-verifiable
for the first time — `handover/TODO.md`'s "L2.1 ✅ Done" status was based
on local builds only.

Surfaced during the 2026-05-30 dependabot-deadlock triage (alongside PR
#128 + PR #130).
hyperpolymath added a commit that referenced this pull request May 30, 2026
)

## Summary

Adds a SHA-pinned `taiki-e/install-action` step that installs `just`
before the `MVP Smoke (Best Effort)` job runs `just --justfile Justfile
mvp-env`.

## Why

The workflow has been failing on every push with:

\`\`\`
/home/runner/work/_temp/…/sh: line 1: just: command not found
##[error]Process completed with exit code 127.
\`\`\`

The `ubuntu-latest` runner image doesn't ship `just`, and no step
installed it. Surfaced during the 2026-05-30 triage of orthogonal CI
failures alongside the dependabot deadlock (PR #128).

## SHA pin

`taiki-e/install-action@184183c2401be73c3bf42c2e61268aa5855379c1`
(v2.78.1) — matches the estate convention used across
`hypatia/.github/workflows/{ci,security,tests,build-gossamer-gui}.yml`.

## Test plan

- [ ] CI: `MVP Smoke (Best Effort)` returns success on this branch.
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.

1 participant