Requirement
Write copy that says what the thing does, once, in a human register. No marketing buzzwords, no chains of em-dash clauses standing in for structure, no label/sublabel/helper triplets that restate each other, and no AI-writing tells — the structural patterns that make text read as generated. Applies to all prose the harness produces or reviews: UI strings, site and marketing content, documentation, decision records.
Rationale
Buzzword copy is the written form of AI slop: it reads as generated, erodes trust, and tells the user nothing. Kind Utility means the copy works — "Save changes" beats "Effortlessly streamline your review workflow" every time. The same applies to structure: negative parallelisms, forced triads, and copula avoidance are statistical filler, not meaning. Redundant helper text is not kindness; it is noise the user must scan past between tasks.
Evidence for the 2026-06-12 broadening: a site-wide audit found em-dash chains
throughout the DX-DS site's own prose (despite this control's ban), plus tells no
control covered — verbatim sentence duplication, rule-of-three padding, and
negative-parallelism density. See docs/catalog-changes/slp-9-ai-writing-tells.md.
Passes when / Fails when
Passes:
- Button: "Save changes". Helper (only if needed): "Changes are saved as a draft until you submit."
- A field label that names the field; helper text that adds something the label cannot ("DD/MM/YYYY").
- "Centre optically, not mathematically." — an "X, not Y" that IS the rule.
- "Colour, type, spacing, icons." — a list of the actual four things.
Fails:
- "Empower your team with streamlined, world-class data entry."
- "Supercharge productivity — effortlessly — seamlessly — at scale." (em-dash chain doing the work sentence structure should)
- Label "Project notes", sublabel "Notes for your project", helper "Add notes about your project here" — three lines, one meaning.
- "This app serves as a testament to our commitment to empowering users." (copula avoidance + significance inflation + buzzword)
- "It's not just a spreadsheet, it's a planning companion." (negative parallelism as rhetoric)
- "Plan projects, track progress, and unlock insights." (forced triad; the third item is decoration)
- "Great question! Here's your project list. I hope this helps!" (chatbot artifacts shipped as UI copy)
- "This could potentially possibly affect some submissions." (hedging stack)
- "Changes sync automatically, ensuring a seamless experience." (superficial -ing tail asserting an unearned outcome)
How to verify
Deterministic half (lint): case-insensitive scan of user-facing strings for:
- the buzzword list — streamline(d), empower, supercharge, effortless(ly), seamless(ly), world-class, revolutionise, leverage, unlock, elevate — plus the AI-vocabulary list: delve, robust, intricate, foster, vibrant, pivotal, testament, "landscape" as an abstract noun;
- the filler list — "in order to", "it is important to note", "at this point in time", "due to the fact that";
- the chatbot-artifact list — "great question", "i hope this helps", "let me know if", "certainly!", "you're absolutely right";
- two or more em dashes inside one sentence.
Each hit is a finding.
In code, checks/content-lint.py runs the word and phrase scans over the whole source
line, not only over string literals: a buzzword in a shipped component or variable name
is still a tell. Comments are stripped first, and so are the spans that are never copy
(class values, style values, class-builder calls, module paths), so a Tailwind class
name is never read as prose.
Evaluator half: structural tells need judgment — see below.
Evaluator guidance
Quote the offending sentence in every finding. Do not paraphrase.
Flag:
- Negative parallelism used as rhetoric: "It's not just X, it's Y", "X isn't about Y, it's about Z" — and any screen or page where "X, not Y" appears more than once or twice.
- Copula avoidance: "serves as", "acts as", "functions as", "stands as" where "is" carries the meaning.
- Forced triads: three-item lists where an item is synonym padding or decoration, not a real third thing.
- Significance inflation and generic upbeat closers: "a major step forward", "exciting times ahead", claims of importance with no concrete referent.
- Hedging stacks: two or more qualifiers on one claim.
- Superficial -ing tails: a trailing participle clause asserting an outcome the sentence didn't earn ("…, ensuring/enabling/fostering …").
- In long-form prose, em-dash clustering: 2–3 per short paragraph is a finding even when no single sentence has two (density is the tell, not any one dash).
- Redundant label/sublabel/helper sets: if removing one line loses no information, flag the redundancy.
Do not flag:
- A genuine enumeration that happens to have three items ("Colour, type, spacing, icons" lists the actual foundations — count is not the tell, padding is).
- "X, not Y" when the contrast IS the rule being taught: "optically, not mathematically", "name by function, not metaphor", "fix the drawing, not the report".
- Single em dashes doing real work (one nested clause), and structural dashes in headings, table cells, and labels ("01 — Utility by Default").
- Settled product names and quoted organisation or programme text carrying a waiver
(
dx-waive SLP-9 reason="..."). - "Unlock" and kin used literally (a locked record, a locked period) — close calls are advisories, not blocks.
Judge overall register: copy should describe function in the user's vocabulary, not sell, and prose should read as written, not generated. This is L2 — deviation needs an inline rationale, not a rewrite war.