Skip to content

test(docs): hold the roster name column to the view labels the app ships - #1347

Merged
os-trump merged 1 commit into
mainfrom
claude/issue-1326-roster-name-column-rule
Aug 27, 2026
Merged

test(docs): hold the roster name column to the view labels the app ships#1347
os-trump merged 1 commit into
mainfrom
claude/issue-1326-roster-name-column-rule

Conversation

@os-trump

@os-trump os-trump commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator

Fixes #1326

The measurement first, because it is what the card asked for

55 name cells across the ten English roster pages. ZERO false positives.

Page name cells unresolved
sales/accounts.mdx 6 0
sales/contacts.mdx 3 0
sales/leads.mdx 8 0
sales/opportunities.mdx 9 0
sales/activities.mdx 8 0
sales/quotes.mdx 3 0
service/cases.mdx 8 0
marketing/campaigns.mdx 4 0
revenue/contracts.mdx 4 0
revenue/products.mdx 2 0
total 55 0

The guard docstring records 13 false positives, and the card was right that
the number does not transfer: those 13 were raised by the rule at its widest
— every bolded run anywhere in the section. Narrowed to the name column of
the roster table, every one of the 13 falls outside the rule reach, and it is
not luck:

Emoji-carrying labels (⚠️ At-Risk Accounts, 🔥 Hot Leads, ⏰ SLA at Risk,
📅 My Priority Tasks, ⚠️ Stale Opportunities · Longest in Stage First) all
resolve verbatim — the switcher prints the label as authored, and the pages
already spell it that way. Em-dash labels (Unassigned — triage) likewise.

Small, and none of it exceptional: an exemption map is not needed at all.
premise_still_valid: true, and the narrow route is viable.

The interaction the PM flagged: measured, and there is none

test/docs-quick-tour-navigation.test.ts reserves bold on
getting-started/quick-tour for names the app really carries, and a name-column
rule requiring bold reads like a head-on collision. It is not one:
quick-tour carries no ## Standard list views heading at all — its
sections are the seven numbered tour steps — so rosterOf returns null for
it, vacuity guard #1 never demands it be mapped, and it is not in PAGE_OBJECT.
The two rules never see the other page. No exemption is needed, and adding
one would document a conflict that does not exist.

What the rule is

Every markdown table body row inside a roster section must open its first
column
with a bolded name, and that name must be a label the registered
views of the object actually ship. Three assertions and one vacuity floor:

  1. every mapped page must yield at least one name cell (a page that switched to
    a bulleted roster, or a table this parser stopped recognising, would
    otherwise pass by checking nothing);
  2. every roster row name column must be bold — de-bolding is not an escape
    hatch;
  3. every bolded name must resolve against LABELS, derived from the registered
    stack, not written down here.

The header row is found by the delimiter row below it rather than by its
wording, so revenue/contracts heading its first column Tab and the other
nine heading theirs View both work without either spelling being hard-coded.

Reverse verification — both directions, which is the point of the card

Green-on-main alone is what coverage already achieved while the whole defect
was on disk
, so it proves nothing by itself.

HEAD blob:     0f7117ec81c60fbd219fe3e554e379213ca2fc2f
pre-1322 blob: 3fc15685442534c2bace7716571d7a57926b7530
on disk after mutation: 3fc15685442534c2bace7716571d7a57926b7530
MUTATION LANDED: 3fc1568... == pre-1322 3fc1568..., != HEAD 0f7117e...

With content/docs/sales/activities.mdx restored to its pre-PR-#1322 bytes
(794d6fe~1) — hashed on disk before any verdict was read:

 × the name column of every roster names only views the app ships (#1326)
   content/docs/sales/activities.mdx names All, and crm_task ships no view with that label
   ... Board / Schedule / Plan / Worklog / My Tasks / Priority / Backlog
 Test Files  1 failed (1)
      Tests  1 failed | 4 passed (5)

8 red, and the other four tests — coverage included — stayed green,
which is the claim of the card reproduced under the new rule. The rule is
section-scoped: an unrelated form-section table in the same file that also opens
a row with **Schedule** was correctly not read.

Restored with git checkout HEAD -- PATH (never the bare form, which restores
from the index) and proved: git diff HEAD empty, git status --short empty,
git hash-object back to 0f7117e.

No build sits between the mutation and the verdict here — the suite reads the
.mdx off disk at test time and imports objectstack.config.ts through the
vitest transform, so there is no dist/ for a stale artifact to hide in.

What this does not touch

Purely additive: 154 insertions, 0 deletions. The coverage rule, the
structural equal-entry-count rule across faces, and both existing vacuity guards
are untouched. English faces only — the split label column on the translated
faces is open decision card #1329 and is not decided here. No file under
content/docs/ was changed by this PR.

Gates

pnpm verify at 4e02e04, exit 0:

✓ i18n lint gate: 0 `i18n/missing-*` issues
✓ source hygiene clean
 Test Files  142 passed (142)
      Tests  3003 passed | 1 skipped (3004)

Changeset: empty frontmatter — the sanctioned releases-nothing declaration that
.github/workflows/changeset-check.yml documents. Test guard only; no src/
metadata moved.


Generated by Claude Code

`docs-view-rosters` checks COVERAGE only — every shipped label must appear
somewhere in the page's roster section — so a first column written entirely
from imagination passes as long as a later column carries the real name. That
is not a corner case: restoring `sales/activities.mdx` to its pre-#1322 bytes,
false prose claim and all eight fictional tab names included, left this file
4/4 green. Its docstring even listed that shape among the ones to tolerate.

The narrow rule the wider one could not afford: every bolded cell in the NAME
COLUMN of an English roster table must resolve to a published view `label`.
Measured across the ten English pages before it was written — 55 name cells,
ZERO false positives. The thirteen the docstring records were raised by the
rule at its widest and none of them live in the name column: column and filter
names are one column over, the sentence bolds are bullets under the table, and
`service/cases`'s six retired non-views are a bullet list below it.

Reverse-verified in both directions: red on the pre-#1322 bytes with eight
unresolvable names, green on `main`. Coverage, the equal-entry-count structural
rule and the two existing vacuity guards are untouched — this only adds.

Part of #1326
@vercel

vercel Bot commented Aug 27, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
hotcrm Ignored Ignored Aug 27, 2026 4:23am

Request Review

@github-actions github-actions Bot added the ci/cd CI plumbing and the verification pipeline label Aug 27, 2026
@os-trump os-trump changed the title test(docs): hold a roster's name column to the view labels the app ships test(docs): hold the roster name column to the view labels the app ships Aug 27, 2026
@os-trump
os-trump marked this pull request as ready for review August 27, 2026 04:27
@os-trump
os-trump added this pull request to the merge queue Aug 27, 2026
Merged via the queue into main with commit 136df1f Aug 27, 2026
10 checks passed
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

Development

Successfully merging this pull request may close these issues.

No gate can see a docs roster whose name column is entirely invented — docs-view-rosters runs 4/4 green against the full #1318 defect, by construction

2 participants