{
 "about": "Every number in the layout-search article (2026-10-07) with the file it was read from. Raw Codex logs (apps/studio/.wrangler/opt3/logs/) are kept outside git; their summaries are in docs/verification/layout-search/opt3/runs/.",
 "facts": [
  {
   "id": "amr.model",
   "value": "gpt-6.1-sol",
   "unit": null,
   "what": "amr: model (Codex session file)",
   "source": "docs/verification/layout-search/opt3/runs/amr.json"
  },
  {
   "id": "amr.effort",
   "value": "max",
   "unit": null,
   "what": "amr: reasoning effort (Codex session file)",
   "source": "docs/verification/layout-search/opt3/runs/amr.json"
  },
  {
   "id": "amr.seconds",
   "value": 2862,
   "unit": "s",
   "what": "amr: wall time of the Codex run",
   "source": "docs/verification/layout-search/opt3/runs/amr.json"
  },
  {
   "id": "amr.toolCalls",
   "value": 245,
   "unit": "calls",
   "what": "amr: MCP tool calls",
   "source": "docs/verification/layout-search/opt3/runs/amr.json"
  },
  {
   "id": "amr.failed",
   "value": 5,
   "unit": "calls",
   "what": "amr: failed MCP tool calls",
   "source": "docs/verification/layout-search/opt3/runs/amr.json"
  },
  {
   "id": "amr.input_tokens",
   "value": 4561772,
   "unit": "tokens",
   "what": "amr: input_tokens",
   "source": "docs/verification/layout-search/opt3/runs/amr.json"
  },
  {
   "id": "amr.cached_input_tokens",
   "value": 4359680,
   "unit": "tokens",
   "what": "amr: cached_input_tokens",
   "source": "docs/verification/layout-search/opt3/runs/amr.json"
  },
  {
   "id": "amr.output_tokens",
   "value": 51877,
   "unit": "tokens",
   "what": "amr: output_tokens",
   "source": "docs/verification/layout-search/opt3/runs/amr.json"
  },
  {
   "id": "amr.reasoning_output_tokens",
   "value": 35065,
   "unit": "tokens",
   "what": "amr: reasoning_output_tokens",
   "source": "docs/verification/layout-search/opt3/runs/amr.json"
  },
  {
   "id": "amr.calls.search_layouts",
   "value": 5,
   "unit": "calls",
   "what": "amr: search_layouts calls (3 failed)",
   "source": "docs/verification/layout-search/opt3/runs/amr.json"
  },
  {
   "id": "amr.calls.put_process_scenario",
   "value": 80,
   "unit": "calls",
   "what": "amr: put_process_scenario calls (0 failed)",
   "source": "docs/verification/layout-search/opt3/runs/amr.json"
  },
  {
   "id": "amr.calls.run_process_scenario",
   "value": 80,
   "unit": "calls",
   "what": "amr: run_process_scenario calls (0 failed)",
   "source": "docs/verification/layout-search/opt3/runs/amr.json"
  },
  {
   "id": "hall.model",
   "value": "gpt-6-astra",
   "unit": null,
   "what": "hall: model (Codex session file)",
   "source": "docs/verification/layout-search/opt3/runs/hall.json"
  },
  {
   "id": "hall.effort",
   "value": "xhigh",
   "unit": null,
   "what": "hall: reasoning effort (Codex session file)",
   "source": "docs/verification/layout-search/opt3/runs/hall.json"
  },
  {
   "id": "hall.seconds",
   "value": 426,
   "unit": "s",
   "what": "hall: wall time of the Codex run",
   "source": "docs/verification/layout-search/opt3/runs/hall.json"
  },
  {
   "id": "hall.toolCalls",
   "value": 40,
   "unit": "calls",
   "what": "hall: MCP tool calls",
   "source": "docs/verification/layout-search/opt3/runs/hall.json"
  },
  {
   "id": "hall.failed",
   "value": 5,
   "unit": "calls",
   "what": "hall: failed MCP tool calls",
   "source": "docs/verification/layout-search/opt3/runs/hall.json"
  },
  {
   "id": "hall.input_tokens",
   "value": 2356542,
   "unit": "tokens",
   "what": "hall: input_tokens",
   "source": "docs/verification/layout-search/opt3/runs/hall.json"
  },
  {
   "id": "hall.cached_input_tokens",
   "value": 2231936,
   "unit": "tokens",
   "what": "hall: cached_input_tokens",
   "source": "docs/verification/layout-search/opt3/runs/hall.json"
  },
  {
   "id": "hall.output_tokens",
   "value": 10996,
   "unit": "tokens",
   "what": "hall: output_tokens",
   "source": "docs/verification/layout-search/opt3/runs/hall.json"
  },
  {
   "id": "hall.reasoning_output_tokens",
   "value": 3628,
   "unit": "tokens",
   "what": "hall: reasoning_output_tokens",
   "source": "docs/verification/layout-search/opt3/runs/hall.json"
  },
  {
   "id": "hall.calls.search_layouts",
   "value": 8,
   "unit": "calls",
   "what": "hall: search_layouts calls (5 failed)",
   "source": "docs/verification/layout-search/opt3/runs/hall.json"
  },
  {
   "id": "hall.calls.run_process_scenario",
   "value": 3,
   "unit": "calls",
   "what": "hall: run_process_scenario calls (0 failed)",
   "source": "docs/verification/layout-search/opt3/runs/hall.json"
  },
  {
   "id": "clinic.model",
   "value": "gpt-6-astra",
   "unit": null,
   "what": "clinic: model (Codex session file)",
   "source": "docs/verification/layout-search/opt3/runs/clinic.json"
  },
  {
   "id": "clinic.effort",
   "value": "xhigh",
   "unit": null,
   "what": "clinic: reasoning effort (Codex session file)",
   "source": "docs/verification/layout-search/opt3/runs/clinic.json"
  },
  {
   "id": "clinic.seconds",
   "value": 371,
   "unit": "s",
   "what": "clinic: wall time of the Codex run",
   "source": "docs/verification/layout-search/opt3/runs/clinic.json"
  },
  {
   "id": "clinic.toolCalls",
   "value": 30,
   "unit": "calls",
   "what": "clinic: MCP tool calls",
   "source": "docs/verification/layout-search/opt3/runs/clinic.json"
  },
  {
   "id": "clinic.failed",
   "value": 3,
   "unit": "calls",
   "what": "clinic: failed MCP tool calls",
   "source": "docs/verification/layout-search/opt3/runs/clinic.json"
  },
  {
   "id": "clinic.input_tokens",
   "value": 1488994,
   "unit": "tokens",
   "what": "clinic: input_tokens",
   "source": "docs/verification/layout-search/opt3/runs/clinic.json"
  },
  {
   "id": "clinic.cached_input_tokens",
   "value": 1363968,
   "unit": "tokens",
   "what": "clinic: cached_input_tokens",
   "source": "docs/verification/layout-search/opt3/runs/clinic.json"
  },
  {
   "id": "clinic.output_tokens",
   "value": 8566,
   "unit": "tokens",
   "what": "clinic: output_tokens",
   "source": "docs/verification/layout-search/opt3/runs/clinic.json"
  },
  {
   "id": "clinic.reasoning_output_tokens",
   "value": 2760,
   "unit": "tokens",
   "what": "clinic: reasoning_output_tokens",
   "source": "docs/verification/layout-search/opt3/runs/clinic.json"
  },
  {
   "id": "clinic.calls.put_process_scenario",
   "value": 5,
   "unit": "calls",
   "what": "clinic: put_process_scenario calls (0 failed)",
   "source": "docs/verification/layout-search/opt3/runs/clinic.json"
  },
  {
   "id": "clinic.calls.search_layouts",
   "value": 5,
   "unit": "calls",
   "what": "clinic: search_layouts calls (3 failed)",
   "source": "docs/verification/layout-search/opt3/runs/clinic.json"
  },
  {
   "id": "clinic.calls.run_process_scenario",
   "value": 1,
   "unit": "calls",
   "what": "clinic: run_process_scenario calls (0 failed)",
   "source": "docs/verification/layout-search/opt3/runs/clinic.json"
  },
  {
   "id": "amr.search.candidatesInSpace",
   "value": 300,
   "unit": "candidates",
   "what": "warehouse search: candidatesInSpace",
   "source": "docs/articles/layout-search/files/amr-search-results.json"
  },
  {
   "id": "amr.search.rejected",
   "value": 60,
   "unit": "candidates",
   "what": "warehouse search: rejected",
   "source": "docs/articles/layout-search/files/amr-search-results.json"
  },
  {
   "id": "amr.search.simulated",
   "value": 240,
   "unit": "candidates",
   "what": "warehouse search: simulated",
   "source": "docs/articles/layout-search/files/amr-search-results.json"
  },
  {
   "id": "amr.search.missedThresholds",
   "value": 138,
   "unit": "candidates",
   "what": "warehouse search: missedThresholds",
   "source": "docs/articles/layout-search/files/amr-search-results.json"
  },
  {
   "id": "amr.search.elapsedSeconds",
   "value": 19.06,
   "unit": "s",
   "what": "warehouse search: elapsedSeconds",
   "source": "docs/articles/layout-search/files/amr-search-results.json"
  },
  {
   "id": "amr.search.rejections",
   "value": {
    "outside_floor": 52,
    "finding:overlap": 8
   },
   "unit": "candidates",
   "what": "warehouse search: reasons ruled out before running",
   "source": "docs/articles/layout-search/files/amr-search-results.json"
  },
  {
   "id": "amr.search.rank1",
   "value": {
    "robots": 3,
    "move-2": {
     "x": 17,
     "z": 27.5
    },
    "spacing-3": 4
   },
   "unit": null,
   "what": "warehouse search: rank 1 choices",
   "source": "docs/articles/layout-search/files/amr-search-results.json"
  },
  {
   "id": "amr.search.rank2",
   "value": {
    "robots": 3,
    "move-2": {
     "x": 15,
     "z": 27.5
    },
    "spacing-3": 4
   },
   "unit": null,
   "what": "warehouse search: rank 2 choices",
   "source": "docs/articles/layout-search/files/amr-search-results.json"
  },
  {
   "id": "amr.best.wait",
   "value": {
    "measure": "run.wait.mean",
    "goal": "min",
    "value": 141.105,
    "low": 107.65,
    "high": 174.56
   },
   "unit": "s",
   "what": "warehouse best: mean wait with 95 % interval",
   "source": "docs/articles/layout-search/files/amr-search-results.json"
  },
  {
   "id": "amr.best.distance",
   "value": {
    "value": 4968.77,
    "low": 4809.39,
    "high": 5128.14
   },
   "unit": "m",
   "what": "warehouse best: robot fleet distance, 2.5 h window",
   "source": "docs/articles/layout-search/files/amr-search-results.json"
  },
  {
   "id": "amr.A.wait",
   "value": {
    "measure": "run.wait.mean",
    "goal": "min",
    "value": 658.462,
    "low": 519.147,
    "high": 797.777
   },
   "unit": "s",
   "what": "option A (current layout): mean wait",
   "source": "docs/articles/layout-search/files/amr-search-results.json"
  },
  {
   "id": "amr.A.distance",
   "value": {
    "value": 15452.4,
    "low": 15342.4,
    "high": 15562.5
   },
   "unit": "m",
   "what": "option A: robot fleet distance",
   "source": "docs/articles/layout-search/files/amr-search-results.json"
  },
  {
   "id": "amr.orders.Option A",
   "value": {
    "robots": 4,
    "mean": 99.68,
    "low": 99.07,
    "high": 100.29,
    "allJobsMean": 102.38
   },
   "unit": "orders/h",
   "what": "customer orders completed an hour in the observation window, 20 seeds (Option A); recomputed from the per-seed records",
   "source": "docs/articles/layout-search/files/amr-order-audit.json"
  },
  {
   "id": "amr.orders.Option B",
   "value": {
    "robots": 3,
    "mean": 108.98,
    "low": 106.45,
    "high": 111.51,
    "allJobsMean": 112.06
   },
   "unit": "orders/h",
   "what": "customer orders completed an hour in the observation window, 20 seeds (Option B); recomputed from the per-seed records",
   "source": "docs/articles/layout-search/files/amr-order-audit.json"
  },
  {
   "id": "amr.orders.Search best (proposal completion metric)",
   "value": {
    "robots": 3,
    "mean": 109.32,
    "low": 106.8,
    "high": 111.84,
    "allJobsMean": 112.42
   },
   "unit": "orders/h",
   "what": "customer orders completed an hour in the observation window, 20 seeds (Search best (proposal completion metric)); recomputed from the per-seed records",
   "source": "docs/articles/layout-search/files/amr-order-audit.json"
  },
  {
   "id": "amr.orders.Highest aggregate-throughput candidate",
   "value": {
    "robots": 5,
    "mean": 109.52,
    "low": 106.93,
    "high": 112.11,
    "allJobsMean": 112.64
   },
   "unit": "orders/h",
   "what": "customer orders completed an hour in the observation window, 20 seeds (Highest aggregate-throughput candidate); recomputed from the per-seed records",
   "source": "docs/articles/layout-search/files/amr-order-audit.json"
  },
  {
   "id": "amr.orders.bestMinusB",
   "value": {
    "n": 20,
    "mean": 0.33999999999999775,
    "low": 0.11052230568206645,
    "high": 0.569477694317929,
    "withinNoise": false
   },
   "unit": "orders/h",
   "what": "customer orders, search best minus option B, paired",
   "source": "docs/articles/layout-search/files/amr-order-audit.json"
  },
  {
   "id": "amr.answer",
   "value": "**Search best uses 3 BF-T1s**, with the bench block centred at **(17, 27.5) m**, at **4 m spacing**. All 300 combinations were tried; 60 failed geometry checks. The applied leader had no layout-check issues.\n\nIt is the **best of the candidates searched using the proposal’s completion metric, not a proven optimum**. But it does **not pass a strict mean target of 110 customer orders/h** on these seeds: the proposal metric also counts charging jobs.\n\nMeans [95% intervals], using the same 20 runs starting at seed 20261006. Distance is total robot-fleet travel over the 2.5-hour observation.\n\n| Option | Robots | Bench block centre; spacing (m) | Customer orders/h | Average wait (s) | Robot distance (km) |\n|---|---:|---|---:|---:|---:|\n| A | 4 | ≈(47, 29.5); 4 | 99.68 [99.07–100.29] | 658.5 [519.1–797.8] | 15.452 [15.342–15.562] |\n| B | 3 | ≈(17.5, 27.5); 7 | 108.98 [106.45–111.51] | 163.5 [122.7–204.3] | 5.677 [5.517–5.837] |\n| Search best | 3 | (17, 27.5); 4 | 109.32 [106.80–111.84] | 141.1 [107.7–174.6] | 4.969 [4.809–5.128] |\n\nThe saved-option comparisons and order-only audits show these paired differences are **beyond the noise**:\n\n- **Versus B:** wait −22.4 s [−31.0–−13.8], distance −708 m [−764–−653], customer throughput +0.34/h [0.11–0.57].\n- **Versus A:** wait −517.4 s [−631.1–−403.6], distance −10.484 km [−10.673–−10.294], customer throughput +9.64/h [7.32–11.96].\n\nFor reconciliation, the original aggregate throughput figures were **102.38 / 112.06 / 112.42 jobs/h**. Even the highest aggregate-throughput candidate, using five robots, audited at **109.52 customer orders/h**. A verified 110-order/h recommendation has therefore not been established.\n\nThe model omits robot traffic and collision avoidance, physical queue lengths, turning and load envelopes, acceleration and battery physics. Charging uses scheduled resource holds; picking, outbound loading and automatic return-home trips are absent.\n\n**“Customer layout” and “Search best” are saved; “Customer layout” is restored.**\n\n[2D differences plan](/private/tmp/opt3-work/amr/artifacts/cv-layout-search/search-best-diff.svg) · [3D view](/private/tmp/opt3-work/amr/artifacts/cv-layout-search/search-best-3d.png) · [Full review](/private/tmp/opt3-work/amr/artifacts/cv-layout-search/review.md)",
   "unit": null,
   "what": "the agent's final answer (paired differences against B and A from compare_process_options)",
   "source": "docs/verification/layout-search/opt3/runs/amr.json"
  },
  {
   "id": "hall.search.candidatesInSpace",
   "value": 60,
   "unit": "candidates",
   "what": "hall search: candidatesInSpace",
   "source": "docs/articles/layout-search/files/hall-search-evidence.json"
  },
  {
   "id": "hall.search.rejected",
   "value": 0,
   "unit": "candidates",
   "what": "hall search: rejected",
   "source": "docs/articles/layout-search/files/hall-search-evidence.json"
  },
  {
   "id": "hall.search.simulated",
   "value": 20,
   "unit": "candidates",
   "what": "hall search: simulated",
   "source": "docs/articles/layout-search/files/hall-search-evidence.json"
  },
  {
   "id": "hall.search.missedThresholds",
   "value": 40,
   "unit": "candidates",
   "what": "hall search: missedThresholds",
   "source": "docs/articles/layout-search/files/hall-search-evidence.json"
  },
  {
   "id": "hall.search.elapsedSeconds",
   "value": 18.54,
   "unit": "s",
   "what": "hall search: elapsedSeconds",
   "source": "docs/articles/layout-search/files/hall-search-evidence.json"
  },
  {
   "id": "hall.search.rank1",
   "value": {
    "values": {
     "alternatives-1": "Stage at the far end; aisles 0.9 m",
     "move-2": {
      "dx": -4,
      "dz": 0
     }
    },
    "distance": 123115,
    "vsBest": null
   },
   "unit": "m",
   "what": "hall search: rank 1",
   "source": "docs/articles/layout-search/files/hall-search-evidence.json"
  },
  {
   "id": "hall.search.rank2",
   "value": {
    "values": {
     "alternatives-1": "Stage at the far end; aisles 0.9 m",
     "move-2": {
      "dx": 0,
      "dz": 0
     }
    },
    "distance": 123336,
    "vsBest": {
     "run.distance.total": {
      "mean": 221.369,
      "low": -384.356,
      "high": 827.093,
      "withinNoise": true
     },
     "run.wait.mean": {
      "mean": -0.1042,
      "low": -1.3639,
      "high": 1.1556,
      "withinNoise": true
     }
    }
   },
   "unit": "m",
   "what": "hall search: rank 2",
   "source": "docs/articles/layout-search/files/hall-search-evidence.json"
  },
  {
   "id": "hall.search.rank3",
   "value": {
    "values": {
     "alternatives-1": "Stage at the far end; aisles 0.9 m",
     "move-2": {
      "dx": 4,
      "dz": 0
     }
    },
    "distance": 123406,
    "vsBest": {
     "run.distance.total": {
      "mean": 291.447,
      "low": -569.892,
      "high": 1152.79,
      "withinNoise": true
     },
     "run.wait.mean": {
      "mean": 1.0444,
      "low": -2.8119,
      "high": 4.9007,
      "withinNoise": true
     }
    }
   },
   "unit": "m",
   "what": "hall search: rank 3",
   "source": "docs/articles/layout-search/files/hall-search-evidence.json"
  },
  {
   "id": "hall.search.rank4",
   "value": {
    "values": {
     "alternatives-1": "Stage at the far end; aisles 0.9 m",
     "move-2": {
      "dx": -8,
      "dz": 0
     }
    },
    "distance": 123446,
    "vsBest": {
     "run.distance.total": {
      "mean": 330.699,
      "low": -283.485,
      "high": 944.882,
      "withinNoise": true
     },
     "run.wait.mean": {
      "mean": -0.7034,
      "low": -1.7214,
      "high": 0.3145,
      "withinNoise": true
     }
    }
   },
   "unit": "m",
   "what": "hall search: rank 4",
   "source": "docs/articles/layout-search/files/hall-search-evidence.json"
  },
  {
   "id": "hall.search.rank5",
   "value": {
    "values": {
     "alternatives-1": "Stage at the far end; aisles 0.9 m",
     "move-2": {
      "dx": 8,
      "dz": 0
     }
    },
    "distance": 123708,
    "vsBest": {
     "run.distance.total": {
      "mean": 593.298,
      "low": -175.901,
      "high": 1362.5,
      "withinNoise": true
     },
     "run.wait.mean": {
      "mean": 1.189,
      "low": -2.2976,
      "high": 4.6757,
      "withinNoise": true
     }
    }
   },
   "unit": "m",
   "what": "hall search: rank 5",
   "source": "docs/articles/layout-search/files/hall-search-evidence.json"
  },
  {
   "id": "hall.statistics",
   "value": {
    "near": {
     "run.distance.total": {
      "mean": 150484.89542085238,
      "low": 130524.88371952056,
      "high": 170444.9071221842,
      "n": 3
     },
     "run.wait.mean": {
      "mean": 168.13073285509165,
      "low": 117.7230483903578,
      "high": 218.5384173198255,
      "n": 3
     }
    },
    "centre": {
     "run.distance.total": {
      "mean": 150406.24736819623,
      "low": 130602.11314729105,
      "high": 170210.38158910142,
      "n": 3
     },
     "run.wait.mean": {
      "mean": 176.12419308797882,
      "low": 123.40117667320243,
      "high": 228.84720950275522,
      "n": 3
     }
    },
    "best": {
     "run.distance.total": {
      "mean": 123114.88701400923,
      "low": 106193.84201043093,
      "high": 140035.93201758753,
      "n": 3
     },
     "run.wait.mean": {
      "mean": 171.98545372622883,
      "low": 123.58433932869235,
      "high": 220.3865681237653,
      "n": 3
     }
    },
    "far": {
     "run.distance.total": {
      "value": 123336,
      "low": 106125,
      "high": 140548
     },
     "run.wait.mean": {
      "value": 171.881,
      "low": 122.932,
      "high": 220.831
     },
     "visibility.audience.fractionAll": {
      "value": 1
     },
     "visibility.camera.targetsFraction:streaming": {
      "value": 1
     },
     "run.cycle.mean": {
      "value": 2842.43,
      "low": 2646.59,
      "high": 3038.26
     },
     "run.completed": {
      "value": 479,
      "low": 431.084,
      "high": 526.916
     },
     "parameter.visitorsPerHour": {
      "value": 480
     },
     "parameter.registrationDesks": {
      "value": 8
     },
     "parameter.foodServers": {
      "value": 6
     },
     "parameter.audienceCapacity": {
      "value": 300
     },
     "parameter.keynoteStartSeconds": {
      "value": 2700
     },
     "parameter.keynoteSeconds": {
      "value": 1200
     }
    }
   },
   "unit": null,
   "what": "hall: walking and wait of the three hand-made arrangements and the best",
   "source": "docs/articles/layout-search/files/hall-search-evidence.json"
  },
  {
   "id": "hall.comparisons",
   "value": [
    {
     "baseline": "Stage near the entrance",
     "id": "c9705b65-2136-4f16-939d-0e92c2914c6a",
     "scenario": {
      "total": 0,
      "omitted": 0,
      "same": {
       "arrivals": true,
       "window": true,
       "seed": true,
       "runs": true
      },
      "text": "The scenario definitions are the same. Same arrivals, observation window (9000 s), seed (7) and runs (3)."
     },
     "result": {
      "engineVersion": "process-des-2.7.0",
      "runs": 3,
      "seed": 7,
      "baseline": {
       "scenarioId": "expo-day",
       "inputHash": "fnv1a-187af9f3",
       "measureHash": "fnv1a-8d3d0ffb",
       "spaceHash": "fnv1a-cd61db9f",
       "firstRunStatus": "completed",
       "firstRunMetrics": {
        "planned": 465,
        "arrived": 465,
        "completed": 465,
        "inProgress": 0,
        "pendingArrivals": 0,
        "waiting": 0,
        "totalWaitSeconds": 70296.48316909367,
        "averageWaitSeconds": 151.1752326217068,
        "maxWaitSeconds": 904.6279635174124,
        "averageCompletedCycleSeconds": 2792.804540471896,
        "maxCompletedCycleSeconds": 6506.0312661763755,
        "totalDistanceMeters": 144294.1940311575,
        "blocked": 0
       },
       "warnings": [
        {
         "id": "timeline.truncated",
         "message": "Job timelines are kept for the first 500 jobs and 500 entries in all (traceLimit); result.jobs lists those jobs. Aggregate metrics include all jobs."
        }
       ],
       "assumptions": [
        "Collisions, avoidance, following, passing and re-routing between agents (robots or people): only capacities and FIFO queues are computed.",
        "Density-dependent slowing, crowd pressure and the physical length of a queue (waiting agents overlap at one point): pedestrian flow is counts and capacities, not crowd physics.",
        "Optimised lift group control (destination dispatch, load weighing beyond a full car, zoning, parking) and lift jerk: lifts with cars follow the fixed collective rules of the process catalog, at constant speed unless the scenario gives an acceleration and seconds per person boarding and alighting; an elevator without cars has only capacity and travel speed, so its waits are close to a lower bound.",
        "Door opening times (except the fixed door and dwell time of a lift car at each stop, and its seconds per person boarding and alighting when given), acceleration (except a lift car's, when the scenario gives one), turning and vehicle orientation (circular footprints only), loaded shape, charging, batteries and failures.",
        "Evacuation, safety codes and legal compliance, lines of sight and cameras.",
        "Human decision-making beyond weighted branches and branches by the state of the run, learning or adaptive behaviour, and time-of-day changes other than arrival rate profiles, scheduled times and shifts set in advance (capacities of resources and zones, and the units of a pool in service, from given times).",
        "Cleaning quality (coverage comes from simulate_space).",
        "Agreement with real robots or real sites: determinism guarantees reproducibility, not field accuracy; calibrate separately.",
        "Two-station transport (simulate_space) and process-scenario transport are separate implementations, kept consistent only by a matching test on one shared case; other layouts can differ.",
        "Random values, poisson arrivals, branches and random picks draw from each arrival's and each job's own stream of the seed: the same scenario and seed give the same result, and a job keeps its draws when other jobs or streams change. Times are seconds and distances are metres.",
        "goto follows the shortest route on a roadmap for each agent class, with the same circle-versus-obstacle clearance as the robot engine; connections are edges with their length and speed.",
        "Capacities on resources, zones and connections are strict FIFO queues without preemption; waiting agents stand at one point, and nothing else slows movement.",
        "Zones do not steer routes. An occupy zone counts agents that stop inside it; a transit zone counts every agent inside it, passing or not.",
        "A connection end or a place on a blocking part moves to the nearest point the agent fits within 3 m; that offset is not added to the connection length.",
        "Finish returns every resource still held by that job. Resources held by unfinished or blocked jobs remain in use.",
        "Average wait includes every arrived job and unfinished waits up to the observation endpoint. Cycle averages include completed jobs only.",
        "Repeated runs use seeds seed, seed + 1, …. Jobs, timelines, traces, series and warnings are the first run’s; replicates give every measure per run and spread its minimum, mean, maximum and population standard deviation."
       ]
      },
      "candidate": {
       "scenarioId": "expo-day",
       "inputHash": "fnv1a-8703c561",
       "measureHash": "fnv1a-8d3d0ffb",
       "spaceHash": "fnv1a-afc25ddf",
       "firstRunStatus": "completed",
       "firstRunMetrics": {
        "planned": 465,
        "arrived": 465,
        "completed": 465,
        "inProgress": 0,
        "pendingArrivals": 0,
        "waiting": 0,
        "totalWaitSeconds": 72678.97691517968,
        "averageWaitSeconds": 156.29887508640792,
        "maxWaitSeconds": 881.733136270349,
        "averageCompletedCycleSeconds": 2763.5713307434644,
        "maxCompletedCycleSeconds": 6472.242878707277,
        "totalDistanceMeters": 118304.17303195289,
        "blocked": 0
       },
       "warnings": [
        {
         "id": "timeline.truncated",
         "message": "Job timelines are kept for the first 500 jobs and 500 entries in all (traceLimit); result.jobs lists those jobs. Aggregate metrics include all jobs."
        }
       ],
       "assumptions": [
        "Collisions, avoidance, following, passing and re-routing between agents (robots or people): only capacities and FIFO queues are computed.",
        "Density-dependent slowing, crowd pressure and the physical length of a queue (waiting agents overlap at one point): pedestrian flow is counts and capacities, not crowd physics.",
        "Optimised lift group control (destination dispatch, load weighing beyond a full car, zoning, parking) and lift jerk: lifts with cars follow the fixed collective rules of the process catalog, at constant speed unless the scenario gives an acceleration and seconds per person boarding and alighting; an elevator without cars has only capacity and travel speed, so its waits are close to a lower bound.",
        "Door opening times (except the fixed door and dwell time of a lift car at each stop, and its seconds per person boarding and alighting when given), acceleration (except a lift car's, when the scenario gives one), turning and vehicle orientation (circular footprints only), loaded shape, charging, batteries and failures.",
        "Evacuation, safety codes and legal compliance, lines of sight and cameras.",
        "Human decision-making beyond weighted branches and branches by the state of the run, learning or adaptive behaviour, and time-of-day changes other than arrival rate profiles, scheduled times and shifts set in advance (capacities of resources and zones, and the units of a pool in service, from given times).",
        "Cleaning quality (coverage comes from simulate_space).",
        "Agreement with real robots or real sites: determinism guarantees reproducibility, not field accuracy; calibrate separately.",
        "Two-station transport (simulate_space) and process-scenario transport are separate implementations, kept consistent only by a matching test on one shared case; other layouts can differ.",
        "Random values, poisson arrivals, branches and random picks draw from each arrival's and each job's own stream of the seed: the same scenario and seed give the same result, and a job keeps its draws when other jobs or streams change. Times are seconds and distances are metres.",
        "goto follows the shortest route on a roadmap for each agent class, with the same circle-versus-obstacle clearance as the robot engine; connections are edges with their length and speed.",
        "Capacities on resources, zones and connections are strict FIFO queues without preemption; waiting agents stand at one point, and nothing else slows movement.",
        "Zones do not steer routes. An occupy zone counts agents that stop inside it; a transit zone counts every agent inside it, passing or not.",
        "A connection end or a place on a blocking part moves to the nearest point the agent fits within 3 m; that offset is not added to the connection length.",
        "Finish returns every resource still held by that job. Resources held by unfinished or blocked jobs remain in use.",
        "Average wait includes every arrived job and unfinished waits up to the observation endpoint. Cycle averages include completed jobs only.",
        "Repeated runs use seeds seed, seed + 1, …. Jobs, timelines, traces, series and warnings are the first run’s; replicates give every measure per run and spread its minimum, mean, maximum and population standard deviation."
       ]
      },
      "measures": [
       {
        "id": "run.completed",
        "scope": "run",
        "ref": null,
        "unit": "count",
        "baseline": 479,
        "candidate": 479,
        "delta": 0,
        "paired": {
         "min": 0,
         "mean": 0,
         "max": 0,
         "stdev": 0,
         "n": 3
        },
        "interval": {
         "low": 0,
         "high": 0,
         "withinNoise": true
        }
       },
       {
        "id": "run.blocked",
        "scope": "run",
        "ref": null,
        "unit": "count",
        "baseline": 0,
        "candidate": 0,
        "delta": 0,
        "paired": {
         "min": 0,
         "mean": 0,
         "max": 0,
         "stdev": 0,
         "n": 3
        },
        "interval": {
         "low": 0,
         "high": 0,
         "withinNoise": true
        }
       },
       {
        "id": "run.wait.mean",
        "scope": "run",
        "ref": null,
        "unit": "s",
        "baseline": 168.13073285509165,
        "candidate": 171.98545372622883,
        "delta": 3.8547208711371845,
        "paired": {
         "min": 3.1824040124307658,
         "mean": 3.8547208711371845,
         "max": 5.123642464701106,
         "stdev": 0.897795295667496,
         "n": 3
        },
        "interval": {
         "low": 1.123016650471501,
         "high": 6.586425091802868,
         "withinNoise": false
        }
       },
       {
        "id": "run.distance.total",
        "scope": "run",
        "ref": null,
        "unit": "m",
        "baseline": 150484.89542085238,
        "candidate": 123114.88701400923,
        "delta": -27370.008406843157,
        "paired": {
         "min": -28655.604848169663,
         "mean": -27370.008406843157,
         "max": -25990.020999204615,
         "stdev": 1090.2649692794319,
         "n": 3
        },
        "interval": {
         "low": -30687.336346293167,
         "high": -24052.680467393147,
         "withinNoise": false
        }
       }
      ]
     }
    },
    {
     "baseline": "Stage in the centre",
     "id": "1f74aaf6-d697-40d9-af79-a190bc080381",
     "scenario": {
      "total": 0,
      "omitted": 0,
      "same": {
       "arrivals": true,
       "window": true,
       "seed": true,
       "runs": true
      },
      "text": "The scenario definitions are the same. Same arrivals, observation window (9000 s), seed (7) and runs (3)."
     },
     "result": {
      "engineVersion": "process-des-2.7.0",
      "runs": 3,
      "seed": 7,
      "baseline": {
       "scenarioId": "expo-day",
       "inputHash": "fnv1a-b08be093",
       "measureHash": "fnv1a-8d3d0ffb",
       "spaceHash": "fnv1a-33f3f06b",
       "firstRunStatus": "completed",
       "firstRunMetrics": {
        "planned": 465,
        "arrived": 465,
        "completed": 465,
        "inProgress": 0,
        "pendingArrivals": 0,
        "waiting": 0,
        "totalWaitSeconds": 73410.28180752386,
        "averageWaitSeconds": 157.8715737796212,
        "maxWaitSeconds": 898.2107285474615,
        "averageCompletedCycleSeconds": 2802.6049571785384,
        "maxCompletedCycleSeconds": 6537.193750275064,
        "totalDistanceMeters": 143930.2723328696,
        "blocked": 0
       },
       "warnings": [
        {
         "id": "timeline.truncated",
         "message": "Job timelines are kept for the first 500 jobs and 500 entries in all (traceLimit); result.jobs lists those jobs. Aggregate metrics include all jobs."
        }
       ],
       "assumptions": [
        "Collisions, avoidance, following, passing and re-routing between agents (robots or people): only capacities and FIFO queues are computed.",
        "Density-dependent slowing, crowd pressure and the physical length of a queue (waiting agents overlap at one point): pedestrian flow is counts and capacities, not crowd physics.",
        "Optimised lift group control (destination dispatch, load weighing beyond a full car, zoning, parking) and lift jerk: lifts with cars follow the fixed collective rules of the process catalog, at constant speed unless the scenario gives an acceleration and seconds per person boarding and alighting; an elevator without cars has only capacity and travel speed, so its waits are close to a lower bound.",
        "Door opening times (except the fixed door and dwell time of a lift car at each stop, and its seconds per person boarding and alighting when given), acceleration (except a lift car's, when the scenario gives one), turning and vehicle orientation (circular footprints only), loaded shape, charging, batteries and failures.",
        "Evacuation, safety codes and legal compliance, lines of sight and cameras.",
        "Human decision-making beyond weighted branches and branches by the state of the run, learning or adaptive behaviour, and time-of-day changes other than arrival rate profiles, scheduled times and shifts set in advance (capacities of resources and zones, and the units of a pool in service, from given times).",
        "Cleaning quality (coverage comes from simulate_space).",
        "Agreement with real robots or real sites: determinism guarantees reproducibility, not field accuracy; calibrate separately.",
        "Two-station transport (simulate_space) and process-scenario transport are separate implementations, kept consistent only by a matching test on one shared case; other layouts can differ.",
        "Random values, poisson arrivals, branches and random picks draw from each arrival's and each job's own stream of the seed: the same scenario and seed give the same result, and a job keeps its draws when other jobs or streams change. Times are seconds and distances are metres.",
        "goto follows the shortest route on a roadmap for each agent class, with the same circle-versus-obstacle clearance as the robot engine; connections are edges with their length and speed.",
        "Capacities on resources, zones and connections are strict FIFO queues without preemption; waiting agents stand at one point, and nothing else slows movement.",
        "Zones do not steer routes. An occupy zone counts agents that stop inside it; a transit zone counts every agent inside it, passing or not.",
        "A connection end or a place on a blocking part moves to the nearest point the agent fits within 3 m; that offset is not added to the connection length.",
        "Finish returns every resource still held by that job. Resources held by unfinished or blocked jobs remain in use.",
        "Average wait includes every arrived job and unfinished waits up to the observation endpoint. Cycle averages include completed jobs only.",
        "Repeated runs use seeds seed, seed + 1, …. Jobs, timelines, traces, series and warnings are the first run’s; replicates give every measure per run and spread its minimum, mean, maximum and population standard deviation."
       ]
      },
      "candidate": {
       "scenarioId": "expo-day",
       "inputHash": "fnv1a-8703c561",
       "measureHash": "fnv1a-8d3d0ffb",
       "spaceHash": "fnv1a-afc25ddf",
       "firstRunStatus": "completed",
       "firstRunMetrics": {
        "planned": 465,
        "arrived": 465,
        "completed": 465,
        "inProgress": 0,
        "pendingArrivals": 0,
        "waiting": 0,
        "totalWaitSeconds": 72678.97691517968,
        "averageWaitSeconds": 156.29887508640792,
        "maxWaitSeconds": 881.733136270349,
        "averageCompletedCycleSeconds": 2763.5713307434644,
        "maxCompletedCycleSeconds": 6472.242878707277,
        "totalDistanceMeters": 118304.17303195289,
        "blocked": 0
       },
       "warnings": [
        {
         "id": "timeline.truncated",
         "message": "Job timelines are kept for the first 500 jobs and 500 entries in all (traceLimit); result.jobs lists those jobs. Aggregate metrics include all jobs."
        }
       ],
       "assumptions": [
        "Collisions, avoidance, following, passing and re-routing between agents (robots or people): only capacities and FIFO queues are computed.",
        "Density-dependent slowing, crowd pressure and the physical length of a queue (waiting agents overlap at one point): pedestrian flow is counts and capacities, not crowd physics.",
        "Optimised lift group control (destination dispatch, load weighing beyond a full car, zoning, parking) and lift jerk: lifts with cars follow the fixed collective rules of the process catalog, at constant speed unless the scenario gives an acceleration and seconds per person boarding and alighting; an elevator without cars has only capacity and travel speed, so its waits are close to a lower bound.",
        "Door opening times (except the fixed door and dwell time of a lift car at each stop, and its seconds per person boarding and alighting when given), acceleration (except a lift car's, when the scenario gives one), turning and vehicle orientation (circular footprints only), loaded shape, charging, batteries and failures.",
        "Evacuation, safety codes and legal compliance, lines of sight and cameras.",
        "Human decision-making beyond weighted branches and branches by the state of the run, learning or adaptive behaviour, and time-of-day changes other than arrival rate profiles, scheduled times and shifts set in advance (capacities of resources and zones, and the units of a pool in service, from given times).",
        "Cleaning quality (coverage comes from simulate_space).",
        "Agreement with real robots or real sites: determinism guarantees reproducibility, not field accuracy; calibrate separately.",
        "Two-station transport (simulate_space) and process-scenario transport are separate implementations, kept consistent only by a matching test on one shared case; other layouts can differ.",
        "Random values, poisson arrivals, branches and random picks draw from each arrival's and each job's own stream of the seed: the same scenario and seed give the same result, and a job keeps its draws when other jobs or streams change. Times are seconds and distances are metres.",
        "goto follows the shortest route on a roadmap for each agent class, with the same circle-versus-obstacle clearance as the robot engine; connections are edges with their length and speed.",
        "Capacities on resources, zones and connections are strict FIFO queues without preemption; waiting agents stand at one point, and nothing else slows movement.",
        "Zones do not steer routes. An occupy zone counts agents that stop inside it; a transit zone counts every agent inside it, passing or not.",
        "A connection end or a place on a blocking part moves to the nearest point the agent fits within 3 m; that offset is not added to the connection length.",
        "Finish returns every resource still held by that job. Resources held by unfinished or blocked jobs remain in use.",
        "Average wait includes every arrived job and unfinished waits up to the observation endpoint. Cycle averages include completed jobs only.",
        "Repeated runs use seeds seed, seed + 1, …. Jobs, timelines, traces, series and warnings are the first run’s; replicates give every measure per run and spread its minimum, mean, maximum and population standard deviation."
       ]
      },
      "measures": [
       {
        "id": "run.completed",
        "scope": "run",
        "ref": null,
        "unit": "count",
        "baseline": 479,
        "candidate": 479,
        "delta": 0,
        "paired": {
         "min": 0,
         "mean": 0,
         "max": 0,
         "stdev": 0,
         "n": 3
        },
        "interval": {
         "low": 0,
         "high": 0,
         "withinNoise": true
        }
       },
       {
        "id": "run.blocked",
        "scope": "run",
        "ref": null,
        "unit": "count",
        "baseline": 0,
        "candidate": 0,
        "delta": 0,
        "paired": {
         "min": 0,
         "mean": 0,
         "max": 0,
         "stdev": 0,
         "n": 3
        },
        "interval": {
         "low": 0,
         "high": 0,
         "withinNoise": true
        }
       },
       {
        "id": "run.wait.mean",
        "scope": "run",
        "ref": null,
        "unit": "s",
        "baseline": 176.12419308797882,
        "candidate": 171.98545372622883,
        "delta": -4.1387393617499795,
        "paired": {
         "min": -5.617144777896414,
         "mean": -4.1387393617499795,
         "max": -1.5726986932132831,
         "stdev": 1.8214644043843216,
         "n": 3
        },
        "interval": {
         "low": -9.68087354897537,
         "high": 1.4033948254754103,
         "withinNoise": true
        }
       },
       {
        "id": "run.distance.total",
        "scope": "run",
        "ref": null,
        "unit": "m",
        "baseline": 150406.24736819623,
        "candidate": 123114.88701400923,
        "delta": -27291.360354186996,
        "paired": {
         "min": -28400.733486165933,
         "mean": -27291.360354186996,
         "max": -25626.0993009167,
         "stdev": 1199.001598905423,
         "n": 3
        },
        "interval": {
         "low": -30939.539114000727,
         "high": -23643.181594373265,
         "withinNoise": false
        }
       }
      ]
     }
    },
    {
     "baseline": "Stage at the far end",
     "id": "d4e55bbf-6f29-4019-a8a7-811af82c47f7",
     "scenario": {
      "total": 0,
      "omitted": 0,
      "same": {
       "arrivals": true,
       "window": true,
       "seed": true,
       "runs": true
      },
      "text": "The scenario definitions are the same. Same arrivals, observation window (9000 s), seed (7) and runs (3)."
     },
     "result": {
      "engineVersion": "process-des-2.7.0",
      "runs": 3,
      "seed": 7,
      "baseline": {
       "scenarioId": "expo-day",
       "inputHash": "fnv1a-d6003392",
       "measureHash": "fnv1a-8d3d0ffb",
       "spaceHash": "fnv1a-65b475f9",
       "firstRunStatus": "completed",
       "firstRunMetrics": {
        "planned": 465,
        "arrived": 465,
        "completed": 465,
        "inProgress": 0,
        "pendingArrivals": 0,
        "waiting": 0,
        "totalWaitSeconds": 72373.24116842299,
        "averageWaitSeconds": 155.64137885682362,
        "maxWaitSeconds": 920.3582437099994,
        "averageCompletedCycleSeconds": 2762.835165088691,
        "maxCompletedCycleSeconds": 6523.681223496376,
        "totalDistanceMeters": 118248.26305160485,
        "blocked": 0
       },
       "warnings": [
        {
         "id": "timeline.truncated",
         "message": "Job timelines are kept for the first 500 jobs and 500 entries in all (traceLimit); result.jobs lists those jobs. Aggregate metrics include all jobs."
        }
       ],
       "assumptions": [
        "Collisions, avoidance, following, passing and re-routing between agents (robots or people): only capacities and FIFO queues are computed.",
        "Density-dependent slowing, crowd pressure and the physical length of a queue (waiting agents overlap at one point): pedestrian flow is counts and capacities, not crowd physics.",
        "Optimised lift group control (destination dispatch, load weighing beyond a full car, zoning, parking) and lift jerk: lifts with cars follow the fixed collective rules of the process catalog, at constant speed unless the scenario gives an acceleration and seconds per person boarding and alighting; an elevator without cars has only capacity and travel speed, so its waits are close to a lower bound.",
        "Door opening times (except the fixed door and dwell time of a lift car at each stop, and its seconds per person boarding and alighting when given), acceleration (except a lift car's, when the scenario gives one), turning and vehicle orientation (circular footprints only), loaded shape, charging, batteries and failures.",
        "Evacuation, safety codes and legal compliance, lines of sight and cameras.",
        "Human decision-making beyond weighted branches and branches by the state of the run, learning or adaptive behaviour, and time-of-day changes other than arrival rate profiles, scheduled times and shifts set in advance (capacities of resources and zones, and the units of a pool in service, from given times).",
        "Cleaning quality (coverage comes from simulate_space).",
        "Agreement with real robots or real sites: determinism guarantees reproducibility, not field accuracy; calibrate separately.",
        "Two-station transport (simulate_space) and process-scenario transport are separate implementations, kept consistent only by a matching test on one shared case; other layouts can differ.",
        "Random values, poisson arrivals, branches and random picks draw from each arrival's and each job's own stream of the seed: the same scenario and seed give the same result, and a job keeps its draws when other jobs or streams change. Times are seconds and distances are metres.",
        "goto follows the shortest route on a roadmap for each agent class, with the same circle-versus-obstacle clearance as the robot engine; connections are edges with their length and speed.",
        "Capacities on resources, zones and connections are strict FIFO queues without preemption; waiting agents stand at one point, and nothing else slows movement.",
        "Zones do not steer routes. An occupy zone counts agents that stop inside it; a transit zone counts every agent inside it, passing or not.",
        "A connection end or a place on a blocking part moves to the nearest point the agent fits within 3 m; that offset is not added to the connection length.",
        "Finish returns every resource still held by that job. Resources held by unfinished or blocked jobs remain in use.",
        "Average wait includes every arrived job and unfinished waits up to the observation endpoint. Cycle averages include completed jobs only.",
        "Repeated runs use seeds seed, seed + 1, …. Jobs, timelines, traces, series and warnings are the first run’s; replicates give every measure per run and spread its minimum, mean, maximum and population standard deviation."
       ]
      },
      "candidate": {
       "scenarioId": "expo-day",
       "inputHash": "fnv1a-8703c561",
       "measureHash": "fnv1a-8d3d0ffb",
       "spaceHash": "fnv1a-afc25ddf",
       "firstRunStatus": "completed",
       "firstRunMetrics": {
        "planned": 465,
        "arrived": 465,
        "completed": 465,
        "inProgress": 0,
        "pendingArrivals": 0,
        "waiting": 0,
        "totalWaitSeconds": 72678.97691517968,
        "averageWaitSeconds": 156.29887508640792,
        "maxWaitSeconds": 881.733136270349,
        "averageCompletedCycleSeconds": 2763.5713307434644,
        "maxCompletedCycleSeconds": 6472.242878707277,
        "totalDistanceMeters": 118304.17303195289,
        "blocked": 0
       },
       "warnings": [
        {
         "id": "timeline.truncated",
         "message": "Job timelines are kept for the first 500 jobs and 500 entries in all (traceLimit); result.jobs lists those jobs. Aggregate metrics include all jobs."
        }
       ],
       "assumptions": [
        "Collisions, avoidance, following, passing and re-routing between agents (robots or people): only capacities and FIFO queues are computed.",
        "Density-dependent slowing, crowd pressure and the physical length of a queue (waiting agents overlap at one point): pedestrian flow is counts and capacities, not crowd physics.",
        "Optimised lift group control (destination dispatch, load weighing beyond a full car, zoning, parking) and lift jerk: lifts with cars follow the fixed collective rules of the process catalog, at constant speed unless the scenario gives an acceleration and seconds per person boarding and alighting; an elevator without cars has only capacity and travel speed, so its waits are close to a lower bound.",
        "Door opening times (except the fixed door and dwell time of a lift car at each stop, and its seconds per person boarding and alighting when given), acceleration (except a lift car's, when the scenario gives one), turning and vehicle orientation (circular footprints only), loaded shape, charging, batteries and failures.",
        "Evacuation, safety codes and legal compliance, lines of sight and cameras.",
        "Human decision-making beyond weighted branches and branches by the state of the run, learning or adaptive behaviour, and time-of-day changes other than arrival rate profiles, scheduled times and shifts set in advance (capacities of resources and zones, and the units of a pool in service, from given times).",
        "Cleaning quality (coverage comes from simulate_space).",
        "Agreement with real robots or real sites: determinism guarantees reproducibility, not field accuracy; calibrate separately.",
        "Two-station transport (simulate_space) and process-scenario transport are separate implementations, kept consistent only by a matching test on one shared case; other layouts can differ.",
        "Random values, poisson arrivals, branches and random picks draw from each arrival's and each job's own stream of the seed: the same scenario and seed give the same result, and a job keeps its draws when other jobs or streams change. Times are seconds and distances are metres.",
        "goto follows the shortest route on a roadmap for each agent class, with the same circle-versus-obstacle clearance as the robot engine; connections are edges with their length and speed.",
        "Capacities on resources, zones and connections are strict FIFO queues without preemption; waiting agents stand at one point, and nothing else slows movement.",
        "Zones do not steer routes. An occupy zone counts agents that stop inside it; a transit zone counts every agent inside it, passing or not.",
        "A connection end or a place on a blocking part moves to the nearest point the agent fits within 3 m; that offset is not added to the connection length.",
        "Finish returns every resource still held by that job. Resources held by unfinished or blocked jobs remain in use.",
        "Average wait includes every arrived job and unfinished waits up to the observation endpoint. Cycle averages include completed jobs only.",
        "Repeated runs use seeds seed, seed + 1, …. Jobs, timelines, traces, series and warnings are the first run’s; replicates give every measure per run and spread its minimum, mean, maximum and population standard deviation."
       ]
      },
      "measures": [
       {
        "id": "run.completed",
        "scope": "run",
        "ref": null,
        "unit": "count",
        "baseline": 479,
        "candidate": 479,
        "delta": 0,
        "paired": {
         "min": 0,
         "mean": 0,
         "max": 0,
         "stdev": 0,
         "n": 3
        },
        "interval": {
         "low": 0,
         "high": 0,
         "withinNoise": true
        }
       },
       {
        "id": "run.blocked",
        "scope": "run",
        "ref": null,
        "unit": "count",
        "baseline": 0,
        "candidate": 0,
        "delta": 0,
        "paired": {
         "min": 0,
         "mean": 0,
         "max": 0,
         "stdev": 0,
         "n": 3
        },
        "interval": {
         "low": 0,
         "high": 0,
         "withinNoise": true
        }
       },
       {
        "id": "run.wait.mean",
        "scope": "run",
        "ref": null,
        "unit": "s",
        "baseline": 171.88128584232285,
        "candidate": 171.98545372622883,
        "delta": 0.10416788390598224,
        "paired": {
         "min": -0.3383057347950853,
         "mean": 0.10416788390598224,
         "max": 0.6574962295842965,
         "stdev": 0.41402251624387043,
         "n": 3
        },
        "interval": {
         "low": -1.1555703443202383,
         "high": 1.363906112132203,
         "withinNoise": true
        }
       },
       {
        "id": "run.distance.total",
        "scope": "run",
        "ref": null,
        "unit": "m",
        "baseline": 123336.25557170463,
        "candidate": 123114.88701400923,
        "delta": -221.36855769539156,
        "paired": {
         "min": -402.248965692037,
         "mean": -221.36855769539156,
         "max": 55.90998034803488,
         "stdev": 199.07595630231936,
         "n": 3
        },
        "interval": {
         "low": -827.0930838634467,
         "high": 384.35596847266356,
         "withinNoise": true
        }
       }
      ]
     }
    }
   ],
   "unit": null,
   "what": "hall: saved comparisons, best minus each hand-made arrangement",
   "source": "docs/articles/layout-search/files/hall-search-evidence.json"
  },
  {
   "id": "hall.visibility",
   "value": {
    "centre": {
     "ok": true,
     "revision": "ca771bb0-7088-45fd-a964-341d7c5de302:7",
     "spaceHash": "fnv1a-33f3f06b",
     "floor": {
      "id": "HALL",
      "name": "Exhibition hall",
      "level": 0
     },
     "version": "sight-1.0.0",
     "method": {
      "rule": "A target point is seen by a camera when it is within the range (3D distance), within hfov/2 of the yaw on the plan and within vfov/2 of the tilt as an elevation angle, and the straight sight ray is not blocked. The ray is blocked when, on a stretch where its plan segment runs inside an opaque part’s footprint, its height (linear along the segment) meets the part’s height range; the stretch is computed exactly by clipping the segment against the footprint polygon. Grazing a top or a base does not block.",
      "opaque": "Opaque: parts that block movement (blocks, else the kind’s default), as solid prisms from their elevation y to y + h, including drawn people; so fences, racks, shelves, refrigerated cases, clothes rails, trees (their whole box) and stairs are fully opaque. Transparent: glass partitions, windows, queue barriers, and any part with blocks:false (blocks is a walking flag, so non-blocking kinds such as jet bridges, dock shelters, metal detectors and parasols are see-through; set blocks:true to make one opaque). Doors, gates and dock doors sitting in a wall, partition or fence with a rectangular footprint open it over their own height (the lintel above stays opaque) unless doorsClosed; windows open it from their sill (y, else 0.9 m) up; a free-standing door or a polygon-footprint wall has no opening. A blocking editable solid must be an exact vertical prism. No partial transparency.",
      "grid": "Coverage samples the floor at the centres of a square grid at targetHeight, inside the outline and outside holes, leaving out centres inside solid matter at that height. Every sampled point is decided exactly; the grid is the only approximation, with an error of at most the length of the boundaries of the seen region times the cell size. Areas are sampled points times the cell area.",
      "notCalculated": "Lines of sight (get_visibility) are geometric only, one floor at a time: a straight ray against the drawn prisms, exact for the geometry, sampled on a grid. Not calculated: image quality, resolution, face identification, lighting, glare, lens distortion and legal compliance; people as occluders unless drawn as parts; floors above or below (one floor at a time); the view of a rectangular sensor (fields of view are pan-tilt angles, so the far edge on a flat floor is an arc). The process simulation does not use lines of sight."
     },
     "grid": {
      "cellSize": 1,
      "columns": 60,
      "rows": 100,
      "targetHeight": 0,
      "sampledPoints": 5870,
      "floorArea": 6000,
      "sampledArea": 5870,
      "leftOut": {
       "outsideFloor": 0,
       "insideSolid": 130
      }
     },
     "occluders": {
      "count": 28,
      "byKind": {
       "column": 12,
       "wall": 8,
       "counter": 2,
       "planter": 2,
       "screen": 2,
       "block": 1,
       "stage": 1
      },
      "transparentShapes": [
       "glass",
       "window",
       "barrier"
      ],
      "doorsClosed": false
     },
     "coverage": {
      "coveredArea": 484,
      "uncoveredArea": 5386,
      "ratio": 0.082,
      "seenByCameras": [
       {
        "cameras": 0,
        "area": 5386
       },
       {
        "cameras": 1,
        "area": 484
       }
      ],
      "overlapArea": 0
     },
     "cameras": [
      {
       "id": "streaming",
       "x": 1.6,
       "z": 31.2,
       "height": 2.9,
       "yaw": -27.525225743744336,
       "pitch": 0.8944752877772719,
       "hfov": 30,
       "vfov": 20,
       "range": 60,
       "area": 484,
       "ratio": 0.082,
       "exclusiveArea": 484,
       "targetsSeen": 22,
       "targetsFraction": 0.71
      }
     ],
     "blindSpots": {
      "area": 5386,
      "cells": 5386,
      "rectangles": [
       {
        "x": 0,
        "z": 0,
        "w": 60,
        "d": 30,
        "area": 1800
       }
      ],
      "omitted": {
       "count": 94,
       "area": 3586
      }
     },
     "targets": {
      "points": 31,
      "height": 2.4,
      "seenByViewers": [
       888,
       885,
       892,
       897,
       898,
       901,
       902,
       907,
       910,
       914,
       916,
       921,
       921,
       928,
       931,
       932,
       931,
       928,
       921,
       921,
       916,
       914,
       910,
       907,
       902,
       901,
       898,
       897,
       892,
       885,
       888
      ]
     },
     "audience": {
      "viewers": 956,
      "eyeHeight": 1.6,
      "cellSize": 0.5,
      "seeingAny": 956,
      "fractionAny": 1,
      "seeingAll": 614,
      "fractionAll": 0.642,
      "seeingAtLeast": {
       "minSeen": 1,
       "count": 956,
       "fraction": 1
      },
      "meanFraction": 0.95
     }
    },
    "near": {
     "ok": true,
     "revision": "ca771bb0-7088-45fd-a964-341d7c5de302:8",
     "spaceHash": "fnv1a-cd61db9f",
     "floor": {
      "id": "HALL",
      "name": "Exhibition hall",
      "level": 0
     },
     "version": "sight-1.0.0",
     "method": {
      "rule": "A target point is seen by a camera when it is within the range (3D distance), within hfov/2 of the yaw on the plan and within vfov/2 of the tilt as an elevation angle, and the straight sight ray is not blocked. The ray is blocked when, on a stretch where its plan segment runs inside an opaque part’s footprint, its height (linear along the segment) meets the part’s height range; the stretch is computed exactly by clipping the segment against the footprint polygon. Grazing a top or a base does not block.",
      "opaque": "Opaque: parts that block movement (blocks, else the kind’s default), as solid prisms from their elevation y to y + h, including drawn people; so fences, racks, shelves, refrigerated cases, clothes rails, trees (their whole box) and stairs are fully opaque. Transparent: glass partitions, windows, queue barriers, and any part with blocks:false (blocks is a walking flag, so non-blocking kinds such as jet bridges, dock shelters, metal detectors and parasols are see-through; set blocks:true to make one opaque). Doors, gates and dock doors sitting in a wall, partition or fence with a rectangular footprint open it over their own height (the lintel above stays opaque) unless doorsClosed; windows open it from their sill (y, else 0.9 m) up; a free-standing door or a polygon-footprint wall has no opening. A blocking editable solid must be an exact vertical prism. No partial transparency.",
      "grid": "Coverage samples the floor at the centres of a square grid at targetHeight, inside the outline and outside holes, leaving out centres inside solid matter at that height. Every sampled point is decided exactly; the grid is the only approximation, with an error of at most the length of the boundaries of the seen region times the cell size. Areas are sampled points times the cell area.",
      "notCalculated": "Lines of sight (get_visibility) are geometric only, one floor at a time: a straight ray against the drawn prisms, exact for the geometry, sampled on a grid. Not calculated: image quality, resolution, face identification, lighting, glare, lens distortion and legal compliance; people as occluders unless drawn as parts; floors above or below (one floor at a time); the view of a rectangular sensor (fields of view are pan-tilt angles, so the far edge on a flat floor is an arc). The process simulation does not use lines of sight."
     },
     "grid": {
      "cellSize": 1,
      "columns": 60,
      "rows": 100,
      "targetHeight": 0,
      "sampledPoints": 5870,
      "floorArea": 6000,
      "sampledArea": 5870,
      "leftOut": {
       "outsideFloor": 0,
       "insideSolid": 130
      }
     },
     "occluders": {
      "count": 28,
      "byKind": {
       "column": 12,
       "wall": 8,
       "counter": 2,
       "planter": 2,
       "screen": 2,
       "block": 1,
       "stage": 1
      },
      "transparentShapes": [
       "glass",
       "window",
       "barrier"
      ],
      "doorsClosed": false
     },
     "coverage": {
      "coveredArea": 652,
      "uncoveredArea": 5218,
      "ratio": 0.111,
      "seenByCameras": [
       {
        "cameras": 0,
        "area": 5218
       },
       {
        "cameras": 1,
        "area": 652
       }
      ],
      "overlapArea": 0
     },
     "cameras": [
      {
       "id": "streaming",
       "x": 1.6,
       "z": 31.2,
       "height": 2.9,
       "yaw": -59.80199808343381,
       "pitch": 0.5073668970559138,
       "hfov": 30,
       "vfov": 20,
       "range": 60,
       "area": 652,
       "ratio": 0.111,
       "exclusiveArea": 652,
       "targetsSeen": 21,
       "targetsFraction": 0.677
      }
     ],
     "blindSpots": {
      "area": 5218,
      "cells": 5218,
      "rectangles": [
       {
        "x": 0,
        "z": 0,
        "w": 60,
        "d": 30,
        "area": 1800
       }
      ],
      "omitted": {
       "count": 99,
       "area": 3418
      }
     },
     "targets": {
      "points": 31,
      "height": 2.4,
      "seenByViewers": [
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958,
       958
      ]
     },
     "audience": {
      "viewers": 958,
      "eyeHeight": 1.6,
      "cellSize": 0.5,
      "seeingAny": 958,
      "fractionAny": 1,
      "seeingAll": 958,
      "fractionAll": 1,
      "seeingAtLeast": {
       "minSeen": 1,
       "count": 958,
       "fraction": 1
      },
      "meanFraction": 1
     }
    },
    "best": {
     "ok": true,
     "revision": "ca771bb0-7088-45fd-a964-341d7c5de302:10",
     "spaceHash": "fnv1a-afc25ddf",
     "floor": {
      "id": "HALL",
      "name": "Exhibition hall",
      "level": 0
     },
     "version": "sight-1.0.0",
     "method": {
      "rule": "A target point is seen by a camera when it is within the range (3D distance), within hfov/2 of the yaw on the plan and within vfov/2 of the tilt as an elevation angle, and the straight sight ray is not blocked. The ray is blocked when, on a stretch where its plan segment runs inside an opaque part’s footprint, its height (linear along the segment) meets the part’s height range; the stretch is computed exactly by clipping the segment against the footprint polygon. Grazing a top or a base does not block.",
      "opaque": "Opaque: parts that block movement (blocks, else the kind’s default), as solid prisms from their elevation y to y + h, including drawn people; so fences, racks, shelves, refrigerated cases, clothes rails, trees (their whole box) and stairs are fully opaque. Transparent: glass partitions, windows, queue barriers, and any part with blocks:false (blocks is a walking flag, so non-blocking kinds such as jet bridges, dock shelters, metal detectors and parasols are see-through; set blocks:true to make one opaque). Doors, gates and dock doors sitting in a wall, partition or fence with a rectangular footprint open it over their own height (the lintel above stays opaque) unless doorsClosed; windows open it from their sill (y, else 0.9 m) up; a free-standing door or a polygon-footprint wall has no opening. A blocking editable solid must be an exact vertical prism. No partial transparency.",
      "grid": "Coverage samples the floor at the centres of a square grid at targetHeight, inside the outline and outside holes, leaving out centres inside solid matter at that height. Every sampled point is decided exactly; the grid is the only approximation, with an error of at most the length of the boundaries of the seen region times the cell size. Areas are sampled points times the cell area.",
      "notCalculated": "Lines of sight (get_visibility) are geometric only, one floor at a time: a straight ray against the drawn prisms, exact for the geometry, sampled on a grid. Not calculated: image quality, resolution, face identification, lighting, glare, lens distortion and legal compliance; people as occluders unless drawn as parts; floors above or below (one floor at a time); the view of a rectangular sensor (fields of view are pan-tilt angles, so the far edge on a flat floor is an arc). The process simulation does not use lines of sight."
     },
     "grid": {
      "cellSize": 1,
      "columns": 60,
      "rows": 100,
      "targetHeight": 0,
      "sampledPoints": 5870,
      "floorArea": 6000,
      "sampledArea": 5870,
      "leftOut": {
       "outsideFloor": 0,
       "insideSolid": 130
      }
     },
     "occluders": {
      "count": 28,
      "byKind": {
       "column": 12,
       "wall": 8,
       "counter": 2,
       "planter": 2,
       "screen": 2,
       "block": 1,
       "stage": 1
      },
      "transparentShapes": [
       "glass",
       "window",
       "barrier"
      ],
      "doorsClosed": false
     },
     "coverage": {
      "coveredArea": 371,
      "uncoveredArea": 5499,
      "ratio": 0.063,
      "seenByCameras": [
       {
        "cameras": 0,
        "area": 5499
       },
       {
        "cameras": 1,
        "area": 371
       }
      ],
      "overlapArea": 0
     },
     "cameras": [
      {
       "id": "streaming",
       "x": 1.6,
       "z": 31.2,
       "height": 2.9,
       "yaw": 38.19868517601843,
       "pitch": 0.922606651398498,
       "hfov": 30,
       "vfov": 20,
       "range": 60,
       "area": 371,
       "ratio": 0.063,
       "exclusiveArea": 371,
       "targetsSeen": 31,
       "targetsFraction": 1
      }
     ],
     "blindSpots": {
      "area": 5499,
      "cells": 5499,
      "rectangles": [
       {
        "x": 0,
        "z": 55,
        "w": 60,
        "d": 36,
        "area": 2160
       }
      ],
      "omitted": {
       "count": 56,
       "area": 3339
      }
     },
     "targets": {
      "points": 31,
      "height": 2.4,
      "seenByViewers": [
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960,
       960
      ]
     },
     "audience": {
      "viewers": 960,
      "eyeHeight": 1.6,
      "cellSize": 0.5,
      "seeingAny": 960,
      "fractionAny": 1,
      "seeingAll": 960,
      "fractionAll": 1,
      "seeingAtLeast": {
       "minSeen": 1,
       "count": 960,
       "fraction": 1
      },
      "meanFraction": 1
     }
    }
   },
   "unit": null,
   "what": "hall: sight lines of each arrangement (get_visibility)",
   "source": "docs/articles/layout-search/files/hall-search-evidence.json"
  },
  {
   "id": "hall.answer",
   "value": "The **best of the 60 candidates searched** keeps the stage at the far end, shifts the entire stage set **4 m west**, and retains **0.9 m aisles**. It is saved and displayed in 2D in Studio. [View the 2D plan](/tmp/opt3-work/hall/harbourline-best-plan.png).\n\nTwenty candidates met the sight-line constraints. The winner has **no layout-check findings** at the 0.9 m minimum.\n\nAll results use `expo-day`, three runs with seeds **7, 8 and 9**. Brackets show 95% confidence intervals.\n\n| Arrangement | Stage position | Aisles | Audience / camera sight lines* | Total walking, km | Average wait, s |\n|---|---|---:|---:|---:|---:|\n| Hand-made far end | Far end, unshifted | 0.9 m | 100% / 100% | 123.34 [106.13–140.55] | 171.9 [122.9–220.8] |\n| Hand-made centre | Centre, unshifted | 0.9 m | 64.2% / 71.0% | 150.41 [130.60–170.21] | 176.1 [123.4–228.8] |\n| Hand-made entrance | Near entrance, unshifted | 0.9 m | 100% / 67.7% | 150.48 [130.52–170.44] | 168.1 [117.7–218.5] |\n| **Search best** | **Far end, 4 m west** | **0.9 m** | **100% / 100%** | **123.11 [106.19–140.04]** | **172.0 [123.6–220.4]** |\n\nThe three saved `compare_process_options` comparisons give these **winner-minus-hand-made** differences:\n\n- **Far end:** walking −0.22 km [−0.83, +0.38]; wait +0.10 s [−1.16, +1.36]. **Neither exceeds the noise.**\n- **Centre:** walking −27.29 km [−30.94, −23.64], **beyond the noise**; wait −4.14 s [−9.68, +1.40], within noise.\n- **Entrance:** walking −27.37 km [−30.69, −24.05] and wait +3.85 s [+1.12, +6.59]. **Both exceed the noise:** less walking, slightly more waiting.\n\n*Sight lines mean sampled audience positions seeing the entire target front / target points seen by the camera. Tests used your heights, camera specification and 0.5 m end exclusions, with 0.5 m sampling. These are deterministic geometry results, so they have no statistical intervals.*\n\nThis is **not a proven optimum**, nor a demonstrated improvement over the original far-end layout. The model does not calculate crowding, density-related slowing, avoidance, queue spillback or moving people blocking views. Sight lines omit image quality and lighting; existing booth partitions are treated as transparent glass. Intervals describe simulation variability, not uncertainty in the assumed venue geometry.\n\n[Search evidence](/tmp/opt3-work/hall/harbourline-search-evidence.json) · [Complete project backup](/tmp/opt3-work/hall/harbourline-search-complete.laydyne.json)",
   "unit": null,
   "what": "the agent's final answer",
   "source": "docs/verification/layout-search/opt3/runs/hall.json"
  },
  {
   "id": "clinic.search1.progress",
   "value": {
    "phase": "done",
    "strategy": "grid",
    "candidatesInSpace": 9,
    "tried": 9,
    "rejected": 3,
    "simulated": 6,
    "missedThresholds": 0,
    "elapsedSeconds": 0.37,
    "timeLimitSeconds": 600
   },
   "unit": null,
   "what": "clinic search 1 (layout-a-busy-morning-estimates): candidates, rejected, simulated, seconds",
   "source": "docs/articles/layout-search/files/clinic-search-results.json"
  },
  {
   "id": "clinic.search1.rank1",
   "value": {
    "values": {
     "receptionists": 2,
     "nurses": 2
    },
    "cycle": {
     "measure": "run.cycle.mean",
     "goal": "min",
     "value": 2929.3,
     "low": 2503.36,
     "high": 3355.24
    },
    "vsCurrentCycle": {
     "mean": 0,
     "withinNoise": true
    },
    "measures": {
     "run.cycle.mean": {
      "value": 2929.3,
      "low": 2503.36,
      "high": 3355.24
     },
     "process.time.mean:checkin-wait": {
      "value": 17.4964,
      "low": 13.2412,
      "high": 21.7516
     },
     "process.time.mean:doctor-wait": {
      "value": 1771.58,
      "low": 1376.01,
      "high": 2167.16
     },
     "process.time.mean:payment-wait": {
      "value": 8.2504,
      "low": 6.3391,
      "high": 10.1618
     },
     "zone.occupancy.peak:waiting-demand": {
      "value": 15.1,
      "low": 12.2114,
      "high": 17.9886
     },
     "run.throughput.per_hour": {
      "value": 7.375,
      "low": 6.7485,
      "high": 8.0015
     },
     "run.wait.mean": {
      "value": 1978.72,
      "low": 1551.25,
      "high": 2406.18
     },
     "run.distance.total": {
      "value": 4303.23,
      "low": 3949.72,
      "high": 4656.73
     },
     "run.completed": {
      "value": 44.25,
      "low": 40.4909,
      "high": 48.0091
     },
     "parameter.receptionists": {
      "value": 2
     },
     "parameter.nurses": {
      "value": 2
     }
    }
   },
   "unit": "s",
   "what": "clinic search 1: rank 1",
   "source": "docs/articles/layout-search/files/clinic-search-results.json"
  },
  {
   "id": "clinic.search1.rank2",
   "value": {
    "values": {
     "receptionists": 3,
     "nurses": 1
    },
    "cycle": {
     "measure": "run.cycle.mean",
     "goal": "min",
     "value": 2950.1,
     "low": 2519.61,
     "high": 3380.6
    },
    "vsCurrentCycle": {
     "mean": 20.8052,
     "low": 4.5337,
     "high": 37.0767,
     "withinNoise": false
    },
    "measures": {
     "run.cycle.mean": {
      "value": 2950.1,
      "low": 2519.61,
      "high": 3380.6
     },
     "process.time.mean:checkin-wait": {
      "value": 2.4102,
      "low": 1.6956,
      "high": 3.1249
     },
     "process.time.mean:doctor-wait": {
      "value": 1784.91,
      "low": 1387.75,
      "high": 2182.07
     },
     "process.time.mean:payment-wait": {
      "value": 1.0831,
      "low": 0.5664,
      "high": 1.5999
     },
     "zone.occupancy.peak:waiting-demand": {
      "value": 15.3,
      "low": 12.3397,
      "high": 18.2603
     },
     "run.throughput.per_hour": {
      "value": 7.375,
      "low": 6.7485,
      "high": 8.0015
     },
     "run.wait.mean": {
      "value": 1999.5,
      "low": 1567.99,
      "high": 2431
     },
     "run.distance.total": {
      "value": 4304.09,
      "low": 3951.1,
      "high": 4657.09
     },
     "run.completed": {
      "value": 44.25,
      "low": 40.4909,
      "high": 48.0091
     },
     "parameter.receptionists": {
      "value": 3
     },
     "parameter.nurses": {
      "value": 1
     }
    }
   },
   "unit": "s",
   "what": "clinic search 1: rank 2",
   "source": "docs/articles/layout-search/files/clinic-search-results.json"
  },
  {
   "id": "clinic.search1.rank3",
   "value": {
    "values": {
     "receptionists": 2,
     "nurses": 1
    },
    "cycle": {
     "measure": "run.cycle.mean",
     "goal": "min",
     "value": 2958.74,
     "low": 2527.18,
     "high": 3390.3
    },
    "vsCurrentCycle": {
     "mean": 29.4416,
     "low": 13.4927,
     "high": 45.3906,
     "withinNoise": false
    },
    "measures": {
     "run.cycle.mean": {
      "value": 2958.74,
      "low": 2527.18,
      "high": 3390.3
     },
     "process.time.mean:checkin-wait": {
      "value": 17.0646,
      "low": 12.9183,
      "high": 21.2109
     },
     "process.time.mean:doctor-wait": {
      "value": 1772.05,
      "low": 1376.39,
      "high": 2167.7
     },
     "process.time.mean:payment-wait": {
      "value": 8.2869,
      "low": 6.4621,
      "high": 10.1118
     },
     "zone.occupancy.peak:waiting-demand": {
      "value": 15.3,
      "low": 12.3164,
      "high": 18.2836
     },
     "run.throughput.per_hour": {
      "value": 7.375,
      "low": 6.7485,
      "high": 8.0015
     },
     "run.wait.mean": {
      "value": 2008.15,
      "low": 1575.58,
      "high": 2440.72
     },
     "run.distance.total": {
      "value": 4303.52,
      "low": 3950.03,
      "high": 4657.01
     },
     "run.completed": {
      "value": 44.25,
      "low": 40.4909,
      "high": 48.0091
     },
     "parameter.receptionists": {
      "value": 2
     },
     "parameter.nurses": {
      "value": 1
     }
    }
   },
   "unit": "s",
   "what": "clinic search 1: rank 3",
   "source": "docs/articles/layout-search/files/clinic-search-results.json"
  },
  {
   "id": "clinic.search1.rank4",
   "value": {
    "values": {
     "receptionists": 1,
     "nurses": 3
    },
    "cycle": {
     "measure": "run.cycle.mean",
     "goal": "min",
     "value": 3266.39,
     "low": 2753.35,
     "high": 3779.44
    },
    "vsCurrentCycle": {
     "mean": 337.093,
     "low": 233.121,
     "high": 441.065,
     "withinNoise": false
    },
    "measures": {
     "run.cycle.mean": {
      "value": 3266.39,
      "low": 2753.35,
      "high": 3779.44
     },
     "process.time.mean:checkin-wait": {
      "value": 431.992,
      "low": 288.439,
      "high": 575.544
     },
     "process.time.mean:doctor-wait": {
      "value": 1394.85,
      "low": 1107.45,
      "high": 1682.25
     },
     "process.time.mean:payment-wait": {
      "value": 343.026,
      "low": 230.823,
      "high": 455.229
     },
     "zone.occupancy.peak:waiting-demand": {
      "value": 12,
      "low": 9.9856,
      "high": 14.0144
     },
     "run.throughput.per_hour": {
      "value": 7.375,
      "low": 6.7485,
      "high": 8.0015
     },
     "run.wait.mean": {
      "value": 2315.81,
      "low": 1800.04,
      "high": 2831.57
     },
     "run.distance.total": {
      "value": 4302.94,
      "low": 3950.46,
      "high": 4655.42
     },
     "run.completed": {
      "value": 44.25,
      "low": 40.4909,
      "high": 48.0091
     },
     "parameter.receptionists": {
      "value": 1
     },
     "parameter.nurses": {
      "value": 3
     }
    }
   },
   "unit": "s",
   "what": "clinic search 1: rank 4",
   "source": "docs/articles/layout-search/files/clinic-search-results.json"
  },
  {
   "id": "clinic.search1.rank5",
   "value": {
    "values": {
     "receptionists": 1,
     "nurses": 2
    },
    "cycle": {
     "measure": "run.cycle.mean",
     "goal": "min",
     "value": 3266.59,
     "low": 2753.59,
     "high": 3779.59
    },
    "vsCurrentCycle": {
     "mean": 337.29,
     "low": 233.337,
     "high": 441.243,
     "withinNoise": false
    },
    "measures": {
     "run.cycle.mean": {
      "value": 3266.59,
      "low": 2753.59,
      "high": 3779.59
     },
     "process.time.mean:checkin-wait": {
      "value": 431.774,
      "low": 288.216,
      "high": 575.332
     },
     "process.time.mean:doctor-wait": {
      "value": 1395.07,
      "low": 1107.71,
      "high": 1682.42
     },
     "process.time.mean:payment-wait": {
      "value": 342.234,
      "low": 230.176,
      "high": 454.292
     },
     "zone.occupancy.peak:waiting-demand": {
      "value": 12.05,
      "low": 10.0501,
      "high": 14.0499
     },
     "run.throughput.per_hour": {
      "value": 7.375,
      "low": 6.7485,
      "high": 8.0015
     },
     "run.wait.mean": {
      "value": 2316.01,
      "low": 1800.29,
      "high": 2831.72
     },
     "run.distance.total": {
      "value": 4302.94,
      "low": 3950.46,
      "high": 4655.42
     },
     "run.completed": {
      "value": 44.25,
      "low": 40.4909,
      "high": 48.0091
     },
     "parameter.receptionists": {
      "value": 1
     },
     "parameter.nurses": {
      "value": 2
     }
    }
   },
   "unit": "s",
   "what": "clinic search 1: rank 5",
   "source": "docs/articles/layout-search/files/clinic-search-results.json"
  },
  {
   "id": "clinic.search2.progress",
   "value": {
    "phase": "done",
    "strategy": "grid",
    "candidatesInSpace": 8,
    "tried": 8,
    "rejected": 4,
    "simulated": 4,
    "missedThresholds": 0,
    "elapsedSeconds": 0.27,
    "timeLimitSeconds": 600
   },
   "unit": null,
   "what": "clinic search 2 (layout-b-busy-morning): candidates, rejected, simulated, seconds",
   "source": "docs/articles/layout-search/files/clinic-search-results.json"
  },
  {
   "id": "clinic.search2.rank1",
   "value": {
    "values": {
     "checkinStaff": 1,
     "paymentStaff": 1,
     "nurses": 2
    },
    "cycle": {
     "measure": "run.cycle.mean",
     "goal": "min",
     "value": 2929.57,
     "low": 2502.71,
     "high": 3356.43
    },
    "vsCurrentCycle": {
     "mean": 0,
     "withinNoise": true
    },
    "measures": {
     "run.cycle.mean": {
      "value": 2929.57,
      "low": 2502.71,
      "high": 3356.43
     },
     "process.time.mean:checkin-wait": {
      "value": 113.606,
      "low": 79.5519,
      "high": 147.66
     },
     "process.time.mean:doctor-wait": {
      "value": 1697.78,
      "low": 1323.85,
      "high": 2071.71
     },
     "process.time.mean:payment-wait": {
      "value": 12.1569,
      "low": 10.2224,
      "high": 14.0913
     },
     "zone.occupancy.peak:waiting-demand": {
      "value": 14.7,
      "low": 11.9246,
      "high": 17.4754
     },
     "run.throughput.per_hour": {
      "value": 7.375,
      "low": 6.7485,
      "high": 8.0015
     },
     "run.wait.mean": {
      "value": 1996.73,
      "low": 1568.52,
      "high": 2424.95
     },
     "run.distance.total": {
      "value": 3518.03,
      "low": 3230.34,
      "high": 3805.73
     },
     "run.completed": {
      "value": 44.25,
      "low": 40.4909,
      "high": 48.0091
     },
     "parameter.checkinStaff": {
      "value": 1
     },
     "parameter.paymentStaff": {
      "value": 1
     },
     "parameter.nurses": {
      "value": 2
     }
    }
   },
   "unit": "s",
   "what": "clinic search 2: rank 1",
   "source": "docs/articles/layout-search/files/clinic-search-results.json"
  },
  {
   "id": "clinic.search2.rank2",
   "value": {
    "values": {
     "checkinStaff": 2,
     "paymentStaff": 1,
     "nurses": 1
    },
    "cycle": {
     "measure": "run.cycle.mean",
     "goal": "min",
     "value": 2945.49,
     "low": 2514.3,
     "high": 3376.69
    },
    "vsCurrentCycle": {
     "mean": 15.9188,
     "low": 0.2521,
     "high": 31.5855,
     "withinNoise": false
    },
    "measures": {
     "run.cycle.mean": {
      "value": 2945.49,
      "low": 2514.3,
      "high": 3376.69
     },
     "process.time.mean:checkin-wait": {
      "value": 7.8469,
      "low": 5.0461,
      "high": 10.6477
     },
     "process.time.mean:doctor-wait": {
      "value": 1779.35,
      "low": 1383.51,
      "high": 2175.19
     },
     "process.time.mean:payment-wait": {
      "value": 11.0584,
      "low": 9.3581,
      "high": 12.7587
     },
     "zone.occupancy.peak:waiting-demand": {
      "value": 15.35,
      "low": 12.3851,
      "high": 18.3149
     },
     "run.throughput.per_hour": {
      "value": 7.375,
      "low": 6.7485,
      "high": 8.0015
     },
     "run.wait.mean": {
      "value": 2012.63,
      "low": 1580.45,
      "high": 2444.8
     },
     "run.distance.total": {
      "value": 3518.9,
      "low": 3232.09,
      "high": 3805.71
     },
     "run.completed": {
      "value": 44.25,
      "low": 40.4909,
      "high": 48.0091
     },
     "parameter.checkinStaff": {
      "value": 2
     },
     "parameter.paymentStaff": {
      "value": 1
     },
     "parameter.nurses": {
      "value": 1
     }
    }
   },
   "unit": "s",
   "what": "clinic search 2: rank 2",
   "source": "docs/articles/layout-search/files/clinic-search-results.json"
  },
  {
   "id": "clinic.search2.rank3",
   "value": {
    "values": {
     "checkinStaff": 1,
     "paymentStaff": 2,
     "nurses": 1
    },
    "cycle": {
     "measure": "run.cycle.mean",
     "goal": "min",
     "value": 2948.18,
     "low": 2515.03,
     "high": 3381.33
    },
    "vsCurrentCycle": {
     "mean": 18.604,
     "low": 2.4705,
     "high": 34.7376,
     "withinNoise": false
    },
    "measures": {
     "run.cycle.mean": {
      "value": 2948.18,
      "low": 2515.03,
      "high": 3381.33
     },
     "process.time.mean:checkin-wait": {
      "value": 113.606,
      "low": 79.5519,
      "high": 147.66
     },
     "process.time.mean:doctor-wait": {
      "value": 1697.78,
      "low": 1323.85,
      "high": 2071.71
     },
     "process.time.mean:payment-wait": {
      "value": 0.2564,
      "low": -0.0225,
      "high": 0.5353
     },
     "zone.occupancy.peak:waiting-demand": {
      "value": 14.9,
      "low": 12.1254,
      "high": 17.6746
     },
     "run.throughput.per_hour": {
      "value": 7.375,
      "low": 6.7485,
      "high": 8.0015
     },
     "run.wait.mean": {
      "value": 2015.34,
      "low": 1581.34,
      "high": 2449.33
     },
     "run.distance.total": {
      "value": 3518.03,
      "low": 3230.34,
      "high": 3805.73
     },
     "run.completed": {
      "value": 44.25,
      "low": 40.4909,
      "high": 48.0091
     },
     "parameter.checkinStaff": {
      "value": 1
     },
     "parameter.paymentStaff": {
      "value": 2
     },
     "parameter.nurses": {
      "value": 1
     }
    }
   },
   "unit": "s",
   "what": "clinic search 2: rank 3",
   "source": "docs/articles/layout-search/files/clinic-search-results.json"
  },
  {
   "id": "clinic.search2.rank4",
   "value": {
    "values": {
     "checkinStaff": 1,
     "paymentStaff": 1,
     "nurses": 1
    },
    "cycle": {
     "measure": "run.cycle.mean",
     "goal": "min",
     "value": 2958.46,
     "low": 2525.25,
     "high": 3391.68
    },
    "vsCurrentCycle": {
     "mean": 28.8918,
     "low": 12.775,
     "high": 45.0087,
     "withinNoise": false
    },
    "measures": {
     "run.cycle.mean": {
      "value": 2958.46,
      "low": 2525.25,
      "high": 3391.68
     },
     "process.time.mean:checkin-wait": {
      "value": 113.606,
      "low": 79.5519,
      "high": 147.66
     },
     "process.time.mean:doctor-wait": {
      "value": 1697.78,
      "low": 1323.85,
      "high": 2071.71
     },
     "process.time.mean:payment-wait": {
      "value": 10.5442,
      "low": 9.028,
      "high": 12.0604
     },
     "zone.occupancy.peak:waiting-demand": {
      "value": 14.9,
      "low": 12.1254,
      "high": 17.6746
     },
     "run.throughput.per_hour": {
      "value": 7.375,
      "low": 6.7485,
      "high": 8.0015
     },
     "run.wait.mean": {
      "value": 2025.63,
      "low": 1591.56,
      "high": 2459.69
     },
     "run.distance.total": {
      "value": 3518.03,
      "low": 3230.34,
      "high": 3805.73
     },
     "run.completed": {
      "value": 44.25,
      "low": 40.4909,
      "high": 48.0091
     },
     "parameter.checkinStaff": {
      "value": 1
     },
     "parameter.paymentStaff": {
      "value": 1
     },
     "parameter.nurses": {
      "value": 1
     }
    }
   },
   "unit": "s",
   "what": "clinic search 2: rank 4",
   "source": "docs/articles/layout-search/files/clinic-search-results.json"
  },
  {
   "id": "clinic.answer",
   "value": "**Keep option A with 2 receptionists and 2 nurses.** It had the lowest average visit time, but was statistically tied with B. No searched staffing change improved on your existing A.\n\nI parameterized both scenarios and used `search_layouts` to evaluate **10 feasible candidates: 6 on A and 4 on B**, each for 20 mornings starting at seed **20261006**. Both doctors and all other assumptions stayed unchanged.\n\n`compare_process_options` confirmed that the search winner matches saved A exactly. Compared with saved B:\n\n- **Total visit:** 0.27 seconds shorter; within noise (95% difference interval −12.33 to +11.78 seconds).\n- **Check-in:** 96.1 seconds shorter (64.9–127.3).\n- **Doctor wait:** 73.8 seconds longer (44.4–103.2).\n- **Payment:** 3.9 seconds shorter (1.4–6.5).\n- **Morning waiting-area peak:** 0.4 people higher (0.08–0.72).\n\nThe last four differences are beyond the simulation noise.\n\n**Chairs:** A/the winner reached **32 waiting patients at once**, exceeding 20 chairs by **12**. Four of the 20 mornings exceeded capacity. The average-peak interval below is not a capacity guarantee.\n\nThe live layout is back on **A**, with both parameterized scenarios and comparisons saved. This is the **best of the candidates searched, not a proven optimum**; arrival and service times remain the doctor’s rough guesses.\n\nAll times below are **minutes**, with **95% confidence intervals** in parentheses. Doctor wait means before the first consultation; total time includes subsequent care. Peak means the average of each morning’s maximum occupancy.\n\n| Option | Receptionists / nurses | Payment counter | Arrive → leave | Check-in wait | Doctor wait | Payment wait | Mean morning peak |\n|---|---|---|---:|---:|---:|---:|---:|\n| A | 2 / 2 | Shared | 48.82 (41.72–55.92) | 0.29 (0.22–0.36) | 29.53 (22.93–36.12) | 0.14 (0.11–0.17) | 15.1 (12.2–18.0) |\n| B | 2 / 2; reception 1 check-in + 1 payment | Separate | 48.83 (41.71–55.94) | 1.89 (1.33–2.46) | 28.30 (22.06–34.53) | 0.20 (0.17–0.23) | 14.7 (11.9–17.5) |\n| Search best: A | 2 / 2 | Shared | 48.82 (41.72–55.92) | 0.29 (0.22–0.36) | 29.53 (22.93–36.12) | 0.14 (0.11–0.17) | 15.1 (12.2–18.0) |",
   "unit": null,
   "what": "the agent's final answer (comparisons with options A and B, per-morning waiting-area peaks from perRun)",
   "source": "docs/verification/layout-search/opt3/runs/clinic.json"
  },
  {
   "id": "timing.browser.grid",
   "value": {
    "tabSeconds": 16.3,
    "simulated": 240
   },
   "unit": "s",
   "what": "the warehouse grid (300 candidates × 20 runs) sent directly over MCP: seconds in the tab",
   "source": "docs/verification/layout-search/runs/browser-amr.json"
  },
  {
   "id": "timing.node.grid",
   "value": 23.19,
   "unit": "s",
   "what": "the same grid in Node (validate.ts)",
   "source": "docs/verification/layout-search/runs/amr.json"
  }
 ]
}
