One name per thing, per surface, so a person moving between the app, Studio and the site is never told two names for one thing — or one name for two things. Route names and test IDs stay as they are; only what a person reads changes.
Decided terms point at their decision. Open rows are collisions this file records but does not settle: they are Galen's call, and until then each surface keeps its current word.
| Thing | App (staff Teach tab) | Studio | Not | Source |
|---|---|---|---|---|
| A staff member's own list of things to act on | Follow-ups (the app's tasks section inside it is "Assigned to you") | Follow-ups | To do, Your work, Inbox, My work | Decided D-114 (Galen, 2026-10-24): one word on both surfaces; the app's "To do" became "Follow-ups" (route MyFollowUps, test IDs and the old /teach/to-do address unchanged). |
| Asking another instructor to teach a class | Subs · "1 class needs a sub" · Request a sub · Claim | Subs (nav, page title; the class role is "Sub"), Coverage (route only) | Substitutes, cover, Coverage as a label | Decided D-114 (Galen, 2026-10-24): Studio's "Substitutes" became "Subs" (route /coverage and test IDs unchanged). |
| Person-to-person chat in the app | Messages | — | DMs, chat, inbox | App navigation. |
| Staff email/text to members | — | Messages (Compose, Templates, Automations, Scheduled, Delivery log) | Blasts, campaigns, broadcasts in UI | Studio navigation. Decided D-114 (Galen, 2026-10-24): both keep "Messages". |
| The forecast of what automations will send next | — | Scheduled (title, tab and nav) | What's about to send | PQ-15 (K-447). |
| The reason an incident's open tasks are not needed when it closes | — | Reason the open task is not needed / Reason the N open tasks are not needed | waiver | PQ-15 (K-371): "waiver" means a liability waiver everywhere else. |
Formatting rules that go with the words
- Recurrences say the weekday in full and plural: "Thursdays at 6:00 PM" (
weekdayPlural), never a short label with an "s" on it ("Thus"). - Counts pluralise the word, never "(s)": "1 open task", "2 open tasks".
- Relative days come from
Intl.RelativeTimeFormaton the dojo's clock: "today", "yesterday", "3 days ago" — never "1 days ago". - Money goes through
formatMoney("$3,447.00"). Only machine files keep bare decimals (the QuickBooks journal lines). - Possessives go through
possessive(): "Kestrel Martial Arts’", "Blue Heron’s". - Open ranges are said in words: "Green and up", "Up to Brown" — never "Any – Kudan" or "Green+". A one-day range says one date.
- Dates in copy are the dojo's words ("Saturday, November 7"), never an ISO string; copy never names a route ("/members").
scripts/verify/copy-check.mjs (run by npm run design:check) fails on the two patterns a grep can catch reliably: a weekday built with a suffix (}s at) and a count followed by "(s)" inside a template or JSX text. A line that must keep one says copy-check-ok.