docs GitHub

Design systemDraft

Confirmation line

When the person's own turn said what to do ("email the team the update"), the Gate matches the send against that said intent and it goes out with no held card - "asking is approving." This is the line that reports it happened, distinct from ask-card.md/draft-card.md's held-and-decide cards, which are for the OTHER case: a send the Gate could not match to anything the person asked for. New 30 Sep, the user's chat-components ask; the underlying match rule is plans/assistant.md section 3.6's said_intents (reviewed and confirmed with vault, cohesion, sessions in CHAT.md).

SurfaceImplementing fileStatus
Decknonenot built
Appnonenot built
Lumennonenot built

Anatomy

Not a card - a single row, the same shape toast.md's in-place placement already uses (height 44, padding 0 14, gap 10, fill --hover, --rule top border), reused rather than invented fresh:

  1. Glyph, 16, --text-2: a plain check (sent/done), never a colour.
  2. Line, base, --text, one line, ellipsis: "Sent to the team · 3 recipients" or "Posted to #updates" or "Scheduled the meeting for Thursday" - the destination and the kind, in the same plain words ask-card.md's H1 content rules already require for a held card (this line is held to the same honesty standard even though nothing was held).
  3. Undo (ghost, only when the action is genuinely reversible within the window - see States): same as toast.md's Undo button.
  4. "You said to" (steplink, quiet, --label): opens the exact turn text that matched, inline, no navigation - this is the line's one piece of real accountability. A person can always see which of their own words the Gate matched against, not just trust that it matched correctly.

Variants

  • In the transcript (most common): sits at the point in the turn where the send happened, in flow with the agent's own text, not a separate card.
  • In Needs you / the activity list: same row shape, used as a plain history row rather than a live confirmation - no Undo once the window has passed, "You said to" still works (it's a permanent link to the matched turn, not a time-limited affordance).

Sizes

44 tall (in-place), full width of the content column. Same as toast.md.

States

  • Fresh (just happened): glyph, line, Undo (if reversible), "You said to" - as above.
  • Undo window closed: Undo disappears (silently, no strikethrough or greyed button - it's simply gone, matching toast.md's own "only ever offers Undo while Undo can still work" rule).
  • Undone: the line updates in place to "Undone · was sent to the team" (--label), no new row.
  • Batch: several matched sends in one turn collapse to one line, "3 things sent" with "Show what" (steplink) expanding to the individual lines above - never more than one confirmation row per turn cluttering the transcript.

Keyboard and touch

Undo and "You said to" are the only interactive parts; both are plain buttons/links in the normal tab order, no shortcut of their own (matching toast.md, which reserves no global key for Undo either).

Motion

None on arrival - it's not an optimistic action being confirmed, it already happened server-side by the time this line renders. Undo's disappearance and the Undone state follow toast.md's own timing rules where they apply (a reversible send keeps the same practical undo window a manual send would get).

Copy

"Sent to <who> · <count> recipients", "Posted to <channel>", "Scheduled <what> for <when>", "You said to", "Undone · was sent to <who>". Never "Auto-sent", never "AI acted on your behalf" - the line states the fact plainly, the same register every other confirmation in this system uses.

Emission (agreed with vault, sessions, assistant - the said_intents match)

Not a renderer:<tool> result from the agent's own call - the confirmation is generated by the Gate itself at match time (plans/assistant.md section 3.6: vault's Gate matches an outward call against said_intents in the thread's lineage; a match runs with no Touch ID). The event this line renders from is the Gate's own match event (proposed name gate.matched - not yet built, TBD with vault, tracked in CHAT.md) rather than a tool's render field, since the confirmation's job is partly to prove independence from the calling agent's own account of what it did.

What the person's actions do

Undo (where real) reverses the specific send if the destination's own API allows it (an email already delivered can't be recalled everywhere; a scheduled meeting can be uninvited). "You said to" is read-only.

What agents can do for the person

Nothing here is agent-triggered beyond the original send itself, which already happened under the "asking is approving" rule before this line exists - by the time this component renders, the agent's part is done.

Accessibility

  • aria-live="polite": a fresh confirmation is announced once, the same as toast.md's pattern.
  • The glyph is aria-hidden; the line's text carries the full meaning.

Gaps

Everything - new component, no surface has built it. Depends on vault naming the real Gate event this line reads from (flagged above, tracked in CHAT.md).