ADR 0034: Inline interaction: forms in place, docked panels, no popups
- Status
- Accepted
- Date
- Deciders
- Founder
Context
The founder’s direction for the workbench: forms are inline, never popups; the experience is slick and thoughtful, built for a scientist who decides quickly and rarely reads instructions. The phase-2 console carries a signature step in a separate dialog and other modal patterns; phase 4 adds a role picker, memory controls, pins and source proposals that would each have become a popup by default.
Decision
- Vocabulary fixed in contract 12.10: an inline form expands inside the card, row or panel that owns the decision; a docked panel is a persistent, non-blocking, URL-addressable side region; a two-step control turns the button into “Confirm
<verb>” for a few seconds instead of a confirmation dialog. - Forbidden: modal dialogs,
<dialog>,role="dialog",aria-modal, blocking overlays, popovers with form fields,window.confirm / alert / prompt / open, toasts that require an action, new browser windows. The single exception is the identity provider’s re-authentication hop, with the draft persisted before and restored after. - Every R4 decision form lives where the decision is (approval card, inbox item, hand-off card, role home header, member row, message feed, memory tab, evidence board, citation marker, document row, twin setup, delegation, thread sharing); the current
signature-dialog.tsxis converted. - Focus, validation, drafts, feedback, loading, density, docked-panel and motion rules as written in 12.10; server error codes map to fields; no error only in a toast; no lost draft.
- Three web primitives (
components/ui/inline-form.tsx,two-step-button.tsx,docked-panel.tsx) and a lint testweb/lib/no-popups.lint.test.tswith an allowlist holding only the identity re-auth wrapper; the lint and the plumbing-word copy test run innpm run check(fast gate) and the screenshot set innpm run shots:workbench(recorded 2026-09-16); docs describe inline steps, never “a dialog appears”.
Consequences
- A popup or modal form in the R4 build, a lost draft on error or re-auth, or a decision form that opens away from its card is a major review finding.
- The evidence panel and “What your twin remembers” are docked panels whose state lives in the URL (
?source=), so back, forward and shared links work.
Alternatives considered
- Modal confirmations for irreversible actions: interrupt the scientist and hide the record; rejected for two-step controls with the fixed result line.
- A drawer overlay for the evidence panel: covers the composer and the decision buttons; rejected for a docked, resizable panel.
Follow-ups
- Audit the existing console for remaining modals and list each conversion in the web writer’s report.