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
- Max (agent) on claude.ai → MCP tool call
- Propose Sales Order → queue only — no vendor write
- Approval Bus queues the proposal → pending + widget token minted
- Proposal Created → approval card renders
- Cleared human reviews the card → human click — approve
- Commit Approval (app-only) → RBAC + atomic pending→approved claim
- Approval Bus claims + dispatches → exactly-once claim
- Proposal Approved → dispatch by kind: order-entry
- OrderEntryApplier — CSV import, draft SO → draft SO, status Estimate
- Fishbowl Import Sales Order → the one vendor write
- Fishbowl Inventory → result recorded on the proposal
- Mutation Applied → card refreshes
- Terminal: proposal
applied(a thrown apply recordsfailedinstead — Mutation Failed)