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
{{ message }}
Repository navigation
Commit 3fe813e
Browse filesBrowse the repository at this point in the historyBrowse files
fix(pm): H44 stops reading a session id as a dateless tree tip
`H44_READING_FRAGMENTS`'s `tree` shape is 7-40 hex characters carrying both
a letter and a digit, and a session identifier satisfies it: on one live board
6 of 9 H44 rows in a sweep were 「PM session c5c0ce54」/「PM 会话 c5c0ce54」
or the LAST SEGMENT of a `session_<uuid>` line, where the hyphen is a word
boundary. The row's remedy — add the time the reading was taken — applied to an
identifier asks a seat to stamp a reading nobody took, so the row taught the
wrong discipline rather than merely being noisy.
The `tree` shape itself is unchanged (pinned by its regex source). What is
added is narrowing 4: a per-shape `exclude` predicate, declared on the `tree`
entry alone, that drops a CANDIDATE which is lexically part of an identifier —
the tail of a longer token behind a flush `-`/`_`, or one introduced
immediately by `session` / `会话` / `session_`. The introduction leg reads
ADJACENCY rather than 「the sentence mentions a session」 because the loose
spelling silenced a real dateless tip reading measured on this board
(「this session's checkout HEAD `588475c3`」), which is pinned as CONTROL D.
The paragraph is rescanned past an excluded candidate for a shape that
declares an exclusion, so a comment that fired can change which fragment it
names but a quiet one cannot start firing.
Self-test: 4270 -> 4297 cases, H44 105 -> 132. CONTROL A (a dateless real tip)
still fires and CONTROL B (the same tip stamped) stays quiet.
Claude-Session: https://claude.ai/code/session_01HPfcjvF23QBoBj7P47DDxs
Co-authored-by: Claude <noreply@anthropic.com>
@@ -29238,6 +29369,69 @@ Doubles as the fire's **write self-check** (step 0). \`201\` is not the reading.
29238
29369
t('H44 summary: …and that the page is shared rather than bought per row', saidBy('h44Readings', summaryLine({}, 0)).includes('shared with H56, H64 and H65'), true);
29239
29370
t('H44: the window count key rides the enumerated forwarding contract too', SWEEP_COUNT_KEYS.includes('readingSeatNewest'), true);
29240
29371
29372
+
// -- H44's tree shape: an IDENTIFIER is not a tip (#18385) -----------------
29373
+
//
29374
+
// ⭐ The three firing inputs are the live spellings measured on the cloud
29375
+
// board, where 6 of 9 H44 rows in one sweep were this and nothing else. What
29376
+
// makes them worse than noise is the row's own remedy: 「add the time the
29377
+
// reading was taken」 applied to a session id asks a seat to stamp a reading
29378
+
// nobody took. CONTROL A and CONTROL B are the regression pins that say the
29379
+
// row still does its job, and CONTROL C is the canonical spelling that was
29380
+
// already quiet — the three of them are what make the change a NARROWING
t('H44 identifier: ⭐ 「PM session c5c0ce54」 is an id, not a tip — quiet', h44hit(CLAIM_SHORTHAND), null);
29390
+
t('H44 identifier: ⭐ …and the 「PM 会话」 spelling of the same claim', h44hit(CLAIM_SHORTHAND_ZH), null);
29391
+
t('H44 identifier: ⭐ …and a canonical `Session:` line, which fired on the UUID\'s LAST SEGMENT', h44hit(CLAIM_UUID), null);
29392
+
t('H44 identifier: ⭐ CONTROL A — a dateless REAL tip still fires, which is the whole point', h44kind(CLAIM_TIP_A), 'tree');
29393
+
t('H44 identifier: ⭐ …echoed as the tip itself, so the remedy still names what to date', h44frag(CLAIM_TIP_A), TIP_18385);
29394
+
t('H44 identifier: ⭐ CONTROL B — the same tip WITH its stamp stays quiet', h44hit(CLAIM_TIP_B), null);
29395
+
t('H44 identifier: ⭐ CONTROL C — the canonical session spelling was already quiet and still is', h44hit(CLAIM_CANONICAL), null);
29396
+
// ⭐ CONTROL D, and it is the reason the introduction leg reads ADJACENCY
29397
+
// rather than 「the sentence mentions a session」: this is comment 5695539587
29398
+
// on this board, a REAL dateless tip reading, and the loose spelling of the
29399
+
// leg silenced it. A possessive three words away introduces nothing.
29400
+
const POSSESSIVE_18385 = 'Claim: x\n\n**Harness reading** — every harness-loaded path on `origin/main` is in this session\'s checkout HEAD `588475c3` (the STALE reading that closed the previous shift)';
29401
+
t('H44 identifier: ⭐ CONTROL D — 「this session\'s checkout HEAD` + a tip」 is a READING and still fires', h44frag(POSSESSIVE_18385), '588475c3');
29402
+
// The sentence-vs-paragraph DECISION, both directions. A claim carries a
29403
+
// `Session:` line by template, so a paragraph-scoped test would silence the
29404
+
// whole claim population — CONTROL A's own habitat.
29405
+
t('H44 identifier: a session line ABOVE a dateless tip does not silence it — the break is the newline', h44frag(`${CLAIM_CANONICAL}\n\`5bc2f2727ae\` is the tip`), '5bc2f2727ae');
29406
+
t('H44 identifier: …and the rescan reaches a real tip past an excluded id in ONE sentence', h44frag(`Claim: x\n\nPM session c5c0ce54 reviewed head ${TIP_18385} of the PR`), TIP_18385);
29407
+
// ⛔ The two declared residuals: a word between the introduction and the
29408
+
// candidate is NOT excluded (one measurement away, not a guess), and no other
29409
+
// shape is touched at all.
29410
+
t('H44 identifier: ⛔ an intervening word is not an introduction — 「session id …」 still fires', h44kind('Claim: x\n\nPM session id c5c0ce54 dispatching'), 'tree');
29411
+
t('H44 identifier: ⛔ a count beside a session id is still a count', h44kind('Claim: PM session c5c0ce54 — 12 open cards on this lane.'), 'count');
29412
+
// ⛔ The SHAPE is not loosened for real tips — pinned as the regex source, so
29413
+
// a future widening of the token itself cannot ride in under this row.
t('H44 identifier: ⛔ the `tree` shape itself is byte-for-byte what it was', tree18385.re.source, '\\b(?=[0-9a-f]*[a-f])(?=[0-9a-f]*\\d)[0-9a-f]{7,40}\\b');
29416
+
t('H44 identifier: …and the exclusion is declared on exactly one shape', H44_READING_FRAGMENTS.filter((f) => typeof f.exclude === 'function').length, 1);
29417
+
t('H44 identifier: …that one being the tree shape', typeof tree18385.exclude, 'function');
29418
+
// The two legs, driven directly.
29419
+
t('H44 identifier leg: the UUID tail — a separator flush against a word character', h44TreeCandidateIsIdentifier('session_71836b57-5db6-459d-ae4d-c6d9d7dd2cc6', 32), true);
29420
+
t('H44 identifier leg: ⛔ …but a bullet dash is not that — the separator must be flush on BOTH sides', h44TreeCandidateIsIdentifier('- 5bc2f2727ae is the tip', 2), false);
29421
+
t('H44 identifier leg: the introduction — `session` with only decoration between', h44TreeCandidateIsIdentifier('PM session `c5c0ce54`', 12), true);
29422
+
t('H44 identifier leg: …and 「会话」 is the same word', h44TreeCandidateIsIdentifier('PM 会话 c5c0ce54', 6), true);
29423
+
t('H44 identifier leg: ⛔ a possessive three words away is not an introduction', h44TreeCandidateIsIdentifier('this session\'s checkout HEAD 588475c3', 29), false);
29424
+
t('H44 identifier leg: the lead stops at the sentence break, so a `Session:` LINE cannot reach the line below', h44SentenceLead('Session: `session_01x`\n`5bc2f2727ae` is the tip', 24), '`');
29425
+
t('H44 identifier leg: …and a full-width stop breaks it too', h44SentenceLead('会话 c5c0ce54。tip 5bc2f2727ae', 16), 'tip ');
29426
+
// The rescan seam. ⛔ A shape with no `exclude` is read exactly as before —
29427
+
// first match wins, no slicing, which is what keeps the ANCHORED `tableCount`
29428
+
// shape on its original reading.
29429
+
t('H44 rescan: the first admissible match is returned with its index', h44AdmittedMatch(tree18385, `session c5c0ce54 then ${TIP_18385}`).matched, TIP_18385);
29430
+
t('H44 rescan: …and its index is the position in the WHOLE paragraph, not the slice', h44AdmittedMatch(tree18385, `session c5c0ce54 then ${TIP_18385}`).index, 22);
29431
+
t('H44 rescan: a paragraph of nothing but excluded candidates has no match', h44AdmittedMatch(tree18385, 'session c5c0ce54 and 会话 5bc2f2727ae'), null);
29432
+
t('H44 rescan: a shape with no exclusion returns its first match untouched', h44AdmittedMatch(H44_READING_FRAGMENTS.find((f) => f.kind === 'count'), 'we hold 12 open cards and 4 PRs').matched, '12 open cards');
29433
+
t('H44 rescan: …and the anchored tableCount shape still reads its row', h44AdmittedMatch(H44_READING_FRAGMENTS.find((f) => f.kind === 'tableCount'), '| objectstack | **2** |').matched.includes('**2**'), true);
29434
+
29241
29435
// -- H45 — reserved and handed over at once (#15667, report-only) ----------
29242
29436
// Both directions of a pure label intersection. The neighbour cases pin that
29243
29437
// H45 takes the pair H3 cannot see and leaves H3's own pair alone.
0 commit comments