diff --git a/apps/api/tests/test_stockplatform_public_api_runtime_readback.py b/apps/api/tests/test_stockplatform_public_api_runtime_readback.py index cb2f043a..99ec92c9 100644 --- a/apps/api/tests/test_stockplatform_public_api_runtime_readback.py +++ b/apps/api/tests/test_stockplatform_public_api_runtime_readback.py @@ -21,19 +21,19 @@ def test_stockplatform_public_api_runtime_readback_blocks_live_502(): assert payload["priority"] == "P0-006" assert payload["status"] == "blocked_stockplatform_public_api_runtime_drift" assert payload["runtime_ready"] is False - assert payload["live_drift_from_committed_scorecard"] is False + assert payload["live_drift_from_committed_scorecard"] is True assert payload["readback"]["api_health_http_status"] == 502 assert payload["readback"]["freshness_http_status"] == 502 assert payload["readback"]["ingestion_http_status"] == 502 - assert payload["readback"]["committed_freshness_status"] == "not_configured" - assert payload["readback"]["committed_ingestion_status"] == "not_configured" - assert payload["readback"]["live_drift_from_committed_scorecard"] is False + assert payload["readback"]["committed_freshness_status"] == "ok" + assert payload["readback"]["committed_ingestion_status"] == "ok" + assert payload["readback"]["live_drift_from_committed_scorecard"] is True assert payload["rollups"]["public_web_health_ok"] is True assert payload["rollups"]["public_api_health_ok"] is False assert payload["rollups"]["http_502_count"] == 3 - assert payload["rollups"]["committed_stockplatform_freshness_ok"] is False - assert payload["rollups"]["committed_stockplatform_ingestion_ok"] is False - assert payload["rollups"]["live_drift_from_committed_scorecard"] is False + assert payload["rollups"]["committed_stockplatform_freshness_ok"] is True + assert payload["rollups"]["committed_stockplatform_ingestion_ok"] is True + assert payload["rollups"]["live_drift_from_committed_scorecard"] is True assert payload["rollups"]["data_dependency_classification"] == "none" assert payload["rollups"]["postgres_not_ready"] is False assert payload["safe_next_step"] == ( diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index ed10059d..fcbf87cb 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -52882,18 +52882,22 @@ production browser smoke: **下一步**: - commit / push 到 Gitea main 後讀回 CD;deploy 後驗證 `/api/v1/agents/awoooi-priority-work-order-readback` 與 `/zh-TW/awooop/work-items` 顯示 55 個插入工作項與新增 spotlight。 -## 2026-07-02 — P0 reboot Windows99 management channel CD #4402 workbench contract 修正 +## 2026-07-02 — P0 reboot Windows99 management channel CD #4402/#4403 contract 修正 **完成內容**: - Gitea public queue 讀回 `aaa617f00 fix(reboot): expose windows99 management channel readback` 的 `cd.yaml` run `#4402` 狀態為 `Failure`;production API 仍停在舊版,不能宣稱已部署。 - 公開 tests log 定位失敗點:`apps/api/tests/test_delivery_closure_workbench_api.py::test_delivery_closure_workbench_endpoint_returns_product_summary` 仍硬期待舊 safe next step `collect_windows99_vmware_autostart_verify_readback_then_rerun_all_host_reboot_scorecard_no_secret_no_reboot`。 - 已同步 delivery closure workbench 測試 contract 到新版 reboot scorecard truth:safe next step 改為 `restore_windows99_no_secret_management_channel_or_collect_local_console_verify_readback_then_rerun_reboot_scorecard_no_reboot`,active blockers 從 `13` 收斂到 `11`,readiness 從 `15` 升為 `43`,`product_data_green=true`,StockPlatform freshness / ingestion 為 `ok`,drill preflight blockers 從 `9` 收斂到 `5`。 - 修正重點是測試與 readback contract 補齊,不是放寬 SLO;`windows99_remote_execution_channel_unavailable` 與 `windows99_vmware_autostart_readback_missing` 仍為 P0 blocker。 +- `#4403` 第二輪 CD 再定位到 `apps/api/tests/test_stockplatform_public_api_runtime_readback.py::test_stockplatform_public_api_runtime_readback_blocks_live_502`:現在 committed scorecard 已是 StockPlatform freshness / ingestion `ok`,因此模擬 live 502 時 `live_drift_from_committed_scorecard=true` 才是正確判讀;已修正測試,避免未來把 live 502 regression 誤判成 no drift。 **本地驗證結果**: - `DATABASE_URL=postgresql+asyncpg://test:test@localhost/test PYTHONPATH=apps/api python3.11 -m pytest apps/api/tests/test_delivery_closure_workbench_api.py -q -p no:cacheprovider`:`6 passed`。 - `DATABASE_URL=postgresql+asyncpg://test:test@localhost/test PYTHONPATH=apps/api python3.11 -m pytest ops/runner/test_cd_controlled_runtime_profile.py scripts/reboot-recovery/tests/test_reboot_auto_recovery_slo_scorecard.py apps/api/tests/test_reboot_auto_recovery_slo_scorecard_api.py apps/api/tests/test_awoooi_priority_work_order_readback_api.py apps/api/tests/test_delivery_closure_workbench_api.py -q -p no:cacheprovider`:`79 passed`。 +- `DATABASE_URL=postgresql+asyncpg://test:test@localhost/test PYTHONPATH=apps/api python3.11 -m pytest apps/api/tests/test_stockplatform_public_api_runtime_readback.py -q -p no:cacheprovider`:`5 passed`。 +- `DATABASE_URL=postgresql+asyncpg://test:test@localhost/test PYTHONPATH=apps/api python3.11 -m pytest ops/runner/test_cd_controlled_runtime_profile.py scripts/reboot-recovery/tests/test_reboot_auto_recovery_slo_scorecard.py apps/api/tests/test_reboot_auto_recovery_slo_scorecard_api.py apps/api/tests/test_awoooi_priority_work_order_readback_api.py apps/api/tests/test_delivery_closure_workbench_api.py apps/api/tests/test_stockplatform_public_api_runtime_readback.py -q -p no:cacheprovider`:`84 passed`。 - `python3.11 -m py_compile apps/api/tests/test_delivery_closure_workbench_api.py scripts/reboot-recovery/windows99-management-channel-probe.py scripts/reboot-recovery/reboot-auto-recovery-slo-scorecard.py apps/api/src/services/reboot_auto_recovery_slo_scorecard.py apps/api/src/services/awoooi_priority_work_order_readback.py apps/api/src/services/delivery_closure_workbench.py`:通過。 +- `python3.11 -m py_compile apps/api/tests/test_stockplatform_public_api_runtime_readback.py apps/api/src/services/stockplatform_public_api_runtime_readback.py`:通過。 - `git diff --check`:通過。 **仍維持**: