Make the gates real: CI-wire the gpio-thin + rv32-boot oracles (#879), claim-pin template prose (#880) - #884
Merged
Merged
Conversation
… template prose #879: gpio_thin_846_differential.py (the v0.50.1/v0.52.0 headline-size gate, 75 mmio traces incl pin>=32) wired into the trap-semantics job with capstone in its deps and a CI-side non-zero check-count grep; the script itself now hard-fails on vacuous sweeps (0 checks, 0 trace events, missing call sites). Also wires the second unwired oracle found by the audit: rv32_data_798_boot_differential.py. #880: the feature-matrix TEMPLATE's load-bearing capability phrases are pinned verbatim in claims.yaml, each bound to its executing oracle AND that oracle's CI wiring (red-first: falsified phrase reddens claim-check even after regeneration). Fixes two live stale-prose defects the audit found: RV32 'warns loudly' (hard-errors + ships since #798/v0.48) and WCET 'calls' blanket-decline (phase-3 composition since v0.48). Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
…mplate audit - README + matrix said trunc_sat 'not decoded' / 'still tracked in #782' — trunc_sat shipped v0.49 and #782 closed; successor residual is #881. - '#418 partially open' — closed with the v0.47 arena-bind. - Multi-memory row said 'D — module-level loud decline' while the #406 per-memory lowering (CI-wired execution differential) had been shipping. - Honest-summary residual examples now cite the actually-open issues (#881/#882/#872). New pin: SYNTH-MATRIX-MULTI-MEMORY. 34/34 claims hold. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #879. Closes #880. Two defects, one class: gates that look like gates but don't bite.
#879 — the gpio differential is now CI-enforced
scripts/repro/gpio_thin_846_differential.py— the gate behind the v0.50.1 (534→506 B) and v0.52.0 (506→502 B) headline size claims, and the only harness executing gale's REAL gpio-thin driver across a pin sweep including pin ≥ 32 (the mod-32 boundary an unsound shift-mask elision would corrupt) — appeared nowhere in CI.capstoneadded to that job's pip line (the mask census disassembles.text; the job previously installed only wasmtime/unicorn/pyelftools).#846 CHECKS=75/75 trace_events=Nsummary and the CI step greps the pinned75/75. Script-side anti-vacuity added: hard-fail on empty/short sweeps, zero mmio trace events, or a reloc walk that finds no import call sites (a missing-import path can no longer skip).rv32_data_798_boot_differential.py(the RV32: active data-segment initializers are silently dropped — ship them (linker-script placement + startup copy) and hard-decline until then #798 full-boot gate — clang+lld build the bare-metal riscv32 firmware, unicorn boots it from_reset). Wired into the same job. Both wirings are pinned inclaims.yaml(SYNTH-GPIO-846-ORACLE-CI-WIRED,SYNTH-MATRIX-RV32-DATA-SHIP) so they cannot be silently un-wired again.Red-first evidence (local, hardened script + fresh debug binary):
75/75 match, 105 mmio trace events, 534→502 B / 10→3 masks; rv32 boot oracle PASS.VACUOUS: no mmio import call sites found, exit 1.CHECKS=70/70but the CI-sidegrep "^#846 CHECKS=75/75"exits 1 — the pinned count bites where exit-0 would not.#880 — template prose is now claim-gated (approach 3 + oracle binding, limits stated)
The staleness gate proves
doc == render(template); wrong template prose renders faithfully and stays green (the v0.51 "div/rem declined" / v0.52 "OOB-trap is a follow-on" cold-read defects). Chosen approach: pin the template's load-bearing capability phrases verbatim inclaims.yaml(mechanism already existed), each bound to independent evidence — the oracle script that executes the capability exists and is CI-wired (count-minoverci.yml, the #879 lesson generalized), plus a stable code anchor where one exists (MemBounds::Software,validate_served_image). 8 newSYNTH-MATRIX-*/ gpio-wiring claims; 34/34 hold.Red-first evidence: replaced the template's
**BOUNDS-CHECKED by default** …phrase with "bounds checking is a follow-on" (the literal v0.52 defect), regenerated so the old staleness gate stays green →claim_checkexits 1 withFAIL SYNTH-MATRIX-AARCH64-BOUNDS-DEFAULT. Reverted. (Incidentally re-proven a second time when a carelessgit checkoutof the template reverted the legit fixes — the new pins went red on that too.)Honest limit: verbatim pins catch drift of pinned phrases (weakening a shipped-capability claim forces a deliberate ledger bump next to its evidence); they cannot catch a brand-new false claim typed into the template. That residual stays on review + on extending the pin list when new load-bearing phrases land. Deriving the prose from the selector's decline sites (option 1) remains the stronger end-state.
Template/README audit — six live defects of exactly the #880 class, fixed here
trunc_sat"not decoded" and "a pressure-dependent f32 class still tracked in #369 marked closed, but the real falcon-flight-v1.123 fused core still skips 26/156 on --relocatable cortex-m7dp (incl. run-stabilization); trunc_sat unsupported + a pressure-dependent 'integer popped f32' class #782" — trunc_sat shipped v0.49; #369 marked closed, but the real falcon-flight-v1.123 fused core still skips 26/156 on --relocatable cortex-m7dp (incl. run-stabilization); trunc_sat unsupported + a pressure-dependent 'integer popped f32' class #782 is closed, successor residual is GI-FPU-002 + RA tail is now the ONLY gate between the falcon cascade and the M7 — 5 entry-point symbols; phase-2 D-register pressure is new in v0.52 (inline-f64 #869 lowering) #881.cabi-arena-reallocto the native TCB arena allocator #418 partially open" — closed with the v0.47 arena-bind.Lend0in i2c_step #882/range-realloc: segment-local liveness treats cross-barrier live-ins as dead — unmodeled (reg_effect=None) readers after the segment are invisible, and the segment validator shares the blind spot (accepted a wrong rewrite) #872.Remaining unpinned load-bearing prose (reported, not pinned — candidates for follow-up): the A32 "221-variant no-wildcard tripwire" hand-carried number; the RV32
#871relocation/arity-marshalling sentence; per-row f32/f64 "Complete" wording (README analogue is pinned); issue-number open-state citations have no offline check (a closed issue cited as open only reddens when its phrase is pinned).Gates
claim_check34/34 (incl. staleness re-render),model_coverage_audit --checkok,ci.ymlparsesfrozen_codegen_bytes10/10 — lane is byte-invisible to codegen🤖 Generated with Claude Code
https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L