fix(ui): surface current cd run in p0 work items
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 37s
CD Pipeline / build-and-deploy (push) Successful in 10m28s
CD Pipeline / post-deploy-checks (push) Successful in 3m8s

This commit is contained in:
Your Name
2026-07-01 20:46:29 +08:00
parent c1873447b6
commit 87512d32f5
4 changed files with 48 additions and 2 deletions

View File

@@ -9047,7 +9047,10 @@
"blocker": "Current blocker",
"diagnosis": "SSH diagnosis",
"receipt": "Receipt contract",
"receiptValue": "{inputs} inputs / {outputs} outputs"
"receiptValue": "{inputs} inputs / {outputs} outputs",
"currentCd": "Latest CD run",
"currentCdValue": "#{run} · {status}",
"currentCdDetail": "closure: {state}"
},
"rootCause": {
"sessionTimeout": "Key accepted, session timeout",

View File

@@ -9047,7 +9047,10 @@
"blocker": "目前卡點",
"diagnosis": "SSH 診斷",
"receipt": "收件契約",
"receiptValue": "{inputs} inputs / {outputs} outputs"
"receiptValue": "{inputs} inputs / {outputs} outputs",
"currentCd": "最新 CD run",
"currentCdValue": "#{run} · {status}",
"currentCdDetail": "closure{state}"
},
"rootCause": {
"sessionTimeout": "Key acceptedsession timeout",

View File

@@ -1037,6 +1037,9 @@ type PriorityWorkOrderResponse = {
ai_loop_current_blocker_harbor_recovery_receipt_output_ids?: string[] | null;
ai_loop_current_blocker_queue_readback_normalizer_contract_count?: number | null;
ai_loop_current_blocker_queue_readback_normalizer_field_ids?: string[] | null;
ai_loop_current_blocker_current_cd_run_id?: string | null;
ai_loop_current_blocker_current_cd_run_status?: string | null;
ai_loop_current_blocker_deployment_closure_state?: string | null;
ai_loop_current_blocker_safe_next_action_id?: string | null;
ai_loop_current_blocker_safe_next_action_stage?: string | null;
ai_loop_current_blocker_safe_next_action_requires_local_console?: boolean | null;
@@ -1051,6 +1054,9 @@ type PriorityWorkOrderResponse = {
ai_loop_current_blocker_harbor_recovery_receipt_input_ids?: string[] | null;
ai_loop_current_blocker_harbor_recovery_receipt_output_ids?: string[] | null;
ai_loop_current_blocker_queue_readback_normalizer_field_ids?: string[] | null;
ai_loop_current_blocker_current_cd_run_id?: string | null;
ai_loop_current_blocker_current_cd_run_status?: string | null;
ai_loop_current_blocker_deployment_closure_state?: string | null;
ai_loop_current_blocker_safe_next_action_id?: string | null;
ai_loop_current_blocker_safe_next_action_stage?: string | null;
ai_loop_current_blocker_safe_next_action?: string | null;
@@ -7828,6 +7834,18 @@ function AiLoopLogSourceTagsPanel({
summary?.ai_loop_current_blocker_safe_next_action_requires_local_console ??
evidence?.ai_loop_current_blocker_safe_next_action_requires_local_console ??
false;
const currentCdRunId =
summary?.ai_loop_current_blocker_current_cd_run_id ??
evidence?.ai_loop_current_blocker_current_cd_run_id ??
"";
const currentCdRunStatus =
summary?.ai_loop_current_blocker_current_cd_run_status ??
evidence?.ai_loop_current_blocker_current_cd_run_status ??
"";
const deploymentClosureState =
summary?.ai_loop_current_blocker_deployment_closure_state ??
evidence?.ai_loop_current_blocker_deployment_closure_state ??
"";
const labelMap: Record<string, string> = {
project_id: t("tagLabels.projectId"),
product: t("tagLabels.product"),
@@ -7922,6 +7940,24 @@ function AiLoopLogSourceTagsPanel({
}),
tone: "border-[#cbd7bf] bg-[#f4faef] text-[#3d6b24]",
},
{
key: "current-cd",
icon: GitBranch,
label: t("visual.currentCd"),
value: currentCdRunId
? t("visual.currentCdValue", {
run: currentCdRunId,
status: currentCdRunStatus || "--",
})
: currentCdRunStatus || "--",
detail: deploymentClosureState
? t("visual.currentCdDetail", { state: deploymentClosureState })
: undefined,
tone:
currentCdRunStatus === "Failure"
? "border-[#f0c6a8] bg-[#fff8f1] text-[#9a4d16]"
: "border-[#c9d8ea] bg-[#eef5ff] text-[#1f5b9b]",
},
{
key: "safe-next-action",
icon: ArrowRight,

View File

@@ -546,9 +546,13 @@ def test_ai_log_controlled_writeback_consumer_stays_on_controlled_runtime_profil
text = _workflow_text()
expected_sources = [
"apps/api/src/services/ai_agent_log_controlled_writeback_consumer_readback.py)",
"apps/api/src/services/ai_agent_log_controlled_writeback_consumer_apply.py)",
"apps/api/tests/test_ai_agent_log_controlled_writeback_consumer_readback_api.py)",
"apps/api/tests/test_ai_agent_log_controlled_writeback_consumer_apply_api.py)",
"src/services/ai_agent_log_controlled_writeback_consumer_readback.py",
"src/services/ai_agent_log_controlled_writeback_consumer_apply.py",
"tests/test_ai_agent_log_controlled_writeback_consumer_readback_api.py",
"tests/test_ai_agent_log_controlled_writeback_consumer_apply_api.py",
]
for source in expected_sources:
assert source in text