[
  {
    "id": "equipment",
    "title": "Machine & workforce rendering",
    "claim": "Selectable 3D equipment, articulated mechanisms and illustrative workers; source-linked inventory and authored geometry.",
    "availability": "Browser demo",
    "implementation": [
      "machines.js",
      "workers.js",
      "scene.js",
      "mechanism-inspector.js",
      "workforce-inspector.js"
    ],
    "evidence": "out/factory-metrology-20260915/RESULT.json; ci/browser/factory_workers_check.py",
    "limits": "Geometry and workforce are interpretations; no measured layout or staffing claim."
  },
  {
    "id": "logistics",
    "title": "Individual material logistics",
    "claim": "Carrier journeys, loading, unloading, route reservations and finite stage queues share the production schedule.",
    "availability": "Browser demo",
    "implementation": [
      "logistics-model.js",
      "logistics-scene.js",
      "collision-reservations.js"
    ],
    "evidence": "ci/factory_picking.mjs; ci/factory_lot_pipeline.mjs",
    "limits": "Modeled clearance and travel are not certified vehicle dynamics or safety validation."
  },
  {
    "id": "materials",
    "title": "Stock, FIFO lots & physical picking",
    "claim": "Order release reserves a complete kit. Physical stock, capacity occupancy and holding cost remain until carrier pickup. Repairs use unreserved stock.",
    "availability": "Browser demo + event replay",
    "implementation": [
      "inventory.js",
      "material-lots.js",
      "production-ledger.js"
    ],
    "evidence": "out/factory-picking-20260915/; ci/factory_picking.mjs",
    "limits": "Modeled lot IDs are not supplier certificates. Physical bins, WIP and finished-goods warehousing remain unfinished."
  },
  {
    "id": "states",
    "title": "Machine states & finite queues",
    "claim": "Working, idle, blocked, fault and planned-stop durations derive from scheduled histories. Products have stage routes, machine eligibility and cycle assumptions.",
    "availability": "Browser demo",
    "implementation": [
      "logistics-model.js",
      "production-ledger.js",
      "machine-states.js"
    ],
    "evidence": "ci/browser/factory_state_costs_check.py",
    "limits": "Support inventory does not imply every asset has a full operational model."
  },
  {
    "id": "repairs",
    "title": "Staffing, spares & repair workflows",
    "claim": "Finite engineers, skills, shift windows, travel and service compete for time and shared stock. Try a different crew or prevent an authored breakdown.",
    "availability": "Browser demo",
    "implementation": [
      "repair-travel.js",
      "crew-availability.js",
      "inventory.js",
      "experiment-model.js"
    ],
    "evidence": "ci/factory_energy_experiments.mjs; docs/internal/factory-operations.md",
    "limits": "Simulated repairs do not command equipment or certify maintenance procedures."
  },
  {
    "id": "economics",
    "title": "Energy, cost & statistics",
    "claim": "Query resource, product, order, material and lot metrics; account for state-dependent energy and rates, stock holding time and revenue at modeled dispatch.",
    "availability": "Browser demo",
    "implementation": [
      "production-ledger.js",
      "state-economics.js",
      "statistics-registry.js"
    ],
    "evidence": "ci/browser/factory_state_costs_check.py; ci/factory_lot_pipeline.mjs",
    "limits": "Rates are assumptions unless verified. Unknown values remain unknown; modeled contribution is not accounting profit."
  },
  {
    "id": "experiments",
    "title": "Experiments & synchronized comparisons",
    "claim": "Pin baseline inputs, vary carriers, queue space, cycles, release interval or repair staffing, compare both at one time, and export/reopen results.",
    "availability": "Browser demo",
    "implementation": [
      "experiment-lab.js",
      "experiment-model.js",
      "resource-impact.js"
    ],
    "evidence": "out/factory-experiment-import-20260915/ACCEPTANCE.json; ci/browser/factory_experiments_check.py",
    "limits": "Scenario outcomes are model results, not promised savings."
  },
  {
    "id": "boundary",
    "title": "Factory inputs, outputs & demand",
    "claim": "Explicit product requests enter the same scheduler. Follow receiving, reserved stock, shipments, open demand and due dates; filter system types and toggle exterior context.",
    "availability": "Browser demo",
    "implementation": [
      "factory-boundary.js",
      "boundary-panel.js",
      "boundary-layer.js",
      "system-types.js"
    ],
    "evidence": "out/factory-boundary-20260915/; ci/factory_boundary.mjs",
    "limits": "Ports are logical model positions. Modeled dispatch is not a physical truck manifest or inter-factory transfer."
  },
  {
    "id": "workspace",
    "title": "Durable scenarios, work queues & results",
    "claim": "Named organization-scoped factories, simulation/todo queues, recoverable leases, saved immutable metrics, event cursors and same-organization factory messages.",
    "availability": "Connected application",
    "implementation": [
      "app/factory_runs.py",
      "web/factory-workbench.js",
      "app/main.py"
    ],
    "evidence": "out/factory-service-20260915/; factory_runs_test.py; docs/internal/factory-operations.md",
    "limits": "Public site has no shared backend. Browser demo uses portable scenario files. Fleet load, autoscaling and multi-day server checkpoints remain unproved."
  },
  {
    "id": "sources",
    "title": "Many sources, qualified identities",
    "claim": "Asset references retain video/camera/document source IDs and time or page locators. Observation, model interpretation and unknowns stay separate.",
    "availability": "Browser inventory; connected observations",
    "implementation": [
      "evidence-sources.js",
      "app/factory_sources.py",
      "condition-evidence.js"
    ],
    "evidence": "out/factory-sources-20260915/; out/factory-condition-evidence-20260915/RESULT.json",
    "limits": "No source frames redistributed. Creator links do not establish rights to reuse recordings."
  },
  {
    "id": "conditions",
    "title": "Reported conditions & incident history",
    "claim": "Registered gateway and asset scope, expiring reports, conflicting evidence, searchable evidence exports and customer or showroom incident investigations.",
    "availability": "Connected application",
    "implementation": [
      "condition-panel.js",
      "condition-evidence.js",
      "incident-journal.js",
      "app/factory_conditions.py"
    ],
    "evidence": "out/factory-customer-conditions-20260915/RESULT.json; out/factory-customer-incidents-20260915/RESULT.json",
    "limits": "Public demo has no camera connection. Connected customer investigations retain gateway scope and original report evidence; resolving an incident does not change machine condition."
  },
  {
    "id": "evaluation",
    "title": "Detector evaluation",
    "claim": "Import labelled predictions; inspect missed faults, false alarms, abstentions, denominators and per-source coverage. Export results locally.",
    "availability": "Self-contained evaluation tool",
    "implementation": [
      "condition-validation.js",
      "web/factory-condition-validation.js",
      "tools/factory_indicator.py",
      "tools/factory_indicator_video.py"
    ],
    "evidence": "out/factory-source-evaluation-20260915/RESULT.json; out/factory-indicator-20260915/RESULT.json; out/factory-indicator-video-20260915/RESULT.json",
    "limits": "Synthetic examples test the evaluator, not physical detector accuracy. The offline configured indicator reader and video importer preserve timestamps and abstentions. MediaMTX/OPC UA commissioning remains a pilot."
  }
]
