Skip to content

plan(v0.56): release scope in rivet — 6 artifacts, readiness now a query - #926

Merged
avrabe merged 2 commits into
mainfrom
plan/v0.56-scope
Aug 8, 2026
Merged

plan(v0.56): release scope in rivet — 6 artifacts, readiness now a query#926
avrabe merged 2 commits into
mainfrom
plan/v0.56-scope

Conversation

@avrabe

@avrabe avrabe commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Planning-only. No code, no behaviour change.

The finding that prompted the shape

The release-planning method says scope is the set of rivet artifacts tagged release: vX.Y, and readiness is a query over their status. Measured before writing this:

  • 1 of 264 artifacts carried a release: field
  • the v0.50–v0.55 plans lived in session scratchpad markdown under /private/tmp — they did not survive the session that wrote them

So the roadmap could not be driven by, or gated on, verification state. Same class the last three releases kept finding: a documented process not actually in force.

v0.56 scope

id issue what
RQ-56-CITE #911 a verification artifact cannot cite a test that doesn't exist — shipped unfixed in v0.55
RQ-56-PINS #924 pin sweep covers 2 of 4 release surfaces; Cargo.lock + npm ungated
RQ-56-COV #923 split genuinely-untested lines from differential-covered
RQ-56-GPIO #846 gpio-thin 502 → 498 B, relational ranges (gale)
RQ-56-A64PARAM #851 aarch64 param homing — one mechanism unblocks two divergences
RQ-56-PLAN release scope survives the session that wrote it

Readiness query today: 0/6 verified → not cuttable, correctly, since nothing is built.

Theme — the factory, not the instances

v0.53–v0.55 each fixed real defects, and across all three the dominant finding was that most defects were in the checkers, not the checked code. Every one was fixed as an instance; shelfware still grew 57/130 → 69/150. Three of the six items above make a class unrepresentable rather than fixing another instance.

One honest limit, stated in the artifact

Only 5 of 264 artifacts are verified, so a strict all-verified readiness gate would block every release. RQ-56-PLAN makes deciding this part of the requirement — either drive the lifecycle for scoped items, or restate the gate in terms the project meets. Quietly adopting a gate nobody satisfies would recreate the same defect one level up.

rivet validate: 0 ours-errors.

The release-planning method says rivet's `release:` field is the source of
truth for scope and that readiness is a QUERY over artifact status. Measured
before writing this: **1 of 264 artifacts carried a `release:` field**, and the
v0.50-v0.55 plans lived in session scratchpad markdown under /private/tmp —
ephemeral by construction. So the roadmap could not be driven by, or gated on,
verification state.

That is the same class this project keeps finding: a documented process that is
not actually in force. This is increment one of putting it in force.

v0.56 scope (6 artifacts, all `proposed`, readiness query answerable now):
  RQ-56-CITE      #911  a verification artifact cannot cite a nonexistent test
  RQ-56-PINS      #924  the pin sweep covers every surface a release bumps
  RQ-56-COV       #923  split genuine coverage gaps from differential-covered
  RQ-56-GPIO      #846  gpio-thin 502 -> 498 B via relational ranges
  RQ-56-A64PARAM  #851  aarch64 param homing — one mechanism, two divergences
  RQ-56-PLAN            release scope survives the session that wrote it

Theme: the factory, not the instances. v0.53-v0.55 each fixed real defects and
each found the dominant ones were in CHECKERS rather than checked code — yet
shelfware still grew 57/130 -> 69/150. Instances are not the unit of progress;
whether the CLASS can still be expressed is.

RQ-56-PLAN states its own honest limit rather than hiding it: only 5 of 264
artifacts are `verified`, so a strict all-verified gate would block every
release. Deciding whether to drive the lifecycle or restate the gate is part of
the requirement — pretending otherwise would recreate the documented-but-not-in-
force defect one level up.

rivet validate: 0 ours-errors.
@temper-pulseengine

Copy link
Copy Markdown
Contributor

Automated review for PR #926

pulseengine/synth:plan/v0.56-scope → pulseengine/synth:main

