Skip to content

Commit 0f89d37

Browse files
committed
pm(half-states): H65 names the key it actually read in an unknown-tier row
A Chinese declaration carrying an off-spec word was reported as "carries a `Tier:` line" — a spelling the artefact does not carry, which is the class of false statement this repair exists to remove. The row now echoes the key it read and lists all four legal words. Claude-Session: https://claude.ai/code/session_017ef78bLdybu3AffehKkhfk Co-authored-by: Claude <noreply@anthropic.com>
1 parent 1b0aef6 commit 0f89d37

1 file changed

Lines changed: 15 additions & 3 deletions

File tree

scripts/pm/check-half-states.mjs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15564,6 +15564,9 @@ export const H65_TIER_KEY = /Tier:/;
1556415564
* a dialect and reports as `unknown-tier`, not as a tolerated third tier.
1556515565
* Neither word is a prefix of the other, so the scan order carries no meaning.
1556615566
*/
15567+
/** How the Chinese key is NAMED in a row, so the row never claims `Tier:`. */
15568+
export const H65_TIER_KEY_CN_LABEL = '层:';
15569+
1556715570
export const H65_TIER_WORDS_CN = Object.freeze([
1556815571
Object.freeze({ word: '小时层', tier: 'hourly' }),
1556915572
Object.freeze({ word: '每日层', tier: 'daily' }),
@@ -15710,6 +15713,11 @@ export function h65TierlessRoundArtefact(body) {
1571015713
return {
1571115714
shape,
1571215715
reason: 'unknown-tier',
15716+
// ⛔ The row must name the key it actually read: a `层:全量层` field
15717+
// reported as 「carries a `Tier:` line」 would be this row asserting a
15718+
// spelling the artefact does not carry — the same class of false
15719+
// statement #18547 was filed on, one layer down.
15720+
key: declared ? 'Tier:' : H65_TIER_KEY_CN_LABEL,
1571315721
detail: dialect ? dialect.slice(0, H44_FRAGMENT_ECHO_CAP) : '(nothing)',
1571415722
};
1571515723
}
@@ -15756,7 +15764,7 @@ export function h65TierlessRoundArtefactRow(hit, comment, total = 1) {
1575615764
const id = String(comment?.id ?? 'an unread id');
1575715765
const because =
1575815766
hit.reason === 'unknown-tier'
15759-
? `carries a \`Tier:\` line naming ${hit.detail === '(nothing)' ? 'NOTHING' : `\`${hit.detail}\``}, which is not one of \`${H65_TIER_WORDS.join('` / `')}\``
15767+
? `carries a \`${hit.key ?? 'Tier:'}\` declaration naming ${hit.detail === '(nothing)' ? 'NOTHING' : `\`${hit.detail}\``}, which is not one of \`${[...H65_TIER_WORDS, ...H65_TIER_WORDS_CN.map((entry) => entry.word)].join('` / `')}\``
1576015768
: hit.reason === 'not-at-line-start'
1576115769
? 'spells `Tier:` somewhere that is NOT the start of a line — decorated or mid-paragraph, where neither a reader nor this row looks for a declaration'
1576215770
: 'names NO tier at all';
@@ -23132,15 +23140,15 @@ export const SELF_TEST_BATTERIES = Object.freeze({
2313223140
// discharge). A negative with no live control beside it is how a repair
2313323141
// becomes a silencer, so the controls are inside the same floored battery.
2313423142
'H19 judged-set founding': 34,
23135-
// Registered with the second-spelling repair (#18547); the pin sits just
23143+
// Registered with the second-spelling repair (#18547): 45 cases, the pin just
2313623144
// under the count on the same grounds as its two neighbours. What this
2313723145
// battery floors is a WIDENING — the row stopped reporting a Chinese
2313823146
// declaration as silence — so the FIRING CONTROLS are inside it: the three
2313923147
// measured tier-less specimens, a Chinese mention in prose, a blockquoted
2314023148
// declaration, a dialect word, a bare key and a key-less mention. A widening
2314123149
// whose controls can drift out of the suite is how a repair becomes a
2314223150
// silencer, which is the failure this row was filed for in the first place.
23143-
'H65 tier declaration spelling': 34,
23151+
'H65 tier declaration spelling': 42,
2314423152
});
2314523153

2314623154
/** The floor on the ROSTER itself — how many batteries must be declared at all. */
@@ -32998,6 +33006,10 @@ Doubles as the fire's **write self-check** (step 0). \`201\` is not the reading.
3299833006
b(BATTERY65, 'H65 #18547 control: ⛔ a BLOCKQUOTED Chinese declaration is this artefact quoting another', h65reason(withTier65(MARKER65, '> 层:每日层(当日首 fire)')), 'absent');
3299933007
b(BATTERY65, 'H65 #18547 control: ⛔ the WORD SET is closed — a Chinese dialect is a finding', h65reason(withTier65(MARKER65, '层:全量层')), 'unknown-tier');
3300033008
b(BATTERY65, 'H65 #18547 control: …and the row echoes the word it refused', h65row(withTier65(MARKER65, '层:全量层')).includes('`全量层`'), true);
33009+
b(BATTERY65, 'H65 #18547 control: …naming the key it ACTUALLY read', h65row(withTier65(MARKER65, '层:全量层')).includes('carries a `层:` declaration'), true);
33010+
b(BATTERY65, 'H65 #18547 control: ⛔ …and never claiming a `Tier:` the artefact does not carry', h65row(withTier65(MARKER65, '层:全量层')).includes('`Tier:` declaration'), false);
33011+
b(BATTERY65, 'H65 #18547 control: …while an English dialect still names `Tier:`', h65row(withTier65(MARKER65, 'Tier: full')).includes('carries a `Tier:` declaration'), true);
33012+
b(BATTERY65, 'H65 #18547 control: …and the refusal lists all four legal words, not two', ['hourly', 'daily', '小时层', '每日层'].every((w) => h65row(withTier65(MARKER65, 'Tier: full')).includes(`\`${w}\``)), true);
3300133013
b(BATTERY65, 'H65 #18547 control: …a bare 「层:」 naming nothing reports as naming nothing', h65row(withTier65(MARKER65, '层:')).includes('naming NOTHING'), true);
3300233014
b(BATTERY65, 'H65 #18547 control: ⛔ the KEY is closed — 「层」 with no colon declares nothing', h65reason(withTier65(MARKER65, '本轮跑 小时层 增量')), 'absent');
3300333015
b(BATTERY65, 'H65 #18547 control: ⛔ …nor does another key carrying the same word', h65reason(withTier65(MARKER65, '本轮:小时层(增量)')), 'absent');

0 commit comments

Comments
 (0)