{"artifact":"operator-release-handoff-package-v1","generated_at":"2026-05-14T09:39:55.300234Z","release_id":"intellicore-20260514T093955300234Z","credentials":"redacted","safe_posture":{"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"owner_operator_summary":{"artifact":"owner-operator-release-summary-v1","generated_at":"2026-05-14T09:39:55.300234Z","release_id":"intellicore-20260514T093955300234Z","scope":{"customer_ref":"not_provided","site_ref":"all","building_ref":"all","equipment_ref":"all","point_refs":[]},"trend_history":{"status":"blocked_trend_history_release_preflight","freshness":"missing","point_count":0,"total_samples":0,"stale_point_ids":[],"blockers":["explicit_equipment_scope_required","missing_scoped_trend_history_evidence","source_status:not_requested_explicit_equipment_scope_required"]},"alarm_event":{"status":"blocked_alarm_event_release_preflight","freshness":"missing","event_count":0,"active_event_count":0,"critical_or_high_event_count":0,"acknowledged_count":0,"blockers":["explicit_equipment_scope_required","missing_scoped_alarm_event_evidence","source_status:not_requested_explicit_equipment_scope_required"]},"freshness_staleness":{"trend_history":"missing","alarm_event":"missing"},"critical_blockers":[{"category":"trend_history","blocker":"explicit_equipment_scope_required","owner_visible":"true"},{"category":"trend_history","blocker":"missing_scoped_trend_history_evidence","owner_visible":"true"},{"category":"trend_history","blocker":"source_status:not_requested_explicit_equipment_scope_required","owner_visible":"true"},{"category":"alarm_event","blocker":"explicit_equipment_scope_required","owner_visible":"true"},{"category":"alarm_event","blocker":"missing_scoped_alarm_event_evidence","owner_visible":"true"},{"category":"alarm_event","blocker":"source_status:not_requested_explicit_equipment_scope_required","owner_visible":"true"},{"category":"operator_handoff","blocker":"semantic_role:zone_temperature","owner_visible":"true"},{"category":"operator_handoff","blocker":"semantic_role:zone_setpoint","owner_visible":"true"},{"category":"operator_handoff","blocker":"trend_samples","owner_visible":"true"},{"category":"operator_handoff","blocker":"occupancy_signals","owner_visible":"true"},{"category":"operator_handoff","blocker":"weather_observations","owner_visible":"true"},{"category":"operator_handoff","blocker":"occupancy_evidence:explicit_equipment_scope_required","owner_visible":"true"},{"category":"operator_handoff","blocker":"weather_forecast:missing_scoped_weather_forecast","owner_visible":"true"}],"safety_posture":{"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"read_only":true,"alarm_acknowledgement_enabled":false,"bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","publish_action_performed":false},"evidence_references":{"handoff_json_api":"/api/operator/release-handoff","handoff_markdown_api":"/api/operator/release-handoff/report.md","package_preflight_api":"/api/operator/release-handoff/preflight.json","trend_history_evidence_api":"/api/operator/release-handoff/trend-history-evidence.json","alarm_event_evidence_api":"/api/operator/release-handoff/alarm-event-evidence.json","integrity_manifest_api":"/api/operator/release-handoff/integrity.json","archive_index_api":"/api/operator/release-handoff/archive-index.json"},"publish_deploy_readiness":{"ready_for_owner_handoff":false,"trend_history_ready":false,"alarm_event_ready":false,"safety_fail_closed":true,"overall_status":"pass_with_operator_placeholders","deployment_status":"deployable_with_placeholders","release_checklist_status":"pass_with_placeholders","remote_smoke_requires_operator_url_and_auth":true},"recommended_owner_action":"Do not approve owner handoff yet; require operator to clear critical trend/alarm evidence blockers first.","recommended_operator_action":"Refresh scoped trend/alarm evidence, regenerate preflight artifacts, and rerun no-network/no-write verification.","credentials":"redacted","advisory_only":true,"read_only":true,"write_execution_enabled":false,"alarm_acknowledgement_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"manual_release_gates":{"artifact":"operator-release-manual-gates-v1","status":"blocked_manual_operator_gates_pending","readiness_summary":{"deployment_readiness_status":"deployable_with_placeholders","release_checklist_status":"pass_with_placeholders","predictive_readiness_status":"blocked_missing_inputs","alarm_event_status":"not_requested_explicit_equipment_scope_required"},"deployment_target":{"provider":"not_confirmed","compute":"unsupported_or_placeholder","value_state":"missing_or_unsupported"},"storage_backup_preflight_status":"blocked_missing_or_unsafe_storage_posture","required_artifacts":{"operator_release_handoff_json":"/api/operator/release-handoff","operator_release_handoff_markdown":"/api/operator/release-handoff/report.md","operator_release_handoff_package":"/api/operator/release-handoff/package.json","integrity_manifest":"/api/operator/release-handoff/integrity.json","archive_index":"/api/operator/release-handoff/archive-index.json","evidence_retention_report":"/api/operator/release-handoff/evidence-retention.json","release_package_preflight":"/api/operator/release-handoff/preflight.json","release_cutover_rollback_checklist":"/api/operator/release-handoff/cutover-rollback-checklist.json","deployment_readiness":"/api/deployment/readiness","digitalocean_storage_backup_preflight":"/api/deployment/digitalocean/storage-backup-preflight","site_scene_navigation_api":"/api/graphics/site-scenes","site_scene_navigation_html":"/graphics/site-scenes","site_scene_graph_metadata_index_json":"/api/graphics/site-scene-graph-metadata/index.json","site_scene_graph_metadata_index_csv":"/api/graphics/site-scene-graph-metadata/index.csv","site_scene_graph_metadata_review_json":"/api/graphics/site-scene-graph-metadata/review-index.json","site_scene_graph_metadata_review_html":"/graphics/site-scene-graph-metadata","site_scene_release_evidence_map_json":"/api/graphics/site-scene-graph-metadata/release-evidence-map.json","site_scene_release_evidence_map_csv":"/api/graphics/site-scene-graph-metadata/release-evidence-map/export.csv","visual_composer_ai_planner_decision_audit_api":"/api/graphics/ai/scene-planner/workstation/decision-audits"},"rollback_backup_notes":{"droplet_volume_snapshots":"missing_operator_snapshot_expectation","database_backup_export":"missing_or_unsafe_backup_path","artifact_backup_export":"missing_or_unsafe_backup_path","rollback_plan":"restore PostgreSQL backup and attached-volume artifacts from operator-verified backups/snapshots; no credentials included in bundle"},"manual_gate_items":[{"name":"operator_approval_recorded","confirmed":false,"evidence_required":"operator/customer deployment approval recorded outside git before production cutover"},{"name":"backup_restore_path_verified","confirmed":false,"evidence_required":"database and artifact backup export/restore path verified by operator"},{"name":"rollback_plan_reviewed","confirmed":false,"evidence_required":"rollback plan reviewed, including restore point and prior release/package fallback"},{"name":"evidence_archive_persisted","confirmed":false,"evidence_required":"handoff package, integrity manifest, archive index, retention report, and preflight packet persisted outside git"},{"name":"write_and_autopilot_disabled_confirmed","confirmed":false,"evidence_required":"operator confirmed write_execution_enabled=false and autopilot_execution_enabled=false for release"}],"blockers":["manual gate pending: operator_approval_recorded","manual gate pending: backup_restore_path_verified","manual gate pending: rollback_plan_reviewed","manual gate pending: evidence_archive_persisted","manual gate pending: write_and_autopilot_disabled_confirmed","storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture"],"credentials":"redacted","safe_posture":{"advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"recommended_operator_next_action":"Resolve manual release gate blockers and rerun the handoff bundle before customer deployment."},"visual_composer_ai_planner_decision_audit_evidence":{"artifact":"visual-composer-ai-planner-decision-audit-release-evidence-v1","generated_at":"2026-05-14T09:39:55.403635Z","status":"blocked_ai_planner_decision_audit_evidence","audit_count":0,"ready_audit_count":0,"decision_audits":[],"blockers":["missing Visual Composer AI planner decision audit evidence"],"artifact_references":{"json_api":"/api/graphics/ai/scene-planner/workstation/decision-audits","csv_export_api":"/api/graphics/ai/scene-planner/workstation/decision-audits/export.csv"},"credentials":"redacted","safety_posture":{"advisory_only":true,"read_only":true,"read_only_advisory":true,"raw_html_mutation_allowed":false,"publish_allowed":false,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"recommended_operator_next_action":"Resolve Visual Composer AI planner decision audit blockers before claiming graphics planner readiness.","advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"digitalocean_storage_backup_preflight_evidence":{"artifact":"operator-release-digitalocean-storage-backup-preflight-evidence-v1","source_artifact":"digitalocean-storage-backup-preflight-v1","status":"blocked_missing_or_unsafe_storage_posture","target":{"provider":"not_confirmed","compute":"unsupported_or_placeholder","value_state":"missing_or_unsupported"},"database_target":{"url_state":"sqlite_not_production_postgres","postgres_posture":"blocked_sqlite_not_production_postgres","local_vs_managed":"not_confirmed","values_redacted":true},"artifact_storage_target":{"attached_volume":"missing_or_unsafe","artifact_storage":"outside_attached_volume_boundary","drawing_storage":"outside_attached_volume_boundary","export_storage":"outside_attached_volume_boundary"},"attached_volume_expectation":"missing_or_unsafe","backup_export_checklist":{"droplet_snapshots":"missing_operator_snapshot_expectation","database_backup_export":"missing","artifact_backup_export":"missing"},"backup_retention_schedule":{"database_backup_retention_days":"missing_or_invalid","artifact_backup_retention_days":"missing_or_invalid"},"retention_expectations":["Verify Droplet/volume snapshots plus separate database and artifact backup exports before customer production use.","Keep central supervisor storage on DigitalOcean PostgreSQL posture and attached volume artifact paths.","Field gateways keep local buffers and sync outbound; live BAS traffic remains local."],"field_gateway_boundary":{"local_buffer":"missing","sync_boundary":"blocked_sync_boundary_not_outbound_only"},"evidence_paths":{"json_api":"/api/deployment/digitalocean/storage-backup-preflight","deployment_readiness_api":"/api/deployment/readiness","release_checklist_cli":"scripts/intellicore_release_checklist.py --json","operator_handoff_bundle_cli":"scripts/intellicore_operator_handoff_bundle.py --json"},"blocker_count":13,"blockers":["DigitalOcean Docker Droplet/VPS target must be explicit","Attached DigitalOcean volume path must be configured outside ephemeral storage","artifact_storage must live on the attached volume and not public/ephemeral storage","drawing_storage must live on the attached volume and not public/ephemeral storage","export_storage must live on the attached volume and not public/ephemeral storage","PostgreSQL local-on-Droplet or DigitalOcean Managed PostgreSQL posture must be explicit","Droplet/volume snapshots must be enabled or explicitly scheduled before production","database_backup_export path must be configured on the attached volume","artifact_backup_export path must be configured on the attached volume","Database backup retention days must be a positive integer","Artifact backup retention days must be a positive integer","Field gateway buffer path and outbound-only sync boundary must be explicit","Credential values must stay out of git and public object storage"],"safe_posture":{"advisory_only":true,"read_only":true,"mutates_environment":false,"mutates_remote_infrastructure":false,"writes_bas_devices":false,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"credentials":"redacted","recommended_operator_next_action":"Resolve DigitalOcean storage/backup blockers, then rerun deployment readiness and release handoff before production."},"digitalocean_restore_drill_preflight_evidence":{"artifact":"operator-release-digitalocean-restore-drill-preflight-evidence-v1","source_artifact":"digitalocean-restore-drill-preflight-v1","status":"blocked_restore_drill_not_verified","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","restore_action_mode":"no_restore_action","restore_action_performed":false,"package":{"release_package_id_state":"missing_or_placeholder","build_id_state":"missing_or_placeholder","values_redacted":true},"target":{"provider":"not_confirmed","compute":"unsupported_or_placeholder","value_state":"missing_or_unsupported"},"restore_drill":{"last_run_at_state":"missing","max_age_days":30,"freshness":{"state":"missing_or_invalid","age_days":null,"max_age_days":30,"last_run_at_redacted":false},"target_environment":"missing","database_restore_evidence":"missing","artifact_restore_evidence":"missing","rollback_runbook":"missing","values_redacted":true},"backup_retention_state":{"database_backup_retention_days":"missing_or_invalid","artifact_backup_retention_days":"missing_or_invalid"},"backup_evidence_state":{"database_backup_export":"missing","artifact_backup_export":"missing","values_redacted":true},"restore_objectives":{"rto_minutes":null,"rpo_minutes":null},"evidence_paths":{"json_api":"/api/deployment/digitalocean/restore-drill-preflight","deployment_readiness_api":"/api/deployment/readiness","release_checklist_cli":"scripts/intellicore_release_checklist.py --json","operator_handoff_bundle_cli":"scripts/intellicore_operator_handoff_bundle.py --json"},"operator_expectations":["Run database restore and artifact restore drills in isolated staging before customer production cutover.","Record RTO/RPO results and keep rollback runbook evidence on the attached DigitalOcean volume.","Do not restore into production as a drill and do not include credential values in handoff evidence."],"blocker_count":19,"blockers":["DigitalOcean Docker Droplet/VPS target must be explicit","Attached DigitalOcean volume path must be configured before restore drill evidence can be trusted","Database restore drill last-run timestamp must be recorded","Restore drill evidence is stale or timestamp is invalid","Restore drill release package id is missing, invalid, or cross-scope","Restore drill build id must be configured","Restore drill operator approval reference must be archived before production cutover","Restore drill operator approval actor must be recorded","Restore drill operator approval timestamp must be valid and no older than the restore drill","Database restore drill evidence path must be stored on the attached volume","Artifact restore drill evidence path must be stored on the attached volume","Rollback runbook path must be stored on the attached volume","Database backup export evidence path must be stored on the attached volume for restore drill readiness","Artifact backup export evidence path must be stored on the attached volume for restore drill readiness","Database backup retention days must be a positive integer for restore drill readiness","Artifact backup retention days must be a positive integer for restore drill readiness","Restore drill target must be isolated staging/sandbox, not production","Restore drill RTO minutes must be a positive integer","Restore drill RPO minutes must be a positive integer"],"safe_posture":{"advisory_only":true,"read_only":true,"mutates_environment":false,"mutates_remote_infrastructure":false,"writes_bas_devices":false,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"credentials":"redacted","recommended_operator_next_action":"Complete isolated restore drill evidence and rerun deployment readiness before production cutover."},"release_cutover_rollback_checklist":{"artifact":"release-cutover-rollback-checklist-v1","status":"blocked_cutover_rollback_prerequisites","release_package":{"package_id":"intellicore-20260514T093955300234Z","package_path":"/api/operator/release-handoff/package.json","value_state":"configured"},"scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all"},"restore_drill_evidence_state":{"status":"blocked_restore_drill_not_verified","last_run_at_state":"missing","target_environment":"missing","database_restore_evidence":"missing","artifact_restore_evidence":"missing","rollback_runbook":"missing","rto_minutes":null,"rpo_minutes":null,"values_redacted":true},"backup_prerequisites":{"storage_backup_status":"blocked_missing_or_unsafe_storage_posture","database_backup_export":"missing","artifact_backup_export":"missing","droplet_volume_snapshots":"missing_operator_snapshot_expectation","values_redacted":true},"manual_approval_gates":[{"name":"operator_approval_recorded","confirmed":false,"evidence_required":"operator/customer deployment approval recorded outside git before production cutover"},{"name":"backup_restore_path_verified","confirmed":false,"evidence_required":"database and artifact backup export/restore path verified by operator"},{"name":"rollback_plan_reviewed","confirmed":false,"evidence_required":"rollback plan reviewed, including restore point and prior release/package fallback"},{"name":"evidence_archive_persisted","confirmed":false,"evidence_required":"handoff package, integrity manifest, archive index, retention report, and preflight packet persisted outside git"},{"name":"write_and_autopilot_disabled_confirmed","confirmed":false,"evidence_required":"operator confirmed write_execution_enabled=false and autopilot_execution_enabled=false for release"}],"rollback_owner_action":{"owner_state":"placeholder_or_missing","action_ref_state":"placeholder_or_missing","values_redacted":true},"rto_rpo_posture":{"rto_minutes":null,"rpo_minutes":null,"state":"missing_or_invalid"},"checks":[{"name":"package_reference","status":"ready","pass":true,"fail":false},{"name":"explicit_scope","status":"blocked","pass":false,"fail":true},{"name":"restore_drill_evidence","status":"blocked","pass":false,"fail":true},{"name":"backup_prerequisites","status":"blocked","pass":false,"fail":true},{"name":"manual_approval_gates","status":"blocked","pass":false,"fail":true},{"name":"rollback_owner_action","status":"blocked","pass":false,"fail":true},{"name":"read_only_safety","status":"ready","pass":true,"fail":false}],"blockers":["cutover scope site_ref must be explicit before production release","cutover scope building_ref must be explicit before production release","cutover scope equipment_ref must be explicit before production release","restore-drill evidence not ready: blocked_restore_drill_not_verified","restore-drill last-run evidence is missing","restore-drill target must be isolated staging/sandbox","restore-drill database_restore_evidence evidence must be on attached volume","restore-drill artifact_restore_evidence evidence must be on attached volume","restore-drill rollback_runbook evidence must be on attached volume","RTO minutes must be recorded as a positive integer","RPO minutes must be recorded as a positive integer","storage/backup prerequisites not ready: blocked_missing_or_unsafe_storage_posture","Droplet/volume snapshot prerequisite is missing","database_backup_export prerequisite must be configured on attached volume","artifact_backup_export prerequisite must be configured on attached volume","rollback owner placeholder must be replaced before cutover","rollback action/reference placeholder must be replaced before cutover","manual gate pending: operator_approval_recorded","manual gate pending: backup_restore_path_verified","manual gate pending: rollback_plan_reviewed","manual gate pending: evidence_archive_persisted","manual gate pending: write_and_autopilot_disabled_confirmed","storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture"],"safe_posture":{"advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"mutates_environment":false,"mutates_remote_infrastructure":false,"writes_bas_devices":false},"credentials":"redacted","recommended_operator_next_action":"Resolve cutover/rollback blockers, rerun the handoff package, and do not cut over production until this checklist is ready."},"release_cutover_approval_archive":{"artifact":"release-cutover-approval-archive-evidence-v1","status":"blocked_cutover_approval_archive_prerequisites","release_id":"intellicore-20260514T093955300234Z","generated_at":"2026-05-14T09:39:55.437951Z","package_reference":{"package_id":"intellicore-20260514T093955300234Z","package_path":"/api/operator/release-handoff/package.json","operator_package_id_ref_state":"missing_or_placeholder","operator_package_path_ref_state":"missing_or_placeholder","archive_index_id":"archive-intellicore-20260514T093955300234Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all"}},"artifact_references":{"package_api":"/api/operator/release-handoff/package.json","integrity_manifest_api":"/api/operator/release-handoff/integrity.json","archive_index_api":"/api/operator/release-handoff/archive-index.json","cutover_rollback_checklist_api":"/api/operator/release-handoff/cutover-rollback-checklist.json","cutover_approval_archive_api":"/api/operator/release-handoff/cutover-approval-archive.json","approval_archive_api":"/api/operator/release-handoff/cutover-approval-archive.json"},"approval_archive":{"archive_ref_state":"missing_or_placeholder","checksum_algorithm":"SHA-256","checksum_sha256_state":"missing","expected_checksum_sha256":null,"checksum_verified":false,"approved_at_state":"missing_or_invalid","reviewer_state":"missing_or_placeholder","owner_state":"missing_or_placeholder","values_redacted":true},"runbook_review":{"review_state":"missing_or_unconfirmed","review_ref_state":"missing_or_placeholder","values_redacted":true},"checksum_evidence":{"integrity_manifest_artifact":"operator-release-handoff-integrity-manifest-v1","archive_index_artifact":"operator-release-handoff-archive-index-v1","package_core_checksum_sha256":"c3d67d366914de616f6eac8c4c48e804c0efa9dd4f446a9473813f6da712a04b","actual_package_core_checksum_sha256":"c3d67d366914de616f6eac8c4c48e804c0efa9dd4f446a9473813f6da712a04b","package_checksum_verified":true,"approval_archive_checksum_verified":false},"evidence_freshness":{"status":"stale_or_missing","package_age_minutes":0.002,"approval_age_minutes":null,"max_artifact_age_minutes":120,"checked_at":"2026-05-14T09:39:55.437951Z"},"checks":[{"name":"package_scope_reference","status":"blocked","pass":false,"fail":true},{"name":"approval_archive_reference","status":"blocked","pass":false,"fail":true},{"name":"approval_archive_checksum","status":"blocked","pass":false,"fail":true},{"name":"release_package_checksum","status":"ready","pass":true,"fail":false},{"name":"approval_freshness","status":"blocked","pass":false,"fail":true},{"name":"reviewer_owner","status":"blocked","pass":false,"fail":true},{"name":"runbook_review","status":"blocked","pass":false,"fail":true},{"name":"read_only_safety","status":"ready","pass":true,"fail":false}],"blockers":["approval archive package id reference is missing","approval archive package path reference is missing","approval archive reference is missing","approval archive checksum is missing","approval archive approved-at timestamp is missing or invalid","approval archive reviewer placeholder must be replaced","approval archive owner placeholder must be replaced","deployment runbook review must be confirmed before cutover approval","deployment runbook review reference is missing"],"safe_posture":{"advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","restore_action_mode":"no_restore_action","publish_action_performed":false},"credentials":"redacted","recommended_operator_next_action":"Do not cut over production; clear approval archive checksum, reviewer/owner, runbook review, scope, freshness, and safety blockers first."},"release_deployment_runbook_review":{"artifact":"release-deployment-runbook-review-evidence-v1","status":"blocked_deployment_runbook_review_prerequisites","release_id":"intellicore-20260514T093955300234Z","generated_at":"2026-05-14T09:39:55.448260Z","package_reference":{"package_id":"intellicore-20260514T093955300234Z","package_path":"/api/operator/release-handoff/package.json","operator_package_id_ref_state":"missing_or_placeholder","operator_package_path_ref_state":"missing_or_placeholder","archive_index_id":"archive-intellicore-20260514T093955300234Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all"}},"artifact_references":{"package_api":"/api/operator/release-handoff/package.json","integrity_manifest_api":"/api/operator/release-handoff/integrity.json","archive_index_api":"/api/operator/release-handoff/archive-index.json","cutover_rollback_checklist_api":"/api/operator/release-handoff/cutover-rollback-checklist.json","cutover_approval_archive_api":"/api/operator/release-handoff/cutover-approval-archive.json","deployment_runbook_review_api":"/api/operator/release-handoff/deployment-runbook-review.json"},"runbook_review":{"review_ref_state":"missing_or_placeholder","checksum_algorithm":"SHA-256","checksum_sha256_state":"missing","expected_checksum_sha256":null,"checksum_verified":false,"reviewed_at_state":"missing_or_invalid","reviewer_state":"missing_or_placeholder","owner_state":"missing_or_placeholder","runbook_version_state":"missing_or_placeholder","values_redacted":true},"checksum_evidence":{"integrity_manifest_artifact":"operator-release-handoff-integrity-manifest-v1","archive_index_artifact":"operator-release-handoff-archive-index-v1","package_core_checksum_sha256":"f15a4177564f5511fc56f73a9fb6580dadd9c9d8934ca99335b7aa1b018920cf","actual_package_core_checksum_sha256":"f15a4177564f5511fc56f73a9fb6580dadd9c9d8934ca99335b7aa1b018920cf","package_checksum_verified":true,"runbook_review_checksum_verified":false},"evidence_freshness":{"status":"stale_or_missing","package_age_minutes":0.002,"review_age_minutes":null,"max_artifact_age_minutes":120,"checked_at":"2026-05-14T09:39:55.448260Z"},"checks":[{"name":"package_scope_reference","status":"blocked","pass":false,"fail":true},{"name":"runbook_review_reference","status":"blocked","pass":false,"fail":true},{"name":"runbook_review_checksum","status":"blocked","pass":false,"fail":true},{"name":"release_package_checksum","status":"ready","pass":true,"fail":false},{"name":"review_freshness","status":"blocked","pass":false,"fail":true},{"name":"reviewer_owner","status":"blocked","pass":false,"fail":true},{"name":"runbook_version","status":"blocked","pass":false,"fail":true},{"name":"read_only_safety","status":"ready","pass":true,"fail":false}],"blockers":["deployment runbook package id reference is missing","deployment runbook package path reference is missing","deployment runbook review reference is missing","deployment runbook review checksum is missing","deployment runbook reviewed-at timestamp is missing or invalid","deployment runbook reviewer placeholder must be replaced","deployment runbook owner placeholder must be replaced","deployment runbook version placeholder must be replaced"],"safe_posture":{"advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","restore_action_mode":"no_restore_action","publish_action_performed":false},"credentials":"redacted","recommended_operator_next_action":"Do not cut over production; clear deployment runbook review checksum, reviewer/owner/version, scope, freshness, and safety blockers first."},"trend_history_evidence":{"artifact":"release-trend-history-preflight-evidence-v1","status":"blocked_trend_history_release_preflight","source_artifact":"predictive-readiness-trend-history-evidence-v1","source_status":"not_requested_explicit_equipment_scope_required","generated_at":"2026-05-14T09:39:55.300234Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all","site_id":null,"building_id":null,"equipment_id":null},"sample_summary":{"evidence_count":0,"point_count":0,"total_samples":0,"minimum_sample_count":0,"maximum_sample_count":0,"stale_point_ids":[]},"point_rollups":[],"blockers":["explicit_equipment_scope_required","missing_scoped_trend_history_evidence","source_status:not_requested_explicit_equipment_scope_required"],"recommended_operator_next_action":"Fix scoped trend-history freshness/sample/scope blockers before release package handoff or predictive readiness claims.","advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","credentials":"redacted"},"alarm_event_evidence":{"artifact":"release-alarm-event-preflight-evidence-v1","status":"blocked_alarm_event_release_preflight","source_artifact":"alarm-event-readiness-evidence-v1","source_status":"not_requested_explicit_equipment_scope_required","generated_at":"2026-05-14T09:39:55.300234Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all","site_id":null,"building_id":null,"equipment_id":null},"summary":{"event_count":0,"active_event_count":0,"critical_or_high_event_count":0,"acknowledged_count":0},"freshness":{"status":"missing","max_age_minutes":240,"latest_event_age_minutes":null,"latest_event_timestamp":null},"events":[],"blockers":["explicit_equipment_scope_required","missing_scoped_alarm_event_evidence","source_status:not_requested_explicit_equipment_scope_required"],"recommended_operator_next_action":"Fix scoped alarm/event freshness/scope/read-only blockers before release package handoff claims.","advisory_only":true,"read_only":true,"write_execution_enabled":false,"alarm_acknowledgement_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"alarm_action_mode":"no_alarm_acknowledgement","bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","credentials":"redacted"},"weather_forecast_evidence":{"artifact":"release-weather-forecast-preflight-evidence-v1","status":"blocked_weather_forecast_release_preflight","source_artifact":"weather-forecast-readiness-evidence-v1","source_status":"blocked_weather_forecast_not_ready","generated_at":"2026-05-14T09:39:55.300234Z","scope":{"site_ref":"all","building_ref":"all","site_id":null,"building_id":null},"summary":{"forecast_count":0,"severe_weather_flag_count":0,"source_refs":[]},"freshness":{"status":"missing","max_age_minutes":120,"latest_forecast_age_minutes":null,"latest_forecast_timestamp":null},"forecasts":[],"blockers":["missing_scoped_weather_forecast","explicit_site_scope_required","weather_forecast_freshness:missing","source_status:blocked_weather_forecast_not_ready"],"recommended_operator_next_action":"Import a current scoped weather forecast export or fixture before release package handoff or predictive readiness claims.","advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"weather_provider_action_mode":"no_weather_provider_call","bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","credentials":"redacted"},"predictive_evidence_matrix":{"artifact":"predictive-evidence-matrix-release-handoff-v1","release_id":"intellicore-20260514T093955300234Z","generated_at":"2026-05-14T09:39:55.459353Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all"},"rows":[{"source_key":"trend_history","label":"Trend history","status":"blocked_trend_history_release_preflight","source_artifact":"release-trend-history-preflight-evidence-v1","freshness_status":"unknown","evidence_count":0,"confidence":null,"packet_uid":null,"source_refs":{},"recommended_operator_next_action":"Fix scoped trend-history freshness/sample/scope blockers before release package handoff or predictive readiness claims.","blocker_count":3,"blockers":["explicit_equipment_scope_required","missing_scoped_trend_history_evidence","source_status:not_requested_explicit_equipment_scope_required"],"ok_for_operator_review":false,"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},{"source_key":"alarm_event","label":"Alarm/event","status":"blocked_alarm_event_release_preflight","source_artifact":"release-alarm-event-preflight-evidence-v1","freshness_status":"missing","evidence_count":0,"confidence":null,"packet_uid":null,"source_refs":{},"recommended_operator_next_action":"Fix scoped alarm/event freshness/scope/read-only blockers before release package handoff claims.","blocker_count":3,"blockers":["explicit_equipment_scope_required","missing_scoped_alarm_event_evidence","source_status:not_requested_explicit_equipment_scope_required"],"ok_for_operator_review":false,"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},{"source_key":"weather_forecast","label":"Weather forecast","status":"blocked_weather_forecast_release_preflight","source_artifact":"release-weather-forecast-preflight-evidence-v1","freshness_status":"missing","evidence_count":0,"confidence":null,"packet_uid":null,"source_refs":{},"recommended_operator_next_action":"Import a current scoped weather forecast export or fixture before release package handoff or predictive readiness claims.","blocker_count":4,"blockers":["missing_scoped_weather_forecast","explicit_site_scope_required","weather_forecast_freshness:missing","source_status:blocked_weather_forecast_not_ready"],"ok_for_operator_review":false,"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},{"source_key":"utility_demand","label":"Utility demand","status":"not_available","source_artifact":"utility-demand-readiness-evidence-v1","freshness_status":"unknown","evidence_count":0,"confidence":null,"packet_uid":null,"source_refs":{},"recommended_operator_next_action":null,"blocker_count":1,"blockers":["missing_scoped_utility_demand_evidence"],"ok_for_operator_review":false,"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},{"source_key":"occupancy","label":"Occupancy","status":"not_available","source_artifact":"predictive-occupancy-readiness-evidence-v1","freshness_status":"unknown","evidence_count":0,"confidence":null,"packet_uid":null,"source_refs":{},"recommended_operator_next_action":null,"blocker_count":1,"blockers":["missing_occupancy_signal_evidence"],"ok_for_operator_review":false,"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},{"source_key":"semantic_binding","label":"Semantic binding","status":"blocked_semantic_binding_evidence_not_ready","source_artifact":"semantic-binding-readiness-evidence-v1","freshness_status":"unknown","evidence_count":0,"confidence":null,"packet_uid":null,"source_refs":{},"recommended_operator_next_action":null,"blocker_count":8,"blockers":["semantic_role:zone_temperature","semantic_role:zone_setpoint","trend_samples","occupancy_signals","weather_observations","occupancy_evidence:explicit_equipment_scope_required","weather_forecast:missing_scoped_weather_forecast","missing_semantic_binding_evidence"],"ok_for_operator_review":false,"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},{"source_key":"recommendation_prediction","label":"Recommendation prediction","status":"blocked_missing_inputs","source_artifact":"predictive-operations-readiness-v1","freshness_status":"fresh","evidence_count":0,"confidence":null,"packet_uid":null,"source_refs":{},"recommended_operator_next_action":null,"blocker_count":0,"blockers":[],"ok_for_operator_review":false,"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},{"source_key":"controlled_write_readiness","label":"Controlled-write readiness","status":"missing","source_artifact":"predictive-controlled-write-readiness-audit-packet-v1","freshness_status":"unknown","evidence_count":0,"confidence":null,"packet_uid":null,"source_refs":{},"recommended_operator_next_action":null,"blocker_count":1,"blockers":["missing_controlled_write_readiness_packet"],"ok_for_operator_review":false,"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true}],"matrix_summary":{"row_count":8,"ready_row_count":0,"blocking_row_count":7,"blocker_count":21},"credentials":"redacted","safe_posture":{"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"recommended_operator_next_action":"Review matrix blockers and keep advisory-only/write-disabled posture until every predictive evidence row is ready for operator review.","advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"visual_composer_blocker_rollup":{"artifact":"visual-composer-release-blocker-rollup-v1","source_artifacts":["visual-composer-binding-candidates-v1","visual-composer-runtime-health-review-v1","visual-runtime-gateway-readiness-handoff-v1"],"summary":{"total_blocker_count":1,"candidate_blocker_count":0,"runtime_blocker_count":0,"gateway_blocker_count":0,"current_runtime_slot_count":0,"blocked_runtime_slot_count":0,"scoped_gateway_uids":[],"fail_closed":true,"advisory_only":true,"write_execution_enabled":false},"rollup_items":[{"category":"scope","graphic_uid":"visual-composer-release-scope","graphic_status":"blocked","template_id":"release-handoff-scope","runtime_use_state":"blocked","readiness_state":"blocked","source_semantic_binding_id":null,"semantic_role":"release_scope","visual_slot":"operator_review_scope","point_id":null,"point_name":null,"hierarchy_scope_ref":"release-handoff-scope","gateway_exception_status":"not_applicable","gateway_exception_blocker_status":"blocked","gateway_exception_gateway_uids":[],"blockers":["visual composer explicit equipment scope required"],"fail_closed_reason":"visual composer explicit equipment scope required","operator_drilldown_url":"/operator-release-handoff/visual-composer-blocker-rollup","api_drilldown_url":"/api/operator/release-handoff/visual-composer-blocker-rollup.json","runtime_health_review_url":"/api/visual-composer/runtime-health-review","release_preflight_url":"/api/operator/release-handoff/visual-runtime-gateway-verification-preflight.json","advisory_only":true,"write_execution_enabled":false,"write_disabled":true}],"artifact_references":{"json_api":"/api/operator/release-handoff/visual-composer-blocker-rollup.json","csv_export":"/api/operator/release-handoff/visual-composer-blocker-rollup/export.csv","markdown_report":"/api/operator/release-handoff/visual-composer-blocker-rollup/report.md","html_review":"/operator-release-handoff/visual-composer-blocker-rollup","binding_candidate_api":"/api/visual-composer/binding-candidates","runtime_health_review_api":"/api/visual-composer/runtime-health-review","operator_graphics_drilldowns_api":"/api/visual-composer/operator-graphics-drilldowns","visual_runtime_gateway_preflight_api":"/api/operator/release-handoff/visual-runtime-gateway-verification-preflight.json"},"safe_posture":{"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"credentials":"redacted","recommended_operator_next_action":"Open the scoped rollup drilldowns, clear candidate/runtime/gateway blockers, then rerun release handoff verification; no BAS writes are enabled."},"visual_composer_blocker_rollup_csv":"category,graphic_uid,template_id,runtime_use_state,readiness_state,source_semantic_binding_id,semantic_role,visual_slot,point_id,point_name,hierarchy_scope_ref,gateway_exception_status,gateway_exception_blocker_status,gateway_exception_gateway_uids,blockers,fail_closed_reason,operator_drilldown_url,api_drilldown_url,runtime_health_review_url,release_preflight_url,advisory_only,write_execution_enabled\r\nscope,visual-composer-release-scope,release-handoff-scope,blocked,blocked,,release_scope,operator_review_scope,,,release-handoff-scope,not_applicable,blocked,,visual composer explicit equipment scope required,visual composer explicit equipment scope required,/operator-release-handoff/visual-composer-blocker-rollup,/api/operator/release-handoff/visual-composer-blocker-rollup.json,/api/visual-composer/runtime-health-review,/api/operator/release-handoff/visual-runtime-gateway-verification-preflight.json,True,False\r\n","visual_composer_blocker_rollup_markdown":"# Visual Composer Release Blocker Rollup\n\ncredentials: redacted\nartifact: visual-composer-release-blocker-rollup-v1\nstatus: blocked_visual_composer_release_blockers\nnetwork_action_mode: no_network_dry_run\ndeploy_action_mode: no_deploy_action\npublish_action_mode: no_graphics_publish_action\nbas_write_action_mode: no_bas_write_action\n\n## Advisory-only / write-disabled safety posture\n- Read-only operator handoff report; no BAS writes, no alarm acknowledgements, no autopilot execution, no live BAS scans, no remote probes, no graphics publishing, and no deploy action are performed.\n- advisory_only=true\n- write_execution_enabled=false\n- autopilot_execution_enabled=false\n- physical_execution_blocked=true\n\n## Blocker summary\n- Total blockers: 1\n- Candidate blockers: 0\n- Runtime blockers: 0\n- Gateway blockers: 0\n- Current runtime slots: 0\n- Blocked runtime slots: 0\n- Scoped gateway UIDs: none\n\n## Blocked Visual Composer items\n1. scope — visual-composer-release-scope\n   - Semantic binding: missing\n   - Role / slot: release_scope / operator_review_scope\n   - Gateway UIDs: none\n   - Blockers: visual composer explicit equipment scope required\n   - Operator drilldown: /operator-release-handoff/visual-composer-blocker-rollup\n   - API drilldown: /api/operator/release-handoff/visual-composer-blocker-rollup.json\n\n## Evidence references\n- JSON: /api/operator/release-handoff/visual-composer-blocker-rollup.json\n- CSV: /api/operator/release-handoff/visual-composer-blocker-rollup/export.csv\n- HTML review: /operator-release-handoff/visual-composer-blocker-rollup\n- Binding candidate API: /api/visual-composer/binding-candidates\n- Runtime health review: /api/visual-composer/runtime-health-review\n- Operator graphics drilldowns: /api/visual-composer/operator-graphics-drilldowns\n- Gateway verification preflight: /api/operator/release-handoff/visual-runtime-gateway-verification-preflight.json\n\n## Recommended next action\n- Open the scoped rollup drilldowns, clear candidate/runtime/gateway blockers, then rerun release handoff verification; no BAS writes are enabled.\n","visual_runtime_gateway_operator_preflight":{"artifact":"visual-runtime-gateway-operator-verification-preflight-v1","status":"blocked_visual_runtime_gateway_operator_verification","pass":false,"fail":true,"fail_closed":true,"summary":{"runtime_slots_evaluated":0,"blocked_slots":0,"clear_slots":0,"gateway_exception_count":0,"scoped_gateway_uids":[],"blocked_categories":{"scoped_gateway_evidence_present":1,"gateway_exception_gate_clear":1,"reviewable_slot_drilldowns_present":1,"safe_read_only_posture":0},"fail_closed_gateway_gate":true},"checks":{"scoped_gateway_evidence_present":{"pass":false,"fail":true,"status":"blocked","blockers":["missing scoped gateway UID evidence for visual runtime gateway verification"],"recommended_operator_next_action":"Register and heartbeat the site gateway, then regenerate Visual Composer runtime readiness evidence for this exact release scope."},"gateway_exception_gate_clear":{"pass":false,"fail":true,"status":"blocked","blockers":["visual runtime gateway exception gate has blocked or missing scoped evidence"],"recommended_operator_next_action":"Resolve visual runtime gateway blockers before release/write-safety handoff and re-run the handoff report."},"reviewable_slot_drilldowns_present":{"pass":false,"fail":true,"status":"blocked","blockers":["visual runtime gateway drilldown refs are missing graphic or semantic binding identifiers"],"recommended_operator_next_action":"Regenerate/publish Visual Composer runtime evidence so each slot has operator-reviewable graphic and semantic binding refs."},"safe_read_only_posture":{"pass":true,"fail":false,"status":"ready","blockers":[],"recommended_operator_next_action":"Verification is advisory-only/read-only; no BAS writes are enabled."}},"blocked_slot_drilldown_refs":[],"artifact_references":{"json_api":"/api/operator/release-handoff/visual-runtime-gateway-verification-preflight.json","csv_export":"/api/operator/release-handoff/visual-runtime-gateway-verification-preflight/export.csv","html_review":"/operator-release-handoff/visual-runtime-gateway-verification-preflight","source_handoff_api":"/api/operator/release-handoff","source_runtime_health_review_api":"/api/visual-composer/runtime-health-review","operator_graphics_drilldowns_api":"/api/visual-composer/operator-graphics-drilldowns"},"safe_posture":{"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"credentials":"redacted","recommended_operator_next_action":"Resolve visual runtime gateway blockers before release/write-safety handoff; do not use unverified runtime graphics as ready evidence."},"visual_runtime_gateway_operator_preflight_csv":"advisory_only,artifact,blocked_slots,blockers,check_name,check_status,clear_slots,fail,gateway_exception_blocker_status,gateway_exception_blockers,gateway_exception_count,graphic_uid,pass,recommended_operator_next_action,row_type,runtime_slots_evaluated,scoped_gateway_uids,semantic_role,source_semantic_binding_id,status,visual_slot,write_execution_enabled\r\nTrue,visual-runtime-gateway-operator-verification-preflight-v1,0,missing scoped gateway UID evidence for visual runtime gateway verification,scoped_gateway_evidence_present,blocked,0,True,,,0,,False,\"Register and heartbeat the site gateway, then regenerate Visual Composer runtime readiness evidence for this exact release scope.\",check,0,,,,blocked_visual_runtime_gateway_operator_verification,,False\r\nTrue,visual-runtime-gateway-operator-verification-preflight-v1,0,visual runtime gateway exception gate has blocked or missing scoped evidence,gateway_exception_gate_clear,blocked,0,True,,,0,,False,Resolve visual runtime gateway blockers before release/write-safety handoff and re-run the handoff report.,check,0,,,,blocked_visual_runtime_gateway_operator_verification,,False\r\nTrue,visual-runtime-gateway-operator-verification-preflight-v1,0,visual runtime gateway drilldown refs are missing graphic or semantic binding identifiers,reviewable_slot_drilldowns_present,blocked,0,True,,,0,,False,Regenerate/publish Visual Composer runtime evidence so each slot has operator-reviewable graphic and semantic binding refs.,check,0,,,,blocked_visual_runtime_gateway_operator_verification,,False\r\nTrue,visual-runtime-gateway-operator-verification-preflight-v1,0,,safe_read_only_posture,ready,0,False,,,0,,True,Verification is advisory-only/read-only; no BAS writes are enabled.,check,0,,,,blocked_visual_runtime_gateway_operator_verification,,False\r\n","visual_runtime_gateway_operator_preflight_html":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>IntelliCore Visual Runtime Gateway Operator Verification Preflight</title>\n<style>\nbody { font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; margin: 2rem; line-height: 1.45; color: #172033; background: #f7f9fc; }\nmain { max-width: 1100px; margin: auto; background: white; padding: 2rem; border: 1px solid #d8e1ef; border-radius: 16px; }\nsection { margin-top: 1.5rem; padding-top: 1rem; border-top: 1px solid #e5edf7; }\ndl { display: grid; grid-template-columns: minmax(14rem, 22rem) 1fr; gap: .45rem 1rem; }\ndt { font-weight: 700; color: #28364f; }\ndd { margin: 0; }\ntable { width: 100%; border-collapse: collapse; margin-top: .75rem; }\nth, td { border: 1px solid #d8e1ef; padding: .45rem .55rem; text-align: left; vertical-align: top; }\nth { background: #eef4ff; }\n.badge { display: inline-block; padding: .25rem .55rem; border-radius: 999px; background: #e8f0fe; font-weight: 700; }\n.warning { background: #fff7e6; border-left: 4px solid #d9822b; padding: .75rem 1rem; }\n.safe { background: #edf7ed; border-left: 4px solid #2e7d32; padding: .75rem 1rem; }\na { color: #0b57d0; }\n</style>\n</head>\n<body>\n<main>\n<p class=\"badge\">visual-runtime-gateway-operator-verification-preflight html v1</p>\n<h1>Visual Runtime Gateway Operator Verification Preflight</h1>\n<p>credentials: redacted</p>\n<dl>\n<dt>Artifact</dt><dd>visual-runtime-gateway-operator-verification-preflight-v1</dd><dt>Status</dt><dd>blocked_visual_runtime_gateway_operator_verification</dd><dt>Pass</dt><dd>false</dd><dt>Fail</dt><dd>true</dd><dt>Fail closed</dt><dd>true</dd><dt>Runtime slots evaluated</dt><dd>0</dd><dt>Blocked slots</dt><dd>0</dd><dt>Clear slots</dt><dd>0</dd><dt>Gateway exception count</dt><dd>0</dd><dt>Scoped gateway UIDs</dt><dd>none</dd>\n</dl>\n<section>\n<h2>Advisory-only / write-disabled safety posture</h2>\n<div class=\"safe\">Read-only preflight for operator handoff: no BAS writes, no alarm acknowledgements, no autopilot execution, no live BAS scans, no remote probes, and no deploy action are performed by this page.</div>\n<dl>\n<dt>advisory_only</dt><dd>true</dd><dt>write_execution_enabled</dt><dd>false</dd><dt>autopilot_execution_enabled</dt><dd>false</dd><dt>physical_execution_blocked</dt><dd>true</dd>\n</dl>\n<p>advisory_only=true; write_execution_enabled=false; autopilot_execution_enabled=false; physical_execution_blocked=true</p>\n</section>\n<section>\n<h2>Verification checks</h2>\n<table><thead><tr><th>Check</th><th>Status</th><th>Pass</th><th>Blockers</th><th>Recommended next action</th></tr></thead><tbody><tr><td>scoped_gateway_evidence_present</td><td>blocked</td><td>false</td><td>missing scoped gateway UID evidence for visual runtime gateway verification</td><td>Register and heartbeat the site gateway, then regenerate Visual Composer runtime readiness evidence for this exact release scope.</td></tr><tr><td>gateway_exception_gate_clear</td><td>blocked</td><td>false</td><td>visual runtime gateway exception gate has blocked or missing scoped evidence</td><td>Resolve visual runtime gateway blockers before release/write-safety handoff and re-run the handoff report.</td></tr><tr><td>reviewable_slot_drilldowns_present</td><td>blocked</td><td>false</td><td>visual runtime gateway drilldown refs are missing graphic or semantic binding identifiers</td><td>Regenerate/publish Visual Composer runtime evidence so each slot has operator-reviewable graphic and semantic binding refs.</td></tr><tr><td>safe_read_only_posture</td><td>ready</td><td>true</td><td>none</td><td>Verification is advisory-only/read-only; no BAS writes are enabled.</td></tr></tbody></table>\n</section>\n<section>\n<h2>Blocked slot drilldowns</h2>\n<table><thead><tr><th>Graphic UID</th><th>Semantic binding</th><th>Role</th><th>Slot</th><th>Status</th><th>Blockers</th></tr></thead><tbody><tr><td colspan=\"6\">No blocked slot drilldowns in this scoped preflight.</td></tr></tbody></table>\n</section>\n<section>\n<h2>Evidence references</h2>\n<ul><li><a href=\"/api/operator/release-handoff/visual-runtime-gateway-verification-preflight.json\">Preflight JSON</a></li><li><a href=\"/api/operator/release-handoff/visual-runtime-gateway-verification-preflight/export.csv\">Preflight CSV</a></li><li><a href=\"/api/operator/release-handoff\">Source release handoff</a></li><li><a href=\"/api/visual-composer/runtime-health-review\">Runtime health review</a></li><li><a href=\"/api/visual-composer/operator-graphics-drilldowns\">Operator graphics drilldowns</a></li></ul>\n</section>\n<section>\n<h2>Recommended next action</h2>\n<p class=\"warning\">Resolve visual runtime gateway blockers before release/write-safety handoff; do not use unverified runtime graphics as ready evidence.</p>\n</section>\n</main>\n</body>\n</html>\n","bundle":{"artifact":"operator-release-handoff-v1","release_id":"intellicore-20260514T093955300234Z","generated_at":"2026-05-14T09:39:55.300234Z","overall_status":"pass_with_operator_placeholders","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all"},"deployment":{"artifact":"deployment-readiness-v1","status":"deployable_with_placeholders","placeholder_configuration":{"database":{"configured":true,"value_state":"configured","sqlite_default":true},"bacnet_target":{"configured":false,"value_state":"placeholder"},"modbus_target":{"configured":false,"value_state":"placeholder"},"bbmd_router":{"configured":false,"value_state":"placeholder"},"report_dir":{"configured":true,"value_state":"configured"}},"non_code_blockers":["operator must set target BACnet/IP range before live discovery","operator must set target Modbus host before live enumeration"]},"predictive_readiness":{"artifact":"predictive-operations-readiness-v1","status":"blocked_missing_inputs","prediction_source":"live_predictive_snapshot","recommendation_source":"none_available","input_summary":{"semantic_mappings":0,"mapped_roles":[],"trend_samples":0,"occupancy_signals":0,"weather_observations":0,"operator_recommendations":0,"occupancy_evidence_status":"not_requested_explicit_equipment_scope_required","occupancy_evidence_signal_count":0,"weather_forecast_evidence_status":"blocked_weather_forecast_not_ready","weather_forecast_evidence_count":0,"alarm_event_evidence_status":"not_requested_explicit_equipment_scope_required","alarm_event_evidence_event_count":0,"semantic_bindings":0,"semantic_binding_freshness":{"current":0,"current_requires_review":0,"missing":0,"stale":0,"expired":0,"blocked":0,"low_confidence":0,"cross_scope":0,"missing_evidence":0,"missing_source_point":0,"missing_hierarchy_scope":0},"semantic_binding_blocker_details":[],"latest_input_age_minutes":{"trend_samples":null,"occupancy_signals":null,"weather_observations":null}},"trend_history_evidence":{"artifact":"predictive-readiness-trend-history-evidence-v1","status":"not_requested_explicit_equipment_scope_required","generated_at":"2026-05-14T09:39:55.302630Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all","site_id":null,"building_id":null,"equipment_id":null},"points":[],"evidence_count":0,"blockers":["explicit_equipment_scope_required"],"recommended_operator_next_action":"Select a specific site/equipment scope to review scoped trend-history evidence.","advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"weather_forecast_evidence":{"artifact":"predictive-readiness-weather-forecast-evidence-v1","source_artifact":"weather-forecast-readiness-evidence-v1","status":"blocked_weather_forecast_not_ready","generated_at":"2026-05-14T09:39:55.302655Z","scope":{"site_ref":"all","building_ref":"all","site_id":null,"building_id":null},"summary":{"forecast_count":0,"latest_outdoor_air_temp":null,"latest_humidity":null,"latest_forecast_high":null,"latest_forecast_low":null,"severe_weather_flag_count":0,"severe_weather_flags":[],"solar_load_indicators":[],"load_indicators":[],"source_refs":[]},"freshness":{"status":"missing","max_age_minutes":120,"latest_forecast_age_minutes":null,"latest_forecast_timestamp":null},"forecast_window":{"status":"missing","start":null,"end":null},"forecasts":[],"blockers":["missing_scoped_weather_forecast"],"confidence":0.35,"recommended_operator_next_action":"Do not trust weather-driven predictive actions until scoped, fresh, high-confidence forecast evidence is available and forecast windows are active.","advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"network_action_mode":"no_network_local_evidence_only"},"missing_input_blockers":["semantic_role:zone_temperature","semantic_role:zone_setpoint","trend_samples","occupancy_signals","weather_observations","occupancy_evidence:explicit_equipment_scope_required","weather_forecast:missing_scoped_weather_forecast"],"stale_input_blockers":[],"non_code_blockers":[],"recommended_next_action":"Collect or import predictive inputs before release handoff: semantic_role:zone_temperature, semantic_role:zone_setpoint, trend_samples, occupancy_signals, weather_observations, occupancy_evidence:explicit_equipment_scope_required, weather_forecast:missing_scoped_weather_forecast"},"alarm_event_evidence":{"artifact":"alarm-event-readiness-evidence-v1","status":"not_requested_explicit_equipment_scope_required","generated_at":"2026-05-14T09:39:55.402152Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all","site_id":null,"building_id":null,"equipment_id":null},"summary":{"event_count":0,"active_event_count":0,"critical_or_high_event_count":0,"acknowledged_count":0},"freshness":{"status":"missing","max_age_minutes":240,"latest_event_age_minutes":null,"latest_event_timestamp":null},"events":[],"blockers":["explicit_equipment_scope_required"],"recommended_operator_next_action":"Select a specific site/equipment scope to review alarm/event evidence.","advisory_only":true,"read_only":true,"write_execution_enabled":false,"alarm_acknowledgement_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"alarm_action_mode":"no_alarm_acknowledgement","credentials":"redacted"},"visual_composer_operator_review_readiness":{"artifact":"visual-composer-operator-review-readiness-section-v1","overall_status":"blocked_visual_composer_operator_review_not_ready","pass":false,"fail":true,"fail_closed":true,"scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all","site_id":null,"building_id":null,"equipment_id":null},"summary":{"binding_candidates":0,"ready_for_publish":0,"published_graphics_evaluated":0,"runtime_graphics":0,"ready_for_runtime_use":0,"blocked":0,"fail_closed_operator_review_gate":true,"advisory_only":true,"write_execution_enabled":false},"checks":[{"name":"binding_candidates","status":"blocked","pass":false,"fail":true,"blockers":["visual composer binding candidates are missing or blocked"]},{"name":"published_runtime_review","status":"blocked","pass":false,"fail":true,"blockers":["visual composer published runtime evidence is missing or blocked"]},{"name":"safe_posture","status":"ready","pass":true,"fail":false,"blockers":[]}],"current_review_evidence":[],"blocked_review_evidence":[],"gateway_runtime_readiness":{"artifact":"visual-runtime-gateway-readiness-handoff-v1","source_artifact":"visual-composer-runtime-health-review-v1","summary":{"runtime_slots_evaluated":0,"blocked_slots":0,"clear_slots":0,"gateway_exception_count":0,"scoped_gateway_uids":[],"fail_closed_gateway_gate":true,"advisory_only":true,"write_execution_enabled":false},"slot_drilldowns":[],"operator_verification_preflight":{"artifact":"visual-runtime-gateway-operator-verification-preflight-v1","status":"blocked_visual_runtime_gateway_operator_verification","pass":false,"fail":true,"fail_closed":true,"summary":{"runtime_slots_evaluated":0,"blocked_slots":0,"clear_slots":0,"gateway_exception_count":0,"scoped_gateway_uids":[],"blocked_categories":{"scoped_gateway_evidence_present":1,"gateway_exception_gate_clear":1,"reviewable_slot_drilldowns_present":1,"safe_read_only_posture":0},"fail_closed_gateway_gate":true},"checks":{"scoped_gateway_evidence_present":{"pass":false,"fail":true,"status":"blocked","blockers":["missing scoped gateway UID evidence for visual runtime gateway verification"],"recommended_operator_next_action":"Register and heartbeat the site gateway, then regenerate Visual Composer runtime readiness evidence for this exact release scope."},"gateway_exception_gate_clear":{"pass":false,"fail":true,"status":"blocked","blockers":["visual runtime gateway exception gate has blocked or missing scoped evidence"],"recommended_operator_next_action":"Resolve visual runtime gateway blockers before release/write-safety handoff and re-run the handoff report."},"reviewable_slot_drilldowns_present":{"pass":false,"fail":true,"status":"blocked","blockers":["visual runtime gateway drilldown refs are missing graphic or semantic binding identifiers"],"recommended_operator_next_action":"Regenerate/publish Visual Composer runtime evidence so each slot has operator-reviewable graphic and semantic binding refs."},"safe_read_only_posture":{"pass":true,"fail":false,"status":"ready","blockers":[],"recommended_operator_next_action":"Verification is advisory-only/read-only; no BAS writes are enabled."}},"blocked_slot_drilldown_refs":[],"artifact_references":{"json_api":"/api/operator/release-handoff/visual-runtime-gateway-verification-preflight.json","csv_export":"/api/operator/release-handoff/visual-runtime-gateway-verification-preflight/export.csv","html_review":"/operator-release-handoff/visual-runtime-gateway-verification-preflight","source_handoff_api":"/api/operator/release-handoff","source_runtime_health_review_api":"/api/visual-composer/runtime-health-review","operator_graphics_drilldowns_api":"/api/visual-composer/operator-graphics-drilldowns"},"safe_posture":{"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"credentials":"redacted","recommended_operator_next_action":"Resolve visual runtime gateway blockers before release/write-safety handoff; do not use unverified runtime graphics as ready evidence."},"blockers":[],"artifact_references":{"runtime_gate_api":"/api/visual-composer/runtime-binding-use-gate","runtime_gate_export":"/api/visual-composer/runtime-binding-use-gate/export.csv","runtime_health_review_api":"/api/visual-composer/runtime-health-review","runtime_health_review_export":"/api/visual-composer/runtime-health-review/export.csv","operator_graphics_drilldowns_api":"/api/visual-composer/operator-graphics-drilldowns"},"safe_posture":{"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"credentials":"redacted","recommended_operator_next_action":"Visual runtime gateway readiness evidence is clear; keep runtime graphics read-only."},"blocker_rollup":{"artifact":"visual-composer-release-blocker-rollup-v1","source_artifacts":["visual-composer-binding-candidates-v1","visual-composer-runtime-health-review-v1","visual-runtime-gateway-readiness-handoff-v1"],"summary":{"total_blocker_count":1,"candidate_blocker_count":0,"runtime_blocker_count":0,"gateway_blocker_count":0,"current_runtime_slot_count":0,"blocked_runtime_slot_count":0,"scoped_gateway_uids":[],"fail_closed":true,"advisory_only":true,"write_execution_enabled":false},"rollup_items":[{"category":"scope","graphic_uid":"visual-composer-release-scope","graphic_status":"blocked","template_id":"release-handoff-scope","runtime_use_state":"blocked","readiness_state":"blocked","source_semantic_binding_id":null,"semantic_role":"release_scope","visual_slot":"operator_review_scope","point_id":null,"point_name":null,"hierarchy_scope_ref":"release-handoff-scope","gateway_exception_status":"not_applicable","gateway_exception_blocker_status":"blocked","gateway_exception_gateway_uids":[],"blockers":["visual composer explicit equipment scope required"],"fail_closed_reason":"visual composer explicit equipment scope required","operator_drilldown_url":"/operator-release-handoff/visual-composer-blocker-rollup","api_drilldown_url":"/api/operator/release-handoff/visual-composer-blocker-rollup.json","runtime_health_review_url":"/api/visual-composer/runtime-health-review","release_preflight_url":"/api/operator/release-handoff/visual-runtime-gateway-verification-preflight.json","advisory_only":true,"write_execution_enabled":false,"write_disabled":true}],"artifact_references":{"json_api":"/api/operator/release-handoff/visual-composer-blocker-rollup.json","csv_export":"/api/operator/release-handoff/visual-composer-blocker-rollup/export.csv","markdown_report":"/api/operator/release-handoff/visual-composer-blocker-rollup/report.md","html_review":"/operator-release-handoff/visual-composer-blocker-rollup","binding_candidate_api":"/api/visual-composer/binding-candidates","runtime_health_review_api":"/api/visual-composer/runtime-health-review","operator_graphics_drilldowns_api":"/api/visual-composer/operator-graphics-drilldowns","visual_runtime_gateway_preflight_api":"/api/operator/release-handoff/visual-runtime-gateway-verification-preflight.json"},"safe_posture":{"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"credentials":"redacted","recommended_operator_next_action":"Open the scoped rollup drilldowns, clear candidate/runtime/gateway blockers, then rerun release handoff verification; no BAS writes are enabled."},"blockers":["visual composer explicit equipment scope required"],"artifact_references":{"binding_candidate_api":"/api/visual-composer/binding-candidates","binding_candidate_export":"/api/visual-composer/binding-candidates/export.csv","runtime_gate_api":"/api/visual-composer/runtime-binding-use-gate","runtime_gate_export":"/api/visual-composer/runtime-binding-use-gate/export.csv","runtime_health_review_api":"/api/visual-composer/runtime-health-review","operator_graphics_drilldowns_api":"/api/visual-composer/operator-graphics-drilldowns"},"safe_posture":{"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"credentials":"redacted","recommended_operator_next_action":"Do not hand off release/write-safety readiness as ready until Visual Composer operator-review evidence blockers are cleared."},"visual_composer_ai_planner_decision_audit_evidence":{"artifact":"visual-composer-ai-planner-decision-audit-release-evidence-v1","generated_at":"2026-05-14T09:39:55.403635Z","status":"blocked_ai_planner_decision_audit_evidence","audit_count":0,"ready_audit_count":0,"decision_audits":[],"blockers":["missing Visual Composer AI planner decision audit evidence"],"artifact_references":{"json_api":"/api/graphics/ai/scene-planner/workstation/decision-audits","csv_export_api":"/api/graphics/ai/scene-planner/workstation/decision-audits/export.csv"},"credentials":"redacted","safety_posture":{"advisory_only":true,"read_only":true,"read_only_advisory":true,"raw_html_mutation_allowed":false,"publish_allowed":false,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"recommended_operator_next_action":"Resolve Visual Composer AI planner decision audit blockers before claiming graphics planner readiness.","advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"gateway_sync_buffer_remediation_evidence":{"artifact":"gateway-sync-buffer-remediation-handoff-evidence-v1","source_artifact":"gateway-sync-buffer-remediation-actions-v1","generated_at":"2026-05-14T09:39:55.402637Z","gateway_uid":null,"read_only_mode":true,"outbound_only":true,"write_execution_enabled":false,"alarm_acknowledgement_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"payloads_redacted":true,"summary":{"remediation_action_count":0,"failed_count":0,"expired_in_flight_count":0,"due_pending_count":0,"operator_review_required":false,"delivery_audit_event_count":0,"blocked_transition_count":0,"unresolved_condition_count":0},"delivery_audit_summary":{"event_count":0,"audit_event_count":0,"blocked_transition_count":0,"unresolved_condition_count":0,"scoped_event_count":0},"action_type_counts":[],"sample_actions":[],"delivery_audit_summaries":[],"recent_delivery_audit_events":[],"artifact_references":{"json_api":"/api/gateway/sync-buffer/remediation-actions","csv_export_api":"/api/gateway/sync-buffer/remediation-actions/export.csv","status_summary_api":"/api/gateway/sync-buffer/status","delivery_audit_api_template":"/api/gateway/sync-buffer/events/{event_uid}/delivery-audit"},"recommended_operator_next_action":"No sync-buffer remediation actions are currently due.","credentials":"redacted"},"demand_limiting_evidence_bundle_archive_refs":[],"digitalocean_storage_backup_preflight_evidence":{"artifact":"operator-release-digitalocean-storage-backup-preflight-evidence-v1","source_artifact":"digitalocean-storage-backup-preflight-v1","status":"blocked_missing_or_unsafe_storage_posture","target":{"provider":"not_confirmed","compute":"unsupported_or_placeholder","value_state":"missing_or_unsupported"},"database_target":{"url_state":"sqlite_not_production_postgres","postgres_posture":"blocked_sqlite_not_production_postgres","local_vs_managed":"not_confirmed","values_redacted":true},"artifact_storage_target":{"attached_volume":"missing_or_unsafe","artifact_storage":"outside_attached_volume_boundary","drawing_storage":"outside_attached_volume_boundary","export_storage":"outside_attached_volume_boundary"},"attached_volume_expectation":"missing_or_unsafe","backup_export_checklist":{"droplet_snapshots":"missing_operator_snapshot_expectation","database_backup_export":"missing","artifact_backup_export":"missing"},"backup_retention_schedule":{"database_backup_retention_days":"missing_or_invalid","artifact_backup_retention_days":"missing_or_invalid"},"retention_expectations":["Verify Droplet/volume snapshots plus separate database and artifact backup exports before customer production use.","Keep central supervisor storage on DigitalOcean PostgreSQL posture and attached volume artifact paths.","Field gateways keep local buffers and sync outbound; live BAS traffic remains local."],"field_gateway_boundary":{"local_buffer":"missing","sync_boundary":"blocked_sync_boundary_not_outbound_only"},"evidence_paths":{"json_api":"/api/deployment/digitalocean/storage-backup-preflight","deployment_readiness_api":"/api/deployment/readiness","release_checklist_cli":"scripts/intellicore_release_checklist.py --json","operator_handoff_bundle_cli":"scripts/intellicore_operator_handoff_bundle.py --json"},"blocker_count":13,"blockers":["DigitalOcean Docker Droplet/VPS target must be explicit","Attached DigitalOcean volume path must be configured outside ephemeral storage","artifact_storage must live on the attached volume and not public/ephemeral storage","drawing_storage must live on the attached volume and not public/ephemeral storage","export_storage must live on the attached volume and not public/ephemeral storage","PostgreSQL local-on-Droplet or DigitalOcean Managed PostgreSQL posture must be explicit","Droplet/volume snapshots must be enabled or explicitly scheduled before production","database_backup_export path must be configured on the attached volume","artifact_backup_export path must be configured on the attached volume","Database backup retention days must be a positive integer","Artifact backup retention days must be a positive integer","Field gateway buffer path and outbound-only sync boundary must be explicit","Credential values must stay out of git and public object storage"],"safe_posture":{"advisory_only":true,"read_only":true,"mutates_environment":false,"mutates_remote_infrastructure":false,"writes_bas_devices":false,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"credentials":"redacted","recommended_operator_next_action":"Resolve DigitalOcean storage/backup blockers, then rerun deployment readiness and release handoff before production."},"digitalocean_restore_drill_preflight_evidence":{"artifact":"operator-release-digitalocean-restore-drill-preflight-evidence-v1","source_artifact":"digitalocean-restore-drill-preflight-v1","status":"blocked_restore_drill_not_verified","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","restore_action_mode":"no_restore_action","restore_action_performed":false,"package":{"release_package_id_state":"missing_or_placeholder","build_id_state":"missing_or_placeholder","values_redacted":true},"target":{"provider":"not_confirmed","compute":"unsupported_or_placeholder","value_state":"missing_or_unsupported"},"restore_drill":{"last_run_at_state":"missing","max_age_days":30,"freshness":{"state":"missing_or_invalid","age_days":null,"max_age_days":30,"last_run_at_redacted":false},"target_environment":"missing","database_restore_evidence":"missing","artifact_restore_evidence":"missing","rollback_runbook":"missing","values_redacted":true},"backup_retention_state":{"database_backup_retention_days":"missing_or_invalid","artifact_backup_retention_days":"missing_or_invalid"},"backup_evidence_state":{"database_backup_export":"missing","artifact_backup_export":"missing","values_redacted":true},"restore_objectives":{"rto_minutes":null,"rpo_minutes":null},"evidence_paths":{"json_api":"/api/deployment/digitalocean/restore-drill-preflight","deployment_readiness_api":"/api/deployment/readiness","release_checklist_cli":"scripts/intellicore_release_checklist.py --json","operator_handoff_bundle_cli":"scripts/intellicore_operator_handoff_bundle.py --json"},"operator_expectations":["Run database restore and artifact restore drills in isolated staging before customer production cutover.","Record RTO/RPO results and keep rollback runbook evidence on the attached DigitalOcean volume.","Do not restore into production as a drill and do not include credential values in handoff evidence."],"blocker_count":19,"blockers":["DigitalOcean Docker Droplet/VPS target must be explicit","Attached DigitalOcean volume path must be configured before restore drill evidence can be trusted","Database restore drill last-run timestamp must be recorded","Restore drill evidence is stale or timestamp is invalid","Restore drill release package id is missing, invalid, or cross-scope","Restore drill build id must be configured","Restore drill operator approval reference must be archived before production cutover","Restore drill operator approval actor must be recorded","Restore drill operator approval timestamp must be valid and no older than the restore drill","Database restore drill evidence path must be stored on the attached volume","Artifact restore drill evidence path must be stored on the attached volume","Rollback runbook path must be stored on the attached volume","Database backup export evidence path must be stored on the attached volume for restore drill readiness","Artifact backup export evidence path must be stored on the attached volume for restore drill readiness","Database backup retention days must be a positive integer for restore drill readiness","Artifact backup retention days must be a positive integer for restore drill readiness","Restore drill target must be isolated staging/sandbox, not production","Restore drill RTO minutes must be a positive integer","Restore drill RPO minutes must be a positive integer"],"safe_posture":{"advisory_only":true,"read_only":true,"mutates_environment":false,"mutates_remote_infrastructure":false,"writes_bas_devices":false,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"credentials":"redacted","recommended_operator_next_action":"Complete isolated restore drill evidence and rerun deployment readiness before production cutover."},"manual_release_gates":{"artifact":"operator-release-manual-gates-v1","status":"blocked_manual_operator_gates_pending","readiness_summary":{"deployment_readiness_status":"deployable_with_placeholders","release_checklist_status":"pass_with_placeholders","predictive_readiness_status":"blocked_missing_inputs","alarm_event_status":"not_requested_explicit_equipment_scope_required"},"deployment_target":{"provider":"not_confirmed","compute":"unsupported_or_placeholder","value_state":"missing_or_unsupported"},"storage_backup_preflight_status":"blocked_missing_or_unsafe_storage_posture","required_artifacts":{"operator_release_handoff_json":"/api/operator/release-handoff","operator_release_handoff_markdown":"/api/operator/release-handoff/report.md","operator_release_handoff_package":"/api/operator/release-handoff/package.json","integrity_manifest":"/api/operator/release-handoff/integrity.json","archive_index":"/api/operator/release-handoff/archive-index.json","evidence_retention_report":"/api/operator/release-handoff/evidence-retention.json","release_package_preflight":"/api/operator/release-handoff/preflight.json","release_cutover_rollback_checklist":"/api/operator/release-handoff/cutover-rollback-checklist.json","deployment_readiness":"/api/deployment/readiness","digitalocean_storage_backup_preflight":"/api/deployment/digitalocean/storage-backup-preflight","site_scene_navigation_api":"/api/graphics/site-scenes","site_scene_navigation_html":"/graphics/site-scenes","site_scene_graph_metadata_index_json":"/api/graphics/site-scene-graph-metadata/index.json","site_scene_graph_metadata_index_csv":"/api/graphics/site-scene-graph-metadata/index.csv","site_scene_graph_metadata_review_json":"/api/graphics/site-scene-graph-metadata/review-index.json","site_scene_graph_metadata_review_html":"/graphics/site-scene-graph-metadata","site_scene_release_evidence_map_json":"/api/graphics/site-scene-graph-metadata/release-evidence-map.json","site_scene_release_evidence_map_csv":"/api/graphics/site-scene-graph-metadata/release-evidence-map/export.csv","visual_composer_ai_planner_decision_audit_api":"/api/graphics/ai/scene-planner/workstation/decision-audits"},"rollback_backup_notes":{"droplet_volume_snapshots":"missing_operator_snapshot_expectation","database_backup_export":"missing_or_unsafe_backup_path","artifact_backup_export":"missing_or_unsafe_backup_path","rollback_plan":"restore PostgreSQL backup and attached-volume artifacts from operator-verified backups/snapshots; no credentials included in bundle"},"manual_gate_items":[{"name":"operator_approval_recorded","confirmed":false,"evidence_required":"operator/customer deployment approval recorded outside git before production cutover"},{"name":"backup_restore_path_verified","confirmed":false,"evidence_required":"database and artifact backup export/restore path verified by operator"},{"name":"rollback_plan_reviewed","confirmed":false,"evidence_required":"rollback plan reviewed, including restore point and prior release/package fallback"},{"name":"evidence_archive_persisted","confirmed":false,"evidence_required":"handoff package, integrity manifest, archive index, retention report, and preflight packet persisted outside git"},{"name":"write_and_autopilot_disabled_confirmed","confirmed":false,"evidence_required":"operator confirmed write_execution_enabled=false and autopilot_execution_enabled=false for release"}],"blockers":["manual gate pending: operator_approval_recorded","manual gate pending: backup_restore_path_verified","manual gate pending: rollback_plan_reviewed","manual gate pending: evidence_archive_persisted","manual gate pending: write_and_autopilot_disabled_confirmed","storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture"],"credentials":"redacted","safe_posture":{"advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"recommended_operator_next_action":"Resolve manual release gate blockers and rerun the handoff bundle before customer deployment."},"release_checklist":{"artifact":"release-checklist-v1","overall_status":"pass_with_placeholders","startup_smoke_status":"pass_with_placeholders","deployment_readiness_status":"deployable_with_placeholders","sections":{"package_artifacts":{"ok":true,"summary":"required release packaging artifacts present"},"container_runtime":{"ok":true,"summary":"container runtime wrapper ready; no local docker/podman binary found"},"remote_url_readiness":{"ok":true,"summary":"remote URL readiness skipped until operator provides deployed base URL"},"smoke_checks":{"ok":true,"summary":"in-process startup smoke checks pass"},"predictive_operations_readiness":{"ok":true,"summary":"predictive operations readiness packet is advisory-only and write-disabled"},"predictive_handoff_report":{"ok":true,"summary":"predictive readiness Markdown handoff report is packaged for operator review"},"digitalocean_storage_backup_preflight":{"ok":true,"summary":"DigitalOcean storage/backup preflight is advisory-only and fail-closed"},"safety_posture":{"ok":true,"summary":"advisory-only posture verified; BAS writes and autopilot remain disabled"}}},"safe_posture":{"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"blocker_counts":{"predictive":7,"alarm_event":1,"visual_composer_review":1,"visual_composer_runtime_gateway":0,"visual_composer_ai_planner_decision_audit":1,"gateway_sync_buffer":0,"manual_gates":6,"digitalocean_storage_backup":13,"digitalocean_restore_drill":19,"non_code":3,"total":38,"cutover_rollback":23,"cutover_approval_archive":9,"deployment_runbook_review":8},"predictive_blockers":["semantic_role:zone_temperature","semantic_role:zone_setpoint","trend_samples","occupancy_signals","weather_observations","occupancy_evidence:explicit_equipment_scope_required","weather_forecast:missing_scoped_weather_forecast"],"alarm_event_blockers":["explicit_equipment_scope_required"],"visual_composer_review_blockers":["visual composer explicit equipment scope required"],"visual_composer_runtime_gateway_blockers":[],"visual_composer_ai_planner_decision_audit_blockers":["missing Visual Composer AI planner decision audit evidence"],"gateway_sync_buffer_blockers":[],"digitalocean_restore_drill_blockers":["DigitalOcean Docker Droplet/VPS target must be explicit","Attached DigitalOcean volume path must be configured before restore drill evidence can be trusted","Database restore drill last-run timestamp must be recorded","Restore drill evidence is stale or timestamp is invalid","Restore drill release package id is missing, invalid, or cross-scope","Restore drill build id must be configured","Restore drill operator approval reference must be archived before production cutover","Restore drill operator approval actor must be recorded","Restore drill operator approval timestamp must be valid and no older than the restore drill","Database restore drill evidence path must be stored on the attached volume","Artifact restore drill evidence path must be stored on the attached volume","Rollback runbook path must be stored on the attached volume","Database backup export evidence path must be stored on the attached volume for restore drill readiness","Artifact backup export evidence path must be stored on the attached volume for restore drill readiness","Database backup retention days must be a positive integer for restore drill readiness","Artifact backup retention days must be a positive integer for restore drill readiness","Restore drill target must be isolated staging/sandbox, not production","Restore drill RTO minutes must be a positive integer","Restore drill RPO minutes must be a positive integer"],"manual_gate_blockers":["manual gate pending: operator_approval_recorded","manual gate pending: backup_restore_path_verified","manual gate pending: rollback_plan_reviewed","manual gate pending: evidence_archive_persisted","manual gate pending: write_and_autopilot_disabled_confirmed","storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture"],"non_code_blockers":["operator must set target BACnet/IP range before live discovery","operator must set target Modbus host before live enumeration","operator must provide deployed remote base URL before external readiness smoke"],"all_blockers":["semantic_role:zone_temperature","semantic_role:zone_setpoint","trend_samples","occupancy_signals","weather_observations","occupancy_evidence:explicit_equipment_scope_required","weather_forecast:missing_scoped_weather_forecast","explicit_equipment_scope_required","visual composer explicit equipment scope required","missing Visual Composer AI planner decision audit evidence","DigitalOcean Docker Droplet/VPS target must be explicit","Attached DigitalOcean volume path must be configured before restore drill evidence can be trusted","Database restore drill last-run timestamp must be recorded","Restore drill evidence is stale or timestamp is invalid","Restore drill release package id is missing, invalid, or cross-scope","Restore drill build id must be configured","Restore drill operator approval reference must be archived before production cutover","Restore drill operator approval actor must be recorded","Restore drill operator approval timestamp must be valid and no older than the restore drill","Database restore drill evidence path must be stored on the attached volume","Artifact restore drill evidence path must be stored on the attached volume","Rollback runbook path must be stored on the attached volume","Database backup export evidence path must be stored on the attached volume for restore drill readiness","Artifact backup export evidence path must be stored on the attached volume for restore drill readiness","Database backup retention days must be a positive integer for restore drill readiness","Artifact backup retention days must be a positive integer for restore drill readiness","Restore drill target must be isolated staging/sandbox, not production","Restore drill RTO minutes must be a positive integer","Restore drill RPO minutes must be a positive integer","operator must set target BACnet/IP range before live discovery","operator must set target Modbus host before live enumeration","operator must provide deployed remote base URL before external readiness smoke","manual gate pending: operator_approval_recorded","manual gate pending: backup_restore_path_verified","manual gate pending: rollback_plan_reviewed","manual gate pending: evidence_archive_persisted","manual gate pending: write_and_autopilot_disabled_confirmed","storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture"],"verification_commands":["python scripts/intellicore_startup_smoke.py --json","python scripts/intellicore_predictive_readiness.py --json","python scripts/intellicore_predictive_readiness.py --markdown","python scripts/intellicore_release_checklist.py --json","python scripts/intellicore_operator_handoff_bundle.py --json","python scripts/intellicore_operator_handoff_bundle.py --archive-index","python scripts/intellicore_operator_handoff_bundle.py --retention-report","python scripts/intellicore_operator_handoff_bundle.py --local-url-smoke","python scripts/intellicore_operator_handoff_bundle.py --cutover-rollback-checklist","python scripts/intellicore_operator_handoff_bundle.py --cutover-approval-archive","python scripts/intellicore_operator_handoff_bundle.py --deployment-runbook-review","python scripts/intellicore_deployment_publish_smoke.py --json --target-url https://replace-with-deployment-url",".venv/bin/python -m pytest tests/test_operator_release_handoff.py -q","curl -fsS http://127.0.0.1:8000/api/operator/release-handoff/integrity.json",".venv/bin/python -m pytest -q","git diff --check"],"changed_artifact_references":{"json_api":"/api/operator/release-handoff","markdown_api":"/api/operator/release-handoff/report.md","html_report_api":"/api/operator/release-handoff/report.html","package_download_api":"/api/operator/release-handoff/package.json","integrity_manifest_api":"/api/operator/release-handoff/integrity.json","archive_index_api":"/api/operator/release-handoff/archive-index.json","retention_report_api":"/api/operator/release-handoff/evidence-retention.json","local_url_smoke_api":"/api/operator/release-handoff/local-url-smoke.json","publish_smoke_api":"/api/operator/release-handoff/publish-smoke.json","package_preflight_api":"/api/operator/release-handoff/preflight.json","package_preflight_csv":"/api/operator/release-handoff/preflight/export.csv","package_preflight_html_review":"/operator-release-handoff/preflight","artifact_drilldown_api_template":"/api/operator/release-handoff/artifacts/{artifact_id}.json","artifact_drilldown_html_template":"/operator-release-handoff/artifacts/{artifact_id}","trend_history_evidence_api":"/api/operator/release-handoff/trend-history-evidence.json","alarm_event_evidence_api":"/api/operator/release-handoff/alarm-event-evidence.json","weather_forecast_evidence_api":"/api/operator/release-handoff/weather-forecast-evidence.json","predictive_evidence_matrix_api":"/api/operator/release-handoff/evidence-matrix.json","predictive_evidence_matrix_csv":"/api/operator/release-handoff/evidence-matrix.csv","controlled_write_readiness_summary_api":"/api/operator/release-handoff/controlled-write-readiness-summary.json","visual_composer_binding_review_api":"/api/visual-composer/binding-candidates","visual_composer_runtime_gate_api":"/api/visual-composer/runtime-binding-use-gate","visual_composer_runtime_health_review_api":"/api/visual-composer/runtime-health-review","visual_composer_operator_graphics_drilldowns_api":"/api/visual-composer/operator-graphics-drilldowns","visual_composer_runtime_gateway_handoff":"/api/operator/release-handoff","visual_composer_blocker_rollup":"/api/operator/release-handoff/visual-composer-blocker-rollup.json","visual_composer_blocker_rollup_api":"/api/operator/release-handoff/visual-composer-blocker-rollup.json","visual_composer_blocker_rollup_csv":"/api/operator/release-handoff/visual-composer-blocker-rollup/export.csv","visual_composer_blocker_rollup_markdown":"/api/operator/release-handoff/visual-composer-blocker-rollup/report.md","visual_composer_blocker_rollup_html":"/operator-release-handoff/visual-composer-blocker-rollup","site_scene_navigation_api":"/api/graphics/site-scenes","site_scene_navigation_html":"/graphics/site-scenes","site_scene_graph_metadata_index_json":"/api/graphics/site-scene-graph-metadata/index.json","site_scene_graph_metadata_index_csv":"/api/graphics/site-scene-graph-metadata/index.csv","site_scene_graph_metadata_review_json":"/api/graphics/site-scene-graph-metadata/review-index.json","site_scene_graph_metadata_review_html":"/graphics/site-scene-graph-metadata","site_scene_release_evidence_map_json":"/api/graphics/site-scene-graph-metadata/release-evidence-map.json","site_scene_release_evidence_map_csv":"/api/graphics/site-scene-graph-metadata/release-evidence-map/export.csv","visual_composer_ai_planner_decision_audit_api":"/api/graphics/ai/scene-planner/workstation/decision-audits","site_scene_graph_metadata_api_template":"/api/graphics/site-scenes/{scene_uid}/scene-graph-metadata","site_scene_graph_metadata_csv_template":"/api/graphics/site-scenes/{scene_uid}/scene-graph-metadata/export.csv","gateway_sync_buffer_remediation_api":"/api/gateway/sync-buffer/remediation-actions","gateway_sync_buffer_remediation_csv":"/api/gateway/sync-buffer/remediation-actions/export.csv","gateway_sync_buffer_status_api":"/api/gateway/sync-buffer/status","gateway_sync_buffer_delivery_audit_api_template":"/api/gateway/sync-buffer/events/{event_uid}/delivery-audit","html_review":"/operator-release-handoff","cli":"scripts/intellicore_operator_handoff_bundle.py","release_checklist_cli":"scripts/intellicore_release_checklist.py","predictive_markdown_api":"/api/predictive/readiness/report.md","deployment_readiness_api":"/api/deployment/readiness","digitalocean_storage_backup_preflight_api":"/api/deployment/digitalocean/storage-backup-preflight","digitalocean_restore_drill_preflight_api":"/api/deployment/digitalocean/restore-drill-preflight","cutover_rollback_checklist_api":"/api/operator/release-handoff/cutover-rollback-checklist.json","cutover_approval_archive_api":"/api/operator/release-handoff/cutover-approval-archive.json","deployment_runbook_review_api":"/api/operator/release-handoff/deployment-runbook-review.json","evidence_history_api":"/api/operator/release-handoff/evidence-history.json","evidence_review_index_api":"/api/operator/release-handoff/evidence-review-index.json","evidence_review_index_html":"/operator-release-handoff/evidence-review-index","demand_limiting_evidence_bundle_refs":[]},"credentials":"redacted","recommended_next_action":"Resolve listed operator placeholders/non-code blockers, rerun verification commands, then hand off read-only deployment artifacts.","publish_smoke_evidence_retention":{"artifact":"publish-smoke-evidence-retention-section-v1","release_id":"intellicore-20260514T093955300234Z","overall_status":"blocked_publish_smoke_evidence_retention","pass":false,"fail":true,"fail_closed":true,"publish_action_performed":false,"network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","credentials":"redacted","checks":[{"name":"publish_smoke","status":"pass_with_placeholders","pass":false,"fail":true,"blockers":["semantic_role:zone_temperature","semantic_role:zone_setpoint","trend_samples","occupancy_signals","weather_observations","occupancy_evidence:explicit_equipment_scope_required","weather_forecast:missing_scoped_weather_forecast","explicit_equipment_scope_required","visual composer explicit equipment scope required","missing Visual Composer AI planner decision audit evidence","DigitalOcean Docker Droplet/VPS target must be explicit","Attached DigitalOcean volume path must be configured before restore drill evidence can be trusted","Database restore drill last-run timestamp must be recorded","Restore drill evidence is stale or timestamp is invalid","Restore drill release package id is missing, invalid, or cross-scope","Restore drill build id must be configured","Restore drill operator approval reference must be archived before production cutover","Restore drill operator approval actor must be recorded","Restore drill operator approval timestamp must be valid and no older than the restore drill","Database restore drill evidence path must be stored on the attached volume","Artifact restore drill evidence path must be stored on the attached volume","Rollback runbook path must be stored on the attached volume","Database backup export evidence path must be stored on the attached volume for restore drill readiness","Artifact backup export evidence path must be stored on the attached volume for restore drill readiness","Database backup retention days must be a positive integer for restore drill readiness","Artifact backup retention days must be a positive integer for restore drill readiness","Restore drill target must be isolated staging/sandbox, not production","Restore drill RTO minutes must be a positive integer","Restore drill RPO minutes must be a positive integer","operator must set target BACnet/IP range before live discovery","operator must set target Modbus host before live enumeration","operator must provide deployed remote base URL before external readiness smoke","manual gate pending: operator_approval_recorded","manual gate pending: backup_restore_path_verified","manual gate pending: rollback_plan_reviewed","manual gate pending: evidence_archive_persisted","manual gate pending: write_and_autopilot_disabled_confirmed","storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture","operator must provide deployed target URL before external publish smoke","controlled-write readiness packet is missing or not ready for publish smoke"]},{"name":"evidence_retention","status":"fresh_with_operator_placeholders","pass":false,"fail":true,"blockers":["semantic_role:zone_temperature","semantic_role:zone_setpoint","trend_samples","occupancy_signals","weather_observations","occupancy_evidence:explicit_equipment_scope_required","weather_forecast:missing_scoped_weather_forecast","explicit_equipment_scope_required","visual composer explicit equipment scope required","missing Visual Composer AI planner decision audit evidence","DigitalOcean Docker Droplet/VPS target must be explicit","Attached DigitalOcean volume path must be configured before restore drill evidence can be trusted","Database restore drill last-run timestamp must be recorded","Restore drill evidence is stale or timestamp is invalid","Restore drill release package id is missing, invalid, or cross-scope","Restore drill build id must be configured","Restore drill operator approval reference must be archived before production cutover","Restore drill operator approval actor must be recorded","Restore drill operator approval timestamp must be valid and no older than the restore drill","Database restore drill evidence path must be stored on the attached volume","Artifact restore drill evidence path must be stored on the attached volume","Rollback runbook path must be stored on the attached volume","Database backup export evidence path must be stored on the attached volume for restore drill readiness","Artifact backup export evidence path must be stored on the attached volume for restore drill readiness","Database backup retention days must be a positive integer for restore drill readiness","Artifact backup retention days must be a positive integer for restore drill readiness","Restore drill target must be isolated staging/sandbox, not production","Restore drill RTO minutes must be a positive integer","Restore drill RPO minutes must be a positive integer","operator must set target BACnet/IP range before live discovery","operator must set target Modbus host before live enumeration","operator must provide deployed remote base URL before external readiness smoke","manual gate pending: operator_approval_recorded","manual gate pending: backup_restore_path_verified","manual gate pending: rollback_plan_reviewed","manual gate pending: evidence_archive_persisted","manual gate pending: write_and_autopilot_disabled_confirmed","storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture","controlled-write readiness packet is missing or not ready for release evidence retention"]},{"name":"manual_release_gates","status":"blocked_manual_operator_gates_pending","pass":false,"fail":true,"blockers":["manual gate pending: operator_approval_recorded","manual gate pending: backup_restore_path_verified","manual gate pending: rollback_plan_reviewed","manual gate pending: evidence_archive_persisted","manual gate pending: write_and_autopilot_disabled_confirmed","storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture"]},{"name":"trend_history_evidence","status":"blocked_trend_history_release_preflight","pass":false,"fail":true,"blockers":["explicit_equipment_scope_required","missing_scoped_trend_history_evidence","source_status:not_requested_explicit_equipment_scope_required"]},{"name":"alarm_event_evidence","status":"blocked_alarm_event_release_preflight","pass":false,"fail":true,"blockers":["explicit_equipment_scope_required","missing_scoped_alarm_event_evidence","source_status:not_requested_explicit_equipment_scope_required"]},{"name":"weather_forecast_evidence","status":"blocked_weather_forecast_release_preflight","pass":false,"fail":true,"blockers":["missing_scoped_weather_forecast","explicit_site_scope_required","weather_forecast_freshness:missing","source_status:blocked_weather_forecast_not_ready"]},{"name":"safe_posture","status":"fail_closed","pass":true,"fail":false,"blockers":[]}],"blockers":["publish_smoke: semantic_role:zone_temperature","publish_smoke: semantic_role:zone_setpoint","publish_smoke: trend_samples","publish_smoke: occupancy_signals","publish_smoke: weather_observations","publish_smoke: occupancy_evidence:explicit_equipment_scope_required","publish_smoke: weather_forecast:missing_scoped_weather_forecast","publish_smoke: explicit_equipment_scope_required","publish_smoke: visual composer explicit equipment scope required","publish_smoke: missing Visual Composer AI planner decision audit evidence","publish_smoke: DigitalOcean Docker Droplet/VPS target must be explicit","publish_smoke: Attached DigitalOcean volume path must be configured before restore drill evidence can be trusted","publish_smoke: Database restore drill last-run timestamp must be recorded","publish_smoke: Restore drill evidence is stale or timestamp is invalid","publish_smoke: Restore drill release package id is missing, invalid, or cross-scope","publish_smoke: Restore drill build id must be configured","publish_smoke: Restore drill operator approval reference must be archived before production cutover","publish_smoke: Restore drill operator approval actor must be recorded","publish_smoke: Restore drill operator approval timestamp must be valid and no older than the restore drill","publish_smoke: Database restore drill evidence path must be stored on the attached volume","publish_smoke: Artifact restore drill evidence path must be stored on the attached volume","publish_smoke: Rollback runbook path must be stored on the attached volume","publish_smoke: Database backup export evidence path must be stored on the attached volume for restore drill readiness","publish_smoke: Artifact backup export evidence path must be stored on the attached volume for restore drill readiness","publish_smoke: Database backup retention days must be a positive integer for restore drill readiness","publish_smoke: Artifact backup retention days must be a positive integer for restore drill readiness","publish_smoke: Restore drill target must be isolated staging/sandbox, not production","publish_smoke: Restore drill RTO minutes must be a positive integer","publish_smoke: Restore drill RPO minutes must be a positive integer","publish_smoke: operator must set target BACnet/IP range before live discovery","publish_smoke: operator must set target Modbus host before live enumeration","publish_smoke: operator must provide deployed remote base URL before external readiness smoke","publish_smoke: manual gate pending: operator_approval_recorded","publish_smoke: manual gate pending: backup_restore_path_verified","publish_smoke: manual gate pending: rollback_plan_reviewed","publish_smoke: manual gate pending: evidence_archive_persisted","publish_smoke: manual gate pending: write_and_autopilot_disabled_confirmed","publish_smoke: storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture","publish_smoke: operator must provide deployed target URL before external publish smoke","publish_smoke: controlled-write readiness packet is missing or not ready for publish smoke","evidence_retention: semantic_role:zone_temperature","evidence_retention: semantic_role:zone_setpoint","evidence_retention: trend_samples","evidence_retention: occupancy_signals","evidence_retention: weather_observations","evidence_retention: occupancy_evidence:explicit_equipment_scope_required","evidence_retention: weather_forecast:missing_scoped_weather_forecast","evidence_retention: explicit_equipment_scope_required","evidence_retention: visual composer explicit equipment scope required","evidence_retention: missing Visual Composer AI planner decision audit evidence","evidence_retention: DigitalOcean Docker Droplet/VPS target must be explicit","evidence_retention: Attached DigitalOcean volume path must be configured before restore drill evidence can be trusted","evidence_retention: Database restore drill last-run timestamp must be recorded","evidence_retention: Restore drill evidence is stale or timestamp is invalid","evidence_retention: Restore drill release package id is missing, invalid, or cross-scope","evidence_retention: Restore drill build id must be configured","evidence_retention: Restore drill operator approval reference must be archived before production cutover","evidence_retention: Restore drill operator approval actor must be recorded","evidence_retention: Restore drill operator approval timestamp must be valid and no older than the restore drill","evidence_retention: Database restore drill evidence path must be stored on the attached volume","evidence_retention: Artifact restore drill evidence path must be stored on the attached volume","evidence_retention: Rollback runbook path must be stored on the attached volume","evidence_retention: Database backup export evidence path must be stored on the attached volume for restore drill readiness","evidence_retention: Artifact backup export evidence path must be stored on the attached volume for restore drill readiness","evidence_retention: Database backup retention days must be a positive integer for restore drill readiness","evidence_retention: Artifact backup retention days must be a positive integer for restore drill readiness","evidence_retention: Restore drill target must be isolated staging/sandbox, not production","evidence_retention: Restore drill RTO minutes must be a positive integer","evidence_retention: Restore drill RPO minutes must be a positive integer","evidence_retention: operator must set target BACnet/IP range before live discovery","evidence_retention: operator must set target Modbus host before live enumeration","evidence_retention: operator must provide deployed remote base URL before external readiness smoke","evidence_retention: manual gate pending: operator_approval_recorded","evidence_retention: manual gate pending: backup_restore_path_verified","evidence_retention: manual gate pending: rollback_plan_reviewed","evidence_retention: manual gate pending: evidence_archive_persisted","evidence_retention: manual gate pending: write_and_autopilot_disabled_confirmed","evidence_retention: storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture","evidence_retention: controlled-write readiness packet is missing or not ready for release evidence retention","manual_release_gates: manual gate pending: operator_approval_recorded","manual_release_gates: manual gate pending: backup_restore_path_verified","manual_release_gates: manual gate pending: rollback_plan_reviewed","manual_release_gates: manual gate pending: evidence_archive_persisted","manual_release_gates: manual gate pending: write_and_autopilot_disabled_confirmed","manual_release_gates: storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture","trend_history_evidence: explicit_equipment_scope_required","trend_history_evidence: missing_scoped_trend_history_evidence","trend_history_evidence: source_status:not_requested_explicit_equipment_scope_required","alarm_event_evidence: explicit_equipment_scope_required","alarm_event_evidence: missing_scoped_alarm_event_evidence","alarm_event_evidence: source_status:not_requested_explicit_equipment_scope_required","weather_forecast_evidence: missing_scoped_weather_forecast","weather_forecast_evidence: explicit_site_scope_required","weather_forecast_evidence: weather_forecast_freshness:missing","weather_forecast_evidence: source_status:blocked_weather_forecast_not_ready"],"safe_posture":{"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"artifact_references":{"publish_smoke_api":"/api/operator/release-handoff/publish-smoke.json","retention_report_api":"/api/operator/release-handoff/evidence-retention.json","package_preflight_api":"/api/operator/release-handoff/preflight.json","package_download_api":"/api/operator/release-handoff/package.json"},"recommended_next_action":"Do not publish customer deployment; clear failed publish-smoke/evidence-retention checks and regenerate the handoff package."},"release_cutover_rollback_checklist":{"artifact":"release-cutover-rollback-checklist-v1","status":"blocked_cutover_rollback_prerequisites","release_package":{"package_id":"intellicore-20260514T093955300234Z","package_path":"/api/operator/release-handoff/package.json","value_state":"configured"},"scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all"},"restore_drill_evidence_state":{"status":"blocked_restore_drill_not_verified","last_run_at_state":"missing","target_environment":"missing","database_restore_evidence":"missing","artifact_restore_evidence":"missing","rollback_runbook":"missing","rto_minutes":null,"rpo_minutes":null,"values_redacted":true},"backup_prerequisites":{"storage_backup_status":"blocked_missing_or_unsafe_storage_posture","database_backup_export":"missing","artifact_backup_export":"missing","droplet_volume_snapshots":"missing_operator_snapshot_expectation","values_redacted":true},"manual_approval_gates":[{"name":"operator_approval_recorded","confirmed":false,"evidence_required":"operator/customer deployment approval recorded outside git before production cutover"},{"name":"backup_restore_path_verified","confirmed":false,"evidence_required":"database and artifact backup export/restore path verified by operator"},{"name":"rollback_plan_reviewed","confirmed":false,"evidence_required":"rollback plan reviewed, including restore point and prior release/package fallback"},{"name":"evidence_archive_persisted","confirmed":false,"evidence_required":"handoff package, integrity manifest, archive index, retention report, and preflight packet persisted outside git"},{"name":"write_and_autopilot_disabled_confirmed","confirmed":false,"evidence_required":"operator confirmed write_execution_enabled=false and autopilot_execution_enabled=false for release"}],"rollback_owner_action":{"owner_state":"placeholder_or_missing","action_ref_state":"placeholder_or_missing","values_redacted":true},"rto_rpo_posture":{"rto_minutes":null,"rpo_minutes":null,"state":"missing_or_invalid"},"checks":[{"name":"package_reference","status":"ready","pass":true,"fail":false},{"name":"explicit_scope","status":"blocked","pass":false,"fail":true},{"name":"restore_drill_evidence","status":"blocked","pass":false,"fail":true},{"name":"backup_prerequisites","status":"blocked","pass":false,"fail":true},{"name":"manual_approval_gates","status":"blocked","pass":false,"fail":true},{"name":"rollback_owner_action","status":"blocked","pass":false,"fail":true},{"name":"read_only_safety","status":"ready","pass":true,"fail":false}],"blockers":["cutover scope site_ref must be explicit before production release","cutover scope building_ref must be explicit before production release","cutover scope equipment_ref must be explicit before production release","restore-drill evidence not ready: blocked_restore_drill_not_verified","restore-drill last-run evidence is missing","restore-drill target must be isolated staging/sandbox","restore-drill database_restore_evidence evidence must be on attached volume","restore-drill artifact_restore_evidence evidence must be on attached volume","restore-drill rollback_runbook evidence must be on attached volume","RTO minutes must be recorded as a positive integer","RPO minutes must be recorded as a positive integer","storage/backup prerequisites not ready: blocked_missing_or_unsafe_storage_posture","Droplet/volume snapshot prerequisite is missing","database_backup_export prerequisite must be configured on attached volume","artifact_backup_export prerequisite must be configured on attached volume","rollback owner placeholder must be replaced before cutover","rollback action/reference placeholder must be replaced before cutover","manual gate pending: operator_approval_recorded","manual gate pending: backup_restore_path_verified","manual gate pending: rollback_plan_reviewed","manual gate pending: evidence_archive_persisted","manual gate pending: write_and_autopilot_disabled_confirmed","storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture"],"safe_posture":{"advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"mutates_environment":false,"mutates_remote_infrastructure":false,"writes_bas_devices":false},"credentials":"redacted","recommended_operator_next_action":"Resolve cutover/rollback blockers, rerun the handoff package, and do not cut over production until this checklist is ready."},"release_cutover_approval_archive":{"artifact":"release-cutover-approval-archive-evidence-v1","status":"blocked_cutover_approval_archive_prerequisites","release_id":"intellicore-20260514T093955300234Z","generated_at":"2026-05-14T09:39:55.437951Z","package_reference":{"package_id":"intellicore-20260514T093955300234Z","package_path":"/api/operator/release-handoff/package.json","operator_package_id_ref_state":"missing_or_placeholder","operator_package_path_ref_state":"missing_or_placeholder","archive_index_id":"archive-intellicore-20260514T093955300234Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all"}},"artifact_references":{"package_api":"/api/operator/release-handoff/package.json","integrity_manifest_api":"/api/operator/release-handoff/integrity.json","archive_index_api":"/api/operator/release-handoff/archive-index.json","cutover_rollback_checklist_api":"/api/operator/release-handoff/cutover-rollback-checklist.json","cutover_approval_archive_api":"/api/operator/release-handoff/cutover-approval-archive.json","approval_archive_api":"/api/operator/release-handoff/cutover-approval-archive.json"},"approval_archive":{"archive_ref_state":"missing_or_placeholder","checksum_algorithm":"SHA-256","checksum_sha256_state":"missing","expected_checksum_sha256":null,"checksum_verified":false,"approved_at_state":"missing_or_invalid","reviewer_state":"missing_or_placeholder","owner_state":"missing_or_placeholder","values_redacted":true},"runbook_review":{"review_state":"missing_or_unconfirmed","review_ref_state":"missing_or_placeholder","values_redacted":true},"checksum_evidence":{"integrity_manifest_artifact":"operator-release-handoff-integrity-manifest-v1","archive_index_artifact":"operator-release-handoff-archive-index-v1","package_core_checksum_sha256":"c3d67d366914de616f6eac8c4c48e804c0efa9dd4f446a9473813f6da712a04b","actual_package_core_checksum_sha256":"c3d67d366914de616f6eac8c4c48e804c0efa9dd4f446a9473813f6da712a04b","package_checksum_verified":true,"approval_archive_checksum_verified":false},"evidence_freshness":{"status":"stale_or_missing","package_age_minutes":0.002,"approval_age_minutes":null,"max_artifact_age_minutes":120,"checked_at":"2026-05-14T09:39:55.437951Z"},"checks":[{"name":"package_scope_reference","status":"blocked","pass":false,"fail":true},{"name":"approval_archive_reference","status":"blocked","pass":false,"fail":true},{"name":"approval_archive_checksum","status":"blocked","pass":false,"fail":true},{"name":"release_package_checksum","status":"ready","pass":true,"fail":false},{"name":"approval_freshness","status":"blocked","pass":false,"fail":true},{"name":"reviewer_owner","status":"blocked","pass":false,"fail":true},{"name":"runbook_review","status":"blocked","pass":false,"fail":true},{"name":"read_only_safety","status":"ready","pass":true,"fail":false}],"blockers":["approval archive package id reference is missing","approval archive package path reference is missing","approval archive reference is missing","approval archive checksum is missing","approval archive approved-at timestamp is missing or invalid","approval archive reviewer placeholder must be replaced","approval archive owner placeholder must be replaced","deployment runbook review must be confirmed before cutover approval","deployment runbook review reference is missing"],"safe_posture":{"advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","restore_action_mode":"no_restore_action","publish_action_performed":false},"credentials":"redacted","recommended_operator_next_action":"Do not cut over production; clear approval archive checksum, reviewer/owner, runbook review, scope, freshness, and safety blockers first."},"release_deployment_runbook_review":{"artifact":"release-deployment-runbook-review-evidence-v1","status":"blocked_deployment_runbook_review_prerequisites","release_id":"intellicore-20260514T093955300234Z","generated_at":"2026-05-14T09:39:55.448260Z","package_reference":{"package_id":"intellicore-20260514T093955300234Z","package_path":"/api/operator/release-handoff/package.json","operator_package_id_ref_state":"missing_or_placeholder","operator_package_path_ref_state":"missing_or_placeholder","archive_index_id":"archive-intellicore-20260514T093955300234Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all"}},"artifact_references":{"package_api":"/api/operator/release-handoff/package.json","integrity_manifest_api":"/api/operator/release-handoff/integrity.json","archive_index_api":"/api/operator/release-handoff/archive-index.json","cutover_rollback_checklist_api":"/api/operator/release-handoff/cutover-rollback-checklist.json","cutover_approval_archive_api":"/api/operator/release-handoff/cutover-approval-archive.json","deployment_runbook_review_api":"/api/operator/release-handoff/deployment-runbook-review.json"},"runbook_review":{"review_ref_state":"missing_or_placeholder","checksum_algorithm":"SHA-256","checksum_sha256_state":"missing","expected_checksum_sha256":null,"checksum_verified":false,"reviewed_at_state":"missing_or_invalid","reviewer_state":"missing_or_placeholder","owner_state":"missing_or_placeholder","runbook_version_state":"missing_or_placeholder","values_redacted":true},"checksum_evidence":{"integrity_manifest_artifact":"operator-release-handoff-integrity-manifest-v1","archive_index_artifact":"operator-release-handoff-archive-index-v1","package_core_checksum_sha256":"f15a4177564f5511fc56f73a9fb6580dadd9c9d8934ca99335b7aa1b018920cf","actual_package_core_checksum_sha256":"f15a4177564f5511fc56f73a9fb6580dadd9c9d8934ca99335b7aa1b018920cf","package_checksum_verified":true,"runbook_review_checksum_verified":false},"evidence_freshness":{"status":"stale_or_missing","package_age_minutes":0.002,"review_age_minutes":null,"max_artifact_age_minutes":120,"checked_at":"2026-05-14T09:39:55.448260Z"},"checks":[{"name":"package_scope_reference","status":"blocked","pass":false,"fail":true},{"name":"runbook_review_reference","status":"blocked","pass":false,"fail":true},{"name":"runbook_review_checksum","status":"blocked","pass":false,"fail":true},{"name":"release_package_checksum","status":"ready","pass":true,"fail":false},{"name":"review_freshness","status":"blocked","pass":false,"fail":true},{"name":"reviewer_owner","status":"blocked","pass":false,"fail":true},{"name":"runbook_version","status":"blocked","pass":false,"fail":true},{"name":"read_only_safety","status":"ready","pass":true,"fail":false}],"blockers":["deployment runbook package id reference is missing","deployment runbook package path reference is missing","deployment runbook review reference is missing","deployment runbook review checksum is missing","deployment runbook reviewed-at timestamp is missing or invalid","deployment runbook reviewer placeholder must be replaced","deployment runbook owner placeholder must be replaced","deployment runbook version placeholder must be replaced"],"safe_posture":{"advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","restore_action_mode":"no_restore_action","publish_action_performed":false},"credentials":"redacted","recommended_operator_next_action":"Do not cut over production; clear deployment runbook review checksum, reviewer/owner/version, scope, freshness, and safety blockers first."},"owner_operator_summary":{"artifact":"owner-operator-release-summary-v1","generated_at":"2026-05-14T09:39:55.300234Z","release_id":"intellicore-20260514T093955300234Z","scope":{"customer_ref":"not_provided","site_ref":"all","building_ref":"all","equipment_ref":"all","point_refs":[]},"trend_history":{"status":"blocked_trend_history_release_preflight","freshness":"missing","point_count":0,"total_samples":0,"stale_point_ids":[],"blockers":["explicit_equipment_scope_required","missing_scoped_trend_history_evidence","source_status:not_requested_explicit_equipment_scope_required"]},"alarm_event":{"status":"blocked_alarm_event_release_preflight","freshness":"missing","event_count":0,"active_event_count":0,"critical_or_high_event_count":0,"acknowledged_count":0,"blockers":["explicit_equipment_scope_required","missing_scoped_alarm_event_evidence","source_status:not_requested_explicit_equipment_scope_required"]},"freshness_staleness":{"trend_history":"missing","alarm_event":"missing"},"critical_blockers":[{"category":"trend_history","blocker":"explicit_equipment_scope_required","owner_visible":"true"},{"category":"trend_history","blocker":"missing_scoped_trend_history_evidence","owner_visible":"true"},{"category":"trend_history","blocker":"source_status:not_requested_explicit_equipment_scope_required","owner_visible":"true"},{"category":"alarm_event","blocker":"explicit_equipment_scope_required","owner_visible":"true"},{"category":"alarm_event","blocker":"missing_scoped_alarm_event_evidence","owner_visible":"true"},{"category":"alarm_event","blocker":"source_status:not_requested_explicit_equipment_scope_required","owner_visible":"true"},{"category":"operator_handoff","blocker":"semantic_role:zone_temperature","owner_visible":"true"},{"category":"operator_handoff","blocker":"semantic_role:zone_setpoint","owner_visible":"true"},{"category":"operator_handoff","blocker":"trend_samples","owner_visible":"true"},{"category":"operator_handoff","blocker":"occupancy_signals","owner_visible":"true"},{"category":"operator_handoff","blocker":"weather_observations","owner_visible":"true"},{"category":"operator_handoff","blocker":"occupancy_evidence:explicit_equipment_scope_required","owner_visible":"true"},{"category":"operator_handoff","blocker":"weather_forecast:missing_scoped_weather_forecast","owner_visible":"true"}],"safety_posture":{"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"read_only":true,"alarm_acknowledgement_enabled":false,"bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","publish_action_performed":false},"evidence_references":{"handoff_json_api":"/api/operator/release-handoff","handoff_markdown_api":"/api/operator/release-handoff/report.md","package_preflight_api":"/api/operator/release-handoff/preflight.json","trend_history_evidence_api":"/api/operator/release-handoff/trend-history-evidence.json","alarm_event_evidence_api":"/api/operator/release-handoff/alarm-event-evidence.json","integrity_manifest_api":"/api/operator/release-handoff/integrity.json","archive_index_api":"/api/operator/release-handoff/archive-index.json"},"publish_deploy_readiness":{"ready_for_owner_handoff":false,"trend_history_ready":false,"alarm_event_ready":false,"safety_fail_closed":true,"overall_status":"pass_with_operator_placeholders","deployment_status":"deployable_with_placeholders","release_checklist_status":"pass_with_placeholders","remote_smoke_requires_operator_url_and_auth":true},"recommended_owner_action":"Do not approve owner handoff yet; require operator to clear critical trend/alarm evidence blockers first.","recommended_operator_action":"Refresh scoped trend/alarm evidence, regenerate preflight artifacts, and rerun no-network/no-write verification.","credentials":"redacted","advisory_only":true,"read_only":true,"write_execution_enabled":false,"alarm_acknowledgement_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true}},"markdown_report":"# IntelliCore Operator Release Handoff\n\nRelease ID: intellicore-20260514T093955300234Z\nGenerated at: 2026-05-14T09:39:55.300234Z\nOverall status: pass_with_operator_placeholders\nCredentials: redacted\n\n## Scope\n- Site: all\n- Building: all\n- Equipment: all\n\n## Readiness summary\n- Deployment readiness: deployable_with_placeholders\n- Predictive readiness: blocked_missing_inputs\n- Alarm/event evidence: not_requested_explicit_equipment_scope_required\n- Release checklist: pass_with_placeholders\n- Startup smoke: pass_with_placeholders\n\n## Manual release gates\n- Manual gate status: blocked_manual_operator_gates_pending\n- Deployment target: not_confirmed / unsupported_or_placeholder\n- Storage/backup preflight: blocked_missing_or_unsafe_storage_posture\n- Required artifacts:\n- operator_release_handoff_json: /api/operator/release-handoff\n- operator_release_handoff_markdown: /api/operator/release-handoff/report.md\n- operator_release_handoff_package: /api/operator/release-handoff/package.json\n- integrity_manifest: /api/operator/release-handoff/integrity.json\n- archive_index: /api/operator/release-handoff/archive-index.json\n- evidence_retention_report: /api/operator/release-handoff/evidence-retention.json\n- release_package_preflight: /api/operator/release-handoff/preflight.json\n- release_cutover_rollback_checklist: /api/operator/release-handoff/cutover-rollback-checklist.json\n- deployment_readiness: /api/deployment/readiness\n- digitalocean_storage_backup_preflight: /api/deployment/digitalocean/storage-backup-preflight\n- site_scene_navigation_api: /api/graphics/site-scenes\n- site_scene_navigation_html: /graphics/site-scenes\n- site_scene_graph_metadata_index_json: /api/graphics/site-scene-graph-metadata/index.json\n- site_scene_graph_metadata_index_csv: /api/graphics/site-scene-graph-metadata/index.csv\n- site_scene_graph_metadata_review_json: /api/graphics/site-scene-graph-metadata/review-index.json\n- site_scene_graph_metadata_review_html: /graphics/site-scene-graph-metadata\n- site_scene_release_evidence_map_json: /api/graphics/site-scene-graph-metadata/release-evidence-map.json\n- site_scene_release_evidence_map_csv: /api/graphics/site-scene-graph-metadata/release-evidence-map/export.csv\n- visual_composer_ai_planner_decision_audit_api: /api/graphics/ai/scene-planner/workstation/decision-audits\n- Rollback/backup notes:\n- droplet_volume_snapshots: missing_operator_snapshot_expectation\n- database_backup_export: missing_or_unsafe_backup_path\n- artifact_backup_export: missing_or_unsafe_backup_path\n- rollback_plan: restore PostgreSQL backup and attached-volume artifacts from operator-verified backups/snapshots; no credentials included in bundle\n- Gate items:\n- operator_approval_recorded: pending\n- backup_restore_path_verified: pending\n- rollback_plan_reviewed: pending\n- evidence_archive_persisted: pending\n- write_and_autopilot_disabled_confirmed: pending\n- Manual gate blockers:\n- manual gate pending: operator_approval_recorded\n- manual gate pending: backup_restore_path_verified\n- manual gate pending: rollback_plan_reviewed\n- manual gate pending: evidence_archive_persisted\n- manual gate pending: write_and_autopilot_disabled_confirmed\n- storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture\n\n## DigitalOcean storage/backup preflight\n- Status: blocked_missing_or_unsafe_storage_posture\n- Target: not_confirmed / unsupported_or_placeholder\n- Database target: sqlite_not_production_postgres / not_confirmed\n- Artifact storage target:\n- attached_volume: missing_or_unsafe\n- artifact_storage: outside_attached_volume_boundary\n- drawing_storage: outside_attached_volume_boundary\n- export_storage: outside_attached_volume_boundary\n- Backup export checklist:\n- droplet_snapshots: missing_operator_snapshot_expectation\n- database_backup_export: missing\n- artifact_backup_export: missing\n- Backup retention schedule: database_backup_retention_days=missing_or_invalid; artifact_backup_retention_days=missing_or_invalid\n- Field gateway boundary: blocked_sync_boundary_not_outbound_only\n- Evidence API: /api/deployment/digitalocean/storage-backup-preflight\n- Deployment readiness API: /api/deployment/readiness\n- Blockers: 13\n- DigitalOcean Docker Droplet/VPS target must be explicit\n- Attached DigitalOcean volume path must be configured outside ephemeral storage\n- artifact_storage must live on the attached volume and not public/ephemeral storage\n- drawing_storage must live on the attached volume and not public/ephemeral storage\n- export_storage must live on the attached volume and not public/ephemeral storage\n- PostgreSQL local-on-Droplet or DigitalOcean Managed PostgreSQL posture must be explicit\n- Droplet/volume snapshots must be enabled or explicitly scheduled before production\n- database_backup_export path must be configured on the attached volume\n- artifact_backup_export path must be configured on the attached volume\n- Database backup retention days must be a positive integer\n- Artifact backup retention days must be a positive integer\n- Field gateway buffer path and outbound-only sync boundary must be explicit\n- Credential values must stay out of git and public object storage\n- Credentials: redacted\n\n## DigitalOcean restore-drill preflight\n- Status: blocked_restore_drill_not_verified\n- Target: not_confirmed / unsupported_or_placeholder\n- Restore drill target: missing\n- Restore drill evidence: database=missing; artifacts=missing; runbook=missing\n- Restore objectives: RTO None min / RPO None min\n- Evidence API: /api/deployment/digitalocean/restore-drill-preflight\n- Blockers: 19\n- DigitalOcean Docker Droplet/VPS target must be explicit\n- Attached DigitalOcean volume path must be configured before restore drill evidence can be trusted\n- Database restore drill last-run timestamp must be recorded\n- Restore drill evidence is stale or timestamp is invalid\n- Restore drill release package id is missing, invalid, or cross-scope\n- Restore drill build id must be configured\n- Restore drill operator approval reference must be archived before production cutover\n- Restore drill operator approval actor must be recorded\n- Restore drill operator approval timestamp must be valid and no older than the restore drill\n- Database restore drill evidence path must be stored on the attached volume\n- Artifact restore drill evidence path must be stored on the attached volume\n- Rollback runbook path must be stored on the attached volume\n- Database backup export evidence path must be stored on the attached volume for restore drill readiness\n- Artifact backup export evidence path must be stored on the attached volume for restore drill readiness\n- Database backup retention days must be a positive integer for restore drill readiness\n- Artifact backup retention days must be a positive integer for restore drill readiness\n- Restore drill target must be isolated staging/sandbox, not production\n- Restore drill RTO minutes must be a positive integer\n- Restore drill RPO minutes must be a positive integer\n- Credentials: redacted\n\n## Release cutover/rollback checklist\n- Status: blocked_cutover_rollback_prerequisites\n- Package: intellicore-20260514T093955300234Z at /api/operator/release-handoff/package.json\n- Restore evidence state: blocked_restore_drill_not_verified\n- Backup prerequisites: blocked_missing_or_unsafe_storage_posture\n- Rollback owner/action: owner=placeholder_or_missing; action=placeholder_or_missing\n- RTO/RPO posture: missing_or_invalid RTO=None RPO=None\n- Safety: read_only=true write_execution_enabled=false autopilot_execution_enabled=false physical_execution_blocked=true\n- Checks:\n- package_reference: status=ready pass=true fail=false\n- explicit_scope: status=blocked pass=false fail=true\n- restore_drill_evidence: status=blocked pass=false fail=true\n- backup_prerequisites: status=blocked pass=false fail=true\n- manual_approval_gates: status=blocked pass=false fail=true\n- rollback_owner_action: status=blocked pass=false fail=true\n- read_only_safety: status=ready pass=true fail=false\n- Cutover/rollback blockers:\n- cutover scope site_ref must be explicit before production release\n- cutover scope building_ref must be explicit before production release\n- cutover scope equipment_ref must be explicit before production release\n- restore-drill evidence not ready: blocked_restore_drill_not_verified\n- restore-drill last-run evidence is missing\n- restore-drill target must be isolated staging/sandbox\n- restore-drill database_restore_evidence evidence must be on attached volume\n- restore-drill artifact_restore_evidence evidence must be on attached volume\n- restore-drill rollback_runbook evidence must be on attached volume\n- RTO minutes must be recorded as a positive integer\n- RPO minutes must be recorded as a positive integer\n- storage/backup prerequisites not ready: blocked_missing_or_unsafe_storage_posture\n- Droplet/volume snapshot prerequisite is missing\n- database_backup_export prerequisite must be configured on attached volume\n- artifact_backup_export prerequisite must be configured on attached volume\n- rollback owner placeholder must be replaced before cutover\n- rollback action/reference placeholder must be replaced before cutover\n- manual gate pending: operator_approval_recorded\n- manual gate pending: backup_restore_path_verified\n- manual gate pending: rollback_plan_reviewed\n- manual gate pending: evidence_archive_persisted\n- manual gate pending: write_and_autopilot_disabled_confirmed\n- storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture\n- Recommended operator action: Resolve cutover/rollback blockers, rerun the handoff package, and do not cut over production until this checklist is ready.\n- Credentials: redacted\n\n## Cutover approval archive evidence\n- Status: blocked_cutover_approval_archive_prerequisites\n- Package: intellicore-20260514T093955300234Z at /api/operator/release-handoff/package.json\n- Approval archive: ref=missing_or_placeholder checksum_verified=false\n- Reviewer/owner: reviewer=missing_or_placeholder owner=missing_or_placeholder\n- Runbook review: state=missing_or_unconfirmed ref=missing_or_placeholder\n- Freshness: stale_or_missing max_age_minutes=120\n- Safety: read_only=true write_execution_enabled=false autopilot_execution_enabled=false physical_execution_blocked=true\n- Checks:\n- package_scope_reference: status=blocked pass=false fail=true\n- approval_archive_reference: status=blocked pass=false fail=true\n- approval_archive_checksum: status=blocked pass=false fail=true\n- release_package_checksum: status=ready pass=true fail=false\n- approval_freshness: status=blocked pass=false fail=true\n- reviewer_owner: status=blocked pass=false fail=true\n- runbook_review: status=blocked pass=false fail=true\n- read_only_safety: status=ready pass=true fail=false\n- Cutover approval archive blockers:\n- approval archive package id reference is missing\n- approval archive package path reference is missing\n- approval archive reference is missing\n- approval archive checksum is missing\n- approval archive approved-at timestamp is missing or invalid\n- approval archive reviewer placeholder must be replaced\n- approval archive owner placeholder must be replaced\n- deployment runbook review must be confirmed before cutover approval\n- deployment runbook review reference is missing\n- Recommended operator action: Do not cut over production; clear approval archive checksum, reviewer/owner, runbook review, scope, freshness, and safety blockers first.\n- Credentials: redacted\n\n## Deployment runbook review evidence\n- Status: blocked_deployment_runbook_review_prerequisites\n- Package: intellicore-20260514T093955300234Z at /api/operator/release-handoff/package.json\n- Runbook review: ref=missing_or_placeholder checksum_verified=false runbook_review_checksum_verified=false\n- Reviewer/owner/version: reviewer=missing_or_placeholder owner=missing_or_placeholder version=missing_or_placeholder\n- Freshness: stale_or_missing max_age_minutes=120\n- Safety: read_only=true write_execution_enabled=false autopilot_execution_enabled=false physical_execution_blocked=true\n- Checks:\n- package_scope_reference: status=blocked pass=false fail=true\n- runbook_review_reference: status=blocked pass=false fail=true\n- runbook_review_checksum: status=blocked pass=false fail=true\n- release_package_checksum: status=ready pass=true fail=false\n- review_freshness: status=blocked pass=false fail=true\n- reviewer_owner: status=blocked pass=false fail=true\n- runbook_version: status=blocked pass=false fail=true\n- read_only_safety: status=ready pass=true fail=false\n- Deployment runbook review blockers:\n- deployment runbook package id reference is missing\n- deployment runbook package path reference is missing\n- deployment runbook review reference is missing\n- deployment runbook review checksum is missing\n- deployment runbook reviewed-at timestamp is missing or invalid\n- deployment runbook reviewer placeholder must be replaced\n- deployment runbook owner placeholder must be replaced\n- deployment runbook version placeholder must be replaced\n- Recommended operator action: Do not cut over production; clear deployment runbook review checksum, reviewer/owner/version, scope, freshness, and safety blockers first.\n- Credentials: redacted\n\n## Publish-smoke and evidence retention\n- Publish/evidence status: blocked_publish_smoke_evidence_retention\n- Pass: false\n- Fail: true\n- Fail closed: true\n- Checks:\n- publish_smoke: status=pass_with_placeholders pass=false fail=true blockers=40\n- evidence_retention: status=fresh_with_operator_placeholders pass=false fail=true blockers=39\n- manual_release_gates: status=blocked_manual_operator_gates_pending pass=false fail=true blockers=6\n- trend_history_evidence: status=blocked_trend_history_release_preflight pass=false fail=true blockers=3\n- alarm_event_evidence: status=blocked_alarm_event_release_preflight pass=false fail=true blockers=3\n- weather_forecast_evidence: status=blocked_weather_forecast_release_preflight pass=false fail=true blockers=4\n- safe_posture: status=fail_closed pass=true fail=false blockers=0\n- Publish/evidence blockers:\n- publish_smoke: semantic_role:zone_temperature\n- publish_smoke: semantic_role:zone_setpoint\n- publish_smoke: trend_samples\n- publish_smoke: occupancy_signals\n- publish_smoke: weather_observations\n- publish_smoke: occupancy_evidence:explicit_equipment_scope_required\n- publish_smoke: weather_forecast:missing_scoped_weather_forecast\n- publish_smoke: explicit_equipment_scope_required\n- publish_smoke: visual composer explicit equipment scope required\n- publish_smoke: missing Visual Composer AI planner decision audit evidence\n- publish_smoke: DigitalOcean Docker Droplet/VPS target must be explicit\n- publish_smoke: Attached DigitalOcean volume path must be configured before restore drill evidence can be trusted\n- publish_smoke: Database restore drill last-run timestamp must be recorded\n- publish_smoke: Restore drill evidence is stale or timestamp is invalid\n- publish_smoke: Restore drill release package id is missing, invalid, or cross-scope\n- publish_smoke: Restore drill build id must be configured\n- publish_smoke: Restore drill operator approval reference must be archived before production cutover\n- publish_smoke: Restore drill operator approval actor must be recorded\n- publish_smoke: Restore drill operator approval timestamp must be valid and no older than the restore drill\n- publish_smoke: Database restore drill evidence path must be stored on the attached volume\n- publish_smoke: Artifact restore drill evidence path must be stored on the attached volume\n- publish_smoke: Rollback runbook path must be stored on the attached volume\n- publish_smoke: Database backup export evidence path must be stored on the attached volume for restore drill readiness\n- publish_smoke: Artifact backup export evidence path must be stored on the attached volume for restore drill readiness\n- publish_smoke: Database backup retention days must be a positive integer for restore drill readiness\n- publish_smoke: Artifact backup retention days must be a positive integer for restore drill readiness\n- publish_smoke: Restore drill target must be isolated staging/sandbox, not production\n- publish_smoke: Restore drill RTO minutes must be a positive integer\n- publish_smoke: Restore drill RPO minutes must be a positive integer\n- publish_smoke: operator must set target BACnet/IP range before live discovery\n- publish_smoke: operator must set target Modbus host before live enumeration\n- publish_smoke: operator must provide deployed remote base URL before external readiness smoke\n- publish_smoke: manual gate pending: operator_approval_recorded\n- publish_smoke: manual gate pending: backup_restore_path_verified\n- publish_smoke: manual gate pending: rollback_plan_reviewed\n- publish_smoke: manual gate pending: evidence_archive_persisted\n- publish_smoke: manual gate pending: write_and_autopilot_disabled_confirmed\n- publish_smoke: storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture\n- publish_smoke: operator must provide deployed target URL before external publish smoke\n- publish_smoke: controlled-write readiness packet is missing or not ready for publish smoke\n- evidence_retention: semantic_role:zone_temperature\n- evidence_retention: semantic_role:zone_setpoint\n- evidence_retention: trend_samples\n- evidence_retention: occupancy_signals\n- evidence_retention: weather_observations\n- evidence_retention: occupancy_evidence:explicit_equipment_scope_required\n- evidence_retention: weather_forecast:missing_scoped_weather_forecast\n- evidence_retention: explicit_equipment_scope_required\n- evidence_retention: visual composer explicit equipment scope required\n- evidence_retention: missing Visual Composer AI planner decision audit evidence\n- evidence_retention: DigitalOcean Docker Droplet/VPS target must be explicit\n- evidence_retention: Attached DigitalOcean volume path must be configured before restore drill evidence can be trusted\n- evidence_retention: Database restore drill last-run timestamp must be recorded\n- evidence_retention: Restore drill evidence is stale or timestamp is invalid\n- evidence_retention: Restore drill release package id is missing, invalid, or cross-scope\n- evidence_retention: Restore drill build id must be configured\n- evidence_retention: Restore drill operator approval reference must be archived before production cutover\n- evidence_retention: Restore drill operator approval actor must be recorded\n- evidence_retention: Restore drill operator approval timestamp must be valid and no older than the restore drill\n- evidence_retention: Database restore drill evidence path must be stored on the attached volume\n- evidence_retention: Artifact restore drill evidence path must be stored on the attached volume\n- evidence_retention: Rollback runbook path must be stored on the attached volume\n- evidence_retention: Database backup export evidence path must be stored on the attached volume for restore drill readiness\n- evidence_retention: Artifact backup export evidence path must be stored on the attached volume for restore drill readiness\n- evidence_retention: Database backup retention days must be a positive integer for restore drill readiness\n- evidence_retention: Artifact backup retention days must be a positive integer for restore drill readiness\n- evidence_retention: Restore drill target must be isolated staging/sandbox, not production\n- evidence_retention: Restore drill RTO minutes must be a positive integer\n- evidence_retention: Restore drill RPO minutes must be a positive integer\n- evidence_retention: operator must set target BACnet/IP range before live discovery\n- evidence_retention: operator must set target Modbus host before live enumeration\n- evidence_retention: operator must provide deployed remote base URL before external readiness smoke\n- evidence_retention: manual gate pending: operator_approval_recorded\n- evidence_retention: manual gate pending: backup_restore_path_verified\n- evidence_retention: manual gate pending: rollback_plan_reviewed\n- evidence_retention: manual gate pending: evidence_archive_persisted\n- evidence_retention: manual gate pending: write_and_autopilot_disabled_confirmed\n- evidence_retention: storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture\n- evidence_retention: controlled-write readiness packet is missing or not ready for release evidence retention\n- manual_release_gates: manual gate pending: operator_approval_recorded\n- manual_release_gates: manual gate pending: backup_restore_path_verified\n- manual_release_gates: manual gate pending: rollback_plan_reviewed\n- manual_release_gates: manual gate pending: evidence_archive_persisted\n- manual_release_gates: manual gate pending: write_and_autopilot_disabled_confirmed\n- manual_release_gates: storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture\n- trend_history_evidence: explicit_equipment_scope_required\n- trend_history_evidence: missing_scoped_trend_history_evidence\n- trend_history_evidence: source_status:not_requested_explicit_equipment_scope_required\n- alarm_event_evidence: explicit_equipment_scope_required\n- alarm_event_evidence: missing_scoped_alarm_event_evidence\n- alarm_event_evidence: source_status:not_requested_explicit_equipment_scope_required\n- weather_forecast_evidence: missing_scoped_weather_forecast\n- weather_forecast_evidence: explicit_site_scope_required\n- weather_forecast_evidence: weather_forecast_freshness:missing\n- weather_forecast_evidence: source_status:blocked_weather_forecast_not_ready\n\n## Visual Composer operator-review readiness\n- Visual Composer status: blocked_visual_composer_operator_review_not_ready\n- Pass: false\n- Fail: true\n- Fail closed: true\n- Current evidence cards: 0\n- Blocked evidence cards: 0\n- binding candidates: 0\n- runtime graphics: 0\n- Checks:\n- binding_candidates: status=blocked pass=false fail=true blockers=1\n- published_runtime_review: status=blocked pass=false fail=true blockers=1\n- safe_posture: status=ready pass=true fail=false blockers=0\n- Visual Composer blockers:\n- visual composer explicit equipment scope required\n\n## Visual runtime gateway readiness\n- Artifact: visual-runtime-gateway-readiness-handoff-v1\n- Runtime slots evaluated: 0\n- Blocked slots: 0\n- Clear slots: 0\n- Gateway exception count: 0\n- Scoped gateway UIDs: none\n- Runtime health API: /api/visual-composer/runtime-health-review\n- Operator drilldowns API: /api/visual-composer/operator-graphics-drilldowns\n- Operator verification preflight: blocked_visual_runtime_gateway_operator_verification\n- Operator verification next action: Resolve visual runtime gateway blockers before release/write-safety handoff; do not use unverified runtime graphics as ready evidence.\n- Operator verification checks:\n- scoped_gateway_evidence_present: status=blocked pass=false fail=true blockers=1\n- gateway_exception_gate_clear: status=blocked pass=false fail=true blockers=1\n- reviewable_slot_drilldowns_present: status=blocked pass=false fail=true blockers=1\n- safe_read_only_posture: status=ready pass=true fail=false blockers=0\n- Operator verification blocked slot refs:\n- none\n- Visual runtime gateway blockers:\n- none\n- Slot drilldowns:\n- none\n- Credentials: redacted\n\n## Visual Composer AI planner decision audit evidence\n- Planner audit status: blocked_ai_planner_decision_audit_evidence\n- Audit count: 0\n- Ready audit count: 0\n- JSON evidence: /api/graphics/ai/scene-planner/workstation/decision-audits\n- CSV export: /api/graphics/ai/scene-planner/workstation/decision-audits/export.csv\n- Planner audit blockers:\n- missing Visual Composer AI planner decision audit evidence\n- Credentials: redacted\n\n## Gateway sync-buffer remediation visibility\n- Artifact: gateway-sync-buffer-remediation-handoff-evidence-v1\n- Source artifact: gateway-sync-buffer-remediation-actions-v1\n- Remediation actions: 0\n- Due pending: 0\n- Failed: 0\n- Expired in-flight: 0\n- Operator review required: false\n- Delivery audit events: 0\n- Blocked transitions: 0\n- Unresolved audit conditions: 0\n- Payloads redacted: true\n- JSON evidence: /api/gateway/sync-buffer/remediation-actions\n- CSV export: /api/gateway/sync-buffer/remediation-actions/export.csv\n- Delivery audit API template: /api/gateway/sync-buffer/events/{event_uid}/delivery-audit\n- Action counts:\n- none\n- Gateway sync-buffer blockers:\n- none\n- Recent delivery audit evidence:\n- none\n\n## Owner/operator summary\n- Trend-history status: blocked_trend_history_release_preflight\n- Trend-history freshness: missing\n- Trend-history points: 0\n- Trend-history samples: 0\n- Alarm/event status: blocked_alarm_event_release_preflight\n- Alarm/event freshness: missing\n- Alarm/event count: 0\n- Weather forecast status: unknown\n- Weather forecast freshness: unknown\n- Weather forecast count: 0\n- Critical blockers: 13\n- Publish/deploy readiness: false\n- Recommended owner action: Do not approve owner handoff yet; require operator to clear critical trend/alarm evidence blockers first.\n- Recommended operator action: Refresh scoped trend/alarm evidence, regenerate preflight artifacts, and rerun no-network/no-write verification.\n- Alarm acknowledgement enabled: false\n- Owner/operator summary is redacted and read-only.\n\n## Advisory safety posture\n- Advisory only: true\n- Write execution enabled: false\n- Autopilot execution enabled: false\n- Physical execution blocked: true\n- No physical BAS/autopilot action is available from this handoff bundle.\n\n## Non-code blockers\n- operator must set target BACnet/IP range before live discovery\n- operator must set target Modbus host before live enumeration\n- operator must provide deployed remote base URL before external readiness smoke\n\n## Predictive blockers\n- semantic_role:zone_temperature\n- semantic_role:zone_setpoint\n- trend_samples\n- occupancy_signals\n- weather_observations\n- occupancy_evidence:explicit_equipment_scope_required\n- weather_forecast:missing_scoped_weather_forecast\n\n## Alarm/event blockers\n- explicit_equipment_scope_required\n\n## Verification commands\n- python scripts/intellicore_startup_smoke.py --json\n- python scripts/intellicore_predictive_readiness.py --json\n- python scripts/intellicore_predictive_readiness.py --markdown\n- python scripts/intellicore_release_checklist.py --json\n- python scripts/intellicore_operator_handoff_bundle.py --json\n- python scripts/intellicore_operator_handoff_bundle.py --archive-index\n- python scripts/intellicore_operator_handoff_bundle.py --retention-report\n- python scripts/intellicore_operator_handoff_bundle.py --local-url-smoke\n- python scripts/intellicore_operator_handoff_bundle.py --cutover-rollback-checklist\n- python scripts/intellicore_operator_handoff_bundle.py --cutover-approval-archive\n- python scripts/intellicore_operator_handoff_bundle.py --deployment-runbook-review\n- python scripts/intellicore_deployment_publish_smoke.py --json --target-url https://replace-with-deployment-url\n- .venv/bin/python -m pytest tests/test_operator_release_handoff.py -q\n- curl -fsS http://127.0.0.1:8000/api/operator/release-handoff/integrity.json\n- .venv/bin/python -m pytest -q\n- git diff --check\n\n## Artifact references\n- json_api: /api/operator/release-handoff\n- markdown_api: /api/operator/release-handoff/report.md\n- html_report_api: /api/operator/release-handoff/report.html\n- package_download_api: /api/operator/release-handoff/package.json\n- integrity_manifest_api: /api/operator/release-handoff/integrity.json\n- archive_index_api: /api/operator/release-handoff/archive-index.json\n- retention_report_api: /api/operator/release-handoff/evidence-retention.json\n- local_url_smoke_api: /api/operator/release-handoff/local-url-smoke.json\n- publish_smoke_api: /api/operator/release-handoff/publish-smoke.json\n- package_preflight_api: /api/operator/release-handoff/preflight.json\n- package_preflight_csv: /api/operator/release-handoff/preflight/export.csv\n- package_preflight_html_review: /operator-release-handoff/preflight\n- artifact_drilldown_api_template: /api/operator/release-handoff/artifacts/{artifact_id}.json\n- artifact_drilldown_html_template: /operator-release-handoff/artifacts/{artifact_id}\n- trend_history_evidence_api: /api/operator/release-handoff/trend-history-evidence.json\n- alarm_event_evidence_api: /api/operator/release-handoff/alarm-event-evidence.json\n- weather_forecast_evidence_api: /api/operator/release-handoff/weather-forecast-evidence.json\n- predictive_evidence_matrix_api: /api/operator/release-handoff/evidence-matrix.json\n- predictive_evidence_matrix_csv: /api/operator/release-handoff/evidence-matrix.csv\n- controlled_write_readiness_summary_api: /api/operator/release-handoff/controlled-write-readiness-summary.json\n- visual_composer_binding_review_api: /api/visual-composer/binding-candidates\n- visual_composer_runtime_gate_api: /api/visual-composer/runtime-binding-use-gate\n- visual_composer_runtime_health_review_api: /api/visual-composer/runtime-health-review\n- visual_composer_operator_graphics_drilldowns_api: /api/visual-composer/operator-graphics-drilldowns\n- visual_composer_runtime_gateway_handoff: /api/operator/release-handoff\n- visual_composer_blocker_rollup: /api/operator/release-handoff/visual-composer-blocker-rollup.json\n- visual_composer_blocker_rollup_api: /api/operator/release-handoff/visual-composer-blocker-rollup.json\n- visual_composer_blocker_rollup_csv: /api/operator/release-handoff/visual-composer-blocker-rollup/export.csv\n- visual_composer_blocker_rollup_markdown: /api/operator/release-handoff/visual-composer-blocker-rollup/report.md\n- visual_composer_blocker_rollup_html: /operator-release-handoff/visual-composer-blocker-rollup\n- site_scene_navigation_api: /api/graphics/site-scenes\n- site_scene_navigation_html: /graphics/site-scenes\n- site_scene_graph_metadata_index_json: /api/graphics/site-scene-graph-metadata/index.json\n- site_scene_graph_metadata_index_csv: /api/graphics/site-scene-graph-metadata/index.csv\n- site_scene_graph_metadata_review_json: /api/graphics/site-scene-graph-metadata/review-index.json\n- site_scene_graph_metadata_review_html: /graphics/site-scene-graph-metadata\n- site_scene_release_evidence_map_json: /api/graphics/site-scene-graph-metadata/release-evidence-map.json\n- site_scene_release_evidence_map_csv: /api/graphics/site-scene-graph-metadata/release-evidence-map/export.csv\n- visual_composer_ai_planner_decision_audit_api: /api/graphics/ai/scene-planner/workstation/decision-audits\n- site_scene_graph_metadata_api_template: /api/graphics/site-scenes/{scene_uid}/scene-graph-metadata\n- site_scene_graph_metadata_csv_template: /api/graphics/site-scenes/{scene_uid}/scene-graph-metadata/export.csv\n- gateway_sync_buffer_remediation_api: /api/gateway/sync-buffer/remediation-actions\n- gateway_sync_buffer_remediation_csv: /api/gateway/sync-buffer/remediation-actions/export.csv\n- gateway_sync_buffer_status_api: /api/gateway/sync-buffer/status\n- gateway_sync_buffer_delivery_audit_api_template: /api/gateway/sync-buffer/events/{event_uid}/delivery-audit\n- html_review: /operator-release-handoff\n- cli: scripts/intellicore_operator_handoff_bundle.py\n- release_checklist_cli: scripts/intellicore_release_checklist.py\n- predictive_markdown_api: /api/predictive/readiness/report.md\n- deployment_readiness_api: /api/deployment/readiness\n- digitalocean_storage_backup_preflight_api: /api/deployment/digitalocean/storage-backup-preflight\n- digitalocean_restore_drill_preflight_api: /api/deployment/digitalocean/restore-drill-preflight\n- cutover_rollback_checklist_api: /api/operator/release-handoff/cutover-rollback-checklist.json\n- cutover_approval_archive_api: /api/operator/release-handoff/cutover-approval-archive.json\n- deployment_runbook_review_api: /api/operator/release-handoff/deployment-runbook-review.json\n- evidence_history_api: /api/operator/release-handoff/evidence-history.json\n- evidence_review_index_api: /api/operator/release-handoff/evidence-review-index.json\n- evidence_review_index_html: /operator-release-handoff/evidence-review-index\n- demand_limiting_evidence_bundle_refs: []\n\n## Recommended next action\nResolve listed operator placeholders/non-code blockers, rerun verification commands, then hand off read-only deployment artifacts.\n\nSafety note: this handoff bundle is redacted, read-only, advisory-only, and does not include raw environment values, secrets, live BAS writes, autopilot action, or irreversible deployment action.\n","html_report":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>IntelliCore Operator Release Handoff</title>\n<style>\nbody { font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; margin: 2rem; line-height: 1.45; color: #172033; background: #f7f9fc; }\nmain { max-width: 1040px; margin: auto; background: white; padding: 2rem; border: 1px solid #d8e1ef; border-radius: 16px; }\nsection { margin-top: 1.5rem; padding-top: 1rem; border-top: 1px solid #e5edf7; }\ndl { display: grid; grid-template-columns: minmax(14rem, 22rem) 1fr; gap: .45rem 1rem; }\ndt { font-weight: 700; color: #28364f; }\ndd { margin: 0; }\n.badge { display: inline-block; padding: .25rem .55rem; border-radius: 999px; background: #e8f0fe; font-weight: 700; }\n.warning { background: #fff7e6; border-left: 4px solid #d9822b; padding: .75rem 1rem; }\n.safe { background: #edf7ed; border-left: 4px solid #2e7d32; padding: .75rem 1rem; }\na { color: #0b57d0; }\n</style>\n</head>\n<body>\n<main>\n<p class=\"badge\">operator-facing html release handoff report v1</p>\n<h1>IntelliCore Operator Release Handoff</h1>\n<p>credentials: redacted</p>\n<dl>\n<dt>Artifact</dt><dd>operator-release-handoff-v1</dd><dt>Release ID</dt><dd>intellicore-20260514T093955300234Z</dd><dt>Generated at</dt><dd>2026-05-14T09:39:55.300234Z</dd><dt>Overall status</dt><dd>pass_with_operator_placeholders</dd>\n</dl>\n<section>\n<h2>Scope</h2>\n<dl>\n<dt>Customer</dt><dd>not_provided</dd><dt>Site</dt><dd>all</dd><dt>Building</dt><dd>all</dd><dt>Equipment</dt><dd>all</dd><dt>Point scope</dt><dd>none</dd>\n</dl>\n</section>\n<section>\n<h2>Owner/operator release summary</h2>\n<dl>\n<dt>Trend-history status</dt><dd>blocked_trend_history_release_preflight</dd><dt>Trend-history freshness</dt><dd>missing</dd><dt>Trend-history points</dt><dd>0</dd><dt>Trend-history samples</dt><dd>0</dd><dt>Alarm/event status</dt><dd>blocked_alarm_event_release_preflight</dd><dt>Alarm/event freshness</dt><dd>missing</dd><dt>Alarm/event count</dt><dd>0</dd><dt>Critical/high alarm events</dt><dd>0</dd><dt>Weather forecast status</dt><dd>unknown</dd><dt>Weather forecast freshness</dt><dd>unknown</dd><dt>Weather forecast count</dt><dd>0</dd><dt>Freshness / staleness</dt><dd>trend_history=missing; alarm_event=missing; weather_forecast=unknown</dd><dt>Publish/deploy readiness</dt><dd>false</dd><dt>Recommended owner action</dt><dd>Do not approve owner handoff yet; require operator to clear critical trend/alarm evidence blockers first.</dd><dt>Recommended operator action</dt><dd>Refresh scoped trend/alarm evidence, regenerate preflight artifacts, and rerun no-network/no-write verification.</dd>\n</dl>\n</section>\n<section>\n<h2>Critical blockers</h2>\n<ul><li>trend_history: explicit_equipment_scope_required</li><li>trend_history: missing_scoped_trend_history_evidence</li><li>trend_history: source_status:not_requested_explicit_equipment_scope_required</li><li>alarm_event: explicit_equipment_scope_required</li><li>alarm_event: missing_scoped_alarm_event_evidence</li><li>alarm_event: source_status:not_requested_explicit_equipment_scope_required</li><li>operator_handoff: semantic_role:zone_temperature</li><li>operator_handoff: semantic_role:zone_setpoint</li><li>operator_handoff: trend_samples</li><li>operator_handoff: occupancy_signals</li><li>operator_handoff: weather_observations</li><li>operator_handoff: occupancy_evidence:explicit_equipment_scope_required</li><li>operator_handoff: weather_forecast:missing_scoped_weather_forecast</li></ul>\n</section>\n<section>\n<h2>DigitalOcean storage/backup preflight</h2>\n<dl>\n<dt>Status</dt><dd>blocked_missing_or_unsafe_storage_posture</dd><dt>Target</dt><dd>not_confirmed / unsupported_or_placeholder</dd><dt>Database target</dt><dd>sqlite_not_production_postgres / not_confirmed</dd><dt>Artifact storage target</dt><dd>attached_volume=missing_or_unsafe; artifact_storage=outside_attached_volume_boundary; drawing_storage=outside_attached_volume_boundary; export_storage=outside_attached_volume_boundary</dd><dt>Backup export checklist</dt><dd>droplet_snapshots=missing_operator_snapshot_expectation; database_backup_export=missing; artifact_backup_export=missing</dd><dt>Field gateway boundary</dt><dd>blocked_sync_boundary_not_outbound_only</dd><dt>Evidence API</dt><dd>/api/deployment/digitalocean/storage-backup-preflight</dd><dt>Deployment readiness API</dt><dd>/api/deployment/readiness</dd><dt>Blockers</dt><dd>13</dd><dt>Credentials</dt><dd>redacted</dd>\n</dl>\n<ul><li>DigitalOcean Docker Droplet/VPS target must be explicit</li><li>Attached DigitalOcean volume path must be configured outside ephemeral storage</li><li>artifact_storage must live on the attached volume and not public/ephemeral storage</li><li>drawing_storage must live on the attached volume and not public/ephemeral storage</li><li>export_storage must live on the attached volume and not public/ephemeral storage</li><li>PostgreSQL local-on-Droplet or DigitalOcean Managed PostgreSQL posture must be explicit</li><li>Droplet/volume snapshots must be enabled or explicitly scheduled before production</li><li>database_backup_export path must be configured on the attached volume</li><li>artifact_backup_export path must be configured on the attached volume</li><li>Database backup retention days must be a positive integer</li><li>Artifact backup retention days must be a positive integer</li><li>Field gateway buffer path and outbound-only sync boundary must be explicit</li><li>Credential values must stay out of git and public object storage</li></ul>\n</section>\n<section>\n<h2>Advisory-only / write-disabled safety posture</h2>\n<div class=\"safe\">Read-only/advisory-only. BAS writes disabled. No live BAS scans, no alarm acknowledgements, no autopilot, no remote probes, and no deploy action are performed by this report.</div>\n<dl>\n<dt>advisory_only</dt><dd>true</dd><dt>read_only</dt><dd>true</dd><dt>write_execution_enabled</dt><dd>false</dd><dt>alarm_acknowledgement_enabled</dt><dd>false</dd><dt>autopilot_execution_enabled</dt><dd>false</dd><dt>physical_execution_blocked</dt><dd>true</dd><dt>network_action_mode</dt><dd>no_network_dry_run</dd><dt>deploy_action_mode</dt><dd>no_deploy_action</dd>\n</dl>\n<p>advisory_only=true; read_only=true; write_execution_enabled=false; alarm_acknowledgement_enabled=false; autopilot_execution_enabled=false; physical_execution_blocked=true</p>\n</section>\n<section>\n<h2>Evidence references</h2>\n<ul><li><a href=\"/api/operator/release-handoff\">JSON handoff</a></li><li><a href=\"/api/operator/release-handoff/report.md\">Markdown handoff</a></li><li><a href=\"/api/operator/release-handoff/report.html\">HTML handoff</a></li><li><a href=\"/api/operator/release-handoff/package.json\">Download packaged evidence artifact</a></li><li><a href=\"/api/operator/release-handoff/integrity.json\">SHA-256 integrity manifest</a></li><li><a href=\"/api/operator/release-handoff/archive-index.json\">persisted archive index metadata</a></li><li><a href=\"/api/operator/release-handoff/preflight.json\">release package preflight gate</a></li><li><a href=\"/api/operator/release-handoff/preflight/export.csv\">release package preflight CSV checklist</a></li><li><a href=\"/operator-release-handoff/preflight\">release package preflight HTML review</a></li><li><a href=\"/api/operator/release-handoff/trend-history-evidence.json\">trend-history release evidence gate</a></li><li><a href=\"/api/operator/release-handoff/alarm-event-evidence.json\">alarm/event release evidence gate</a></li><li><a href=\"/api/operator/release-handoff/weather-forecast-evidence.json\">weather forecast release evidence gate</a></li><li><a href=\"/api/operator/release-handoff/evidence-matrix.json\">Predictive Evidence Matrix JSON</a></li><li><a href=\"/api/operator/release-handoff/evidence-matrix.csv\">Predictive Evidence Matrix CSV</a></li><li><a href=\"/api/operator/release-handoff/evidence-retention.json\">release evidence retention/freshness report</a></li><li><a href=\"/api/operator/release-handoff/local-url-smoke.json\">local URL-smoke readiness packet</a></li><li><a href=\"/api/operator/release-handoff/publish-smoke.json\">deployment publish smoke report</a></li><li><a href=\"/api/operator/release-handoff/cutover-approval-archive.json\">cutover approval archive evidence</a></li><li><a href=\"/api/operator/release-handoff/deployment-runbook-review.json\">deployment runbook review evidence</a></li><li><a href=\"/api/gateway/sync-buffer/remediation-actions\">gateway sync-buffer remediation actions</a></li><li><a href=\"/api/gateway/sync-buffer/events/{event_uid}/delivery-audit\">gateway sync-buffer delivery audit template</a></li></ul>\n</section>\n<section>\n<h2>All blockers</h2>\n<ul><li>semantic_role:zone_temperature</li><li>semantic_role:zone_setpoint</li><li>trend_samples</li><li>occupancy_signals</li><li>weather_observations</li><li>occupancy_evidence:explicit_equipment_scope_required</li><li>weather_forecast:missing_scoped_weather_forecast</li><li>explicit_equipment_scope_required</li><li>visual composer explicit equipment scope required</li><li>missing Visual Composer AI planner decision audit evidence</li><li>DigitalOcean Docker Droplet/VPS target must be explicit</li><li>Attached DigitalOcean volume path must be configured before restore drill evidence can be trusted</li><li>Database restore drill last-run timestamp must be recorded</li><li>Restore drill evidence is stale or timestamp is invalid</li><li>Restore drill release package id is missing, invalid, or cross-scope</li><li>Restore drill build id must be configured</li><li>Restore drill operator approval reference must be archived before production cutover</li><li>Restore drill operator approval actor must be recorded</li><li>Restore drill operator approval timestamp must be valid and no older than the restore drill</li><li>Database restore drill evidence path must be stored on the attached volume</li><li>Artifact restore drill evidence path must be stored on the attached volume</li><li>Rollback runbook path must be stored on the attached volume</li><li>Database backup export evidence path must be stored on the attached volume for restore drill readiness</li><li>Artifact backup export evidence path must be stored on the attached volume for restore drill readiness</li><li>Database backup retention days must be a positive integer for restore drill readiness</li><li>Artifact backup retention days must be a positive integer for restore drill readiness</li><li>Restore drill target must be isolated staging/sandbox, not production</li><li>Restore drill RTO minutes must be a positive integer</li><li>Restore drill RPO minutes must be a positive integer</li><li>operator must set target BACnet/IP range before live discovery</li><li>operator must set target Modbus host before live enumeration</li><li>operator must provide deployed remote base URL before external readiness smoke</li><li>manual gate pending: operator_approval_recorded</li><li>manual gate pending: backup_restore_path_verified</li><li>manual gate pending: rollback_plan_reviewed</li><li>manual gate pending: evidence_archive_persisted</li><li>manual gate pending: write_and_autopilot_disabled_confirmed</li><li>storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture</li></ul>\n</section>\n<section>\n<h2>Recommended next action</h2>\n<p class=\"warning\">Resolve listed operator placeholders/non-code blockers, rerun verification commands, then hand off read-only deployment artifacts.</p>\n</section>\n</main>\n</body>\n</html>\n","safety_note":"Packaged evidence is redacted, read-only, advisory-only, and keeps BAS writes disabled.","integrity_manifest":{"artifact":"operator-release-handoff-integrity-manifest-v1","release_id":"intellicore-20260514T093955300234Z","generated_at":"2026-05-14T09:39:55.300234Z","algorithm":"SHA-256","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all"},"safe_posture":{"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"credentials":"redacted","blocker_summary":{"total":38,"non_code":3,"predictive":7,"trend_history":3,"alarm_event":3,"weather_forecast":4,"weather_forecast_evidence":4,"controlled_write_readiness":1},"trend_history_evidence":{"artifact":"release-trend-history-preflight-evidence-v1","status":"blocked_trend_history_release_preflight","source_artifact":"predictive-readiness-trend-history-evidence-v1","source_status":"not_requested_explicit_equipment_scope_required","generated_at":"2026-05-14T09:39:55.300234Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all","site_id":null,"building_id":null,"equipment_id":null},"sample_summary":{"evidence_count":0,"point_count":0,"total_samples":0,"minimum_sample_count":0,"maximum_sample_count":0,"stale_point_ids":[]},"point_rollups":[],"blockers":["explicit_equipment_scope_required","missing_scoped_trend_history_evidence","source_status:not_requested_explicit_equipment_scope_required"],"recommended_operator_next_action":"Fix scoped trend-history freshness/sample/scope blockers before release package handoff or predictive readiness claims.","advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","credentials":"redacted"},"alarm_event_evidence":{"artifact":"release-alarm-event-preflight-evidence-v1","status":"blocked_alarm_event_release_preflight","source_artifact":"alarm-event-readiness-evidence-v1","source_status":"not_requested_explicit_equipment_scope_required","generated_at":"2026-05-14T09:39:55.300234Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all","site_id":null,"building_id":null,"equipment_id":null},"summary":{"event_count":0,"active_event_count":0,"critical_or_high_event_count":0,"acknowledged_count":0},"freshness":{"status":"missing","max_age_minutes":240,"latest_event_age_minutes":null,"latest_event_timestamp":null},"events":[],"blockers":["explicit_equipment_scope_required","missing_scoped_alarm_event_evidence","source_status:not_requested_explicit_equipment_scope_required"],"recommended_operator_next_action":"Fix scoped alarm/event freshness/scope/read-only blockers before release package handoff claims.","advisory_only":true,"read_only":true,"write_execution_enabled":false,"alarm_acknowledgement_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"alarm_action_mode":"no_alarm_acknowledgement","bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","credentials":"redacted"},"weather_forecast_evidence":{"artifact":"release-weather-forecast-preflight-evidence-v1","status":"blocked_weather_forecast_release_preflight","source_artifact":"weather-forecast-readiness-evidence-v1","source_status":"blocked_weather_forecast_not_ready","generated_at":"2026-05-14T09:39:55.300234Z","scope":{"site_ref":"all","building_ref":"all","site_id":null,"building_id":null},"summary":{"forecast_count":0,"severe_weather_flag_count":0,"source_refs":[]},"freshness":{"status":"missing","max_age_minutes":120,"latest_forecast_age_minutes":null,"latest_forecast_timestamp":null},"forecasts":[],"blockers":["missing_scoped_weather_forecast","explicit_site_scope_required","weather_forecast_freshness:missing","source_status:blocked_weather_forecast_not_ready"],"recommended_operator_next_action":"Import a current scoped weather forecast export or fixture before release package handoff or predictive readiness claims.","advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"weather_provider_action_mode":"no_weather_provider_call","bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","credentials":"redacted"},"controlled_write_readiness_evidence":{"source_key":"controlled_write_readiness","label":"Controlled-write readiness","status":"missing","source_artifact":"predictive-controlled-write-readiness-audit-packet-v1","freshness_status":"unknown","evidence_count":0,"confidence":null,"packet_uid":null,"source_refs":{},"recommended_operator_next_action":"Generate scoped controlled-write readiness packet before release handoff.","blocker_count":1,"blockers":["missing_controlled_write_readiness_packet"],"ok_for_operator_review":false,"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"artifacts":[{"name":"operator_release_handoff_bundle_json","path":"/api/operator/release-handoff","media_type":"application/json","checksum_algorithm":"SHA-256","checksum_sha256":"8e4569a41c226966caf5a3992a37b2a29775bf368b77a52eb6f4d2a68d1711d8","content_encoding":"canonical-json-sort-keys-no-whitespace"},{"name":"operator_release_handoff_markdown_report","path":"/api/operator/release-handoff/report.md","media_type":"text/markdown","checksum_algorithm":"SHA-256","checksum_sha256":"70e327873ff5965ac686eee1e15465b55b1cc15d3e6a5ad55968482c88fd42ea","content_encoding":"utf-8-text"},{"name":"operator_release_handoff_html_report","path":"/api/operator/release-handoff/report.html","media_type":"text/html","checksum_algorithm":"SHA-256","checksum_sha256":"1c91d5a6f1d057db365199284cec770a249753536e755097fc11110f61013d31","content_encoding":"utf-8-html"},{"name":"operator_release_handoff_package_core","path":"/api/operator/release-handoff/package.json","media_type":"application/json","checksum_algorithm":"SHA-256","checksum_sha256":"2d3b9b25deeee3f149291a70013ae0d6561ef399bfcba29f767c15b9b5cbbdef","content_encoding":"canonical-json-sort-keys-no-whitespace excluding integrity_manifest, archive_index, and controlled_write_readiness_release_summary"},{"name":"visual_composer_blocker_rollup_json","path":"/api/operator/release-handoff/visual-composer-blocker-rollup.json","media_type":"application/json","checksum_algorithm":"SHA-256","checksum_sha256":"f859c9a70a3155568f5dc3f6d85c03b48aaa1585adced56b2fbeefaa4ee75869","content_encoding":"canonical-json-sort-keys-no-whitespace"},{"name":"visual_composer_blocker_rollup_csv","path":"/api/operator/release-handoff/visual-composer-blocker-rollup/export.csv","media_type":"text/csv","checksum_algorithm":"SHA-256","checksum_sha256":"e1551cad7ba8380b11a2ce6aac1e9781b9b5bd30efd54aa7275db67fca93b730","content_encoding":"utf-8-csv"},{"name":"visual_composer_blocker_rollup_markdown","path":"/api/operator/release-handoff/visual-composer-blocker-rollup/report.md","media_type":"text/markdown","checksum_algorithm":"SHA-256","checksum_sha256":"880f622d69c68757d234693881cbc233135aa92ef7cd1f7e112356bb8e50bc5d","content_encoding":"utf-8-text"},{"name":"visual_runtime_gateway_operator_preflight_json","path":"/api/operator/release-handoff/visual-runtime-gateway-verification-preflight.json","media_type":"application/json","checksum_algorithm":"SHA-256","checksum_sha256":"cfb6c9d5a3cc042d72ec2f3170c3f375108574621f99e2c76ee6ef9c1de305b0","content_encoding":"canonical-json-sort-keys-no-whitespace"},{"name":"visual_runtime_gateway_operator_preflight_csv","path":"/api/operator/release-handoff/visual-runtime-gateway-verification-preflight/export.csv","media_type":"text/csv","checksum_algorithm":"SHA-256","checksum_sha256":"8a3f8274c77c20fcf08c301973344b665a86d59d6586a3f1a2e5d3921d9a8e05","content_encoding":"utf-8-csv"},{"name":"visual_runtime_gateway_operator_preflight_html","path":"/operator-release-handoff/visual-runtime-gateway-verification-preflight","media_type":"text/html","checksum_algorithm":"SHA-256","checksum_sha256":"7d8884e522b32e15c1e055724c0b9b9376ba974f20b27229b0df022a1e52f800","content_encoding":"utf-8-html"},{"name":"controlled_write_readiness_release_summary","path":"/api/operator/release-handoff/controlled-write-readiness-summary.json","media_type":"application/json","checksum_algorithm":"SHA-256","checksum_sha256":"b51ad3ec03818e4ad6d2101dea12418c4350b6daf82c523690422c196a8e4a6d","content_encoding":"canonical-json-sort-keys-no-whitespace"}],"verification_command":"python - <<'PY'\nimport hashlib,json,pathlib\npkg=json.loads(pathlib.Path('operator-release-handoff-package.json').read_text())\nmanifest=pkg['integrity_manifest']\nbundle=json.dumps(pkg['bundle'],sort_keys=True,separators=(',',':'),ensure_ascii=False).encode()\nmarkdown=pkg['markdown_report'].encode()\nhtml=pkg['html_report'].encode()\ncore={k:v for k,v in pkg.items() if k not in ('integrity_manifest','archive_index','controlled_write_readiness_release_summary')}\ncore_bytes=json.dumps(core,sort_keys=True,separators=(',',':'),ensure_ascii=False).encode()\nfor name,data in [('operator_release_handoff_bundle_json',bundle),('operator_release_handoff_markdown_report',markdown),('operator_release_handoff_html_report',html),('operator_release_handoff_package_core',core_bytes)]:\n    expected=next(a['checksum_sha256'] for a in manifest['artifacts'] if a['name']==name)\n    assert hashlib.sha256(data).hexdigest()==expected, name\nprint('operator release handoff integrity verified')\nPY","recommended_next_action":"Archive the package with this manifest, verify SHA-256 checksums before operator handoff, then resolve listed non-code blockers while keeping BAS writes disabled.","advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"controlled_write_readiness_release_summary":{"artifact":"controlled-write-readiness-release-summary-v1","release_id":"intellicore-20260514T093955300234Z","package_id":"intellicore-20260514T093955300234Z","generated_at":"2026-05-14T09:39:55.470168Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all"},"status":"blocked_controlled_write_readiness_release_summary","ok_for_operator_review":false,"integrity_reference":{"artifact":"operator-release-handoff-integrity-manifest-v1","algorithm":"SHA-256","route":"/api/operator/release-handoff/integrity.json","archive_index_route":"/api/operator/release-handoff/archive-index.json","archive_id":"archive-intellicore-20260514T093955300234Z","package_core_checksum_sha256":"2d3b9b25deeee3f149291a70013ae0d6561ef399bfcba29f767c15b9b5cbbdef","actual_package_core_checksum_sha256":"2d3b9b25deeee3f149291a70013ae0d6561ef399bfcba29f767c15b9b5cbbdef","checksum_verified":true},"readiness_packet":{"packet_uid":null,"source_artifact":"predictive-controlled-write-readiness-audit-packet-v1","source_refs":{},"status":"missing","confidence":null,"blockers":["missing_controlled_write_readiness_packet"],"ok_for_operator_review":false},"freshness_evidence_posture":{"freshness_status":"unknown","evidence_count":0,"source_artifact":"predictive-controlled-write-readiness-audit-packet-v1","checksum_verified":true,"approval_prerequisites_present":false,"global_or_unscoped_readiness_created":false},"redacted_evidence":{"source_refs":{},"blockers":["missing_controlled_write_readiness_packet"],"recommended_operator_next_action":"Generate scoped controlled-write readiness packet before release handoff."},"blockers":["missing_controlled_write_readiness_packet","controlled-write readiness packet is missing or blocked","controlled-write readiness packet UID missing","controlled-write readiness recommendation source reference missing","controlled-write readiness control-plan source references missing","controlled-write readiness write-intent source references missing","controlled-write readiness confidence missing"],"safety_flags":{"advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","publish_action_performed":false},"artifact_references":{"summary_api":"/api/operator/release-handoff/controlled-write-readiness-summary.json","package_api":"/api/operator/release-handoff/package.json","integrity_manifest_api":"/api/operator/release-handoff/integrity.json","archive_index_api":"/api/operator/release-handoff/archive-index.json","evidence_matrix_api":"/api/operator/release-handoff/evidence-matrix.json"},"recommended_operator_next_action":"Do not treat controlled-write readiness as release-ready; regenerate scoped packet/package and clear checksum, scope, freshness, confidence, safety, and approval blockers.","credentials":"redacted","advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true}},"archive_index":{"artifact":"operator-release-handoff-archive-index-v1","archive_id":"archive-intellicore-20260514T093955300234Z","archive_name":"intellicore-operator-release-handoff-intellicore-20260514T093955300234Z","release_id":"intellicore-20260514T093955300234Z","generated_at":"2026-05-14T09:39:55.300234Z","archived_at":"2026-05-14T09:39:55.300234Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all"},"artifact_route":"/api/operator/release-handoff/archive-index.json","package_route":"/api/operator/release-handoff/package.json","integrity_manifest_route":"/api/operator/release-handoff/integrity.json","checksum_manifest_reference":{"artifact":"operator-release-handoff-integrity-manifest-v1","algorithm":"SHA-256","route":"/api/operator/release-handoff/integrity.json","verification_command":"python - <<'PY'\nimport hashlib,json,pathlib\npkg=json.loads(pathlib.Path('operator-release-handoff-package.json').read_text())\nmanifest=pkg['integrity_manifest']\nbundle=json.dumps(pkg['bundle'],sort_keys=True,separators=(',',':'),ensure_ascii=False).encode()\nmarkdown=pkg['markdown_report'].encode()\nhtml=pkg['html_report'].encode()\ncore={k:v for k,v in pkg.items() if k not in ('integrity_manifest','archive_index','controlled_write_readiness_release_summary')}\ncore_bytes=json.dumps(core,sort_keys=True,separators=(',',':'),ensure_ascii=False).encode()\nfor name,data in [('operator_release_handoff_bundle_json',bundle),('operator_release_handoff_markdown_report',markdown),('operator_release_handoff_html_report',html),('operator_release_handoff_package_core',core_bytes)]:\n    expected=next(a['checksum_sha256'] for a in manifest['artifacts'] if a['name']==name)\n    assert hashlib.sha256(data).hexdigest()==expected, name\nprint('operator release handoff integrity verified')\nPY","artifact_checksums":{"operator_release_handoff_bundle_json":{"checksum_algorithm":"SHA-256","checksum_sha256":"8e4569a41c226966caf5a3992a37b2a29775bf368b77a52eb6f4d2a68d1711d8","artifact_route":"/api/operator/release-handoff","media_type":"application/json"},"operator_release_handoff_markdown_report":{"checksum_algorithm":"SHA-256","checksum_sha256":"70e327873ff5965ac686eee1e15465b55b1cc15d3e6a5ad55968482c88fd42ea","artifact_route":"/api/operator/release-handoff/report.md","media_type":"text/markdown"},"operator_release_handoff_html_report":{"checksum_algorithm":"SHA-256","checksum_sha256":"1c91d5a6f1d057db365199284cec770a249753536e755097fc11110f61013d31","artifact_route":"/api/operator/release-handoff/report.html","media_type":"text/html"},"operator_release_handoff_package_core":{"checksum_algorithm":"SHA-256","checksum_sha256":"2d3b9b25deeee3f149291a70013ae0d6561ef399bfcba29f767c15b9b5cbbdef","artifact_route":"/api/operator/release-handoff/package.json","media_type":"application/json"},"visual_composer_blocker_rollup_json":{"checksum_algorithm":"SHA-256","checksum_sha256":"f859c9a70a3155568f5dc3f6d85c03b48aaa1585adced56b2fbeefaa4ee75869","artifact_route":"/api/operator/release-handoff/visual-composer-blocker-rollup.json","media_type":"application/json"},"visual_composer_blocker_rollup_csv":{"checksum_algorithm":"SHA-256","checksum_sha256":"e1551cad7ba8380b11a2ce6aac1e9781b9b5bd30efd54aa7275db67fca93b730","artifact_route":"/api/operator/release-handoff/visual-composer-blocker-rollup/export.csv","media_type":"text/csv"},"visual_composer_blocker_rollup_markdown":{"checksum_algorithm":"SHA-256","checksum_sha256":"880f622d69c68757d234693881cbc233135aa92ef7cd1f7e112356bb8e50bc5d","artifact_route":"/api/operator/release-handoff/visual-composer-blocker-rollup/report.md","media_type":"text/markdown"},"visual_runtime_gateway_operator_preflight_json":{"checksum_algorithm":"SHA-256","checksum_sha256":"cfb6c9d5a3cc042d72ec2f3170c3f375108574621f99e2c76ee6ef9c1de305b0","artifact_route":"/api/operator/release-handoff/visual-runtime-gateway-verification-preflight.json","media_type":"application/json"},"visual_runtime_gateway_operator_preflight_csv":{"checksum_algorithm":"SHA-256","checksum_sha256":"8a3f8274c77c20fcf08c301973344b665a86d59d6586a3f1a2e5d3921d9a8e05","artifact_route":"/api/operator/release-handoff/visual-runtime-gateway-verification-preflight/export.csv","media_type":"text/csv"},"visual_runtime_gateway_operator_preflight_html":{"checksum_algorithm":"SHA-256","checksum_sha256":"7d8884e522b32e15c1e055724c0b9b9376ba974f20b27229b0df022a1e52f800","artifact_route":"/operator-release-handoff/visual-runtime-gateway-verification-preflight","media_type":"text/html"}}},"blocker_summary":{"total":38,"non_code":3,"predictive":7,"trend_history":3,"alarm_event":3,"weather_forecast":4,"weather_forecast_evidence":4,"controlled_write_readiness":1},"blockers":["semantic_role:zone_temperature","semantic_role:zone_setpoint","trend_samples","occupancy_signals","weather_observations","occupancy_evidence:explicit_equipment_scope_required","weather_forecast:missing_scoped_weather_forecast","explicit_equipment_scope_required","visual composer explicit equipment scope required","missing Visual Composer AI planner decision audit evidence","DigitalOcean Docker Droplet/VPS target must be explicit","Attached DigitalOcean volume path must be configured before restore drill evidence can be trusted","Database restore drill last-run timestamp must be recorded","Restore drill evidence is stale or timestamp is invalid","Restore drill release package id is missing, invalid, or cross-scope","Restore drill build id must be configured","Restore drill operator approval reference must be archived before production cutover","Restore drill operator approval actor must be recorded","Restore drill operator approval timestamp must be valid and no older than the restore drill","Database restore drill evidence path must be stored on the attached volume","Artifact restore drill evidence path must be stored on the attached volume","Rollback runbook path must be stored on the attached volume","Database backup export evidence path must be stored on the attached volume for restore drill readiness","Artifact backup export evidence path must be stored on the attached volume for restore drill readiness","Database backup retention days must be a positive integer for restore drill readiness","Artifact backup retention days must be a positive integer for restore drill readiness","Restore drill target must be isolated staging/sandbox, not production","Restore drill RTO minutes must be a positive integer","Restore drill RPO minutes must be a positive integer","operator must set target BACnet/IP range before live discovery","operator must set target Modbus host before live enumeration","operator must provide deployed remote base URL before external readiness smoke","manual gate pending: operator_approval_recorded","manual gate pending: backup_restore_path_verified","manual gate pending: rollback_plan_reviewed","manual gate pending: evidence_archive_persisted","manual gate pending: write_and_autopilot_disabled_confirmed","storage/backup preflight not ready: blocked_missing_or_unsafe_storage_posture"],"trend_history_evidence":{"artifact":"release-trend-history-preflight-evidence-v1","status":"blocked_trend_history_release_preflight","source_artifact":"predictive-readiness-trend-history-evidence-v1","source_status":"not_requested_explicit_equipment_scope_required","generated_at":"2026-05-14T09:39:55.300234Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all","site_id":null,"building_id":null,"equipment_id":null},"sample_summary":{"evidence_count":0,"point_count":0,"total_samples":0,"minimum_sample_count":0,"maximum_sample_count":0,"stale_point_ids":[]},"point_rollups":[],"blockers":["explicit_equipment_scope_required","missing_scoped_trend_history_evidence","source_status:not_requested_explicit_equipment_scope_required"],"recommended_operator_next_action":"Fix scoped trend-history freshness/sample/scope blockers before release package handoff or predictive readiness claims.","advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","credentials":"redacted"},"alarm_event_evidence":{"artifact":"release-alarm-event-preflight-evidence-v1","status":"blocked_alarm_event_release_preflight","source_artifact":"alarm-event-readiness-evidence-v1","source_status":"not_requested_explicit_equipment_scope_required","generated_at":"2026-05-14T09:39:55.300234Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all","site_id":null,"building_id":null,"equipment_id":null},"summary":{"event_count":0,"active_event_count":0,"critical_or_high_event_count":0,"acknowledged_count":0},"freshness":{"status":"missing","max_age_minutes":240,"latest_event_age_minutes":null,"latest_event_timestamp":null},"events":[],"blockers":["explicit_equipment_scope_required","missing_scoped_alarm_event_evidence","source_status:not_requested_explicit_equipment_scope_required"],"recommended_operator_next_action":"Fix scoped alarm/event freshness/scope/read-only blockers before release package handoff claims.","advisory_only":true,"read_only":true,"write_execution_enabled":false,"alarm_acknowledgement_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"alarm_action_mode":"no_alarm_acknowledgement","bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","credentials":"redacted"},"weather_forecast_evidence":{"artifact":"release-weather-forecast-preflight-evidence-v1","status":"blocked_weather_forecast_release_preflight","source_artifact":"weather-forecast-readiness-evidence-v1","source_status":"blocked_weather_forecast_not_ready","generated_at":"2026-05-14T09:39:55.300234Z","scope":{"site_ref":"all","building_ref":"all","site_id":null,"building_id":null},"summary":{"forecast_count":0,"severe_weather_flag_count":0,"source_refs":[]},"freshness":{"status":"missing","max_age_minutes":120,"latest_forecast_age_minutes":null,"latest_forecast_timestamp":null},"forecasts":[],"blockers":["missing_scoped_weather_forecast","explicit_site_scope_required","weather_forecast_freshness:missing","source_status:blocked_weather_forecast_not_ready"],"recommended_operator_next_action":"Import a current scoped weather forecast export or fixture before release package handoff or predictive readiness claims.","advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"weather_provider_action_mode":"no_weather_provider_call","bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","credentials":"redacted"},"controlled_write_readiness_evidence":{"source_key":"controlled_write_readiness","label":"Controlled-write readiness","status":"missing","source_artifact":"predictive-controlled-write-readiness-audit-packet-v1","freshness_status":"unknown","evidence_count":0,"confidence":null,"packet_uid":null,"source_refs":{},"recommended_operator_next_action":"Generate scoped controlled-write readiness packet before release handoff.","blocker_count":1,"blockers":["missing_controlled_write_readiness_packet"],"ok_for_operator_review":false,"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"safe_posture":{"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"credentials":"redacted","retention_notes":["Persist this archive index beside the downloaded operator release handoff package and integrity manifest.","Keep site credentials, BAS network ranges, and API keys out of archive storage unless encrypted by the operator outside git.","Regenerate the archive index after any readiness, package, or blocker evidence changes."],"verification_instructions":["Download /api/operator/release-handoff/package.json from the reviewed deployment.","Run the checksum verification command from checksum_manifest_reference.verification_command.","Confirm advisory_only=true, write_execution_enabled=false, autopilot_execution_enabled=false, and physical_execution_blocked=true before handoff."],"recommended_next_action":"Persist package.json, integrity.json, and archive-index.json together; verify checksums; resolve listed non-code blockers before any live-site scan or deployment publish.","advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"controlled_write_readiness_release_summary":{"artifact":"controlled-write-readiness-release-summary-v1","release_id":"intellicore-20260514T093955300234Z","package_id":"intellicore-20260514T093955300234Z","generated_at":"2026-05-14T09:39:55.470168Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all"},"status":"blocked_controlled_write_readiness_release_summary","ok_for_operator_review":false,"integrity_reference":{"artifact":"operator-release-handoff-integrity-manifest-v1","algorithm":"SHA-256","route":"/api/operator/release-handoff/integrity.json","archive_index_route":"/api/operator/release-handoff/archive-index.json","archive_id":"archive-intellicore-20260514T093955300234Z","package_core_checksum_sha256":"2d3b9b25deeee3f149291a70013ae0d6561ef399bfcba29f767c15b9b5cbbdef","actual_package_core_checksum_sha256":"2d3b9b25deeee3f149291a70013ae0d6561ef399bfcba29f767c15b9b5cbbdef","checksum_verified":true},"readiness_packet":{"packet_uid":null,"source_artifact":"predictive-controlled-write-readiness-audit-packet-v1","source_refs":{},"status":"missing","confidence":null,"blockers":["missing_controlled_write_readiness_packet"],"ok_for_operator_review":false},"freshness_evidence_posture":{"freshness_status":"unknown","evidence_count":0,"source_artifact":"predictive-controlled-write-readiness-audit-packet-v1","checksum_verified":true,"approval_prerequisites_present":false,"global_or_unscoped_readiness_created":false},"redacted_evidence":{"source_refs":{},"blockers":["missing_controlled_write_readiness_packet"],"recommended_operator_next_action":"Generate scoped controlled-write readiness packet before release handoff."},"blockers":["missing_controlled_write_readiness_packet","controlled-write readiness packet is missing or blocked","controlled-write readiness packet UID missing","controlled-write readiness recommendation source reference missing","controlled-write readiness control-plan source references missing","controlled-write readiness write-intent source references missing","controlled-write readiness confidence missing"],"safety_flags":{"advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","publish_action_performed":false},"artifact_references":{"summary_api":"/api/operator/release-handoff/controlled-write-readiness-summary.json","package_api":"/api/operator/release-handoff/package.json","integrity_manifest_api":"/api/operator/release-handoff/integrity.json","archive_index_api":"/api/operator/release-handoff/archive-index.json","evidence_matrix_api":"/api/operator/release-handoff/evidence-matrix.json"},"recommended_operator_next_action":"Do not treat controlled-write readiness as release-ready; regenerate scoped packet/package and clear checksum, scope, freshness, confidence, safety, and approval blockers.","credentials":"redacted","advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true}},"controlled_write_readiness_release_summary":{"artifact":"controlled-write-readiness-release-summary-v1","release_id":"intellicore-20260514T093955300234Z","package_id":"intellicore-20260514T093955300234Z","generated_at":"2026-05-14T09:39:55.470168Z","scope":{"site_ref":"all","building_ref":"all","equipment_ref":"all"},"status":"blocked_controlled_write_readiness_release_summary","ok_for_operator_review":false,"integrity_reference":{"artifact":"operator-release-handoff-integrity-manifest-v1","algorithm":"SHA-256","route":"/api/operator/release-handoff/integrity.json","archive_index_route":"/api/operator/release-handoff/archive-index.json","archive_id":"archive-intellicore-20260514T093955300234Z","package_core_checksum_sha256":"2d3b9b25deeee3f149291a70013ae0d6561ef399bfcba29f767c15b9b5cbbdef","actual_package_core_checksum_sha256":"2d3b9b25deeee3f149291a70013ae0d6561ef399bfcba29f767c15b9b5cbbdef","checksum_verified":true},"readiness_packet":{"packet_uid":null,"source_artifact":"predictive-controlled-write-readiness-audit-packet-v1","source_refs":{},"status":"missing","confidence":null,"blockers":["missing_controlled_write_readiness_packet"],"ok_for_operator_review":false},"freshness_evidence_posture":{"freshness_status":"unknown","evidence_count":0,"source_artifact":"predictive-controlled-write-readiness-audit-packet-v1","checksum_verified":true,"approval_prerequisites_present":false,"global_or_unscoped_readiness_created":false},"redacted_evidence":{"source_refs":{},"blockers":["missing_controlled_write_readiness_packet"],"recommended_operator_next_action":"Generate scoped controlled-write readiness packet before release handoff."},"blockers":["missing_controlled_write_readiness_packet","controlled-write readiness packet is missing or blocked","controlled-write readiness packet UID missing","controlled-write readiness recommendation source reference missing","controlled-write readiness control-plan source references missing","controlled-write readiness write-intent source references missing","controlled-write readiness confidence missing"],"safety_flags":{"advisory_only":true,"read_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true,"bas_scan_action_mode":"no_bas_scan","bas_write_action_mode":"no_bas_write","network_action_mode":"no_network_dry_run","publish_action_performed":false},"artifact_references":{"summary_api":"/api/operator/release-handoff/controlled-write-readiness-summary.json","package_api":"/api/operator/release-handoff/package.json","integrity_manifest_api":"/api/operator/release-handoff/integrity.json","archive_index_api":"/api/operator/release-handoff/archive-index.json","evidence_matrix_api":"/api/operator/release-handoff/evidence-matrix.json"},"recommended_operator_next_action":"Do not treat controlled-write readiness as release-ready; regenerate scoped packet/package and clear checksum, scope, freshness, confidence, safety, and approval blockers.","credentials":"redacted","advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true}}