plan(v0.62): reach stays but stops being the headline, and gets a gating rule (9 -> 10) - #1146
Merged
Conversation
…ing rule (9 -> 10) Resolving the fork jess opened on #1132, against the maintainer's test: "would it hurt anyone, or might others be in need of it". OTHERS MIGHT NEED IT — SO REACH STAYS. jess measured synth's reach at 100% for the falcon cascade (5/5 stages on cortex-m7dp AND cortex-m4f, bit-exact against relay's SIL reference on emulated RT1176) and argued the compile rate was never their binding constraint. That is correct about jess and is n=1: their pipeline is curated on a pinned toolchain, while the 805-module census measures modules nobody curated for us. A consumer who has not filed yet cannot argue for themselves. BUT "WOULD IT HURT ANYONE" HAS A REAL ANSWER, AND IT IS NOT NO. #1072's own framing: "increasing reach converts latent encoder defects into reachable ones, and a backend that accepts 1.6% of real input has most of its encoder untested by real programs". That is not a worry, it is what happened — the release-invisible immediate-range defect, where a NULL table slot passes the type check it must trap on, was latent ONLY because those modules declined at module level before reaching the encoder. Widening acceptance made it live. We found it by going to look; a consumer would have found it by flying it. SO THE GATING RULE, general rather than per-artifact: every reach increment ships with the oracle that makes the newly-accepted input safe, and the oracle lands FIRST. An accepted module that silently returns a wrong value is strictly worse for a consumer than a loud decline — that is synth's whole differentiator, and trading it for an acceptance percentage is the flattery the compliance-envelope section forbids. RQ-62-MVLOWER already had this shape; it now applies to multi-memory and AArch64 import dispatch too. HEADLINE DEMOTED, WORK KEPT. The acceptance rate is published as the DENOMINATOR beside capability claims, not as an objective. NEW, AND IT TAKES THE PRIORITY REACH GIVES UP: RQ-62-VERIFYEMBED (must). The embedder side of the ABI has no gate. #1131 made OUR side checkable; nothing checks the consumer's. jess conformed correctly BY LUCK ON TWO INDEPENDENT COUNTS — a 1-in-2 guess on which of two linear-memory bases was authoritative, and a C shim that happened to compile to a bare tail-branch so GCC never allocated R11 as a frame pointer — and found both only by reading the document after their code was green. The ask is a check that refuses an embedder object writing R9/R10/R11. They have offered to validate any prototype against a real fused image on emulated RT1176 before we ship it. Recorded in that artifact and worth not re-litigating: the `func_N` alias does NOT solve the `@`-in-export-name papercut. Measured — it is emitted STB_LOCAL, so an external `bl func_0` cannot resolve to it. jess's objcopy workaround is still load-bearing. ARTIFACT_FLOOR 518 -> 519, re-derived with `rivet list`. Refs #242, #1132, #1131 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resolving the fork jess opened on #1132, against the test "would it hurt anyone, or might others be in need of it".
Others might need it — so reach stays
jess measured synth's reach at 100% for the falcon cascade (5/5 stages on
cortex-m7dpandcortex-m4f, bit-exact against relay's SIL reference on emulated RT1176) and argued the compile rate was never their binding constraint.That is correct about jess, and it is n=1. Their pipeline is curated on a pinned toolchain; the 805-module census measures modules nobody curated for us. A consumer who hasn't filed yet cannot argue for themselves.
But "would it hurt anyone" has a real answer, and it is not no
#1072's own framing: "increasing reach converts latent encoder defects into reachable ones, and a backend that accepts 1.6% of real input has most of its encoder untested by real programs."
That is not a worry — it is what happened. The release-invisible immediate-range defect, where a NULL table slot passes the type check it must trap on, was latent only because those modules declined at module level before reaching the encoder. Widening acceptance made it live. We found it by going to look; a consumer would have found it by flying it.
The gating rule
Every reach increment ships with the oracle that makes the newly-accepted input safe, and the oracle lands first.
An accepted module that silently returns a wrong value is strictly worse for a consumer than a loud decline — that is synth's whole differentiator, and trading it for an acceptance percentage is the flattery the compliance-envelope section forbids.
RQ-62-MVLOWERalready had this shape; it now applies to multi-memory and AArch64 import dispatch too.Headline demoted, work kept. The acceptance rate is published as the denominator beside capability claims, not as an objective.
New, and it takes the priority reach gives up
RQ-62-VERIFYEMBED(must). #1131 made our side of the ABI checkable; nothing checks the consumer's. jess conformed correctly by luck on two independent counts — a 1-in-2 guess on which of two linear-memory bases was authoritative, and a C shim that happened to compile to a bare tail-branch so GCC never allocated R11 as a frame pointer — and found both only by reading the document after their code was green.The ask: a check that refuses an embedder object writing R9/R10/R11. They've offered to validate any prototype against a real fused image on emulated RT1176 before we ship it.
Also recorded so it isn't re-litigated: the
func_Nalias does not solve the@-in-export-name papercut. Measured — it is emittedSTB_LOCAL, so an externalbl func_0cannot resolve to it. jess'sobjcopyworkaround is still load-bearing.ARTIFACT_FLOOR518 → 519, re-derived withrivet list.Refs #242, #1132, #1131