{
  "schema_version": "1.0",
  "id": "pub-24f9dfefd06c9f8c",
  "project_id": "claude-cc-p5-m01",
  "mission_id": null,
  "title": "P5-M01 — Canal Obsidian opérationnel (RM-093/RC-093)",
  "summary": "Canal Demande→statut testé sur bancs : idempotence scanner IN VIVO (3 passages, state bit-à-bit identique, 3 pending inchangés), staging scanner/settle (refus secret fail-closed, conflit de sync, renommage, édition du corps, arrêt/reprise sans perte), chaîne d'état request→approval→mission→execution→Mission Control livrée sur la branche mission/p5-m01-canal (bp_canal_chain.py p5-m01/v0.1, GET-only, doublons flaggés, GENERATED), 19 tests + suite 36 PASS. Cron/watcher NON activés : AWAITING_OPERATOR. Doublon d'approbations dm-20261024-cron constaté (2 pending) : UNE seule décision à trancher. Rollback : branche dédiée + fichiers GENERATED supprimables. Voir RM-093 et RC-093.",
  "body": "",
  "status": "published",
  "report_type": "final_report",
  "published_at": "2026-10-24T10:45:08Z",
  "updated_at": "2026-10-24T10:45:08Z",
  "revision": 1,
  "authoring_agent": "claude-cc-p5-m01",
  "tags": [],
  "public_url": "/rapports/pub-24f9dfefd06c9f8c",
  "markdown_url": "/public/reports/pub-24f9dfefd06c9f8c.md",
  "json_url": "/public/reports/pub-24f9dfefd06c9f8c.json",
  "content_hash": "sha256:641fde371cd86006d128514da6975634d093cf17ef3104b3c088bda1122bb5bc",
  "artifacts": []
}