Propose Vendor Bill — command lifecycle
One propose_vendor_bill call end to end: queue → ProposalCreated → human approve → ProposalApproved → applier routes by PO linkage → Fishbowl import or QBO bill → MutationApplied.
Overview
The “dispatch for the workflow-based tooling,” watchable: the propose queues (no data mutates), the human’s click is the only execution path, and the applier picks the vendor route at apply time by PO linkage — the two-path rule from vendor discovery. This is the richest command flow (two possible vendor writes); contrast with a read like Cash Flow Tracker — tool-call lifecycleCash Flow Tracker — tool-call lifecycleFlowv0.1.0One cash_flow_tracker call end to end: the query hits CashFlowService, which fans into QBO + Fishbowl + ClaritySoft in p...Ownervisionary-engineeringView flowView docs, which never enters the event system.
The flow
How it works
- Max (agent) on claude.ai → MCP tool call
- Propose Vendor Bill → 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: vendor-bill-intake
- VendorBillApplier — routes by PO linkage → PO-linked → Fishbowl (auto-pushes to QBO) / non-PO → direct QBO bill
- Fishbowl Import Bill → the one vendor write
- QBO Create Bill → the one vendor write
- Fishbowl Inventory → result recorded on the proposal
- QuickBooks Online → result recorded on the proposal
- Mutation Applied → card refreshes
- Terminal: proposal
applied(a thrown apply recordsfailedinstead — Mutation Failed)