R-DIGEST-OP-COLLISION is REPRODUCED and lands as six PINNED_DEFECT pins: two classes emit a fold op for the SAME digest key, and the last one wins (under D-REPAIR-CLAIM-GATES-PINNED-2026-09-12; tests only — no production behaviour, no format, no consensus rule, no published claim). The Researcher derived this from source and explicitly did NOT certify it (anchoredPreSet-not-anchored-REMEDY-RESEARCH-CERTIFICATION-2026-09-13.md §9, "I am NOT certifying this as a break ... Routed to the TESTER as a probe before anyone prices it"). It reproduces. assembleStateRootRecomputeOps appends every class's digest ops into one slice in the order S → B → T → A → M → P, and classes S, B and T each compute tagBondedRoot / tagQualifiedRoot from the anchored pre-set plus THEIR OWN CLASS DELTA ONLY. All three land at the identical statehash.Key(tag, nil) and all three read OldValue from the SAME digest witness, so every duplicate op carries a byte-identical OldValue and Proof and all of them verify at step (1) of statehash.FoldChangedPaths. Step (5) then replays them with trie.Update in slice order with no dedup and no duplicate-key guard, so the last op on a key wins. MEASURED on an S+B block: S emits a7bd89ee… = nodeSetMTH(pre \ culprit), B emits 6bc0de14… = nodeSetMTH(pre ∪ fresh) and the fold takes B's, while real apply commits c92028bf… = nodeSetMTH((pre ∪ fresh) \ culprit). ONE LOOSE SENTENCE IN THE ROUTED §9.1 IS SHARPENED, AND NOTHING ELSE IS: §9.1 says the block folds to "B's value, silently dropping the slash's eviction" — exact about the winner, but it invites the reading that B's value is the honest one minus the eviction, and the honest value equals NEITHER class's op. No class computes it, because no class ever sees another class's delta. This is not "the wrong one of two candidates won", it is "the right answer was never a candidate". The certification's DIRECTION is not corrected — it was already right in the same section: §9.2 states the honest post-set outright ("The honest post-set is (pre ∪ regs) \ culprits") and §9.4 already prescribes "a single cross-class computation … not to dedup", naming reconstructPostQualifiedWithWrites as the algorithm the tree already has. The measurement AGREES with both. (An earlier draft of this entry and of the test file's header billed this as a "CORRECTION OF RECORD" against the routed finding's shape; a blind review read the certification and falsified that scope, so it is narrowed here to the one sentence it actually touches.) The oracle is the box's own fold output, never the honest committed root (scar:ablation-oracle-is-the-honest-artifact): measured against the honest root the compound block MISMATCHES and stalls, which is what every shipped ablation in this area would observe and read as soundness. A real proposer commits what its own fold produced, and the box's terminal equality then passes by construction — recomputeViaHead returns nil against the box's own root. That is box.Accept ∧ node.Reject, the same soundness failure as R-ANCHORED-PRE-SET by a different lever, and the certified anchoring remedy does not close it: every pre-set here IS anchored and every duplicate op DOES verify — the defect is downstream of anchoring entirely. It is an ORDERING defect, not a class-B quirk: an S+T block reproduces with a DIFFERENT winner (T is appended after S), so the slash is the change dropped there. The accepted post-state contradicts itself: the per-member leaves live at distinct keys, so class S's delete of bonded||culprit survives into the folded set while the bondedRoot digest the fold lands on still counts the culprit — two disagreeing facts inside one accepted root. Driven RED by five ablations, and every pin has a UNIQUE signature: making FoldChangedPaths refuse a duplicate key reddens D1/D2/D4/D5, and suppressing class B's duplicate emission reddens D0/D1/D3/D4 while D2 (the S+T pair) correctly stays green. A blind review ran three MORE — a pure append-order flip (class S deferred last, nothing else), suppressing class S's emission, and reversing the fold's update replay (first write wins) — because two ablations alone leave "one leg, three names" open. They close it: D2 splits from D1 on the class-B suppression (the S+T pair is untouched by a class-B fix), D3 splits from everything on the order flip, and D4 splits from D1 on the reversed replay. Zero vacuous pins in an 8×5 matrix. The bondreg-only control also reddens under the second ablation, so it is load-bearing rather than decorative, and the slash-only / bondreg-only controls both agree with real apply on the unablated tree, which is what rules out a broken fixture or a malformed witness. D0–D4 each carry PIN + MECHANISM + TEETH; TestRTDigestCollision_PinsFireOnTheirRemediations feeds all four predicates their POST-FIX input and asserts each speaks up, including both vacuity shapes (a single op, and duplicates carrying the same NewValue). t.Skip is refused. D5 is the sixth pin and it used to be mislabelled a control. It asserts that the compound block is rejected when measured against the HONEST root — which is why every shipped ablation in this area read the defect as soundness — and it stayed green under all five ablations, so it reddens on the remedy, which is the pin shape and not the control shape. It is renamed and tightened to ONE error class: an earlier draft asserted only err != nil and therefore passed, under the duplicate-key-refusal ablation, on a completely unrelated error that never reached the root comparison. It now requires ErrRecomputeStateRootMismatch, and measured on the identical patched tree it reddens under that ablation where the old assertion stayed green. D0 also now asserts the shared Proof, which its own header claimed and only OldValue checked: digestFoldOp reads both off one w := byTag[tag], so the duplicates carry the SAME statehash.Witness value — one wrapped proof, byte-identity a fortiori — and that is what makes the break a wrong-accept rather than a stall. CONTAINMENT: (*Box).Validate still applies the R1.8 downgrade, so the box never accepts on this path today — that downgrade is the only barrier between this finding and damage, it is deliberately not touched, and the finding is what happens the day R1.8 flips. The remedy is research-gated and is NOT built here. THE PINS ARE NOT THE FORCING FUNCTION FOR THE FLIP, AND A REGISTER ROW IS: every pin reddens when the DEFECT moves and stays GREEN if R1.8 flips with the defect live, which is precisely the day the break becomes damage, so R-DIGEST-OP-COLLISION enters the ROADMAP.md residual register with an owner, a closer and a lane (simplicity rule 4) and the R1.8 accept-flip bullet now names closing it as a hard precondition. scripts/check_residual_register.py could not have caught the omission — it asserts that every residual NAMED in ROADMAP.md has a row, never that every open break is named, so its green was not evidence and it is deliberately not widened here. The epoch-boundary instance is filed as R-DIGEST-COLLISION-AT-EPOCH-BOUNDARY and is UNCOVERED: at a boundary class P's reconstructPostQualifiedWithWrites computes the CORRECT cross-class post-qualified set and freezes it into epochSetRoot while the qualifiedRoot digest in the same block takes the last-write-wins WRONG value — two consensus-visible digests disagreeing about who is qualified inside one accepted root — and every fixture here runs EpochBlocks: 1024 at a low height, so isBoundary is false and class P never dispatches. Side finding, not fixed: ports.Hash has a String method, so %x on a ports.Hash VALUE double-encodes — fmt routes %x through Stringer — and prints 128 hex characters instead of 64. This affects the production mismatch text at core/chain/floorbox_recompute_stateroot_v5.go (recomputed %x != committed %x) and the pin text in the RT-ANCHOR gates; these gates print h[:] instead.