Mise · Persona Flows · companion to the X-Ray wireframe
The X-ray storyboard walked one recipe through the product. Here the same two-layer view — what the operator sees on top, what the engine does underneath — is stepped through for each of the five kitchens. The point: the flow bends differently for each of them, and that's what shapes the receipt.
How her flow bends: she isn't costing one dish — she's onboarding a whole menu at once, with no purchase history. The flow becomes bulk capture → bulk silent-cost → a batched verify sweep where ask-once pays off hugely (answer "which chèvre" once, it resolves across every dish).
what Maya sees
She texts 30 recipe-card photos + 4 quote-sheet PDFs.
under the hood
extract_recipe ×30 → 30 RecipeDrafts.
Quote sheets ingested as tenant prices, tagged stated · basis:quote — not invoices, not corpus.
No costing yet. Her own_history store is empty; quotes are her only tenant data.
what Maya sees
Each dish lands with a cost + a low "% from your own prices."
under the hood — one dish's receipt (Beet Salad)
Every line walks the ladder → mostly rung 3.
{ "line":"goat cheese 55g",
"provenance":"corpus", "basis":"market_median",
"price_scope":{ "scope":"corpus_nearby",
"geo":"Portland", "n_kitchens":9, "range":[3.10,3.60] },
"swing":0.19, "material":true } // → asks
corpus carries its evidence; pct_from_own_prices: 0.00 — the cold-start signature.
what Maya sees
She answers ~2–4 per dish — mostly produce yields + a few "no nearby price, what did your forager quote?"
under the hood
generate_questions over 30 ledgers → dedup by (kind, subject).
"Which chèvre?" answered once resolves it on every dish that uses it. Chanterelle has no nearby price → error → question, never invented.
The dollar gate suppresses the pennies; the sweep is short because ask-once collapses the vocabulary.
what Maya sees
Avg food cost 29%3 at riskunder the hood
margin_report across the book; her answers wrote to memory → pct_from_own_prices climbing from 0.
Every dish traceable: which lines are her quotes, which are market estimates.
basis:quote kind, price_scope as an evidence-bearing object, the pct_from_own_prices trust dial, and errors that surface as questions and never a fabricated number.How her flow bends: closest to the original X-ray, but the recipe is a tree. Costing one donut means costing two batches first and pulling small amounts up — and the receipt has to show that build-up without drowning.
what Chomp sees
✓ costed the caramel batch · ✓ costed the shells · applying the 90% shell yield
under the hood — the recursion block
Children cost first (cached), parent pulls per-unit up:
{ "line":"shells 65g", "role":"sub_recipe",
"sub_recipe":{ "batch_cost":56.39, "per_g":0.0025,
"child_rollup":{ "max_delta_at_parent":0.00 } },
"yield":{ "factor":0.90, "applied":true },
"line_cost":0.18 } // 0.1617 ÷ 0.90
The 90% yield is the only one in the donut — the difference between $0.40 and $0.38.
what Chomp sees
$0.40 / donut · 10.7% food costunder the hood
Cost + margin off own_history; the outlier guard flagged cocoa butter (not silently absorbed).
The corpus benchmark is the wedge over the incumbent — same engine, one more read.
yield.applied, and the outlier_flag that surfaces a real specialty price for review without refusing it.How her flow bends: capture happens once at HQ, then costing happens eight times — once per store against that store's invoices. The receipt has to carry which location, and who owns each fact.
what HQ sees
under the hood
Recipe + standard + menu price are fact_scope: org — owned by HQ, shared to all, editable only by HQ.
what a Culver City GM sees
Culver City: $2.53 · 28.3%Sacramento's GM sees $2.37, under standard.
under the hood — same recipe, two receipts
{ "costed_for":"loc_la_culver",
"line":"ground beef 4oz",
"price_scope":"tenant", "fact_scope":"location",
"unit_cost_lb":4.85, "source":"USF Vernon inv" }
// Sacramento: same line, $4.35, its own invoice
costed_for + fact_scope are why "your price" means something.
what the VP of Supply Chain sees
Spread $2.31–$2.55under the hood
Cross-location benchmark: each store's price vs. sister stores + corpus vicinity. location facts compared, corpus anonymized.
The overpay block is the differentiated value — and the reason The Stand's founder pointed here.
costed_for on the envelope, the orthogonal fact_scope (org / location / corpus), the benchmark/overpay block, and answer_scope so an org fact isn't re-answered per store.How his flow bends: there's no screen mid-service. The same receipt renders to a spoken sentence and an SMS, and the verify budget drops to one question. The engine doesn't change — only the door.
what Diego sees (SMS, 5:55pm)
Al pastor taco ≈ $0.74/plate · 21% FC @ $3.50 ✅
pork: market ~$2.49/lb, ~30% cook loss (my guess)
reply "pork loss 35" or "good"
under the hood — one ledger, gated for context
7 lines, 3 material. Mid-service budget = 1.
gate: swing≥$0.10 & rank≤1
pork yield swing 0.13 → ASK
pork price swing 0.07 → CONFESS
tortilla swing 0.02 → SILENT
...4 more → SILENT
The FrictionPolicy lives in the door, not the ledger. The ledger just carries swing.
what Diego hears (griddle, hands full)
"Mise, what's my al pastor taco cost?"
"About 74 cents — 21% at $3.50, solid. Biggest guess: pork loses about a third. Know it closer?"
"More like 35, I trim a lot."
"Got it — 35%. New cost 78 cents, still 22%. Saved, won't ask again."
under the hood — same ledger, three renders
The spoken sentence is a render of the ledger: number from portion_cost, confession from the pork entry's variance:yield.
"35" → save_answer → usable_factor 0.65, chef_confirmed, tenant-scoped. Deduped by (kind, subject) → never re-asked.
voice/chip fields, ever. The door phrases and gates; the receipt only carries facts + swing. That's what lets voice ship as "a skin, zero engine changes."How his flow bends: there's no capture at all — the front door is the translator. The distinctive frame isn't Verify, it's the Diff: re-cost the old book and explain every difference from the numbers they've trusted for years.
what Coastline sees
under the hood
translator → staging. Duplicates merged (seed-id → SKU → fuzzy). 1.0 yields imported as NULL (unknown), not zero-waste.
what Coastline sees
under the hood — the diff object
{ "new_cost":486.20, "cached":402.75,
"buckets":[
{"stale_cache":78.00, "beef price rose since 2021"},
{"excluded_rows":1.20, "zero-cost junk row"},
{"legacy_incomplete":4.25} ],
"residual_bug":0.00, "verdict":"verified" }
Every difference bucketed & explained → residual 0 = engine proven, not broken.
what Coastline sees
under the hood
data_quality: yield_unknown → cost flagged understated (not silently 1.0). Missing conversion → question seeded from ConvMissing.
The book stays live; debts are carried, not gates.
diff object + bucket enum, data_quality[] flags, split identity/price provenance (legacy_catalog identity + own_history price), and the yield.status: unknown bit that keeps an unentered yield honest instead of silently zero-waste.