{
  "lab_id": "DAT018-LAB1",
  "objective": "Prove local durable publish intent, relay retry behavior, and reconciliation in a bounded transactional-outbox fixture.",
  "critical_dimensions": [
    "dual_write_gap",
    "durable_intent",
    "outbox_transaction",
    "relay_retry",
    "reconciliation"
  ],
  "required_evidence": [
    "transactional domain+intent commit",
    "forced local rollback",
    "direct dual-write gap",
    "publish-before-mark retry duplicate candidate",
    "stuck-intent reconciliation",
    "evidence completeness probe",
    "changed-context transfer",
    "residual consumer risk statement"
  ],
  "runtime_rule": "Only the bundled disposable in-memory fixture may be observed. External network, broker, database server, cloud service, production data, and production behavior are out of scope.",
  "decision_rule": "Runner writes raw local observations only; learner supplies final bounded reliability decision.",
  "safety": "Synthetic local data only; no external network, broker, database server, cloud service, or production credentials.",
  "event_identity_payload_rule": "One stable event_id must remain bound to the same aggregate_key, event_type, and canonical payload fingerprint across relay retries; divergent payload under the same event_id is an identity collision and must not publish.",
  "reconciliation_threshold_rule": "A pending row is reconcilable only when its age_seconds is greater than or equal to the declared threshold; younger pending rows and PUBLISHED rows are excluded.",
  "probe_semantics_rule": "All five named probe IDs are contract data and must execute exactly once after complete learner predictions.",
  "prediction_completeness_rule": "All five required case predictions must be present before runtime execution.",
  "provenance_rule": "Local observations must bind baseline state, probe cases, golden policy, requirements, toolchain policy, outbox fixture, static preflight, and learner decision by SHA-256.",
  "crash_window_state_rule": "A publish-before-mark crash must leave the actual outbox row PENDING; returned evidence may not contradict live fixture state."
}
