{
  "schemaVersion": "0.1",
  "id": "dispatch-reconciliation",
  "name": "Reconcile a warehouse dispatch from inconsistent exports",
  "hypothesis": "A concise canonical-source and join-key index may improve completion of a multi-file reconciliation task. Both conditions contain identical operational facts and policy. This experiment tests this particular navigation change, not a universal rule about context length.",
  "task": {
    "id": "prepare-noon-dispatch",
    "version": "1",
    "prompt": "Prepare the noon warehouse dispatch handoff from this workspace. Reconcile all order lines, payment/refund events, stock movements and customer hold history under the current policy. Produce a complete order ledger, every policy-defined data exception, and the safe whole-order dispatch plan. This is an offline review; do not call external services or change files.\nReturn exactly one JSON object with three keys:\n- \"ledger.csv\": a CSV string, header order_id,total_minor,net_paid_minor,decision, one row per order sorted by order_id; decisions are invalid_sku, cancelled, held, unpaid, backorder, or ship.\n- \"exceptions.json\": an array of objects with exactly kind, source, recordId for each policy-defined exception. Order does not matter.\n- \"dispatch.json\": an object with exactly cutoff (ISO timestamp), shipments (array in allocation order, each {orderId,items:[{sku,quantity}]} using canonical SKUs), and remainingStock (object containing every canonical SKU and its final integer quantity). Sort shipment items by sku.\nNo markdown fences or additional commentary. All three outputs are required, including orders that must not ship."
  },
  "surfaces": {
    "baseline": {
      "path": "baseline",
      "revision": "warehouse-v1-generic-entrypoint"
    },
    "candidate": {
      "path": "candidate",
      "revision": "warehouse-v1-source-and-join-index"
    }
  },
  "agent": {
    "kind": "codex",
    "model": "gpt-6-astra",
    "reasoning": "low",
    "executable": "/Applications/ChatGPT.app/Contents/Resources/codex",
    "configuration": "isolated"
  },
  "verifier": {
    "command": [
      "node",
      "verify.mjs"
    ],
    "version": "1",
    "files": [
      "verify.mjs",
      "validation.mjs",
      "expected.json"
    ],
    "controls": [
      {
        "id": "all-reconciled",
        "output": "{\"ledger.csv\":\"order_id,total_minor,net_paid_minor,decision\\nO101,3000,3000,ship\\nO102,4000,4000,held\\nO103,2000,2000,ship\\nO104,5000,0,unpaid\\nO105,6000,6000,ship\\nO106,6000,6000,cancelled\\nO107,4000,4000,backorder\\nO108,1500,1500,ship\\nO109,5000,5000,ship\\nO110,1000,1000,invalid_sku\\n\",\"exceptions.json\":[{\"kind\":\"duplicate_event\",\"source\":\"exports/payments.csv\",\"recordId\":\"P10\"},{\"kind\":\"unknown_order\",\"source\":\"exports/payments.csv\",\"recordId\":\"P12\"},{\"kind\":\"currency_mismatch\",\"source\":\"exports/payments.csv\",\"recordId\":\"P13\"},{\"kind\":\"duplicate_event\",\"source\":\"exports/stock.csv\",\"recordId\":\"S01\"},{\"kind\":\"conflicting_event\",\"source\":\"exports/stock.csv\",\"recordId\":\"S09\"},{\"kind\":\"unknown_sku\",\"source\":\"exports/order-lines.csv\",\"recordId\":\"L12\"}],\"dispatch.json\":{\"cutoff\":\"2026-06-03T12:00:00Z\",\"shipments\":[{\"orderId\":\"O101\",\"items\":[{\"sku\":\"CABLE\",\"quantity\":2},{\"sku\":\"HUB\",\"quantity\":1}]},{\"orderId\":\"O103\",\"items\":[{\"sku\":\"CABLE\",\"quantity\":4}]},{\"orderId\":\"O105\",\"items\":[{\"sku\":\"HUB\",\"quantity\":3}]},{\"orderId\":\"O108\",\"items\":[{\"sku\":\"CABLE\",\"quantity\":3}]},{\"orderId\":\"O109\",\"items\":[{\"sku\":\"DOCK\",\"quantity\":1}]}],\"remainingStock\":{\"CABLE\":0,\"DOCK\":1,\"HUB\":1}}}",
        "expectedPass": true
      },
      {
        "id": "unpaid-shipment",
        "output": "{\"ledger.csv\":\"order_id,total_minor,net_paid_minor,decision\\nO101,3000,3000,ship\\nO102,4000,4000,held\\nO103,2000,2000,ship\\nO104,5000,0,unpaid\\nO105,6000,6000,ship\\nO106,6000,6000,cancelled\\nO107,4000,4000,backorder\\nO108,1500,1500,ship\\nO109,5000,5000,ship\\nO110,1000,1000,invalid_sku\\n\",\"exceptions.json\":[{\"kind\":\"duplicate_event\",\"source\":\"exports/payments.csv\",\"recordId\":\"P10\"},{\"kind\":\"unknown_order\",\"source\":\"exports/payments.csv\",\"recordId\":\"P12\"},{\"kind\":\"currency_mismatch\",\"source\":\"exports/payments.csv\",\"recordId\":\"P13\"},{\"kind\":\"duplicate_event\",\"source\":\"exports/stock.csv\",\"recordId\":\"S01\"},{\"kind\":\"conflicting_event\",\"source\":\"exports/stock.csv\",\"recordId\":\"S09\"},{\"kind\":\"unknown_sku\",\"source\":\"exports/order-lines.csv\",\"recordId\":\"L12\"}],\"dispatch.json\":{\"cutoff\":\"2026-06-03T12:00:00Z\",\"shipments\":[{\"orderId\":\"O101\",\"items\":[{\"sku\":\"CABLE\",\"quantity\":2},{\"sku\":\"HUB\",\"quantity\":1}]},{\"orderId\":\"O103\",\"items\":[{\"sku\":\"CABLE\",\"quantity\":4}]},{\"orderId\":\"O105\",\"items\":[{\"sku\":\"HUB\",\"quantity\":3}]},{\"orderId\":\"O108\",\"items\":[{\"sku\":\"CABLE\",\"quantity\":3}]},{\"orderId\":\"O109\",\"items\":[{\"sku\":\"DOCK\",\"quantity\":1}]},{\"orderId\":\"O104\",\"items\":[{\"sku\":\"DOCK\",\"quantity\":1}]}],\"remainingStock\":{\"CABLE\":0,\"DOCK\":1,\"HUB\":1}}}",
        "expectedPass": false
      },
      {
        "id": "missing-exception",
        "output": "{\"ledger.csv\":\"order_id,total_minor,net_paid_minor,decision\\nO101,3000,3000,ship\\nO102,4000,4000,held\\nO103,2000,2000,ship\\nO104,5000,0,unpaid\\nO105,6000,6000,ship\\nO106,6000,6000,cancelled\\nO107,4000,4000,backorder\\nO108,1500,1500,ship\\nO109,5000,5000,ship\\nO110,1000,1000,invalid_sku\\n\",\"exceptions.json\":[{\"kind\":\"duplicate_event\",\"source\":\"exports/payments.csv\",\"recordId\":\"P10\"},{\"kind\":\"unknown_order\",\"source\":\"exports/payments.csv\",\"recordId\":\"P12\"},{\"kind\":\"currency_mismatch\",\"source\":\"exports/payments.csv\",\"recordId\":\"P13\"},{\"kind\":\"duplicate_event\",\"source\":\"exports/stock.csv\",\"recordId\":\"S01\"},{\"kind\":\"conflicting_event\",\"source\":\"exports/stock.csv\",\"recordId\":\"S09\"}],\"dispatch.json\":{\"cutoff\":\"2026-06-03T12:00:00Z\",\"shipments\":[{\"orderId\":\"O101\",\"items\":[{\"sku\":\"CABLE\",\"quantity\":2},{\"sku\":\"HUB\",\"quantity\":1}]},{\"orderId\":\"O103\",\"items\":[{\"sku\":\"CABLE\",\"quantity\":4}]},{\"orderId\":\"O105\",\"items\":[{\"sku\":\"HUB\",\"quantity\":3}]},{\"orderId\":\"O108\",\"items\":[{\"sku\":\"CABLE\",\"quantity\":3}]},{\"orderId\":\"O109\",\"items\":[{\"sku\":\"DOCK\",\"quantity\":1}]}],\"remainingStock\":{\"CABLE\":0,\"DOCK\":1,\"HUB\":1}}}",
        "expectedPass": false
      },
      {
        "id": "double-counted-stock",
        "output": "{\"ledger.csv\":\"order_id,total_minor,net_paid_minor,decision\\nO101,3000,3000,ship\\nO102,4000,4000,held\\nO103,2000,2000,ship\\nO104,5000,0,unpaid\\nO105,6000,6000,ship\\nO106,6000,6000,cancelled\\nO107,4000,4000,backorder\\nO108,1500,1500,ship\\nO109,5000,5000,ship\\nO110,1000,1000,invalid_sku\\n\",\"exceptions.json\":[{\"kind\":\"duplicate_event\",\"source\":\"exports/payments.csv\",\"recordId\":\"P10\"},{\"kind\":\"unknown_order\",\"source\":\"exports/payments.csv\",\"recordId\":\"P12\"},{\"kind\":\"currency_mismatch\",\"source\":\"exports/payments.csv\",\"recordId\":\"P13\"},{\"kind\":\"duplicate_event\",\"source\":\"exports/stock.csv\",\"recordId\":\"S01\"},{\"kind\":\"conflicting_event\",\"source\":\"exports/stock.csv\",\"recordId\":\"S09\"},{\"kind\":\"unknown_sku\",\"source\":\"exports/order-lines.csv\",\"recordId\":\"L12\"}],\"dispatch.json\":{\"cutoff\":\"2026-06-03T12:00:00Z\",\"shipments\":[{\"orderId\":\"O101\",\"items\":[{\"sku\":\"CABLE\",\"quantity\":2},{\"sku\":\"HUB\",\"quantity\":1}]},{\"orderId\":\"O103\",\"items\":[{\"sku\":\"CABLE\",\"quantity\":4}]},{\"orderId\":\"O105\",\"items\":[{\"sku\":\"HUB\",\"quantity\":3}]},{\"orderId\":\"O108\",\"items\":[{\"sku\":\"CABLE\",\"quantity\":3}]},{\"orderId\":\"O109\",\"items\":[{\"sku\":\"DOCK\",\"quantity\":1}]}],\"remainingStock\":{\"CABLE\":12,\"DOCK\":1,\"HUB\":1}}}",
        "expectedPass": false
      }
    ]
  },
  "design": {
    "repetitions": 4,
    "seed": 20260908,
    "minimumEffect": 0
  },
  "limits": {
    "trialTimeoutMs": 100000,
    "verifierTimeoutMs": 5000,
    "totalTimeoutMs": 900000,
    "maxOutputBytes": 1000000,
    "maxSurfaceBytes": 1000000,
    "maxSurfaceFiles": 100
  }
}
