Form 0-1 · Standing orders

How a file moves

Every permit type in Sanity names an approval chain. Each chain is a Sanity Workflows definition, deployed into the workflows dataset as a document. Filing an application starts an instance of that definition. The instance is the file's single source of truth.

AI agents run as effects: the engine queues them, this site's server runs them, and their ruling goes back on the instance. Every move between stages is a GROQ condition over that state. Humans fire actions: citizens resubmit, officials stamp, and at the inspection window, you stamp. The engine refuses any action the current stage doesn't offer.

Below are the four definitions as deployed, read back from the dataset just now.

Booth inspection

A scripted applicant at the inspection window. The AI clerk passed the paperwork; the inspector stamps it.

prod.booth-inspection.v1 · starts at window
  1. Inspection window

    window

    Human · Stamp APPROVEDHuman · Stamp DENIED

    • → Permit issued · Approvedwhen $allActivitiesDone && $fields.windowDecision == 'approve'
    • → Denied · Deniedwhen $allActivitiesDone && $fields.windowDecision == 'deny'
  2. Permit issued

    issued

    Terminal stage.

  3. Denied

    denied

    Terminal stage.

Express permit

Minor whimsy. The AI clerk issues it if the paperwork is in order. No human stamp.

prod.express-permit.v1 · starts at intake
  1. Clerk intake

    intake

    AI · Clerk Third Class (AI)

    • → Referred elsewhere · Refer elsewhere (this thing exists)when $allActivitiesDone && $effects['clerk-review'].verdict == 'too-real'
    • → Awaiting the citizen · Request more paperworkwhen $allActivitiesDone && $effects['clerk-review'].verdict == 'incomplete'
    • → Permit issued · Paperwork in orderwhen $allActivitiesDone && $effects['clerk-review'].verdict == 'complete'
  2. Awaiting the citizen

    awaiting-citizen

    Human · Resubmit

    • → Clerk intake · Back to the clerkwhen $allActivitiesDone
  3. Permit issued

    issued

    Terminal stage.

  4. Referred elsewhere

    referred

    Terminal stage.

Sky permit

Clouds, rainbows, moons. Two agents, then two human signatures.

prod.sky-permit.v1 · starts at intake
  1. Clerk intake

    intake

    AI · Clerk Third Class (AI)

    • → Referred elsewhere · Refer elsewhere (this thing exists)when $allActivitiesDone && $effects['clerk-review'].verdict == 'too-real'
    • → Awaiting the citizen · Request more paperworkwhen $allActivitiesDone && $effects['clerk-review'].verdict == 'incomplete'
    • → Ministry of Weather review · Paperwork in orderwhen $allActivitiesDone && $effects['clerk-review'].verdict == 'complete'
  2. Awaiting the citizen

    awaiting-citizen

    Human · Resubmit

    • → Clerk intake · Back to the clerkwhen $allActivitiesDone
  3. Ministry of Weather review

    meteorology

    AI · Ministry of Weather (AI)

    • → Under-Secretary's desk · Sky clearwhen $allActivitiesDone && $effects['weather-review'].verdict == 'favourable'
    • → Denied · Sky already allocatedwhen $allActivitiesDone && $effects['weather-review'].verdict == 'unfavourable'
  4. Under-Secretary's desk

    stamping

    Human · Stamp APPROVEDHuman · Stamp DENIED

    • → Minister's countersignature · Approvedwhen $allActivitiesDone && $fields.stampingDecision == 'approve'
    • → Denied · Deniedwhen $allActivitiesDone && $fields.stampingDecision == 'deny'
  5. Minister's countersignature

    countersign

    Human · Stamp APPROVEDHuman · Stamp DENIED

    • → Permit issued · Approvedwhen $allActivitiesDone && $fields.countersignDecision == 'approve'
    • → Denied · Deniedwhen $allActivitiesDone && $fields.countersignDecision == 'deny'
  6. Permit issued

    issued

    Terminal stage.

  7. Denied

    denied

    Terminal stage.

  8. Referred elsewhere

    referred

    Terminal stage.

Standard permit

AI clerk intake, then a human Under-Secretary stamps it.

prod.standard-permit.v1 · starts at intake
  1. Clerk intake

    intake

    AI · Clerk Third Class (AI)

    • → Referred elsewhere · Refer elsewhere (this thing exists)when $allActivitiesDone && $effects['clerk-review'].verdict == 'too-real'
    • → Awaiting the citizen · Request more paperworkwhen $allActivitiesDone && $effects['clerk-review'].verdict == 'incomplete'
    • → Under-Secretary's desk · Paperwork in orderwhen $allActivitiesDone && $effects['clerk-review'].verdict == 'complete'
  2. Awaiting the citizen

    awaiting-citizen

    Human · Resubmit

    • → Clerk intake · Back to the clerkwhen $allActivitiesDone
  3. Under-Secretary's desk

    stamping

    Human · Stamp APPROVEDHuman · Stamp DENIED

    • → Permit issued · Approvedwhen $allActivitiesDone && $fields.stampingDecision == 'approve'
    • → Denied · Deniedwhen $allActivitiesDone && $fields.stampingDecision == 'deny'
  4. Permit issued

    issued

    Terminal stage.

  5. Denied

    denied

    Terminal stage.

  6. Referred elsewhere

    referred

    Terminal stage.