MalloryEstate Briefing
M·032Approved direction — pending spec review
← All briefings

Voice & Persona

Conversation Coherence & Unification

Fix the two real defects fast, then remove the *causes* of drift by sharing one Conversation primitive across feed, Chat-to-Q, and voice.

Dated 2026-06-20Programme Voice & Persona

Situation

A grounded review found the app reads as several apps stitched together. Two real defects: QConversation.svelte lays messages out with flex-direction: column so alignment is on the wrong axis (no right-float for user messages), has no auto-scroll, doesn't thread the persona accent, and lacks day separators; separately, BriefPanel renders inline in the scroll stream with no max-height or collapse, pushing the conversation off-screen.

Beyond the bugs, three composer/surface patterns and per-surface persona logic (PersonaChip, SceneMarker, the voice context-chip each reimplementing badge/shape/name logic) mean surfaces drift from each other. The SceneMarker persona-handoff divider is the one elegant primitive — the strategy is to unify every conversational surface around it and a shared Conversation component.

Key decisions

Sprint 0 — tactical fix first

Fix Chat-to-Q's row layout/auto-scroll/persona-threading/empty-state and make BriefPanel scrollable + collapsible, in place, no new abstractions.

Brief collapses to a sticky line

Default: collapse in place to a one-line summary (tap to expand) rather than a bottom-sheet move — kept available without blocking the discussion.

Shared persona atoms

Extract PersonaBadge / PersonaDivider / PersonaLabel from the duplicated logic in PersonaChip/SceneMarker/voice chip; SceneMarker becomes composed from them.

One Conversation primitive

Extract the feed's message-list + scroll-follow + day-separators + scene-marker-weaving into a shared component used by the feed, Chat-to-Q, and the voice canvas transcript.

Composer-model unification

Pick one composer behaviour and document it (or consciously omit it with a rationale) per surface.

Execution routing via Q

Sprint 0's two defects are ideal first dev-driver delegations to Q; the Conversation extraction is judgement-heavy and stays a Claude Code round or a strongly-reviewed complex-tier Q build.

Architecture

Presentational-only unification — no Worker/D1/persona-registry changes.

PersonaBadge / PersonaDivider / PersonaLabel
Shared presentational atoms for shape+fill+monogram, the tinted fade-rule, and the serif uppercase name.
Conversation component
Message-list + scroll-follow + day-separators + scene-marker-weaving, reused by feed, Chat-to-Q (thin wrapper), and voice.
QConversation.svelte fixes
Row flex direction/alignment, auto-scroll effect, persona-themed CSS vars, centred empty state, feed-matched padding.
BriefPanel.svelte
Capped max-height + internal scroll + collapse-to-line toggle, keeping the existing ✕ dismiss.

Risks & guardrails

Conversation refactor coupling

Cross-surface coupling makes the full extraction judgement-heavy — the diff choice (full now vs. incremental) is an explicit open design question.

Brief collapse UX undecided

In-place collapse vs. a bottom-sheet move is left open to spec review; default is in-place.

Regression risk on shared primitive

Once feed/Chat-to-Q/voice share one component, a bug in it surfaces everywhere at once — mitigated by keeping MessageView/Composer untouched and only lifting list/scroll/markers.

Delivery

Sprint 0 — quick defects

Chat-to-Q alignment/scroll/accent fix + Brief scroll/collapse; PRs via Q, operator reviews & merges.

Phase 1 — unification

Persona atoms (→ Q), Conversation primitive (→ Claude Code, judgement-heavy), composer model resolved by audit; each independently shippable.

Rollout

Spec review → implementation plan → Sprint 0 merge/deploy → Phase 1 merge/deploy → spec the memory & search sub-project next.

Out of scope

Memory & search surface — separate sub-project, own specAwareness (live lookups, device signals) and acting in the world — stay in the seeded backlogWorker/D1/persona-registry data changesNew personas, colours, or voice changes (Round B already shipped)
spec · docs/superpowers/specs/2026-06-20-conversation-coherence-design.md
plan · docs/superpowers/plans/2026-06-20-conversation-coherence.md
plan · docs/superpowers/plans/2026-06-20-conversation-unification.md
Mallory · Estate briefing