flow

Propose Sales Order — command lifecycle

One propose_order_entry call end to end: queue → sales approves → applier imports a draft SO (status Estimate) via Fishbowl's CSV import path.

Flow

Overview

Fishbowl-bound, so not in the first live cut: the connector is the provisioning long pole (on-prem, Cloudflare Tunnel, no sandbox), and VIS-41 (the PO-path RBAC decision) gates any Fishbowl-touching command. While Fishbowl is absent an approved apply degrades to a structured failed proposal on the card — never a crash.

The flow

How it works

  1. Max (agent) on claude.aiMCP tool call
  2. Propose Sales Orderqueue only — no vendor write
  3. Approval Bus queues the proposalpending + widget token minted
  4. Proposal Createdapproval card renders
  5. Cleared human reviews the cardhuman click — approve
  6. Commit Approval (app-only)RBAC + atomic pending→approved claim
  7. Approval Bus claims + dispatchesexactly-once claim
  8. Proposal Approveddispatch by kind: order-entry
  9. OrderEntryApplier — CSV import, draft SOdraft SO, status Estimate
  10. Fishbowl Import Sales Orderthe one vendor write
  11. Fishbowl Inventoryresult recorded on the proposal
  12. Mutation Appliedcard refreshes
  13. Terminal: proposal applied (a thrown apply records failed instead — Mutation Failed)