You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(pm): name the Regen-provenance token in the rule, and one hop on two carriers is one hop
Three things the at-tier review named. (1) The rule line now carries the
literal `Regen-provenance:` token, so a seat reading the governed text
alone can write a line the reader matches; it stays one line at 110 bytes
and the file stays at its ceiling. (2) regenChainToHead de-duplicates hops
on record + from + to BEFORE the ambiguity test: the reader searches both
carriers and the text trains the dual-carrier habit, so one hop posted on
the PR and on its card arrived twice and ended the walk. Two DIFFERENT
hops into one head still do. (3) The queue battery's duplicate specimen
becomes a real slipped-in-edit case, and the path it names is asserted at
the reader that owns the reason.
Claude-Session: https://claude.ai/code/session_01Wnstp2kTth7sGXfr8fXypc
Co-authored-by: Claude <noreply@anthropic.com>
'#18862: cross-author LIVE claims with no `Release:` between — the hand-over the protocol never wrote, named; judged only after its effective instant': 52,
864
864
'#16770: the exit-0 line says which carriers agreed — LABEL carriers — and that the PR body was not read': 14,
865
865
'#18892: the claim comment\'s EDIT reading — taken from the two stamps already in hand, reported and never failed': 10,
866
-
'⭐ the 2026-09-20 ruling: a pure-regeneration head move KEEPS the record, decided on the COMMITTED trees': 23,
866
+
'⭐ the 2026-09-20 ruling: a pure-regeneration head move KEEPS the record, decided on the COMMITTED trees': 25,
867
867
});
868
868
869
869
// DELETING an entry silences that battery's floor exactly as effectively as
let target = String(pair?.headSha ?? '').toLowerCase();
3170
3178
if (target.length < H51_SHA_MIN_HEX) return null;
3171
3179
const chain = [];
@@ -8142,6 +8150,8 @@ export async function selfTest() {
8142
8150
t('⛔ a line naming only one sha is not a hop — the tail after it is the seat\'s transcript and is unread', regenProvenanceHops({ prComments: [{ id: 9, body: `Regen-provenance: 3301 · \`${HEAD_9AF9}\`` }] }).length === 0);
8143
8151
t('the chain walks BACK over several hops, oldest first', regenChainToHead({ headSha: 'cccccccc', prComments: [PROV(HEAD_9AF9, 'bbbbbbbb'), PROV('bbbbbbbb', 'cccccccc')] })?.map((h) => h.from).join() === `${HEAD_9AF9},bbbbbbbb`);
8144
8152
t('⛔ two hops arriving at ONE head carry no chain — ambiguity is never ranked', regenChainToHead({ headSha: NEW_HEAD, prComments: [PROV(HEAD_9AF9), PROV('bbbbbbbb')] }) === null);
8153
+
t('⭐ the SAME hop on BOTH carriers is ONE hop, ⛔ not ambiguity — the dual-carrier habit this file trains must not kill the carry', regenChainToHead({ headSha: NEW_HEAD, prComments: [PROV()], cardComments: [PROV(HEAD_9AF9, NEW_HEAD, 3301, 3351)] })?.length === 1);
8154
+
t('…and it CARRIES end to end from there, so the pair is CLEAN rather than 重挂', (() => { const dual = moved([RECORD_ON_9AF9, PROV()], GIT_EMPTY, { cardComments: [CLAIM('Clause-②: yes'), PROV(HEAD_9AF9, NEW_HEAD, 3301, 3351)] }); return gateBindingState(dual).state === 'completed' && locateReviewOfRecord(dual).state === 'found' && pairRows(dual).length === 0; })());
8145
8155
t('⛔ a thread with no line carries none, so today\'s rule is untouched where nobody claims the exception', regenChainToHead(moved([RECORD_ON_9AF9])) === null && gateBindingState(moved([RECORD_ON_9AF9])).state === 'moved-after-clear');
8146
8156
// the tree test — and it reads COMMITTED trees, never the working one
8147
8157
t('⭐ an EMPTY non-`merge=os-regen` diff CARRIES the record: the pair reads COMPLETED, ⛔ not 重挂', gateBindingState(CARRIED()).state === 'completed');
assert('⛔ (ii) an-EDIT-SLIPPED-IN-beside-the-regeneration-refuses-exactly-as-an-uncarried-old-head-does',handMoved.exitCode===EXIT_REFUSED_UNAPPROVED&&handMoved.entries[0].record.state==='absent');
4472
+
// ⭐ WHICH path is named by the reader that owns the reason; at the queue the
4473
+
// refusal surfaces as an absent record, so the name is asserted at its source.
0 commit comments