Skip to content

release-watch: gale-nano 0.7.0 passes soundly; meld enforces no-silent-overlap; loom 1.4.1 neutral; fix a SIGPIPE false-negative in our own gate - #185

Open
avrabe wants to merge 1 commit into
mainfrom
release-watch/gale070-loom141-gate-fix
Open

release-watch: gale-nano 0.7.0 passes soundly; meld enforces no-silent-overlap; loom 1.4.1 neutral; fix a SIGPIPE false-negative in our own gate#185
avrabe wants to merge 1 commit into
mainfrom
release-watch/gale070-loom141-gate-fix

Conversation

@avrabe

@avrabe avrabe commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Five suppliers moved; tested the two in the pipeline.

Our own gate had a false negative — caught before it caused a false report

C5 reported __heap_base missing on gale-nano 0.7.0. I verified independently firststrings, grep -a and wasm-tools print all found it. The gate was wrong.

Root cause: the script runs set -o pipefail, and C5 piped strings -a FILE | grep -q PATTERN. grep -q exits on first match, SIGPIPEs the producer, pipefail returns 141 → else branch → false FAIL. Whether it bites depends on where in the file the symbol sits, so it's arbitrary per artifact: gale-nano 0.7.0 (30 KB) wrongly failed while relay's mixer (12 KB) passed. Demonstrated rc=0 vs rc=141 on the same file. Fixed by matching the binary directly, no pipe.

Re-verified every prior claim with the fixed gate: relay v1.134.1 all six still CONSUMABLE (so that report was correct — by luck, not judgement); gale-nano 0.6.0 still fails C4+C5; negative control still bites. No prior upstream report was wrong — but the next one would have been. Third such catch this campaign.

gale-nano 0.7.0 — passes, and holds its invariant soundly

C1–C5 all pass: gale added both --emit-relocs (C4, which 0.6.0 failed) and __heap_base (C5). Acceptance invariant re-verified: 0 skips on all three cores, residual exactly poll-task read32 write32, 7,785 B.

The distinction matters: 0.6.0's result came via plain --memory shared, which silently overlapped data segments. 0.7.0 goes through --pack-rebase, which doesn't.

meld#370 is fixed and enforcing

meld 0.52 now hard-refuses the plain --memory shared fuse — "overlapping data segments (10 overlapping pair(s))… this silently corrupts data." That is the exact command I ran on 0.6.0 and had to retract a claim over. The tool now makes that mistake impossible.

synth v0.59's three gates enumerate the jess embedder contract

A genuinely useful by-product for the unstarted gust:hal work. Hitting them in sequence on gale-nano says exactly what jess-as-embedder must provide:

  1. the importsgust:hal/mmio read32/write32 + gust:os/taskdisp poll-task
  2. #1041 --embedder-data-init — embedder populates active data segments at instantiation
  3. #1052 --embedder-global-init — embedder evaluates the 6 global initializers and seeds the R9 globals table before any export runs

So the gust:hal specification is no longer guesswork: it is (1)+(2)+(3).

loom 1.4.1 — neutral for the falcon gate

Fused wasm 64,486 → 61,216 B (5% smaller), but skip counts identical (3/5/12) and the ARM image slightly larger (+147 B). Smaller input doesn't imply smaller output — recorded because the opposite is the natural assumption. Consistent with GI-FPU-002 being a synth register-allocation limit no upstream optimizer can remove.

rivet validate → PASS.

🤖 Generated with Claude Code

…OUND path; meld now refuses the silent-overlap fuse; loom 1.4.1 neutral; and fix a SIGPIPE false-negative in jess's own publish gate

JESS TOOLING DEFECT, caught before it caused a false report (third such catch): the publish-gate C5
check reported __heap_base MISSING on gale-nano 0.7.0. Verified independently FIRST — strings, grep -a
and wasm-tools print all found it. THE GATE WAS WRONG.

ROOT CAUSE: the script runs `set -o pipefail`, and C5 piped `strings -a FILE | grep -q PATTERN`.
grep -q exits on first match, SIGPIPEs the producer, pipefail returns 141 -> else branch -> FALSE FAIL.
Whether it bites depends on WHERE the symbol sits in the file, so it is arbitrary per artifact:
gale-nano 0.7.0 (30 KB) wrongly failed while relay's mixer (12 KB) passed. Demonstrated rc=0 vs rc=141
on the same file. Fixed by matching the binary directly with no pipe.

RE-VERIFIED EVERY PRIOR CLAIM with the fixed gate: relay v1.134.1 all six still CONSUMABLE (so the
report to relay was correct — by luck, not judgement); gale-nano 0.6.0 still fails C4+C5; the negative
control still bites. No prior upstream report was wrong — but the next one would have been.

GALE-NANO 0.7.0: gate C1-C5 ALL PASS — gale added both --emit-relocs (C4, which 0.6.0 failed) and
__heap_base (C5). Acceptance invariant re-verified and THIS TIME SOUNDLY: 0 skips on all three cores,
residual exactly poll-task/read32/write32, 7,785 B. The 0.6.0 result came via plain --memory shared,
which silently overlapped segments; 0.7.0 goes through --pack-rebase, which does not.

MELD#370 FIXED AND ENFORCING: meld 0.52 now HARD-REFUSES the plain --memory shared fuse with
"overlapping data segments ... this silently corrupts data". That is the exact command jess ran on
0.6.0 and had to retract a claim over. The tool now makes that mistake impossible.

SYNTH v0.59's THREE GATES MECHANICALLY ENUMERATE THE JESS EMBEDDER CONTRACT — a useful by-product for
the unstarted gust:hal work. Hitting them in sequence says exactly what jess must provide:
 (1) the imports — gust:hal/mmio read32/write32 + gust:os/taskdisp poll-task
 (2) #1041 --embedder-data-init — embedder populates active data segments at instantiation
 (3) #1052 --embedder-global-init — embedder evaluates the 6 global initializers and seeds the R9
     globals table before any export runs
So the gust:hal spec is no longer guesswork: it is (1)+(2)+(3).

LOOM 1.4.1: NEUTRAL for the falcon gate. Fused wasm 64,486 -> 61,216 B (5% smaller) but skip counts
IDENTICAL (3/5/12) and the ARM image slightly LARGER (+147 B). Smaller input does not imply smaller
output — recorded because the opposite is the natural assumption.

rivet validate PASS.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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