Skip to Content
EngineeringDecisions (ADRs)ADR 0034 Inline interaction: forms in place, docked panels, no popups

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.tsx is 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 test web/lib/no-popups.lint.test.ts with an allowlist holding only the identity re-auth wrapper; the lint and the plumbing-word copy test run in npm run check (fast gate) and the screenshot set in npm 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.