Skip to content

v3.2.5: second <unsupported> site, AC#3 measured, and promote FEAT-074/075 - #129

Merged
avrabe merged 2 commits into
mainfrom
promote-v325
Aug 21, 2026
Merged

v3.2.5: second <unsupported> site, AC#3 measured, and promote FEAT-074/075#129
avrabe merged 2 commits into
mainfrom
promote-v325

Conversation

@avrabe

@avrabe avrabe commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Completes v3.2.5. Two gaps closed after review, both of the asserted rather than measured kind — then the promotion.

1. A second defective op_name site (#126)

After fixing the interpreter's fallback I grepped every op_name call site instead of assuming the reported one was the only one. The taint pass has its own "operator not modelled" diagnostic, and its trigger is an unmodelled operator — so it printed the placeholder for precisely the population it exists to describe:

taint: operator <unsupported> not modelled — taint state conservatively raised to High (sound, FEAT-009)

Same one-word fix, own red-first test. A third site (the write-set-havoc Info at a region opener) is safe and was left alone — op_name does cover block/loop/if.

FEAT-075's AC is widened from "its unsoundness-fallback diagnostic" to any diagnostic naming an operator, because the original wording would have let this site through.

2. FEAT-074's AC#3 was asserted, not measured

The AC said a precision or soundness regression "must be excluded rather than assumed" — and I had promoted on a green unit suite, which is exactly the assumption it forbids. checked_sub changed behaviour for every branch whose depth reaches past its enclosing regions, and small fixtures are where that would not show.

Measured properly — same 8.2 MB compiler-emitted module, both analyzers:

pre-fix post-fix
advisories 8530 8530
trap checks 6490 6490
proven-safe 28 28
potential-trap 6462 6462
classes 6463 / 2039 / 28 6463 / 2039 / 28

Identical. Worth noting this needed a different experiment than the self-history harness: that varies the module, and the question here was whether the analyzer change moved results — so the module had to be held fixed and the binary varied.

3. Promotion

FEAT-074 and FEAT-075 → accepted (accepted is cuttable; implemented means not yet verified).

rivet release status v3.2.5
✓ Cuttable — every artifact is release-ready.

Cutting the tag and publishing is a separate, deliberate step — this PR only makes the release assessable.

105 core tests · clippy -D warnings clean · rivet validate PASS.

avrabe and others added 2 commits August 21, 2026 14:17
Both features' acceptance criteria are met and verified on main, not merely
implemented:

  FEAT-074 (#125) — measured before/after on the reporter's own sources. Both
  spec modules PANICKED at the pre-fix commit; after the fix unwind.wast
  analyses cleanly (49 functions, 100 program points) and func.wast returns a
  structured error instead of trapping the guest.

  FEAT-075 (#126) — mutation-checked: reverting the one-word change reproduces
  the reporter's exact string, so the oracle tests the fix and not the fixture.

Both regression oracles were written RED FIRST and both reproduced the reported
symptom before the fix existed. All 11 CI checks green on #127.

`accepted` rather than `implemented`, per the release-gate semantics tested in
rivet 0.22: `accepted` is cuttable, `implemented` means NOT yet verified.

rivet release status v3.2.5: Cuttable.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KkNzkNYzPh7366DkNijeNc
Two gaps closed after review, both of the "asserted rather than measured" kind.

1. A SECOND defective op_name site. After fixing the interpreter's fallback I
   grepped every `op_name` call site instead of assuming the reported one was
   the only one. The taint pass has its own "operator not modelled" diagnostic
   whose TRIGGER is an unmodelled operator — so it printed `<unsupported>` for
   precisely the population it exists to describe:

     "taint: operator <unsupported> not modelled — taint state conservatively
      raised to High (sound, FEAT-009)"

   Same one-word fix, own red-first test. A third site (the write-set-havoc
   Info at a region opener) is SAFE and was left alone: `op_name` does cover
   `block`/`loop`/`if`, so it never reaches the placeholder. FEAT-075's AC is
   widened from "its unsoundness-fallback diagnostic" to ANY diagnostic naming
   an operator, since the original wording would have let this site through.

2. FEAT-074's AC#3 said a precision or soundness regression "must be excluded
   rather than assumed" — and then I promoted on a green unit suite, which is
   exactly the assumption the AC forbids. `checked_sub` changed behaviour for
   every branch whose depth reaches past its enclosing regions, and small
   fixtures are where that would NOT show.

   Measured properly: the same 8.2 MB compiler-emitted module through the
   pre-fix and post-fix analyzer. Identical — 8530 advisories, 6490 trap checks,
   28 proven-safe, 6462 potential-trap, same class breakdown. Note this needed
   a different experiment than the self-history harness, which varies the
   MODULE; the question here was whether the ANALYZER change moved results, so
   the module had to be held fixed and the binary varied.

105 core tests pass; clippy -D warnings clean; rivet validate PASS.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KkNzkNYzPh7366DkNijeNc
@avrabe avrabe changed the title rivet: promote FEAT-074/075 — v3.2.5 is cuttable v3.2.5: second <unsupported> site, AC#3 measured, and promote FEAT-074/075 Aug 21, 2026
@github-actions

Copy link
Copy Markdown

📐 rivet artifact delta

PR: #129 Base SHA: 25694bb1

Validation

head — `rivet validate` result
  SR-11 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-12 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-13 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-2 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-3 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-4 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-5 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-6 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-7 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-8 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-9 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SYS-1 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-2 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-3 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-4 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-5 (system-req, status: accepted) — missing: sys-integration-verification
  → run `rivet validate --explain SR-1` to see which link type and source types satisfy a gap

Result: PASS (130 warnings)
Schemas: common@0.3.0 (embedded), dev@0.3.0 (embedded), research@0.1.0 (embedded), research-ext@0.1.0 (on-disk), safety-case@0.1.0 (embedded), aspice@0.2.0 (embedded)
base — `rivet validate` result (for comparison)
  SR-11 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-12 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-13 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-2 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-3 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-4 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-5 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-6 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-7 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-8 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SR-9 (sw-req, status: accepted) — missing: sw-integration-verification, unit-verification
  SYS-1 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-2 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-3 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-4 (system-req, status: accepted) — missing: sys-integration-verification
  SYS-5 (system-req, status: accepted) — missing: sys-integration-verification
  → run `rivet validate --explain SR-1` to see which link type and source types satisfy a gap

Result: PASS (130 warnings)
Schemas: common@0.3.0 (embedded), dev@0.3.0 (embedded), research@0.1.0 (embedded), research-ext@0.1.0 (on-disk), safety-case@0.1.0 (embedded), aspice@0.2.0 (embedded)

Artifact stats

base head
Total artifacts 229 229
full stats — head
Artifact summary:
  academic-reference               24
  competitive-analysis             11
  design-decision                  22
  feature                          75
  market-finding                    7
  requirement                      21
  safety-context                    3
  safety-goal                       5
  safety-justification              3
  safety-solution                   6
  safety-strategy                   1
  stakeholder-req                   3
  sw-req                           13
  sw-verification                  13
  sys-verification                  5
  system-req                        5
  technology-evaluation            12
  TOTAL                           229

Orphan artifacts (no links): 11
  CA-001
  CA-002
  CA-003
  CA-004
  CA-005
  CA-006
  CA-007
  CA-008
  CA-009
  CA-010
  CA-011

Diagnostics: 0 error(s), 130 warning(s), 21 info(s)

Diff (base → head)

~ FEAT-074
  status: - proposed -> + accepted
  field changed: acceptance-criteria
~ FEAT-075
  status: - proposed -> + accepted
  field changed: acceptance-criteria

0 added, 0 removed, 2 modified, 227 unchanged

AADL model — head

spar/scry.aadl: OK

Posted by the rivet-delta workflow. Informational only — does not gate the PR.

@avrabe
avrabe merged commit 9e8783d into main Aug 21, 2026
11 checks passed
@avrabe
avrabe deleted the promote-v325 branch August 21, 2026 12:31
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