fix(iwooos): surface controlled cd lane blocker in work items
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 49s
CD Pipeline / build-and-deploy (push) Successful in 4m46s
CD Pipeline / post-deploy-checks (push) Has been cancelled
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 49s
CD Pipeline / build-and-deploy (push) Successful in 4m46s
CD Pipeline / post-deploy-checks (push) Has been cancelled
This commit is contained in:
@@ -9076,7 +9076,7 @@
|
||||
"aiLoopLogSources": {
|
||||
"eyebrow": "P0 visual state",
|
||||
"title": "Current blocker and repair intake",
|
||||
"subtitle": "Shows the blocker, SSH diagnosis, and receipt contract first; technical fields are collapsed so the workbench does not read like a long text list.",
|
||||
"subtitle": "Shows the blocker, blocker diagnosis, and receipt contract first; technical fields are collapsed so the workbench does not read like a long text list.",
|
||||
"loading": "Loading LOG source labels",
|
||||
"empty": "No LOG source labels read back yet.",
|
||||
"blocker": "Current blocker: {value}",
|
||||
@@ -9084,7 +9084,7 @@
|
||||
"details": "Expand technical fields",
|
||||
"visual": {
|
||||
"blocker": "Current blocker",
|
||||
"diagnosis": "SSH diagnosis",
|
||||
"diagnosis": "Blocker diagnosis",
|
||||
"receipt": "Receipt contract",
|
||||
"receiptValue": "{inputs} inputs / {outputs} outputs",
|
||||
"currentCd": "Latest CD run",
|
||||
@@ -9094,8 +9094,23 @@
|
||||
"rootCause": {
|
||||
"sessionTimeout": "Key accepted, session timeout",
|
||||
"offerTimeout": "Publickey offer timeout",
|
||||
"controlledCdLaneGuardrails": "SSH control path and Harbor v2 are readable; controlled CD lane guardrails are still blocked.",
|
||||
"unknown": "Waiting for queue diagnosis"
|
||||
},
|
||||
"phases": {
|
||||
"ssh": {
|
||||
"label": "SSH control path",
|
||||
"value": "ready"
|
||||
},
|
||||
"harbor": {
|
||||
"label": "Harbor v2",
|
||||
"value": "ready"
|
||||
},
|
||||
"cdLane": {
|
||||
"label": "Controlled CD lane",
|
||||
"value": "guardrails blocked"
|
||||
}
|
||||
},
|
||||
"metrics": {
|
||||
"tags": "Tags",
|
||||
"groups": "Groups",
|
||||
|
||||
@@ -9076,7 +9076,7 @@
|
||||
"aiLoopLogSources": {
|
||||
"eyebrow": "P0 視覺狀態",
|
||||
"title": "目前卡點與修復收件",
|
||||
"subtitle": "先顯示目前真正卡住的 blocker、SSH 診斷與收件契約;技術欄位收在展開區,避免把工作台變成長文字清單。",
|
||||
"subtitle": "先顯示目前真正卡住的 blocker、阻塞診斷與收件契約;技術欄位收在展開區,避免把工作台變成長文字清單。",
|
||||
"loading": "讀取 LOG 來源貼標中",
|
||||
"empty": "尚未讀回 LOG 來源貼標。",
|
||||
"blocker": "Current blocker:{value}",
|
||||
@@ -9084,7 +9084,7 @@
|
||||
"details": "展開技術欄位",
|
||||
"visual": {
|
||||
"blocker": "目前卡點",
|
||||
"diagnosis": "SSH 診斷",
|
||||
"diagnosis": "阻塞診斷",
|
||||
"receipt": "收件契約",
|
||||
"receiptValue": "{inputs} inputs / {outputs} outputs",
|
||||
"currentCd": "最新 CD run",
|
||||
@@ -9094,8 +9094,23 @@
|
||||
"rootCause": {
|
||||
"sessionTimeout": "Key accepted,session timeout",
|
||||
"offerTimeout": "Publickey offer timeout",
|
||||
"controlledCdLaneGuardrails": "SSH 控制通道與 Harbor v2 已可讀;目前卡在 controlled CD lane guardrails。",
|
||||
"unknown": "等待 queue 診斷"
|
||||
},
|
||||
"phases": {
|
||||
"ssh": {
|
||||
"label": "SSH 控制通道",
|
||||
"value": "ready"
|
||||
},
|
||||
"harbor": {
|
||||
"label": "Harbor v2",
|
||||
"value": "ready"
|
||||
},
|
||||
"cdLane": {
|
||||
"label": "Controlled CD lane",
|
||||
"value": "guardrails blocked"
|
||||
}
|
||||
},
|
||||
"metrics": {
|
||||
"tags": "Tags",
|
||||
"groups": "分群鍵",
|
||||
|
||||
@@ -7851,6 +7851,9 @@ function AiLoopLogSourceTagsPanel({
|
||||
summary?.ai_loop_current_blocker_deployment_closure_state ??
|
||||
evidence?.ai_loop_current_blocker_deployment_closure_state ??
|
||||
"";
|
||||
const currentBlockerId = summary?.ai_loop_current_blocker_id ?? "";
|
||||
const controlledCdLaneGuardrailsBlocked =
|
||||
currentBlockerId === "controlled_cd_lane_guardrails_blocked";
|
||||
const labelMap: Record<string, string> = {
|
||||
project_id: t("tagLabels.projectId"),
|
||||
product: t("tagLabels.product"),
|
||||
@@ -7916,19 +7919,44 @@ function AiLoopLogSourceTagsPanel({
|
||||
: queueNormalizerFieldIds.some((id) => id.includes("publickey_offer_timeout"))
|
||||
? t("rootCause.offerTimeout")
|
||||
: t("rootCause.unknown");
|
||||
const blockerDiagnosis = controlledCdLaneGuardrailsBlocked
|
||||
? t("rootCause.controlledCdLaneGuardrails")
|
||||
: rootCause;
|
||||
const controlledCdLanePhases = controlledCdLaneGuardrailsBlocked
|
||||
? [
|
||||
{
|
||||
key: "ssh-control-path",
|
||||
label: t("phases.ssh.label"),
|
||||
value: t("phases.ssh.value"),
|
||||
tone: "border-[#b9d9c2] bg-[#f2fbf3] text-[#236332]",
|
||||
},
|
||||
{
|
||||
key: "harbor-v2",
|
||||
label: t("phases.harbor.label"),
|
||||
value: t("phases.harbor.value"),
|
||||
tone: "border-[#b9d9c2] bg-[#f2fbf3] text-[#236332]",
|
||||
},
|
||||
{
|
||||
key: "controlled-cd-lane",
|
||||
label: t("phases.cdLane.label"),
|
||||
value: t("phases.cdLane.value"),
|
||||
tone: "border-[#f0c6a8] bg-[#fff8f1] text-[#9a4d16]",
|
||||
},
|
||||
]
|
||||
: [];
|
||||
const visualCards = [
|
||||
{
|
||||
key: "blocker",
|
||||
icon: TriangleAlert,
|
||||
label: t("visual.blocker"),
|
||||
value: summary?.ai_loop_current_blocker_id ?? "--",
|
||||
value: currentBlockerId || "--",
|
||||
tone: "border-[#f0c6a8] bg-[#fff8f1] text-[#9a4d16]",
|
||||
},
|
||||
{
|
||||
key: "diagnosis",
|
||||
icon: SearchCheck,
|
||||
label: t("visual.diagnosis"),
|
||||
value: rootCause,
|
||||
value: blockerDiagnosis,
|
||||
tone: "border-[#c9d8ea] bg-[#eef5ff] text-[#1f5b9b]",
|
||||
},
|
||||
{
|
||||
@@ -8025,6 +8053,29 @@ function AiLoopLogSourceTagsPanel({
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
{controlledCdLanePhases.length > 0 ? (
|
||||
<div
|
||||
className="mt-3 grid gap-2 border border-[#e0ddd4] bg-[#faf9f3] p-2 sm:grid-cols-3"
|
||||
data-testid="ai-loop-controlled-cd-lane-phases"
|
||||
>
|
||||
{controlledCdLanePhases.map((phase) => (
|
||||
<div
|
||||
key={phase.key}
|
||||
className={cn(
|
||||
"min-w-0 border px-3 py-2",
|
||||
phase.tone
|
||||
)}
|
||||
>
|
||||
<div className="text-[11px] font-semibold text-[#5f5b52]">
|
||||
{phase.label}
|
||||
</div>
|
||||
<div className="mt-1 break-words font-mono text-xs font-semibold text-[#141413]">
|
||||
{loading ? "--" : phase.value}
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
) : null}
|
||||
<div className="mt-4 grid gap-px border border-[#e0ddd4] bg-[#e0ddd4] sm:grid-cols-2 xl:grid-cols-4">
|
||||
{metrics.map((metric) => {
|
||||
const Icon = metric.icon;
|
||||
|
||||
Reference in New Issue
Block a user