KQ-2089 · ACCEPTANCE/SHEET

Acceptance Sheet

An agent's plan written as a short document: numbered steps, a sentence each, and acceptance criteria under them that the agent verifies as it works. A verified criterion gets a small stamp that lands on springs.recoil — from 1.7× and a few degrees off, with a ring of ink spreading under it — and links to its evidence; a failed one is underlined by a danger rule that sweeps under the words on springs.glide and reopens its step, whose check undraws on springs.flick while the failure note glides open. Every criterion is a button in the Tab order: Enter opens its evidence (inline from 34rem, in a focus-trapped sheet that rises from the bottom below that), O overrides it with a required reason, Escape closes and returns focus, and draft, in-progress and signed-off states change what the sheet allows.

KQ-2089 · ACCEPTANCE/SHEET

Rev 3

In progress

Weekly basin report, automated

0 of 6 verified

  1. Pull the week’s ledgerVerifying

    Read Monday to Sunday from the Basinworks ledger.

  2. Build the summary tableOpen

    One row per region, with the change on last week.

  3. Send it to financeOpen

    Before Monday 09:00, with the CSV attached.

Sign-off waits on 6 criteria.

in progress · 0 of 6 verified · basinworks weekly report

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/acceptance-sheet

Props

stampStyle
"seal" | "tag" | "tick"
default "seal"
What a verified criterion's stamp looks like: a round ink seal, a rotated rectangular Verified tag, or a quiet circled tick drawn on flick. Overrides draw it dashed.
paper
"plain" | "ruled" | "grid"
default "plain"
The sheet's ground: plain card, ruled lines with a margin rule, or a dot grid.
accent
string
default "var(--accent-bright)"
Stamps, checks, links and the sign-off seal — any CSS colour.
steps
AcceptanceStep[]
default defaultAcceptanceSteps
The plan as a document: each step's id, title, summary and criteria (id, text, verdict, evidence { label, source, excerpt, href }, note, override).
state
"draft" | "in-progress" | "signed-off"
default "in-progress"
Draft makes criteria editable (Enter edits), in progress shows verdicts as they arrive, signed off locks the sheet under a seal.
title
string
default "Weekly basin report, automated"
The document's title; also its accessible name.
author
string
default "Basinworks agent"
Who wrote the plan, shown above the title on wider containers.
revision
string
default "Rev 3"
The revision shown beside the author.
signedOff
{ by: string; at: string }
default { by: "Rae Okafor", at: "Fri 17 Oct, 14:32" }
Who signed it off and when, shown once the state is signed-off.
onEditCriterion
(id: string, text: string) => void
default —
A criterion's text was edited in draft.
onOverride
(id: string, verdict: "pass" | "fail", reason: string) => void
default —
A person overrode a criterion's verdict with a reason; the sheet shows it at once.
onOpenEvidence
(id: string, evidence: AcceptanceEvidence) => void
default —
A criterion's evidence was opened, from the keyboard, a click on the criterion or its stamp.
onSignOff
() => void
default —
Sign off was pressed once every criterion passed.
status
"ready" | "loading" | "error"
default "ready"
Whether the plan has arrived: loading draws placeholder lines, error offers Try again. An empty steps list says so.
onRetry
() => void
default —
Try again was pressed after the plan failed to load.
label
string
default the title
The document's accessible name.
disabled
boolean
default false
Read only: evidence still opens, but nothing can be edited, overridden or signed.
className
string
default —
Classes for the outer sheet.