convey: lode 2 canon sweep — D4 mixed-case across templates + deferred surveillance vocab
Apply the system-anatomy + voice-terminology brand canon to the remaining
owner-facing visible strings in the convey UI. Continues the lode-1 sweep
(d95795b2) by lowercasing button text, headings, modal titles, summaries,
labels, placeholders, ARIA labels, titles, alts, and JS-set DOM strings
across all owner-facing templates and adjacent route/CLI surfaces.
- Sweep workspace.html templates for the 19 in-use apps plus shared convey
templates (chat_bar, app, pairing, date_nav). Lowercase static visible
text in headings, buttons, modals, labels, attributes, and JS-set DOM
strings; preserve third-party brand names (Anthropic, OpenAI, Google AI,
Gemini, Plaud, Granola, Obsidian, Vertex, Rev.ai, iPhone), acronyms (API,
JSON, URL, LAN, R2, DMG, ICNS, SVG, STT, WebRTC, QR, AKAs, OK, PDF,
America/New_York), chart day/month abbreviations, and dynamic data
rendered through escapeHtml or template interpolation.
- Handle the surveillance-vocab strings that lode 1 explicitly deferred:
apps/health/workspace.html status lines render "observing" instead of
"Capturing"/"Recording"; apps/transcripts empty-state reads "no
observations were found for this day"; apps/sol/workspace.html log
empty-state drops "recorded" from "no log events for this run"; the
convey/apps.py first-daily chat-bar placeholder reads "observing — your
first daily analysis will be ready soon...".
- Adjacent owner-facing surfaces beyond workspace.html: apps/import/routes.py
SOURCE_METADATA dict (recording → meeting audio, observations);
apps/sol/routes.py JSON API error strings ("talent run ..."); apps/skills/
call.py CLI confirmation messages.
- Sweep <a>, <span>, <div> visible-text strings overlooked by the initial
D4 regex (anchor-styled buttons, status badges, empty-state copy).
- Update three test fixtures whose assertions checked the pre-canon copy:
tests/test_app_reflections.py (Copy → copy, Download PDF → download PDF),
tests/test_pairing_ui.py (Pair a phone → pair a phone),
tests/test_apps_skills_call.py (already recorded → already observed),
tests/test_convey_apps.py (Capture is running → observing).
Line-level edits only; no layout, component, or behavior changes. Code-side
identifiers (CSS class names, JS variables, JSON keys, route paths,
event names, recorded_at field names) untouched. Skipped per scope:
apps/activities/_dev_screens_*.html (dev-only views), convey/copy.py
(already canon-clean), tests/baselines/api/** (backend, not UI),
LLM-prompt content (apps/todos/routes.py prompt template — separate
request).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>