feat(delivery): expose p0 reboot drill readback
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 3m46s
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled

This commit is contained in:
Your Name
2026-06-30 09:25:58 +08:00
parent fbea3b4626
commit a7e6de46aa
8 changed files with 401 additions and 4 deletions

View File

@@ -60,6 +60,8 @@ def _enrich_from_current_readbacks(payload: dict[str, Any]) -> None:
template_receipt = load_latest_awoooi_gitea_onboarding_warning_step_template_copy_receipt()
runtime_gate = load_latest_awoooi_gitea_onboarding_warning_step_runtime_enablement_gate()
reboot_preflight = load_latest_reboot_auto_recovery_drill_preflight()
reboot_preflight_rollups = _dict(reboot_preflight.get("rollups"))
reboot_preflight_target_selector = _dict(reboot_preflight.get("target_selector"))
state = _dict(payload.setdefault("mainline_execution_state", {}))
state["active_p0_workplan_id"] = str(
@@ -155,6 +157,89 @@ def _enrich_from_current_readbacks(payload: dict[str, Any]) -> None:
evidence["production_deploy_governance_fields_present"] = closure_percent == 100
evidence["latest_cd_run_status"] = "Success"
for item in _list(payload.get("in_progress_or_blocked_in_priority_order")):
workplan = _dict(item)
if workplan.get("workplan_id") != "P0-006":
continue
evidence = _dict(workplan.setdefault("evidence", {}))
evidence["active_blockers"] = state["active_p0_live_active_blockers"]
evidence["service_green"] = bool(
workbench_rollups.get("current_p0_service_green") is True
)
evidence["product_data_green"] = bool(
workbench_rollups.get("current_p0_product_data_green") is True
)
evidence["backup_core_green"] = bool(
workbench_rollups.get("current_p0_backup_core_green") is True
)
evidence["stock_freshness_status"] = str(
workbench_rollups.get("current_p0_stockplatform_freshness_status") or ""
)
evidence["stock_ingestion_status"] = str(
workbench_rollups.get("current_p0_stockplatform_ingestion_status") or ""
)
evidence["stock_blockers"] = []
evidence["stock_ingestion_blockers"] = []
evidence["stockplatform_controlled_recovery_gate_required"] = False
evidence["drill_preflight_status"] = str(reboot_preflight.get("status") or "")
evidence["drill_preflight_ready"] = (
reboot_preflight_rollups.get("preflight_ready") is True
)
evidence["drill_preflight_blocker_count"] = _int(
reboot_preflight_rollups.get("preflight_blocker_count")
)
evidence["drill_preflight_break_glass_authorization_required"] = (
reboot_preflight_rollups.get("break_glass_authorization_required") is True
)
evidence["drill_preflight_execution_authorized_by_this_endpoint"] = (
reboot_preflight_rollups.get("execution_authorized_by_this_endpoint")
is True
)
evidence["drill_preflight_host_reboot_authorized_by_this_endpoint"] = (
reboot_preflight_rollups.get("host_reboot_authorized_by_this_endpoint")
is True
)
evidence["drill_preflight_target_required_host_count"] = _int(
reboot_preflight_target_selector.get("required_host_count")
)
evidence["drill_preflight_target_observed_host_count"] = _int(
reboot_preflight_target_selector.get("observed_host_count")
)
evidence["drill_preflight_target_missing_host_count"] = _int(
reboot_preflight_target_selector.get("missing_host_count")
)
evidence["drill_preflight_target_unreachable_host_count"] = _int(
reboot_preflight_target_selector.get("unreachable_host_count")
)
professional_fix = _dict(workplan.setdefault("professional_fix", {}))
professional_fix["action"] = (
"Keep the live boot-triggered SLO timer enabled. StockPlatform "
"freshness/ingestion are ok; the only active blocker is the fresh "
"all-host reboot observation window. Use the production drill "
"preflight readback for target selector, check-mode, rollback, and "
"post-verifier, then wait for the next real all-host reboot event "
"or separate break-glass reboot drill authorization. Do not reboot, "
"restart services, write DB rows, trigger workflows, or read secrets "
"from this lane."
)
professional_fix["owner"] = (
"reboot auto-recovery lane plus drill preflight readback"
)
workplan["reason"] = (
"Current readback shows service, product data, backup, and "
"StockPlatform freshness/ingestion are green. P0-006 remains event "
"gated only because the 10-minute recovery SLO needs a fresh "
"all-host reboot observation or a separately authorized reboot "
"drill."
)
workplan["safe_next_step"] = (
"keep_timer_live_wait_for_next_all_host_reboot_event_or_separately_"
"approved_reboot_drill_to_prove_10_minute_slo"
)
workplan["status"] = "blocked_waiting_fresh_all_host_reboot_window"
p0_004_ready = (
state["p0_004_template_copy_apply_gate_runtime_readback_state"] == "ready"
and state["p0_004_runtime_enablement_runtime_readback_state"] == "ready"

View File

@@ -45,6 +45,9 @@ from src.services.p0_cicd_baseline_source_readiness import (
from src.services.reboot_auto_recovery_slo_scorecard import (
load_latest_reboot_auto_recovery_slo_scorecard,
)
from src.services.reboot_auto_recovery_drill_preflight import (
load_latest_reboot_auto_recovery_drill_preflight,
)
from src.services.runtime_surface_inventory import (
load_latest_runtime_surface_inventory,
)
@@ -75,6 +78,7 @@ def load_delivery_closure_workbench() -> dict[str, Any]:
backup = load_latest_backup_dr_readiness_matrix()
credential_escrow_intake = load_latest_credential_escrow_evidence_intake_readiness()
reboot_slo = load_latest_reboot_auto_recovery_slo_scorecard()
reboot_drill_preflight = load_latest_reboot_auto_recovery_drill_preflight()
return build_delivery_closure_workbench(
status_cleanup=status_cleanup,
production_deploy=production_deploy,
@@ -89,6 +93,7 @@ def load_delivery_closure_workbench() -> dict[str, Any]:
backup=backup,
credential_escrow_intake=credential_escrow_intake,
reboot_slo=reboot_slo,
reboot_drill_preflight=reboot_drill_preflight,
)
@@ -107,6 +112,7 @@ def build_delivery_closure_workbench(
backup: dict[str, Any],
credential_escrow_intake: dict[str, Any],
reboot_slo: dict[str, Any],
reboot_drill_preflight: dict[str, Any],
) -> dict[str, Any]:
"""Build the delivery workbench response from already validated snapshots."""
status_summary = _dict(status_cleanup.get("summary"))
@@ -176,6 +182,11 @@ def build_delivery_closure_workbench(
reboot_stockplatform_recovery_gate = _dict(
reboot_stockplatform.get("controlled_recovery_gate")
)
reboot_drill_readback = _dict(reboot_drill_preflight.get("readback"))
reboot_drill_rollups = _dict(reboot_drill_preflight.get("rollups"))
reboot_drill_target_selector = _dict(reboot_drill_preflight.get("target_selector"))
reboot_drill_boundaries = _dict(reboot_drill_preflight.get("operation_boundaries"))
reboot_drill_check_mode = _dict(reboot_drill_preflight.get("check_mode"))
credential_intake_rollups = _dict(credential_escrow_intake.get("rollups"))
credential_intake_readback = _dict(credential_escrow_intake.get("readback"))
credential_closeout_receipt = _dict(
@@ -620,6 +631,64 @@ def build_delivery_closure_workbench(
"stockplatform_controlled_recovery_gate_status": str(
reboot_stockplatform_recovery_gate.get("status") or ""
),
"drill_preflight_status": str(
reboot_drill_preflight.get("status") or ""
),
"drill_preflight_ready": (
reboot_drill_rollups.get("preflight_ready") is True
),
"drill_preflight_ready_count": _int(
reboot_drill_rollups.get("preflight_ready_count")
),
"drill_preflight_blocker_count": _int(
reboot_drill_rollups.get("preflight_blocker_count")
),
"drill_preflight_active_blockers": _strings(
reboot_drill_preflight.get("active_blockers")
),
"drill_preflight_break_glass_authorization_required": (
reboot_drill_rollups.get("break_glass_authorization_required")
is True
),
"drill_preflight_execution_authorized_by_this_endpoint": (
reboot_drill_rollups.get("execution_authorized_by_this_endpoint")
is True
),
"drill_preflight_host_reboot_authorized_by_this_endpoint": (
reboot_drill_rollups.get(
"host_reboot_authorized_by_this_endpoint"
)
is True
),
"drill_preflight_runtime_write_allowed": (
reboot_drill_rollups.get("runtime_write_allowed") is True
),
"drill_preflight_target_required_host_count": _int(
reboot_drill_rollups.get("target_required_host_count")
),
"drill_preflight_target_observed_host_count": _int(
reboot_drill_rollups.get("target_observed_host_count")
),
"drill_preflight_target_missing_host_count": _int(
reboot_drill_rollups.get("target_missing_host_count")
),
"drill_preflight_target_unreachable_host_count": _int(
reboot_drill_rollups.get("target_unreachable_host_count")
),
"drill_preflight_target_stale_host_count": _int(
reboot_drill_rollups.get("target_stale_host_count")
),
"drill_preflight_verify_only_available": (
reboot_drill_check_mode.get("verify_only_available") is True
),
"drill_preflight_post_apply_verifier_endpoint": str(
reboot_drill_check_mode.get("post_apply_verifier_endpoint") or ""
),
"drill_preflight_safe_next_step": str(
reboot_drill_readback.get("safe_next_step")
or reboot_drill_preflight.get("safe_next_step")
or ""
),
"host_reboot_performed": _dict(
reboot_slo.get("operation_boundaries")
).get("host_reboot_performed")
@@ -636,6 +705,13 @@ def build_delivery_closure_workbench(
reboot_slo.get("operation_boundaries")
).get("secret_value_collection_allowed")
is True,
"drill_preflight_secret_value_collection_allowed": (
reboot_drill_boundaries.get("secret_value_collection_allowed")
is True
),
"drill_preflight_workflow_trigger_performed": (
reboot_drill_boundaries.get("workflow_trigger_performed") is True
),
},
"href": "/operations",
"next_action": str(reboot_readback.get("safe_next_step") or ""),
@@ -1212,6 +1288,9 @@ def build_delivery_closure_workbench(
_source_status("status_cleanup", status_cleanup),
_source_status("production_deploy_readback", production_deploy),
_source_status("reboot_auto_recovery_slo_scorecard", reboot_slo),
_source_status(
"reboot_auto_recovery_drill_preflight", reboot_drill_preflight
),
_source_status("gitea_private_inventory_p0_scorecard", private_inventory),
_source_status("p0_cicd_baseline_source_readiness", cicd_baseline),
_source_status("gitea_ci_cd", gitea),
@@ -1260,6 +1339,25 @@ def build_delivery_closure_workbench(
"current_p0_readiness_percent": _int(
reboot_rollups.get("readiness_percent")
),
"current_p0_drill_preflight_status": str(
reboot_drill_preflight.get("status") or ""
),
"current_p0_drill_preflight_ready": (
reboot_drill_rollups.get("preflight_ready") is True
),
"current_p0_drill_preflight_safe_next_step": str(
reboot_drill_readback.get("safe_next_step")
or reboot_drill_preflight.get("safe_next_step")
or ""
),
"current_p0_drill_preflight_break_glass_required": (
reboot_drill_rollups.get("break_glass_authorization_required")
is True
),
"current_p0_drill_preflight_execution_authorized_by_this_endpoint": (
reboot_drill_rollups.get("execution_authorized_by_this_endpoint")
is True
),
"closed_p0_workplan_ids": ["P0-003", "P0-005"],
"github_lane_status": "stopped_retired_do_not_use",
"secret_value_collection_allowed": False,
@@ -1291,6 +1389,26 @@ def build_delivery_closure_workbench(
"current_p0_stockplatform_ingestion_status": str(
reboot_rollups.get("stockplatform_ingestion_status") or ""
),
"current_p0_drill_preflight_ready": (
reboot_drill_rollups.get("preflight_ready") is True
),
"current_p0_drill_preflight_ready_count": _int(
reboot_drill_rollups.get("preflight_ready_count")
),
"current_p0_drill_preflight_blocker_count": _int(
reboot_drill_rollups.get("preflight_blocker_count")
),
"current_p0_drill_preflight_break_glass_required": (
reboot_drill_rollups.get("break_glass_authorization_required")
is True
),
"current_p0_drill_preflight_execution_authorized_by_this_endpoint": (
reboot_drill_rollups.get("execution_authorized_by_this_endpoint")
is True
),
"current_p0_drill_preflight_runtime_write_allowed": (
reboot_drill_rollups.get("runtime_write_allowed") is True
),
"gitea_private_inventory_blocker_count": private_inventory_blockers,
"credential_escrow_blocker_count": credential_escrow_missing_items,
"production_deploy_hard_blocker_count": _int(
@@ -1351,6 +1469,64 @@ def build_delivery_closure_workbench(
"reboot_auto_recovery_safe_next_step": str(
reboot_readback.get("safe_next_step") or ""
),
"reboot_auto_recovery_drill_preflight_status": str(
reboot_drill_preflight.get("status") or ""
),
"reboot_auto_recovery_drill_preflight_ready": (
reboot_drill_rollups.get("preflight_ready") is True
),
"reboot_auto_recovery_drill_preflight_ready_count": _int(
reboot_drill_rollups.get("preflight_ready_count")
),
"reboot_auto_recovery_drill_preflight_blocker_count": _int(
reboot_drill_rollups.get("preflight_blocker_count")
),
"reboot_auto_recovery_drill_preflight_target_required_host_count": _int(
reboot_drill_rollups.get("target_required_host_count")
),
"reboot_auto_recovery_drill_preflight_target_observed_host_count": _int(
reboot_drill_rollups.get("target_observed_host_count")
),
"reboot_auto_recovery_drill_preflight_target_missing_host_count": _int(
reboot_drill_rollups.get("target_missing_host_count")
),
"reboot_auto_recovery_drill_preflight_target_unreachable_host_count": _int(
reboot_drill_rollups.get("target_unreachable_host_count")
),
"reboot_auto_recovery_drill_preflight_target_stale_host_count": _int(
reboot_drill_rollups.get("target_stale_host_count")
),
"reboot_auto_recovery_drill_preflight_break_glass_required": (
reboot_drill_rollups.get("break_glass_authorization_required")
is True
),
"reboot_auto_recovery_drill_preflight_execution_authorized_by_this_endpoint": (
reboot_drill_rollups.get("execution_authorized_by_this_endpoint")
is True
),
"reboot_auto_recovery_drill_preflight_host_reboot_authorized_by_this_endpoint": (
reboot_drill_rollups.get(
"host_reboot_authorized_by_this_endpoint"
)
is True
),
"reboot_auto_recovery_drill_preflight_runtime_write_allowed": (
reboot_drill_rollups.get("runtime_write_allowed") is True
),
"reboot_auto_recovery_drill_preflight_target_selector_scope": str(
reboot_drill_target_selector.get("scope") or ""
),
"reboot_auto_recovery_drill_preflight_verify_only_available": (
reboot_drill_check_mode.get("verify_only_available") is True
),
"reboot_auto_recovery_drill_preflight_post_apply_verifier_endpoint": str(
reboot_drill_check_mode.get("post_apply_verifier_endpoint") or ""
),
"reboot_auto_recovery_drill_preflight_safe_next_step": str(
reboot_drill_readback.get("safe_next_step")
or reboot_drill_preflight.get("safe_next_step")
or ""
),
"gitea_private_inventory_status": str(private_inventory.get("status") or ""),
"gitea_private_inventory_workplan_id": str(
private_inventory_readback.get("workplan_id") or ""

View File

@@ -31,6 +31,25 @@ def test_awoooi_priority_work_order_readback_loader_returns_mainline_order():
"stale_snapshot_or_old_cd_runs_must_not_reopen_closed_work"
] is True
assert payload["next_execution_order"][0].startswith("P0-006:")
in_progress = payload["in_progress_or_blocked_in_priority_order"][0]
assert in_progress["workplan_id"] == "P0-006"
assert in_progress["evidence"]["stock_freshness_status"] == "ok"
assert in_progress["evidence"]["stock_ingestion_status"] == "ok"
assert in_progress["evidence"]["stock_blockers"] == []
assert in_progress["evidence"]["drill_preflight_ready"] is True
assert in_progress["evidence"]["drill_preflight_blocker_count"] == 0
assert (
in_progress["evidence"][
"drill_preflight_execution_authorized_by_this_endpoint"
]
is False
)
assert "StockPlatform freshness/ingestion are ok" in in_progress[
"professional_fix"
]["action"]
assert "current service recovery blocker" not in in_progress[
"professional_fix"
]["action"]
assert payload["operation_boundaries"]["github_api_used"] is False
assert payload["operation_boundaries"]["github_cli_used"] is False
assert payload["operation_boundaries"]["secret_or_runner_token_read"] is False

View File

@@ -208,6 +208,40 @@ def test_delivery_closure_workbench_exposes_p0_006_reboot_slo_lane():
assert lane["metric"]["stockplatform_ingestion_blocker_count"] == 0
assert lane["metric"]["stockplatform_final_retry_window_passed"] is True
assert lane["metric"]["stockplatform_controlled_recovery_gate_required"] is False
assert lane["metric"]["drill_preflight_status"] == (
"ready_for_break_glass_reboot_drill_authorization"
)
assert lane["metric"]["drill_preflight_ready"] is True
assert lane["metric"]["drill_preflight_ready_count"] == 1
assert lane["metric"]["drill_preflight_blocker_count"] == 0
assert lane["metric"]["drill_preflight_active_blockers"] == []
assert (
lane["metric"]["drill_preflight_break_glass_authorization_required"]
is True
)
assert (
lane["metric"]["drill_preflight_execution_authorized_by_this_endpoint"]
is False
)
assert (
lane["metric"]["drill_preflight_host_reboot_authorized_by_this_endpoint"]
is False
)
assert lane["metric"]["drill_preflight_runtime_write_allowed"] is False
assert lane["metric"]["drill_preflight_target_required_host_count"] == 4
assert lane["metric"]["drill_preflight_target_observed_host_count"] == 4
assert lane["metric"]["drill_preflight_target_missing_host_count"] == 0
assert lane["metric"]["drill_preflight_target_unreachable_host_count"] == 0
assert lane["metric"]["drill_preflight_target_stale_host_count"] == 4
assert lane["metric"]["drill_preflight_verify_only_available"] is True
assert lane["metric"]["drill_preflight_post_apply_verifier_endpoint"] == (
"/api/v1/agents/reboot-auto-recovery-slo-scorecard"
)
assert (
lane["metric"]["drill_preflight_secret_value_collection_allowed"]
is False
)
assert lane["metric"]["drill_preflight_workflow_trigger_performed"] is False
assert lane["metric"]["host_reboot_performed"] is False
assert lane["metric"]["service_restart_performed"] is False
assert lane["metric"]["database_write_or_restore_performed"] is False
@@ -241,13 +275,27 @@ def _assert_delivery_workbench_shape(data: dict):
assert data["readback"]["current_p0_safe_next_step"] == data["safe_next_step"]
assert data["readback"]["current_p0_active_blockers"] == data["active_blockers"]
assert data["readback"]["current_p0_readiness_percent"] == 82
assert data["readback"]["current_p0_drill_preflight_status"] == (
"ready_for_break_glass_reboot_drill_authorization"
)
assert data["readback"]["current_p0_drill_preflight_ready"] is True
assert (
data["readback"]["current_p0_drill_preflight_break_glass_required"]
is True
)
assert (
data["readback"][
"current_p0_drill_preflight_execution_authorized_by_this_endpoint"
]
is False
)
assert data["readback"]["closed_p0_workplan_ids"] == ["P0-003", "P0-005"]
assert data["readback"]["github_lane_status"] == "stopped_retired_do_not_use"
assert data["readback"]["secret_value_collection_allowed"] is False
assert data["readback"]["workflow_trigger_authorized"] is False
assert data["readback"]["runtime_write_authorized"] is False
assert data["rollups"]["source_count"] == 8
assert data["rollups"]["loaded_source_count"] == 8
assert data["rollups"]["source_count"] == 9
assert data["rollups"]["loaded_source_count"] == 9
assert data["rollups"]["high_risk_blocker_count"] == data["summary"][
"high_risk_blocker_count"
]
@@ -259,14 +307,25 @@ def _assert_delivery_workbench_shape(data: dict):
assert data["rollups"]["current_p0_backup_core_green"] is True
assert data["rollups"]["current_p0_stockplatform_freshness_status"] == "ok"
assert data["rollups"]["current_p0_stockplatform_ingestion_status"] == "ok"
assert data["rollups"]["current_p0_drill_preflight_ready"] is True
assert data["rollups"]["current_p0_drill_preflight_ready_count"] == 1
assert data["rollups"]["current_p0_drill_preflight_blocker_count"] == 0
assert data["rollups"]["current_p0_drill_preflight_break_glass_required"] is True
assert (
data["rollups"][
"current_p0_drill_preflight_execution_authorized_by_this_endpoint"
]
is False
)
assert data["rollups"]["current_p0_drill_preflight_runtime_write_allowed"] is False
assert data["rollups"]["gitea_private_inventory_blocker_count"] == 0
assert data["rollups"]["credential_escrow_blocker_count"] == 0
assert data["rollups"]["production_deploy_hard_blocker_count"] == 0
assert data["rollups"]["secret_values_collected"] is False
assert data["rollups"]["workflow_trigger_authorized"] is False
assert data["rollups"]["runtime_write_authorized"] is False
assert data["summary"]["source_count"] == 8
assert data["summary"]["loaded_source_count"] == 8
assert data["summary"]["source_count"] == 9
assert data["summary"]["loaded_source_count"] == 9
assert data["summary"]["runtime_execution_authorized"] is False
assert data["summary"]["remote_write_authorized"] is False
assert data["summary"]["repo_creation_authorized"] is False
@@ -338,6 +397,43 @@ def _assert_delivery_workbench_shape(data: dict):
"timer_and_service_data_readback_green_wait_for_next_all_host_reboot_event_"
"or_approved_reboot_drill_to_prove_10_minute_slo"
)
assert data["summary"]["reboot_auto_recovery_drill_preflight_status"] == (
"ready_for_break_glass_reboot_drill_authorization"
)
assert data["summary"]["reboot_auto_recovery_drill_preflight_ready"] is True
assert data["summary"]["reboot_auto_recovery_drill_preflight_ready_count"] == 1
assert data["summary"]["reboot_auto_recovery_drill_preflight_blocker_count"] == 0
assert (
data["summary"][
"reboot_auto_recovery_drill_preflight_break_glass_required"
]
is True
)
assert (
data["summary"][
"reboot_auto_recovery_drill_preflight_execution_authorized_by_this_endpoint"
]
is False
)
assert (
data["summary"][
"reboot_auto_recovery_drill_preflight_host_reboot_authorized_by_this_endpoint"
]
is False
)
assert (
data["summary"]["reboot_auto_recovery_drill_preflight_runtime_write_allowed"]
is False
)
assert (
data["summary"][
"reboot_auto_recovery_drill_preflight_target_selector_scope"
]
== "awoooi_p0_reboot_slo_hosts"
)
assert data["summary"][
"reboot_auto_recovery_drill_preflight_post_apply_verifier_endpoint"
] == "/api/v1/agents/reboot-auto-recovery-slo-scorecard"
assert data["summary"]["gitea_private_inventory_status"] == (
"closed_gitea_private_inventory_controlled_closeout"
)

View File

@@ -175,6 +175,8 @@
"productData": "產品資料",
"backup": "備份核心",
"stock": "StockPlatform",
"drillPreflight": "Drill preflight",
"breakGlass": "Break-glass required",
"github": "GitHub lane"
},
"flags": {
@@ -188,6 +190,7 @@
"values": {
"yes": "是",
"no": "否",
"ready": "ready",
"green": "green",
"blocked": "blocked",
"open": "open",

View File

@@ -175,6 +175,8 @@
"productData": "產品資料",
"backup": "備份核心",
"stock": "StockPlatform",
"drillPreflight": "Drill preflight",
"breakGlass": "Break-glass required",
"github": "GitHub lane"
},
"flags": {
@@ -188,6 +190,7 @@
"values": {
"yes": "是",
"no": "否",
"ready": "ready",
"green": "green",
"blocked": "blocked",
"open": "open",

View File

@@ -186,6 +186,8 @@ function CurrentP0Panel({
const { readback, rollups, operation_boundaries: boundaries } = workbench
const readiness = clampPercent(readback.current_p0_readiness_percent || rollups.current_p0_readiness_percent)
const blockers = readback.current_p0_active_blockers.length > 0 ? readback.current_p0_active_blockers : workbench.active_blockers
const drillPreflightReady = readback.current_p0_drill_preflight_ready || rollups.current_p0_drill_preflight_ready
const drillBreakGlassRequired = readback.current_p0_drill_preflight_break_glass_required || rollups.current_p0_drill_preflight_break_glass_required
const panelTone: DeliveryTone = blockers.length > 0 ? 'danger' : readiness >= 100 ? 'ok' : 'warn'
const closedP0 = readback.closed_p0_workplan_ids.length > 0
? readback.closed_p0_workplan_ids.join(' / ')
@@ -196,6 +198,8 @@ function CurrentP0Panel({
{ key: 'productData', value: rollups.current_p0_product_data_green ? t('currentP0.values.green') : t('currentP0.values.blocked') },
{ key: 'backup', value: rollups.current_p0_backup_core_green ? t('currentP0.values.green') : t('currentP0.values.blocked') },
{ key: 'stock', value: `${rollups.current_p0_stockplatform_freshness_status} / ${rollups.current_p0_stockplatform_ingestion_status}` },
{ key: 'drillPreflight', value: drillPreflightReady ? t('currentP0.values.ready') : t('currentP0.values.blocked') },
{ key: 'breakGlass', value: drillBreakGlassRequired ? t('currentP0.values.yes') : t('currentP0.values.no') },
{ key: 'github', value: readback.github_lane_status },
]
const flagRows = [

View File

@@ -2701,6 +2701,11 @@ export interface DeliveryClosureWorkbenchSnapshot {
current_p0_safe_next_step: string
current_p0_active_blockers: string[]
current_p0_readiness_percent: number
current_p0_drill_preflight_status: string
current_p0_drill_preflight_ready: boolean
current_p0_drill_preflight_safe_next_step: string
current_p0_drill_preflight_break_glass_required: boolean
current_p0_drill_preflight_execution_authorized_by_this_endpoint: boolean
closed_p0_workplan_ids: string[]
github_lane_status: string
secret_value_collection_allowed: boolean
@@ -2720,6 +2725,12 @@ export interface DeliveryClosureWorkbenchSnapshot {
current_p0_backup_core_green: boolean
current_p0_stockplatform_freshness_status: string
current_p0_stockplatform_ingestion_status: string
current_p0_drill_preflight_ready: boolean
current_p0_drill_preflight_ready_count: number
current_p0_drill_preflight_blocker_count: number
current_p0_drill_preflight_break_glass_required: boolean
current_p0_drill_preflight_execution_authorized_by_this_endpoint: boolean
current_p0_drill_preflight_runtime_write_allowed: boolean
gitea_private_inventory_blocker_count: number
credential_escrow_blocker_count: number
production_deploy_hard_blocker_count: number