[Frontend] Apply one vocabulary across prep, wiki, quests, highlights, and proposals #379
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Impact: MEDIUM
Found in the August 2026 session lifecycle review (#319).
What the user experiences
The same concept carries a different name on almost every screen it appears on. The GM prep workspace alone is called
planning(route),CampaignPlanning(component), "GM Workbench" (page heading and entry button), "Session Prep" (palette item), "Session Prep Sheet" (panel title), and its output is scattered between "Beat Planner"/"beat notes" and the "Session Shelf". The wiki landing page is "Wiki" in every breadcrumb but "Campaign Story" in its own page heading. A lore proposal is called "AI Proposals", "Entry Proposals", "Bot Proposals", and "lore proposals" depending on which screen shows it — and "Bot Proposals" is not just inconsistent, it is factually wrong, since the backend Celery worker generates these, not the Discord bot. Approving a proposal creates a draft, and the draft-review page then titles itself "Merging proposal into…" — so the word "proposal" appears on a screen showing a draft, one screen after a button labelled "Approve" that did not actually approve anything.GenerationHistoryrows and its filter show raw internaltool_idvalues (session_prep,npc_voice,loot_parcel) instead of a human label. The same duplication exists for "Quests"/"Thread Tracker"/"loose ends"/"open loops", andWikiArticlerenders the character timeline twice from the same data.Evidence
App.jsx:119;CampaignPlanning.jsx:947,913;CampaignDetail.jsx:2618;workbenchTools.jsx:687;CampaignPlanning.jsx:895.CampaignStoryline.jsx:264vs:277,333;WikiArticle.jsx:1711vs:1830.WikiProposals.jsx:316,341;CampaignStoryline.jsx:294;CampaignDetail.jsx:2668;SessionDetail.jsx:104,236.webapp/backend/app/services/summary_events.py:79(backend Celery), not the Discord bot — per this repo's ownCLAUDE.md.GenerationHistory.jsx:87,107— rawtool_idshown in rows and the filter dropdown.QuestLog.jsx:96,108;CampaignPlanning.jsx:897;QuestLog.jsx:7;workbenchTools.jsx:528;ColdOpenPanel.jsx:110,78.WikiArticle.jsx:636-669(infoboxInfoRow label="Timeline") and:2108-2146(full section) render the same character-timeline array twice.Why it matters for a hosted product
Naming is the single cheapest fixable discoverability tax in the product — every renamed inconsistency below is a support question ("where did my prep notes go?", "is this the same as the Wiki?") that a consistent label would have prevented outright.
Proposed fix
Pick one term per concept and apply it everywhere, per the audit's recommendation: Prep (not planning/workbench/beats), Wiki (not lore/storyline/Campaign Story), Quests (not threads/loose ends), Highlights (not Quote Board), Recording (never "Dashboard" — see the recording-panel-fold issue in this milestone). Rename "Bot Proposals" to "Suggested wiki updates" (also called for in the lore-proposal discovery issue in this milestone — apply once, not twice). Replace raw
tool_idinGenerationHistorywith a lookup table of human labels. Remove the duplicate character-timeline render, keeping the fuller section and dropping the infobox row (or vice versa). This is the audit's P8 and C7/C8.Acceptance criteria
<h1>matches the "Wiki" label used in breadcrumbs and nav.GenerationHistoryrows and its filter show a human-readable tool label instead of the rawtool_id.WikiArticlerenders the character timeline in exactly one place.Picking this up as v4.3.0 phase 2 (#514), right after #378 on the same lane. One term per concept as the audit recommends: Prep, Wiki, Quests, Highlights, Recording; "Bot Proposals" → "Suggested wiki updates" (done once here; #375 will not redo it); human labels for
GenerationHistoryvia one lookup table; the duplicate character timeline inWikiArticledrops the infobox row and keeps the fuller section. Route paths and API field names do not change, so Discord deep links and bookmarks keep working; only what people read changes. The canonical labels move into one small module so the next rename is one file.Done in PR #519 (merged), on top of #378; on dev now, prod with v4.3.0.
One term per concept, with the canonical labels in a new
webapp/frontend/src/vocabulary.jsso the next rename is one file:beat_notesstays the field name). "Session Beat Planner" → "Beat Planner".<h1>now matches the breadcrumb that always said Wiki; the sidebar entry for it is "Wiki home". "Ground in existing lore" → "…wiki articles", "Save as lore entry" → "Save as wiki article", and Admin's "Lore Pipeline" tab → "Wiki pipeline".open_loopsunchanged); the session-prep tool description says "open quests" instead of "loose ends".Two things beyond renaming:
GenerationHistoryprinted rawtool_idin both its rows and its filter, so a GM read "session_prep" and "loot_parcel"; both go through aTOOL_LABELSmap that the Prep palette also builds its labels from, so a tool cannot be called two things in two places, unknown ids fall back to the id, and the filter sorts by label.WikiArticlerendered a character's timeline twice; the full section stays and the cramped infobox row and its now-unusedmilestonesprop are gone.Nothing moved. Route paths (
/planning,/wiki/proposals), API fields (beat_notes,open_loops,lore_*),tool_idvalues and theworkbench/Lore*code identifiers that mirror backend endpoints are unchanged, so bookmarks and Discord links still work. Component filenames stay too; each affected file's docstring records its user-facing name. Deliberate survivors: "campaign story" as content on the wiki landing body (the offence was using it as a name for the wiki), and "Session Shelf", which is a different concept. "Session Prep" is title-cased to match its palette siblings.Tests were updated to the new strings rather than loosened, including two negative assertions whose regexes would otherwise have passed vacuously. Suite 523 passed (48 files), eslint clean apart from the pre-existing warning,
vite buildgreen.