Goal
No · middle-dot separators remain in PawWork product-UI chrome, per the DESIGN.md "Do's and Don'ts" rule (separate with gap + typographic contrast). Any · that genuinely reads best in a dense metadata row is instead registered as a sanctioned exception in DESIGN.md, not left as silent drift.
Scope
In scope — the four call sites that render a literal · in user-facing chrome:
packages/ui/src/components/message-part/user-message.tsx:72 and :165 — user-bubble bottom toolbar joins model name and time with ·.
packages/ui/src/components/assistant-turn-footer.tsx:52 — agent-round footer joins agent / model / duration / interrupted with ·.
packages/ui/src/components/rate-limit-card.tsx:85 (with rate-limit-card.css __sep) — rate-limit card headline separates title and reset time with ·.
packages/app/src/components/prompt-input/context-items.tsx:44 — file-context tooltip puts · between the label and the path.
For each site: replace · with gap + typographic contrast (the canonical fix), or register it as a DESIGN.md exception (id + rule broken + reason) if a dot is genuinely warranted there.
Out of scope — any other separator/spacing redesign; · inside code comments (e.g. rate-limit-card.css:6) and docs prose, which are not product UI.
Relevant files or context
DESIGN.md rule (Do's and Don'ts): "The middle-dot · as a separator or decoration in product UI — separate with gap plus typographic contrast (sans vs mono, alphanumeric vs colon-time)."
Surfaced during the DESIGN.md condensation: the no-· rule was deliberately kept, so these pre-existing violations were not silently legitimized. The same pass found the · join helper duplicated across the two timeline footers (user-message.tsx / assistant-turn-footer.tsx), so a shared gap-based meta-row helper may be the cleanest fix for those two.
Verification
grep -rn "·" packages/app/src packages/ui/src over .tsx/.css returns no hits in product-UI render paths (comments/docs excluded), or each remaining hit maps to a registered DESIGN.md exception.
- Visually confirm the affected surfaces (user-bubble toolbar, agent footer, rate-limit card, context tooltip) still read clearly with gap-based separation —
bun run dev:desktop walk, or a snap of the relevant target.
Execution mode
Investigate and propose a plan first — post the per-site decision (gap fix vs registered exception) as an issue comment and wait for an explicit "approved" before writing code or opening a PR.
Goal
No
·middle-dot separators remain in PawWork product-UI chrome, per the DESIGN.md "Do's and Don'ts" rule (separate with gap + typographic contrast). Any·that genuinely reads best in a dense metadata row is instead registered as a sanctioned exception in DESIGN.md, not left as silent drift.Scope
In scope — the four call sites that render a literal
·in user-facing chrome:packages/ui/src/components/message-part/user-message.tsx:72and:165— user-bubble bottom toolbar joins model name and time with·.packages/ui/src/components/assistant-turn-footer.tsx:52— agent-round footer joins agent / model / duration / interrupted with·.packages/ui/src/components/rate-limit-card.tsx:85(withrate-limit-card.css__sep) — rate-limit card headline separates title and reset time with·.packages/app/src/components/prompt-input/context-items.tsx:44— file-context tooltip puts·between the label and the path.For each site: replace
·with gap + typographic contrast (the canonical fix), or register it as a DESIGN.md exception (id + rule broken + reason) if a dot is genuinely warranted there.Out of scope — any other separator/spacing redesign;
·inside code comments (e.g.rate-limit-card.css:6) and docs prose, which are not product UI.Relevant files or context
DESIGN.md rule (Do's and Don'ts): "The middle-dot
·as a separator or decoration in product UI — separate with gap plus typographic contrast (sans vs mono, alphanumeric vs colon-time)."Surfaced during the DESIGN.md condensation: the no-
·rule was deliberately kept, so these pre-existing violations were not silently legitimized. The same pass found the·join helper duplicated across the two timeline footers (user-message.tsx/assistant-turn-footer.tsx), so a shared gap-based meta-row helper may be the cleanest fix for those two.Verification
grep -rn "·" packages/app/src packages/ui/srcover.tsx/.cssreturns no hits in product-UI render paths (comments/docs excluded), or each remaining hit maps to a registered DESIGN.md exception.bun run dev:desktopwalk, or a snap of the relevant target.Execution mode
Investigate and propose a plan first — post the per-site decision (gap fix vs registered exception) as an issue comment and wait for an explicit "approved" before writing code or opening a PR.