{"artifact":"deployment-publish-smoke-v1","release_id":"intellicore-20260514T085606010550Z","generated_at":"2026-05-14T08:56:06.010550Z","overall_status":"pass_with_placeholders","target":{"configured":false,"value_state":"placeholder_or_missing","redacted_base_url":"placeholder_or_missing","operator_supplied":false},"network_action_mode":"no_network_dry_run","deploy_action_mode":"no_deploy_action","publish_action_performed":false,"credentials":"redacted","safe_posture":{"advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true},"evidence_artifacts":{"bundle":{"ok":true,"artifact":"operator-release-handoff-v1","route":"/api/operator/release-handoff"},"package":{"ok":true,"artifact":"operator-release-handoff-package-v1","route":"/api/operator/release-handoff/package.json"},"integrity_manifest":{"ok":true,"artifact":"operator-release-handoff-integrity-manifest-v1","route":"/api/operator/release-handoff/integrity.json","algorithm":"SHA-256"},"archive_index":{"ok":true,"artifact":"operator-release-handoff-archive-index-v1","route":"/api/operator/release-handoff/archive-index.json"}},"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},"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","publish_smoke_api":"/api/operator/release-handoff/publish-smoke.json","cli":"scripts/intellicore_deployment_publish_smoke.py"},"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"],"blocker_summary":{"total":40,"operator_handoff":38,"publish_target":1,"evidence":0,"controlled_write_readiness":1},"verification_commands":["python scripts/intellicore_deployment_publish_smoke.py --json --target-url https://replace-with-deployment-url","python scripts/intellicore_operator_handoff_bundle.py --json","python scripts/intellicore_operator_handoff_bundle.py --archive-index","curl -fsS http://127.0.0.1:8000/api/operator/release-handoff/package.json","curl -fsS http://127.0.0.1:8000/api/operator/release-handoff/integrity.json","curl -fsS http://127.0.0.1:8000/api/operator/release-handoff/archive-index.json"],"verification_instructions":["Review this publish smoke packet before any durable hosting cutover.","Confirm package, integrity manifest, and archive index evidence are present and checksum-linked.","Replace the placeholder target URL only in operator deployment config; do not commit secrets or site-specific network targets.","Run external /health, /ready, and /api/deployment/readiness checks only after an operator supplies a deployed URL and credentials outside git.","Keep advisory_only=true, write_execution_enabled=false, autopilot_execution_enabled=false, and physical_execution_blocked=true."],"recommended_next_action":"Resolve publish smoke blockers, rerun this dry-run report, then perform operator-authenticated remote checks without enabling BAS writes.","advisory_only":true,"write_execution_enabled":false,"autopilot_execution_enabled":false,"physical_execution_blocked":true}