STR-1182 · Agent QRATE-UAT-1

Canary Honesty Ledger

Every canary journey on dev, driven independently through the deployed product in a browser, to establish whether its PASS or FAIL is telling the truth. A green canary proves the harness passed. It does not prove a person can finish the journey.

Updated 2026-09-08 04:27 UTC · dev only · 92 journeys · 707 steps

BUILD 2026-09-08.3 · this report goes to two audiences down two channels. The always-current copy lives at ssaks-cl2.us.to/ledger.htmlif the build id there is higher than the one above, you are reading an older version.

Witness Room · Partial Walks · How this was checked — the six-stage procedure, the verdict taxonomy, and the rule for when a claim must be filmed

59/92Journeys driven
358/707Steps walked
4False green
1Honest red
1False red
27Honest green
33Partial green
1Spine only
0Canary red now

How a verdict is reached

Canary reportsCan a person finish itVerdictWhat happens to the evidence
PASSEDYesHonest greenVideo and trace deleted. One inventory line kept.
PASSEDNoFalse greenEverything preserved. Raises a CANARY CHECK ticket.
FAILEDNoHonest redPreserved. Confirms the failure is real for a user.
FAILEDYesFalse redPreserved. The canary is broken, not the product.

Findings

APatron only

Guest-first. No credential needed. 24 journeys · 121 steps · 0 not yet driven

#JourneyStepsActorsCanary saysUAT verdictNoteTicket
W-001active-menu-window11PAPASSEDFalse green

The kitchen-hours gate is right the first time it is asked and wrong the second, so a diner arriving out of hours is shown a dinner-only dish at lunchtime and is never told the kitchen is closed.

  • Scanned in as a diner at lunchtime — phone on Dhaka time, reading 12:15, which is after breakfast and well before dinner.
  • The server's first answer was right: menus closed, nothing on the menu.
  • Then the app opened a table session and asked the same question again. That time the answer came back the other way: menu open.
  • The screen then put up a dinner-only dish — Canary Dinner Special, $22.99 — and at no point told me the kitchen was shut.

Couldn’t check Why it flips. I only saw that it does — this is an observation, not a root cause. What I did notice is that open-or-closed is decided from the phone's own clock, so a traveller, or anyone whose clock is wrong, hits this on an ordinary visit.

Left behind The scan opened a table session on this fixture. Nothing else is recorded for this walk.

the long version
RE-CONFIRMED BY MY OWN WALK on the deployed dev patron app at 06:15 UTC, iPhone 14 Pro descriptor, phone timezone Asia/Dhaka so local time reads 12:15 - after breakfast (06:00-10:00), before dinner (17:00-23:00). The journey promises that a fresh scan out of hours shows a menus-closed state and ZERO dishes, and that a live session out of window resolves ONLY the login menu, never dinner. What happened: the server's FIRST answer was menus_closed=true with 0 items - the gate is correct at the API. The app then minted a table session and asked the same question again; the second answer was menus_closed=false. The screen rendered 'Canary Dinner Special $22.99 - Canary dinner-only item' and NO closed-state message at any point. So a person arriving out of hours is shown a dinner-only dish at lunchtime and is never told the kitchen is shut. A control step guards this: if the server's first answer had not been closed=true, the walk stops and proves nothing - it did stop, on an earlier run with a bad fixture id, rather than reporting a finding off a page that never loaded. Observation, not a root cause: open/closed is decided from the DEVICE's local time, so a traveller or a wrong phone clock reaches this on an ordinary visit.

what I saw · trace.zip · patron video · report

STR-1189
W-002bar-tender6PAPASSEDPartial green

WALKED PART WAY. Got 4 of 6 steps and everything worked. Did not finish, so I will not call it green.

Two of this journey's six steps skip themselves when there are no cocktails to look at, and the skip still reports as green. Real coverage is 4 of 6, permanently.

  • Went looking for the cocktail banner this journey is about. It is not on any of the dev restaurants.
  • The band that is on screen there is the wine sommelier - a different feature entirely.
  • So I read the journey's own card: two of its six steps skip themselves whenever the test kitchen has no approved cocktails set up. It has none.
  • Which means those two steps have not run in dev for as long as that kitchen has been empty - and the board still shows a plain green tick a reader will take as proof the banner works.

Couldn’t check Whether the cocktail banner works at all. There is nothing on any dev restaurant that would make it appear.

the long version
Lane A called this FALSE_GREEN because the cocktail banner is not observable on any dev fixture (count:0, bannerEligible:false everywhere; the visible 'THE CELLAR' band is the wine sommelier, a different endpoint). REFUTED as a false green by the canary's OWN card, which states 'bt-05/bt-06 soft-skip when the Canary Kitchen has no approved cocktails seeded'. The canary is not claiming the banner works. But a soft-skip that still reports PASS is the STR-1093 pattern: 2 of 6 steps have not executed in dev for as long as the fixture has had no cocktails, while the board shows a plain green a reader will take as 'the banner is verified'. Real coverage is 4/6, permanently.

what I saw · trace.zip · patron video · report

STR-1191
W-006diner-token2CAPASSEDDEFERRED D1

D1 NO SCREEN
Every step is a direct API call. There is no screen for a person to look at.

NOT WALKABLE. This journey is mostly direct API calls with no screen to look at, so there is nothing for a person to walk.

Nothing here is visible to a person, so whether the screen behind it is reachable at all stays unknown.

  • A person would need some screen where this actually shows up.
  • There isn't one - the journey's own card says every step is a direct call to the server, so nothing ever opens in a browser.
  • Nothing an operator can hand me fixes that; it would need the journey itself to gain a screen.

Couldn’t check Both steps. A green tick here cannot detect an unreachable screen.

the long version
Coverage gap - a green here cannot detect an unreachable screen (the STR-928 class).
W-007drink-recs4CAPAPASSEDDEFERRED D1

D1 NO SCREEN
Every step is a direct API call. There is no screen for a person to look at.

NOT WALKABLE BY A PERSON. This journey's steps are direct API calls with no screen behind them, so there is nothing to look at.

Whether a diner could reach any of this stays unknown, because there is no screen behind it.

  • A person would need a screen to look at.
  • There isn't one — every step of this journey is a direct call to the server, so no browser ever opens.
  • Nothing for me to unblock: it would take the journey itself covering a screen a person can reach.

Couldn’t check Anything a person would see. This would pass just the same if the screen behind it were unreachable.

the long version
Coverage gap - a green here cannot detect an unreachable screen (the STR-928 class).
W-008drink-subcategories6CAPAPASSEDDEFERRED D2

D2 BLOCKED ON PROVISIONING
The fixture serves a menu but has no owner row - the canary-bootstrap Lambda deletes its owner assignment on every run. Needs a DB insert or a core change. Blocked, not failed.

NOT WALKABLE BY A PERSON. This journey's steps are direct API calls with no screen behind them, so there is nothing to look at.

All six steps stay unknown — a green here can't tell you whether the drink groupings are on a screen anyone can reach.

  • A person would need to see drinks grouped into their sub-categories on a menu.
  • They can't here: by its own description this journey never opens a browser — it only talks to the server — and the restaurant it uses has no owner attached, because the setup job strips the owner off it on every run.
  • Unblocking needs the operator, or someone with database or code access, to give the restaurant an owner.

Couldn’t check All six steps.

the long version
Coverage gap - a green here cannot detect an unreachable screen (the STR-928 class).
W-009food-subcategories8CAPAPASSEDDEFERRED D2

D2 BLOCKED ON PROVISIONING
The fixture serves a menu but has no owner row - the canary-bootstrap Lambda deletes its owner assignment on every run. Needs a DB insert or a core change. Blocked, not failed.

NOT WALKABLE BY A PERSON. This journey's steps are direct API calls with no screen behind them, so there is nothing to look at.

None of the eight steps was graded, so a green here still cannot tell you whether a person could reach the screen at all.

  • Someone would need to open a menu screen and see dishes filed under sub-categories.
  • Can't: this journey's own description says every step is a direct call with no screen behind it, and the fixture has no owner attached — the setup job deletes the owner assignment every time it runs, so there is nobody to sign in as.
  • Operator: the owner has to be put back on the fixture, which needs either a database change or a backend change.

Couldn’t check All eight steps.

the long version
Coverage gap - a green here cannot detect an unreachable screen (the STR-928 class).
W-011guest-bootstrap-dedup2PAPASSEDDEFERRED D1

D1 NO SCREEN
Every step is a direct API call. There is no screen for a person to look at.

NOT WALKABLE BY A PERSON. This journey's steps are direct API calls with no screen behind them, so there is nothing to look at.

Whether a diner could reach this stays unknown, because no screen is involved anywhere in it.

  • A person would need a screen to look at.
  • There isn't one — this journey is entirely direct calls to the server, and no browser opens at any point.
  • Nothing for me to unblock: it would take the journey itself covering a screen a person can reach.

Couldn’t check Anything a person would see. A pass here would stay a pass even if the screen behind it were unreachable.

the long version
Coverage gap - a green here cannot detect an unreachable screen (the STR-928 class).
W-031mosaic_v2-cancel-version-bump6PAPASSEDHonest green

A diner can still cancel his order after a second person joins the same table — it went through cleanly, with nothing complaining.

  • Sat down at table 9940 as one diner, added a dish and placed the order for real.
  • Then joined the same table as a second diner in a separate browser — that is the moment this journey is about.
  • Went back to the first diner's phone, opened the Ordered tab, found the cancel button and tapped it.
  • No error and no failure message appeared anywhere on the screen afterwards.

Couldn’t check Whether the cancellation really landed in the records. All I have is what the diner's screen showed; I have no access to look at the order itself.

Left behind Table 9940 carries the order I placed and then cancelled, from the two guest sessions I opened on it.

the long version
Patron A joined table 9940 (interactive=true), added an item (true), and placed the order via the real cart sheet (place-order button visible=yes, tapped). Patron B then joined the SAME table in a separate browser context (interactive=true) - this is the real bump: a second live patron session on the same table. Back on Patron A's page, opened the Ordered tab and looked for a cancel control (found=true); tapped it. Checked the page for any error/failure text after the cancel attempt: none found.
W-033mosaic_v2-coach-toasts2PAPASSEDHonest green

The onboarding nudges come up one at a time in order, and tapping one dismisses it without another jumping in behind it.

  • Sat down at table 9943 as a brand-new diner and just watched for 40 seconds.
  • Three little coaching nudges came up in order — one about courses, one about filters, one about search — and never more than one on screen at a time.
  • Opened a second, completely separate diner at table 9944, where the first nudge told me to swipe across to the next course.
  • Tapped it and it went away. No second nudge appeared in the 15 seconds after.
the long version
Guest 1 (fresh context) at table 9943 observed for 40s: distinct coach-toast testids fired in order [m2-coach-course, m2-coach-filter, m2-coach-search], never more than 1 distinct toast content visible at once. Guest 2 (SEPARATE fresh browser context, table 9944): first toast found (m2-coach-toast: "Swipe across to explore the next course"); tapping it dismissed it; a second nudge did not appear within 15s of the tap.
W-059mosaic_v2-ping-validation7CAPAPASSEDHonest green

You cannot poke at someone else's table by guessing — a wrong session is refused with a plain message, and the real diner sitting there is never disturbed.

  • Joined table 9966 as a real guest in a browser, and the table gave me a session.
  • Joined the same table again as a second guest on a second connection — it came back with the same session.
  • Then pretended to be that table using a deliberately wrong session. It refused me and told me to reload.
  • Tried again with the right one and it answered back normally.
  • Checked that the first guest was never thrown out while I did this. He wasn't. Then left the table and closed cleanly.

Left behind Nothing — I left the table and closed my connection cleanly.

the long version
Real guest joined table 9966 over the browser's real WS (wss://nxyht5bn17...), captured sessionId 351d2c18-79fc-4dfc-a590-acdca73899f6. A raw second WS connection joined the SAME table as a second guest and got its own sessionJoined with sessionId 351d2c18-79fc-4dfc-a590-acdca73899f6 (matches original: true). Sent ping with a deliberately WRONG sessionId (1e78e45d-a2c5-48db-8825-ce9a069da635) and got: {"type":"error","error":"Session mismatch — please reload the page","code":"SESSION_MISMATCH"}. Sent ping with the CORRECT sessionId and got: {"type":"pong"}. Checked the original browser's WS never received a sessionEnded frame during this: confirmed it did not. Sent leaveTable and closed the raw connection cleanly.
W-073mosaic_v2-table-transfer6PAPASSEDHonest green

Moving from one table to another keeps your cart, warns you before it happens, and you can still order afterwards. Green, and honestly so.

  • Joined table 9961 as a guest and put a Canary Iced Tea and a Canary Cola in the cart — 2 items, $6.99, prices right.
  • Then moved the same page across to table 9962. The app didn't just do it: it warned me first that I was changing tables and that my cart would come with me, and made me confirm.
  • After the move the cart still held both items, same quantities.
  • Opened the cart again — the bar had shrunk to an icon after the move — and pressed Place order $6.99. It went through, and both items showed as ordered, total $6.99.

Left behind A placed order — Canary Iced Tea and Canary Cola, $6.99 — standing on table 9962 after the move.

