Skip to content

docs(test): the navigation guard header states the Simplified fallback - #1554

Merged
os-sales merged 1 commit into
mainfrom
claude/issue-1547-guard-header-retired-reason
Sep 3, 2026
Merged

docs(test): the navigation guard header states the Simplified fallback#1554
os-sales merged 1 commit into
mainfrom
claude/issue-1547-guard-header-retired-reason

Conversation

@os-sales

@os-sales os-sales commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator

Fixes #1547

test/docs-setup-navigation-names.test.ts stated 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 the KNOWN_UNRESOLVED_CRM comment 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.tscomment text only — plus a changeset. No rule, ledger or roster moved: CITATION, CRM_CITATION, APP_WORDS, RETIRED_UI_NAMES, KNOWN_UNRESOLVED and KNOWN_UNRESOLVED_CRM are byte-identical.

Before (line 159):

 *    pack**, so a zh-Hant reader sees the English UI and every one of the 13
 *    described a surface that existed in no configuration. Ruled on the card:
 *    zh-Hant pages spell platform navigation in **English**, the convention

After:

 *    pack**, so the console falls back to Simplified and every one of the 13
 *    described a surface that existed in no configuration. Ruled on the card:
 *    zh-Hant pages spell platform navigation in **English** rather than ship
 *    mixed Simplified/Traditional script, the convention

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.md sanctions in its Chinese-doc rules.

Cross-reference added (end of the same bullet, two lines):

 *    ⛔ The reason is the FALLBACK, not the reader — stated in full, with
 *    the ban on the form #1368 retired, at {@link KNOWN_UNRESOLVED_CRM}.

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

  1. Is line 159 the only site? — Yes, one. Swept the whole file for every phrasing: 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|getsEnglish) 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.
  2. Is a cross-reference warranted? — Yes; one, one-directional. The two statements sit in different ledgers' commentary (Docs cite 39 more Setup navigation names the platform ships nowhere — the remainder #853 quarantined rather than fixed #1113's platform-nav quarantine, The zh-Hant navigation convention rests on a false reason: the console falls back to Simplified, not English #1368's CRM-nav one) and describe the same zh-Hant fact from different sides, so a pointer is accurate where a merge would not be. The back-pointer from KNOWN_UNRESOLVED_CRM was deliberately not added — that block is out of surface.
  3. Does any test assert on this comment's text? — No. grep -rn over test/, scripts/, .github/ for the phrase returns exactly one hit: the line being changed. Negative controls confirm the search reached all three trees — KNOWN_UNRESOLVED_CRM and docs-setup-navigation-names both hit under test/, changeset hits five files under .github/, hygiene hits two under scripts/.
  4. Baseline green? — Yes. At the branch point (392405f7), vitest run test/docs-setup-navigation-names.test.ts gave 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_DIRS includes test/, but FIRST_PARTY_TEXT filters out SELF = '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 84101f6f to 71f789ee, 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, on 3d3d7d2b (the commit pushed here; git status was 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.

stage result
validate ✓ Validation passed (1710ms)
typecheck tsc --noEmit clean — --listFiles confirms the edited file is in the typecheck surface (1 hit), so this is a measurement and not a vacuous pass
lint clean
lint:i18n-gate ✓ i18n lint gate: 0 i18n/missing-* issues
hygiene ✓ source hygiene clean — includes no raw control bytes in first-party files
hygiene:tokens ✓ source token ratchet clean (business ~83,423 / interaction ~37,429 / total ~135,193, all under ceiling). Unmoved by construction: the ratchet measures src/**/*.ts comment-stripped, and this change is a comment under test/
build ✓ Build complete (1999ms)
test Test 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.yml documents. 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

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
@vercel

vercel Bot commented Sep 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
hotcrm Ignored Ignored Sep 3, 2026 11:27am UTC

Request Review

@github-actions github-actions Bot added the ci/cd CI plumbing and the verification pipeline label Sep 3, 2026
@os-sales
os-sales marked this pull request as ready for review September 3, 2026 11:32
@os-sales
os-sales added this pull request to the merge queue Sep 3, 2026
Merged via the queue into main with commit 18f523f Sep 3, 2026
10 checks passed
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd CI plumbing and the verification pipeline

Projects

None yet

2 participants