Repository navigation
v0.83 RANGEWIDEN (#965): the downstream surface MEASURED is zero, and the bump lands behind a tested refusal - #1498
Conversation
…asses the TRUNCATING one THE SURFACE IS MEASURED AND THE BUMP IS NOT APPLIED, which is the order this artifact's own description demands: the number comes ahead of the fix. AND "FOUR IS A FLOOR" IS TRUE FOR A REASON THE ARTIFACT DID NOT GIVE. The inherited claim was that v0.82's four errors are a floor because `synth-core` is the base crate and the downstream surface was never reached. True, and incomplete. Measured statically at this commit: COMPILER-VISIBLE, 4 sites, all `arena_bind.rs` and all the same shape — slicing the original wasm buffer by a section range: :493 and :501 (`&wasm[reader.range()]`), :520 (`&wasm[range.clone()]`), :554 (`&wasm[range]`, fed by `payload.as_section()` at :549). These are the sites the compiler REFUSES, because `[u8]` has no `Index<Range<u64>>`. COMPILER-INVISIBLE, 1 shipped site — `dwarf_line.rs:129`, `code_base = range.start as u32`. An `as` cast accepts BOTH `Range<usize>.start` and `Range<u64>.start`, so this site emits NO diagnostic before or after the widening and did not appear among v0.82's four errors. PROVEN WITH A COMPILED PROBE RATHER THAN ARGUED: `rustc` accepts `a.start as u32` for a `Range<usize>` AND a `Range<u64>` (rc=0), and `0x1_0000_0003` truncates to `3` under each. So slice indexing refuses loudly while an existing `as` narrowing stays silent — the compiler's reference comes from the type system, so it is blind in exactly the direction where a value is ALREADY being discarded. A remedy that fixed only the four errors would have left `dwarf_line.rs:129` quietly dropping the high half of a section offset, which is the exact class this artifact's done-when forbids, sitting in code the type change never complained about. WHAT IS NOT DELIVERED, stated rather than implied: the bump. Applying it means validating it and validating it means a full workspace compile — the data volume is at 99% with ~5 GiB against a ~12 GiB build. Purging the shared `~/.cargo/registry` would reach roughly 11.5 GiB and is DECLINED, because another session is building in `rivet-wt-kani` off that same registry and the standing instruction is not to disturb it. FOUR crates declare a wasm-tools dependency — synth-cli (1), synth-core (2), synth-frontend (4), synth-synthesis (1) — so the consumer graph is real and its ERROR COUNT is UNPROVEN. This lane reports UNPROVEN rather than inventing a figure, and reports the surface as STATIC rather than as a compile result. REFUTING COMMAND RUN FIRST AND NEITHER HALF REFUTED: `grep -c 'wasmparser = "0.261"' Cargo.toml` returns rc=1 count 0 with the declared floor still at "0.256", and FOUR dependabot PRs remain open. AND ONE INSTRUMENT ERROR WORTH THE RECORD, because it nearly produced a FALSE ZERO. The first sweep for the invisible class used a pattern containing `\s` and returned ZERO hits from `git grep -E`, which is POSIX ERE and does not support it — while the SAME pattern matched under BSD `grep -E`, which accepts it as an extension. A zero from a broken pattern reads exactly like an empty population. It was caught only because the known site was already in hand to serve as a positive control; re-measured POSIX-safely the class is 3 hits, 1 of them shipped. A SECOND OBSERVATION, recorded because it is this release's theme landing twice in one tick: R15 (the LANDEDBOTH lane, PR #1497, still open) would have RED this artifact's `landed:` placeholder immediately — it carries no `#N` at all. On a branch based on main, which predates R15, the same placeholder passes SILENTLY. The rule's absence is invisible in exactly the way its presence is loud. Gates: status_evidence rc=0, verdict_prose rc=0, claim_check 75/75, cargo fmt rc=0. Refs #965 #465 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
8ea2bd0 to
318ebf9
Compare
Automated review for PR #1498pulseengine/synth: Verdict: 💬 Comment Summary: The code change is well-structured and follows best practices for Rust programming. The Findings: 0 mechanical (rivet) · 1 from local AI model. Findings (1):
Generated by a local AI model and post-validated against a strict JSON contract. Each finding includes the verbatim line being criticised — verify by reading the file at the cited location. Reviewed at |
… the bump lands v0.82 withdrew the wasm-tools 0.261 bump because the consumer surface behind synth-core had never been reached — the compiler stops at the first crate that fails, so its four errors were a floor of unknown height. This measures it. The surface is ZERO. With a checked narrowing at the four arena_bind.rs sites, `cargo check --workspace --all-targets` is rc=0 with 0 errors and 0 warnings; all four crates declaring a wasm-tools dependency are in the rechecked set. `cargo test --workspace` is rc=0, 3148 passed, 0 failed. Clippy with CI's exact `-- -D warnings` is rc=0. section_span() refuses rather than truncating: `as usize` would turn a malformed 4 GiB-plus section offset into a wrong-bytes read, which compiles and runs and is wrong on a 64-bit host. The refusal IS the deliverable, so it is tested directly (five cases) and proven potent by mutation — bounds guard removed, the off-by-one, either half of the disjunction dropped, the citation removed: 5 of 5 caught, every anchor verified before any was applied, file restored byte- identically after each. Reach stated because it is not uniform: the bounds arm is reachable and tested; the two `usize::try_from` arms cannot fire on a 64-bit target and are UNPROVEN here rather than claimed. And the constraint that held this for two releases was measured in the wrong units. "~12 GiB workspace build" is a FULL build. `cargo check` does no codegen: 78 MB for -p synth-core, 629 MB for the whole workspace, 14 s. Three must-lanes recorded UNPROVEN against a budget describing an operation none of them needed. dwarf_line.rs:129 (`range.start as u32`) stays a named residual, not a fix: it truncates identically under both types so it is pre-existing, and code_base is a u32 whose consumer subtracts it from u32 op_offsets, so a module past 4 GiB shares no address space with its own offsets at all. Refs #965 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
318ebf9 to
f22c776
Compare
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
The first deliverable was the number, and the number is zero
v0.82's DEPS lane withdrew the wasm-tools 0.261 bump for a stated reason:
synth-coreis the base crate, so the compiler stopped at its four errors and the consumer surface behind it was never reached. Four was a floor of unknown height. This lane measures it.The surface is ZERO. With the bump applied and a checked narrowing at the four
arena_bind.rssites:cargo check --workspace --all-targetscargo test --workspacecargo clippy --workspace --all-targets -- -D warningsAll four crates that declare a wasm-tools dependency —
synth-cli,synth-core,synth-frontend,synth-synthesis— are in the rechecked set, so the surface was reached rather than served from cache. v0.82's withdrawal was correct about the evidence then available and wrong about the size of the job: four sites, not an unbounded surface.The refusal is the deliverable, so it is tested and proven potent
section_span(range, wasm) -> Result<Range<usize>>refuses on an over-wide value and on a range past the buffer end.as usizeis what it exists not to be — it would turn a malformed 4 GiB-plus section offset into a wrong-bytes read, which compiles and runs and is wrong on a 64-bit host.A green suite over the happy path is no evidence for a refusal, so the helper is tested directly (5 cases: range past the end, inverted range, the
end == len/end == len + 1boundary, bounds preserved on accept, a 4 GiB-plus offset into a 10-byte module) and mutation-proven:as usizeshape)end == len + 1#965citation removed from the message5 of 5. Every anchor was verified before any mutation was applied, and the file was restored byte-identically after each (
diff -qIDENTICAL).Reach is stated because it is not uniform across the three arms. The bounds arm is reachable and tested. The two
usize::try_fromarms cannot fire on any 64-bit target, whereu64 -> usizeis infallible — they are correct and defensive for a 32-bit host, and they are UNPROVEN here rather than claimed.The constraint that held this for two releases was measured in the wrong units
"~12 GiB workspace build" was carried as the reason no local compile could measure this. That is a full build — codegen, linking, every rlib.
cargo checkdoes no codegen: 78 MB for-p synth-core, 629 MB / 14 s for--workspace --all-targets. Three must-lanes recorded UNPROVEN against a budget describing an operation none of them needed, and this artifact's own previous revision was one of them.Named residual, not a fix
dwarf_line.rs:129—code_base = range.start as u32— compiles and truncates identically under bothRange<usize>andRange<u64>, so it is pre-existing and was not introduced by this widening. It stays a recorded residual:code_baseis au32public field whose consumer subtracts it fromop_offsets, themselvesu32, so a module whose code section starts past 4 GiB shares no address space with its own op offsets at all. The fix is not a wider type, and a guard here would be an untestable branch changing behaviour for no module synth can compile.Issue state
#965is CLOSED and was closed before this release, so this lane retires no open issue;issue-scopeis omitted so the closure gate cannot read it as claiming one. What it does retire is the entire open-PR board — #1344, #1346, #1468, #1471 are the four held wasm-tools bumps, disposed of with this PR as the measured reason.Refs #965
🤖 Generated with Claude Code
https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L