Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Failing after 17s
CD Pipeline / build-and-deploy (push) Has been skipped
CD Pipeline / post-deploy-checks (push) Has been skipped
645 lines
33 KiB
JSON
645 lines
33 KiB
JSON
{
|
||
"completed_in_priority_order": [
|
||
{
|
||
"evidence": {
|
||
"full_stack_blocked": 0,
|
||
"full_stack_pass": 91,
|
||
"full_stack_warn": 2,
|
||
"host_188_hygiene_blocked": false,
|
||
"hosts_checked": [
|
||
"192.168.0.110",
|
||
"192.168.0.120",
|
||
"192.168.0.121",
|
||
"192.168.0.188"
|
||
],
|
||
"post_start_blocked": 0,
|
||
"post_start_pass": 43,
|
||
"post_start_warn": 5,
|
||
"runtime_action_authorized": false,
|
||
"service_green": true,
|
||
"wazuh_manager_registry_accepted": 6
|
||
},
|
||
"status": "core_green_with_warnings",
|
||
"title": "建立主機 runtime inventory 權威資料",
|
||
"warnings_kept_visible": [
|
||
"110 systemd failed units remain",
|
||
"188 momo daily sales stale but source preflight has no hard blocker"
|
||
],
|
||
"workplan_id": "P0-001"
|
||
},
|
||
{
|
||
"evidence": {
|
||
"latest_cd_run_id": "3868",
|
||
"latest_cd_run_status": "Success",
|
||
"non110_runner_ready": true,
|
||
"production_deploy_status": "closure_verified",
|
||
"production_governance_fields_present": true,
|
||
"production_image_tag_matches_main": true,
|
||
"runner_pressure_guard_ok": true
|
||
},
|
||
"status": "production_deploy_closure_verified",
|
||
"title": "補 dev / prod CI/CD baseline",
|
||
"workplan_id": "P0-004"
|
||
},
|
||
{
|
||
"evidence": {
|
||
"blocked_source_ids": [],
|
||
"missing_required_source_count": 0,
|
||
"present_required_source_count": 11,
|
||
"required_source_count": 11,
|
||
"source_readiness_percent": 100
|
||
},
|
||
"safe_next_step": "open_template_copy_apply_gate_after_source_readiness_green",
|
||
"status": "ready_for_template_copy_apply_gate",
|
||
"title": "P0-004 CI/CD baseline source readiness",
|
||
"workplan_id": "P0-004-source-readiness"
|
||
},
|
||
{
|
||
"evidence": {
|
||
"github_status": "stopped_retired_do_not_use",
|
||
"manifest_present": true,
|
||
"manifest_schema_present": true,
|
||
"manifest_schema_version": "product_awoooi_manifest_v1",
|
||
"missing_contract_ref_count": 0,
|
||
"missing_required_section_count": 0,
|
||
"present_contract_ref_count": 3,
|
||
"present_required_section_count": 5,
|
||
"product_id": "awoooi",
|
||
"required_contract_ref_count": 3,
|
||
"required_section_count": 5,
|
||
"source_control_authority": "gitea",
|
||
"source_readiness_percent": 100
|
||
},
|
||
"safe_next_step": "adopt_product_manifest_schema_for_remaining_products_without_repo_creation_or_secret_read",
|
||
"status": "ready_for_product_manifest_adoption",
|
||
"title": "建立 product.awoooi.yaml 產品 manifest 標準",
|
||
"workplan_id": "P0-002"
|
||
}
|
||
],
|
||
"current_head": {
|
||
"gitea_main_sha": "094f50ddbd2020446d3f5a7ca49377694dde6091",
|
||
"latest_fetched_gitea_main_subject": "chore(cd): deploy 1fb4bfc [skip ci]",
|
||
"latest_source_readiness_cd_run_id": null,
|
||
"latest_source_readiness_cd_run_status": "not_visible_in_public_queue_at_2026-06-29T19:20:13+08:00",
|
||
"latest_source_readiness_commit_sha": "1fb4bfc09d1e2a192527fb53fdf4694ab2380b6d",
|
||
"latest_successful_deploy_marker": "094f50ddb chore(cd): deploy 1fb4bfc [skip ci]",
|
||
"latest_successful_deployed_source_sha": "1fb4bfc09d1e2a192527fb53fdf4694ab2380b6d",
|
||
"latest_verified_worktree_base_sha": "094f50ddb",
|
||
"no_matching_runner_visible": false,
|
||
"source_readiness_ci_fix_required": false
|
||
},
|
||
"generated_at": "2026-06-29T20:21:35+08:00",
|
||
"in_progress_or_blocked_in_priority_order": [
|
||
{
|
||
"evidence": {
|
||
"active_blockers": [
|
||
"host_boot_observation_older_than_target_window",
|
||
"post_start_blocked_not_zero",
|
||
"product_data_green_not_1",
|
||
"service_green_not_1",
|
||
"stockplatform_freshness_blocked",
|
||
"stockplatform_ingestion_blocked"
|
||
],
|
||
"all_host_reboot_detection_missing": false,
|
||
"backup_core_green": true,
|
||
"can_claim_all_services_recovered_within_target": false,
|
||
"host_188_service_green": true,
|
||
"host_boot_probe_missing_hosts": false,
|
||
"host_boot_probe_source_present": true,
|
||
"latest_live_slo_artifact": "/home/wooo/reboot-recovery/reboot-auto-recovery-slo-20260629-201605",
|
||
"live_slo_metric_present": true,
|
||
"live_slo_service_last_result": "success",
|
||
"live_slo_timer_active": true,
|
||
"live_slo_timer_enabled": true,
|
||
"local_disk_free_gib_after_cleanup": 145.514,
|
||
"max_observed_uptime_seconds": 537911,
|
||
"missing_hosts": [],
|
||
"observed_hosts": [
|
||
"110",
|
||
"120",
|
||
"121",
|
||
"188"
|
||
],
|
||
"post_start_blocked": 1,
|
||
"product_data_green": false,
|
||
"safe_next_step_from_scorecard": "inspect_stockplatform_ingestion_readback_and_wait_retry_windows_then_rerun_slo_verify_only_no_reboot",
|
||
"service_green": false,
|
||
"slo_exporter_source_present": true,
|
||
"slo_installer_source_present": true,
|
||
"slo_systemd_timer_source_present": true,
|
||
"source_controls_added": true,
|
||
"stale_hosts": [
|
||
"110",
|
||
"120",
|
||
"121",
|
||
"188"
|
||
],
|
||
"stock_blocked_sources": [
|
||
{
|
||
"latest_date": "2026-06-26",
|
||
"notes": "官方來源狀態:上櫃官方尚未發布,回傳日期 2026-06-29,來源列數 0;上市官方尚未發布,回傳日期 尚無,來源列數 0",
|
||
"row_count": 0,
|
||
"source": "core.margin_short_daily",
|
||
"status": "missing"
|
||
},
|
||
{
|
||
"latest_date": "2026-06-26",
|
||
"notes": "最新日期 2026-06-26 早於最新交易日 2026-06-29",
|
||
"row_count": 2988,
|
||
"source": "ai.recommendations",
|
||
"status": "stale"
|
||
}
|
||
],
|
||
"stock_blockers": [
|
||
"core_margin_short_daily_missing",
|
||
"ai_recommendations_stale"
|
||
],
|
||
"stock_eod_classification": "after_first_eod_window_blocked",
|
||
"stock_eod_final_retry_window_end_local": "23:35",
|
||
"stock_eod_final_retry_window_passed": false,
|
||
"stock_eod_first_full_window_end_local": "19:15",
|
||
"stock_eod_next_action": "inspect_ingestion_logs_and_wait_retry_windows",
|
||
"stock_eod_window_pending": false,
|
||
"stock_freshness_status": "blocked",
|
||
"stock_ingestion_blockers": [
|
||
"core.margin_short_daily_incomplete"
|
||
],
|
||
"stock_latest_source_runs": [
|
||
{
|
||
"source_run_id": 3385,
|
||
"source_name": "official_margin_short_daily",
|
||
"target_date": "2026-06-29",
|
||
"status": "official_pending",
|
||
"started_at": "2026-06-29T12:05:16.716460Z",
|
||
"finished_at": "2026-06-29T12:05:16.716460Z"
|
||
},
|
||
{
|
||
"source_run_id": 3386,
|
||
"source_name": "official_margin_short_daily",
|
||
"target_date": "2026-06-29",
|
||
"status": "official_pending",
|
||
"started_at": "2026-06-29T12:05:16.716460Z",
|
||
"finished_at": "2026-06-29T12:05:16.716460Z"
|
||
},
|
||
{
|
||
"source_run_id": 3384,
|
||
"source_name": "official_margin_short_daily",
|
||
"target_date": "2026-06-29",
|
||
"status": "official_pending",
|
||
"started_at": "2026-06-29T11:05:17.201062Z",
|
||
"finished_at": "2026-06-29T11:05:17.201062Z"
|
||
},
|
||
{
|
||
"source_run_id": 3383,
|
||
"source_name": "official_margin_short_daily",
|
||
"target_date": "2026-06-29",
|
||
"status": "official_pending",
|
||
"started_at": "2026-06-29T11:05:17.201062Z",
|
||
"finished_at": "2026-06-29T11:05:17.201062Z"
|
||
},
|
||
{
|
||
"source_run_id": 3382,
|
||
"source_name": "intelligence_security_linker",
|
||
"target_date": null,
|
||
"status": "succeeded",
|
||
"started_at": "2026-06-29T11:00:11.518268Z",
|
||
"finished_at": "2026-06-29T11:00:11.518268Z"
|
||
},
|
||
{
|
||
"source_run_id": 3381,
|
||
"source_name": "intelligence_reports_import",
|
||
"target_date": null,
|
||
"status": "succeeded",
|
||
"started_at": "2026-06-29T11:00:10.289509Z",
|
||
"finished_at": "2026-06-29T11:00:10.289509Z"
|
||
},
|
||
{
|
||
"source_run_id": 3380,
|
||
"source_name": "year_to_date_stock_backfill",
|
||
"target_date": null,
|
||
"status": "planned",
|
||
"started_at": "2026-06-29T10:22:15.262488Z",
|
||
"finished_at": "2026-06-29T10:22:15.262488Z"
|
||
},
|
||
{
|
||
"source_run_id": 3378,
|
||
"source_name": "official_margin_short_daily",
|
||
"target_date": "2026-06-29",
|
||
"status": "official_pending",
|
||
"started_at": "2026-06-29T10:22:13.464934Z",
|
||
"finished_at": "2026-06-29T10:22:13.464934Z"
|
||
},
|
||
{
|
||
"source_run_id": 3379,
|
||
"source_name": "official_margin_short_daily",
|
||
"target_date": "2026-06-29",
|
||
"status": "official_pending",
|
||
"started_at": "2026-06-29T10:22:13.464934Z",
|
||
"finished_at": "2026-06-29T10:22:13.464934Z"
|
||
},
|
||
{
|
||
"source_run_id": 3345,
|
||
"source_name": "community_etfinfo_holdings_daily",
|
||
"target_date": "2026-06-26",
|
||
"status": "succeeded",
|
||
"started_at": "2026-06-29T10:21:56.651793Z",
|
||
"finished_at": "2026-06-29T10:21:56.651793Z"
|
||
}
|
||
],
|
||
"stock_latest_trading_date": "2026-06-29",
|
||
"stock_official_margin_short_source_runs": [
|
||
{
|
||
"source_run_id": 3385,
|
||
"source_name": "official_margin_short_daily",
|
||
"target_date": "2026-06-29",
|
||
"status": "official_pending",
|
||
"started_at": "2026-06-29T12:05:16.716460Z",
|
||
"finished_at": "2026-06-29T12:05:16.716460Z"
|
||
},
|
||
{
|
||
"source_run_id": 3386,
|
||
"source_name": "official_margin_short_daily",
|
||
"target_date": "2026-06-29",
|
||
"status": "official_pending",
|
||
"started_at": "2026-06-29T12:05:16.716460Z",
|
||
"finished_at": "2026-06-29T12:05:16.716460Z"
|
||
},
|
||
{
|
||
"source_run_id": 3384,
|
||
"source_name": "official_margin_short_daily",
|
||
"target_date": "2026-06-29",
|
||
"status": "official_pending",
|
||
"started_at": "2026-06-29T11:05:17.201062Z",
|
||
"finished_at": "2026-06-29T11:05:17.201062Z"
|
||
},
|
||
{
|
||
"source_run_id": 3383,
|
||
"source_name": "official_margin_short_daily",
|
||
"target_date": "2026-06-29",
|
||
"status": "official_pending",
|
||
"started_at": "2026-06-29T11:05:17.201062Z",
|
||
"finished_at": "2026-06-29T11:05:17.201062Z"
|
||
}
|
||
],
|
||
"stockplatform_api_healthz_green": true,
|
||
"stockplatform_controlled_recovery_gate_required": false,
|
||
"stockplatform_controlled_recovery_gate_status": "not_required_yet",
|
||
"stockplatform_freshness_endpoint_readback_present": true,
|
||
"stockplatform_healthz_green": true,
|
||
"stockplatform_ingestion_endpoint_readback_present": true,
|
||
"stockplatform_ingestion_status": "blocked",
|
||
"stockplatform_scorecard_readback_integrated": true,
|
||
"stockplatform_transient_502_before_success_seen": true,
|
||
"target_minutes": 10,
|
||
"unreachable_hosts": [],
|
||
"wazuh_dashboard_degraded": false,
|
||
"latest_verify_only_metric": {
|
||
"ready": 0,
|
||
"blocker_count": 4,
|
||
"max_host_uptime_seconds": 537911,
|
||
"last_run_timestamp": 1782735360
|
||
},
|
||
"stock_ingestion_status": "blocked",
|
||
"stockplatform_second_retry_checked_at": "2026-06-29T20:21:35+08:00"
|
||
},
|
||
"professional_fix": {
|
||
"action": "Keep the live boot-triggered SLO timer enabled. Do not reboot or restart services from this lane. Treat StockPlatform freshness/ingestion as the current service recovery blocker: use the committed P0-006 scorecard and /api/v1/agents/reboot-auto-recovery-slo-scorecard readback, wait scheduled retry windows, then rerun verify-only. If still blocked after 23:35, open the controlled data recovery gate with source diff, check-mode/dry-run, rollback, and post-freshness verifier; never write manual DB rows or fake freshness.",
|
||
"exit_criteria": [
|
||
"can_claim_all_services_recovered_within_target=true",
|
||
"observed_hosts=110,120,121,188",
|
||
"missing_hosts=[]",
|
||
"unreachable_hosts=[]",
|
||
"max_observed_uptime_seconds<=600 during a fresh all-host reboot window",
|
||
"POST_START_BLOCKED=0",
|
||
"SERVICE_GREEN=1",
|
||
"PRODUCT_DATA_GREEN=1",
|
||
"STOCK_FRESHNESS_STATUS=ok",
|
||
"stock_blockers=[]",
|
||
"BACKUP_CORE_GREEN=1",
|
||
"HOST_188_SERVICE_GREEN=1",
|
||
"live_slo_metric_present=true"
|
||
],
|
||
"owner": "reboot auto-recovery lane plus StockPlatform freshness readback"
|
||
},
|
||
"reason": "P0-006 scorecard and live retry readback now directly show the 20:05 StockPlatform retry still blocked: public/API health is green, but freshness remains blocked by core_margin_short_daily_missing and ai_recommendations_stale, and ingestion remains blocked by core.margin_short_daily_incomplete with official_margin_short_daily source runs 3385/3386 still official_pending. No reboot, restart, DB write, or fake freshness marker is allowed from this lane; wait the next retry windows and rerun verify-only.",
|
||
"safe_next_step": "wait_next_stockplatform_retry_window_then_rerun_slo_verify_only_no_reboot_no_db_write",
|
||
"status": "blocked_stockplatform_product_data_freshness_waiting_final_retry_window",
|
||
"title": "主機重啟自動偵測、自動觸發與 10 分鐘恢復 SLO",
|
||
"workplan_id": "P0-006"
|
||
},
|
||
{
|
||
"evidence": {
|
||
"backup_core_green": true,
|
||
"checklist_generator_present": true,
|
||
"checklist_latest_path": "/tmp/awoooi-dr-escrow-evidence-checklist-current.json",
|
||
"checklist_schema_version": "awoooi_dr_escrow_evidence_checklist_v1",
|
||
"credential_escrow_intake_api_route_live_checked": true,
|
||
"credential_marker_write_authorized_count": 0,
|
||
"dr_escrow_blocked": true,
|
||
"escrow_status_live_checked": true,
|
||
"focused_p0_005_tests_passed": 16,
|
||
"live_no_secret_status_path": "/tmp/awoooi-p0-005-escrow-status-live.txt",
|
||
"offsite_configured": true,
|
||
"offsite_fresh": true,
|
||
"placeholder_preflight_guard_present": true,
|
||
"product_data_green": false,
|
||
"production_missing_item_count": 5,
|
||
"production_owner_response_accepted_count": 0,
|
||
"production_readback_safe_next_step": "collect_redacted_non_secret_evidence_refs_then_rerun_preflight",
|
||
"production_runtime_gate_count": 0,
|
||
"production_safe_next_step": "collect_redacted_non_secret_evidence_refs_then_rerun_preflight",
|
||
"production_secret_value_collection_allowed": false,
|
||
"production_top_level_safe_next_step_readback": true,
|
||
"production_top_level_safe_next_step_was_null_before_source_fix": true,
|
||
"rclone_configured": true,
|
||
"rclone_gdrive_configured": true,
|
||
"rclone_gdrive_fresh": true,
|
||
"script_missing_count": 0,
|
||
"secret_value_collection_allowed": false,
|
||
"source_safe_next_step": "collect_redacted_non_secret_evidence_refs_then_rerun_preflight",
|
||
"source_top_level_safe_next_step_present": true,
|
||
"stock_blockers": [
|
||
"core_margin_short_daily_missing",
|
||
"ai_recommendations_stale"
|
||
],
|
||
"stock_eod_classification": "after_first_eod_window_blocked",
|
||
"stock_eod_next_action": "inspect_ingestion_logs_and_wait_retry_windows",
|
||
"stock_eod_window_pending": false,
|
||
"stock_freshness_status": "blocked",
|
||
"stock_ingestion_blockers": [
|
||
"core.margin_short_daily_incomplete"
|
||
],
|
||
"stock_latest_trading_date": "2026-06-29",
|
||
"stock_official_margin_short_source_runs": [
|
||
3385,
|
||
3386,
|
||
3384,
|
||
3383
|
||
],
|
||
"stockplatform_api_healthz_green": true,
|
||
"stockplatform_healthz_green": true,
|
||
"stockplatform_ingestion_status": "blocked",
|
||
"summary_escrow_missing_count": 5,
|
||
"stock_ingestion_status": "blocked"
|
||
},
|
||
"missing_items": [
|
||
"restic_repository_password",
|
||
"offsite_provider_credentials",
|
||
"break_glass_admin_credentials",
|
||
"dns_registrar_recovery",
|
||
"oauth_ai_provider_recovery"
|
||
],
|
||
"professional_fix": {
|
||
"action": "Use the single DR escrow checklist packet with the five required item ids, accept only redacted evidence refs, then run the existing preflight once.",
|
||
"do_not_repeat": [
|
||
"Do not reopen cold-start or CI/CD work because escrow refs are missing.",
|
||
"Do not create additional owner-package variants for the same five refs."
|
||
],
|
||
"exit_criteria": [
|
||
"effective_escrow_missing_count=0",
|
||
"owner_response_accepted_count=1",
|
||
"forbidden_true_field_count=0",
|
||
"secret_value_collection_allowed=false",
|
||
"post_reboot_readiness OVERALL_DECLARATION no longer includes DR_ESCROW_BLOCKED"
|
||
],
|
||
"owner": "DR evidence lane"
|
||
},
|
||
"reason": "Backup/offsite core remains green and the credential escrow readiness API correctly exposes safe_next_step. Current product data freshness is still blocked after the 20:05 StockPlatform retry because official margin-short runs 3385/3386 remain official_pending; the separate DR blocker remains the five non-secret escrow evidence refs.",
|
||
"safe_next_step": "after_p0_006_stockplatform_freshness_clears_collect_five_non_secret_credential_escrow_evidence_refs_and_rerun_single_preflight",
|
||
"status": "stock_freshness_blocked_and_waiting_non_secret_credential_escrow_evidence_refs",
|
||
"title": "產品資料與備份 contract",
|
||
"workplan_id": "P0-005"
|
||
},
|
||
{
|
||
"evidence": {
|
||
"accepted_inventory_payload_count": 0,
|
||
"active_blockers": [
|
||
"gitea_repo_inventory_status_not_ok",
|
||
"gitea_visibility_scope_public_only_or_unknown",
|
||
"gitea_authenticated_inventory_payload_not_accepted",
|
||
"gitea_owner_coverage_attestation_not_received"
|
||
],
|
||
"all_active_product_repos_have_gitea_owner_readiness_row": true,
|
||
"api_readback_schema_version": "gitea_private_inventory_p0_scorecard_readback_v1",
|
||
"authenticated_payload_validation_accepted_payload_count": 0,
|
||
"authenticated_payload_validation_blocker_count": 4,
|
||
"authenticated_payload_validation_snapshot": "docs/operations/awoooi-gitea-authenticated-inventory-payload-validation.snapshot.json",
|
||
"authenticated_payload_validation_status": "needs_supplement",
|
||
"authenticated_payload_validator_present": true,
|
||
"authenticated_payload_validator_source": "scripts/security/gitea-authenticated-inventory-payload-validator.py",
|
||
"delivery_workbench_active_blocker_count": 4,
|
||
"delivery_workbench_active_lane": "gitea_private_inventory",
|
||
"delivery_workbench_github_blocked_preflight_target_count": 0,
|
||
"delivery_workbench_review_readiness_percent": 60,
|
||
"expected_product_count": 11,
|
||
"gitea_inventory_status": "partial",
|
||
"gitea_public_repo_count": 4,
|
||
"gitea_public_repos": [
|
||
"wooo/awoooi",
|
||
"wooo/ewoooc",
|
||
"wooo/agent-bounty-protocol",
|
||
"wooo/2026FIFAWorldCup"
|
||
],
|
||
"gitea_readonly_token_present": false,
|
||
"gitea_visibility_scope": "public_only",
|
||
"github_lane_excluded_from_p0_blocker_count": true,
|
||
"github_primary_switch_authorized": false,
|
||
"missing_product_row_count": 0,
|
||
"owner_coverage_attestation_received_count": 0,
|
||
"present_product_row_count": 11,
|
||
"private_inventory_source": "gitea",
|
||
"refs_sync_allowed": false,
|
||
"repo_write_allowed": false,
|
||
"runtime_gate_count": 0,
|
||
"token_value_collection_allowed": false
|
||
},
|
||
"professional_fix": {
|
||
"action": "Use the Gitea-only P0 scorecard, accept only redacted authenticated/admin export inventory payloads, and keep GitHub as do_not_use historical context only.",
|
||
"exit_criteria": [
|
||
"private_inventory_source=gitea",
|
||
"github_lane_excluded_from_p0_blocker_count=true",
|
||
"gitea_repo_inventory.status=ok",
|
||
"gitea_repo_inventory.visibility_scope in authenticated/admin_export",
|
||
"all_active_product_repos_have_gitea_owner_readiness_row=true"
|
||
],
|
||
"owner": "Gitea inventory lane"
|
||
},
|
||
"reason": "P0-003 now has a Gitea-only scorecard, read-only API, Delivery Workbench active lane, live 110 public inventory refreshed to four repos, and a no-secret machine validator for redacted authenticated/admin export inventory payloads. GitHub is excluded from active P0 blocker math; current public-only inventory should validate as needs_supplement with accepted_payload_count=0, and private/internal coverage still requires an authenticated/admin redacted payload or owner attestation.",
|
||
"safe_next_step": "supply_authenticated_or_admin_export_redacted_inventory_payload_then_run_gitea_authenticated_inventory_payload_validator",
|
||
"status": "payload_validator_ready_waiting_authenticated_or_admin_export_inventory",
|
||
"title": "取得 Gitea private inventory 權限",
|
||
"workplan_id": "P0-003"
|
||
}
|
||
],
|
||
"next_execution_order": [
|
||
"P0-006: StockPlatform freshness/ingestion readback remains blocked after the 20:05 retry; wait the next retry windows, rerun verify-only with no reboot/restart/DB write, and open controlled data recovery gate only if still blocked after the final retry window.",
|
||
"P0-005: after P0-006 freshness clears, collect five non-secret credential escrow evidence refs and rerun one preflight; production API safe_next_step reads back correctly and backup/offsite core remains green.",
|
||
"P0-003: supply authenticated/admin redacted inventory payload or owner coverage attestation, then run the Gitea payload validator; public-only live inventory remains four repos and GitHub remains stopped/retired/do_not_use.",
|
||
"P1-OPENCLAW-LIVE-OPS-SPACE: build the Gather-like OpenClaw continuous animated live ops workspace only after the current P0 runtime truth blockers are no longer the active next action."
|
||
],
|
||
"noise_integrated_risk_register": [
|
||
{
|
||
"exit_criteria": "latest_main_deploy_readback_success=true",
|
||
"professional_handling": "Only the latest non-canceled run for the current main head is a deploy signal; older canceled runs become context, not blockers.",
|
||
"signal": "canceled_or_superseded_cd_runs",
|
||
"why_it_matters": "Canceled runs hide whether the latest main actually deployed and can make a completed source fix look failed."
|
||
},
|
||
{
|
||
"exit_criteria": "production_deploy_status=closure_verified and P0 endpoints unchanged",
|
||
"professional_handling": "Keep UI-only changes on controlled-runtime profile and verify production readback after the newest head; do not reopen host recovery.",
|
||
"signal": "ui_redaction_commits_during_p0_recovery",
|
||
"why_it_matters": "Concurrent UI-only commits can cancel P0 CI runs and consume attention while not changing cold-start or DR truth."
|
||
},
|
||
{
|
||
"exit_criteria": "all P0 test receipts come from clean main worktree",
|
||
"professional_handling": "Run P0 verification in clean Gitea main worktrees; never stage or revert user dirty files during P0 recovery.",
|
||
"signal": "dirty_local_awooop_worktree",
|
||
"why_it_matters": "Local uncommitted frontend copy can create false test failures and pollute P0 diagnosis."
|
||
},
|
||
{
|
||
"exit_criteria": "active_p0_next_actions contain no GitHub recovery work",
|
||
"professional_handling": "Keep GitHub stopped/do_not_use; remove it from active P0 next actions and route inventory work to Gitea.",
|
||
"signal": "legacy_github_lane",
|
||
"why_it_matters": "Retired GitHub blockers inflate P0 blocker count and distract from active Gitea/runtime work."
|
||
},
|
||
{
|
||
"exit_criteria": "cold_start_blocked=0 and warning items assigned outside reboot recovery",
|
||
"professional_handling": "Keep warnings visible with owner and due lane; close reboot recovery when BLOCKED=0 and service/data health are green.",
|
||
"signal": "warning_only_cold_start_findings",
|
||
"why_it_matters": "Warnings can reveal hygiene debt, but treating them as reboot blockers delays recovery closure."
|
||
},
|
||
{
|
||
"exit_criteria": "priority snapshot current_head matches latest successful deploy marker",
|
||
"professional_handling": "Live production readback wins; snapshots must be refreshed only when they change the next executable P0 action.",
|
||
"signal": "stale_or_incomplete_priority_snapshots",
|
||
"why_it_matters": "Old snapshots can contradict live production readback and send work back to already-fixed items."
|
||
},
|
||
{
|
||
"exit_criteria": "stockplatform health routes and system freshness/ingestion readback return 200 with freshness status ok",
|
||
"professional_handling": "Confirm healthz, api healthz, freshness, and ingestion together; classify runtime down only if repeated health/readback fails, otherwise keep the confirmed blocker on product data freshness.",
|
||
"signal": "stockplatform_transient_system_api_502",
|
||
"why_it_matters": "A transient 502 on freshness/ingestion can look like service down and can also hide the real data freshness blocker."
|
||
}
|
||
],
|
||
"operation_boundaries": {
|
||
"credential_marker_written": false,
|
||
"credential_secret_value_read": false,
|
||
"database_write_or_restore_performed": false,
|
||
"docker_restart_performed": false,
|
||
"firewall_change_performed": false,
|
||
"github_api_used": false,
|
||
"github_cli_used": false,
|
||
"host_write_performed": false,
|
||
"k3s_restart_or_node_drain_performed": false,
|
||
"nginx_restart_performed": false,
|
||
"runner_registration_performed": false,
|
||
"secret_or_runner_token_read": false,
|
||
"workflow_dispatch_performed": false
|
||
},
|
||
"post_p0_prioritized_work_items": [
|
||
{
|
||
"blocked_operations": [
|
||
"raw_session_read",
|
||
"sqlite_read",
|
||
"secret_or_token_display",
|
||
"GitHub_API_or_gh_usage",
|
||
"runtime_write_without_controlled_apply",
|
||
"P0_priority_preemption"
|
||
],
|
||
"evidence": {
|
||
"must_be_continuous_animation": true,
|
||
"must_show_openclaw_working": true,
|
||
"owner_requested_at_local": "2026-06-29",
|
||
"raw_session_or_sqlite_allowed": false,
|
||
"reference_pattern": "Gather-like virtual office / presence / walk-up collaboration",
|
||
"secret_or_token_display_allowed": false,
|
||
"static_gif_or_static_card_is_not_sufficient": true
|
||
},
|
||
"exit_criteria": [
|
||
"route_renders_nonblank_animated_scene_desktop=true",
|
||
"route_renders_nonblank_animated_scene_mobile=true",
|
||
"continuous_animation_loop_visible=true",
|
||
"openclaw_agent_state_count>0",
|
||
"runtime_event_to_avatar_state_mapping_present=true",
|
||
"trace_ledger_or_work_item_progress_source_connected=true",
|
||
"raw_session_or_sqlite_read_allowed=false",
|
||
"secret_or_token_display_allowed=false",
|
||
"browser_console_error_count=0",
|
||
"production_route_smoke_passed=true"
|
||
],
|
||
"priority": "P1",
|
||
"reason": "Owner requested an OpenClaw workroom similar to a virtual-office presence app, with a continuous animated scene showing AI Agents working. This is productized AI Agent visibility, not a replacement for current P0 runtime truth closure, so it is queued after P0-006, P0-005, and P0-003 blockers.",
|
||
"required_integrations_in_order": [
|
||
"Reuse agent-autonomous-runtime-control trace_ledger and work_item_progress as the first read-only event source.",
|
||
"Define a public-safe scene_state contract that maps runtime events to avatar state, room zone, task card, and animation state.",
|
||
"Add a read-only API loader for OpenClaw live ops scene state; no raw logs, raw sessions, SQLite, token values, or secret payloads.",
|
||
"Implement the animated 2D scene with deterministic fallback sample state and live readback state.",
|
||
"Add desktop/mobile browser smoke plus animation nonblank checks before production claim.",
|
||
"Promote to production only after P0 runtime truth blockers are not the active next action."
|
||
],
|
||
"safe_next_step": "after_current_p0_blockers_stop_being_the_active_next_action_define_openclaw_live_ops_scene_state_contract_and_route_skeleton",
|
||
"scope": {
|
||
"core_scene_model": [
|
||
"2D isometric operations room",
|
||
"OpenClaw / AI Agent avatars",
|
||
"workbench zones for MCP, RAG, KM, PlayBook, verifier, Telegram receipt, deploy/readback",
|
||
"presence and attention states",
|
||
"task queue and work item movement",
|
||
"continuous idle / walking / working / waiting / blocked / verified animations"
|
||
],
|
||
"experience_name": "OpenClaw Live Ops Space",
|
||
"primary_goal": "讓使用者用可視化空間看到 OpenClaw / AI Agent 正在處理任務、等待 verifier、交接、人機協作與回寫狀態。",
|
||
"surface_candidates": [
|
||
"/zh-TW/openclaw/live-ops-space",
|
||
"/zh-TW/awooop/work-items?view=live-ops"
|
||
]
|
||
},
|
||
"status": "queued_after_current_p0_runtime_truth_blockers",
|
||
"title": "OpenClaw Gather-like 持續動畫工作室",
|
||
"workplan_id": "P1-OPENCLAW-LIVE-OPS-SPACE"
|
||
}
|
||
],
|
||
"professional_execution_rules": [
|
||
"Treat noise as a risk input when it masks, delays, or misroutes a P0; otherwise keep it as context.",
|
||
"Do not split noise into a separate project; attach it to the P0 row it can affect.",
|
||
"Every P0 row must have one owner lane, one action, and measurable exit criteria.",
|
||
"Do not re-run cold-start, CD, or UI checks unless their result can change the next P0 action.",
|
||
"One blocker gets one checklist and one preflight; do not produce duplicate owner packets for the same missing evidence."
|
||
],
|
||
"schema_version": "awoooi_priority_work_order_readback_v1",
|
||
"source_refs": {
|
||
"credential_escrow_intake_readiness_api": "/api/v1/agents/credential-escrow-evidence-intake-readiness",
|
||
"credential_escrow_intake_readiness_service": "apps/api/src/services/credential_escrow_evidence_intake_readiness.py",
|
||
"credential_escrow_intake_readiness_tests": "apps/api/tests/test_credential_escrow_evidence_intake_readiness_api.py",
|
||
"credential_escrow_live_status": "/tmp/awoooi-p0-005-escrow-status-live.txt",
|
||
"credential_escrow_scorecard": "/tmp/awoooi-credential-escrow-intake-scorecard-20260629-1200-priority.json",
|
||
"delivery_closure_workbench": "https://awoooi.wooo.work/api/v1/agents/delivery-closure-workbench",
|
||
"dr_escrow_evidence_checklist_generator": "scripts/reboot-recovery/dr-escrow-evidence-checklist.py",
|
||
"dr_escrow_evidence_checklist_latest": "/tmp/awoooi-dr-escrow-evidence-checklist-current.json",
|
||
"full_stack_cold_start_check": "scripts/reboot-recovery/full-stack-cold-start-check.sh --monitor-read-only --no-color",
|
||
"gitea_authenticated_inventory_payload_validation_snapshot": "docs/operations/awoooi-gitea-authenticated-inventory-payload-validation.snapshot.json",
|
||
"gitea_authenticated_inventory_payload_validator": "scripts/security/gitea-authenticated-inventory-payload-validator.py",
|
||
"gitea_private_inventory_p0_scorecard": "docs/operations/awoooi-gitea-private-inventory-p0-scorecard.snapshot.json",
|
||
"gitea_repo_inventory_snapshot": "docs/security/gitea-repo-inventory.snapshot.json",
|
||
"global_scorecard": "~/.codex/product-runtime-governance-completion-scorecard.snapshot.json",
|
||
"owner_requested_openclaw_live_ops_space": "2026-06-29 owner request: Gather-like OpenClaw continuous animated live ops workspace",
|
||
"post_reboot_summary": "/home/wooo/reboot-recovery/reboot-auto-recovery-slo-20260629-201605/summary.txt",
|
||
"public_gitea_queue_readback": "ops/runner/read-public-gitea-actions-queue.py --json",
|
||
"reboot_auto_recovery_slo_metric": "/home/wooo/node_exporter_textfiles/reboot_auto_recovery_slo.prom",
|
||
"reboot_auto_recovery_slo_scorecard": "docs/operations/awoooi-reboot-auto-recovery-slo-scorecard.snapshot.json",
|
||
"reboot_auto_recovery_slo_scorecard_api": "/api/v1/agents/reboot-auto-recovery-slo-scorecard",
|
||
"stockplatform_freshness_readback": "https://stock.wooo.work/api/v1/system/freshness",
|
||
"stockplatform_ingestion_readback": "https://stock.wooo.work/api/v1/system/ingestion",
|
||
"workstation_dashboard": "~/.codex/codex-workstation-sync-dashboard.snapshot.json"
|
||
},
|
||
"status": "p0_ordered_readback_p0_006_stock_freshness_second_retry_still_blocked_p0_005_refs_waiting_p0_003_payload_validator_ready",
|
||
"stopped_or_do_not_use": [
|
||
{
|
||
"allowed_actions": 0,
|
||
"status": "removed_deleted_do_not_use",
|
||
"title": "GitHub 全產品備援鏡像",
|
||
"workplan_id": "P0-003A"
|
||
}
|
||
]
|
||
}
|