Skip to content

chore(release): v1.4.0 — funcref-global miscompile fix, wsc.facts source, component reachability GC, committed lockfile - #329

Merged
avrabe merged 1 commit into
mainfrom
chore/release-v1.4.0
Aug 13, 2026
Merged

chore(release): v1.4.0 — funcref-global miscompile fix, wsc.facts source, component reachability GC, committed lockfile#329
avrabe merged 1 commit into
mainfrom
chore/release-v1.4.0

Conversation

@avrabe

@avrabe avrabe commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Cuts v1.4.0 (1.3.0 → 1.4.0 — minor: new capabilities, no breaking API change).

Scope — closed in rivet

rivet release status v1.4.0✓ Cuttable, 3 artifacts, all verified. rivet validate PASS.

artifact what
TEST-326-FUNCREF-GLOBAL-GUARD (new) #326 — latent miscompile, guarded
TEST-239B-COMPONENT-REACHABILITY-GC #239 Phase B
TEST-WSC-FACTS-SOURCE #231 fact source

Two traceability defects corrected rather than carried

  1. TEST-239B claimed release: v1.3.0 — but Phase B merged after the v1.3.0 tag, and that tagged tree contains zero reachability-GC code (verified). The artifact was asserting membership in a release that doesn't contain it. Re-scoped; v1.3.0 is back to the 3 artifacts that actually shipped.
  2. The eliminate_dead_functions: ref.func is not a liveness root (funcref globals can be silently re-pointed) #326 fix had no rivet artifact at all — a correctness fix with no verification node is exactly what the gate exists to catch.

Headline: a correctness fix that is latent in v1.3.0

#326ref.func isn't in the dead-function sweep's liveness closure, and the global section is re-emitted verbatim, so a funcref global could be silently re-pointed after renumbering. Valid wasm, wrong behaviour, invisible to structural validation, and reachable by default on every core module. This is #196 with one variable changed: after that bug scrambled a function-pointer table through the element section, the element section was remapped — the identical hazard in the global section was never covered.

Also in

Not done — in the CHANGELOG, not implied closed

Phase B prunes core funcs only, no behavioral differential; the fact source covers straight-line prefixes only; the core validator is still a total operation model (refinement #300 and the solver migration #313 are v1.5.0); #240's premise hook is inert (#323).

Known systemic reds: Rocq Formal Proofs, Verification Gate.

A correctness fix that should not have waited, the second half of proof-carrying
facts, component dead-code removal, and the end of the floating-dependency class.
Version 1.3.0 -> 1.4.0 (minor: new capabilities, no breaking API change).

Release scope closed in rivet -- `rivet release status v1.4.0` reports cuttable,
3 artifacts, all verified:

  TEST-326-FUNCREF-GLOBAL-GUARD (new)     #326 latent miscompile, guarded
  TEST-239B-COMPONENT-REACHABILITY-GC     #239 Phase B
  TEST-WSC-FACTS-SOURCE                   #231 fact source

Two traceability defects corrected rather than carried:

  * TEST-239B-COMPONENT-REACHABILITY-GC claimed `release: v1.3.0`, but Phase B
    merged AFTER the v1.3.0 tag -- the v1.3.0 tree contains none of its code
    (verified: zero occurrences of `reachability` in component_optimizer.rs at
    that tag). The artifact was asserting membership in a release that does not
    contain it. Re-scoped to v1.4.0; v1.3.0 is back to the 3 artifacts that
    actually shipped in it.

  * The #326 fix -- a latent silent miscompile of the #196 class -- had NO rivet
    artifact at all. A correctness fix with no verification node is precisely
    what the traceability gate exists to catch. TEST-326-FUNCREF-GLOBAL-GUARD
    added, linking REQ-1/3/5/12, and confirmed not flagged by
    `rivet check verification-evidence`.

Cargo.lock updated for the version bump -- the first release since the lock was
committed, and it behaved correctly.

`rivet validate` PASS (44 warnings vs the 42 baseline; both additions are the
id-naming-convention warning every existing TEST-* artifact already carries --
no new errors).

The CHANGELOG carries an explicit "Not done" section so the remaining gaps
(Phase B prunes core funcs only and has no behavioral differential, the fact
source covers the straight-line prefix only, the validator is still a total
model, #240's premise hook is inert) are stated rather than implied closed.

Refs #231, #239, #320, #326, #323
@avrabe
avrabe merged commit 3375f91 into main Aug 13, 2026
23 of 25 checks passed
@avrabe
avrabe deleted the chore/release-v1.4.0 branch August 13, 2026 09:41
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