Verdict: 💬 Comment

Summary: The proposed release plan and system requirements are well-documented, clear, and address critical issues identified in previous releases. The use of a systematic approach to planning and verification ensures that the project's goals are met effectively.

Findings: 0 mechanical (rivet) · 1 from local AI model.

Findings (1):

  1. release_plan.md:1
    Found while planning this release.
    
    The proposed release plan is well-documented and clear.

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 23d2f4c

@codecov

codecov Bot commented Aug 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

gale filed five issues against v0.55.0. Reproduced #932 before planning rather
than taking it on trust:

  baseline, no --proven-safe .......... 2 udf guards
  memory_min_bytes = 0     ACCEPTED ... 0 udf guards   <-- guards STRIPPED
  memory_min_bytes = 65536 REFUSED .... 2 udf guards   <-- the TRUTH rejected

For an IMPORTED memory the derived floor is 0, so the only document synth
accepts is the vacuous one, and it then elides real guards 'against the 0 B
floor'. The fail-closed contract is INVERTED in the feature v0.55 shipped as
its headline, and the release notes' claim that absence means 'not proven,
never unsafe' does not hold for imported memory.

SCOPE DECISION, logged not silent: stacked into v0.56 rather than cut as an
emergency v0.55.1, because synth has no external consumers yet. That stops
being the right call the day anyone outside this project compiles with
--proven-safe.

#928 is why the other three exist: 383 spec assertions in tests/wast are parsed
and DISCARDED — CI only checks that �[2m2026-08-07T19:06:13.742114Z�[0m �[32m INFO�[0m Using backend: arm
�[2m2026-08-07T19:06:13.742150Z�[0m �[32m INFO�[0m No input specified, using 'add' demo
�[2m2026-08-07T19:06:13.742152Z�[0m �[32m INFO�[0m WASM operations: [LocalGet(0), LocalGet(1), I32Add]
�[2m2026-08-07T19:06:13.742359Z�[0m �[32m INFO�[0m Encoded 12 bytes of machine code
�[2m2026-08-07T19:06:13.742361Z�[0m �[32m INFO�[0m Cortex-M layout:
�[2m2026-08-07T19:06:13.742362Z�[0m �[32m INFO�[0m   Vector table: 0x00000000
�[2m2026-08-07T19:06:13.742363Z�[0m �[32m INFO�[0m   Startup code: 0x00000080
�[2m2026-08-07T19:06:13.742364Z�[0m �[32m INFO�[0m   Default handler: 0x0000009c
�[2m2026-08-07T19:06:13.742365Z�[0m �[32m INFO�[0m   Trap handler: 0x0000009e
�[2m2026-08-07T19:06:13.742366Z�[0m �[32m INFO�[0m   User code: 0x000000a0
�[2m2026-08-07T19:06:13.742367Z�[0m �[32m INFO�[0m   Stack top: 0x20020000
�[2m2026-08-07T19:06:13.742405Z�[0m �[32m INFO�[0m Generated 617 byte ELF file
Compiled add to output.elf
  Code size: 12 bytes
  ELF size: 617 bytes

Inspect with: synth disasm output.elf exits 0. The backend's
primary correctness suite grades 'did an ELF come out', not 'is it right', so
silent wrong values in calls (#929) and branch-with-value (#930/#931) survive by
construction. It is the exit-0 vacuity class on the correctness suite itself.

That makes RQ-56-CONF the release's centre of gravity, not a follow-up — the
theme was already 'the factory, not the instances' and this is the factory.

Root cause of the #932 miss recorded in the artifact: the #901 differential used
a DECLARED memory, so the imported shape was never exercised. Same blind spot
recorded after v0.53 — validators test the shape they were written against.

Scope 6 -> 10 artifacts, 7 at priority must. rivet ours-errors 0.
@avrabe
avrabe merged commit 1e638c8 into main Aug 8, 2026
52 checks passed
@avrabe
avrabe deleted the plan/v0.56-scope branch August 8, 2026 15:54
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