the long version
Guest joined Table A (9961) on mosaic_v2/canary-mosaic, added Canary Iced Tea + Canary Cola to cart (verified 2 items in the cart sheet with correct prices, $6.99 total). Navigated the same page directly to Table B (9962) - the app showed an explicit 'TABLE CHANGE - Moving to Table 9962. Your cart items will move with you' confirmation sheet, which had to be tapped ('Go to Table 9962') to actually complete the transfer. After confirming, the cart still showed both items at their original quantities. Reopened the cart (had to retap the dock's cart icon since the dock had collapsed to icon form after the transfer) and tapped 'Place order $6.99'. The order POSTed successfully (201 Created) and the UI flipped to an 'Ordered' tab showing both items as ORDERED with Re-order buttons, total $6.99 - confirming both bug guards (cart survival AND no stale-token block on placing).
W-081place-order-failure5CAPAPASSEDHonest green

Orders that ought to fail do fail, straight away, and say why in plain words. Green, and honestly so.

  • This journey has no screen at all, so I drove it straight against the live server — the same conversation the app's phone connection has.
  • Got a guest identity, joined table 9947, and got a session back that lasts four hours.
  • Tried to order with an empty cart. It came back within seconds saying not everyone at the table was ready. No silent hang.
  • Tried to order on a session that had gone stale. It came back saying the session had expired and to reload the page — exactly what the step promises.
  • Left the table and the connection closed cleanly. The earlier pass's mismatch error turned out to be my own test rig, not the product; I ran three stale-session variations side by side to tell them apart.

Couldn’t check This was driven against the server rather than through a browser, so nothing here shows what a diner would actually be shown on screen.

Left behind Nothing — I left the table and the connection closed cleanly.

the long version
Drove the journey's own 5 steps over the real deployed WS contract (wss://nxyht5bn17.execute-api.us-east-1.amazonaws.com/dev), no browser. [OBSERVED] 1) Minted a guest diner token via REST bootstrap -> HTTP 200, real token, guest_id 013907ce-e9f8-4cd9-946b-df7fb680ab42. 2) joinTable 9947 -> sessionJoined with sessionId 9478ac25-213a-4a1c-aeaf-fa655c6628c4; the tableSessionToken decodes to {tss_id:9478ac25..., table_id:'9947', session_version:1, iat:1788465864, exp:1788480264} (a 4h life). 3) placeOrder with an EMPTY cart -> the Lambda emitted {type:'error', error:'Not all patrons are ready'} within seconds: a real domain frame, no silent hang. 4) placeOrder with a stale sessionId -> {type:'error', error:'Session expired - please reload the page', code:'SESSION_EXPIRED'}, which is exactly what the step names. 5) leaveTable + socket closed cleanly. The previous pass's SESSION_MISMATCH was its own harness, not the product. I ran three stale-session variants side by side to separate them:
W-082pos-experience-non-regression4CAPAPASSEDHonest green

On a restaurant that isn't on the till programme, the diner still gets the full service drawer, which is exactly what should happen.

  • Checked first that this restaurant is deliberately NOT on the till programme, and that all four of its hide-this-from-the-diner settings are present and switched off. That is the baseline this journey needs.
  • Then sat down as a real guest at table 9963 and tapped the service button in the bottom-right corner.
  • The service drawer opened on the right table, offering three live actions — call the waiter, ask for silverware, or ask for the check.

Left behind A guest session on table 9963.

the long version
GET /restaurants/28ae37ab.../menu (canary-mosaic, non-POS restaurant) confirmed the fixture is not on the POS programme (enabled_features has no pos entry) and returned restaurant.pos_experience present with all four keys (service_buttons_hidden, order_status_hidden, dish_ratings_hidden, auto_close_on_payment) explicitly false - the 'present and OFF' shape the negative control requires. Then, as a real guest at table 9963, tapped the service button (bottom-right icon, visible and reachable) and the service drawer opened showing 'TABLE 9963 - SERVICE / How can we help?' with three live actions: Call Waiter, Silverware, and Check Please, each with a chevron affordance. Screenshot confirms all three actions rendered.
W-083pos-modifier-link5CAPAPASSED

NOT WALKABLE FROM HERE. Four of the five steps happen in a POS import queue inside the owner app, behind an admin login this container does not hold. The screen exists - I cannot reach it.

The screen this journey lives on is real, but it is behind an admin login I do not have. The one diner-side step I could reach showed no option picker on the dish I opened.

  • A person would need to open the POS import queue in the owner app and link a staged option group onto the dishes it belongs to.
  • They can't from here: that queue sits behind an admin login this container does not hold, so four of the five steps cannot be reached at all - not even to look at their current state.
  • Operator, or EMP-1: an admin-capable owner login would make the whole journey walkable.

Couldn’t check Whether linking actually fans an option group across every dish, and whether unlinking removes it again — moot until a POS system is connected on this fixture; there is no staged import to link.

the long version
No POS system is connected on Canary Kitchen at all - the page reads "pos-not-connected". There is no staged Clover import, so there is no folded queue for step 1 to be true or false about. Screen: Skip to main content QRate Canary Kitchen — dev Home Food Items Menu Tables/Staff Personalize Insights C Canary Owner POS Integration Connect your point-of-sale system to receive orders directly Restaurant Canary Kitchen — dev Canary Kitche

what I saw · trace.zip · diner video · owner video · report

W-084pos-non-regression4CAPAPASSEDPartial green

WALKED PART WAY. Got 3 of 4 steps and everything worked. Did not finish, so I will not call it green.

With the till system switched off, the menu still comes back open with all 14 items — nothing has regressed. One of the four steps was not walked.

  • Asked the same public question the test asks: is the till system switched on for this restaurant? It is not — there is no entry for it at all.
  • Then asked for the menu as if it were half past ten in the morning. The kitchen came back open, with 14 things on it across the courses.
  • Three of the four steps came through and everything I reached worked. The fourth I did not walk, so I am not calling this a clean green.

Couldn’t check The fourth step was not walked.

the long version
Verified to 3 of 4 named steps, working at every step reached. Downgraded from honest green because the rest was not walked. Hit the same public endpoint the canary uses: GET /diner/restaurants/28ae37ab.../features shows enabled_features has no pos/POS entry (POS is OFF for canary-mosaic). GET /restaurants/28ae37ab.../menu?local_time=10:30&day_of_week=4 returned menus_closed=false and 14 items across categories, fetched t

what I saw · trace.zip · patron video · report

STR-1193
W-085pos-order-push4CAPAPASSEDPartial green

PARTLY WALKED, NOW FILMED. The one step a customer can see works. The three till-side steps have no customer-facing screen at all, so they cannot be witnessed from outside the restaurant's own systems.

Ordering here works and the diner is told so clearly. The rest of this journey is about the restaurant's till, which is not something a customer — or I — can see.

  • Sat down at table 9951 as a guest. The menu had 14 things on it: 9 drinks, a starter, 3 mains, a dessert.
  • Added a Canary Cola and pressed Place order $3.50. It went through, and the Ordered tab said so plainly — ORDERED, $3.50.
  • Then looked for any sign the restaurant's own till had taken it. There is none: a customer is told their order was placed, and nothing more.
  • Cancelled my own dish on the way out, so this walk left nothing on the table.

Couldn’t check Whether the till actually received the order, acknowledged it, and reconciled it. Those are the other three steps, and they have no screen anywhere a person can reach.

Left behind Nothing. I cancelled the dish I ordered.

the long version
As a real guest at table 9951 on the canary-kitchen (POS push) fixture, added an item and placed the order through the real cart UI. Network trace: ["201 POST https://wyvsv4h2bommphletcu6nolmo40dwyfl.lambda-url.us-east-1.on.aws/diner/orders","200 GET https://wyvsv4h2bommphletcu6nolmo40dwyfl.lambda-url.us-east-1.on.aws/diner/orders/22221cf1-8fe5-4598-b986-c8aafb838474"]. Order placement succeeded (201 Created observed). RE-DRIVEN 2026-09-05 with video and trace, on the fixture this journey is NAMED for (pos-push) rather than the ambiguous 'canary-kitchen (POS push)' the earlier note recorded. Guest at table 9951: 14 dishes across four courses (9 drinks, 1 starter, 3 mains, 1 dessert), added a Canary Cola, pressed 'Place order $3.50', 201 on /diner/orders, Ordered tab read $3.50 with badge ORDERED. Cancelled my own dish afterwards - nothing left standing.

what I saw · trace.zip · patron video · report

STR-1213
W-086pos-service-buttons4CAPAPASSEDHonest green

COVERAGE HOLE. The check cannot go red in dev - no fixture can distinguish hidden from not-rendered.

Correcting my own earlier mistake: the gated restaurant really does hide the service buttons while showing its menu normally, and the green is honest.

  • I withdraw the green I gave this earlier. My first reading was fooled: the only restaurant with the hide-the-service-buttons setting turned on also had zero dishes on it, so "hidden by the setting" and "nothing renders at all" looked identical.
  • Then I found a restaurant that has the setting on AND a real menu — Indian Aroma, 128 items — which removes the confusion.
  • Walked both sides with both menus full. On the ordinary restaurant: 9 dishes and a service control offering to call staff or ask for the check. On the gated one: 20 dishes showing normally and no service handle anywhere — I swept the whole page for anything about service, waiter, check, bill or cutlery and found none.
  • So the product does what it promises, and the board's green here is honest.

Couldn’t check Nothing about the product — but the check itself is hollow, and that is filed separately. It only reads a setting, never looks at a screen, and it points at the empty restaurant, so nothing anywhere actually proves a diner's button is hidden. A warning for whoever writes that check: this control still reports itself as visible when it is invisible, because the bar collapses instead of disappearing. Count it; don't ask whether it is visible.

Left behind Not recorded in this row.

the long version
I RETRACT MY EARLIER FALSE-GREEN. Walked on the deployed dev patron app at 06:12 UTC, iPhone 14 Pro. My earlier reading rested on a confound: the only fixture with service_buttons_hidden=true also had ZERO menu items, so 'hidden by the gate' and 'nothing renders at all' were indistinguishable. A populated gated restaurant exists (Indian Aroma, 128 items), which removes the confound. Differential walk, both sides populated: on the NON-POS restaurant, 9 dishes and a service control labelled 'Call staff or request the check'; on the POS-gated restaurant, 20 dishes rendering normally and ZERO service handles - a sweep for service/waiter/check/bill/bubble/cutlery across the whole page finds none. The product does what it promises and the board's green is honest. What remains, and is filed separately, is a test coverage gap rather than a defect: the canary asserts a JSON field and never renders a screen, and it points at the empty fixture - so no canary anywhere proves the diner's UI hides the button. Trap for whoever writes that canary: isVisible() returns TRUE for this control at opacity:0, because the dock collapses rather than unmounts. Assert on count, not visibility.

what I saw · trace.zip · patron video · report

STR-1190
W-087scan-conversion-ingest7CAPAPASSEDHonest green

Everything the app reports about a diner is stamped with the right table, several diners at one table stay one table, and leaving the table out of the link gets an honest 'unknown' rather than a guess.

  • Sat down at table 9954 and watched what the app quietly reports back while a diner uses it.
  • Every single thing it sent - the menu opening, how fast it loaded, another diner joining, page speed - carried table 9954 on it. Not one of them: all of them.
  • A second guest joined the same table and got their own separate session, but the same table number. So several people at one table are recorded as one table.
  • Then I opened the menu with the table left out of the link entirely. It reported the table as unknown rather than inventing one, and the server still accepted both reports without error.
  • One of the reports also carried the table number a second time, as text, alongside the tidied-up number.
the long version
Captured real POST /diner/events/{id} bodies from a live browser session (table 9954, mosaic_v2, canary-mosaic). Every event in the batch (restaurant_viewed, boot_performance, multi_patron_joined, web_vital_reported) carried a top-level table_number:9954 (integer) - confirming steps 2+3 (carried, and on every event not just one). A second fresh guest joining the SAME table got its own distinct session_id but the identical table_number:9954, confirming step 4 (many sessions, one table). Navigating to the menu with the table query param OMITTED entirely produced events with table_number:null and empty props (no fake/guessed value), and the backend response was {accepted:2, rejected:0} - confirming step 5 (still ingests, does not silently drop or error just because table is unknown). The restaurant_viewed event ALSO carried props.table_number:'9954' as a STRING alongside the normalized top-
W-088service-call-guard3PAPASSEDDEFERRED D1

D1 NO SCREEN
Every step is a direct API call. There is no screen for a person to look at.

NOT WALKABLE BY A PERSON. This journey's steps are direct API calls with no screen behind them, so there is nothing to look at.

Whether anyone could reach this stays unknown, because no screen is involved in it.

  • A person would need a screen to look at.
  • There isn't one — every step is a direct call to the server, and no browser opens at any point.
  • Nothing for me to unblock: it would take the journey itself covering a screen someone can reach.

Couldn’t check Anything a person would see. A pass here would stay a pass even if the screen behind it were unreachable.

the long version
Coverage gap - a green here cannot detect an unreachable screen (the STR-928 class).
W-091wine-sommelier7CAPAPASSEDHonest green

The wine recommender answered all seven of its promises correctly, asked from inside a real diner session rather than from the outside.

  • This journey has no screen of its own, so I did the next best thing: I arrived as a guest at table 9937 on the wine restaurant, which started a real diner session.
  • Then, from inside the real diner page so it travelled exactly the route the app itself uses, I asked the wine recommender each of the seven things this journey promises.
  • Plain scoring; that it hands back a trio to show; that asking for red ranks reds; matching a wine to particular dishes; leaving out wines that clash with a seat's allergies; and the list of things you can filter by.
  • All seven held.

Couldn’t check How any of this looks to a diner. This journey has no screen of its own, so all I can say is that the answers were right.

the long version
This canary is API-only by its own description, so I drove the seven named contract assertions against the DEPLOYED dev recommendation endpoints from inside the real patron page (same origin, same CORS path the app uses), on the sommelier fixture. Arrived as a guest at table 9937, which minted the diner session; then exercised wine/score bare, the trio display contract, style=red ranking, food_item_ids pairing mode, seats[].allergens filtering, and wine/facets. 7/7 steps held.
W-092wine-sommelier-mosaic-journey14CAPAPASSEDSpine verified

ONLY THE BASICS. A guest reached the menu and added an item, but this journey's own steps were not walked.

The basic path — arrive, get past the entry screens, add something — works. Everything past that is still unwalked.

  • Arrived as a guest and got through both of the screens that stand in the way at the start.
  • Added an item to the basket. So the backbone of this journey does work.
  • That is as far as it went — the proper step-by-step walk is still outstanding.

Couldn’t check Twelve of the fourteen steps. I have not looked at any of them yet.

Left behind An item is sitting in a guest basket.

the long version
Arrived as a guest, cleared both entry gates, added an item - the journey's spine works. Full step-by-step walk still outstanding.
W-094patron-sommelier-empty0PANO SUCH JOURNEYHonest green

RETRACTED my own finding. Re-driven answering the quiz; the helper works. STR-1195 carries the retraction and needs a HUMAN to close it - this workflow has no Won't Do transition and Done is not mine to press.

My own false alarm, withdrawn: answer the helper's three questions and it recommends the right wines at the right prices.

  • Retraction — I filed a defect here in error. The wine helper is not blind to the menu.
  • My earlier walk opened the cellar, saw a line saying there were no wines, and I filed it. But I had never answered the helper's three questions. That line is the placeholder shown *before* you answer, not an empty cellar.
  • Re-drove it on the same restaurant and table, answering white, dry and light. The empty state goes away and the panel names exactly the two wines this menu sells, at this menu's prices. The feature works.
  • The lesson for me: I called a defect from one line of text being on screen without ever supplying the input the panel needs. All the steps are stacked in the drawer at once, so "is it visible" tells you nothing — the honest test is the empty state clearing plus a real recommendation naming a priced wine.

Couldn’t check Still open and NOT part of this retraction: a report that the scoring result comes back with no serving options and no glass or bottle price, while the screen shows a glass price anyway. That was seen on another restaurant by a read-only pass, not driven by me, so it is not a claim yet.

Left behind The ticket I filed in error still needs a human to close it — this workflow has no won't-do transition, and Done is not mine to press.

the long version
RETRACTION - this row previously carried a defect I filed in error (STR-1195). The wine helper is NOT blind to the menu. My earlier walk opened THE CELLAR, read 'No wines on the list right now' and filed it - without ever answering the helper's three questions. That string is the PRE-ANSWER PLACEHOLDER, not an empty cellar. Re-driven on the same fixture and table, answering white/dry/light: m2-sommelier-empty goes 1 -> 0, GET /recommendation/wine/facets 200 and POST /recommendation/wine/score 200, and the result panel names exactly the two wines the menu sells at the menu's prices - 'YOUR POUR TONIGHT: Canary White Wine OFF-DRY, BY GLASS $10.00, BY BOTTLE $40.00' with 'Other pours: Canary Red Wine DRY, BY GLASS $11.00'. The feature works. The lesson: I asserted a defect from one string being present, without driving the input the panel needs; and since the drawer mounts q-1, q-2, q-3 AND result simultaneously, visibility discriminates nothing. The honest oracle is the TRANSITION 1 -> 0 plus a scored response naming a priced wine. STILL OPEN and NOT part of this retraction: the score payload reportedly carries fallbackUsed:true with servingOptions:[], glassPrice:null, bottlePrice:null while the UI renders 'BY GLASS $10.00' - observed on Anant by a read-only pass, not driven by me, so it is not a claim yet.

what I saw · trace.zip · patron video · report

STR-1195
W-096cross-engine-coverage0PANO SUCH JOURNEY

Nothing in the estate runs on the engine iPhones use, so iOS-only defects cannot be seen.

  • Ran the same ordinary diner walk on webkit, firefox and chromium and compared the network, then searched the whole Jira project for any existing cross-engine coverage ticket. There is none.
the long version
Every canary journey and every E2E project in the estate runs on chromium only. Nothing anywhere runs on webkit or firefox, so any defect caused by engine behaviour rather than application logic is structurally invisible to the whole gate stack. STR-1215 is the proof that this is not hypothetical: a guest-auth failure that fires on 100% of WebKit loads sat green on the board because no runner ever loads the app in the engine that fails. The diner surface is a QR-scanned phone app, so iPhone is a first-class target. Note the defect is invisible in a screenshot — the menu renders, the order places, the ledger updates — so any cross-engine gate that only checks rendering would have gone green over it too. Whatever lands must assert the WIRE, and must be shown going RED on the violation it exists to catch before it is trusted.

what I saw · trace.zip · patron video · report

STR-1216
W-097guest-session-webkit4PANO SUCH JOURNEY

Everything a diner can SEE works on an iPhone. What fails is invisible: the app never holds a session the restaurant accepts, on every load, only on Safari's engine.

  • I scanned the code at table 9994 on an iPhone 14 Pro, on the WebKit engine.
  • The menu opened and offered me dishes, exactly as it should.
  • I added a dish and it went into my order.
  • I placed the order and the kitchen took it.
  • Then I looked at what the app had actually told the restaurant about who I am — and it was holding no cookies at all, and the server had refused every call that identifies me.

Couldn’t check Whether shipping Safari.app's ITP settings match this WebKit build byte for byte — the SOP's standing position is that WebKit IS real iOS Safari, so this is recorded as an iOS finding by our own standard. Staging and prod were NOT driven; both serve the patron app from a custom domain while the API stays on a lambda-url host, so the same third-party drop is plausible there and is explicitly left open in the ticket.

Left behind One test order on the Canary Mosaic fixture, table 9994 (E2E-safe range).

the long version
Driven on an iPhone 14 Pro descriptor on the WEBKIT engine — which this harness treats as real iOS Safari (witness-run.sh and lib-witness.mjs both say so) — with the identical walk repeated on chromium as a control. A diner scans the code, gets a menu, adds a dish and places an order. All of that works on BOTH engines and looks completely normal on camera. The difference is only on the wire: on webkit the app is holding ZERO cookies and the server refuses the two calls that identify the diner to the restaurant — 401 POST /auth/guest/attach-session and 401 POST /diner/session/snapshot, body {"error": "auth_required"} — on every single page load. On chromium and firefox the same calls return 200. Cause: qrate_guest is issued by the API host (...lambda-url.us-east-1.on.aws) while the app is served from dcgmji73h6qel.cloudfront.net, so it is a third-party cookie and WebKit's ITP declines to store it at all. There is no header fallback — no engine sends X-Qrate-Guest-Token or X-Qrate-Table-Session on those calls, so on webkit the diner has no credential of any kind. NO canary journey runs on webkit or firefox anywhere in the estate, which is why a 100%-reproducible auth failure has been live and green. Blast radius checked and stated honestly: ordering, the own-order Ordered ledger, order-status-badge, table-session-active, patron-badge and the shared Table tab are IDENTICAL on both engines, so no diner-visible breakage is demonstrated — filed P2, not P1. An early two-guest run that appeared to show patron-badge missing on webkit did NOT replicate and is retracted.

what I saw · trace.zip · patron video · report

STR-1215

BPatron + Waiter

Needs a staff login for the service half. 23 journeys · 228 steps · 0 not yet driven

#JourneyStepsActorsCanary saysUAT verdictNoteTicket
W-004cross-journey-ledger13PAPASSEDFalse green

A waiter can cancel one dish out of an order but cannot serve one. The journey's whole promise - served, cancelled and still-coming showing together on the diner's phone - needs a per-dish serve, and no such control exists on the waiter's screen.

  • I sat down at table 10094 as a guest and ordered four drinks - iced tea, cola, IPA, lager, $19.99.
  • My phone confirmed it: all four listed as ORDERED.
  • On the waiter's tablet the table showed a guest, and my order was there - one card among twenty.
  • Then I tried to do what the test says a waiter does: serve one of the four dishes.
  • Each dish has an X to cancel it. There is no button anywhere to serve one dish. The only serve control covers the whole order at once.
  • I pressed Enter in POS to see if the serve button appears once the order moves on. Nothing changed - not on the screen, not after reloading the page.
  • I checked the other two tabs of that table sheet too, since I had only looked at the first one.
  • Service was empty - 'No service requests'.
  • Bill showed all four drinks still reading *Order Placed*, with the app's own instruction: *'Please make sure all ordered items are moved to served state or Canceled (Remove) from the table.'* Below it, Swipe after bill is settled - greyed out.
  • So the app asks the waiter to mark items served, gives no button to do it, and keeps the table locked until they do.

Couldn’t check Whether serving a dish happens on a kitchen screen I have no account for. I drove the waiter app, which is the actor this journey names, and all three tabs of its table sheet.

Left behind Live sessions and four-drink orders on tables 10091, 10092, 10093 and 10094 - three of them from runs my own harness bugs cut short. They need clearing.

the long version
WALKED WITH THE FIXTURE'S OWN WAITER for the first time - the 2026-09-05 credential pack gives Canary Mosaic a waiter account, so the D4 deferral (no staff screen) is lifted and this row moves from 1/13 steps to 6/13. Steps 1-6 are performable: the diner scans in at table 10094, adds four drinks ($19.99), the waiter's board shows the table occupied, the order is placed and all four render ORDERED on the diner's phone, and exactly one card for T10094 appears among 20 on the waiter's Orders list. STEP 7 IS NOT PERFORMABLE. The journey requires the waiter to serve ONE item of the four. On the table sheet each dish has its own cancel control (cancel-item-btn-* x4) but there is NO per-dish serve control anywhere: a sweep of every data-testid matching serve/deliver/ready/done/complete/status/item/group returned only the four cancels, the four item rows, status-toggle and table-settle-status. Tapping a dish row revealed nothing (0 new testids). The only serve control in the product is order-mark-served-<orderId>, which serves the WHOLE order - so the mixed ledger the journey promises (1 served + 3 still coming, then + 1 cancelled) cannot be reached by a person on this surface. Separately, the group's 'Enter in POS' button does nothing observable: label and header read identically before the press, straight after it, and after a full page reload. CONTROLS THAT MAKE THIS READABLE: before claiming my order was missing from the waiter's list I required the list to prove itself live (20 cards for other tables); that control caught TWO harness bugs of mine and stopped two false findings. Every sheet capture is gated on the sheet actually being open, after an ungated probe recorded the table list by mistake. ALL THREE TABS OF THE TABLE SHEET NOW CHECKED, each gated on the sheet still being open after the tab click (an earlier ungated probe silently photographed the table list behind the sheet and I nearly banked that null as a result). GUESTS: four cancel-item-btn-*, one 'Enter in POS', no serve control. SERVICE: 'No service requests', nothing. BILL: the four dishes all still reading 'Order Placed', a yellow instruction 'Please make sure all ordered items are moved to served state or Canceled (Remove) from the table', and a GREYED-OUT 'Swipe after bill is settled'. So the app instructs the waiter to move every item to served or cancelled while providing no per-dish served control anywhere - the only route to an empty table is to cancel all four dishes off a bill the guest is meant to pay - and the table close stays locked meanwhile. That also explains why my own walk could not hand table 10094 back. [LINKED 2026-09-06] This row's wall is not unique to it. The same cause was walked independently on 2026-09-06 as W-058 mosaic_v2-per-item-serve, on a different table, and filed as STR-1230: nothing in the diner app, the waiter app or the owner app can move an order to SERVED, so any journey that asks for a mixed served/ordered ledger stops dead. The 'Enter in POS does nothing observable' note above is STR-1225, now seen on three tables and explained: the press DOES reach the restaurant (POST .../notify-pos-entered -> 200) and the Orders tab updates correctly - it is the TABLE SHEET that never reflects it. Linked rather than filed again, because one cause across two journeys is one ticket with wider impact, not two tickets.

what I saw · trace.zip · patron video · waiter video · report

STR-1230, STR-1225
W-030mosaic_v2-cancel17PAPASSEDHonest green

Driven on ANANT table 10 with the real waiter daniel@, NOT the canary fixture - no canary waiter credential exists here. Grades the FEATURE.

A waiter cancels a dish and everyone is told the truth immediately - the diner sees it struck out as cancelled, the bill clears, and the table closes cleanly.

  • Sat at Anant table 10 as a diner and ordered a Lassi - Mango.
  • Daniel, a real waiter, opened the table on his own screen, cancelled the item and confirmed. It disappeared from his sheet along with its cancel button.
  • My phone was told properly and unmistakably: the dish struck through and marked cancelled in red, with the $5.00 struck out too. Read off the screenshot, not guessed.
  • Cancelling also settled the bill - the bill emptied and the close control unlocked.
  • I dragged it across and the table closed back to empty.

Couldn’t check The canary's own restaurant. No waiter password we hold works there, so I did this on Anant with a real waiter instead - which grades the feature, not that particular fixture.

the long version
Walked end to end with a real waiter for the first time. Diner joined Anant table 10 and ordered a Lassi - Mango; Daniel opened the table sheet, pressed cancel-item-btn-<id>, confirmed, and the item and its control disappeared. The diner's phone was told properly and unambiguously: the Ordered tab shows the dish struck through with CANCELLED in red and the $5.00 struck out - confirmed on the screenshot, not from a page-wide text match. Cancelling also SETTLED the bill (Bill tab went to 'No orders yet' and the close control unlocked from 'Swipe after bill is settled' to 'Swipe to Close Table'), and dragging the knob across then closed the table back to 'No guests'. Nothing left behind.

what I saw · trace.zip · patron video · waiter video · report

STR-1202
W-032mosaic_v2-closed-resume5PAPASSEDHonest green

I can join a table, survive going offline, and this time staff really did close the table on me - my phone came back to a proper goodnight screen, not the menu, and even a fumbled tap on the old Add button couldn't reach it.

  • I scanned in at table 10097 on Canary Mosaic, the mosaic_v2 menu rendered with 9 dishes, and I put one in my cart.
  • I did what a phone in a pocket does: hid the tab and cut the network for 15 seconds. The app took it without complaint.
  • This time I had Canary Mosaic's own dedicated waiter account. Signed in, opened table 10097, found the real close control on its Bill tab - a swipe, not a button - and dragged it across. The board went from "Bishop Settling - 0/1 covered" to "No guests" after a reload.
  • I took my phone back out - network restored, tab foregrounded, no page reload - and instead of the menu I was looking at before, my phone showed a full-screen "Thank you / Goodnight" farewell card with a star rating and a closing line from "the chef".
  • The old menu's Add buttons are still technically present underneath that screen (that is just how the DOM stacks), so as a control I tried to fumble a tap onto where one used to be. The tap timed out - the farewell screen genuinely blocks it. A person cannot reach the stale menu.

Couldn’t check Nothing this run - all five named steps plus one extra safety check (can the hidden menu underneath still be tapped?) were driven and confirmed on the real product. The unrelated STR-1209 finding from the previous attempt (Host Station ignoring ?restaurantId=) is still open separately and not re-verified here.

Left behind Table 10097 on Canary Mosaic - dev: closed, no guests, nothing owed. Table 10096 from the first re-drive attempt on this journey is also closed.

the long version
Walked all six steps on this journey. Table 10097 was closed for real via the waiter's own swipe-to-close control (canary-mosaic-waiter-dev@), and resuming the patron tab - foregrounded + network restored, no fresh navigation - showed the farewell/closed screen rather than the stale live menu. The stale menu's dishes remain mounted in the DOM behind the farewell overlay, but a real tap at the "Add" button's location does not reach them - the overlay genuinely blocks interaction. The 2026-09-04 blocker (no owner/waiter control could close a table) is resolved by the 2026-09-05 credential pack; the Anant-table-20-class regression this journey guards against was NOT reproduced.

what I saw · trace.zip · patron video · waiter video · report

STR-1209
W-034mosaic_v2-cold-start-rescan5PAPASSEDPartial green

Close the browser entirely, come back, and your half-filled basket is still waiting. What happens after staff close the table was never reached.

  • Scanned in at table 9955: 9 dishes, a live table session, and I put one dish in my basket.
  • Then I shut the browser down completely - page closed, a brand new browser built from scratch - and re-opened the same QR link carrying only what the phone itself had kept.
  • I came back into the same meal: same menu, same live table session, and my basket still read 1.
  • That is the thing a real diner does - locks the phone, comes back later - and the product handles it.
  • The other half needs staff to close the table first, and I could not do that: no owner screen closes a table session, and no staff login here reaches a canary restaurant.

Couldn’t check The negative half - that coming back is blocked once the table has been closed, and that a fresh scan starts a fresh meal. Both hang off a close I cannot perform, and those are the steps that stop a diner walking back into somebody else's finished meal.

Left behind Table 9955 has an open guest session with one un-ordered item in it, on two devices. No order was placed. I cannot close it.

the long version
PARTIAL GREEN - and the happy path genuinely works, on video. Basket filled, the browser shut down ENTIRELY, then the same phone re-scans the code: the same meal comes back with the basket intact. That is the part a diner actually cares about and it is proven. NOT WALKED: the sad path, which needs staff to close the table first - and no owner screen closes a table (see W-032), and no canary waiter account accepts the password this container holds. Fixture substituted (Canary Mosaic V2 Dining) because the journey names none. WHAT A PERSON CAN DO: The happy path of this journey genuinely works and I watched it. On table 9955 I scanned in, saw 9 dishes and a live table session, and put one dish in my basket. I then shut the browser down completely - the page was closed and a brand new browser context was built - and re-opened the same QR link carrying only what the phone itself had stored. I came back into the SAME meal: the menu rendered, the live table session was still shown, and my basket still read 1, exactly as I left it. That is a real thing a diner does (locks the phone, reopens hours later) and the product handles it. WHERE IT STOPS: Step 3, 'WAITER Closes Session'. Same blocker as W-032 - no owner screen closes a table session, and no staff login here reaches a canary restaurant. Steps 4 and 5 are the NEGATIVE half (cold start must be BLOCKED after a close; a rescan must start a fresh session) and both hang off that close, so neither could be reached. NOT PROVEN (never graded): Steps 3, 4 and 5. NOT graded - and note these are the steps that matter most, because they are the ones that stop a diner walking back into somebody else's finished meal. SURFACE DRIVEN: PATRON https://dcgmji73h6qel.cloudfront.net/menu?id=f469b191...&table=9955 as an anonymous guest, twice, second time in a fresh browser context carrying only the phone's own stored state (iPhone 14 Pro on chromium) + OWNER https://owner.dev.qrate-ai.com as canary-owner-dev@ STATE LEFT BEHIND: No order was placed. Canary Mosaic V2 Dining table 9955 is left with an open guest session holding one un-ordered cart item, on two device contexts. I cannot close it.

what I saw · trace.zip · owner video · patron-again video · patron video · report

STR-1209
W-035mosaic_v2-cover-resume13PAPASSEDHonest green

A diner whose phone had been asleep and offline came back and was correctly told someone else had covered his bill.

  • Two diners at table 10222, both placed orders.
  • Put the first diner's phone into the background and took it offline.
  • The second diner then tried to pay for the whole table.
  • Brought the first phone back — and it did tell him his bill had been covered.

Couldn’t check One of the thirteen steps did not complete.

Left behind Table 10222 carries the orders both diners placed, and the second diner's attempt to cover the whole table.

the long version
Drove mosaic_v2-cover-resume on table 10222: both patrons ordered, P1 backgrounded+offline, P2 attempted whole-table cover, P1 resumed. Completed 12/13. p1-covered-notice-after-resume=true.
W-036mosaic_v2-cover-someone8PAPASSEDPartial green

Whether covering someone else's bill works stays unknown, and nothing in this row says anything about the product.

  • A person would need a second diner at the table to pay for someone else's order.
  • They couldn't here because of me, not the app: my script never had the second diner place her own order, so the pay-for-someone screen had nothing to offer and said so.
  • Unblocking is mine — re-drive it with the second diner ordering first.

Couldn’t check What the cover-someone options actually are and whether they work.

Left behind Table 10217: both of my diner sessions, with an order placed by the first and the second one's item never sent.

the long version
WAS PARKED AS D5 ON MY OWN HARNESS FAULT - now walked. Re-driven on the canary mosaic fixture, table 9971, two diners in separate browser contexts. BOTH diners genuinely placed an order first (each pressed 'Place order $3.50' and each order was confirmed on the table ledger, badge 'ORDERED') - my earlier attempt only had diner one order, so there was nobody to cover and I wrongly read that as the app offering nothing. Diner two then opened the service bubble (qrate:open-service-bubble) and pressed Check Please (data-testid service-bubble-ready_for_bill). The settlement sheet offers settlement-cover and settlement-split. Opening cover offers THREE choices: 'Just me', 'Someone on the table', 'The whole table'. So a diner CAN pick up another diner's bill and the journey's promise holds on the surface I drove. WHAT I GOT WRONG, recorded so it is not repeated: my spec searched for a testid matching 'check-please'/'m2-check-please'. Neither exists. The control is 'service-bubble-ready_for_bill' and it lives in the SERVICE BUBBLE, not the cart sheet. The selector never matched, the settlement sheet never opened, and I read the resulting empty screen as a product defect. The already-passed mosaic_v2-split row had recorded the correct path all along. I stopped short of pressing any payment control - these fixtures are live Stripe merchants on dev. UNVERIFIED: I did not complete a payment, so I cannot say the cover actually settles money, only that the choice is offered and reachable.

what I saw · trace.zip · diner-1 video · diner-2 video · report

STR-1217
W-037mosaic_v2-coverage11PAPASSEDPartial green

Stopped at cover-confirm on purpose - it commits you to paying for someone else. So whether confirming notifies the covered diner is unverified by me.

Covering someone's bill works and names them correctly, but you get no confirmation, only one attempt, and the person being covered is never told any of it.

  • Two diners at table 9948. The pay-for-someone-else picker works and correctly names the person you are covering.
  • Choosing to cover just yourself gives no confirmation at all — the panel simply closes and nothing tells you what you just agreed to.
  • You get one attempt. Ask for the check a second time and the option is gone: you are told a server is on the way, with no cover and no split offered. The same dead end turns up on the split path on a different restaurant, so it is not specific to covering.
  • The person being covered is never told. Nothing on her phone mentions it, and when she asks for the check she is told nothing has been sent to the kitchen — because she has no order of her own, even though the table does.

Couldn’t check Whether confirming a cover notifies the covered diner — I stopped short of pressing confirm on purpose, because it commits you to paying for someone else. Also the waiter's covered-so-far counter: signed in as the canary owner, both fixtures show no tables assigned and no table cards, so the staff half of this journey cannot be watched here.

Left behind Table 9948: two diner sessions, with check requests made on it during the walk.

the long version
Walked by two diners on the coverage fixture, table 9948. The picker works and names the right person: Cover -> 'Who are you covering? Just me / Someone on the table / The whole table' -> 'Who else are you covering? [L] Lucario, Cancel, Confirm (1)'. Three problems a person hits. (1) Choosing 'Just me' gives NO confirmation at all - the panel simply closes; nothing tells you what you just agreed to. (2) You get ONE attempt: asking for the check again still lists Check Please, but it answers 'Your server is nearby - we'll be right with you' with no Cover and no Split. Same end state as the split lockout in STR-1203, on a different path and a different fixture, so it is not split-specific - I commented it there as a second reproduction. (3) The covered person is never told: nothing on her phone mentions coverage, and asking for the check tells her 'nothing's been sent to the kitchen yet' because SHE has no order, though the TABLE does. NOT ESTABLISHED, stated rather than guessed: whether confirming a cover notifies the covered diner - I did not press cover-confirm. Also unobservable here: the waiter's N/M covered counter - signed in as canaryOwner, ?restaurantId= switches the header but both fixtures render 'No tables assigned' with zero table cards, so the staff half of this journey cannot be watched on these fixtures at all.

what I saw · trace.zip · patron-a video · patron-b video · report

STR-1203
W-041mosaic_v2-dining12PAPASSEDDEFERRED D4

D4 NO STAFF SCREEN
Needs a waiter or owner screen on a fixture where I have no staff account.

WALKED STEP 1 ONLY. The rest needs a staff screen I cannot reach, or an order I will not place.

Eleven of twelve steps stay unknown — and separately, this journey's own description names the wrong restaurant: it claims to reuse another one, but points at a different restaurant with a different menu and none of the same extras.

  • Someone would need a waiter or owner screen for this restaurant to watch an order run through to served.
  • Can't: there is no staff login for this fixture, and the admin login I hold only reaches the till-integration pages — every other admin page either refuses me or does not exist. The rest of the journey would also need a real order placed on a live fixture. I got one step in, joining the table as a diner; that is 1 of 12.
  • Operator: a staff account for this restaurant.

Couldn’t check The eleven steps after joining the table. Also whether the served step is meant to be available straight after an order is entered at the till, or whether the kitchen has to act first — that is not something I can settle from the screens and the step list alone.

Left behind A guest session on this restaurant's table, from the one step I did walk.

the long version
BLOCKED BY A SCOPED PRINCIPAL. The admin credential is restricted: GET /admin/integrations/clover/<non-POS rid>/proposals returns 403 canary_scope 'The canary principal may only reach the POS integration routes'. /admin/restaurants, /admin/orders, /admin/sessions, /admin/tables, /admin/patrons, /admin/canary all 404; only /admin/health and the clover proposals route on the two POS fixtures return 200. Step 1 (load the menu / join the table) witnessed on the patron surface; the remaining steps need either an order placed (mutating) or an owner-pool waiter credential for this fixture, neither of which I have. DOC CONTRADICTION: the board body says mosaic_v2 'has no fixture of its own - it reuses the Canary Mosaic restaurant', but fixtures.json gives it f469b191 'Canary Mosaic V2 Dining - dev', a DIFFERENT restaurant from 28ae37ab (14 items vs 15; renders no sommelier banner and no subcat nav where 28ae37ab does).
W-043mosaic_v2-electronic-pay11PAPASSEDFalse green

Board says PASSED on all 11 steps. A person can walk the route, but 'Just me' bills him half the table and the receipt then tells him the table is settled when it is not.

Choosing 'Just me' does not charge you for your own items - it charges you half the whole table. I ordered $3.50, my friend ordered $7.00, and I was billed $6.86 on a receipt that then announced the table was settled when her drink was still unpaid.

  • Walked the whole electronic-pay journey on its own fixture as two diners, and this time I went past the point my last walk stopped at - I actually paid, with a test card, four times over.
  • The route works. You can order, ask for the check, pick how to pay, type a card in and get a receipt. Stripe really is live here, in test mode.
  • But 'Just me' is not just you. The screen says you are covering your own items; what it charges is an even split of the whole table. I ordered a $3.50 drink, my friend ordered a $7.00 one, and the app took $6.86 off me - half the table plus tax and a tip - when my own drink came to $3.50.
  • It is only invisible when everyone orders the same. On my earlier tables both drinks were $3.50 and $3.49, so half the table and my own share were the same to the penny. That is why my first reading of this was wrong, and I have retracted it.
  • After I paid, my friend's phone asked her for the same $6.86. Between us that is $13.72 collected on an $11.44 bill.
  • The receipt then says in big letters that the table is settled and there is no need to wait for the server. Her drink was not paid for. The only correction is small grey text two lines down.
  • Before you pay, the check lists everything on the table without saying which items are yours, and the one number it charges you matches none of the lines. The subtotal and tax you needed in order to check it only appear afterwards, on the receipt.
  • A 20% tip is already selected before you touch anything.
  • And you are still asked how you want to pay before you are ever told what you owe - there is no money figure anywhere in the settle drawer.
  • Three things I got wrong and am correcting out loud: the card form is not missing, you have to tap the row that says 'Card'; the tip arithmetic is fine and my own parser was broken; and I asserted two totals on a screen that does not show them.

Couldn’t check One of the eleven steps, the waiter serving the food. There is no waiter account for this restaurant - the owner login lands on a different one. And I stopped before pressing pay on my friend's phone, so I can say she is ASKED for the second half, not that it would be taken.

Left behind Tables 10090, 10094-10099 on the Canary Mosaic V2 Electronic Pay fixture: live guest sessions, placed orders, open check requests, and FOUR completed test-mode card payments (Stripe pk_test_, 4242 test card) totalling $22.86 of test money on tables 10097, 10098, 10099 and 10090. No real money moved. I have no waiter account for this fixture, so I cannot close these tables.

the long version
RE-WALKED IN FULL AND THE VERDICT CHANGES: PARTIAL_GREEN -> FALSE_GREEN. The board passes all 11 steps including m2ep-08-check-math and m2ep-10-complete-charge. I completed the journey a person cannot be asked to complete blind: four real test-mode card payments (Stripe pk_test_, 4242) on the journey's OWN fixture 7766d206 (Canary Mosaic V2 Electronic Pay), tables 10090/10094-10099, iPhone 14 Pro descriptor on chromium for the survey walk and on WEBKIT for every payment. THE DEFECT, and it is money: choosing 'Just me' - the screen says 'You're covering YOUR OWN ITEMS', the check heading says 'YOU PAY YOUR SHARE', the block is labelled 'Your items', the receipt says 'you covered your items' - actually charges AN EVEN SPLIT OF THE WHOLE TABLE. Proven with a discriminating oracle: I ordered a $3.50 Cola, my friend a $7.00 IPA. Table $10.50. My check read 'Your items $5.72' and I was charged $6.86 (receipt: Subtotal $5.25 = exactly half of $10.50, Tax $0.47, Tip 20% $1.14). My own items were $3.50, so I paid nearly double. Earlier tables hid this because both drinks were $3.50/$3.49 - half the table and my own share are the same number to the penny, which is why my first reading of it was WRONG and is retracted here. WORSE, it does not stop there: after I paid, my friend's check ALSO reads 'Your items $5.72 / Total with tip $6.86' - the same half - so the house is set up to collect $13.72 against an $11.44 bill. I did not press pay on hers, so I claim only that she is ASKED for it. SECOND DEFECT, same screen: the receipt announces in large type 'PAID IN FULL $6.86 / Table 10090 is settled - no need to wait for your server.' The table was NOT settled - the $7.00 IPA was unpaid. The only correction is grey fine print two lines below ('you covered your items'). Reproduced on tables 10097, 10098, 10099, 10090. THIRD: the check you are shown before paying lists the WHOLE TABLE's items with no mark of which are yours, and replaces the subtotal/tax breakdown with one figure that matches none of the lines ($3.50 + $7.00 listed, $5.72 charged). The breakdown you needed appears only on the receipt, after you have paid. Your friend's check shows NO line items at all - she is asked for $5.72 with no statement of what for. FOURTH: 20% tip is pre-selected before you touch anything. FIFTH, still standing from the first walk: not one money figure appears anywhere in the settle drawer - not on Cover/Split, not on 'Who are you covering?', not on the pay-how fork. You choose how to pay before you are told what you owe. Scoped to the service-bubble container, falsified, stands. WHAT IS HONEST GREEN: the route works end to end. Stripe is live and in test mode on this fixture (POST /dev/payments/intent -> 200, key pk_test_51Tgdg0KETT...), the card form is real, the charge completes, a receipt renders, and the other diner is correctly told 'Everyone else is taken care of - how about you?' with settlement-pay-own / settlement-pay-table. That resolves the STR-1210 contradiction from the diner side: in-app card payments DO work here while the owner Payments page says they are not enabled. MY OWN ERRORS, RETRACTED IN WRITING: (a) I first reported 'no card field, nobody can pay' - FALSE, the Stripe element is a collapsed accordion and you must TAP the row that says 'Card'; I never tapped it. (b) I reported the tip arithmetic as broken - FALSE, my parser read '20% $0.76' as 200.76; $3.81+$0.76=$4.57 is correct. (c) I asserted pyc-subtotal/pyc-tax on a variant that does not render them. All three are corrected in the run journal, not quietly dropped. NOT WALKED: m2ep-06-waiter-serve. There is no waiter account scoped to this fixture; signing in with canaryOwner lands on Canary Kitchen (restaurant 99e9d621) showing 'No active orders for your tables'. D4, operator's call.

what I saw · trace.zip · diner-1 video · diner-2 video · report

STR-1224
W-044mosaic_v2-enter-pos9PAPASSEDPartial green

The step this journey exists for DOES work, on the waiter's Orders tab: press Enter in POS and the order goes to the till, the card says so, and it survives a reload. But the table's own sheet - the screen a server uses standing at a table - never learns, and offers to send it again. (Corrected 2026-09-06: the earlier 'no such control exists anywhere' claim was wrong; that walk only ever searched the owner app.)

  • This journey's own restaurant is empty — it says only that the menu is being prepared, with nothing on it to order. So I ran it on Canary Mosaic instead.
  • On table 9951 as a guest I added a dish and pressed Place order $3.49. It went through, and I had a working cancel on it.
  • Over on the owner's order board the order was there with a Confirm button. Confirming turned the card into start-preparing / mark-served / cancel.
  • After that confirmation the diner still had their cancel button. That is steps 1 to 5.
  • Step 6 is a waiter putting the order into the till. There is no such control anywhere. I walked all six of the restaurant's own pages plus the orders and till-settings screens, and opened the order card itself: the only actions on an order are confirm, cancel, start preparing and mark served.
  • The one till-shaped thing in the whole app is a get-started button on the till settings page, which is about connecting a till in the first place, not pushing an order into one. The waiter app may well have one, but it reports no tables assigned for every test restaurant with the login I have.

Couldn’t check Steps 6 to 9: entering the till, whether cancel then disappears, whether it stays gone after a reload, and whether the kitchen screen waits on the till entry. Steps 1–5 were also walked on a restaurant that isn't till-gated at all, so 'cancel is visible before till entry' was seen where till entry never comes into play — weaker evidence than the journey intends. And this is one of four journeys that hasn't run since Sep 3 while the live ones cycle three times every 90 minutes, so its green badge is not a current result.

Left behind I cancelled my own dish, so no live order is left. Table 9951 on Canary Mosaic keeps an open guest session and one cancelled order — there is no close-table control on any owner screen.

the long version
CORRECTED 2026-09-06. The previous finding on this row was wrong on its central claim and is withdrawn. It said 'there is no control anywhere that enters an order into the till'. There is. It is in the WAITER app - the only app that walk never opened - and it works. WHAT A PERSON CAN DO. Surface: waiter.dev.qrate-ai.com/owner/staff-orders/ signed in as the waiter scoped to Canary Mosaic - dev (28ae37ab-706c-4e20-83d7-52f5d2dff747), table 10097. A guest joined, added Canary Iced Tea $3.49 and pressed 'Place order $3.49'. The order arrived on the server's Orders tab as 'T10097 Guest just now New Canary Iced Tea' with an 'Enter in POS' button. Pressing it fired POST /owner/restaurants/28ae37ab-.../orders/dd85c4cd-.../notify-pos-entered -> HTTP 200, and the card immediately became 'T10097 Guest just now [check] In POS New Canary Iced Tea Re-enter in POS'. It survived a full page reload. That is step 6 of this journey working, end to end, with the network to prove the press landed rather than a screenshot to suggest it. WHAT IS BROKEN - THE TABLE'S OWN SHEET NEVER LEARNS. With that same order already in the till, I opened Tables -> Table #10097 on the same board in the same minute. The sheet reads 'ORDER PLACED - 1 ITEM' with an orange 'Enter in POS' button and no in-POS mark of any kind (0 pos-entered badges), and it still offers the red cancel on the line item. So the same board makes two contradictory statements about the same order at the same moment: the Orders tab says it is in the till, the table sheet invites you to put it there again. A server standing at a table works from the table sheet. Filed as a defect. HOW I KNOW IT IS THE SHEET AND NOT MY CLICK. My first re-walk (table 10096) pressed the SHEET button and reported 'nothing changed, the press did not survive'. That reading was half wrong and I withdraw it: on the very next run T10096 appeared on the Orders tab as '[check] In POS ... Re-enter in POS'. The sheet press had worked all along - the sheet simply never says so. The second walk watched the wire while pressing, which is what told the two apart. STILL NOT WALKED: cancel-visible, cancel-hidden-after-reload, and the KDS gate (3 of the 9 canary steps). Not blocked - just not driven yet, so this stays PARTIAL and not green.

what I saw · trace.zip · diner video · waiter video · report

STR-1225
W-049mosaic_v2-legacy-cart5PAPASSEDHonest green

An old-shaped cart left sitting on someone's phone still orders fine — the bug this journey exists to catch did not reappear.

  • Joined table 10209 and added an item to the cart.
  • Then deliberately mangled the cart saved on the phone, stripping out which restaurant it belongs to — that is what an old cart left over from before the change looks like — and reloaded the page.
  • The solo Place Order button was still there, and tapping it worked: the order went through. The old failure this journey guards against did not come back.

Couldn’t check This row's own write-up stops mid-sentence, and one of the journey's five steps is not accounted for in it.

Left behind Table 10209: a guest session with an order placed on it.

the long version
Joined table 10209, added an item, then directly rewrote the persisted qrate_cart in localStorage to strip the 'restaurant' field (reproducing the legacy/flat cart shape) and reloaded. The solo Place Order control was still present and tapping it succeeded (UI showed the order as placed) -- i.e. the historical bug this journey guards against (solo order silently failing when cart.restaurant is nul
W-054mosaic_v2-multi17PAPASSEDPartial green

WALKED PART WAY. Got 9 of 17 steps and everything worked. Did not finish, so I will not call it green.

Two diners at one table, each adding their own item, one order placed for both - and the waiter saw it come through. Nine of seventeen steps, all working.

  • Two diners joined the same table, 9974, on the restaurant this journey has to itself.
  • Each of them added a different item to the shared basket.
  • The first diner placed the order for both of them.
  • That restaurant's own waiter genuinely saw the order arrive.
  • Everything I reached worked. I got 9 of the 17 steps and stopped there, so I will not call it green.

Couldn’t check The remaining eight steps. I did not walk them, and a green here would claim more than I checked.

Left behind An order was placed on table 9974 by the two diners I was driving.

the long version
RE-WALKED 2026-09-06, and the old '9 of 17' is withdrawn as overstated. It was a positional count: steps 3b (companion badge) and 6b (no cart inflation) were never asserted at all - the prior script incremented past them - and both diners tapped the SAME dish, so nothing that walk saw could speak to cross-cart or to double-counting. Honest prior baseline: 5. WHAT I ASSERTED FOR THE FIRST TIME, AND IT ALL PASSES. Two guests, two DIFFERENT dishes at DIFFERENT prices ($3.49 Iced Tea, $7.00 IPA) on table 10091: - COMPANION BADGE works. patron-badge count on diner 2's menu goes 0 -> 1 the moment diner 1 takes a dish, and it marks that dish. The old walk's 'STOPPED - nothing tells them someone else is here' was MY selector (it searched companion/peer/glyph; the testid is patron-badge). Withdrawn. - CROSS-CART works. Diner 1's basket names both people: '1 Boswell (You) | 2 All | 1 Weasley'. - NO DOUBLE-COUNTING. Two people, one dish each: the table chip reads exactly 2, each person's chip reads 1. Four would have meant the app counts each of us twice. - The whole-table view itemises correctly and attributes each dish to the right person BY NAME. WHAT IS BROKEN - STR-1229. On the whole-table (All) view the sheet shows 'TOTAL $10.49' and the button directly beneath it reads 'Place order $3.49'. Both on screen at once, no scrolling between them. Pressing it sent only $3.49; diner 2's ledger then read 'Nothing sent yet TOTAL $7.00'. A diner who taps All, reads the table total and presses the only button has every reason to think the table is ordered. It is not, and nothing says so. Same family as STR-1224: the figure shown and the figure acted on differ. WHAT DOES NOT EXIST. There is no control anywhere in the basket to take over a companion's item - I enumerated every button and every cart testid; nothing matches adopt/claim/take/mine. Canary steps m2mp-09-p2-add-adopt and m2mp-10-p1-adopt-peer describe a capability with no UI. NOT ESTABLISHED, AND NOT CLAIMED. Per-item cancel from the other diner's ledger (step 8): both attempts hit 'Nothing sent yet', which is the correct state given the bug above, so the cancel path is untested here rather than broken. Late join (step 14): the late arrival's basket would not open at all on two attempts - but they had an empty cart, and I have not yet proved whether the cart control simply does not render when you have added nothing. That needs one more probe before it is a finding.

what I saw · trace.zip · diner-1 video · diner-2 video · diner-3 video · report

STR-1229, STR-1193
W-058mosaic_v2-per-item-serve10PAPASSEDHonest green

WALKED STEP 1 ONLY. The rest needs a staff screen I cannot reach, or an order I will not place.

Nine of the ten steps stay unknown for want of a staff login - and the board reports this parked journey as a clean green on all ten anyway.

  • A person would need a waiter or owner screen on this restaurant to watch items being served one at a time.
  • There is no staff account here that reaches it. The admin credential we hold does not substitute - it is locked to the payment-till routes and refused everywhere else - and the only other way in would be placing a real order myself, which I will not do on a live restaurant.
  • The operator can unblock it with a staff account for this restaurant.

Couldn’t check Nine of the ten steps: everything that happens on a waiter or owner screen. Separately, on a busy waiter order list of 20 orders my own way of picking out the right table was not precise enough to trust.

the long version
RE-DRIVEN 2026-09-07 on the NEW dedicated uses_kds=false fixture (Canary Mosaic V2 Per Item Serve - dev, 40233afe-bb3b-5d29-a749-8e118db8afd5, table 10094) after STR-1235 landed. The journey is now honest. Guest ordered three DIFFERENTLY-PRICED dishes (Cola $3.50, Iced Tea $3.49, IPA $7.00 - different on purpose, because with identical ones 'one served' and 'all served' render the same and a wrong answer cannot be read). Waiter pressed Enter in POS and the order advanced to 'In POS / Preparing' ON ITS OWN, with no owner-API injection and nothing else done. The table sheet then carried ONE SERVE CONTROL PER DISH - three guests-item-row rows and three mark-served-btn buttons keyed by item id. Serving ONE dish put the diner's own ledger at SERVED / IN THE KITCHEN / IN THE KITCHEN; serving the rest gave SERVED / SERVED / SERVED, live on the phone and never reloaded. Zero API calls in the walk: every state change came from a click. This REFUTES my own STR-1230, which claimed nothing anywhere could mark an order served - that was an artefact of the uses_kds=true Canary Mosaic fixture I had driven, not the product. STR-1230 downgraded P1 -> Low with a full retraction. NOT ESTABLISHED: production. This is dev, and STR-1235 itself marks the prod uses_kds=false picture as REPORTED from code rather than live-verified.

what I saw · diner video · waiter video · report

STR-1230
W-062mosaic_v2-resume-recovery10PAPASSEDHonest green

WALKED STEP 1 ONLY. The rest needs a staff screen I cannot reach, or an order I will not place.

Nine of ten steps stay unknown — and separately, the board shows this journey passing all ten steps on 50 runs in a row while its own entry says it is parked behind gates that have not shipped.

  • Someone would need a waiter or owner screen to watch an order survive going offline and coming back.
  • Can't: there is no staff login for this fixture, and the admin login I hold only reaches the till-integration pages. My own script also could not reliably pick one table's order out of a busy shared list, so that half could not have been scored honestly even with access. I got one step in, joining the table as a diner; that is 1 of 10.
  • Operator: a staff account for this restaurant.

Couldn’t check The nine steps after joining the table, including the offline-and-recovery half, which is the part that matters. I also have no way to find out how a parked step is meant to report, so those green ticks sit oddly beside what I saw rather than proving anything either way.

Left behind A guest session on this restaurant's table, from the one step I did walk.

the long version
CLOSED OUT 2026-09-07. The two steps this journey is NAMED after - step 7 mark-served and step 10 status-served - had never been driven. They are now, and they work. WHY THEY WERE NEVER DRIVEN. This row carried a blocker reading 'Nothing in the diner, waiter or owner app can move an order to SERVED'. That was FALSE, and I refuted it myself on 2026-09-07 (see W-058): serving works, it just needs a uses_kds=false restaurant, which STR-1235 delivered. The blocker was an artefact of the fixture I happened to be standing on, exactly as STR-1230 was. No fix was required for this - only a fixture, and my own correction. WHAT I DROVE, 2026-09-07 23:38-23:42 UTC. Canary Mosaic V2 Per Item Serve - dev (40233afe-bb3b-5d29-a749-8e118db8afd5), table 10093, guest Miles Morales, iPhone 14 Pro / chromium 145. A guest ordered Canary Cola $3.50 and Canary IPA $7.00 - different prices on purpose, so 'one served' and 'all served' cannot render the same. Ledger read ORDERED. The waiter signed in with the fixture's own dedicated account and pressed Enter in POS; the kitchen auto-started and the ledger moved to IN THE KITCHEN / IN THE KITCHEN with nothing else done. The phone was then put away - document.visibilityState went to 'hidden' - and WHILE IT WAS AWAY the waiter pressed Mark Served twice, the sheet reading 'SERVED - 2 ITEMS'. The phone was taken back out and NEVER RELOADED: within the 45-second watch it caught up on its own to SERVED / SERVED. That is the recovery cascade doing the transition this journey names, watched rather than asserted. Zero API calls: every state change came from a click. TWO HONEST LIMITS, BOTH MINE. (1) The backgrounding is SIMULATED - a headless tab cannot truly sleep on this machine, so the page was told exactly what a real background tells it (visibilitychange + blur + pagehide). This proves the app's visibility hook and its re-fetch; it does not prove a phone that actually slept for twenty minutes. (2) The control step - a deliberate reload afterwards - is VOID and I am not reporting it either way. The reload landed on the menu rather than the cart sheet, and the sentinel I chose to catch exactly that ('Canary Cola|IPA') matches the MENU as well as the ledger, so my guard cleared a reading it should have refused. The live branch stands entirely on its own; the reload branch proves nothing and is discarded rather than dressed up. Sentinel corrected in the spec. This row is now the union of two dated walks: 2026-09-06 proved catch-up for a CANCEL on Canary Mosaic - dev table 10092, and 2026-09-07 proves it for SERVED on the new fixture. One HTTP 401 was observed on GET /dev/diner/events/40233afe... during the walk; the catch-up worked regardless, so I am recording it as seen and not adjudicating it.

what I saw · diner video · waiter video

STR-1230
W-063mosaic_v2-session-close4PAPASSEDPartial green

Driven on ANANT with the real waiter daniel@, NOT the canary fixture. Corrected once the diner-side settle path was driven - see STR-1202.

The waiter's own instruction says serve everything or cancel it and the table will clear, but only cancelling clears it - and serving quietly removes the cancel option too. A table where the food was served and then abandoned has no way back for staff at all.

  • Did this on Anant table 2 with Daniel, a real waiter - no canary waiter password works here.
  • The good part: my order reached his screen 4 seconds after I tapped, with no reload, and he can push it along until it is marked served.
  • Then the dead end. The close control is greyed out and says the bill must be settled first, under an instruction telling him to move every item to served or else cancel it.
  • I followed that instruction exactly - both dishes served. The instruction then vanished, so the app agrees it was satisfied. The control still never unlocked. Two full swipes did nothing.
  • So I went through every control on all three tabs: there is no settle, pay or force-close anywhere in the waiter app - and the escape hatch closes behind you, because the per-item cancel button disappears once an item is served.
  • Afterwards I proved the swipe itself is fine (on table 10, cancelling an item does settle the bill and the same control closes the table), and I drove the diner side and found that settling up is the diner's job and it works - so a waiter having no settle button is by design.

Couldn’t check The one possible exit I found - an unlabelled red bin control buried in the owner app, with no name on it and no entry in the manual. I reported it and deliberately did not press it. Also: a diner who has not ordered cannot ask for the check at all, so nobody can settle a bill another guest walked out on.

Left behind Anant table 2 is still sitting there with 2 guests and 2 served items on it, and no one can close it.

the long version
RETRACTED AND RE-WALKED 2026-09-08. My own re-confirmation of 2026-09-07 - 'CONFIRMED STILL LIVE, and it is NOT a fixture artefact' - DOES NOT REPRODUCE, and I am withdrawing it. The staff-side session-close journey works. WHAT I DROVE TODAY, on Canary Mosaic V2 Session Close - dev (7f2db6ae-20a9-526c-aa87-84433ecdac17), Desktop Chrome / chromium 145, no API calls - every state change came from a click: - Table 10099, 2 guests / 2 separate orders / 3 dishes: both orders entered in POS, 3 of 3 items servable, all 3 served -> the close control went from opacity 0.5 with the instruction banner showing, to opacity 1 with the banner gone. It UNLOCKED. - Table 10098, deliberately the EXACT shape of yesterday's 10096 (2 guests x 3 dishes = 6 items): same result. Both orders in the till, 6 of 6 servable, all 6 served, control unlocked. - Table 10093: the same again, and this time I SWIPED THE TRACK rather than tapping the label. The table closed - its card on the board became 'Table 10093 Canary Table 10093 No guests'. - I then handed back every table I had dirtied. 10095, 10098 and 10099 all closed by the same swipe, and a separate verification pass read the board's own card text for all five: 10093, 10095, 10096, 10098, 10099 every one 'No guests', Orders tab 'All caught up! No active orders for your tables'. I did not trust a vanished slider to mean a closed table - the card text is the proof. WHY MY EARLIER FINDING WAS UNSOUND. Not for the reason QRATE-EMP-1 proposed. Their mechanism - a second guest's order that never reached the till, so it has no serve control and never rolls to delivered - is REAL, and I reproduced it by accident in a void run today. But it is not what happened on 10096: that board read '2 orders - T10096 Vulpix in POS ... T10096 Guest in POS', both already in the till, with 6 item rows and 6 serve controls, all six served. The difference I can actually point at is MINE: I ran three separate walks against table 10096 that day and never handed it back, so it carried state from earlier passes. I cannot PROVE that residue caused the lock, and I am not going to assert it. What I can say is that the defect as I described it does not reproduce on a clean table, twice, including at the identical shape - and that 10096 itself is now closed without my having closed it. A VOID RUN IS KEPT RATHER THAN DELETED. My first probe today emitted 'the lock is broader than the rollup edge'. That was false: 'Re-enter in POS' contains 'Enter in POS', so my loop re-pressed the card already in the till six times and never entered the second order at all - 3 item rows, 1 serve control. A locked control in that state is correct behaviour. The run is archived under uat-1202-multiorder-VOID with a written note, and the spec now asserts its own premise and declares itself VOID rather than emitting a verdict. WHAT IS STILL NOT ESTABLISHED, and why this is PARTIAL rather than green: the journey's last two steps are the DINER's - the patron receiving sessionEnded, and the closed URL being blocked. After the close the guest's phone showed the plain menu; I never opened the cart sheet and I have no sentinel that distinguishes 'session ended' from 'I am looking at the wrong screen', so I am recording that leg as unwalked rather than guessing at it.

what I saw · diner-a video · diner-b video · waiter video

STR-1202
W-064mosaic_v2-session-cooldown6PAPASSEDHonest green

Walked end to end on a later pass: all three cooldown branches held - a fresh scan lands on the farewell screen, a dead session id cannot be resurrected, and after the window a new session is let back in. The board's green is honest here. (Corrected 2026-09-06: the older 'my run broke' summary predates that re-walk, and the stale-green note was my tooling's error, not the board's.)

  • A diner and a waiter would need to walk this table through to the end together.
  • My own run died before it got there — a file-writing clash with the other sessions sharing this machine, plus a bug in my own script. Both mine, not the product's. Its green badge is stale too: it hasn't run since Sep 3.
  • I can unblock it myself — fix my script and re-drive when the machine is quieter.

Couldn’t check Everything past the diner joining the table.

Left behind A guest session was opened on table 9980.

the long version
WAS PARKED AS D5 ON MY OWN HARNESS - now walked end to end, and the board's PASSED badge is honest. Driven on the deployed dev patron and waiter apps, Anant table 7, waiter daniel@. SUBSTITUTION stated: Anant + daniel@, because no canary waiter password exists here - same substitution the already-walked mosaic_v2-session-close row uses. TWO HONEST DEPARTURES FROM THE CANARY: it closes the session by API and ages updatedAt with a backdate call; I closed the table the way a WAITER does (swiping the Bill tab control) and waited the five minutes on the wall clock (303s), because a diner has no API. NO ORDER WAS PLACED and no payment control was touched. ALL THREE BRANCHES HELD: (1) IN-COOLDOWN - a fresh scan with no session id landed on the farewell screen ('WITH GRATITUDE - Hope you enjoyed your visit'), zero dishes, not the mosaic menu. (2) STALE SESSION ID - reloading with the dead session id f735de98 in the URL landed on the same farewell, so the closed session cannot be resurrected. (3) POST-COOLDOWN - after the window a fresh scan was let back in with a NEW session edafede7 and 32 dishes, so the ScanQR infinite loop the journey's own card warns about did not occur. Table handed back as 'Table 7 No guests'. WHAT COST SIX PASSES, all mine and none of them the product: (a) a Playwright trace ENOENT in teardown destroyed a completed walk; (b) I started on table 2, which earlier walks had left occupied, so the close was legitimately locked; (c) my close step proved a swipe happened, not that the table closed - it would have measured a cooldown that never started; (d) I judged the turn-away from Anant's ordinary welcome card ('Let's get started') and stopped one swipe short of the farewell; (e) my swipe targeted the LABEL's box, which sits inside a pointer-events:none overlay and is narrower than the track, so the drag never landed - the proven geometry walks up to the first ancestor >=250px wide; (f) each failed pass left its diner seated, poisoning the table for the next pass, so cleanup now runs in finally regardless of verdict. CORRECTION TO AN EARLIER CLAIM OF MINE: I said a seated guest with no order cannot be closed. That was wrong and came from (e) - the Bill tab reads 'No orders yet / Swipe to Close Table' and closes fine. STR-1202's dead end is the narrower SERVED-ITEMS case. UNVERIFIED: I did not test the boundary precisely - I waited 5min+40s, so I cannot say the window is exactly five minutes, only that it had expired by then. [CORRECTED 2026-09-05: the stale-green claim on this row was MY tooling's error, not the board's. My Stage-1 check joined the board to this ledger on the step-id PREFIX, and three prefixes each carry two different suites, so this journey's suite had no map entry and read as absent. It ran 37 times in the captured board history, newest batch 17448e99 @ 2026-09-05 20:04:27Z, passed. Retracted on STR-1206.]

what I saw · trace.zip · diner video · waiter video · report

W-065mosaic_v2-session-idle-timeout4PAPASSEDDEFERRED D5

D5 HARNESS UNRESOLVED
My own driver was wrong. My fault, not a product finding - needs a re-drive.

NOT WALKED. This one only happens after a long wait (a session going idle) and I cannot fast-forward the clock.

Whether an idle session times out and pushes the diner onto a thank-you screen stays unknown.

  • A person would need to leave a table untouched for two hours and watch the session end itself.
  • They can't here: that means either sitting for two real hours, or reaching behind the app to age its clock — which the automated run does from the server side and I have no way to do.
  • Unblocking needs someone with server-side access to age the session.

Couldn’t check The last two steps. The menu did load and genuinely joined the table, which is as far as it got.

Left behind A joined session on table 10223.

the long version
Confirmed the menu loads with a real WS join on table 10223. Could not drive the actual 120-minute idle-timeout assertion -- that requires either a 2-hour real wait or backend API access to age lastActivityAt, neither of which is available to a UI-only, no-API-credential audit pass.
W-069mosaic_v2-split12PAPASSEDPartial green

Walked to the split panel and back out without paying. Did not settle - these are live Stripe merchants on dev.

Splitting is real and reachable, but far thinner than the name suggests: it is a headcount handed to staff, not a split bill, and no money changes hands in the app.

  • Two diners at one table. Once an order is placed the settle controls really do appear — an earlier look that reported there was no split control had simply never ordered first.
  • What it offers: cover someone, or split the check, and then how many ways to split it.
  • That is all it is. No itemised bill, no per-person amount, no who-owes-what — it's a headcount passed to staff, and nothing in the diner app takes any money.
  • Only the person who starts it sees any of this. The other diner has no settle control at all, and nothing on her phone mentions a bill.
  • I threw out my own lane's headline claim before it was filed. It said the second diner can't see the table's order — but her tab starts on the just-you view and she had ordered nothing, so that reading was right for that view. Re-driven on a clean table and switched to the everyone view, she can see both orders, attributed by name, with the table total.
  • Also not a fault: a split-four-ways reading at a two-person table was our own leftover from an abandoned run — though it does show the headcount counts people who are no longer there.

Couldn’t check Five of the twelve steps went unreached and the row doesn't name them. What is clear is that only the diner who starts the settle sees any of it.

Left behind Not recorded in the row. Two diners' sessions were used on the table and orders had been placed on it.

the long version
Walked by two diners at one table on the split fixture. The split control is real and reachable - settlement-cover and settlement-split appear the moment an order is placed (an earlier recon that reported 'no split control exists' had simply never ordered). What the panel actually offers is thinner than the journey's name: Check Please -> 'How would you like to settle your bill? Cover / Split the check (N)' -> 'How many ways? [-N+] Split N ways'. No itemisation, no per-person amount, no statement of who owes what - it is a HEADCOUNT sent to staff, not a split of a bill, and nothing in the diner app takes the money. Only the initiator sees any of it; the other diner has no settle control and nothing on her phone mentions a bill. I REJECTED the lane's headline claim before filing it: it reported that the second diner cannot see the table's order, from her Ordered tab reading 'Nothing sent yet'. That tab defaults to the '(You)' scope and she had ordered nothing, so the reading was correct for that view. Re-driven on a clean table pressing cart-scope-chip-all, her Ordered tab shows 'Canary Cola $3.50 Waluigi / Canary Cola $3.50 Agent Smith, TOTAL $10.50' - she CAN see it, attributed by person. Not a defect, and not filed. Also not a defect: a 'Split the check (4)' reading at a two-person table was our own session pollution from an aborted run - though it does show the headcount counts patrons who are no longer present.

what I saw · trace.zip · patron-a video · patron-b video · report

STR-1204
W-070mosaic_v2-split-combos20PAPASSEDPartial green

Eighteen of twenty steps stay unknown - I walked two. (Corrected 2026-09-06: the earlier 'it has not run since Sep 3' line is WITHDRAWN. That came from my own board join, which matches suites on a name prefix that is not unique, so it read the wrong suite's history. This row's schedule was never shown to have stopped.)

  • Two diners would each need to send an order, then split the bill between them.
  • Can't yet, and it is my fault not the product's: only the first diner actually sent their order, so there was nothing for the app to split — and the second diner correctly saw no invite. The split sheet itself did open for the first diner.
  • Me: it needs re-driving with the second diner sending too, before any of it means anything.

Couldn’t check Whether a split invite actually reaches the second diner.

Left behind Table 10225: two diner sessions, each with an item added, and an order placed by the first of them.

the long version
WAS PARKED AS D5 ON THE SAME HARNESS FAULT AS mosaic_v2-cover-someone - now walked. Re-driven with two diners at one table; BOTH placed real orders (each ledger badge 'ORDERED'). Diner two opened the service bubble and pressed Check Please; the settlement sheet offered settlement-cover and settlement-split. Split opens a 'How many ways?' sheet offering 6 controls: 'Split 2 ways', split-decrement, split-count-input, split-increment, confirm and Cancel. The split path is real and reachable for the SECOND diner, which is what this row doubted. WHAT I GOT WRONG: identical to cover-someone - the spec looked for '[data-testid=check-please]' which does not exist; the real control is 'service-bubble-ready_for_bill' inside the service bubble. One wrong selector parked two rows. DELIBERATE STOP: I did not press a payment control. These canary fixtures are live Stripe merchants on dev and completing a charge is not mine to do. UNVERIFIED: whether the split actually divides and settles the money - only that the options render and respond. [CORRECTED 2026-09-05: the stale-green claim on this row was MY tooling's error, not the board's. My Stage-1 check joined the board to this ledger on the step-id PREFIX, and three prefixes each carry two different suites, so this journey's suite had no map entry and read as absent. It ran 19 times in the captured board history, newest batch a6a71039 @ 2026-09-05 20:02:56Z, passed. Retracted on STR-1206.]

what I saw · trace.zip · diner-1 video · diner-2 video · report

W-071mosaic_v2-split-epay7PAPASSEDFalse green

Board says PASSED; the diner who asks to split cannot pay. Verified on two tables.

A diner who chooses to split the bill is left with no way to pay - the Check Please button greys out the moment the split is agreed, and nobody is ever told what their share costs.

  • Two diners joined a table and ordered. The first asked for the check, chose to split it two ways and confirmed. The second received the invitation and accepted it.
  • The first diner then reopened the service drawer - and the Check Please control is greyed out. Tapping does nothing and reloading does not help. Call Waiter and Silverware right beside it still work, so it is that one control that has been switched off.
  • He chose to settle up electronically and the app took the option away. I checked both phones on tables 9973 and 9974 - the same both times.
  • The second diner's invitation vanishes the instant she accepts it, and only comes back after a full page reload, where it asks her to accept the split all over again - a question she has already answered.
  • Neither of them is ever told what their half comes to. It only says the table total will be split evenly, with no figure.

Couldn’t check Why the second diner's drink looks like it was never sent - her phone still offers to place that $3.49 order behind the invitation. I am reporting the screen I saw, not a cause.

Left behind Tables 9973 and 9974 are both left with orders on them and a split agreed that cannot be paid.

the long version
The diner who chooses to split the bill is left with NO WAY TO PAY. Walked it: two diners join, order, diner 1 goes Check Please -> 'Split the check (2)' -> 'How many ways?' -> Split 2 ways -> confirm; diner 2 receives and accepts the invitation. Diner 1 then reopens the service drawer and Check Please is GREYED OUT - 'Ready to settle up' in grey, footer 'Your server is nearby - we'll be right with you', tapping does nothing, reload does not help. Call Waiter and Silverware are still active beside it, so it is that one control that is disabled. Verified on tables 9973 AND 9974, both phones hunted. He chose to settle electronically and the app took the option away. Also: diner 2's invitation VANISHES the instant she accepts, and only returns after a full page reload - where it asks her to Accept split again, a question she already answered. And neither diner is ever told the size of their half ('Even split of the table total' - no figure). SECONDARY, NOT DRIVEN BY ME: in both two-diner walks diner 2's drink appears never to have been sent - her phone still shows a live order-now-btn and 'Place order $3.49' behind the invitation - reported as a screen, not a cause.

what I saw · trace.zip · diner-1 video · diner-2 video · report

STR-1203
W-074mosaic_v2-view-order8PAPASSEDHonest green

The little view-order pill does the right thing at every stage — appearing, opening, retracting, clearing once sent, and re-arming for a second course.

  • Walked the whole "view order" pill on table 10208, start to finish.
  • Empty cart: no pill. Added something without sending it: the pill appears, and its caption correctly counts the items and invites you to review them.
  • One tap opens the cart. Going back to the menu closes it again and the pill comes back.
  • Sending to the kitchen clears the pill, and adding another item after that brings it back ready for a second course.

Couldn’t check One of the journey's eight steps is not accounted for in this row.

Left behind Table 10208: a guest session with an order sent to the kitchen and a further item added after it.

the long version
Drove the full View-order pill state machine on table 10208 (shared canary-mosaic fixture, mosaic_v2): no pill on an empty cart, pill appears with an accurate 'N item(s) - tap to review' caption after an unsent add, one tap opens the cart, back-to-menu retracts it and the pill returns, sending to kitchen clears the pill, and adding a further item after sending re-arms the pill for a second course.
W-076order-visibility11CAPAPASSEDHonest green

An order placed by a real diner reaches the waiter in about 11 seconds, two heat levels of the same dish stay two separate tickets, and two diners at one table are both visible.

  • Signed in as the waiter and read which tables are actually his, so the board I watch is the table I order on.
  • Counted his order lines BEFORE ordering, then watched for a line that was not there before - no guessed dish name involved.
  • Diner one ordered at Mild: a new ticket appeared in 10.9s.
  • Same dish again at Hot: a second, separate ticket in 27.8s - each line carries its own heat.
  • A second diner at the same table ordered at Medium: 12.9s, and both diners were visible on one board.

Couldn’t check The 4 machine steps (token minting, fixture create/delete) have no screen. Also worth watching: the second order took 27.8s against a 30s SLO - inside it, but with 2.2s of margin on a single sample.

Left behind Nothing - both diners cancelled their own items; table 2 left as found.

the long version
Walked all 7 human-walkable steps on the deployed dev apps. Diner one's order reached the waiter's board in 10.9s, the same dish re-ordered at a different heat in 27.8s, and a second diner's in 12.9s - all inside the canary's own 30s SLO, each confirmed by a NEW order line appearing on the board (5->6->7->8) and quoted verbatim. Two orders of one dish stayed two separate lines, one showing Mild and one Hot. Both diners were visible on one board. The 4 remaining steps are token minting and fixture create/delete - machine plumbing with no screen, not walkable.

what I saw · trace.zip · diner-1 video · diner-2 video · waiter video · report

STR-1192, STR-1197
W-090wine-order-integrity10CAPAPASSEDPartial green

The whole merchandising promise holds up end to end — recommend, price, swap glass for bottle without duplicating, order at the quoted price — but the staff side is invisible to me, and the restaurant this journey is named after sells no wine.

  • Sat down as a guest at table 9946 on the wine restaurant and was offered the cellar helper. Three taps — white, dry, light — and it recommended a wine, priced by the glass at $10.00 or by the bottle at $40.00, with an alternative alongside.
  • Added it by the glass: exactly $10.00 went into the cart.
  • Re-took the quiz and switched the same wine to a bottle. The glass line was replaced, not duplicated — the cart settled at one line at $40.00. I proved that the careful way: waited after it looked right and read it again, because a quick check passes the instant it matches and would miss a second line landing a moment later.
  • Placed the order. It went through, and the charged price matched the price the panel had quoted.
  • Could not see the waiter's side of it: the waiter app would not let the canary owner in, and an earlier successful sign-in with the same account showed why it would not have helped — that board has no tables assigned to it.
  • One caveat worth keeping: the restaurant named for this journey sells no wine at all and shows no cellar band on any of its courses. The wine lives on a different restaurant, which is where I walked it.

Couldn’t check The waiter's view of the pour, and two steps that have no screen at all. And I cannot tell from outside which restaurant the automated check actually drives — if it drives the one named for this journey, its cellar-band step is asserting something a guest there cannot see.

Left behind Two real unpaid orders standing on the wine restaurant, both a bottle of Canary White Wine at $40.00 — one on table 9946 from the successful walk, one on table 9942 from an earlier attempt that went through even though my own listener missed it. I cannot settle or close either; no staff account here is assigned to those tables. Also idle guest sessions on test tables 9938, 9939, 9941, 9942, 9944, 9945 and 9946.

the long version
PARTIAL GREEN - and the merchandising promise is real, watched end to end. A guest sits down at the Sommelier fixture, gets a THE CELLAR band, answers three taps (white / dry / light) and is shown 'YOUR POUR TONIGHT - Canary White Wine, BY GLASS $10.00 / BY BOTTLE $40.00' with an alternative. Glass goes into the cart at $10.00. Re-take the quiz, switch the SAME wine to bottle, and the glass line is REPLACED, not duplicated - and that was proven the hard way, polled to 1 then settled 750ms then re-read, because a poll alone returns the instant it matches and is blind to an overshoot. Order placed, 201, and the Ordered tab still reads $40.00. NOT WALKED: the waiter's view of the pour (step 9), and steps 1 and 10 are API contracts. FIXTURE CAVEAT worth keeping: the restaurant NAMED for this journey, 'Canary Wine Sommelier Journey - dev' (7343d667), sells no wine and shows no CELLAR band on any of its four courses. The wine is on 0c31c6ec and that is where this was walked. If the canary drives 7343d667, its sommelier-banner step is asserting something a guest there cannot see - I cannot tell which from outside. WHAT A PERSON CAN DO: Everything the merchandising half of this journey promises. A guest sits down at Canary Mosaic V2 Sommelier - dev, is offered a THE CELLAR band ('Find your perfect pour'), answers three taps (white / dry / light) and is shown YOUR POUR TONIGHT: Canary White Wine, BY GLASS 0.00 or BY BOTTLE 0.00, plus an 'Other pours' alternative (Canary Red Wine, by glass 1.00). Adding by the glass puts exactly 0.00 in the cart. Re-taking the quiz and switching the SAME wine to BY BOTTLE REPLACES the glass line rather than adding a second - the cart settles at exactly one line, 0.00 (polled to 1, waited 750ms, re-read: still 1). Placing the order returns 201 and the wine moves into the 'Ordered' tab still reading 0.00 - the charged price equals the price the panel quoted. WHERE IT STOPS: The waiter app. Board step 9 ('serving_size === the pour selected, order + Bill') needs a staff view of the order, and the only staff-capable login in this container is the canary OWNER. On that attempt the waiter app never let it in - it stayed on the sign-in page with no error message. An earlier successful sign-in with the same account (recon, 22:08 UTC) shows why it would not have helped anyway: the board answers 'No tables assigned to you yet'. Either way table 9946's order and its pour are not visible to me. NOT PROVEN (never graded): Board step 1 (CANARY: fixture has priced glass+bottle servings) and step 10 (order line menu_id matches the pinned contract) are API contracts with no screen - not graded. Board step 9 (waiter/Bill serving_size) not reached - not graded. SURFACE DRIVEN: https://dcgmji73h6qel.cloudfront.net/menu?id=0c31c6ec-...&table=9946&layout=mosaic_v2 as an unauthenticated GUEST on iPhone 14 Pro/chromium; waiter.dev.qrate-ai.com as the canary OWNER account STATE LEFT BEHIND: TWO real orders left standing on Canary Mosaic V2 Sommelier - dev, both 1 x Canary White Wine By Bottle $40.00, neither paid and no payment control touched: table 9946 (the successful walk, server answered 201) and table 9942 (an earlier attempt of the same walk - its 'Ordered' ledger read 'Canary White Wine ORDERED $40.00', so the order went through even though my network listener missed the POST; that run then stopped on my own bad assertion). I cannot settle or close either - no staff account here is assigned to those tables. Also left: idle guest sessions on test tables 9938/9939/9941/9942/9944/9945/9946 across the lane's walks.

what I saw · trace.zip · patron video · waiter video · report

STR-1211

COwner-side

Needs the owner-role account. 37 journeys · 280 steps · 0 not yet driven

#JourneyStepsActorsCanary saysUAT verdictNoteTicket
W-003boost-special14OWPAPASSEDPartial green

An owner really can promote a dish, once you know the control lives on the dish's Menus tab. Whether promoting it changes anything a diner sees is still unproven — I would not touch a live fixture to find out.

  • Signed in as the owner and went looking for the switch that pushes a dish up the list.
  • Found it, but only in one place: open a dish, go to its Menus tab. There is a boost setting with four levels, from none up to high, and a chef's special switch beside it.
  • Nowhere else has it — not the dish's other four tabs, not the menu builder, not Personalize, not Insights. My first, shallower look only opened the dish's default tab and would have wrongly reported that no boost control exists at all.
  • Then sat down as a diner. This restaurant does show a hero carousel above every course — that is where a promoted dish would surface.
  • But nothing on the menu is marked as a chef's pick, a top pick or featured. The grid is flat, so a diner is never told why a dish is being shown to him.
  • I did not set or clear a boost. This restaurant runs this same journey every hour and changing it would wreck someone else's run.

Couldn’t check Whether turning the boost on makes the diner's menu change, and whether turning it off puts things back. The scoring half of this journey has no screen behind it at all.

Left behind Nothing changed — I only read the controls. An idle guest session is left on test table 9941.

the long version
PARTIAL GREEN - the owner control exists and is reachable, the scoring half is not walkable. An owner CAN promote a dish: open the dish, go to the MENUS tab, and there are placements-tab-boost-<menuId> offering None / Low / Moderate / High plus placements-tab-chefs-special-<menuId>. Nowhere else in the app - not on the other four dish tabs, not in the Menu builder, not Personalize, not Insights. NOT WALKED: setting or clearing a boost is a mutation on a live hourly canary fixture, so the 'diner sees boost_applied true then false' half is unproven, and steps 2-9 are pure scoring-API assertions with no screen. SELF-CORRECTION recorded by the lane: its first, shallower pass read only the dish's default tab and would have filed 'no boost control exists'. That would have been false. WHAT A PERSON CAN DO: An owner CAN promote a dish, and the controls are findable: Food Items -> open a dish -> the 'Menus' tab -> a placements panel carrying a BOOST control offering None / Low / Moderate / High (testid placements-tab-boost-<menuId>) and a CHEF'S SPECIAL control (placements-tab-chefs-special-<menuId>). They are on that tab only - the dish's other four tabs (Dish Properties, Modifiers, Pairings, Performance), the Menu builder, Personalize and Insights/recommendations mention boosting nowhere. On the diner side, Canary Kitchen - dev does render a hero carousel above every course (m2-hero with one m2-hero-slide), which is where a promoted dish would surface. WHERE IT STOPS: The promise that ties the two halves together. Board steps 11-14 are 'set the boost -> patron sees boost_applied=true -> clear it -> patron sees false'. Setting or clearing a boost mutates a live canary fixture that runs this journey hourly, so I did not, and the effect is therefore UNPROVEN rather than failed. Separately, no dish on the diner's menu carries any badge or wording (chef's pick / top pick / featured / recommended) telling a diner WHY it is being shown - the grid is flat. NOT PROVEN (never graded): Board steps 2-9 (POST /diner/top-picks, S1 baselines, Boost MAX +0.10, Boost STRONG +0.08, Boost Suppressed S1<0.20, Chef Pinned Pos1, Chef Pinned Pos3, Chef Dropped S1<0.25) are pure scoring assertions over an API with no screen behind them - not graded. Steps 11-14 (set/clear the boost and the patron reading it back) not exercised - not graded. SURFACE DRIVEN: owner.dev.qrate-ai.com as the canary OWNER on Desktop Chrome + the patron menu at dcgmji73h6qel.cloudfront.net/menu?id=99e9d621...&table=9941&layout=mosaic_v2 as a guest on iPhone 14 Pro/chromium STATE LEFT BEHIND: none - I read the controls and changed nothing. An idle guest session remains on test table 9941.

what I saw · trace.zip · owner video · patron video · report

STR-1211
W-005dedup-orphan7OWPAPASSEDDEFERRED D3

D3 WON'T MUTATE LIVE DATA
Walking it would mean creating, disabling or deleting menu items on a live restaurant.

None of the seven steps was graded, so whether a waiter's board correctly drops an abandoned table is unknown.

  • A waiter would need to open their table board and see one table occupied while a stale, abandoned one is gone.
  • Can't: the only staff-capable login in this container is the canary owner, and the waiter board tells it there are no tables assigned to it at all. Six of the seven steps are behind-the-scenes plumbing anyway — they mean planting a deliberately stale session on a live fixture that runs this same journey every hour.
  • Operator: someone has to assign tables to a staff login, and the stale setup would still have to be planted by someone willing to write to that fixture.

Couldn’t check All seven steps.

Left behind Nothing. I signed in and looked; I planted nothing and closed nothing.

the long version
DEFERRED D3, compounded by D4. There is no honest walk available: the journey is six parts websocket seeding I will not perform, and one part staff view I cannot reach with any credential this container holds. WHAT A PERSON CAN DO: Nothing of this journey. Six of its seven steps are owner/patron API and websocket work - draining sessions, opening a websocket and seeding a deliberately STALE, orphaned table session, then closing both. Seeding a fake stale session on a live canary fixture that runs this journey hourly is a mutation I will not make. WHERE IT STOPS: Step 5 - 'UI: Waiter Tables - B occupied, A absent' - is the only step with a screen, and it is blocked twice over. (a) The only staff-capable login in this container is the canary restaurants' OWNER; when it did sign in to the waiter app (recon, 22:08 UTC) the board read 'Canary Kitchen - dev / Server: Canary Owner / Active Orders | Tables | Wine / No tables assigned. No tables assigned to you yet' - so there is no table list to read at all. That is a config assignment only the operator can make (D4). (b) Even with tables assigned, the stale topology the step asserts would still have to be seeded (D3). NOT PROVEN (never graded): All seven steps - not graded. SURFACE DRIVEN: waiter.dev.qrate-ai.com/owner/staff-orders/ as the canary OWNER account on Desktop Chrome STATE LEFT BEHIND: none - I signed in and looked; I seeded nothing and closed nothing.

what I saw · trace.zip · waiter video · report

STR-1213
W-010food-tags-invariant9OWPAPASSEDPartial green

The rule holds and I watched it: an untagged dish reads as not-applicable and drops out when a diner asks for vegetarian, while the genuinely vegetarian dishes stay.

  • On the owner's side, a dish has a dietary panel with seven diet options and ten allergen options, all there to read and set.
  • Canary Grilled Chicken has no diet chosen, so it shows as not-applicable - which is exactly the rule this journey is about, visible on screen.
  • Then as a diner at table 9910 I opened Mains, asked for vegetarian and applied it: 3 dishes became 2.
  • The one that vanished was Canary Grilled Chicken, the untagged one. Canary Fries and Canary Margherita, both genuinely tagged vegetarian, stayed. Watched end to end.
  • I went back for the vegan version of the same test and could not get there: after applying vegetarian, the filter drawer would not reopen, even after 25 seconds. I saw that once, so I am not calling it a fault.
  • I also withdrew an earlier note of my own claiming Margherita had no tag - my detector was reading nothing at all, and the screenshots show it tagged. The product was right on all three dishes.

Couldn’t check The vegan half - whether a vegetarian-only dish also disappears for a vegan diner. The filter drawer would not reopen for me to change my mind. Also whether clearing every diet tag turns not-applicable back on by itself: I saw a dish already sitting in that state, I never watched it happen.

Left behind Nothing changed and nothing ordered - I opened three dish editors and never pressed Save, and never clicked a tag. Two guest table sessions left open, 9910 and 9911.

the long version
PARTIAL GREEN - the invariant itself is confirmed on screen, the vegan half is not. Canary Grilled Chicken carries no dietary pill and renders N/A outlined on the owner's own screen, and it is exactly the dish that vanishes when the diner says vegetarian (3 -> 2) while the two genuinely Vegetarian-tagged dishes stay. Step 7 (the same dish must also vanish for a VEGAN diner) was NOT reached: reopening the filter drawer a second time timed out. One observation is not a defect and it is not graded as one. NOTE - this row also carries a RETRACTION made inside the lane before it left the container: a draft finding said 'Canary Margherita has no dietary tag yet survives the vegetarian filter'. It was withdrawn. The selected-state detector read className:'' / aria-pressed:null on every pill and so returned nothing; the screenshots from that same step show Margherita tagged Vegetarian. The product was right on all three dishes. WHAT A PERSON CAN DO: The invariant is real and a person can see BOTH halves of it. In the owner's dish editor (Food Items -> click a dish -> DIETARY INFO) there are 7 dietary pills - Vegetarian, Vegan, Gluten-Free, Halal, Kosher, Jain, N/A - and 10 allergen pills, and an owner can read and set them. 'Canary Grilled Chicken' shows the invariant itself on screen: no dietary restriction is chosen and the N/A pill is outlined - exactly the journey's 'empty dietary -> na=true'. Then, as a diner at table 9910 on Mains, I opened the filter drawer, chose Vegetarian and applied it: 3 dishes became 2. The one that disappeared was Canary Grilled Chicken - the N/A one. The two that stayed, Canary Fries (Vegetarian+Vegan+Gluten-Free) and Canary Margherita (Vegetarian), are both really tagged vegetarian. That is steps 4 and 6 of this journey, watched end to end. WHERE IT STOPS: Step 7 (a vegetarian-only dish must vanish for a VEGAN diner). I went back for it on a second run: after applying the Vegetarian filter, tapping the dock's filter control a second time (m2-dock-filter) did not open the drawer within 25 seconds, so I never got to choose Vegan. ONE observation, not repeated - I am NOT calling that a defect, but 'can a diner change their mind about a dietary filter without reloading?' is a question worth someone driving properly. Steps 2, 5, 8 and 9 (create the probe, PUT dietary=[vegetarian], PUT dietary=[], delete it) are writes to a live canary fixture and I did not make them. NOT PROVEN (never graded): Steps 1,2,3,5,7,8,9. Step 7 specifically: Canary Margherita is the ideal subject (Vegetarian yes, Vegan no, per owner/04) and it remains unchecked. The AUTO-CORRECT half of step 8 - that clearing every dietary pill turns N/A back on by itself - is unproven: I saw a dish already in that state (Canary Grilled Chicken), I never watched the transition. SURFACE DRIVEN: OWNER https://owner.dev.qrate-ai.com/owner/food-items/?restaurantId=28ae37ab-... as canaryOwner (Desktop Chrome) + PATRON https://dcgmji73h6qel.cloudfront.net/menu?id=28ae37ab-...&table=9910&layout=mosaic_v2 as a guest (iPhone 14 Pro geometry on chromium) STATE LEFT BEHIND: none - read only. Three dish editors were opened and closed; Save Changes was never pressed and no pill was clicked. Two guest table sessions opened (9910, 9911); nothing ordered.

what I saw · trace.zip · owner video · patron video · owner video · patron video · report

STR-1208
W-025modifier-link7CAOWPAPASSEDDEFERRED D3

D3 WON'T MUTATE LIVE DATA
Walking it would mean creating, disabling or deleting menu items on a live restaurant.

None of the seven steps was graded, so whether attaching a modifier actually reaches the diner is unknown — no dish on any lasting menu carries one with anything in it.

  • An owner would need to attach an add-on group to a dish, take an option off it and detach it again — and a diner would need to see those changes land on the menu.
  • Can't: every owner step here is a change to a shared restaurant that runs this journey live, and editing it mid-cycle would hand the builder a false red. Separately, on five of the six canary restaurants I own the owner's food-items screen does not load at all, so an owner there cannot reach the screen by any route.
  • Operator: a fixture that is safe to write to, plus a fix for the food-items screen that refuses to load.

Couldn’t check All seven steps. I did establish that the owner control exists and is reachable on one restaurant; nothing beyond that.

Left behind Nothing. Read only — I opened tabs and read controls; I saved nothing and linked nothing.

the long version
DEFERRED D3 - but the screen was found and read, which is worth recording. On Canary Mosaic V2 Dining an owner really can reach it: Food Items, dish, MODIFIERS tab, with Add-new, an Optional / choose-one rule, Add-member, Rename and a per-grouping Pricing switch. So the capability has a real human surface. What stops the walk is that exercising it means writing to a live fixture, and on the five restaurants this journey's siblings use, the screen 403s (STR-1207). WHAT A PERSON CAN DO: On Canary Mosaic V2 Dining an owner really can reach the screen this journey is about. Food Items -> click a dish -> the editor opens with tabs Dish Properties / Menus (1) / Modifiers / Pairings / Performance, and the Modifiers tab carries 'Add new', a rule dropdown (Optional / choose-one), 'Add member', 'Rename' and a per-grouping Pricing switch. Canary Caesar Salad already carries one grouping there, reading '# Add-ons - DEFAULT - Optional - Pricing on - No members yet'. WHERE IT STOPS: Two places. (1) Every OWNER step in this journey (2, 4, 6) is a WRITE to a shared canary fixture - link a modifier, unlink an option, unlink the modifier. I will not mutate a live canary fixture mid-cycle; doing so hands the builder a false red. That is what makes this D3 and not a walk. (2) Independently: on FIVE of the six canary restaurants I own, the owner Food Items screen does not load at all - see the separate defect below. An owner on any of those cannot reach step 2's screen by any route. NOT PROVEN (never graded): All 7 steps. I proved the owner CONTROL exists and is reachable on one restaurant; I proved nothing about whether linking a modifier actually reaches the diner, because no dish on any persistent menu carries a modifier with members. The one grouping that does exist has no members, so the diner correctly sees nothing - that is consistent, not a defect. SURFACE DRIVEN: https://owner.dev.qrate-ai.com/owner/food-items/ as canaryOwner (Desktop Chrome) + https://dcgmji73h6qel.cloudfront.net/menu?id=f469b191-...&table=9945 as a guest diner (iPhone 14 Pro descriptor on chromium) STATE LEFT BEHIND: none - read only. I opened tabs and read controls; I saved nothing and linked nothing.

what I saw · trace.zip · diner video · owner video · report

STR-1207
W-026mosaic-v2-edit7OWPAPASSEDPartial green

Change the quantity of a dish you already ordered and it edits the line instead of adding a second one. Watched end to end, and it is what proves the separate tile-door fault really is the tile's.

  • Opened Canary Caesar Salad from its tile, stepped the quantity from 1 to 2 - the button re-priced itself to $17.98 - and added it. My order took ONE line: 2 salads, $17.98.
  • Tapped that line in my order. The same dish reopened already showing 2.
  • Pressed add without changing anything. My order stayed exactly as it was - one line, $17.98. So the sheet you reach from your order really is an editor, not a second add.
  • That is why this row matters: it is the control that proves the edit door itself is correct, and it is cited as the falsification in STR-1212.
  • I did not do the setup and teardown steps - making a dish on a live restaurant mid-run would hand the builder a false red.

Couldn’t check The signed-in diner path - I walked it as a guest. And the journey's own setup and teardown steps, which I deliberately did not run on a live restaurant.

Left behind Nothing - I emptied every basket I built and checked tables 9932, 9926 and 9931 were left empty. No order was ever sent to a kitchen. Note for the operator: table 9926 already had two other real diners on it when I arrived; I left their items alone.

the long version
PARTIAL GREEN - all four diner steps held and were watched. Quantity 1 to 2 produced ONE cart line at $17.98; tapping that line reopened the dish PRE-FILLED at 2 offering 'Add to order ($17.98)'; confirming it unchanged left the order exactly as it was, still one line, still $17.98. That last part matters: it is the CONTROL that proves the edit door itself is correct, which is what makes the separate tile-door defect attributable. NOT WALKED: steps 1, 2 and 7 are owner provisioning and teardown. Step 3 was walked as a guest, not signed in. WHAT A PERSON CAN DO: Everything the four diner-facing steps promise. Opened Canary Caesar Salad from its m2-tile, stepped the quantity 1->2 (the button relabelled itself 'Add to order ($17.98)'), added it: my order took ONE line, 2 salads, TOTAL $17.98. Tapping that line in my order reopened the same dish already showing 2 and offering 'Add to order ($17.98)' - the pre-fill step 5 promises. Pressing it unchanged left the order at one line / $17.98, so the sheet reached from my order really is an editor and not a second add. WHERE IT STOPS: nowhere - walked end to end NOT PROVEN (never graded): Steps 1, 2 and 7 (OWNER auth, Create Plain Canary Dish, Teardown) - the canary's own provisioning. I created nothing; making a dish on a live fixture mid-run would hand the builder a false red. Step 3 says 'Patron Auth + Profile' and I walked it as a GUEST, so the signed-in diner path is unproven. SURFACE DRIVEN: https://dcgmji73h6qel.cloudfront.net/menu?id=f469b191-ec79-585d-916a-e6c497617eb8&table=9932&layout=mosaic_v2 - guest diner, iPhone 14 Pro descriptor on the chromium engine (NOT real iOS WebKit) STATE LEFT BEHIND: Emptied every unplaced order I created: tables 9932, 9926 and 9931 all left empty (verified - no m2-dec- control remains on the tile). No order was ever sent to the kitchen. NOTE for the operator: table 9926 on this restaurant already had OTHER patrons in a live session (scope tabs read 'Charizard' and 'Ray Arnold') before I arrived - not mine, and I left their items alone. THIS ROW IS THE CONTROL FOR STR-1212. Its step 5-6 walk - open the dish from the ORDER LINE at 2, press 'Add to order ($17.98)' unchanged, order stays at 2 salads / $17.98 - is what establishes that the EDIT DOOR is correct. Without it, the tile-door doubling could have been blamed on the sheet in general. It is cited in that ticket as the falsification.

what I saw · trace.zip · diner video · report

STR-1212
W-027mosaic_v2-boost-special6OWPAPASSEDDEFERRED D3

D3 WON'T MUTATE LIVE DATA
Walking it would mean creating, disabling or deleting menu items on a live restaurant.

Whether a boosted dish or a chef's special actually stands out to a diner stays unknown — and the banner that would show it only exists for a few minutes at a time.

  • A diner would need to see a boosted dish and a chef's special standing out on the menu.
  • Five of the six steps are the test creating those dishes and menus itself, on a live restaurant that runs this every hour — doing it myself would wreck someone else's run. And the banner only exists for the few minutes the test holds it open: I saw one at 22:39 and none at 23:16, arriving in exactly the same way.
  • Needs the operator, or a restaurant that isn't live, before anyone can watch it happen.

Couldn’t check Every step of it. Anyone looking a few minutes after the test would see nothing and wrongly conclude the feature is missing.

Left behind Nothing changed and nothing ordered. An idle guest session is left on test table 9945.

the long version
DEFERRED D3 - with one observation worth more than the grade. Canary Mosaic - dev is a flat grid: every tile measured 185x185, no badge, no promoted wording, no hero. But the hero surface IS real and it is TRANSIENT - Canary Kitchen - dev rendered m2-hero plus one m2-hero-slide at 22:39 UTC and NO hero at all at 23:16, arrived at exactly the same way. That matches this journey's own set-then-clear shape, and it means a person can only ever see this journey's result inside the window the canary holds the boost open. A human verifier who looks a few minutes late sees a flat grid and concludes nothing is there. WHAT A PERSON CAN DO: Sit down and read the menu. On Canary Mosaic - dev every course renders a flat grid of identically sized tiles (all 185x185 px, measured): 9 drinks, 2 starters, 3 mains, 1 dessert. No dish carries a badge, wording or larger tile marking it boosted, a chef's special, featured or a top pick, and no dish is NAMED for either. So on this restaurant 'Both On Hero' has no counterpart a diner can see. WHERE IT STOPS: Five of the six steps are the canary creating a boosted dish and a chef special over the API, attaching them to a menu and setting the flags. Recreating that means minting menu objects on a live canary fixture that runs this journey hourly - a mutation I will not make. Without it the sixth step has nothing to show. NOT PROVEN (never graded): Steps 1-5 (all OWNER API provisioning) and step 6 (Both On Hero) - not graded. SURFACE DRIVEN: dcgmji73h6qel.cloudfront.net/menu?id=28ae37ab...&table=9945&layout=mosaic_v2 as a guest on iPhone 14 Pro/chromium STATE LEFT BEHIND: none - I changed nothing and ordered nothing. An idle guest session remains on test table 9945.

what I saw · trace.zip · patron video · report

STR-1213
W-028mosaic_v2-byo-bypass11OWPAPASSEDDEFERRED D2

D2 BLOCKED ON PROVISIONING
The fixture serves a menu but has no owner row - the canary-bootstrap Lambda deletes its owner assignment on every run. Needs a DB insert or a core change. Blocked, not failed.

All eleven steps stay unknown, because there is no build-your-own dish for a diner to open.

  • A person would need to open a build-your-own main and switch between its vegan and meat options.
  • They can't here: no build-your-own dish exists on any of the five test restaurants once the automated run has finished with them — I opened every dish on all five and each one offers only a photo, a price, a note box, a quantity and an add button. The owner's build-your-own switch does exist, but flipping it on a live restaurant isn't mine to do.
  • Unblocking needs someone who can leave a build-your-own dish standing on a test restaurant between runs.

Couldn’t check Every step — the first six have no screen at all, and the last four need a dish that isn't there.

Left behind Nothing — read only.

the long version
DEFERRED D2. The owner-side byo-toggle exists on the dish editor and was READ, not flipped. But the diner half cannot start: no BYO dish exists on any fixture between canary runs. WHAT A PERSON CAN DO: The build-your-own capability does have an owner screen: the dish editor carries a `byo-toggle` (I read it, did not flip it), and the Modifiers tab has the choose-one rule and Add-member controls the journey's steps 4-5 describe. WHERE IT STOPS: There is no build-your-own dish for a diner to open. Steps 8-11 are all PATRON steps against a BYO main with vegan/meat members, and no such dish exists on any of the five fixtures once the canary's run is over. Steps 1-6 are the canary's own API provisioning plus a deliberate 400 assertion, which has no screen. NOT PROVEN (never graded): Every step. Recon, done first and recorded in three read-only walks: I toured every course on five candidate canary fixtures (Spice Mod, Includes, Groupings, Grouping Dietary, Mosaic V2 Dining) and opened every dish on every one of them. The persistent menu is identical on all five: 1 drink (9 on Dining), Canary Caesar Salad, Canary Fries, Canary Grilled Chicken, Canary Margherita, Canary Tiramisu - every one of them described 'DO NOT MODIFY', and every one opening to the same fifteen controls: hero photo, price, an 'Anything else?' note box, a quantity stepper and Add to order. Nothing else. No spice picker, no modifier group, no sides section, no build-your-own, no variant switcher, on any dish, on any fixture. SURFACE DRIVEN: https://dcgmji73h6qel.cloudfront.net/menu?id=<each fixture>&table=9944 as a guest diner (iPhone 14 Pro descriptor on chromium) + https://owner.dev.qrate-ai.com/owner/food-items/ as canaryOwner (Desktop Chrome) STATE LEFT BEHIND: none - read only. No dish opened was ever added to a cart in these recon walks.

what I saw · trace.zip · diner-Canary-Grouping-Dietary video · diner-Canary-Groupings video · diner-Canary-Includes video · diner-Canary-Mosaic-V2-Dining video · diner-Canary-Spice-Mod video · diner video · owner video · diner-Canary-Grouping-Dietary video · diner-Canary-Groupings video · diner-Canary-Includes video · diner-Canary-Mosaic-V2-Dining video · diner-Canary-Mosaic video · diner-Canary-Spice-Mod video · owner video · report

STR-1207
W-029mosaic_v2-byo-dietary-allergen8OWPAPASSEDDEFERRED D2

D2 BLOCKED ON PROVISIONING
The fixture serves a menu but has no owner row - the canary-bootstrap Lambda deletes its owner assignment on every run. Needs a DB insert or a core change. Blocked, not failed.

None of the eight steps was graded, so whether diet and allergen filters correctly hide parts of a build-your-own dish is unknown.

  • A diner would need a build-your-own main carrying three parts, one of them meat and one carrying an allergen, so the diet and allergen filters have something to hide.
  • Can't: no such dish exists. I toured every course on five candidate restaurants and opened every dish on all of them — the menu is the same six dishes every time, and every one opens to the same plain controls. No build-your-own, no add-on group, no sides, no variants, anywhere.
  • Operator or builder: a fixture with a real build-your-own dish on it.

Couldn’t check Every step. The owner-side switch and the full set of diet and allergen tags are all present and were read; only the diner half has no subject.

Left behind Nothing. Read only — no dish I opened was ever added to a cart.

the long version
DEFERRED D2. The owner-side byo-toggle and the full dietary/allergen pill set are both present and were read. The diner half has no subject. WHAT A PERSON CAN DO: Same as W-028 on the owner side - `byo-toggle` plus dietary and allergen pills (vegetarian, vegan, gluten-free, halal, kosher; dairy, eggs, fish, shellfish, tree nuts, peanuts, wheat, soy, sesame) are all on the dish editor and reachable. WHERE IT STOPS: Steps 5-8 need a BYO main carrying three members, one non-veg and one allergen-bearing, for the dietary and allergen filters to hide. No BYO dish and no member exists to filter. NOT PROVEN (never graded): Every step. Recon, done first and recorded in three read-only walks: I toured every course on five candidate canary fixtures (Spice Mod, Includes, Groupings, Grouping Dietary, Mosaic V2 Dining) and opened every dish on every one of them. The persistent menu is identical on all five: 1 drink (9 on Dining), Canary Caesar Salad, Canary Fries, Canary Grilled Chicken, Canary Margherita, Canary Tiramisu - every one of them described 'DO NOT MODIFY', and every one opening to the same fifteen controls: hero photo, price, an 'Anything else?' note box, a quantity stepper and Add to order. Nothing else. No spice picker, no modifier group, no sides section, no build-your-own, no variant switcher, on any dish, on any fixture. SURFACE DRIVEN: https://dcgmji73h6qel.cloudfront.net/menu?id=<each fixture>&table=9944 as a guest diner (iPhone 14 Pro descriptor on chromium) + https://owner.dev.qrate-ai.com/owner/food-items/ as canaryOwner (Desktop Chrome) STATE LEFT BEHIND: none - read only. No dish opened was ever added to a cart in these recon walks.

what I saw · trace.zip · diner-Canary-Grouping-Dietary video · diner-Canary-Groupings video · diner-Canary-Includes video · diner-Canary-Mosaic-V2-Dining video · diner-Canary-Spice-Mod video · diner video · owner video · diner-Canary-Grouping-Dietary video · diner-Canary-Groupings video · diner-Canary-Includes video · diner-Canary-Mosaic-V2-Dining video · diner-Canary-Mosaic video · diner-Canary-Spice-Mod video · owner video · report

STR-1207
W-038mosaic_v2-custom-dietary2OWPAPASSEDDEFERRED D3

D3 WON'T MUTATE LIVE DATA
Walking it would mean creating, disabling or deleting menu items on a live restaurant.

Chip never renders in the stable state; proving it works needs an owner mutation I will not make on a canary fixture.

The Jain option exists for about five seconds a run and is invisible the rest of the time, so nobody can ever see it working. The filtering itself does work on the tags that stay put.

  • Opened the diner's filter drawer on all four courses looking for a Jain option. It is not there - not on any course.
  • The owner's side agrees: that custom tag is listed against zero dishes.
  • That is because the test creates a Jain dish, checks it, and deletes it again inside about five seconds. The green is true, but only inside a window no person could ever be standing in.
  • I am not calling that a lie - make it, check it, clean it up is a fair way to test. But nothing lasting shows that a custom diet tag ever reaches a diner.
  • Worth knowing: this journey shares one restaurant with two others rather than having its own, and that restaurant churns while other journeys are counting dishes on it.

Couldn’t check Whether a custom diet tag actually reaches a diner. Seeing it at rest would mean creating such a dish myself on a live restaurant mid-run, which would hand the builder a false red.

the long version
All three of these journeys run against ONE shared restaurant - Canary Mosaic 28ae37ab - not their own fixtures. The board shows m2cd-02-jain-chip-filters PASSING. Driving the product: I opened the filter drawer on ALL FOUR courses and there is NO Jain option anywhere - not by testid, not by label. Owner side corroborates: the Dietary tab row for the custom tag reads 'jain | Custom | 0' - zero items carry it. The canary creates a tagged dish, asserts, and tears down inside about 5 seconds (m2cd) / 3 seconds (m2lf). So the green is true only inside a window no person can reach. I am NOT calling this a false green: provision-assert-teardown is legitimate test design. The finding is that no DURABLE evidence exists that a custom dietary tag reaches a diner, and that the shared fixture churns while other journeys assert counts against it.

what I saw · trace.zip · patron video · report

STR-1200
W-039mosaic_v2-dietary-carousel7OWPAPASSEDDEFERRED D3

D3 WON'T MUTATE LIVE DATA
Walking it would mean creating, disabling or deleting menu items on a live restaurant.

Walked the equivalent assertions on durable dishes; the journey's own probe dishes live ~24s and were not walked.

The dietary filter really does work on the dishes that are always there. But it is a browse filter, not a safety one — dishes with no allergen data recorded slip straight through it.

  • Opened the Mains course as a diner: 3 dishes.
  • Tapped the vegan filter — down to 1 dish, and it was exactly Canary Fries. Tapped 'avoiding dairy' — 2 dishes. The filter genuinely filters.
  • The dishes this journey creates for itself only exist for about 24 seconds before they are deleted again, so what it asserts is never visible to a person.
  • Worth knowing: this is a browse filter, not a safety one. A dish with no allergen information recorded is kept by 'avoiding dairy', not hidden.

Couldn’t check The chip this journey is really about. It only appears once a matching dish exists, and the test creates that dish for a few seconds per run. Making one myself on a live restaurant mid-run would hand the builder a false red — and I no longer hold the owner login that would let me set it up.

the long version
All three of these journeys run against ONE shared restaurant - Canary Mosaic 28ae37ab - not their own fixtures. WALKED the filter path on the dishes that are always there: Mains baseline 'Show 3 dishes' -> vegan 'Show 1 dish' -> exactly Canary Fries; Mains -> avoiding dairy 'Show 2 dishes'. The filter genuinely filters. Two things a reader should carry: (1) the journey's own probe dishes (Canary M2DC <Course>-{conflict,na,vegan} + an M2DC Menu) exist for roughly 24 seconds before teardown, so what it asserts is never visible to a person; (2) this is a BROWSE filter, not a safety one - a dish with no allergen data recorded is KEPT by 'avoiding dairy', not hidden.

what I saw · trace.zip · patron video · report

STR-1200
W-040mosaic_v2-dietary-safety5OWPAPASSEDPartial green

WALKED on Anant instead of the canary fixture. The fixture has no owner row, but that never made the BEHAVIOUR unwalkable - demo@ owns Anant, which has 32 real dishes.

A diner can say 'no gluten' and the menu really does narrow. But gluten is the only thing this restaurant lets them say — there is no way to tell it about nuts, dairy or anything else.

  • Signed in as the owner of Anant and looked at what the restaurant says about its own dishes: 25 items, and the word 'allergen' appears exactly once on the whole screen.
  • Sat down as a guest at table 10 and opened the dietary filter.
  • It offers one choice: Gluten-Free. Nothing about nuts, dairy, shellfish, vegetarian or vegan.
  • Chose Gluten-Free. The menu went from 32 dishes to 15 — so the choice really is applied, not just accepted and ignored.
  • Changed nothing on the way through: I read the tags the restaurant already had.

Couldn’t check Whether the 15 dishes left are actually gluten-free, or whether the 17 that vanished were removed for containing gluten or just for having no tag at all. From the diner's side those look identical, and only one of them is safe.

Left behind Nothing. I only read; I changed no dish, tag or menu.

the long version
Not walked. Of 5 steps, 3 are OWNER/CANARY provisioning (create the dish, set the tag, publish the menu) and only 2 are patron-observable - and the patron half asserts the owner half's effect, so it cannot be checked without it. I drove this journey's fixture as a guest and captured the live state instead. What that established: The filter drawer exposes exactly ONE dietary chip (m2-dietary-gluten-free) plus served-alcoholic / served-nonAlcoholic, and an apply button reading 'Show 9 dishes'. RE-WALKED 2026-09-05 on Anant (097c229c) with the demo owner account and a real guest at table 10, video + trace, NO data changed. Owner sidebar: Home/Food Items/Menu/Tables-Staff/Personalize/Insights/Payments. 25 food-item rows; the owner's food-items screen shows dietary wording exactly once ('allergen'). The diner's filter drawer offers exactly ONE dietary choice, Gluten-Free. Applying it took the menu from 32 dishes to 15 - the control moves the number, so the filter is genuinely applied. What is still unproven: whether those 15 are actually safe, and whether the 17 removed were removed for containing gluten or merely for being untagged.

what I saw · trace.zip · owner video · patron video

STR-1214
W-042mosaic_v2-drink-subcat6OWPAPASSEDPartial green

Drink sub-categories genuinely work, just not on the restaurant this journey is about - there it is one drink and no rail, and the owner is locked out of their own menu entirely.

  • On a control restaurant I watched drink sub-categories work properly: a jump rail over 9 drinks, and real dividers with headings and dish counts.
  • On this journey's own restaurant there is nothing to group: Beverages is one ungrouped list holding exactly one drink, with no rail at all.
  • So I went to the owner's side to look at the menu - and the owner cannot even open it. The page refuses to load their menu, and its retry button can never work.
  • The food library is worse: one red line saying it could not fetch the dishes. No Add Dish button, no list, nothing. An owner cannot create the drinks, attach them to a menu, or file a sub-category.
  • The board is green because this journey sets itself up behind the scenes - which is exactly the gap.

Couldn’t check This journey's own structure - the two drinks and two sub-categories it is really about. I saw the rail work on a different restaurant; I never saw this one's.

Left behind Nothing - read only. Nothing was created, changed or deleted. Two guest table sessions opened, 9941 and 9942, and nothing ordered.

the long version
PARTIAL GREEN - the capability is real, this fixture cannot show it, and the owner is locked out. The drink sub-category rail was watched working on a control restaurant: 'BEVERAGES 1 / MORE 8' with jump pills over 9 drinks. On this journey's OWN restaurant, Beverages is a single ungrouped list of exactly one drink and there is no rail at all - so the state the journey asserts is not present for a diner to see. The owner cannot fix that or even look: /owner/menu/ and /owner/food-items/ for this restaurant both return 403 on the wire and render as 'Failed to load menu - please try again' with a Retry that can never succeed (STR-1207). The board is green because this journey provisions by API, which is precisely the gap. WHAT A PERSON CAN DO: A diner CAN see drink sub-categories where they exist: on Canary Mosaic (control, table 9942) the Drinks course renders a sub-category rail - m2-subcat-nav reading 'BEVERAGES 1 / MORE 8' with two jump pills - over 9 drinks, and the mosaic draws real dividers with headings and counts ('Sides - 1 dish', 'More - 2 dishes' on the food course). So the diner-facing half of this promise is real and I watched it. WHERE IT STOPS: Two places. (1) On the journey's OWN restaurant, Beverages is a single ungrouped list of exactly one drink (Canary Iced Tea) with NO sub-category rail at all - the two drinks and two sub-categories this journey is about are simply not on the menu when a person looks. (2) The owner half is not merely 'API-only', it is IMPOSSIBLE from the owner app: https://owner.dev.qrate-ai.com/owner/menu/?restaurantId=d4d9a4b3-... renders 'Failed to load menu - please try again' and Retry changes nothing, and /owner/food-items/ for the same restaurant is one red line, 'Failed to fetch menu-item summaries for d4d9a4b3-3c76-5cac-b070-52e77fbba79e' - no Add Dish button, no list, nothing. An owner cannot create the drinks, cannot attach them to a menu and cannot file a sub-category. NOT PROVEN (never graded): Steps 4-6 as this journey means them - 'Await Structure', 'Open Beverages + Scope Menu', 'Sub-cat Dividers + Nav' against the journey's OWN two provisioned sub-categories. I saw the rail render on a different restaurant; I never saw this journey's own structure. SURFACE DRIVEN: PATRON https://dcgmji73h6qel.cloudfront.net/menu?id=d4d9a4b3-...&table=9941&layout=mosaic_v2 as a guest (iPhone 14 Pro geometry on chromium) + control id=28ae37ab-... table 9942; OWNER https://owner.dev.qrate-ai.com/owner/menu/ and /owner/food-items/ for the same restaurant as canaryOwner (Desktop Chrome) STATE LEFT BEHIND: none - read only. No item, menu or sub-category was created, changed or deleted. Two table sessions were opened as a guest (9941, 9942) and nothing was ordered.

what I saw · trace.zip · owner video · patron video · owner video · report

STR-1207
W-045mosaic_v2-food-subcat6OWPAPASSEDPartial green

The diner really does get a sub-category strip on the menu, but the owner screens meant to create those sub-categories don't load — so I can say the strip exists and nothing more.

  • Sat at table 9945 as a diner and swiped across to the mains.
  • The course is not one flat list: there is a strip along the top with two tappable jump buttons, and the menu below is split into named sections with counts — one dish under sides, two under the rest. The comparison restaurant looks the same.
  • The owner half is unreachable. The menu page for this restaurant fails to load and its retry button changes nothing; the food-items page is a single red error line.
  • So the first three steps — create two dishes, attach them to a menu, file them under two sub-categories — cannot be done by a person on this restaurant at all.

Couldn’t check That the sections I saw ARE this journey's own two sub-categories. What shows at rest is the course's ordinary grouping; the journey's own sub-categories are not there between runs, and I could not create them because the owner screens error out.

Left behind Nothing changed. Two guest table sessions opened, on 9945 and 9946; nothing ordered.

the long version
PARTIAL GREEN - the diner half was watched on the journey's OWN restaurant: a real sub-category rail reading 'SIDES 1 / MORE 2' with dividers and counts. What is NOT proven is that those dividers are the sub-categories this journey files, because the owner half cannot be reached at all: /owner/menu/ and /owner/food-items/ return 403 and render as a retryable red line (STR-1207). Without the owner screen I cannot tie the rail to the journey's own provisioning, so I claim the rail exists and nothing more. WHAT A PERSON CAN DO: The diner half is real and I watched it on the journey's OWN restaurant. Sitting at table 9945 and swiping to Mains, the course is not one flat list: there is a sub-category rail at the top reading 'SIDES 1 MORE 2' with two tappable jump pills (m2-subcat-nav, m2-subcat-jump-Sides, m2-subcat-jump-more), and the menu below is split by real dividers with headings and counts - 'Sides / 1 dish' over Canary Fries, then 'More / 2 dishes' over the entrees. The control restaurant renders the same way. WHERE IT STOPS: The owner half. https://owner.dev.qrate-ai.com/owner/menu/?restaurantId=1953946f-... renders 'Failed to load menu - please try again' and Retry changes nothing; /owner/food-items/ for the same restaurant is a single red line, 'Failed to fetch menu-item summaries for 1953946f-3a27-5415-8249-a64a19bf5ae4'. So steps 1-3 (create two dishes, attach them to a menu, file two sub-categories) cannot be done by a person at all on this restaurant. NOT PROVEN (never graded): That the dividers I saw ARE the journey's own two sub-categories. What renders at rest is the course's baseline grouping (Sides vs More). The journey's provisioned sub-categories are not present between runs, and I could not create them because the owner screens error out. SURFACE DRIVEN: PATRON https://dcgmji73h6qel.cloudfront.net/menu?id=1953946f-...&table=9945&layout=mosaic_v2 as a guest (iPhone 14 Pro geometry on chromium) + control id=28ae37ab-... table 9946; OWNER https://owner.dev.qrate-ai.com/owner/menu/ + /owner/food-items/ for the same restaurant as canaryOwner (Desktop Chrome) STATE LEFT BEHIND: none - read only. Two guest table sessions opened (9945, 9946); nothing ordered, nothing changed.

what I saw · trace.zip · owner video · patron video · report

STR-1207
W-046mosaic_v2-grouping-dietary11OWPAPASSEDDEFERRED D2

D2 BLOCKED ON PROVISIONING
The fixture serves a menu but has no owner row - the canary-bootstrap Lambda deletes its owner assignment on every run. Needs a DB insert or a core change. Blocked, not failed.

BEING WALKED NOW on Farm + Oak, because our owner login cannot reach the Canary restaurants. This proves the FEATURE works for a real owner - it does NOT verify the canary's own fixture.

Nothing about grouping dishes by diet is known here, because the restaurant it uses has no owner to set it up as.

  • A person would need to sign in as this restaurant's owner and create the dish, tag it and publish the menu - six of the eleven steps - because the five diner steps only check the effect of those.
  • They can't: this restaurant has no owner at all. The setup that rebuilds it deletes its owner on every run, so there is nobody to sign in as.
  • Unblocking it needs the operator to give the restaurant an owner back - a database or code change, not something I can do.

Couldn’t check All eleven steps.

the long version
Not walked. Of 11 steps, 6 are OWNER/CANARY provisioning (create the dish, set the tag, publish the menu) and only 5 are patron-observable - and the patron half asserts the owner half's effect, so it cannot be checked without it. I drove this journey's fixture as a guest and captured the live state instead. What that established: The filter drawer exposes exactly ONE dietary chip (m2-dietary-gluten-free) plus served-alcoholic / served-nonAlcoholic, and an apply button reading 'Show 9 dishes'. The dish composition sheet opens for real (m2-composition, m2-dish-hero, m2-dish-price, m2-comp-stepper, composition-add). On a plain side it renders no modifier, spice or includes UI.
W-047mosaic_v2-groupings10OWPAPASSEDDEFERRED D2

D2 BLOCKED ON PROVISIONING
The fixture serves a menu but has no owner row - the canary-bootstrap Lambda deletes its owner assignment on every run. Needs a DB insert or a core change. Blocked, not failed.

BEING WALKED NOW on Farm + Oak, because our owner login cannot reach the Canary restaurants. This proves the FEATURE works for a real owner - it does NOT verify the canary's own fixture.

Everything this journey promises stays unknown, because the restaurant has no owner to set any of it up.

  • A diner would need to see the effect of an owner creating a dish, tagging it and publishing it.
  • The owner half can't be done: this restaurant has no owner attached to it at all, because the journey's own setup deletes the owner assignment every time it runs. The diner half only checks the owner half's effect, so without it there is nothing to look at.
  • Needs the operator — a database change, or a backend fix so the setup stops wiping the owner.

Couldn’t check All ten steps. Blocked, not failed.

the long version
Not walked. Of 10 steps, 5 are OWNER/CANARY provisioning (create the dish, set the tag, publish the menu) and only 5 are patron-observable - and the patron half asserts the owner half's effect, so it cannot be checked without it. I drove this journey's fixture as a guest and captured the live state instead. What that established: The dish composition sheet opens for real (m2-composition, m2-dish-hero, m2-dish-price, m2-comp-stepper, composition-add). On a plain side it renders no modifier, spice or includes UI.
W-048mosaic_v2-includes10OWPAPASSEDDEFERRED D2

D2 BLOCKED ON PROVISIONING
The fixture serves a menu but has no owner row - the canary-bootstrap Lambda deletes its owner assignment on every run. Needs a DB insert or a core change. Blocked, not failed.

BEING WALKED NOW on Farm + Oak, because our owner login cannot reach the Canary restaurants. This proves the FEATURE works for a real owner - it does NOT verify the canary's own fixture.

All ten steps stay unknown — nothing about what a dish includes has been seen from a diner's side.

  • A person would need an owner to set up a dish with included items, then see those on a diner's phone.
  • They can't here: five of the ten steps are that owner setup and there is no owner login for this restaurant — the setup job strips the owner off it on every run. The diner half only tests the owner half's effect.
  • Unblocking needs the operator: an owner account for this restaurant, or database access to attach one.

Couldn’t check All ten steps.

the long version
Not walked. Of 10 steps, 5 are OWNER/CANARY provisioning (create the dish, set the tag, publish the menu) and only 5 are patron-observable - and the patron half asserts the owner half's effect, so it cannot be checked without it. I drove this journey's fixture as a guest and captured the live state instead. What that established: The dish composition sheet opens for real (m2-composition, m2-dish-hero, m2-dish-price, m2-comp-stepper, composition-add). On a plain side it renders no modifier, spice or includes UI.
W-050mosaic_v2-lifestyle-filter4OWPAPASSEDDEFERRED D3

D3 WON'T MUTATE LIVE DATA
Walking it would mean creating, disabling or deleting menu items on a live restaurant.

Chip never renders in the stable state; proving it works needs an owner mutation I will not make on a canary fixture.

The lifestyle tag exists for about three seconds a run and is invisible the rest of the time, so nobody can see it working. Filtering itself does work on the tags that stay put.

  • Opened the diner's filter drawer on all four courses looking for a Jain option. It is not there - not on any course.
  • The owner's side agrees: that custom tag is listed against zero dishes.
  • The reason is that the test creates a tagged dish, checks that the tiles filter down, and deletes it again inside about three seconds.
  • So the green is honest about what it tested, but it happens in a window no person can reach, and nothing lasting proves a lifestyle tag ever reaches a diner.
  • This journey shares one restaurant with two others rather than having its own, and that restaurant churns while other journeys are counting dishes on it.

Couldn’t check Whether a custom lifestyle tag actually reaches a diner. Seeing it at rest would mean creating such a dish myself on a live restaurant mid-run, which would hand the builder a false red.

the long version
All three of these journeys run against ONE shared restaurant - Canary Mosaic 28ae37ab - not their own fixtures. The board shows m2lf-04-tiles-filtered PASSING. Driving the product: I opened the filter drawer on ALL FOUR courses and there is NO Jain option anywhere - not by testid, not by label. Owner side corroborates: the Dietary tab row for the custom tag reads 'jain | Custom | 0' - zero items carry it. The canary creates a tagged dish, asserts, and tears down inside about 5 seconds (m2cd) / 3 seconds (m2lf). So the green is true only inside a window no person can reach. I am NOT calling this a false green: provision-assert-teardown is legitimate test design. The finding is that no DURABLE evidence exists that a custom dietary tag reaches a diner, and that the shared fixture churns while other journeys assert counts against it.

what I saw · trace.zip · patron video · report

STR-1200
W-051mosaic_v2-menu-parity6OWPAPASSEDPartial green

Add-ons stay add-ons — none of the 6 leaked onto the diner's menu as an orderable dish. The wrong-course half I could not check without creating a dish on a live menu.

  • As the owner I listed this restaurant's 6 add-ons — all $2.50, all marked visible.
  • Then sat down as a diner and wrote down every dish on all four courses.
  • Not one of the 6 add-ons was sitting there as a dish of its own. An add-on stays an add-on.
  • The other half — a dish filed under the wrong course turning up under the wrong heading — would mean creating such a dish on a live menu, so I left it alone.
  • On Desserts, the one course with a single dish, there are no sub-headings at all, so there was nothing there to check a dish against.

Couldn’t check Whether a dish filed under the wrong course really does show under the wrong heading. And whether the app actually refuses to put an add-on on a menu — I only saw that none was there, not the refusal happening.

Left behind I changed nothing; one guest session was opened on table 9951. Worth flagging for the operator: this restaurant is carrying debris from earlier sessions that is not mine — 6 add-ons named UAT-modlink-optA/optB-* and a dish called 'UAT-clone-453377' that is live on the diner's Starters course.

the long version
PARTIAL GREEN - the half that matters to a diner is confirmed from both sides. The owner lists 6 add-ons for this restaurant; all four diner courses were walked (9 / 2 / 3 / 1 dishes) and not one add-on leaked onto the menu as its own orderable tile. Steps 1-3 need a dish filed with a deliberately mismatched course, which is provisioning I will not do on a live canary menu, so the cross-course pill behaviour is unproven and ungraded. WHAT A PERSON CAN DO: The add-on half of the promise (steps 4-6) checks out from both sides without anyone provisioning anything. As the owner I listed the restaurant's 6 add-ons (all UAT-modlink-optA/optB-*, $2.50 each, all 'Visible'). As a diner I then walked ALL FOUR courses and wrote down every dish on the menu - Drinks 9, Starters 2, Mains 3, Desserts 1 - and not one of the 6 add-ons is sitting there as a tile of its own. An add-on stays an add-on. WHERE IT STOPS: Steps 1-3. To see 'a dish whose canonical course is Entrees appearing under an Appetizers sub-category pill, and NOT under Entrees' I would have to file such a dish first, and I will not create menu objects on a live canary fixture mid-run. Separately, on the last course I walked (Desserts, 1 dish) there are no sub-category pills at all, so there was nothing there to check a dish against. NOT PROVEN (never graded): Steps 1-3 entirely - the dish-under-the-wrong-canonical-course case, and the owner-vs-diner structure comparison. Also unproven: that attaching an add-on to a menu is REJECTED (step 4's ADDON_CANNOT_BE_ON_MENU) - I only observed the outcome, that no add-on is on the diner's menu, not the rejection itself. SURFACE DRIVEN: OWNER https://owner.dev.qrate-ai.com/owner/food-items/?restaurantId=28ae37ab-... as canaryOwner (Desktop Chrome) + PATRON https://dcgmji73h6qel.cloudfront.net/menu?id=28ae37ab-...&table=9951&layout=mosaic_v2 as a guest (iPhone 14 Pro geometry on chromium) STATE LEFT BEHIND: none - read only. One guest table session opened (9951); nothing ordered, nothing changed. NOTE for the operator: this fixture is carrying UAT debris from earlier sessions that is NOT mine - 6 add-ons named UAT-modlink-optA/optB-* and a dish 'UAT-clone-453377' that is live on the diner's Starters course.

what I saw · trace.zip · owner video · patron video · report

STR-1208
W-052mosaic_v2-menu-selector10OWPAPASSEDPartial green

A diner has no way to pick between menus, and that turns out to be deliberate: a weekly schedule decides which single menu is live. The observation was right; the conclusion drawn from it would have been wrong.

  • As the owner: the menu page for Canary Mosaic lists 27 menus, 25 of them switched on at the same time, and both of this journey's own two are among them. So the two-menus-at-once state really is there.
  • As a diner at table 9952 I hunted for anything that picks one menu over another. There is nothing — no tabs, no dropdown, no row of chips, and none of the restaurant's menu names appears on the diner's screen at all.
  • The one control that sounds like a menu picker actually holds the courses. I swiped it the way a thumb would: 9 tiles before, 9 after, nothing changed.
  • Back on the owner's menu page I found the answer. Menus run on a weekly schedule — one is live now, with a time it ends and a Mon–Sun strip. '25 active' means 25 switched on, not 25 live at once. The clock picks the menu; the diner isn't meant to.
  • So the missing chooser is the design, not a fault. My lane had recommended calling this a dishonest green; I overturned that and filed nothing.

Couldn’t check Steps 4 to 10. Getting one menu live and then the other on demand means editing a live schedule, which is setting things up rather than testing them. I placed no orders, so I never reached the last step — the waiter's tag showing which menu an order came from — and I make no claim about it. One caveat worth weighing: the automated run may be picking the menu through the server rather than through anything on screen. If so the promise holds, and what I've found is a capability with no human surface — a missing screen rather than a broken one.

Left behind An open guest session on table 9952. Nothing else — read only, no order placed.

the long version
PARTIAL GREEN - and this row is where I overturned my own lane. The lane recommended FALSE_GREEN on the grounds that a diner has no way to choose between two live menus, and my own verification step confirmed the observation: not one of this restaurant's five menu names appears anywhere on the diner's screen, and the only menu-named control holds the courses. Both readings were TRUE and both were answering the wrong question. Opening the owner's Menu page shows a SCHEDULE card - 'Canary Default Menu live now, ends in 50m', a MON-SUN strip, and the controls weekly-schedule-card / weekly-schedule-live-menu-name / weekly-schedule-now-line / weekly-schedule-ends-in. Menus are scoped by a WEEKLY SCHEDULE. The clock chooses which menu is live; the diner is not supposed to. And '25 menus ACTIVE' means 25 ENABLED, not 25 live at once - exactly one is live at a time. So the absent chooser is the design, not a defect, and no ticket was filed. What IS confirmed: the owner side is real - 27 menus listed, both of this journey's own menus (M2MS MenuA and M2MS MenuB) present and enabled. What is NOT walked: steps 5-9 need Menu A live, then Menu B live. Reaching that on demand means editing the weekly schedule of a live canary menu, which is provisioning, not acceptance. Step 10 (the waiter's source-menu chip) needs two placed orders and is unreached and ungraded. WHAT A PERSON CAN DO: As the OWNER, plenty: the Menu page for Canary Mosaic lists 27 menus, 25 of them ACTIVE at the same time, and both of this journey's own menus (M2MS MenuA and M2MS MenuB) are among the active ones. So the two-menus-at-once state this journey creates really is there. WHERE IT STOPS: On the diner's screen there is NO WAY TO CHOOSE A MENU. I sat at table 9952 on mosaic_v2 with 25 menus live and searched the screen for anything that picks one: the only control whose name even suggests a menu is `m2-menu-slide-host`, and reading it shows it holds the COURSES and dishes (Drinks/Starters/Mains/Desserts, 'BEVERAGES 1 MORE 8', Canary Iced Tea...), not a list of menus. I swiped it right-to-left the way a thumb would; the sub-category rail read 'BEVERAGES 1 MORE 8' before and 'BEVERAGES 1 MORE 8' after — nothing changed, 9 tiles before and after. There is no menu tab strip, no dropdown, no chip row. If a diner cannot choose Menu A over Menu B, steps 6-9 of this journey ('Menu A -> Only A Sub-cats', 'Menu B -> Only B Sub-cats', 'Order on Menu A', 'Order on Menu B') are not things a person can do. NOT PROVEN (never graded): Steps 4-10. In particular I did NOT place the two orders, so I never reached step 10 (the waiter's source-menu chip A vs B) and I make no claim about it. CAVEAT the orchestrator should weigh: the board labels steps 6-9 'PATRON', but the canary may be selecting the menu through the diner API (a menuId parameter) rather than through a control on the screen. If so the contract holds and what I have found is that the capability has no human surface — which is still the thing this audit exists to catch, but it is a missing-UI finding rather than a broken-UI one. SURFACE DRIVEN: PATRON https://dcgmji73h6qel.cloudfront.net/menu?id=28ae37ab-...&table=9952&layout=mosaic_v2 as a guest (iPhone 14 Pro geometry on chromium) + OWNER https://owner.dev.qrate-ai.com/owner/menu/?restaurantId=28ae37ab-... as canaryOwner (Desktop Chrome) STATE LEFT BEHIND: none - read only, no order placed. One guest table session opened (9952).

what I saw · trace.zip · owner video · patron video · owner video · report

STR-1208
W-053mosaic_v2-modifier-pricing10OWPAPASSEDDEFERRED D2

D2 BLOCKED ON PROVISIONING
The fixture serves a menu but has no owner row - the canary-bootstrap Lambda deletes its owner assignment on every run. Needs a DB insert or a core change. Blocked, not failed.

None of the ten steps was graded, so whether switching modifier pricing off changes what a diner sees and pays is unknown.

  • A diner would need to see a priced add-on option on a dish, watch its price disappear when the owner switches pricing off, then pick it and be charged correctly.
  • Can't: no dish on any of these restaurants shows an add-on option at all, priced or not — I opened every dish on five of them and they all carry the same plain controls. The last steps would also place a real order on a live fixture.
  • Operator or builder: a fixture with a dish that actually exposes a priced option.

Couldn’t check Every step. The owner's pricing switch itself is real and reachable, and the one group that exists has pricing on; I read it and did not flip it.

Left behind Nothing. Read only — no dish I opened was ever added to a cart.

the long version
DEFERRED D2. grouping-pricing-toggle is real and reachable, and the existing grouping reads 'Pricing on'. But with no dish exposing any modifier to a diner, the visible effect this journey asserts has no subject. WHAT A PERSON CAN DO: The owner control this journey turns on and off is real and reachable: `grouping-pricing-toggle-<id>` sits on the Modifiers tab beside a label, and the grouping already on Canary Caesar Salad reads 'Pricing on'. I read its state and did not flip it. WHERE IT STOPS: Steps 5-9 are PATRON steps needing a priced modifier OPTION to be shown, then hidden, then selected and ordered. No dish on any fixture shows a modifier option at all, priced or not, so there is nothing whose price could be shown or hidden. Step 9 also places a real order and step 10 checks the charge - I place no orders on a live fixture beyond what a walk needs. NOT PROVEN (never graded): Every step. Recon, done first and recorded in three read-only walks: I toured every course on five candidate canary fixtures (Spice Mod, Includes, Groupings, Grouping Dietary, Mosaic V2 Dining) and opened every dish on every one of them. The persistent menu is identical on all five: 1 drink (9 on Dining), Canary Caesar Salad, Canary Fries, Canary Grilled Chicken, Canary Margherita, Canary Tiramisu - every one of them described 'DO NOT MODIFY', and every one opening to the same fifteen controls: hero photo, price, an 'Anything else?' note box, a quantity stepper and Add to order. Nothing else. No spice picker, no modifier group, no sides section, no build-your-own, no variant switcher, on any dish, on any fixture. SURFACE DRIVEN: https://dcgmji73h6qel.cloudfront.net/menu?id=<each fixture>&table=9944 as a guest diner (iPhone 14 Pro descriptor on chromium) + https://owner.dev.qrate-ai.com/owner/food-items/ as canaryOwner (Desktop Chrome) STATE LEFT BEHIND: none - read only. No dish opened was ever added to a cart in these recon walks.

what I saw · trace.zip · diner-Canary-Grouping-Dietary video · diner-Canary-Groupings video · diner-Canary-Includes video · diner-Canary-Mosaic-V2-Dining video · diner-Canary-Spice-Mod video · diner video · owner video · diner-Canary-Grouping-Dietary video · diner-Canary-Groupings video · diner-Canary-Includes video · diner-Canary-Mosaic-V2-Dining video · diner-Canary-Mosaic video · diner-Canary-Spice-Mod video · owner video · report

STR-1207
W-055mosaic_v2-overlap-variants10OWPAPASSEDDEFERRED D2

D2 BLOCKED ON PROVISIONING
The fixture serves a menu but has no owner row - the canary-bootstrap Lambda deletes its owner assignment on every run. Needs a DB insert or a core change. Blocked, not failed.

Whether two overlapping menus price the same dish differently, and whether a diner sees the right one, stays completely unknown.

  • An owner would need two overlapping menus with the same dish priced differently, and a diner would need to land on the right one.
  • There is only one menu here — on all day, 14 items — and the four other candidate restaurants carry the same single menu. So there is nothing to overlap and nothing to switch between. Making a second one means changing a live menu.
  • Needs the operator: a restaurant that already has two menus, or approval to create one.

Couldn’t check Every step of it.

Left behind Nothing — read only, and nothing I opened was ever added to a basket.

the long version
DEFERRED D2 - and the capability does have a screen: the Placements tab carries a per-menu PRICE on each menu row, which is the mechanism this journey is about. What is missing is a second menu to overlap with. WHAT A PERSON CAN DO: The per-menu price this journey is built on has a screen: the dish editor's Placements tab carries one row per menu with `placements-tab-price-<menuId>`, plus boost, portion type and chef's special. So an owner really can price the same dish differently on two menus. WHERE IT STOPS: Canary Mosaic V2 Dining has exactly ONE menu - 'Canary Default Menu', 14 items, active all day - so there is no overlap, no lunch/dinner pair, no variant switcher and nothing for steps 5-10 to render. Steps 2-4 assert API contracts and have no screen. NOT PROVEN (never graded): Every step. Recon, done first and recorded in three read-only walks: I toured every course on five candidate canary fixtures (Spice Mod, Includes, Groupings, Grouping Dietary, Mosaic V2 Dining) and opened every dish on every one of them. The persistent menu is identical on all five: 1 drink (9 on Dining), Canary Caesar Salad, Canary Fries, Canary Grilled Chicken, Canary Margherita, Canary Tiramisu - every one of them described 'DO NOT MODIFY', and every one opening to the same fifteen controls: hero photo, price, an 'Anything else?' note box, a quantity stepper and Add to order. Nothing else. No spice picker, no modifier group, no sides section, no build-your-own, no variant switcher, on any dish, on any fixture. SURFACE DRIVEN: https://dcgmji73h6qel.cloudfront.net/menu?id=<each fixture>&table=9944 as a guest diner (iPhone 14 Pro descriptor on chromium) + https://owner.dev.qrate-ai.com/owner/food-items/ as canaryOwner (Desktop Chrome) STATE LEFT BEHIND: none - read only. No dish opened was ever added to a cart in these recon walks.

what I saw · trace.zip · diner-Canary-Grouping-Dietary video · diner-Canary-Groupings video · diner-Canary-Includes video · diner-Canary-Mosaic-V2-Dining video · diner-Canary-Spice-Mod video · diner video · owner video · diner-Canary-Grouping-Dietary video · diner-Canary-Groupings video · diner-Canary-Includes video · diner-Canary-Mosaic-V2-Dining video · diner-Canary-Mosaic video · diner-Canary-Spice-Mod video · owner video · report

STR-1207
W-056mosaic_v2-owner-hide6OWPAPASSEDHonest green

The best thing I saw all day. The owner hides a dish and within a minute it disappears from the diner's phone on its own — and the app volunteers an apology for it. Green, and honestly so.

  • As the owner I opened Food Items on Canary Mosaic, found Canary Grilled Chicken marked visible, and pressed its visibility control. The row flipped to hidden.
  • On a phone at table 9934 I already had that exact dish in my cart.
  • Within 60 seconds, without me touching the phone, the tile vanished by itself — 3 tiles down to 2 — while its neighbour Canary Fries stayed put.
  • And the app told me unprompted that the dish was no longer available and had been taken out of my cart, offering two alternatives and a way to dismiss it.
  • That is the whole journey, including the part that is easy to get wrong: the diner was told, instead of discovering an empty cart at the till.

Couldn’t check One caveat on the last step: I saw no order button with an empty cart, because the product had already taken the hidden line out. So what I proved is that a hidden dish can't be ordered because it is removed and the diner is told — not that an order button appears and sits disabled.

Left behind Nothing — put back. The dish's visibility was switched off and then on again, and the owner's row reads visible once more. The one cart line I added on table 9934 was removed by the product itself; no order was placed.

the long version
HONEST GREEN - the board says a person can do this and a person can, watched end to end on video. The owner hid Canary Grilled Chicken in Food Items; the row flipped to Hidden; on a phone at table 9934 with that dish already in the cart the tile disappeared BY ITSELF within 60 seconds (3 tiles -> 2, the sibling untouched) and the app volunteered a modal the diner did not ask for: 'ITEMS NO LONGER AVAILABLE - Canary Grilled Chicken has been removed from your cart', with two alternatives and a Got it. That is the whole journey, including the part that is easy to get wrong: it told the diner rather than letting them discover an empty cart at the till. Item restored to Visible. WHAT A PERSON CAN DO: All of it, and it is the best thing I have seen today. As the owner I opened Food Items on Canary Mosaic, found 'Canary Grilled Chicken' (row read 'Visible'), and pressed its visibility control - the row flipped to 'Hidden'. As the diner on an iPhone at table 9934 I had that exact dish in my cart ('1 ITEM'). Within 60 seconds, WITHOUT touching my phone, the tile disappeared (3 tiles -> 2), its sibling 'Canary Fries' stayed put, and a modal appeared on its own reading 'ITEMS NO LONGER AVAILABLE - Canary Grilled Chicken has been removed from your cart' with two 'YOU MIGHT ENJOY' alternatives and a 'Got it' button. The dish was gone from the cart, so there was nothing left to place an order for. WHERE IT STOPS: nowhere - walked end to end NOT PROVEN (never graded): Nothing in the journey's own step list. One caveat on step 6: I observed 'no Place Order' with an EMPTY cart (the product had already removed the hidden line), so what I proved is that the hidden dish cannot be ordered BECAUSE it is taken out of the cart and the diner is told - not that a Place Order button appears and is disabled. SURFACE DRIVEN: OWNER https://owner.dev.qrate-ai.com/owner/food-items/?restaurantId=28ae37ab-... as canaryOwner (Desktop Chrome) + PATRON https://dcgmji73h6qel.cloudfront.net/menu?id=28ae37ab-...&table=9934&layout=mosaic_v2 as a guest diner (iPhone 14 Pro geometry on chromium - not real iOS WebKit) STATE LEFT BEHIND: RESTORED. 'Canary Grilled Chicken' visibility was switched OFF then back ON; the owner row was re-read and reads 'Visible' again (screenshot owner/07-restored.png). One cart line was added on table 9934 and was removed by the product itself when the dish was hidden; no order was placed.

what I saw · trace.zip · owner video · patron video · report

W-057mosaic_v2-payments-config5OWPAPASSEDPartial green

The owner is told card payments are off while a diner on the same restaurant is offered to pay by card — and the owner has neither a route to that page nor any control on it.

  • Only one of the five steps has a screen at all. I read the owner's payments page for this restaurant, and it states plainly that in-app card payments are not enabled here.
  • The page does follow whichever restaurant you are on, so it is not a stub — the micro kitchen's version says something different again, about UPI and the kitchen being priced in the wrong currency.
  • But on my own earlier walk on this same restaurant, the diner was offered to pay on their phone by Apple Pay, Google Pay or card. One restaurant, two screens, opposite answers, two separate walks.
  • An owner has no route to that page here anyway: it is not in the sidebar. Type the address in by hand and the page carries no controls at all. A micro kitchen's sidebar does have a payments link, so the route exists for one kind of restaurant and not the other.
  • An honest note on myself: my own double-check first claimed the page does *not* say payments are off. That was my mistake — I searched for a straight apostrophe and the page prints a curly one. The original reading was right.

Couldn’t check Which of the two readings is wrong. Settling it means actually pressing the pay control, and these are live payment merchants. The other four steps have no screen at all and were not graded. I also did not touch the kill switch: flipping it on a shared restaurant would hand the next run a false red.

Left behind Nothing. Nothing saved, nothing switched, nothing paid, and no table session opened.

the long version
PARTIAL GREEN - one step readable, and reading it produced the sharpest contradiction of the wave. The owner's payments page for THIS fixture says, verbatim, 'In-app card payments aren't enabled for this restaurant yet' - while my own earlier walk on the SAME fixture (W-043, tables 9971 and 9972) reached the diner's fork 'Pay now on my phone - Apple Pay, Google Pay or card'. Two surfaces, one restaurant, opposite answers, two independent walks. I did NOT settle which side is wrong: settling it means pressing the pay control and these fixtures are live Stripe merchants on dev. Filed as STR-1210 with both readings. Also on that ticket: there is NO sidebar route to the payments page for a mosaic_v2 restaurant (a micro kitchen's sidebar has one), and once you type the address there is no control on the page at all - so step 2's 'accepted-methods roundtrip', labelled OWNER, is not something an owner can perform anywhere. Steps 3-5 are API assertions (409 guards, client_secret) with no screen and are not graded. NOTE ON MY OWN CHECK: my verification pass first reported 'the page does NOT say payments are off' - my match used an ASCII apostrophe and the page renders a typographic one. The captured verbatim in the same step showed the sentence plainly. The lane was right and my check was wrong. WHAT A PERSON CAN DO: Only one of the five steps has a screen. Step 1 (owner baseline) is readable: /owner/settings/payments/ answers 200, the header follows the restaurant I chose, and for Canary Mosaic V2 Electronic Pay it says in one sentence 'In-app card payments aren't enabled for this restaurant yet.' The page is restaurant-aware, not a stub - the same page on Canary Micro Kitchen instead reads 'UPI payment. UPI is available for kitchens priced in Rs INR. This kitchen is set to USD. Change the currency first...'. Steps 2-5 are API assertions (an accepted-methods round-trip with a 409 guard, a summary flag, a Stripe intent 409, a client_secret) with no user surface at all. WHERE IT STOPS: Step 2, the accepted-methods round-trip. There is NO control on the payments page to turn payments on or to choose which methods are accepted - the page is one sentence, the sidebar, and one empty submit element. And the page is unreachable anyway: this restaurant's sidebar offers only Home, Food Items, Menu, Tables/Staff, Personalize, Insights. There is no Payments entry, so an owner is never shown a route to it. (A micro kitchen's sidebar DOES carry Payments and Collection, so the route exists for one restaurant type and not the other.) NOT PROVEN (never graded): Steps 2, 3, 4, 5 - all API contract, no screen. NOT graded. I did not toggle the kill switch: these are live Stripe merchants on dev and a toggle on a shared fixture would also give the next canary run a false red. SURFACE DRIVEN: OWNER https://owner.dev.qrate-ai.com/owner/settings/payments/ as canary-owner-dev@ (Desktop Chrome), read-only, across four canary restaurants STATE LEFT BEHIND: none - nothing saved, nothing toggled, nothing paid, no table session opened.

what I saw · trace.zip · owner video · report

STR-1210
W-060mosaic_v2-place-order-chaos10CAOWPAPASSEDPartial green

Ordering works here today. The half of this journey about deliberately breaking it isn't something a person can do — it's a test hook, not a feature.

  • Sat down at table 9953 as a guest — nobody asked who I was.
  • The menu had 14 things on it: 9 drinks, a starter, 3 mains, a dessert.
  • Added a Canary Cola, pressed Place order $3.50. It went through.
  • Then went looking for the owner's switch that deliberately breaks ordering — the thing this journey is really about.
  • Walked all eight of this restaurant's owner pages. There is no such switch.

Couldn’t check What a diner is told when an order actually fails. I never saw the failure screen, so I can't say whether it's clear, or whether a lost confirmation quietly orders twice.

Left behind Table 9953: my guest session is still open, with two cancelled orders on it (both mine).

the long version
PARTIAL GREEN - the fixture is healthy and the chaos half has no surface. A real diner CAN order on this fixture right now: POST /diner/orders returned 201 and the badge read ORDERED, so it is not sitting in a failed state. The three OWNER chaos-injection steps have no product surface at all - there is no chaos switch. NOTE ON A NEAR-MISS the lane caught itself: a keyword sweep appeared to find 'Chaos' and 'fault' on every screen. Checked in context before reporting - 'Chaos' is the restaurant's OWN NAME and 'fault' is the tail of 'Canary Default Menu'. A page-wide substring would have produced a confident false finding. WHAT A PERSON CAN DO: A real diner CAN order here right now. On table 9953 I saw 9 drinks / 1 starter / 3 mains / 1 dessert, added a Canary Cola, pressed 'Place order $3.50' and it went through - the server answered 201 on /diner/orders and the Ordered tab read ORDERED, $3.50. That is step 3 walked and it is also the substance of step 7 ('Order Succeeds After Clear'): this fixture is not left sitting in a failing state between canary runs, which was the thing most worth checking. WHERE IT STOPS: Steps 4, 6 and 8 - the OWNER turning fault injection on and off. There is no such control in the product. I walked all eight owner pages for this restaurant (its whole sidebar plus /owner/settings/pos/ and /owner/settings/payments/) and none carries anything chaos-shaped. My first sweep appeared to find 'Chaos' and 'fault' everywhere; I checked the context of every match before reporting it and both are innocent - 'Chaos' is the restaurant's own NAME in the header, and 'fault' is 'Canary Default Menu'. Verified in the w060-word-check walk. So the three OWNER steps are a test hook, not a capability. NOT PROVEN (never graded): Steps 1 and 2 (raw-websocket frame shapes - no screen at all), 4, 5, 6, 8, 9, 10. NOT graded. In particular I never saw the failure UI, so I cannot say whether a diner is told clearly when an order fails, nor whether a lost acknowledgement really recovers without duplicating. SURFACE DRIVEN: PATRON https://dcgmji73h6qel.cloudfront.net/menu?id=5b677676...&table=9953 as an anonymous guest (iPhone 14 Pro on chromium) + OWNER https://owner.dev.qrate-ai.com as canary-owner-dev@ (Desktop Chrome), read-only STATE LEFT BEHIND: I cancelled my own dish - the ledger reads CANCELLED, 0 cancel controls left. Canary Mosaic V2 Place Order Chaos table 9953 is left with an open guest session and one cancelled order; no owner screen can close a table session (see W-032). NOTE: this walk was driven TWICE - the first run's trace was destroyed by a later run in this lane's shared outputDir, so it was re-driven to regenerate it. Both runs gave the identical result. That means table 9953 carries TWO cancelled orders, not one.

what I saw · trace.zip · owner video · patron video · report

STR-1211
W-061mosaic_v2-recommendations11OWPAPASSEDDEFERRED D3

D3 WON'T MUTATE LIVE DATA
Walking it would mean creating, disabling or deleting menu items on a live restaurant.

All five diner steps stay unknown, because there is no recommendation on this menu to act on.

  • A person would need to open a dish, be offered something that pairs with it, and add that as its own line.
  • They can't here: not one dish on this restaurant offers a pairing or an add-on. The pairings are created by the automated run and aren't left standing between runs, and making one myself means creating menu items on a live restaurant that repeats this journey hourly — a change I won't make.
  • Unblocking needs someone who can leave a pairing standing on a test restaurant. One open question for the builder: the owner's side shows a pairings row on every dish while the diner sees none, and from outside I can't tell whether those rows have anything in them.

Couldn’t check Whether recommendations appear at all, and whether adding one makes its own separate cart line.

Left behind An idle guest session on table 9944.

the long version
DEFERRED D3 - and the walkable half was walked honestly first. I opened EVERY ONE of the 15 dishes on Canary Mosaic - dev. Not one shows a pairing, an add-on or a 'pairs well with'. That is not filed as a defect, because this journey's pairings are provisioned by the canary and are not expected to be sitting there between runs. OPEN QUESTION passed to the builder rather than filed: every dish's owner-side Pairings tab carries a grouping row ('Dishes recommended alongside this one') while the diner sees no pairing anywhere. From outside I cannot tell whether those groupings have members. One grep by someone with the source settles it. WHAT A PERSON CAN DO: Open any dish: the composition sheet opens properly (m2-composition, dish hero, price, quantity stepper, add). I opened EVERY dish this restaurant offers - all 15 across Beverages(9)/Appetizers(2)/Entrees(3)/Desserts(1) - and not one of them shows a recommendation, a pairing, an add-on or any 'pairs well with' wording. So there is nothing on this menu for the journey's render/add/separate-cart-line promises to act on. WHERE IT STOPS: Six of the eleven steps are the canary creating its own throwaway parent + pairing dishes over the API and attaching a recommendation. Producing that state myself means creating menu objects on a live canary fixture that runs this journey hourly - a mutation I will not make. Without it there is no recommendation to render, so steps 6-11 cannot be reached from outside. NOT PROVEN (never graded): All five patron steps (Await Propagation, Open Composition, Recommendations Render, Add Pairing -> Separate Cart Line, Add-on Card Renders) - I reached the composition sheet but there was no recommendation on it to exercise. Not graded. SURFACE DRIVEN: dcgmji73h6qel.cloudfront.net/menu?id=28ae37ab...&table=9944&layout=mosaic_v2 as a guest on iPhone 14 Pro/chromium; owner.dev.qrate-ai.com as the canary OWNER on Desktop Chrome STATE LEFT BEHIND: none - I created nothing and ordered nothing. An idle guest session remains on test table 9944.

what I saw · trace.zip · owner video · patron video · report

STR-1213
W-066mosaic_v2-sides-coexistence8OWPAPASSEDDEFERRED D2

D2 BLOCKED ON PROVISIONING
The fixture serves a menu but has no owner row - the canary-bootstrap Lambda deletes its owner assignment on every run. Needs a DB insert or a core change. Blocked, not failed.

None of the eight steps was graded, so whether the two kinds of options coexist properly for a diner is unknown.

  • A diner would need one main carrying both an add-on group and a choose-one sides list, so the two sections show together and Add stays blocked until a side is picked.
  • Can't: no dish combines the two. The only dish filed under sides opens as an ordinary dish, and no dish anywhere shows a sides section — so there is nothing to watch and no blocked Add button to press.
  • Operator or builder: a fixture with a dish that carries both.

Couldn’t check Every step. Both owner-side pieces are visible and were read — the choose-one rule and a sides section in the menu builder; only the combination is missing.

Left behind Nothing. Read only — no dish I opened was ever added to a cart.

the long version
DEFERRED D2. Both halves of the owner mechanism are visible - a choose-one rule on the Modifiers tab and a Sides subcategory in the Menu builder - but no dish combines them, so the diner-facing behaviour has no subject. WHAT A PERSON CAN DO: The pieces have owner screens: the Modifiers tab's rule dropdown is where a min=1/max=1 choose-one grouping is set, and the Menu builder shows a Sides subcategory chip under Entrees. WHERE IT STOPS: Steps 5-8 need a main carrying BOTH a food-item grouping AND a per-menu Choose-One sides list, so a diner can see the two sections coexist and find Add gated until they pick. The only dish in Sides here is Canary Fries, which opens as a plain dish; no dish anywhere shows a sides section, so there is no coexistence to witness and no gated Add CTA to press. NOT PROVEN (never graded): Every step. Recon, done first and recorded in three read-only walks: I toured every course on five candidate canary fixtures (Spice Mod, Includes, Groupings, Grouping Dietary, Mosaic V2 Dining) and opened every dish on every one of them. The persistent menu is identical on all five: 1 drink (9 on Dining), Canary Caesar Salad, Canary Fries, Canary Grilled Chicken, Canary Margherita, Canary Tiramisu - every one of them described 'DO NOT MODIFY', and every one opening to the same fifteen controls: hero photo, price, an 'Anything else?' note box, a quantity stepper and Add to order. Nothing else. No spice picker, no modifier group, no sides section, no build-your-own, no variant switcher, on any dish, on any fixture. SURFACE DRIVEN: https://dcgmji73h6qel.cloudfront.net/menu?id=<each fixture>&table=9944 as a guest diner (iPhone 14 Pro descriptor on chromium) + https://owner.dev.qrate-ai.com/owner/food-items/ as canaryOwner (Desktop Chrome) STATE LEFT BEHIND: none - read only. No dish opened was ever added to a cart in these recon walks.

what I saw · trace.zip · diner-Canary-Grouping-Dietary video · diner-Canary-Groupings video · diner-Canary-Includes video · diner-Canary-Mosaic-V2-Dining video · diner-Canary-Spice-Mod video · diner video · owner video · diner-Canary-Grouping-Dietary video · diner-Canary-Groupings video · diner-Canary-Includes video · diner-Canary-Mosaic-V2-Dining video · diner-Canary-Mosaic video · diner-Canary-Spice-Mod video · owner video · report

STR-1207
W-067mosaic_v2-spice-cart-dedup4OWPAPASSEDDEFERRED D2

D2 BLOCKED ON PROVISIONING
The fixture serves a menu but has no owner row - the canary-bootstrap Lambda deletes its owner assignment on every run. Needs a DB insert or a core change. Blocked, not failed.

Whether two spice levels of the same dish make two separate basket lines stays entirely unknown, because no dish anywhere has a spice choice to make.

  • A person would need a dish with a spice setting, so the same dish can go into the basket twice at two heat levels and make two separate lines.
  • There isn't one. I toured every course on all five candidate restaurants and opened every dish: not one offers a spice choice, so there is nothing to add and no second line to make.
  • Unblocking it needs someone to put a dish with a spice scale on one of these restaurants.

Couldn’t check Steps 1, 2 and 4 - everything about spice levels. The one step I could reach did hold, and chasing it is what turned up the tile-doubling fault now filed as STR-1212.

Left behind Nothing - I emptied the basket I built and checked table 9947 was left empty. No order was ever placed.

the long version
DEFERRED D2, with step 3 watched and holding. Step 3's rule - 'reopening via the tile is a FRESH add' - held the first time and was observed: order at 2, tile opened at 1 offering 'Add to order ($8.99)', pressed, order 3. SEAM WORTH KEEPING: that rule stops holding once a diner has opened the dish from their ORDER first. This journey walks only the clean path, so its green is not a lie about what it tests - it simply never visits the edit door. Filed separately once verified first-hand. WHAT A PERSON CAN DO: Step 3's rule - 'reopening a dish from its tile is a FRESH add' - holds the first time and I watched it: my order held 2 salads, I tapped the tile, the sheet opened at 1 offering 'Add to order ($8.99)', I pressed it and my order became 3 / $26.97. Correct. WHERE IT STOPS: Steps 1, 2 and 4 need a dish with a spice scale so the same dish can go in at two spice levels and produce two distinct cart lines. No dish on any of the five fixtures offers a spice choice, so there is nothing to add at Spice Level 0 and no second line to make. NOT PROVEN (never graded): Steps 1, 2 and 4. Recon, done first and recorded in three read-only walks: I toured every course on five candidate canary fixtures (Spice Mod, Includes, Groupings, Grouping Dietary, Mosaic V2 Dining) and opened every dish on every one of them. The persistent menu is identical on all five: 1 drink (9 on Dining), Canary Caesar Salad, Canary Fries, Canary Grilled Chicken, Canary Margherita, Canary Tiramisu - every one of them described 'DO NOT MODIFY', and every one opening to the same fifteen controls: hero photo, price, an 'Anything else?' note box, a quantity stepper and Add to order. Nothing else. No spice picker, no modifier group, no sides section, no build-your-own, no variant switcher, on any dish, on any fixture. SURFACE DRIVEN: https://dcgmji73h6qel.cloudfront.net/menu?id=f469b191-ec79-585d-916a-e6c497617eb8&table=9947&layout=mosaic_v2 - guest diner, iPhone 14 Pro descriptor on chromium (NOT real iOS WebKit) STATE LEFT BEHIND: Emptied the unplaced order I built; table 9947 verified empty (no m2-dec- control left on the tile). No order was ever placed. SEAM CONFIRMED FIRST-HAND AND FILED AS STR-1212 (P0/Highest). I re-drove it myself on my own table 9968 with the ORDER TOTAL as the oracle rather than the button label. Control passed - press 1 gave $8.99, press 2 gave $17.98, so the harness was really driving. Then: opened the salad from the ORDER LINE (edit door, pre-filled at 2, correct), backed out touching nothing, tapped the TILE again - and it opened at 2, not 1, still offering 'Add to order ($17.98)'. Pressed unchanged: $17.98 -> $35.96, still ONE cart line. The pre-filled quantity leaks onto the tile door while the tile door keeps ADD semantics. My FIRST attempt reported 'does not reproduce' - a false refutation caused by a locator that never found the tile, exposed only because the control total never moved off $8.99. The control is now a hard gate in that spec.

what I saw · trace.zip · diner video · diner-Canary-Grouping-Dietary video · diner-Canary-Groupings video · diner-Canary-Includes video · diner-Canary-Mosaic-V2-Dining video · diner-Canary-Spice-Mod video · diner video · owner video · diner-Canary-Grouping-Dietary video · diner-Canary-Groupings video · diner-Canary-Includes video · diner-Canary-Mosaic-V2-Dining video · diner-Canary-Mosaic video · diner-Canary-Spice-Mod video · owner video · report

STR-1212
W-068mosaic_v2-spice-mod4OWPAPASSEDDEFERRED D2

D2 BLOCKED ON PROVISIONING
The fixture serves a menu but has no owner row - the canary-bootstrap Lambda deletes its owner assignment on every run. Needs a DB insert or a core change. Blocked, not failed.

BEING WALKED NOW on Farm + Oak, because our owner login cannot reach the Canary restaurants. This proves the FEATURE works for a real owner - it does NOT verify the canary's own fixture.

Whether an owner's spice or option setting ever reaches the diner stays unknown, because there is no owner to set it.

  • A diner would need to see the spice level or the option an owner set on a dish.
  • The owner half can't be done: this restaurant has no owner attached, because the journey's own setup deletes the owner assignment every run. The diner half only checks the owner half's effect.
  • Needs the operator — a database change, or a backend fix so the setup stops wiping the owner.

Couldn’t check All four steps. Blocked, not failed.

the long version
Not walked. Of 4 steps, 1 are OWNER/CANARY provisioning (create the dish, set the tag, publish the menu) and only 3 are patron-observable - and the patron half asserts the owner half's effect, so it cannot be checked without it. I drove this journey's fixture as a guest and captured the live state instead. What that established: The dish composition sheet opens for real (m2-composition, m2-dish-hero, m2-dish-price, m2-comp-stepper, composition-add). On a plain side it renders no modifier, spice or includes UI.
W-072mosaic_v2-subcat-order11OWPAPASSEDPartial green

The owner really can manage sub-categories and a diner really does see them in an order. But the reordering cannot be tested here: every course has only one sub-category, so there is nothing to drag past.

  • The owner's menu builder is richer than I expected: every course has a real named sub-category row you can rename, delete, hide, see an item count on and drop dishes into, plus a button to create a new one.
  • As a diner the courses really are split into named groups with counts, each with a tappable pill that jumps you to it.
  • But I could not do the one thing this journey is about — dragging a sub-category into a different order. Every course has only one named sub-category, so there is nothing to drag it past.
  • Making a second one would mean changing a live menu whose tests run every twenty minutes, so I left it alone.
  • There is also no labelled drag handle to take hold of — just elements that happen to be draggable, which helps neither a person nor a test.

Couldn’t check The reordering itself and everything built on it — I never saw sub-categories put into a new order, never drove the two-menus-at-once precedence flip or the switcher tiles meant to show it, and never saw a diner's menu change after an owner drag. The order I wrote down is just the restaurant's normal one.

Left behind Nothing changed — nothing renamed, deleted, hidden, created or dragged. One guest session was opened on table 9972 and nothing was ordered.

the long version
PARTIAL GREEN - and the owner UI here is richer than the journey's API-only steps suggest. Per-course sub-category rows exist with rename, delete, toggle, item count and drop targets, plus a create-and-add control, and 5 draggable elements. What cannot be walked is the reorder itself: every course on this restaurant has exactly ONE named sub-category plus __ungrouped__, so there is no second row to drag past, and no drag-handle testid to grab. Creating a second sub-category on a live canary menu to manufacture the case is provisioning, not acceptance, and I will not do it. WHAT A PERSON CAN DO: More than I expected. The owner's Menu builder DOES give a person real sub-category rows, not just an Add button: with every course bucket expanded I can see, per course, a named sub-category row carrying rename, delete, visibility-toggle, item-count and a drop target — subcategory-rename-Entrees-Sides, subcategory-delete-Entrees-Sides, subcategory-toggle-Entrees-Sides, subcategory-drop-Entrees-Sides, subcategory-count-Entrees-Sides — plus the same set for Appetizers, Beverages and Desserts, an __ungrouped__ bucket each, and subcategory-create-add-<course> to make a new one. Five elements on the page are genuinely draggable. On the diner side the rail has a real order I can read: Drinks shows 'BEVERAGES 1 / MORE 8' and Mains shows 'SIDES 1 / MORE 2', each with tappable jump pills. WHERE IT STOPS: Step 10 — 'drag-reorder a sub-category row'. Each course on this restaurant has exactly ONE named sub-category plus an __ungrouped__ bucket, so within a course there is no second row to drag the first one past. To drive the drag I would have to create sub-categories on a live canary menu, and I will not mutate a fixture whose journeys are running every ~20 minutes. There is also no drag-handle testid — only `[draggable=true]` elements and `subcategory-drop-*` targets — so the affordance is not labelled for a person or a test. NOT PROVEN (never graded): Steps 1-9 and 11. I never saw sub-categories A/B/C, never saw them reordered to C,A,B, never drove the two-live-menus precedence flip (P<Q then Q<P) or the switcher tiles that are supposed to show it, and never saw the diner reflect an owner drag. The rail order I recorded is the fixture's baseline, not this journey's provisioned order. SURFACE DRIVEN: OWNER https://owner.dev.qrate-ai.com/owner/menu/?restaurantId=28ae37ab-... as canaryOwner (Desktop Chrome, all course buckets expanded) + PATRON https://dcgmji73h6qel.cloudfront.net/menu?id=28ae37ab-...&table=9972&layout=mosaic_v2 as a guest (iPhone 14 Pro geometry on chromium) STATE LEFT BEHIND: none - read only. No sub-category was created, renamed, deleted, toggled or dragged. One guest table session opened (9972); nothing ordered.

what I saw · trace.zip · owner video · patron video · report

STR-1208
W-075namespaced-subcategory13CAOWPAPASSEDDEFERRED D1

D1 NO SCREEN
Every step is a direct API call. There is no screen for a person to look at.

NOT WALKABLE BY A PERSON. This journey's steps are direct API calls with no screen behind them, so there is nothing to look at.

Nothing here is visible to a person, so whether the screen behind it is reachable at all stays unknown.

  • A person would need some screen where namespaced sub-categories actually show up.
  • There isn't one - all thirteen steps are direct calls to the server, and no part of the journey opens a browser.
  • Nothing an operator can hand me fixes that; it would need the journey itself to gain a screen.

Couldn’t check All thirteen steps.

the long version
Coverage gap - a green here cannot detect an unreachable screen (the STR-928 class).
W-077owner-menu14OWPAPASSEDDEFERRED D2

D2 BLOCKED ON PROVISIONING
The fixture serves a menu but has no owner row - the canary-bootstrap Lambda deletes its owner assignment on every run. Needs a DB insert or a core change. Blocked, not failed.

BEING WALKED NOW on Farm + Oak, because our owner login cannot reach the Canary restaurants. This proves the FEATURE works for a real owner - it does NOT verify the canary's own fixture.

Thirteen of the fourteen steps stay unknown, and the one accusation made about this row was wrong and has been withdrawn.

  • A person would need to walk the owner's menu screens on Canary Kitchen — the restaurant this journey actually names.
  • They haven't yet: my map pointed at a similarly-named restaurant instead, where the owner was correctly refused entry, and I withdrew the false-green accusation built on that. That refusal was correct - the owner genuinely is not assigned there. The restaurant this journey is actually about, Canary Kitchen, is a separate problem: its setup job strips the owner off on every run, so no owner login reaches it either.
  • Unblocking needs a re-drive against Canary Kitchen, and the operator to attach an owner where one is missing.

Couldn’t check Steps 4-14: create/publish a menu+item+addon+side and the patron seeing them. Mutating Canary Kitchen mid-cycle would corrupt the fixture every other hourly canary journey in this ledger depends on.

the long version
reached login, verified restaurant, and Menu Mgmt cleanly; stopped before any create/publish mutation on a shared hourly canary fixture (steps 4-14 unproven)

what I saw · trace.zip · owner video · report

W-078owner-menu-bulk-actions11OWPASSEDPartial green

Read the panel end to end; proving a bulk mode APPLIES needs a mutation across every dish on a canary fixture.

The bulk panel is powerful — thirteen actions across all 22 dishes at once, with a proper delete warning — but the owner's own in-product manual does not mention it at all.

  • Opened the owner's food library and worked through the bulk panel, without pressing anything that commits.
  • One click on select-all picks every dish — all 22 of them.
  • The panel offers thirteen things you can do to all of them at once: assign, remove, boost, special, availability, spice, spice modifier, spice requirement, dietary, raw category, grouping, remove grouping and delete — all committed by a single apply button.
  • In delete mode that button names the count it will delete and the panel warns the action cannot be undone. So there is no missing-confirmation problem here.
  • The problem is the manual. The owner's own in-product handbook never uses the word bulk — not once in all 31,812 characters of it, with every tab clicked and every section forced open.

Couldn’t check Whether any of the thirteen modes actually work. I never pressed apply — proving one would change every dish on a shared restaurant. This also needs re-driving against Canary Kitchen.

Left behind Nothing. Read only — I selected and read; I pressed nothing that commits.

the long version
Drove the food-library bulk panel as the owner, read-only. One click on food-library-table-select-all selects every dish ('22 selected'); food-library-table-bulk-action opens bulk-actions-panel offering THIRTEEN modes - assign, remove, boost, special, availability, spice, spice modifier, spice requirement, dietary, raw category, grouping, remove grouping and DELETE - committed by a single button reading 'Apply to 22 items'. In Delete mode that button reads 'Delete 22 items...' and the panel DOES warn the action cannot be undone, so there is no missing-confirmation defect. The finding is documentation: the rendered App-Doc never uses the word 'bulk' - zero occurrences in 31,812 characters with every tab clicked and every collapsible forced open. Per the project's app-doc-maintenance rule, App-Doc is the owner-app Book of Truth and a capability absent from it is a maintenance defect. I did NOT press bulk-apply, so I cannot say the modes work - only that they are offered.

what I saw · trace.zip · owner video · report

STR-1201
W-079owner-modifiers-pairings8OWPASSEDFalse red

The board called three owner features broken while an owner can plainly do all three on screen today. It has since flipped itself green.

  • Signed in as the owner and opened Canary Caesar Salad. All three of the things the board says are broken are sitting right there on screen.
  • The dish has a modifiers tab and a pairings tab among its five, and each explains itself in plain English - modifiers are the choices a diner picks from, pairings are only suggestions that never change the price.
  • There is a pricing switch on modifiers and none on pairings, which matches exactly what pairings says about itself.
  • So the red does not describe an owner's experience. One lead, offered as a lead and not a cause: the dish the test names no longer exists - open its link and you land on the food library with no editor at all. Why the test was red is the builder's to work out; I have no source.
  • The board has since corrected itself and now reports this passing. My grading stands as the record of the window when it was wrong.

Couldn’t check Whether the pricing switch stays flipped. Three of the eight steps are about it persisting, and flipping it would have changed a live restaurant mid-run.

the long version
CONFIRMED BY ME on the deployed dev owner app at 06:08 UTC, signed in as the canary owner on Canary Mosaic. The board reports this journey PARTIAL, failing omp-02-tab-labels, omp-03-modifiers-scope and omp-04-pairings-scope. All three describe things an owner can plainly see today. Opening Canary Caesar Salad shows five tabs - Dish Properties, Menus (1), MODIFIERS, PAIRINGS, Performance. The Modifiers tab reads 'Configure the buckets and rules diners pick from. The Add-ons default is always present and can be renamed but not deleted.' The Pairings tab reads 'Dishes recommended alongside this one. Pairings are suggestions, not choices - they never change the price of this dish.' A pricing switch reading 'Pricing on' is present on Modifiers and absent on Pairings, which matches what Pairings says about itself. So the red does not describe the owner's experience. One observation, offered as a lead and NOT as a root cause: the dish the canary names, 69f06e43-710d-493b-a553-77d5ccd93bf3, no longer exists - deep-linking to it leaves you on the food library with no editor open. Why the canary is red is EMP-1's to determine; I have no source. Scope: this walk covers 5 of the 8 steps. Steps 6-8 are about the pricing switch PERSISTING, which I did not exercise - flipping it would mutate a canary fixture mid-run. BOARD NOW AGREES. As of batch d5aadece (2026-09-04 window) this journey reports PASSED. I graded it FALSE_RED - the board called it broken while an owner could plainly do it on screen - and the board has since corrected itself to match what I saw. The FALSE_RED grading stands as the record of the window in which the board was wrong.

what I saw · trace.zip · owner video · report

STR-1188
W-080patron-record-integrity2OWPASSEDDEFERRED D1

D1 NO SCREEN
Every step is a direct API call. There is no screen for a person to look at.

NOT WALKABLE BY A PERSON. This journey's steps are direct API calls with no screen behind them, so there is nothing to look at.

Whether anyone could reach this stays unknown, because there is no screen behind it.

  • A person would need a screen to look at.
  • There isn't one — this journey is entirely direct calls to the server; its own description says so, and no browser opens.
  • Nothing for me to unblock: it would take the journey itself covering a screen someone can reach.

Couldn’t check Anything a person would see. This would pass just the same if the screen behind it were unreachable.

the long version
Coverage gap - a green here cannot detect an unreachable screen (the STR-928 class).
W-089table-session-security7OWPAPASSEDDEFERRED D1

D1 NO SCREEN
Every step is a direct API call. There is no screen for a person to look at.

NOT WALKABLE BY A PERSON. This journey's steps are direct API calls with no screen behind them, so there is nothing to look at.

All seven steps stay unknown from a person's point of view — a green here can't tell you whether the screen behind it is even reachable.

  • A person would need to watch the table-session protections behave on a screen.
  • They can't: by its own description this journey never opens a browser — every step is a direct call to the server, so there is nothing for a person to look at.
  • Unblocking needs the journey itself to grow a screen-level check; there is nothing I can do from outside.

Couldn’t check All seven steps.

the long version
Coverage gap - a green here cannot detect an unreachable screen (the STR-928 class).
W-093owner-cocktail-bartender0OWNO SUCH JOURNEY

Not a canary journey - found by driving the product and comparing it to the board.

The owner's cocktail bartender page is a crash message and nothing else — and nothing on the board is red, because nothing on the board is looking at it.

  • Opened the owner's cocktail bartender page. It does load — the app frame paints, six menu items down the side.
  • And then the entire body of the page is a raw programmer's crash message, shown to the owner as the page's content.
  • There is not one button, link or field on it. Nothing to do at all.
  • No automated journey covers this page. The bar-tender journey is the diner's side of it — the cocktail banner — not this screen.

Couldn’t check What this page is meant to do. There is nothing on it to try.

the long version
The owner route /owner/cocktail-bartender/ answers HTTP 200, paints the app shell and 6 nav items, and then renders as its entire page body the words 'l is not a function' - a minified JavaScript failure shown to the owner as page content, under testid cocktail-queue-error. There is not one button, link or field on the page. No canary journey covers this route: the bar-tender journey (W-002) is PATRON-only and exercises the diner-facing cocktail banner, not this screen. So nothing on the board is red, because nothing on the board is looking.

what I saw · trace.zip · owner video · report

STR-1194
W-095owner-unreachable-settings0OWNO SUCH JOURNEY

Not a canary journey - found by driving the product and comparing it to the board.

Three owner settings screens work fine, but there is no link to any of them anywhere - 77 links across six screens and not one leads there. No canary journey covers this at all.

  • Three owner settings screens - payments, till and dietary - open perfectly well if you type their address in by hand.
  • So I went hunting for the way in. I opened six owner screens, including the user menu and the mobile menu on each, and collected all 77 links on them.
  • Not one of those 77 goes to any of the three. There is no settings link anywhere in the owner app at all.
  • And the settings address on its own does not even give you a proper not-found page - it gives you a raw server error page.
  • By the owner manual's own rule, something a person cannot reach in the app is not a feature.
the long version
/owner/settings/payments/, /owner/settings/pos/ and /owner/settings/dietary/ all answer 200 and render if the address is typed. I enumerated every <a href> on six owner screens - dashboard, Food Items, Menu, Tables/Staff, Personalize, my restaurants - opening the user menu and the mobile nav on each, and collected 77 distinct hrefs. Not one points at any of the three, and there is no settings-ish href anywhere at all. /owner/settings/ itself answers 404 as a RAW S3 XML error page (NoSuchKey), not a styled not-found. By App-Doc's own 3-pass rule a capability that is not reachable in the UI is not a capability.

what I saw · trace.zip · owner video · report

STR-1196

DMicro-Kitchen

Owner account plus a dedicated fixture. 21 journeys · 69 steps · 0 not yet driven

#JourneyStepsActorsCanary saysUAT verdictNoteTicket
W-012micro-kitchen-class-gate4CAPAPASSEDHonest green

A micro kitchen and an ordinary restaurant open identically. Green, and it matches what I saw.

  • Opened the micro-kitchen menu, and in a second fresh browser opened an ordinary full-service restaurant beside it as a comparison.
  • Both arrived the same way — a dietary question first — and both menus were usable straight away.

Couldn’t check The row's own note about the menu data underneath is cut off mid-sentence, so I can't repeat what it found there.

the long version
Loaded the Micro-Kitchen fixture (d79cd122-d52a-5484-804d-f5e1c84a7b03) and, in a separate fresh browser context, the full-service Canary Kitchen fixture (99e9d621-6941-4acc-8d85-50f15f3a2f2b) as a dine-in control. MK arrival: gates=["dietary-modal"] interactive=true. Control arrival: gates=["dietary-modal"] interactive=true. No captured /diner/* GET payload (menu-structure only) exposed a literal
W-013micro-kitchen-collection-settings4PASSEDHonest green

The Collection settings page is there, opens on the right restaurant, and shows the windows that are configured.

  • Signed in as the shared canary owner and opened the Micro-Kitchen dashboard.
  • There is a Collection link in the sidebar. Clicked it.
  • The page opened on the same restaurant I was already in, and showed the collection windows that are set up.
  • Nothing was flagged as unsaved when I arrived — the page was clean.
the long version
Logged in as the shared canary owner and opened the Micro-Kitchen dashboard (d79cd122-d52a-5484-804d-f5e1c84a7b03). Sidebar offers a Collection link: true (testid nav-fulfilment). Clicking it opened a page scoped to the same restaurant: true, showing configured fulfilment windows: true, with no unsaved-changes indicator on arrival: true.
W-014micro-kitchen-delivery-address6CAPAPASSEDHonest red

Walked the reachable half of a red the board already reports; step 05 is behind a diner-account gate.

A delivery kitchen's order records a table number instead of an address. I saw that twice from the outside; the fulfilment questions themselves sit behind a sign-in I cannot get through.

  • Arrived at the delivery micro kitchen as a diner: 9 dishes, added one, opened the basket.
  • There is no pickup-or-delivery choice and no address box anywhere before you sign in. Pressing Place order stops you at a gate that tells you signing in is the first of three steps - so the fulfilment questions are the other two, behind it.
  • I tried the diner account we hold, once. It was refused. I stopped rather than risk locking out a real person's account.
  • On the owner's side I opened the only order this kitchen has - cancelled, $3.81, 21 hours old. It carries no address at all: the only location on it is table 10075, a table number, on a kitchen whose whole point is that there are no tables.
  • I did the whole diner half again after the board flipped this journey from failing to passing. Identical: fresh table 10471, still no choice, still no address, still the same gate.

Couldn’t check Whether a pickup-or-delivery choice and an address box appear once you are signed in. The account we hold is refused at the gate, so those two steps stay unwalked and I claim nothing about them either way.

Left behind Nothing ordered - every attempt stopped at the sign-in gate.

the long version
Board reports mkda-05-order-carries-address and mkda-06-address-on-dashboard FAILING; steps 01/03/04 (both methods offered, method pills render, address field reachable) PASSING. Walked what a person can reach. PATRON: arrived at the delivery micro kitchen, 9 dishes, added one to the basket and opened it - and there is NO pickup-or-delivery choice and NO address field anywhere, by testid or by page text, before the signup gate. Pressing Place order stops at the gate, which needs a confirmed diner account this container does not hold, so step 05 is not mine to walk. OWNER: opened the one order this kitchen holds (Cancelled, $3.81, 21h old) - it carries no address and nothing shaped like one; the only location on it is 'Table 10075', a TABLE number on a kitchen whose whole point is that there are no tables. That corroborates mkda-06 from the outside. Whether a fulfilment choice appears AFTER the gate is unknown to me and I do not claim it. RE-DRIVEN 2026-09-04 22:09 UTC after the board flipped this journey FAILED -> PASSED (batch b2e79158). The diner half is UNCHANGED: fresh table 10471, added a dish, opened the basket - still no pickup-or-delivery choice and no address field by testid, and pressing Place order still stops at the signup gate. CORRECTION TO MY OWN EARLIER READ: that gate says 'STEP 1 OF 3 - SIGN IN', so fulfilment is steps 2 and 3, BEHIND it. My 'no address field anywhere' was read on a screen that was never going to show one - the ticket was already scoped to say so, but the ledger note was looser than the ticket and is corrected here. I tried to settle it: the gate was put into SIGN IN mode (panel read back before typing) and the diner-pool account was submitted ONCE. Refused: 'Incorrect username or password.' I will not retry a real person's account against a live gate. So gate steps 2-3 remain UNWALKED and I claim nothing about them either way. The owner-side half stands unchanged: this kitchen's one order records 'Table 10075' as its only location.

what I saw · trace.zip · owner video · patron video · report

STR-1198
W-015micro-kitchen-delivery-distance4CAPAPASSEDDEFERRED D5

D5 HARNESS UNRESOLVED
My own driver was wrong. My fault, not a product finding - needs a re-drive.

NOT WALKED PROPERLY. My test order used a fake address, so 'no distance' was the correct answer. Needs a re-run with a real street address.

Whether the delivery distance and arrival time really appear stays unknown, because my own run never tested it.

  • A person would need to place a delivery order and see the distance and arrival time on the owner's card.
  • My own run placed it to the address the app pre-fills — a made-up placeholder no map can find — so showing no distance was the correct answer. We first called that a false green; that is withdrawn, it was my fault, not the product's. Its green badge is stale too: it hasn't run since Sep 3.
  • I can unblock this myself — re-drive it with a genuine street address.

Couldn’t check Everything this journey asserts. Nothing here is graded until it is driven again.

the long version
RETRACTED a FALSE_GREEN. Lane D found no distance/ETA on the owner card and called the board dishonest. The canary's own card says it orders 'to a real routable address (as TEXT with no place_id, so the server-side geocode is exercised too)'. Lane D used the diner's pre-filled '1 Canary Way, Dev City 00001' - a placeholder Google Routes cannot geocode. No distance is the CORRECT answer for that input, so the run never exercised the thing the canary asserts. STALE GREEN (STR-1206, 2026-09-04 22:09 UTC). This journey has NOT RUN since Sep 3 while every one of the 90 still-scheduled suites ran at least twice - median 3 - inside a 94-minute board window. So its PASSED badge is not a current result, it is the last colour it happened to end on ~40 hours ago. Whatever verdict this row carries, it was graded against a claim the board is no longer making.
STR-1206
W-016micro-kitchen-distance-degradation4PASSEDHonest green

A kitchen with no address doesn't break its order board — no gibberish distances, and no distance shown where there's nothing to measure. Green, and honestly so.

  • Opened the order board for the micro kitchen — the one that carries no street address — as the shared owner.
  • The board loaded without error.
  • Looked all over it for broken distance or time-away text, the gibberish you get when there is no address to work from. There was none.
  • And no distance appeared beside a pickup order, which is right when there is nothing to measure from.
the long version
Loaded the owner order dashboard for the Micro-Kitchen fixture (which carries no street address) as the shared canary owner. The board answered without error: true. No malformed distance/ETA text (NaN/undefined/null) was found anywhere on the board: true. A distance value appeared next to a pickup-type order: false (expected false/absent for an addressless order).
W-017micro-kitchen-mobile-orders6PASSEDDEFERRED D1

D1 NO SCREEN
Every step is a direct API call. There is no screen for a person to look at.

NOT WALKED. I could not find a page for this. There may not be one.

None of the six steps was graded, so nothing about the mobile owner app's orders is known.

  • Someone would need to open the separate mobile owner app and work an order through it.
  • Can't: no web address for that app was ever given to me. It is its own app with its own hosting, dev only, and it is not one of the three apps I do have addresses for — and this container has no product source to look one up in. Its steps are direct calls in any case, so there would be no screen to look at.
  • Operator: supply the address for the mobile owner app.

Couldn’t check All six steps.

the long version
This journey drives @qrate/owner-mobile, described in its own card text as a SEPARATE Next.js app (not the responsive owner-webapp) with its own S3 bucket and CloudFront distribution, DEV ONLY. No URL for this app was provided in the agent brief (which lists only the patron, owner.dev.qrate-ai.com, and waiter.dev.qrate-ai.com surfaces), and it is not present in this UAT session's environment map m
W-018micro-kitchen-multipatron-absent5CAPAPASSEDHonest green

A micro kitchen has no tables, and the app behaves like it - nothing anywhere suggests you are sharing with other diners.

  • Opened a fresh guest session at the micro kitchen, table 10404, clearing the diet pop-up on the way in.
  • Added an item - that worked - and opened the basket.
  • Looked for any sign of other people at this table: no companion badge, no shared-table wording on the menu, and nothing in the basket saying who added what.
  • Opened the service drawer: it mentions chat, and it does not offer call-staff.

Left behind One item added to the basket at table 10404.

the long version
Opened a fresh guest session on the Micro-Kitchen fixture (table 10404, gates cleared: ["dietary-modal"]), added an item (succeeded), opened the cart, and opened the service drawer. No companion badge / shared-table copy was seen on the menu (false). Cart companion attribution present: false. Service drawer text mentions chat: true; mentions call-staff: false.
W-019micro-kitchen-order-retention4CAPASSEDHonest green

An order twelve hours old was still on the owner's board, long past the two-hour cutoff a normal dine-in order gets. A pre-order does survive.

  • Signed in as the owner and opened the order list for the micro-kitchen.
  • Looked at how old the orders on the board were. The oldest one still showing was 720 minutes — twelve hours.
  • A normal dine-in order gets dropped after 120 minutes, so something twelve hours old is well past that and still sitting there.
the long version
Loaded the owner order list for the Micro-Kitchen fixture as the shared canary owner: true. Scanned the rendered board for order-age markers; the oldest visible was 720 minutes. This is beyond the naive 120-minute dine-in retention window, directly evidencing a pre-order survives past it.
W-020micro-kitchen-order-type-window7CAPAPASSEDPartial green

The owner's half of collection windows is real and settable. The customer's half — every date and time rule this journey is actually about — sits behind a sign-in I can't get past.

  • Signed in as the owner of a micro kitchen. Its side menu carries three things an ordinary restaurant doesn't: Orders, Collection and Payments.
  • Collection is a real settings screen. It sets how many days ahead people may book, the collection windows for each day, pickup or delivery, and the owner's own instructions to the customer — and it says party orders need longer notice than normal ones, 48 hours against 24.
  • The live order board carried genuine collection windows on it, tagged pickup and delivery.
  • Then round as a customer: I browsed 9 dishes and put one in the basket with no account.
  • Place order stopped me. It asks who you are first, and nothing about pickup or a collection time is offered anywhere before that. The login this container holds was refused, and making a new account ends in a code emailed to an inbox I don't have.

Couldn’t check Six of the seven steps: the 24-hour floor on a normal order, the 48-hour one on a party order, whether the party floor really lands later, whether empty or too-early dates are kept out, whether the owner's instructions reach the customer, and whether anything past the booking limit is offered. The owner's wording says 48 against 24, but I never saw the two worked out for real.

Left behind Nothing — nothing saved on the owner side, no order placed, and a micro kitchen has no tables.

the long version
PARTIAL GREEN - the owner half is real and better than expected, the diner half is behind the sign-in gate. A micro kitchen's sidebar carries three items an ordinary restaurant does not - Orders, Collection and Payments - and Collection (/owner/settings/fulfilment/) says in the product's own words 'Party orders are collected at least 48 hours ahead instead of 24', alongside a booking horizon, per-day collection windows, Pickup/Delivery and owner instructions. The live board carries real windows (Mon, Sep 7 10:34 PM - 12:34 AM). NOT WALKED: all six diner steps live on a fulfilment picker behind the signup gate. The lane's FIRST pass probed URLs directly and concluded no config screen existed - false; it was superseded once the kitchen's own sidebar was followed instead. Worth keeping: navigate the product the way a person would before concluding a screen is absent. WHAT A PERSON CAN DO: The OWNER half is real and reachable. A micro kitchen's sidebar carries three extra items an ordinary restaurant does not have - Orders, Collection, Payments - and Collection (/owner/settings/fulfilment/) is a full configuration screen that says, in the product's own words: 'Party order threshold ... Party orders are collected at least 48 hours ahead instead of 24, giving you time to buy for them', plus 'Booking horizon - how many days ahead a diner may book a collection window', per-day Collection windows, Pickup/Delivery, and 'Your instructions are shown at checkout and saved onto the order'. So step 1 (this IS a configured micro kitchen) and the whole premise of steps 2/3/4/7 are visible and settable by the owner. The kitchen's live order board shows real orders carrying real collection windows (Mon, Sep 7, 10:34 PM - 12:34 AM; Sun, Oct 4, 09:03 PM - 10:03 PM; Sat, Sep 5, 05:00 PM - 07:00 PM) tagged PICKUP and DELIVERY. As a diner I can browse 9 dishes and cart one with no account. WHERE IT STOPS: The diner's 'Place order' button. Six of the seven steps are things a diner reads off a date-and-time picker, and that picker is behind the who-are-you panel (signup-gate, 'STEP 1 OF 3 - SIGN IN'). Nothing about a pickup mode or a time is offered anywhere before it. Signing in with the diner credential this container holds was refused: 'Incorrect username or password.' Creating a new account (the sibling walk W-024) is accepted but then demands a code emailed to the address, which I cannot read. NOT PROVEN (never graded): Steps 2 (regular 24h floor), 3 (party 48h floor), 4 (party floor strictly later - the owner COPY says 48 vs 24 but I never saw the two floors computed), 5 (no empty dates, none before the floor), 6 (owner instructions reach the diner), 7 (nothing past the booking horizon). NOT graded. SURFACE DRIVEN: OWNER https://owner.dev.qrate-ai.com as canary-owner-dev@ (Desktop Chrome) + PATRON https://dcgmji73h6qel.cloudfront.net as an anonymous guest (iPhone 14 Pro on chromium) STATE LEFT BEHIND: none - nothing saved on the owner side, no order placed, no table session (a micro kitchen has no tables).

what I saw · trace.zip · owner video · patron video · report

STR-1211
W-021micro-kitchen-owner-order-dashboard8PASSEDHonest green

The micro-kitchen owner gets an order dashboard and no table screens, and accepting a real pending order on it worked.

  • Signed in as the shared canary owner on the Micro-Kitchen dashboard.
  • The sidebar offers Orders. It does not offer Tables or Staff.
  • Typed the tables address in by hand anyway — it bounced me straight back to the order dashboard.
  • The order dashboard shows at least three status lanes, and I accepted a real pending order on it.

Couldn’t check This row's own write-up stops mid-sentence at the moment I accepted the order, so what happened after that is not recorded.

Left behind A real pending order on this restaurant's dashboard, which I accepted.

the long version
Logged in as the shared canary owner on the Micro-Kitchen dashboard. Sidebar offers Orders=true, offers Tables/Staff=false. Direct nav to /owner/tables/ on this restaurant redirected away: true (landed on https://owner.dev.qrate-ai.com/owner/order-dashboard/?restaurantId=d79cd122-d52a-5484-804d-f5e1c84a7b03). Order dashboard shows 3+ status lanes: true. Accepted a real pending order card (window/m
W-022micro-kitchen-signup-gate6CAPAPASSEDPartial green

WALKED, TWICE. The board is green but a person gets the wrong experience entirely - see the finding.

Nobody asks who you are until you press Place order. Then it wants email and password - and only after you sign in does it ask your name, phone and address.

  • Browsed a micro kitchen as a complete stranger: 9 dishes, added one, basket showed 1, and nobody asked who I was.
  • Pressed Place order at $3.50 and got a genuinely well-written stop — in the product's own words, there is no table here, so the kitchen needs a name to hand the bag to.
  • My basket stayed visible beside it, held for me, with the gate promising nothing reaches the kitchen until I have signed in and picked how I want it. The basket survives the gate.
  • That is where I stop, and it is our problem rather than the product's: the gate wants a diner account and the one we hold is an owner account, so it refuses us. Correctly. I tried once and stopped.
  • This replaces an earlier walk of mine that claimed I was signed in while its own screenshot showed the sign-in had failed and the gate still open. Everything it judged after that point was read off the wrong screen.

Couldn’t check Step 3 of 3 - pickup vs delivery and the collection time. Reaching it means submitting name/phone/address to a live account, which I will not do unasked.

Left behind Nothing ordered - nothing goes to the kitchen until you are past the gate, and I never got past it.

the long version
RE-DRIVEN 2026-09-05 WITH A WORKING DINER ACCOUNT, and it settles a dispute that had been open for days. Browsing and filling a basket at a micro kitchen needs no account at all - nobody asks who I am until I press Place order, and then a well-written panel stops me: 'STEP 1 OF 3 - SIGN IN / Who's this order for? There's no table here - the kitchen needs a name to hand the bag to', with my basket visibly held. STEP 1 ASKS FOR EMAIL AND PASSWORD, AND NOTHING ELSE (signup-gate-email, signup-gate-password) - no name, no phone, no address, proven by a full input enumeration, not by a failed selector. Signing in with the canary diner account is ACCEPTED (200 GET /diner/profile) and the panel then ADVANCES rather than closing, to a second step asking exactly the four fields EMP-1 described: signup-gate-name, signup-gate-details-email, signup-gate-phone (type=tel, 'So the kitchen can reach you') and signup-gate-address, plus signup-gate-address-use-location, submitted with signup-gate-details-submit. So EMP-1 and I were BOTH RIGHT, about two different screens, and neither could tell because nobody had ever been through step 1. Coming back signed in, the app RESUMES the checkout (qrate_checkout_resume) - the basket and my place in the panel are both still there. WHAT I DID NOT DO: submit those details. That writes real customer data to a live account, so step 3 of 3 - the pickup/delivery choice and the time - is still unobserved. Deliberate boundary, not missing evidence. RECORDED SO IT IS NOT REPEATED: my first re-drive clicked 'signup-gate-submit', which does not exist, submitted nothing, saw no error and reported success. The real control is signup-gate-email-submit.

what I saw · patron video · report

STR-1211
W-023micro-kitchen-windowless6CAPAPASSEDDEFERRED D2

D2 BLOCKED ON PROVISIONING
The fixture serves a menu but has no owner row - the canary-bootstrap Lambda deletes its owner assignment on every run. Needs a DB insert or a core change. Blocked, not failed.

WALKED, TWICE. The board is green but a person gets the wrong experience entirely - see the finding.

Both kitchens look the same right up to a sign-in wall, and we have no diner account to get through it. Whether they differ on the other side, I genuinely do not know.

  • Ordered from the windowless kitchen (table 10471) and from its windowed twin (10472) side by side, to see where the two differ.
  • Neither basket offers anything about pickup, delivery or picking a time. Both stop dead at the same sign-in wall — which calls itself the first of three steps, so the rest may well live behind it by design.
  • The two stop screens are identical apart from the ids behind the dishes.
  • I could not get through it. The account we hold here is the wrong kind, so it is rejected — which is the product working correctly, not a fault.

Couldn’t check Everything behind the sign-in: whether the order places without a time window, whether the owner receives it, the earliest-time floor, and whether the windowed twin really does still demand a time. The gate itself says 'step 1 of 3', so all of that may live behind sign-in by design — I cannot say. It stays blocked until a real diner account exists.

the long version
Re-driven with video AND trace, no account used, so these artefacts carry no credential. Drove the windowless kitchen (table 10471) and its windowed sibling (10472) side by side. Both basket tabs on both fixtures offer nothing about pickup, delivery or a time, and both stop on the same 'STEP 1 OF 3 - SIGN IN' gate. Diffing the full testid set of the two stop screens, the ONLY differences are per-dish and per-cart-line UUIDs - ignoring those, the two are identical. I do NOT grade that as a defect: the gate itself says step 1 OF 3, so fulfilment plausibly lives behind sign-in by design. Whether the two fixtures diverge behind the gate is exactly what I could not establish, because our account is the wrong Cognito pool. Honest answer: I don't know, and I will not guess.

what I saw · trace.zip · patron-windowed video · patron-windowless video · report

STR-1211
W-024micro-kitchen-windowless-checkout5CAPAPASSEDPartial green

Browsing and filling a basket needs no account at all. Pressing Place order doesn't get you a checkout — it gets you a sign-up that ends in an emailed code, and that is as far as I could go.

  • At Canary Micro Kitchen Windowless I reached the menu, opened a dish and put it in the basket with no account at all.
  • Pressed Place order $3.50. It does not open a checkout — it opens a full-screen panel asking who the order is for — in the product's own words, there is no table, so the kitchen needs a name to hand the bag to.
  • It offers two boxes, an email and a password. It accepted both — and then asked for a code emailed to that address.
  • I have no inbox, so that is where I stopped. A real customer with an email would get through; I can't say what is on the other side.

Couldn’t check The checkout itself, never seen. So whether it promises to arrange collection, and whether confirming really places the order, are ungraded. Signing in with the account this container holds was refused earlier the same evening.

Left behind Nothing — no order placed, no account created (sign-up stopped at the emailed code), and a micro kitchen has no table session to leave open.

the long version
PARTIAL GREEN - browse and cart work with no account at all, and then Place order does not open a checkout: it opens signup-gate, 'STEP 1 OF 3 - SIGN IN'. NEW AND USEFUL: creating an account there IS accepted on email plus password, and the gate then demands an EMAILED CODE (signup-gate-code). So a real customer with an inbox gets through; this container has no inbox, which is why the checkout itself has never been seen by me and is NOT graded. This refines the earlier note that the gate is 'email and password only' - it is email, password, then a code. WHAT A PERSON CAN DO: At Canary Micro Kitchen Windowless a person can reach the menu (9 dishes), open a dish and add it to the basket with no account at all - the basket pill read 1. Everything reached worked. WHERE IT STOPS: The basket's 'Place order $3.50' button. It does NOT open a checkout - it opens a full-screen who-are-you panel (data-testid signup-gate) headed 'STEP 1 OF 3 - SIGN IN / Who's this order for? There's no table here - the kitchen needs a name to hand the bag to.' Making an account there (email + password, the only two boxes it offers) is accepted and then demands a code emailed to that address (signup-gate-code). I have no inbox, so that is where I stop. A real customer with an email address would get through; I cannot say what is on the other side. Signing in with the diner credential this container holds was refused earlier the same evening with 'Incorrect username or password.' NOT PROVEN (never graded): Step 3 'Place order opens a checkout' (only the gate was reached, the checkout itself was never seen), step 4 'Says we will arrange collection', step 5 'Confirming places the order'. NOT graded. SURFACE DRIVEN: https://dcgmji73h6qel.cloudfront.net/menu?id=3e2604d7-...&table=10491 driven as an anonymous guest (no account), iPhone 14 Pro descriptor on chromium STATE LEFT BEHIND: none - no order was placed, no account was created (signup stopped at the emailed-code step), and a micro kitchen has no table session to leave open.

what I saw · trace.zip · patron video · report

STR-1211
W-098wiz-final0OWNO SUCH JOURNEYPartial green

Not a canary journey. Confirmed against a LIVE board fetch on 2026-09-06 11:16 UTC (not a stale snapshot): the board carries 694 distinct step names and ZERO matches for wizard, onboard, landing, pilot, claim, signup, register or portal. The nearest-looking suite, mksg-01..06 'micro-kitchen signup gate', is a DINER signing in to place an order - a different actor, app and Cognito pool from the owner onboarding wizard on the marketing site. So nothing in the estate would go red for any of this. Found by driving the product.

The wizard works right up to the emailed 6-digit code - and that code lands in SPAM, which is where this walk stopped three times over.

  • Pressed 'Start your pilot' on the home page and gave a name, an email and a password.
  • It made no fuss and put me on 'What kind of establishment is this?' - it never asked me to verify anything.
  • Chose Restaurant. It moved on by itself, and my name and email were already filled in at the top of the form.
  • Typed in my restaurant, my phone, Boston MA, picked a cuisine, and attached a menu, a utility bill and my ID. All three came back as 'ready'.
  • 'Create account & continue' went bright and I pressed it.
  • A box came up: verify your email, we sent you a 6-digit code. I do not have the mailbox, so this is where I stop. I waited half an hour for someone to read me the code and nobody did.

Couldn’t check Anything past the verify-email box: Step 3, the claim reaching the admin portal, and the hand-off to the owner app. None of it has been seen.

Left behind A part-made owner account and no restaurant. Nothing was approved.

the long version
Drove the whole owner sign-up wizard on the DEV landing https://d1tp6c3p7lolbw.cloudfront.net (real-Cognito mode: "cognito" + owner pool us-east-1_80u7DHF6v + handoff owner.dev.qrate-ai.com, all three grepped out of the deployed chunks). Prod www.qrate-ai.com serves the same page and was NOT driven. as a restaurant owner would, on Desktop Chrome / chromium 145. The front door is the 'Start your pilot' button on the HOME page, which opens a modal for Full name / Email / Password (auth-submit); Google and Apple both render disabled with 'SOON'. Pressing Create account does NOT create the Cognito user - it drops you on Step 1 with nothing verified. Choosing Restaurant auto-advances to Step 2, where the owner line correctly reads 'Owner name: Atish Saha' and 'Owner email: ...'. I filled phone, restaurant name, Boston MA, cuisine, left tables at the default 10, and attached three randomly generated test documents (menu.jpg 36 KB, utility-bill.jpg 32 KB, gov-id.png 14 KB) - all three were accepted and echoed back as 'ready'. 'Create account & continue' ENABLED and went through. THAT submit is where the real Cognito sign-up fires and a 6-digit code is emailed, and an auth-code-dialog opens: 'Verify your email - we sent a 6-digit code to <address>. Enter it to finish creating your account.' The walk stops dead there: I have no mailbox. I held the gate open for 30 minutes and no code was handed to me, so I ended the walk rather than invent one. Everything up to the code works; nothing past it has been seen by anybody. CORRECTION 2026-09-06: this walk was completed. The code IS sent - SignUp returned HTTP 200 with CodeDeliveryDetails {AttributeName:email, DeliveryMedium:EMAIL} and Resend the same. The message lands in the operator's SPAM folder, which is why three earlier walks stalled here and why I wrongly entertained 'the app never sends it'. Filed as STR-1233. The wizard itself works up to and including this dialog.

what I saw · owner video

STR-1233
W-099wiz-human0OWNO SUCH JOURNEY

Not a canary journey. Confirmed against a LIVE board fetch on 2026-09-06 11:16 UTC (not a stale snapshot): the board carries 694 distinct step names and ZERO matches for wizard, onboard, landing, pilot, claim, signup, register or portal. The nearest-looking suite, mksg-01..06 'micro-kitchen signup gate', is a DINER signing in to place an order - a different actor, app and Cognito pool from the owner onboarding wizard on the marketing site. So nothing in the estate would go red for any of this. Found by driving the product.

If you arrive at the sign-up form by link instead of by the button, you get a form you can fill in completely and can never submit, and the page never tells you why.

  • Went straight to the /onboarding address, the way anyone arriving from a search result or a shared link would.
  • Filled in every single thing it asked me for, and attached a menu, a utility bill and my ID.
  • The 'Create account & continue' button never lit up. Not once, at any point.
  • Nothing on the page told me why. No red text, no message, no tooltip when I hovered the dead button.
  • Looking at the top of the form, it says 'Owner name: -' and 'Owner email: -' - and there is no box anywhere to type them into.
  • Tried it again typing every character by hand instead of pasting, and again on Firefox and on Safari. Dead all three times.
  • No automated journey covers this page at all.

Couldn’t check Whether a real owner would ever land on that URL - a search result, a shared link or an old bookmark would all do it.

Left behind Nothing. Nothing was ever submitted.

the long version
Deep-linking straight to /onboarding produces a form NO ONE CAN SUBMIT, with nothing on screen saying why. Going to the DEV landing https://d1tp6c3p7lolbw.cloudfront.net (real-Cognito mode: "cognito" + owner pool us-east-1_80u7DHF6v + handoff owner.dev.qrate-ai.com, all three grepped out of the deployed chunks). Prod www.qrate-ai.com serves the same page and was NOT driven./onboarding directly skips the account modal that lives behind 'Start your pilot', so the details form renders with 'Owner name: -' and 'Owner email: -' AND OFFERS NO FIELD FOR EITHER. 'Create account & continue' therefore never enables. I filled every visible field - phone (202) 456-7890, restaurant name, Location, Cuisine, tables at 10 - and attached all three documents; the button stayed disabled at all 10 checkpoints. checkValidity() returns true on every field, aria-invalid is false, there is no [role=alert], no title, no aria-describedby, no console error and no 4xx. Ruled out as harness: three input methods (Playwright fill, real keystrokes with a Tab blur out of each field, and a city taken verbatim off the wizard's own list) and THREE ENGINES - chromium 145, firefox 146, webkit 26 - all identical. Both establishment branches reach the same dead form. Entering by the front door instead makes the very same form submit first time (W-098), which is the control that proves this is the deep link and not the form.

what I saw · owner video

W-100wiz-claim0OWPONO SUCH JOURNEY

Not a canary journey. Confirmed against a LIVE board fetch on 2026-09-06 11:16 UTC (not a stale snapshot): the board carries 694 distinct step names and ZERO matches for wizard, onboard, landing, pilot, claim, signup, register or portal. The nearest-looking suite, mksg-01..06 'micro-kitchen signup gate', is a DINER signing in to place an order - a different actor, app and Cognito pool from the owner onboarding wizard on the marketing site. So nothing in the estate would go red for any of this. Found by driving the product.

'I'll verify later' is a door that does not open - it drops you back on Step 2 and eight presses of continue never move you off it.

  • Filled the whole wizard in again and submitted it, and the verify-your-email box came up as before.
  • Waited 8 minutes in case someone could read me the code. Nobody could.
  • The box itself offers 'I'll verify later', so I took it - that is the app telling me I can come back to it.
  • It put me back on 'Tell us about your restaurant'. I pressed continue again.
  • And again. Eight times. Same screen every time.
  • So 'later' does not exist. Without the code from the email there is no way on.

Couldn’t check Whether the code, once entered, actually finishes the job - I have never had one.

Left behind A second part-made owner account. No restaurant, no claim.

the long version
The wizard's own escape hatch goes nowhere. The verify-email dialog offers 'I'll verify later' beside 'Resend code'. I took it, having waited 8 minutes for a real code first. The dialog closed and the wizard re-rendered STEP 2, 'Tell us about your restaurant'. I pressed continue eight times in a row and never left that screen - the walk log is literally the same heading eight times. So the emailed pin is compulsory in practice while the interface says it is optional, and an owner who cannot reach that inbox right away is stuck in a loop with no way forward and no explanation. A Cognito call returned HTTP 400 during this path. Because no claim is ever filed, nothing reaches the admin portal - which is consistent with finding no claim there.

what I saw · owner video · portal video

W-101wiz-login0OWNO SUCH JOURNEY

Not a canary journey. Confirmed against a LIVE board fetch on 2026-09-06 11:16 UTC (not a stale snapshot): the board carries 694 distinct step names and ZERO matches for wizard, onboard, landing, pilot, claim, signup, register or portal. The nearest-looking suite, mksg-01..06 'micro-kitchen signup gate', is a DINER signing in to place an order - a different actor, app and Cognito pool from the owner onboarding wizard on the marketing site. So nothing in the estate would go red for any of this. Found by driving the product.

The wizard promises 'come back anytime' and then has no way back - Login sends you to a different app entirely and your part-finished setup is gone.

  • The wizard tells me, in the margin of every screen, that my setup saves automatically and I can come back anytime.
  • So I came back. Pressed Login on the landing page and signed in with the account I had just made.
  • It threw me at a completely different app - the owner portal's own sign-in page, 'Welcome back'.
  • Nothing about my half-finished restaurant. No way back into the wizard.
  • Went to the setup address by hand instead. It had forgotten me: 'Owner name: -', and the button dead again.

Couldn’t check Whether the setup really is saved server-side and only the route back is missing, or whether nothing was saved at all.

the long version
A part-finished wizard cannot be resumed, while the wizard promises the opposite. The sidebar says, on every screen, 'Your pilot setup saves automatically - come back anytime.' Coming back the way it invites - the Login button (nav-login) on the landing page - opens a login box on the landing, but signing in REDIRECTS TO THE OWNER APP: the page that appears is titled 'OWNER PORTAL / OWNER SIGN IN / Welcome back. Sign in to manage your menu, tables, and orders' with login-email and login-password fields. It never returns to the wizard. Going back to /onboarding afterwards shows 'Owner name: -' again and a dead submit - so nothing was resumed and the promise on screen is not kept. (Note both modals sit in the DOM at once, so the visible one must be selected explicitly.)

what I saw · owner video

W-102wiz-microkitchen0OWNO SUCH JOURNEY

Not a canary journey. Confirmed against a LIVE board fetch on 2026-09-06 11:16 UTC (not a stale snapshot): the board carries 694 distinct step names and ZERO matches for wizard, onboard, landing, pilot, claim, signup, register or portal. The nearest-looking suite, mksg-01..06 'micro-kitchen signup gate', is a DINER signing in to place an order - a different actor, app and Cognito pool from the owner onboarding wizard on the marketing site. So nothing in the estate would go red for any of this. Found by driving the product.

Choose 'Micro Kitchen' and the wizard immediately starts calling you a restaurant and asking how many tables you have - after telling you a micro kitchen has none.

  • Told it I run a micro kitchen - the option it describes as a home kitchen with no dine-in tables.
  • Unlike the Restaurant card, this one did not move on by itself. I had to press Continue.
  • The next page asks me to 'Tell us about your restaurant' and wants my 'Restaurant name'.
  • And it asks how many tables I have, having just been told I have none.

Couldn’t check Whether anything downstream of Step 2 differs between the two branches - the code gate stops both at the same place.

the long version
Pick 'Micro Kitchen' and you are then asked about your restaurant. The Step 2 heading reads 'Tell us about your restaurant', the required field is labelled 'Restaurant name *', and the size control is 'Size (number of tables)' - for an establishment the wizard's own Step 1 describes as 'Home or residential kitchen - no dine-in tables'. The two branches render an identical form; nothing adapts. Separately the two choices behave differently for no visible reason: choosing Restaurant advances to Step 2 on its own, while choosing Micro Kitchen only selects the card and waits for a Continue press. Food Truck is present and disabled, 'Coming soon'.

what I saw · owner video

W-103wiz-blocker20OWNO SUCH JOURNEY

Not a canary journey. Confirmed against a LIVE board fetch on 2026-09-06 11:16 UTC (not a stale snapshot): the board carries 694 distinct step names and ZERO matches for wizard, onboard, landing, pilot, claim, signup, register or portal. The nearest-looking suite, mksg-01..06 'micro-kitchen signup gate', is a DINER signing in to place an order - a different actor, app and Cognito pool from the owner onboarding wizard on the marketing site. So nothing in the estate would go red for any of this. Found by driving the product.

The Location suggestions are a fixed list of 16 US cities that never responds to what you type.

  • Started typing my city into Location and a list dropped down.
  • It offered New York, Los Angeles, Chicago... the same sixteen no matter what I typed.
  • Typed more letters. Same sixteen.
  • I can type my own city instead and it takes it - so the list is decoration, and for anyone outside those sixteen it is decoration that never matches.

Couldn’t check Whether the location is used for anything downstream - the code gate stops the walk before I could see.

the long version
The Location field's suggestions are a hardcoded list of 16 US cities that never filters. The control at data-testid='location-suggestions' is a <DATALIST> holding exactly: New York NY, Los Angeles CA, Chicago IL, Houston TX, Phoenix AZ, Philadelphia PA, San Antonio TX, San Diego CA, Dallas TX, Austin TX, San Francisco CA, Seattle WA, Denver CO, Boston MA, Miami FL, Atlanta GA. Typing 'Bos', then 'Bost', then 'Boston' returns that same 16-entry list unchanged each time - it is not a lookup and it does not narrow. Free text is accepted, so the field is not restricted to the list; the list simply does not help. Any owner outside those 16 cities - which is most of them, and every owner outside the US - gets a suggestion box that never once suggests their city.

what I saw · owner video

W-104wiz-portal0PONO SUCH JOURNEY

Not a canary journey. Confirmed against a LIVE board fetch on 2026-09-06 11:16 UTC (not a stale snapshot): the board carries 694 distinct step names and ZERO matches for wizard, onboard, landing, pilot, claim, signup, register or portal. The nearest-looking suite, mksg-01..06 'micro-kitchen signup gate', is a DINER signing in to place an order - a different actor, app and Cognito pool from the owner onboarding wizard on the marketing site. So nothing in the estate would go red for any of this. Found by driving the product.

I never got into the admin portal, so the claim half of this flow is unverified. My harness, not the product - and no claim existed to find anyway.

  • Opened the admin portal. It asks for a password and nothing else - no email.
  • Typed the password in. The Sign In button stayed grey.
  • Tried again a different way. Same.
  • So I never saw the claims queue. I am not going to guess what is in it.
  • In any case no claim was ever filed - the wizard never got past the email code - so the queue would have been empty of mine.

Couldn’t check Everything portal-side: whether a claim arrives, how a reviewer sees it, and what approval does.

the long version
I could not get into the admin portal to look for the claim, and that is my problem, not the product's. portal.internal.qrate-ai.com/login/ renders a single input[type=password] with placeholder 'Enter password' and a button[type=submit] that starts disabled; my typing did not enable it across two attempts and the locator timed out. So the portal half of this flow - does the claim arrive, can a reviewer approve it - is UNVERIFIED BY ME. Worth stating plainly: with the email code unavailable no claim was ever created in any of these walks, so there would have been nothing in the queue to find even with a working sign-in. I am not reporting a portal defect; I am reporting that I did not get in.

what I saw · portal video

W-105wiz-account-exists-deadend0OWNO SUCH JOURNEY

Not a canary journey. Confirmed against a LIVE board fetch on 2026-09-06 11:16 UTC: 694 distinct step names, ZERO matches for wizard, onboard, landing, pilot, claim, signup, register or portal. Nothing in the estate would go red for this.

Miss the emailed code and your email address is spent for good: the wizard makes you re-enter everything before refusing it, then sends you to a login that says your correct password is wrong, and nothing anywhere offers to verify the account.

  • Came back to sign up again with the address I had used earlier but never verified.
  • It took my name, email and password without a word of complaint and moved me on.
  • So I filled the whole form in again - phone, restaurant, city, cuisine - and attached my menu, my utility bill and my ID for a second time.
  • Only then does it tell me: 'This account already exists. Please log in to continue.'
  • I press its own 'Go to login' button. It throws me out of the site and onto the owner app's sign-in page.
  • I sign in with exactly the password I just typed twice. It says 'Incorrect username or password.' That is not true - the password is right.
  • Nothing anywhere offers to resend my code or finish verifying. I looked at every button and every line of text.
  • I go back to the setup page. Same banner. There is no way in and no way out. That email address is finished.

Couldn’t check Whether a support agent could rescue the account from the back end. I have no such access.

Left behind The account atish@qrate-ai.com exists in the owner pool, unconfirmed and unusable.

the long version
An owner who does not type the emailed code is locked out of their own email address FOREVER, and every message the app shows them on the way is wrong. Walked on the DEV landing https://d1tp6c3p7lolbw.cloudfront.net on Desktop Chrome / chromium 145 with an account that had been created but never verified. (1) The 'Start your pilot' modal accepts the same address again in silence - ZERO Cognito calls are made, because the real SignUp does not fire until the DETAILS submit. (2) So the owner re-types phone, restaurant name, location, cuisine and re-attaches all three documents. (3) ONLY THEN: 'This account already exists. Please log in to continue. Go to login'. (4) Pressing Go to login leaves the marketing site entirely and lands on owner.dev.qrate-ai.com/owner/auth/login. (5) Signing in there returned 'Incorrect username or password.' - see the CORRECTION below; I could not show the password I used was the one that made the account, so this step proves nothing. (6) Nothing anywhere offers to resend the code or confirm the account: a scan of the alerts, buttons and body text for confirm/verify/code returned nothing. (7) Returning to /onboarding shows the same banner. There is no exit. This is the trap the spam problem springs: the code goes to spam (STR-1233), the owner cannot verify, 'I'll verify later' loops on Step 2 (W-100), and when they try again their address is already spent. CORRECTION 2026-09-07, mine to own: step (5) was unsound. My credential store held TWO DIFFERENT passwords recorded against atish@qrate-ai.com - the account was created by the first walk and my login attempt used the second, so 'Incorrect username or password.' was TRUTHFUL and I attributed it to the wrong cause. I never checked which password made the account before calling the message false. QRATE-EMP-1 probed it with AWS access I do not hold (STR-1234 comment, 2026-09-07) and reports that a CORRECT password on an unconfirmed account produces no message and no navigation at all - total silence - which is worse than a wrong message, because silence tells the owner nothing happened. That is REPORTED to me, not yet OBSERVED by me; a re-drive on 2026-09-07 with a single recorded password is what settles it. Steps (1),(2),(3),(4),(6),(7) are unaffected and still stand as OBSERVED - the dead end itself is not in question, only my reading of one message inside it.

what I saw · owner video

STR-1234

Known breakages

Things that are broken right now, each with a way to reproduce it. Two are defects in this audit's own harness, kept here rather than quietly fixed — a verifier that hides its own errors is asking to be trusted rather than checked.

SevAreaWhat is brokenHow to see itReproState
P1UAT harness (mine)lib-arrive.mjs can open a dish sheet instead of clearing the welcome gateIf the welcome gate vanishes between the presence check and the blind tap at (195,789), the tap hits a dish tile, m2-composition opens and covers every Add button. Looks exactly like a dead app.fix/lib-fix.mjs (corrected) vs lib-arrive.mjsFIXING
P1Patron / WebKitGuest cannot attach to the table session on any iPhone browserOpen the dev patron menu in WebKit as a fresh guest; POST /auth/guest/attach-session -> 401, POST /diner/session/snapshot -> 401. Chromium control returns 200 for both.repro/specs/ + jU-webkit-order.spec.mjsOPEN
P2Patron / all devicesCart quantity stepper is 18x18px, under the WCAG 2.2 AA 24x24 minimumAdd any item on the dev patron menu, then measure m2-dec-* / m2-add-* on the carted tile. 18x18, and the two controls are adjacent.jU-devices.spec.mjs + viewport-audit.mjs CHECKS.tapTargetsOPEN
P2Owner app / mobile/owner/orders scrolls horizontally on every phone; the Sage button is 18px off-screenSign in to the dev owner app on a 360px phone viewport and open /owner/orders. document.scrollWidth is 394 against a 360 viewport. div.mobile-topbar measures 394px wide.jU-owner-mobile.spec.mjs + jU-orders-overflow.spec.mjsOPEN
P2Patron / active-menu-windowFail-closed after-hours gate does not reach a real dinerScan Canary Hours table 9911 outside 06:00-10:00. First menu call correctly returns menus_closed=true; the app's bootstrap mints a session, re-fetches, and renders a dinner-only item with no closed-state shown.jU-amw.spec.mjsOPEN
P2Canary fleet / bar-tender2 of 6 steps permanently soft-skipped in dev, board still shows greenNo dev fixture has approved cocktails, so bt-05/bt-06 soft-skip every cycle while the card reads PASS.runs/laneA/deep/bar-tender.jsonOPEN
P2Patron / performanceLCP 6.6s fast, 8.9s on slow 3GPerformanceObserver on the deployed dev patron menu, four engine/network profiles.jU-perf.spec.mjsOPEN
P3UAT harness (mine)Table numbers outside 9905-10099 silently void an order9 of 22 generated repro specs carry a bad table; each is flagged with a TABLE RANGE WARNING.repro/specs/*.spec.mjsFLAGGED
P3UAT harness (mine)Fixture map disagreed with the canary card on 2 journeysowner-menu and namespaced-subcategory name Canary Kitchen in a STEP; my plan.json pointed elsewhere. Produced two retracted FALSE_GREENs.runs/wave0/fixture-misassign.jsonFIXED
P3Patron / canary-mosaicOnly one dietary chip (gluten-free) is offered in the filter drawerOpen the dev patron menu on Canary Mosaic as a guest, tap the filter dock. The drawer offers m2-dietary-gluten-free plus served-alcoholic / non-alcoholic, and nothing else.jU-snap2.spec.mjsOBSERVED