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 87fa4c8
Browse filesBrowse the repository at this point in the historyBrowse files
fix(pm): H44's timestamp leg accepts an ISO instant whose hour follows a T
`H44_READING_TIMESTAMP` anchored the hour with a bare word boundary, which
needs a NON-word character in front of it. The `T` of an ISO instant is a word
character, so `2026-09-15T14:51Z` read false — and so did `2026-03T00:21Z`, the
spelling the 2026-09-02 ruling itself gives. A reading that DID carry its
取数时刻 in the ruled minute form was reported as untimestamped: a false
positive on the row's own subject. A seconds stamp passed only by accident, the
boundary holding before its `mm:ssZ` tail so the match began at the minutes.
The left anchor now names one further predecessor — the ISO `T`, looked BEHIND
rather than consumed, so a match is still exactly the stamp. Nothing else is
admitted: the boundary is kept (a clock inside a longer digit run is still not
a stamp), no other letter opens one, and only the uppercase `T` the ruling
spells. Strictly more paragraphs read clean, so the row can only get quieter.
Self-test 4235 -> 4243 cases: the two ISO spellings that read false, a pin on
where the seconds match STARTS (the fix, not the accident), three declared
negatives, and the H44 marker case re-pinned to MINUTES with the seconds
spelling kept beside it — the comment saying that limit existed is rewritten,
because the limit is gone.
Claude-Session: https://claude.ai/code/session_01HZfg2AwVX191qCizp88gQr
Co-authored-by: Claude <noreply@anthropic.com>
* The reading grammar, as data so the self-test can drive every shape by name
@@ -28900,6 +28926,21 @@ Mutual exclusion: \`get_comments\` page 747 → \`[]\`, page 746 = my own R+117
28900
28926
t('H44 grammar: the timestamp accepts the ruled HH:MMZ', H44_READING_TIMESTAMP.test('19:38Z'), true);
28901
28927
t('H44 grammar: …and the seconds field, which is the same rule obeyed harder', H44_READING_TIMESTAMP.test('2026-09-03T10:37:51Z'), true);
28902
28928
t('H44 grammar: …but not a bare clock with no zone', H44_READING_TIMESTAMP.test('19:38'), false);
28929
+
// ⭐ The ISO instant (#18323). Both of these read FALSE before that change —
28930
+
// the second is the spelling the 2026-09-02 ruling itself gives — because the
28931
+
// hour sat behind a `T`, which is a word character and so no boundary.
28932
+
t('H44 grammar: ⭐ …and an ISO instant whose hour follows the `T`', H44_READING_TIMESTAMP.test('2026-09-15T14:51Z'), true);
28933
+
t('H44 grammar: …including the ruling\'s own spelling, which read false against its own rule', H44_READING_TIMESTAMP.test('2026-03T00:21Z'), true);
28934
+
// ⛔ The seconds form always passed — by ACCIDENT, the boundary holding before
28935
+
// its `mm:ssZ` tail so the match began at the MINUTES. Pinning where the match
28936
+
// STARTS is what tells the fix apart from the accident it replaces.
28937
+
t('H44 grammar: the seconds stamp now matches from its HOUR, not from its `mm:ssZ` tail', '2026-09-15T14:51:42Z'.match(H44_READING_TIMESTAMP)[0], '14:51:42Z');
28938
+
// ⛔ THE DECLARED NEGATIVES of the new anchor: it names one predecessor and
28939
+
// does not drop the boundary.
28940
+
t('H44 grammar: ⛔ a clock inside a longer digit run is not a stamp', H44_READING_TIMESTAMP.test('12314:51Z'), false);
28941
+
t('H44 grammar: ⛔ nor does any other letter open one — only the ISO `T`', H44_READING_TIMESTAMP.test('abc14:51Z'), false);
28942
+
t('H44 grammar: ⛔ and only the UPPERCASE `T` the ruling spells', H44_READING_TIMESTAMP.test('2026-09-15t14:51Z'), false);
28943
+
t('H44 grammar: an ISO instant still needs its zone, exactly as a bare clock does', H44_READING_TIMESTAMP.test('2026-09-15T14:51'), false);
28903
28944
t('H44 fences: an unterminated fence swallows to the end rather than reopening', h44StripFences('a\n```\n92 open cards').trim(), 'a');
28904
28945
28905
28946
// ⑨ The row sentence: it names the comment, the fragment, and its posture.
@@ -28989,11 +29030,14 @@ Doubles as the fire's **write self-check** (step 0). \`201\` is not the reading.
28989
29030
t('H44 marker: ⭐ what it reports on that body is the untimestamped CHARTER reading', h44kind(MARKER_R236_18312, true), 'tree');
28990
29031
t('H44 marker: …echoed verbatim, so the remedy is one edit of a known artefact', h44frag(MARKER_R236_18312, true), '827cacbf');
28991
29032
t('H44 marker: …under the marker\'s own name rather than the carrier\'s', h44hit(MARKER_R236_18312, true).shape, 'a round-open marker');
28992
-
// ⚠️ The stamp here is spelled to SECONDS deliberately: `H44_READING_TIMESTAMP`
28993
-
// requires a word boundary before the hour, which a preceding `T` does not
28994
-
// give, so a minute-precision ISO stamp does not clean a paragraph. That is
28995
-
// this row's own reading and ⛔ not this card's to change — it is filed.
28996
-
t('H44 marker: ⛔ and it stays SILENT on the same marker once the reading carries its stamp', h44hit(MARKER_R236_18312.replace('tip `827cacbf`)', 'tip `827cacbf`, read 2026-09-15T14:51:42Z)'), true), null);
29033
+
// ⭐ The stamp here is spelled to MINUTES — the ruled form — because the limit
29034
+
// that forced SECONDS is gone (#18323). `H44_READING_TIMESTAMP` used to need a
29035
+
// non-word character before the hour, which a preceding `T` is not, so a
29036
+
// minute-precision ISO stamp did not clean a paragraph and this case bought its
29037
+
// silence with a precision the ruling never asked for. The seconds spelling is
29038
+
// pinned beside it, so neither reading can regress alone.
29039
+
t('H44 marker: ⛔ and it stays SILENT on the same marker once the reading carries its stamp', h44hit(MARKER_R236_18312.replace('tip `827cacbf`)', 'tip `827cacbf`, read 2026-09-15T14:51Z)'), true), null);
29040
+
t('H44 marker: …and the SECONDS spelling of the same reading is silent too', h44hit(MARKER_R236_18312.replace('tip `827cacbf`)', 'tip `827cacbf`, read 2026-09-15T14:51:42Z)'), true), null);
28997
29041
t('H44 marker: ⛔ a comment that QUOTES a marker deeper down is not one — H65\'s headline control', h44IsRoundOpenMarker('A note about last round.\n\n**Round-open marker** · triage seat · **R+235**'), false);
28998
29042
t('H44 marker: …and such a comment off a seat post stays out of scope entirely', h44hit('A note about last round.\n\n**Round-open marker** · triage seat · tip `827cacbf`'), null);
28999
29043
// ⭐ ONE declaration of the spellings: H44 reads H65's grammar rather than
0 commit comments