Skip to content

plan(v0.61): scope #1102 and #1100 (11 -> 13), and un-red main's R4 - #1103

Merged
avrabe merged 2 commits into
mainfrom
plan/v061-scope-3
Aug 28, 2026
Merged

plan(v0.61): scope #1102 and #1100 (11 -> 13), and un-red main's R4#1103
avrabe merged 2 commits into
mainfrom
plan/v061-scope-3

Conversation

@avrabe

@avrabe avrabe commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Refs #1102, #1100, #1062. Takes v0.61 from 11 → 13 artifacts, and un-reds main.

main is currently failing its own gate — my miss

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 multi-increment and the required jobs have not moved, so fields.landed is the honest record. Flipping to implemented would 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 internal i32.load offset=1048588 declines, the exported caller compiles anyway, and the object carries an undefined synth_func_0 that ld.lld refuses.

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):

backend result
rv32 exit 0, dangling synth_func_0 — the defect
aarch64 exit 1, refuses — #1013's guard working
arm thumb-2 / a32 exit 0 with the skip, 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 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 → 486 on the CI-pinned rivet 0.23.0, all 13 RQ-61-* visible; ARTIFACT_FLOOR bumped 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

avrabe and others added 2 commits August 28, 2026 04:22
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

codecov Bot commented Aug 28, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@avrabe
avrabe merged commit 23a0b54 into main Aug 28, 2026
58 checks passed
@avrabe
avrabe deleted the plan/v061-scope-3 branch August 28, 2026 03:19
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