{
  "slug": "mosaic_v2-electronic-pay",
  "restaurant_id": "7766d206-244c-576d-be4b-f5e746bf9832",
  "tables_driven": [
    9983,
    9993,
    9994,
    9995,
    9996
  ],
  "why_multiple_tables": "Each attempt walked one branch further; a table already carrying a settled/settling session was left alone and a fresh table used, so each walk started clean. 9983 was the brief's table; 9996 is the run that reached Stripe.",
  "viewport": "390x844 hasTouch isMobile chromium",
  "canary_steps": [
    "1 P1 Join",
    "2 P2 Join",
    "3 P1 Add",
    "4 P2 Add",
    "5 Co-Order (WS)",
    "6 WAITER POS + Serve",
    "7 Cover Whole-Table -> Pay-How Fork",
    "8 Real Check Math",
    "9 Stripe Payment Element Mounts",
    "10 Pay 4242 -> Settled Receipt",
    "11 Second Check Bills ONLY the New Food"
  ],
  "step_reached": "9 of 11. Steps 7, 8 and 9 all reached and observed. Step 10 deliberately NOT attempted.",
  "two_diners_joined": {
    "answer": "YES",
    "p1_screen": "P1 cart header: \"1 Hulk (You)\", \"2 All\", \"1 Beckett\" (first run) \u2014 two distinct guests on one table.",
    "p2_screen": "P2 arrived on the same table URL and had its own cart; the cover picklist on P1 later listed the other guest by name, e.g. [cover-pick-039db7a1-84cb-5e6a-993c-2322a36ad599] \"C Cutler Beckett\"."
  },
  "payment_controls_after_co_order": {
    "how_reached": "post-order home -> [layout-service-button] -> [service-bubble-ready_for_bill] \"Check Please Ready to settle up\"",
    "settle_fork_header": "How would you like to settle your bill?",
    "settle_fork": [
      {
        "testid": "settlement-cover",
        "text": "Cover"
      },
      {
        "testid": "settlement-split",
        "text": "Split the check (2)"
      }
    ],
    "cover_scope": {
      "header": "Who are you covering?",
      "controls": [
        {
          "testid": "cover-scope-just-me",
          "text": "Just me"
        },
        {
          "testid": "cover-scope-someone",
          "text": "Someone on the table"
        },
        {
          "testid": "cover-scope-table",
          "text": "The whole table"
        }
      ]
    },
    "pay_how_fork": {
      "header": "You're covering the whole table / Almost there.",
      "controls": [
        {
          "testid": "payhow-pay-now",
          "text": "Pay now on my phone\nApple Pay, Google Pay or card"
        },
        {
          "testid": "payhow-server",
          "text": "Have my server bring it\nCash or card at the table"
        },
        {
          "testid": null,
          "text": "\u2190 Back"
        }
      ]
    },
    "pay_your_check_sheet": {
      "container": "pay-your-check",
      "chrome": [
        {
          "testid": "pyc-grabber",
          "text": "Swipe down to close"
        },
        {
          "testid": "pyc-title",
          "text": "The Check"
        },
        {
          "testid": "pyc-close",
          "text": "Close"
        }
      ],
      "first_state": "\"The Check / Loading your check\u2026\" for roughly 5-10 seconds",
      "loaded_state_literal": "ON THE TABLE / 1x Canary Cola $3.50 / Subtotal $3.50 / Tax $0.31 / Amount due $3.81 / ADD A TIP / 18% $0.69 / 20% $0.76 / 25% $0.95 / Custom \u2014 / 100% of your tip goes to tonight's floor & kitchen team. / Total with tip $4.57 / Continue to payment",
      "tip_controls": [
        {
          "testid": "pyc-tip-18",
          "text": "18% $0.69"
        },
        {
          "testid": "pyc-tip-20",
          "text": "20% $0.76"
        },
        {
          "testid": "pyc-tip-25",
          "text": "25% $0.95"
        },
        {
          "testid": "pyc-tip-custom",
          "text": "Custom \u2014"
        }
      ],
      "cta": {
        "testid": "pyc-continue",
        "text": "Continue to payment"
      },
      "backing_api": "GET https://l2esmzysv9.execute-api.us-east-1.amazonaws.com/dev/payments/summary?... -> HTTP 200, body {\"currency\":\"USD\",\"subtotal\":{\"amount_minor\":350},\"tax\":{\"amount_minor\":31},\"table_total\":{\"amount_minor\":381},\"remaining\":{\"amount_minor\":381},\"settled\":false,\"shares\":[...]}"
    },
    "after_continue_to_payment": {
      "screen_text": "The Check / Card details never touch the restaurant \u2014 processed by our payment partner. / Pay $4.57",
      "controls": [
        {
          "testid": "pyc-pay-btn",
          "text": "Pay $4.57",
          "disabled": true,
          "note": "DISABLED because no card had been entered. This is the button that would charge."
        }
      ]
    }
  },
  "controls_asked_about": {
    "split": "PRESENT \u2014 [settlement-split] \"Split the check (2)\".",
    "cover_the_whole_table": "PRESENT \u2014 [cover-scope-table] literal text \"The whole table\". Driven; it leads to the pay-how fork.",
    "cover_just_me": "PRESENT \u2014 [cover-scope-just-me] literal text \"Just me\".",
    "extra_found_not_asked_about": "[cover-scope-someone] \"Someone on the table\"; [payhow-pay-now] / [payhow-server]; the whole pay-your-check sheet [pyc-*]."
  },
  "stripe": {
    "mounted": true,
    "when": "about 5 seconds after tapping [pyc-continue] \"Continue to payment\". NOT before \u2014 it does not mount on the check/tip screen (I watched that screen for a full 120s and saw 0 iframes).",
    "evidence": "4 iframes appeared, all js.stripe.com: __privateStripeFrame6953 title=\"Secure payment input frame\" src=https://js.stripe.com/v3/elements-inner-accessory-target-*.html (visible); __privateStripeController6951 src=https://js.stripe.com/v3/controller-with-preconnect-*.html; __privateStripeFrame6954 title=\"Stripe developer tools frame\" src=https://js.stripe.com/v3/elements-inner-easel-*.html (visible); hcaptcha-invisible src=https://js.stripe.com/v3/hcaptcha-invisible-*.html",
    "screenshot": "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-watch-50-continue-t5s.png"
  },
  "stopped_at": "the Stripe payment-method screen, with \"Pay $4.57\" [pyc-pay-btn] on screen and DISABLED.",
  "stopped_why": "DELIBERATE. I did not type 4242 4242 4242 4242 into the Stripe card field and I did not tap Pay. No card was charged. Canary steps 10 and 11 were therefore not driven.",
  "note": "Canary steps 6/8/10/11/12 are WAITER steps. This container has no waiter credentials, so no waiter step was driven. Everything below is the PATRON surface only.",
  "screenshots": [
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-01-p1-arrived.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-02-p2-arrived.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-03-p1-after-p2-joined.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-04-p1-added.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-05-p2-added.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-06-p1-order-dock.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-07-p1-after-co-order.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-08-p1-post-order-home.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-09-p1-service-sheet.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-10-p1-settle-fork.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-11-p1-cover.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-12-p1-cover.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-12-p1-whole-table.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-13-p1-cover-whole-table.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-14-p1-pay-now-on-my-phone.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-14-p1-pay-surface.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-20-p2-after-p1-settled.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-watch-30-t5s.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-watch-33-t20s.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-watch-36-t35s.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-watch-39-t50s.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-watch-42-t65s.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-watch-45-t80s.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-watch-48-t95s.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-watch-50-continue-t5s.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-watch-51-t110s.png",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-watch-90-final.png"
  ],
  "surface_dumps": [
    "mosaic_v2-electronic-pay-01-p1-arrived.surface.txt",
    "mosaic_v2-electronic-pay-02-p2-arrived.surface.txt",
    "mosaic_v2-electronic-pay-03-p1-after-p2-joined.surface.txt",
    "mosaic_v2-electronic-pay-06-p1-order-dock.surface.txt",
    "mosaic_v2-electronic-pay-07-p1-after-co-order.surface.txt",
    "mosaic_v2-electronic-pay-08-p1-post-order-home.surface.txt",
    "mosaic_v2-electronic-pay-09-p1-service-sheet.surface.txt",
    "mosaic_v2-electronic-pay-10-p1-settle-fork.surface.txt",
    "mosaic_v2-electronic-pay-11-p1-cover.surface.txt",
    "mosaic_v2-electronic-pay-12-p1-cover.surface.txt",
    "mosaic_v2-electronic-pay-12-p1-whole-table.surface.txt",
    "mosaic_v2-electronic-pay-13-p1-cover-whole-table.surface.txt",
    "mosaic_v2-electronic-pay-14-p1-pay-now-on-my-phone.surface.txt",
    "mosaic_v2-electronic-pay-14-p1-pay-surface.surface.txt",
    "mosaic_v2-electronic-pay-20-p2-after-p1-settled.surface.txt",
    "mosaic_v2-electronic-pay-watch-30-t5s.surface.txt",
    "mosaic_v2-electronic-pay-watch-33-t20s.surface.txt",
    "mosaic_v2-electronic-pay-watch-36-t35s.surface.txt",
    "mosaic_v2-electronic-pay-watch-39-t50s.surface.txt",
    "mosaic_v2-electronic-pay-watch-42-t65s.surface.txt",
    "mosaic_v2-electronic-pay-watch-45-t80s.surface.txt",
    "mosaic_v2-electronic-pay-watch-48-t95s.surface.txt",
    "mosaic_v2-electronic-pay-watch-50-continue-t5s.surface.txt",
    "mosaic_v2-electronic-pay-watch-51-t110s.surface.txt",
    "mosaic_v2-electronic-pay-watch-90-final.surface.txt"
  ],
  "logs": [
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay.log.txt",
    "/workspace/uat/lane-pay/mosaic_v2-electronic-pay-watch.log.txt"
  ]
}