{
  "version": 2,
  "synthetic": true,
  "article": "floor-plan-to-set",
  "source": "Actual Laydyne MCP (Streamable HTTP) of an isolated local Pro Studio session; fictional store. Numbers are copied from the tool results named under each \"from\".",
  "options": {
    "A": "as-drawn: the plan as drawn (first set)",
    "B": "revised: the four owner-approved fixes (hand-over plans)",
    "C": "finished-look: B dressed for customer pictures; same footprints, positions, aisles and simulation ids (the published project)"
  },
  "input": {
    "file": "input-plan.png",
    "bytes": 129281,
    "sha256": "8047a6d0300eb773e81c78c90faa38753a1a63d0745b668e1011dd8c7b36f021",
    "pixels": [
      2000,
      1730
    ],
    "scale": "1:100 (100 px = 1 m)",
    "fictional": true,
    "note": "Drawn for this test from a known layout (the answer key). The AI saw only this picture and the public agent guide (/agents/laydyne/SKILL.md)."
  },
  "native": {
    "file": "files/corner-market.laydyne.json",
    "bytes": 1180476,
    "sha256": "20d51020ec3ae96aacf431c773f7841fbba9b2c548a58c635c7b32f30b41be6f",
    "capture": {
      "file": "publish-3/corner-market.laydyne.json",
      "bytes": 1180476,
      "sha256": "20d51020ec3ae96aacf431c773f7841fbba9b2c548a58c635c7b32f30b41be6f"
    },
    "note": "Option C exported through MCP, without the session change log; holds design options A, B and C, process options v1-v3 and the saved comparisons. Robot stations are moved only where Studio would move them on opening; they are not part of any spaceHash.",
    "stationsMoved": []
  },
  "plans": {
    "file": "files/corner-market-plans.pdf",
    "bytes": 57352,
    "sha256": "08401c01af5c008d6d809574eed21f1eb036fa130e3c7e057f82597012dfa5f0",
    "option": "B",
    "pages": 3,
    "sheet": "A3 landscape, 1:100, Rev B 2026-10-15",
    "contents": "Plan sheet with areas, then two quantity schedule pages with every part ID",
    "whyNotC": "C's sheet (publish-3, 4 pages) counts the decorative parts as fixtures: 36 instead of 15, with 12 crate stacks and 9 signs listed beside the shelves, and the chilled cases and produce tables drop out of the area table's fixture rows."
  },
  "report": {
    "file": "files/checkout-comparison.html",
    "bytes": 360088,
    "sha256": "3216aefc5d0402afb89d98c0d03cd5729525e60da1826bb10568ece59e7ecfe0",
    "option": "C",
    "note": "get_process_comparison format \"html\" on the finished layout, as captured."
  },
  "pictures": {
    "hero": {
      "file": "images/model-3d.webp",
      "bytes": 90528,
      "sha256": "66082e2154f3f2b502ac39e1d9cd15e3385b18e539dffe7ce3a4156366dedd8e",
      "view": "C, solid, paper theme, studio light, bearing 200°, 52° above, overhead hidden"
    },
    "street": {
      "file": "images/storefront.webp",
      "bytes": 60608,
      "sha256": "04bf7c0f3be73ccbc0b0cbf295766f05dd2f52d95a3d1b38ed838aba7e154cff",
      "view": "C from the south-west street side, bearing 215°, 18° above"
    }
  },
  "mcp": {
    "from": "docs/verification/plan-to-set/operations/calls.jsonl (one line per call: tool, ok, ms)",
    "total": 86,
    "firstBuild": {
      "calls": 34,
      "failed": [
        {
          "n": 5,
          "tool": "set_underlay",
          "reason": "The picture’s SHA-256 does not match what was sent: send it again from offset 0."
        },
        {
          "n": 19,
          "tool": "put_process_scenario",
          "reason": "Branch must be the last step: the job goes on in the process it picks, so subsequent steps are unreachable."
        }
      ],
      "firstCallAt": "2026-10-14T14:53:21.859Z",
      "lastCallAt": "2026-10-14T15:06:26.266Z",
      "firstToLastCallSeconds": 784,
      "toolExecutionSeconds": 19.6,
      "tools": {
        "get_space": 2,
        "get_part_catalog": 3,
        "create_space": 1,
        "set_underlay": 2,
        "trace_underlay": 1,
        "edit_space": 2,
        "measure_underlay_fit": 1,
        "check_space": 2,
        "get_view_image": 7,
        "get_process_catalog": 2,
        "put_process_scenario": 2,
        "run_process_scenario": 2,
        "sweep_process_parameters": 1,
        "compare_process_scenarios": 1,
        "get_process_state": 1,
        "get_process_series": 1,
        "get_space_quantities": 1,
        "export_project": 1,
        "save_local_project": 1
      }
    },
    "revision": {
      "calls": 18,
      "failed": [],
      "firstCallAt": "2026-10-14T15:12:27.346Z",
      "lastCallAt": "2026-10-14T15:14:47.209Z",
      "firstToLastCallSeconds": 140,
      "toolExecutionSeconds": 8.6,
      "tools": {
        "save_design_option": 2,
        "save_process_option": 2,
        "edit_space": 2,
        "check_space": 1,
        "compare_design_options": 1,
        "compare_process_options": 1,
        "sweep_process_parameters": 1,
        "run_process_scenario": 1,
        "get_view_image": 4,
        "get_space_quantities": 1,
        "export_project": 1,
        "save_local_project": 1
      }
    },
    "finishing": {
      "calls": 34,
      "failed": [],
      "firstCallAt": "2026-10-14T15:39:27.884Z",
      "lastCallAt": "2026-10-14T15:46:30.069Z",
      "firstToLastCallSeconds": 422,
      "toolExecutionSeconds": 17.2,
      "tools": {
        "get_space": 1,
        "get_part_catalog": 10,
        "edit_space": 4,
        "check_space": 2,
        "get_view_image": 7,
        "list_process_options": 1,
        "save_process_option": 1,
        "compare_process_options": 1,
        "sweep_process_parameters": 1,
        "run_process_scenario": 1,
        "save_design_option": 1,
        "get_space_quantities": 1,
        "export_project": 2,
        "save_local_project": 1
      }
    },
    "operator": {
      "from": "operations/publish-calls.jsonl",
      "lines": 47,
      "note": "The operator's own calls, not counted as the AI's work: the capture of publish-2 (18), two calls refused while the Studio tab was closed, the restore of B with import_project before the finishing round, a catalog check, and the capture of publish-3 (19)."
    },
    "windowNote": "First to last MCP call in each phase. Excludes reading the plan and the guide before the first call and the waits for the owner's replies. Not a comparison with another tool."
  },
  "model": {
    "from": "measure_underlay_fit (#11), get_space_quantities",
    "building": "16.00 x 12.00 m outside, 0.20 m walls, 0.10 m partitions",
    "floorAreaSquareMetres": 192,
    "zones": {
      "salesFloor": 162.42,
      "stockRoom": 14,
      "wc": 3.4,
      "queue1": 2.88,
      "queue2": 2.88
    },
    "fitToPlan": {
      "partsMeasured": 34,
      "points": 3154,
      "medianMillimetres": 5.4,
      "p95Millimetres": 7.2,
      "maxMillimetres": 21.2,
      "shareWithin1cm": 0.998
    },
    "quantities": {
      "B": {
        "parts": 34,
        "byKind": {
          "shelf": 6,
          "zone": 5,
          "wall": 4,
          "partition": 4,
          "door": 4,
          "fridge_case": 3,
          "display": 2,
          "window": 2,
          "checkout": 2,
          "pos_terminal": 2
        }
      },
      "C": {
        "parts": 88,
        "byKind": {
          "block": 33,
          "crate_stack": 12,
          "sign": 9,
          "shelf": 6,
          "zone": 5,
          "wall": 4,
          "partition": 4,
          "door": 4,
          "fridge_case": 3,
          "display": 2,
          "window": 2,
          "checkout": 2,
          "pos_terminal": 2
        }
      }
    },
    "assumed": [
      "walls and partitions 3.0 m high",
      "doors 2.1 m (entrance 2.2 m)",
      "windows: sill 0.6 m, 1.8 m high",
      "produce tables 0.9 m in A/B, 0.75 m in C under the crates; bakery 1.6 m; checkout counters 1.0 m",
      "the small rectangle at each checkout read as the till"
    ]
  },
  "answerKey": {
    "from": "docs/verification/plan-to-set/checks/score.json (scripts/score.mjs on the first, as-drawn model)",
    "items": 29,
    "exact": 28,
    "within10cm": 29,
    "notExact": {
      "item": "wc-south",
      "part": "partition-wc-south",
      "dxMetres": 0.1,
      "dwMetres": -0.1,
      "note": "Starts 0.10 m further east, where it meets the WC west partition; the wall line is the same."
    },
    "heightsScored": false
  },
  "checks": {
    "from": "check_space (#12 and #32 for A; #39 for B; #80 for C; the publication captures)",
    "minimumClearanceMetres": 0.9,
    "A": {
      "total": 4,
      "issues": [
        {
          "type": "narrow_gap",
          "severity": "critical",
          "parts": [
            "door-wc",
            "partition-wc-south"
          ],
          "gapMetres": 0.8,
          "message": "The opening of WC door (door-wc) in WC partition (south) (partition-wc-south) is 0.8 m wide (< 0.9 m)."
        },
        {
          "type": "door_blocked",
          "severity": "critical",
          "parts": [
            "produce-1",
            "door-stock"
          ],
          "message": "Produce 1 (produce-1) stands in front of Stock room door (door-stock): keep its 0.9 m width clear 0.9 m deep on both sides to open it and walk through."
        },
        {
          "type": "narrow_gap",
          "severity": "major",
          "parts": [
            "partition-stock-south",
            "bakery"
          ],
          "gapMetres": 0.6,
          "message": "Passage between Stock room partition (south) (partition-stock-south) and Bakery (bakery) is 0.6 m wide (< 0.9 m)."
        },
        {
          "type": "narrow_gap",
          "severity": "major",
          "parts": [
            "produce-1",
            "produce-2"
          ],
          "gapMetres": 0.6,
          "message": "Passage between Produce 1 (produce-1) and Produce 2 (produce-2) is 0.6 m wide (< 0.9 m)."
        }
      ]
    },
    "B": {
      "total": 0,
      "adviceNotShown": "6 gap(s) not shown (inside one group 0, between parked vehicles 0, behind or between furniture, narrower than a person with the way round it open 6); they are advice, not walkways to clear: pass gaps:\"all\" to list them."
    },
    "C": {
      "total": 0,
      "adviceNotShown": "6 gap(s) not shown (inside one group 0, between parked vehicles 0, behind or between furniture, narrower than a person with the way round it open 6); they are advice, not walkways to clear: pass gaps:\"all\" to list them.",
      "duringWork": "Before the fixes in #64-#66 the preview showed 12 overlaps from the produce sets' own tables and 2 canopy posts outside the floor."
    }
  },
  "revision": {
    "from": "edit_space (#37 preview, #38 apply), compare_design_options (#41)",
    "approvedBy": "the owner (the user), after the check",
    "changes": [
      {
        "part": "door-wc",
        "change": "width 0.80 -> 0.90 m (hinge side kept)"
      },
      {
        "part": "produce-1",
        "change": "moved 0.35 m south (z 4.40 -> 4.75), size unchanged; clears the stock-room door"
      },
      {
        "part": "produce-2",
        "change": "moved 0.75 m south (z 6.80 -> 7.55), size unchanged; gap between the tables 0.60 -> 1.00 m"
      },
      {
        "part": "bakery",
        "change": "moved 0.60 m north (z 4.40 -> 3.80) against the stock-room partition; closes the 0.60 m dead end"
      }
    ],
    "compareDesignOptions": "A: as drawn (v1) -> B: revised: 3 moved, 4 changed; the other 30 parts unchanged",
    "quantitiesChanged": false
  },
  "finishing": {
    "from": "docs/verification/plan-to-set/work/notes.md (仕上げ（見た目）), calls #53-#86",
    "request": "Make the 3D pictures for customers look like a real shop (goods on the shelves; chillers, produce tables, bakery, checkouts and the shop front close to a real store), keeping the dimensions, positions and aisles of the plan.",
    "rules": "Footprints, positions, aisles, ids, labels and the tags the simulation uses (shelf, checkout, queue, entrance) unchanged. Decorative parts inside the existing footprints and blocks:false, except the shop front and the displays on the produce tables.",
    "parts": {
      "before": 34,
      "after": 88,
      "added": {
        "block": 33,
        "crate_stack": 12,
        "sign": 9
      }
    },
    "catalogPlaced": [
      {
        "item": "grocery-produce-table",
        "count": 2,
        "where": "on Produce 1 and 2, rotated -90° to their 1.20 x 1.80 footprints",
        "handling": "the set's own tables removed; produce-1/2 kept as the tables (0.90 -> 0.75 m high); steps, 12 crate stacks and 2 price rails"
      },
      {
        "item": "storefront-entrance-canopy",
        "count": 1,
        "where": "over the entrance on the south wall, x 6.50-9.50",
        "handling": "its two posts stood outside the floor and were removed: cantilevered; 2.65 -> 2.25 m high, above the 2.2 m door"
      },
      {
        "item": "fascia-sign",
        "count": 1,
        "where": "south wall, x 5.00-11.00",
        "handling": "\"Corner Market\", widened 4.0 -> 6.0 m and lowered to 2.45-2.95 m to fit the assumed 3.0 m wall"
      }
    ],
    "builtByHand": [
      "Chilled 1-3: 11 parts each (4 goods tiers, glass front, 5 frames, a \"CHILLED\" header), after grocery-glass-door-cooler",
      "Bakery: stocked look and a \"BAKERY\" sign",
      "Checkouts: lane plates \"1\" and \"2\" on the counters",
      "Gondolas A-D: goods colour per run; wall shelving stocked; south wall in the storefront charcoal",
      "room.overhang 1.6 m on the south side of the floor for the canopy and sign; floor area, outline and routes unchanged"
    ],
    "catalogNotUsed": [
      {
        "item": "grocery-glass-door-cooler",
        "why": "2.25 x 0.80 x 2.25 m against the drawn 2.80 x 0.90 x 2.00 m chillers"
      },
      {
        "item": "grocery-gondola-run",
        "why": "4.50 m long and 1.80 m high with end caps, against 4.80 m and 1.60 m"
      },
      {
        "item": "gondola-end-cap",
        "why": "would reach into the 1.45 m aisle in front of the chillers and the queue side"
      },
      {
        "item": "grocery-bakery-counter",
        "why": "3.80 x 2.30 m bakery department against the drawn 0.90 x 3.00 m bakery"
      },
      {
        "item": "grocery-checkout-lane",
        "why": "2.40 x 2.30 m with an impulse shelf that enters the queue and the aisle, against 0.80 x 1.60 m"
      },
      {
        "item": "basket-stand",
        "why": "not on the plan; would add a fixture in the way (needs the owner's consent)"
      },
      {
        "item": "grocery-storefront, storefront-glazing-bay",
        "why": "bring their own wall, windows and door 3.6 m high and would replace the south wall, the windows and the entrance the simulation uses"
      }
    ],
    "checks": 0,
    "simulation": "Same scenario and seeds on C: no change beyond the noise at any of the 10 points (2 open at 60/h: 5.96 s; 1 open at 60/h: 91.1 s).",
    "projectExport": "779 KB -> 1.10 MB (two pieces) with three design options, three process options and the comparisons",
    "browserSave": "\"Corner Market — Ground floor (finished look)\" in the restarted tab"
  },
  "simulation": {
    "from": "work/v2/simulation.json (B, sweep #44) and work/simulation.json (C, sweep #77); comparisons from get_process_comparison",
    "engine": "process-des-2.7.0",
    "assumptions": {
      "arrivals": "random (Poisson), entering for 70 minutes; the first 10 minutes are not counted",
      "shopping": "1-4 fixtures per shopper, chosen at random among 11; 10-60 s at each (mode 25 s)",
      "payment": "24-80 s per shopper (mode 40 s, mean 48 s)",
      "checkouts": "two open: the free checkout, else the shorter line; one open: everyone uses Checkout 1; each open checkout is staffed",
      "walking": "1.0 m/s round the fixtures; no crowd physics, no balking, no sales prediction",
      "runs": "20 runs per case, seeds 1-20, 95 % intervals (Student t)"
    },
    "atSixtyPerHour": {
      "B": {
        "from": "saved comparison 93c203c7-25fa-4a57-a6d7-9b11661e707d on the revised layout B (fnv1a-446d5d62), 20 paired runs",
        "meanWaitSeconds": {
          "oneOpen": 91.12,
          "twoOpen": 5.96,
          "difference": -85.16,
          "interval95": [
            -110.67,
            -59.65
          ]
        },
        "longestWaitCheckout1Seconds": {
          "oneOpen": 285.68,
          "twoOpen": 58.12,
          "difference": -227.57,
          "interval95": [
            -281.04,
            -174.1
          ]
        },
        "longestLineCheckout1": {
          "oneOpen": 6.1,
          "twoOpen": 1.35,
          "difference": -4.75,
          "interval95": [
            -5.79,
            -3.71
          ]
        },
        "meanTimeInStoreSeconds": {
          "oneOpen": 254.36,
          "twoOpen": 167.51,
          "difference": -86.85,
          "interval95": [
            -112.39,
            -61.32
          ]
        }
      },
      "C": {
        "from": "saved comparison cdcf679d-7dee-40db-a92b-306dd4343ded on the finished layout C (fnv1a-35f8c7b9), 20 paired runs",
        "meanWaitSeconds": {
          "oneOpen": 91.08,
          "twoOpen": 5.96,
          "difference": -85.12,
          "interval95": [
            -110.65,
            -59.59
          ]
        },
        "longestWaitCheckout1Seconds": {
          "oneOpen": 285.66,
          "twoOpen": 56.66,
          "difference": -228.99,
          "interval95": [
            -281.45,
            -176.53
          ]
        },
        "longestLineCheckout1": {
          "oneOpen": 6.1,
          "twoOpen": 1.35,
          "difference": -4.75,
          "interval95": [
            -5.79,
            -3.71
          ]
        },
        "meanTimeInStoreSeconds": {
          "oneOpen": 254.36,
          "twoOpen": 167.55,
          "difference": -86.81,
          "interval95": [
            -112.36,
            -61.25
          ]
        }
      }
    },
    "oneCheckoutCapacityPerHour": 75,
    "capacityNote": "3600 s / 48 s. With one checkout the mean wait is 18 s at 30 shoppers/h, 40 s at 45/h and 91 s at 60/h; one checkout copes up to about 30-45 shoppers an hour.",
    "sweep": {
      "B": [
        {
          "openCheckouts": 1,
          "shoppersPerHour": 30,
          "meanWaitSeconds": 17.8,
          "meanWaitInterval95": [
            12.7,
            23
          ],
          "longestWaitSeconds": 103,
          "longestLineCheckout1": 2.5,
          "meanTimeInStoreSeconds": 181.1
        },
        {
          "openCheckouts": 1,
          "shoppersPerHour": 45,
          "meanWaitSeconds": 40.3,
          "meanWaitInterval95": [
            32.1,
            48.5
          ],
          "longestWaitSeconds": 169.5,
          "longestLineCheckout1": 3.7,
          "meanTimeInStoreSeconds": 202.8
        },
        {
          "openCheckouts": 1,
          "shoppersPerHour": 60,
          "meanWaitSeconds": 91.1,
          "meanWaitInterval95": [
            64.5,
            117.7
          ],
          "longestWaitSeconds": 285.7,
          "longestLineCheckout1": 6.1,
          "meanTimeInStoreSeconds": 254.4
        },
        {
          "openCheckouts": 1,
          "shoppersPerHour": 75,
          "meanWaitSeconds": 243,
          "meanWaitInterval95": [
            168,
            318
          ],
          "longestWaitSeconds": 541.9,
          "longestLineCheckout1": 11.6,
          "meanTimeInStoreSeconds": 406
        },
        {
          "openCheckouts": 1,
          "shoppersPerHour": 90,
          "meanWaitSeconds": 550.6,
          "meanWaitInterval95": [
            431.6,
            669.6
          ],
          "longestWaitSeconds": 1065.7,
          "longestLineCheckout1": 23,
          "meanTimeInStoreSeconds": 711.9
        },
        {
          "openCheckouts": 2,
          "shoppersPerHour": 30,
          "meanWaitSeconds": 1.8,
          "meanWaitInterval95": [
            1,
            2.7
          ],
          "longestWaitSeconds": 24.4,
          "longestLineCheckout1": 0.7,
          "meanTimeInStoreSeconds": 163.5
        },
        {
          "openCheckouts": 2,
          "shoppersPerHour": 45,
          "meanWaitSeconds": 3.1,
          "meanWaitInterval95": [
            2.4,
            3.9
          ],
          "longestWaitSeconds": 36.5,
          "longestLineCheckout1": 1.1,
          "meanTimeInStoreSeconds": 164
        },
        {
          "openCheckouts": 2,
          "shoppersPerHour": 60,
          "meanWaitSeconds": 6,
          "meanWaitInterval95": [
            4.6,
            7.3
          ],
          "longestWaitSeconds": 58.1,
          "longestLineCheckout1": 1.4,
          "meanTimeInStoreSeconds": 167.5
        },
        {
          "openCheckouts": 2,
          "shoppersPerHour": 75,
          "meanWaitSeconds": 10.8,
          "meanWaitInterval95": [
            8.7,
            13
          ],
          "longestWaitSeconds": 79.7,
          "longestLineCheckout1": 1.7,
          "meanTimeInStoreSeconds": 171.9
        },
        {
          "openCheckouts": 2,
          "shoppersPerHour": 90,
          "meanWaitSeconds": 16.4,
          "meanWaitInterval95": [
            13.3,
            19.5
          ],
          "longestWaitSeconds": 97.3,
          "longestLineCheckout1": 2.2,
          "meanTimeInStoreSeconds": 177.8
        }
      ],
      "C": [
        {
          "openCheckouts": 1,
          "shoppersPerHour": 30,
          "meanWaitSeconds": 17.8,
          "meanWaitInterval95": [
            12.7,
            23
          ],
          "longestWaitSeconds": 102.7,
          "longestLineCheckout1": 2.5,
          "meanTimeInStoreSeconds": 181.1
        },
        {
          "openCheckouts": 1,
          "shoppersPerHour": 45,
          "meanWaitSeconds": 40.3,
          "meanWaitInterval95": [
            32.1,
            48.5
          ],
          "longestWaitSeconds": 169.5,
          "longestLineCheckout1": 3.8,
          "meanTimeInStoreSeconds": 202.8
        },
        {
          "openCheckouts": 1,
          "shoppersPerHour": 60,
          "meanWaitSeconds": 91.1,
          "meanWaitInterval95": [
            64.5,
            117.7
          ],
          "longestWaitSeconds": 285.7,
          "longestLineCheckout1": 6.1,
          "meanTimeInStoreSeconds": 254.4
        },
        {
          "openCheckouts": 1,
          "shoppersPerHour": 75,
          "meanWaitSeconds": 243,
          "meanWaitInterval95": [
            168,
            318
          ],
          "longestWaitSeconds": 541.9,
          "longestLineCheckout1": 11.6,
          "meanTimeInStoreSeconds": 406
        },
        {
          "openCheckouts": 1,
          "shoppersPerHour": 90,
          "meanWaitSeconds": 550.6,
          "meanWaitInterval95": [
            431.6,
            669.6
          ],
          "longestWaitSeconds": 1065.7,
          "longestLineCheckout1": 23,
          "meanTimeInStoreSeconds": 711.9
        },
        {
          "openCheckouts": 2,
          "shoppersPerHour": 30,
          "meanWaitSeconds": 1.8,
          "meanWaitInterval95": [
            1,
            2.7
          ],
          "longestWaitSeconds": 24.4,
          "longestLineCheckout1": 0.7,
          "meanTimeInStoreSeconds": 163.5
        },
        {
          "openCheckouts": 2,
          "shoppersPerHour": 45,
          "meanWaitSeconds": 3.1,
          "meanWaitInterval95": [
            2.4,
            3.9
          ],
          "longestWaitSeconds": 36.5,
          "longestLineCheckout1": 1.1,
          "meanTimeInStoreSeconds": 164.1
        },
        {
          "openCheckouts": 2,
          "shoppersPerHour": 60,
          "meanWaitSeconds": 6,
          "meanWaitInterval95": [
            4.6,
            7.3
          ],
          "longestWaitSeconds": 56.7,
          "longestLineCheckout1": 1.4,
          "meanTimeInStoreSeconds": 167.5
        },
        {
          "openCheckouts": 2,
          "shoppersPerHour": 75,
          "meanWaitSeconds": 10.8,
          "meanWaitInterval95": [
            8.7,
            12.9
          ],
          "longestWaitSeconds": 78.2,
          "longestLineCheckout1": 1.8,
          "meanTimeInStoreSeconds": 171.9
        },
        {
          "openCheckouts": 2,
          "shoppersPerHour": 90,
          "meanWaitSeconds": 16.4,
          "meanWaitInterval95": [
            13.3,
            19.5
          ],
          "longestWaitSeconds": 97.2,
          "longestLineCheckout1": 2.1,
          "meanTimeInStoreSeconds": 177.8
        }
      ]
    },
    "revisionEffect": "No change beyond the noise in any waiting-time or queue measure at any of the 10 points; walking and time in store change by fractions of a second or a few metres.",
    "finishingEffect": "No change beyond the noise in any waiting-time or queue measure at any of the 10 points. Paired at 2 checkouts / 60 per hour: mean wait +0.005 s and every checkout wait and line measure within noise; total walking +1.9 m per run (about 3 cm per shopper) and time in store +0.04 s are beyond noise but negligible."
  },
  "gaps": [
    "trace_underlay missed the short partitions beside the WC door and the stock-room door, read the 0.90 m stock-room door as 1.49 m, did not return the dashed queue areas and returned the sales floor and WC as one region",
    "Partitions exist only as glass partitions: the WC walls looked glass in 3D (fixed with an opaque material) and the quantities still say \"Glass partition\"",
    "No open-front chilled case, no stocked wall shelving or bakery in the base parts; rooms are zones drawn by hand",
    "No direct way to set how many checkouts are open, with their queue areas; done with a weighted branch, which must be the last step (one rejected call)",
    "Waiting shoppers stand at one point; a line in an aisle does not slow other shoppers",
    "get_process_catalog without a section returns 124 KB",
    "The A3 sheet drops the names of narrow parts (wall shelving, checkouts) and has no dimension chains along the walls: less dimension information than the source plan",
    "check_space treats the dead-end gap behind the bakery as a passage",
    "compare_process_options cannot override parameters, so the before/after comparison with one checkout open was read from two sweeps rather than paired",
    "Each saved option stores the whole building: the export grew from 328 KB (A) to 779 KB (B) and 1.10 MB (C)",
    "measure_underlay_fit does not tell an approved move from a misread part",
    "Results do not keep their JSON in the same place: get_view_image puts its description first",
    "Catalog sets cannot be fitted to drawn footprints: place keeps their size, and a set brings its own body beside the existing part; only the produce table fitted this store",
    "place gives generic ids and labels (display-1, block-3, sign-3) that cannot be set when placing; a second edit was needed",
    "Decorations count as fixtures in the quantities and on the sheet (36 instead of 15); the catalog cooler builds its glass as a partition and its frames as columns, which would add to the partition length and column count",
    "Shop front: the catalog sizes assume a 3.6 m frontage; canopy posts stand off the floor, so they had to go; nothing (pavement, street) can stand outside the floor, so the street picture floats on a plain background",
    "Sign text always faces south (+z): no outward sign on another face",
    "Goods are plain coloured boxes; no price rails, product variety, fruit shapes, bread baskets, belts, scanners, ceiling, lighting or floor finish"
  ],
  "operatorIssuesFixedDuringRun": [
    "The command-line MCP client hashed the base64 text instead of the picture bytes for set_underlay; the first call was refused (SHA-256 mismatch) and the AI sent the picture again",
    "The same client kept only the first text block, which dropped the SVG of get_view_image; the first set has a PNG sheet, the revised set the SVG",
    "The first publication capture (publish-2) saved get_process_comparison format \"html\" with its JSON wrapper; the capture script was fixed and publish-3 holds the page itself"
  ]
}
