codes/236-16-12.json (#995) was my reduction of @vprusso's codes/261-16-12.json (that entry has since been removed from the board as disconnected legacy in 14095599; the original file is pinned at github.com/unitaryfoundation/qldpc-challenge @ f55706ac, codes/261-16-12.json), produced with a move set built around a single qubit: remove a qubit lying in exactly one stabilizer of a type, or merge the two or three stabilizers it lies in until it lies in one. That framing was too narrow, and this note is about what replaces it.
Let S be any element of the row space of H_X — an element of the stabilizer group, not necessarily one of the published generators — with support T, and let a ∈ T.
1. Replace one generator of the subset summing to S by S itself. The span is unchanged: that generator equals S plus the rest of the subset. 2. Add S into every other X row meeting a, so a survives only in S. 3. Apply the CNOT fan-out from a to T \ {a}, which acts on the check matrices as H_X[:, b] ^= H_X[:, a] and H_Z[:, a] ^= H_Z[:, b].
After step 2 only S meets a, so step 3 turns S into the weight-1 stabilizer X_a and leaves every other X row alone; and column a of H_Z becomes the XOR of its entries over T, which commutation forces to be 0. Qubit a is disentangled and is deleted: n → n-1, k unchanged, and the Z rows only lose an index, so their weights and support diameters cannot rise.
The weight of S separates three regimes, entirely through the clearing step R ^= S:
|S| = 1 — nothing is added anywhere, so weight, radius and distance arepreserved exactly and no distance search is needed. This is the row-space form of the weight-1 stabilizer cleanup of Liang, Eberhardt and Chen (arXiv:2504.08887 Sec. III D step 4); research/local2d/boundary_engine.py implements only the literal case, a weight-1 generator ROW.
|S| = 2 — the row loses a and toggles one other index, so its weight changes by0 or −2 and can never rise.
|S| ≥ 3 — the row can grow, so every touched row is checked against the code'sweight class and its locality radius. This is the generalisation: the old merge-graft only ever built S from the generators a *single qubit* happens to lie in, and every graft accepted here needed an S that no single qubit selects.
Accepted on this code: |S| = 2: three, |S| = 3: three. Six qubits, all of them invisible to the move set that produced the source.
Low-weight row-space elements are enumerated as sums of at most three checks with a connected overlap pattern.
Fresh-seed RIS ladder: 12 at 20k → 200k → 1M → 5M → 20M trials per rung, independent seeds, both sides searched jointly. Nothing lighter than 12 appeared. Every graft was also screened and confirmed twice in the loop with independent seeds, but those rungs are a filter, not evidence — the ladder is the evidence, and the claim is an upper bound. On this project a [[682,10,38]] candidate survived three fresh seeds to five million trials and then fell at twenty million, so a flat ladder is not a proof.
verify/validate_candidate.py passes: board_advancing: true, dominated_by: [], no duplicate and no WL-equivalent entry, cell weight-8 × local-2d-bilayer.
Max check weight 8 throughout. Interaction radius 6.0000 → 6.0828, inside the bilayer cap of 7.0; layers unchanged at 2. Qubit positions are the source's — every surviving qubit keeps the coordinate it has in codes/236-16-12.json, and the reduction only deletes. kd²/n 9.763 → 10.017.
It dominates five current board entries on (n, k, d, w): 236-16-12 (mine), 261-16-12 and 263-16-12 (@vprusso's), 240-12-12-graft (@mathysrennela's) and 242-12-12.
The construction is @vprusso's [[261,16,12]] (original file pinned as described above). codes/236-16-12.json is my earlier reduction of it and this goes six qubits further; @mathysrennela established on this board that a reduction is a contribution in its own right, with [[240,12,12]] (since re-filed as codes/239-12-12-graft.json in #1066).