plan(v0.61): scope #1102 and #1100 (11 -> 13), and un-red main's R4 - #1103
Merged
Conversation
RQ-61-DANGLE (#1102, gale). rv32 ships an UNLINKABLE object with EXIT 0 when a retained function calls a DECLINED INTERNAL function. Reproduced by the coordinator on a minimal 10-line module rather than the reported real-world driver: an internal `i32.load offset=1048588` declines, the exported caller is compiled anyway, and the object carries an undefined `synth_func_0` that `ld.lld` refuses. Why the existing guards miss it: #952 converts a declined REQUESTED EXPORT into a non-zero exit, and #1013 gave aarch64 a refusal for the same class. Both are keyed on EXPORTS. The declined function here is INTERNAL, so no export guard fires — yet an exported entry point relocates against it. The mechanism exists and is pointed one level too shallow, which is this release's recurring shape. Cross-backend, measured on a module every backend now declines (#1093): rv32 exit 0 with the dangling symbol, aarch64 exit 1 (the #1013 guard working), ARM exit 0 with the skip and NOT YET CHARACTERISED. The artifact records why ARM is open rather than guessing: its relocatable objects carry `.rel.text` with NO `.symtab` here, so the probe that answers the question for rv32 and aarch64 cannot answer it for ARM — and a HEALTHY ARM object has the same shape, so the absent symtab is PRE-EXISTING and is not evidence of the defect. I nearly recorded it as one; the healthy-vs-declined baseline is what stopped that. RQ-61-MCDCFLOOR (#1100). The MC/DC gate's report-side absolute floors are layout-coupled: adding the #1093 guard moved reconstruction on functions it never touched (32/141/60 -> 27/132/56) while the instrument side proved nothing was lost (175 -> 176 branches, exactly one population differing, 19/19 byte-identical signatures elsewhere). Second instance after #990, handled the same way — a re-statement WITH evidence, zero slack. The artifact's point is that a floor re-stated on every unrelated-code PR is a number being maintained, not a property being asserted, and lists the candidate shapes (delta against the same run's population, per-function scoping, or retiring the absolutes in favour of the stable surface). Verified before bumping, on the CI-pinned rivet 0.23.0: 484 -> 486 with all 13 RQ-61-* ids visible. ARTIFACT_FLOOR bumped in the same commit. Every open issue again has a release assignment. Refs #1102, #1100, #242. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
…ithout it, and that is my own miss `main` is failing its own status-evidence gate right now: FAIL R4 RQ-61-CICAP: delivery commit on main (RQ-61-CICAP (#1062) increment 1 / PR #1101) but status is `proposed` and `landed:` does not acknowledge it I merged #1101 without acknowledging it. R4 is evaluated over first-parent history, so an id-naming delivery commit reddens main the MOMENT it lands — which is exactly why I had been putting lane status flips ON the branch before merging. I did that for every lane's PR this wave and then skipped it for my own. RECORDED, NOT FLIPPED. `RQ-61-CICAP` is explicitly multi-increment and the REQUIRED jobs — the ones that actually block merges — have not moved, so `fields.landed` is the honest record: "the increment landed, the artifact is not done". Flipping to `implemented` would claim an outcome that has not happened; silence is what R4 correctly calls red. The note on the artifact also carries what increment 1 MEASURED, because it corrects the plan rather than confirming it: rust-cpu queue 3s exec 67s total 70s ubuntu-latest queue 4s exec 37s total 41s The self-hosted runner is ~2x SLOWER to execute and the queue wait was equal — the queue happened to be empty. The benefit is CONTENTION RELIEF on the required path, not per-job speed. So the conclusion is MOVE LESS, NOT MORE: each further move needs its own contention justification and re-measurement, and one that neither relieves contention nor runs faster should be reverted rather than kept for tidiness. Gate after this commit: status-evidence 0 failures (73 artifacts / 18 release files / 21 done-when predicates / 5 archaeology checks, 0 skipped), claim_check 52/52. Refs #1062, refs #1101. 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.
Refs #1102, #1100, #1062. Takes v0.61 from 11 → 13 artifacts, and un-reds
main.mainis currently failing its own gate — my missI merged #1101 without acknowledging it. R4 is evaluated over first-parent history, so an id-naming delivery commit reddens
mainthe moment it lands — which is exactly why I had been putting lane status flips on the branch before merging. I did that for every lane's PR this wave and then skipped it for my own.Recorded, not flipped.
RQ-61-CICAPis multi-increment and the required jobs have not moved, sofields.landedis the honest record. Flipping toimplementedwould claim an outcome that hasn't happened.New scope
RQ-61-DANGLE(#1102, gale) — rv32 ships an unlinkable object with exit 0 when a retained function calls a declined internal function. Reproduced on a minimal 10-line module: an internali32.load offset=1048588declines, the exported caller compiles anyway, and the object carries an undefinedsynth_func_0thatld.lldrefuses.Why the existing guards miss it: #952 catches a declined requested export, #1013 gave aarch64 a refusal for the same class — both keyed on exports. The declined function is internal. The mechanism exists and is pointed one level too shallow.
Cross-backend, measured on a module every backend now declines (#1093):
synth_func_0— the defectThe artifact records why ARM is open rather than guessing: its relocatable objects carry
.rel.textwith no.symtabhere, so the probe that answers this for rv32 and aarch64 can't answer it for ARM — and a healthy ARM object has the same shape, so the absent symtab is pre-existing and is not evidence of the defect. I nearly recorded it as one; the healthy-vs-declined baseline stopped that.RQ-61-MCDCFLOOR(#1100) — the MC/DC gate's report-side absolute floors are layout-coupled. Adding the #1093 guard moved reconstruction on functions it never touched (32/141/60 → 27/132/56) while the instrument side proved nothing was lost (175 → 176 branches, exactly one population differing, 19/19 byte-identical signatures elsewhere). A floor re-stated on every unrelated-code PR is a number being maintained, not a property being asserted.Verification
484 → 486on the CI-pinned rivet 0.23.0, all 13RQ-61-*visible;ARTIFACT_FLOORbumped in the same commit. status-evidence 0 failures, claim_check 52/52.Every open issue again has a release assignment.
🤖 Generated with Claude Code
https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L