docs(test): the navigation guard header states the Simplified fallback - #1554
Merged
Merged
Conversation
The file header's #1113 history section explained the thirteen zh-Hant strings with "so a zh-Hant reader sees the English UI" — the causal claim #1368 struck as measured false. The KNOWN_UNRESOLVED_CRM comment 260 lines below already states the measured reason and bans that form, so one file carried both, with the retired one first. The console falls back to Simplified: zh-Hant-TW, zh-TW and zh-HK all render htmlLang=zh with Simplified strings, because the console ships one Chinese bundle and selects on the primary subtag. The header now carries the wording AGENTS.md sanctions, and the English convention carries the half that justifies it — rather than ship mixed Simplified/Traditional script. One cross-reference added at the end of the bullet, pointing at KNOWN_UNRESOLVED_CRM. The header is not reorganised: the two statements are made to agree and linked, not merged. Comment text only. No rule, ledger or roster moved; the suite's 18 tests pass unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019hUuCQStzXGMFSX4dzww5t
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
os-sales
marked this pull request as ready for review
September 3, 2026 11:32
os-sales
added a commit
that referenced
this pull request
Sep 3, 2026
…nctions (#1553) #1368 corrected the REASON zh-Hant pages name platform navigation in English — the console falls back to Simplified, so a Traditional page labels navigation in English rather than ship mixed Simplified/Traditional script — and wrote it into AGENTS.md:343-345. Reaching the reader took four PRs across two rounds (#1537, #1546, #1549, #1554) and the sentence ended up corrected in nine places. Nothing went red at any point, because nothing in CI reads prose. The new guard pins the CLAIM, not the punctuation: a passage naming the convention must state the sanctioned reason in the same passage, matched wrap-insensitively over de-commented, emphasis-stripped text. The three measured register variants — full stop inside the parens, outside it, and the short glossary form that drops the trailing clause — all pass unchanged. Replayed over the drift's real history it is red for the whole window and green only from #1554: 7 red of 7 convention passages at 05f867e^, 7 of 8 at 30f2500, 1 of 9 at 18f523f^, 0 of 9 at 18f523f and today. The last red is the navigation guard's own file header, the site that survived three days because that file exempts itself from its own scan. This file takes no exemption. It matches the assertion rather than the vocabulary, so the deliberate negation #1546 wrote is read and passed on its merits rather than skipped; and its retired-reason ledger is escaped the way docs-object-term-consistency.test.ts escapes retired spellings, so the file never literally spells the sentence it bans. The rule caught two violations in this file itself on its first run, and both were rewritten rather than exempted. The English markers are derived — the first test parses the AGENTS.md bullet and asserts they are substrings of it, so the next correction to the rulebook goes red here. The Chinese markers cannot be derived (AGENTS.md carries no Traditional rendering) and are pinned constants citing it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019hUuCQStzXGMFSX4dzww5t
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1547
test/docs-setup-navigation-names.test.tsstated two different reasons for the same convention, 260 lines apart, and the retired one came first — in the #1113 history section a reader goes to for background. PR #1546 had just rewritten theKNOWN_UNRESOLVED_CRMcomment below it to state the measured reason and ban the retired form, which is what turned a stale line into a self-contradiction. This makes them agree.What changed
test/docs-setup-navigation-names.test.ts— comment text only — plus a changeset. No rule, ledger or roster moved:CITATION,CRM_CITATION,APP_WORDS,RETIRED_UI_NAMES,KNOWN_UNRESOLVEDandKNOWN_UNRESOLVED_CRMare byte-identical.Before (line 159):
After:
The English convention was always correct; only the reason offered for it was wrong. So the causal clause now names the fallback, and the convention clause carries the half that justifies it — the wording
AGENTS.mdsanctions in its Chinese-doc rules.Cross-reference added (end of the same bullet, two lines):
Placed at the end of the bullet rather than mid-paragraph, so it does not interrupt the "Each was ALSO an instance…" thread that belongs to the thirteen. The header is not reorganised — the two statements are made to agree and linked, not merged into one. Unifying them is a different card.
Measurements
sees the English UI,English UI,English console,displays English,in English,reader sees,falls back,Simplified, plus a wrap-insensitive regex over the de-commented text (sees|shows|displays|renders|gets…English) so a claim split across a comment wrap could not hide. Two hits before the edit; one after — the deliberate ⛔ negation at line ~430 that PR docs(zh-Hant): name this app's own sidebar in English, and empty the CRM quarantine ledger #1546 wrote, which stays. Line 161's "zh-Hant pages spell platform navigation in English" is the convention, not the retired reason, and is correct.KNOWN_UNRESOLVED_CRMwas deliberately not added — that block is out of surface.grep -rnovertest/,scripts/,.github/for the phrase returns exactly one hit: the line being changed. Negative controls confirm the search reached all three trees —KNOWN_UNRESOLVED_CRManddocs-setup-navigation-namesboth hit undertest/,changesethits five files under.github/,hygienehits two underscripts/.392405f7),vitest run test/docs-setup-navigation-names.test.tsgave 1 file, 18 tests passed. After the edit, the same command gives 1 file, 18 tests passed.Rule 1 does not see this file.
SCANNED_DIRSincludestest/, butFIRST_PARTY_TEXTfilters outSELF = 'test/docs-setup-navigation-names.test.ts'— the file names retired spellings on purpose, so it cannot scan itself. That exemption is why the edit trips nothing, and it is also why nothing in CI could have caught the drift in the first place.No ablation, deliberately. This is a comment-only change: there is no behaviour to remove and re-measure, and manufacturing a ceremony would prove nothing. What is proved instead is that the edit landed on disk — blob
84101f6fto71f789ee, with counts read back from the file, not from a substitution's exit code: the removed clause 1 → 0, each injected clause 0 → 1, and the #1546 negation held at 1.Verification
pnpm verify— all eight stages, green, on3d3d7d2b(the commit pushed here;git statuswas clean when the run started, so the run and the commit are the same tree). Run under the container's shared heavy-verify lock;VERDICT command-exit 0.validate✓ Validation passed (1710ms)typechecktsc --noEmitclean —--listFilesconfirms the edited file is in the typecheck surface (1 hit), so this is a measurement and not a vacuous passlintlint:i18n-gate✓ i18n lint gate: 0 i18n/missing-* issueshygiene✓ source hygiene clean— includesno raw control bytes in first-party fileshygiene:tokens✓ source token ratchet clean(business ~83,423 / interaction ~37,429 / total ~135,193, all under ceiling). Unmoved by construction: the ratchet measuressrc/**/*.tscomment-stripped, and this change is a comment undertest/build✓ Build complete (1999ms)testTest Files 159 passed (159)·Tests 3344 passed, 1 skipped (3345)A changeset is included with empty frontmatter — the sanctioned "this PR releases nothing" declaration that
.github/workflows/changeset-check.ymldocuments. Comment prose in a test file ships nothing to HotCRM users.Worth its own card
The method note on the issue is confirmed by this run and is not addressed here: nothing in CI reads a comment, and this file is the one place in the repo permitted to spell a retired name, so the retired sentence can be reintroduced anywhere with no gate noticing. It has now been found in nine places across three sweeps. Whether that sentence should be pinned somewhere a test can see it is a separate question and out of scope: #1547 is comment text only.
🤖 Generated with Claude Code
https://claude.ai/code/session_019hUuCQStzXGMFSX4dzww5t