Skip to content

fix(proof-suite): make the runner's awk POSIX-portable (mawk reported 0/0)#47

Merged
hyperpolymath merged 1 commit into
mainfrom
claude/proof-suite-runner-awk-portability
Jun 18, 2026
Merged

fix(proof-suite): make the runner's awk POSIX-portable (mawk reported 0/0)#47
hyperpolymath merged 1 commit into
mainfrom
claude/proof-suite-runner-awk-portability

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

What

canonical-proof-suite-runner.sh parsed the manifest with \s in its awk patterns (/^\s*\(entry$/). \s is a GNU-awk extension — under mawk (the default awk on Debian/Ubuntu and many CI/dev boxes) it matches nothing, so parse_manifest returns zero entries and the runner prints a silent Summary: 0/0 passing while exiting 0. It looks like it ran, but checked nothing.

Fix

Replace the three \s occurrences — two awk (entry matchers + one grep -E status matcher — with POSIX [[:space:]], which behaves identically under mawk, gawk, and grep.

-    /^\s*\(entry$/ { ... }
+    /^[[:space:]]*\(entry$/ { ... }

Verified

Installed Rocq 9 + idris2 + agda locally and ran the runner:

  • before: Summary: 0/0 passing (mawk parsed nothing)
  • after: Summary: 35/37 passing — matches a direct coqc sweep of the .v files

(The 2 not-passing are the Coquelicot/mathcomp-dependent proofs, whose sources live on hosts unreachable from this box's network policy — unrelated to this fix.)

One-line-per-site portability fix; no behavior change in CI (gawk already accepted \s), but now the suite is runnable locally too.

https://claude.ai/code/session_018CaSgNjNURC7ocsyjYh9We


Generated by Claude Code

`canonical-proof-suite-runner.sh` parsed the manifest with `\s` in its awk
patterns (`/^\s*\(entry$/`) — `\s` is a GNU-awk extension. Under `mawk` (the
default `awk` on Debian/Ubuntu and many CI/dev boxes) `\s` matches nothing, so
`parse_manifest` returns zero entries and the runner reports a silent
`Summary: 0/0 passing` while exiting 0 — i.e. it looks like it ran but checked
nothing.

Replace the three `\s` occurrences (two awk `(entry` matchers + one `grep -E`
status matcher) with POSIX `[[:space:]]`, which behaves identically under
mawk, gawk, and grep.

Verified with a locally-installed Rocq 9 + idris2 + agda: the runner now parses
all entries and reports `Summary: 35/37 passing` (the 2 not-passing are the
Coquelicot/mathcomp-dependent proofs whose sources are unreachable from this
host) — previously `0/0`.

https://claude.ai/code/session_018CaSgNjNURC7ocsyjYh9We
@hyperpolymath
hyperpolymath marked this pull request as ready for review June 18, 2026 17:35
@hyperpolymath
hyperpolymath merged commit 2c52cf6 into main Jun 18, 2026
1 of 24 checks passed
@hyperpolymath
hyperpolymath deleted the claude/proof-suite-runner-awk-portability branch June 18, 2026 17:37
hyperpolymath pushed a commit that referenced this pull request Jun 20, 2026
… (35/37)

Roadmap item 3 (full proof suite green). A full local runner pass — idris2 0.8
+ agda 2.6.3 + Rocq 9.0, now awk-portable since #47 — reports **35/37 passing,
2 regressed**.

The key finding: the suite was far greener than its labels. `M5-yoneda.agda`
is not a stub — it is a complete 386-line self-contained Yoneda formalization
that compiles (my earlier "agda 0/1" was the same path/module-name trap as the
idris files: run from repo root vs. `cd` into the dir + basename). Likewise the
~20 `not-started`-labelled rocq entries (M6–M14, S6–S10, E6–E11) all compile
and define their headline symbol.

So this flips 21 stale `not-started` + 1 stale `in-progress` (M1) labels to
`passing`, verified by that runner pass. The 2 not locally verifiable — `M2`
(mathcomp) and `E1` (Coquelicot, ndim port) — keep their prior CI-canonical
`passing` status: their dependency sources live on `gitlab.inria.fr` /
`erratique.ch` (403 in this github-only environment) but pass in CI.

`REPORT.a2ml` and the per-entry sidecars are intentionally NOT regenerated from
this local run (they would show those 2 as locally-regressed); the nightly CI
run with the full toolchain regenerates the canonical evidence. Manifest stays
well-formed (parens 500/500; 37 entries parse; all `passing`); revision-log
entry added; `last-manifest-update` bumped.

https://claude.ai/code/session_018CaSgNjNURC7ocsyjYh9We
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