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 cec7d5b
Browse filesBrowse the repository at this point in the historyBrowse files
fix(pm): widen the card-relation grammar to its hyphen and colon spellings
`partOfRe` required a literal space on both sides of the word, so `Part-of #N`,
`Part of: #N` and `Part-of: #N` — the three spellings every dispatch order
lists as forbidden, and the last of which is the git-trailer form — were
invisible to every reader of this grammar. `refsRe` carried the same colon gap,
and a pinned case asserted it as if it were a decision.
The separator is now the one `closingKeywordRe` already ships (an optional
colon), and the word accepts a hyphen where it accepts a space. Strict
superset: nothing that matched before stops matching.
Claude-Session: https://claude.ai/code/session_01MCLBsUgfykL74aU716rzVK
Co-authored-by: Claude <noreply@anthropic.com>
t('extractor: `Part-of: #N` — the git-trailer spelling, the measured miss', partOfTargets('Part-of: #17184', { markdown: false }).has('17184'), true);
19956
+
t('extractor: the widening is a superset — a line break still reaches the reference', partOfTargets('Part of\n#17184', { markdown: false }).has('17184'), true);
19957
+
t('extractor: ⛔ `Parts of #N` is not this relation', partOfTargets('Parts of #17184', { markdown: false }).size, 0);
19958
+
t('extractor: ⛔ nor a `part` that only ends the word', partOfTargets('Counterpart of #17184', { markdown: false }).size, 0);
19959
+
t('extractor: the declaration subset reads every spelling the relation does', [...partOfDeclarationTargets('Part-of: #17184', { markdown: false })].join(','), '17184');
19914
19960
19915
19961
// The REMEDY TEXT. The realistic regression is someone copying H7's tail
19916
19962
// across, so H7's own sentence is asserted to CARRY the clause this one must
@@ -25162,7 +25208,16 @@ Mutual exclusion: \`get_comments\` page 747 → \`[]\`, page 746 = my own R+117
25162
25208
t('refs extractor: case-insensitive, exactly as `partOfRe`', refsTargets('refs #16003').has('16003'), true);
25163
25209
t('refs extractor: ⛔ `Ref #N` is not the protocol\'s spelling', refsTargets('Ref #16003').size, 0);
25164
25210
t('refs extractor: ⛔ nor `References #N`', refsTargets('References #16003').size, 0);
25165
-
t('refs extractor: ⛔ nor a colon, exactly as `Part of` takes none', refsTargets('Refs: #16003').size, 0);
25211
+
// ⚠️ This pin USED to assert the opposite — that a colon was not this
25212
+
// relation's spelling — and it was pinning the gap rather than a decision:
25213
+
// `Refs: #N` is the git-trailer spelling of the same declaration, and the
25214
+
// keyword extractor beside it has accepted `Fixes: #N` since the colon was
25215
+
// measured against GitHub's own parser. Replaced rather than reworded: the
25216
+
// old case passed for as long as the branch it named existed, which is the
25217
+
// shape a fixture takes when what it really pins is a missing thread.
25218
+
t('refs extractor: a colon IS the spelling, as at the keyword extractor', refsTargets('Refs: #16003').has('16003'), true);
25219
+
t('refs extractor: …and the item annotation still reads through the colon', refsTargets('Refs: #16003 (item 2)').get('16003'), 'item 2');
25220
+
t('refs extractor: the word is still bound — `Prefs: #N` is not a reference', refsTargets('Prefs: #16003').size, 0);
25166
25221
t('refs extractor: the word is bound — `Prefs #N` is not a reference', refsTargets('Prefs #16003').size, 0);
25167
25222
t('refs extractor: several cards in one body are each read', [...refsTargets('Refs #1 (item ①) and Refs #2').keys()].join(','), '1,2');
25168
25223
t('refs extractor: a missing body is empty, never a crash', refsTargets(undefined).size, 0);
0 commit comments