{
  "canon_meta": {
    "canon_id": "devon-panel-sync-contract",
    "version": "1.0.0",
    "status": "ACTIVE",
    "sync_mode": "canon_snapshot_delivery"
  },
  "panel_sync_contract": {
    "objective": "Define the exact contract for synchronizing canon-derived panel data from Devon control plane to the live panel host.\n",
    "source": {
      "canonical_root": "/opt/devon/canon",
      "required_inputs": [
        "08_canonical_matrix_v1.yaml",
        "09_panel_navigation_spec.yaml",
        "10_panel_data_contract.yaml",
        "11_panel_content_index.yaml",
        "12_panel_ui_blueprint.yaml",
        "13_panel_component_contract.yaml"
      ]
    },
    "target": {
      "panel_data_root": "/home/yeff/public_html/devon/canon/execution/state/dh_sources",
      "required_outputs": [
        "panel_manifest.json",
        "canonical_matrix_v1.json",
        "panel_navigation_spec.json",
        "panel_content_index.json",
        "panel_ui_blueprint.json",
        "panel_component_contract.json"
      ]
    },
    "manifest_contract": {
      "required_fields": [
        "manifest_version",
        "generated_at_utc",
        "source_host",
        "target_host",
        "export_set",
        "source_hashes",
        "sync_status"
      ]
    },
    "delivery_rules": [
      "target_directory_must_exist",
      "transfer_must_be_atomic_when_possible",
      "old_snapshot_may_be_rotated_to_backup",
      "panel_must_read_json_read_only",
      "ui_status_must_still_be_evidence_based"
    ],
    "blockers": [
      "missing_source_inputs",
      "yaml_parse_failure",
      "json_export_failure",
      "target_unwritable",
      "ssh_transport_failure"
    ],
    "status_rules": {
      "PASS": "source inputs validated, outputs generated, manifest written and files delivered",
      "FAIL": "sync attempted but validation/export/transfer failed",
      "MISSING": "sync contract or required sync evidence does not exist"
    }
  }
}
