Skip to content

Commit a978f79

Browse files
committed
merge: origin/main (H59 state_reason row) into the H52 fourth-exit branch
Region-disjoint on scripts/pm/check-half-states.mjs — H59 :14208–:14500, H52 :11906–:12260 plus the H52 self-test band. Claude-Session: https://claude.ai/code/session_017ETYWqMQD4qMtZzAGovWNi Co-authored-by: Claude <noreply@anthropic.com>
2 parents 80da3da + c337079 commit a978f79

1 file changed

Lines changed: 29 additions & 0 deletions

File tree

‎scripts/pm/check-half-states.mjs‎

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14557,8 +14557,24 @@ export function h59FalseCloseRow({ pr, card, attribution, closedEvent, closedAtM
1455714557
*
1455814558
* The card's presence in the open listing IS the reading, so a truncated
1455914559
* listing can only lose a row and never invent one.
14560+
*
14561+
* ⭐ The row also carries `state_reason`, the whole discriminator for the
14562+
* REOPENED arm: a card open because somebody REOPENED it is a deliberate act,
14563+
* ⛔ never GitHub failing to close it, so the arm changes the SENTENCE only.
1456014564
*/
1456114565
export function h59FalseOpenRow({ pr, card, keyword }) {
14566+
if (String(card?.state_reason ?? '') === 'reopened') {
14567+
return (
14568+
`FALSE OPEN (reopened): merged PR #${pr?.number} binds \`${keyword} #${card?.number}\` in its body and ` +
14569+
'the card is open carrying `state_reason: reopened` — it was CLOSED at some point and REOPENED since, a ' +
14570+
'deliberate act and ⛔ never the platform failure the plain row names. ⚠️ This row buys no timeline, so it ' +
14571+
'does not PLACE that reopen against the merge: whether the declared closure fired and was reversed, or ' +
14572+
'never fired on an already-reopened card, is unread here — what the payload settles is that a REOPEN ' +
14573+
'happened, and that is the act to read. Remedy, and it belongs to the SEAT THAT OWNS the card: read the ' +
14574+
'reopen\'s own reason — the comment that made it, or the decision-box label it carries — and ⛔ do not ' +
14575+
'close a card somebody reopened on purpose. ⛔ This row closes nothing and writes no label.'
14576+
);
14577+
}
1456214578
return (
1456314579
`FALSE OPEN: merged PR #${pr?.number} binds \`${keyword} #${card?.number}\` in its body, and the card ` +
1456414580
'is STILL OPEN after that merge — GitHub did not perform the closure the PR declared. ' +
@@ -34840,6 +34856,19 @@ Doubles as the fire's **write self-check** (step 0). \`201\` is not the reading.
3484034856
t('H59 (b): ⛔ no angle-bracket placeholder reaches the row body', /[<>]/.test(row59b), false);
3484134857
t('H59 (b): not a loud finding', isLoudFinding(row59b), false);
3484234858

34859+
// ⭐ Direction (b), REOPENED — the discriminator rides the same open listing row, so the arm buys nothing.
34860+
const row59bBy = (state_reason) => h59FalseOpenRow({ pr: pr59FalseOpen, card: { ...card59Open, state_reason }, keyword: 'Fixes' });
34861+
const row59bReopened = row59bBy('reopened');
34862+
t('H59 (b) reopened: ⛔ the platform-failure sentence is NOT printed at all', row59bReopened.includes('GitHub did not perform the closure'), false);
34863+
t('H59 (b) reopened: …it quotes the field it read off the payload it already held', row59bReopened.includes('`state_reason: reopened`'), true);
34864+
t('H59 (b) reopened: it says the card was closed and REOPENED since, a deliberate act', row59bReopened.includes('CLOSED at some point and REOPENED since'), true);
34865+
t('H59 (b) reopened: ⛔ it refuses to PLACE the reopen against the merge, buying no timeline', row59bReopened.includes('buys no timeline'), true);
34866+
t('H59 (b) reopened: the remedy points at the REOPEN\'s own reason', row59bReopened.includes('read the reopen\'s own reason'), true);
34867+
t('H59 (b) reopened: …and ⛔ warns off closing a card somebody reopened on purpose', row59bReopened.includes('do not close a card somebody reopened on purpose'), true);
34868+
t('H59 (b) reopened: the row still FIRES — this changed the SENTENCE, ⛔ not the population', row59bReopened.startsWith('FALSE OPEN (reopened):'), true);
34869+
t('H59 (b) reopened: ⛔ no angle-bracket placeholder reaches this one either', /[<>]/.test(row59bReopened), false);
34870+
t('H59 (b) reopened: ⛔ every OTHER state_reason keeps today\'s sentence, null included', [null, undefined, 'completed', 'not_planned'].every((r) => row59bBy(r).includes('GitHub did not perform the closure')), true);
34871+
3484334872
// The two directions are DISTINCT sentences — neither restates the other.
3484434873
t('H59 directions: the two rows do not share an opening', row59a.slice(0, 20) === row59b.slice(0, 20), false);
3484534874

0 commit comments

Comments
 (0)