fix(iwooos): scope aggregate same-run status
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m22s
CD Pipeline / build-and-deploy (push) Successful in 14m50s
CD Pipeline / post-deploy-checks (push) Successful in 2m5s
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m22s
CD Pipeline / build-and-deploy (push) Successful in 14m50s
CD Pipeline / post-deploy-checks (push) Successful in 2m5s
This commit is contained in:
@@ -37,6 +37,10 @@ type Copy = {
|
|||||||
nist: string;
|
nist: string;
|
||||||
siem: string;
|
siem: string;
|
||||||
strictRun: string;
|
strictRun: string;
|
||||||
|
aggregateVerified: string;
|
||||||
|
aggregateOpen: string;
|
||||||
|
aggregateScopeNote: string;
|
||||||
|
aggregateCountsTitle: string;
|
||||||
verified: string;
|
verified: string;
|
||||||
functions: string;
|
functions: string;
|
||||||
framework: string;
|
framework: string;
|
||||||
@@ -88,7 +92,11 @@ const COPY: Record<"zh" | "en", Copy> = {
|
|||||||
assetTypes: "資產類型",
|
assetTypes: "資產類型",
|
||||||
nist: "NIST 控制",
|
nist: "NIST 控制",
|
||||||
siem: "SIEM 閉環",
|
siem: "SIEM 閉環",
|
||||||
strictRun: "同 run 閉環",
|
strictRun: "全域 AI run",
|
||||||
|
aggregateVerified: "全域已驗證",
|
||||||
|
aggregateOpen: "全域未閉環",
|
||||||
|
aggregateScopeNote: "不代表目前 Wazuh lane",
|
||||||
|
aggregateCountsTitle: "全域 AI run 階段收據",
|
||||||
verified: "24h 已驗證",
|
verified: "24h 已驗證",
|
||||||
functions: "治理六功能",
|
functions: "治理六功能",
|
||||||
framework: "完整資安框架",
|
framework: "完整資安框架",
|
||||||
@@ -121,8 +129,8 @@ const COPY: Record<"zh" | "en", Copy> = {
|
|||||||
failed: "失敗",
|
failed: "失敗",
|
||||||
failedCollectors: "失敗 Collector",
|
failedCollectors: "失敗 Collector",
|
||||||
failedCollectorsUnavailable: "失敗原因待安全分類",
|
failedCollectorsUnavailable: "失敗原因待安全分類",
|
||||||
sameRunMissing: "尚無同 run 閉環證據",
|
sameRunMissing: "全域 AI run 尚未閉環;不代表目前 Wazuh lane",
|
||||||
sameRunVerified: "18 段同 run 閉環已驗證",
|
sameRunVerified: "全域 AI run 已驗證;不代表目前 Wazuh lane",
|
||||||
loading: "正在載入資安控制平面",
|
loading: "正在載入資安控制平面",
|
||||||
unavailable: "Live readback 無法取得",
|
unavailable: "Live readback 無法取得",
|
||||||
refresh: "重新整理資安控制平面",
|
refresh: "重新整理資安控制平面",
|
||||||
@@ -138,7 +146,11 @@ const COPY: Record<"zh" | "en", Copy> = {
|
|||||||
assetTypes: "Asset types",
|
assetTypes: "Asset types",
|
||||||
nist: "NIST control",
|
nist: "NIST control",
|
||||||
siem: "SIEM closure",
|
siem: "SIEM closure",
|
||||||
strictRun: "Same-run closure",
|
strictRun: "Aggregate AI run",
|
||||||
|
aggregateVerified: "Aggregate verified",
|
||||||
|
aggregateOpen: "Aggregate open",
|
||||||
|
aggregateScopeNote: "Does not represent the current Wazuh lane",
|
||||||
|
aggregateCountsTitle: "Aggregate AI run stage receipts",
|
||||||
verified: "Verified 24h",
|
verified: "Verified 24h",
|
||||||
functions: "Six functions",
|
functions: "Six functions",
|
||||||
framework: "Security framework",
|
framework: "Security framework",
|
||||||
@@ -171,8 +183,8 @@ const COPY: Record<"zh" | "en", Copy> = {
|
|||||||
failed: "Failed",
|
failed: "Failed",
|
||||||
failedCollectors: "Failed collectors",
|
failedCollectors: "Failed collectors",
|
||||||
failedCollectorsUnavailable: "Failure detail awaiting safe classification",
|
failedCollectorsUnavailable: "Failure detail awaiting safe classification",
|
||||||
sameRunMissing: "No same-run closure evidence",
|
sameRunMissing: "Aggregate AI run is open; this is not the current Wazuh lane",
|
||||||
sameRunVerified: "18-stage same-run closure verified",
|
sameRunVerified: "Aggregate AI run is verified; this is not the current Wazuh lane",
|
||||||
loading: "Loading security control plane",
|
loading: "Loading security control plane",
|
||||||
unavailable: "Live readback unavailable",
|
unavailable: "Live readback unavailable",
|
||||||
refresh: "Refresh security control plane",
|
refresh: "Refresh security control plane",
|
||||||
@@ -230,20 +242,42 @@ function MetricCell({
|
|||||||
label,
|
label,
|
||||||
value,
|
value,
|
||||||
icon: Icon,
|
icon: Icon,
|
||||||
|
detail,
|
||||||
|
testId,
|
||||||
|
title,
|
||||||
}: {
|
}: {
|
||||||
label: string;
|
label: string;
|
||||||
value: string | number;
|
value: string | number;
|
||||||
icon: typeof ShieldCheck;
|
icon: typeof ShieldCheck;
|
||||||
|
detail?: string;
|
||||||
|
testId?: string;
|
||||||
|
title?: string;
|
||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<div className="min-w-0 bg-white px-3 py-3">
|
<div
|
||||||
|
className="min-w-0 bg-white px-3 py-3"
|
||||||
|
data-testid={testId}
|
||||||
|
title={title}
|
||||||
|
aria-label={title}
|
||||||
|
>
|
||||||
<div className="flex items-center gap-2 text-[11px] font-medium text-[#6f6d66]">
|
<div className="flex items-center gap-2 text-[11px] font-medium text-[#6f6d66]">
|
||||||
<Icon className="h-3.5 w-3.5 shrink-0" aria-hidden="true" />
|
<Icon className="h-3.5 w-3.5 shrink-0" aria-hidden="true" />
|
||||||
<span className="truncate">{label}</span>
|
<span className="truncate">{label}</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-2 font-mono text-xl font-semibold tracking-normal text-[#141413]">
|
<div
|
||||||
|
className="mt-2 font-mono text-xl font-semibold tracking-normal text-[#141413]"
|
||||||
|
data-testid={testId ? `${testId}-primary` : undefined}
|
||||||
|
>
|
||||||
{value}
|
{value}
|
||||||
</div>
|
</div>
|
||||||
|
{detail ? (
|
||||||
|
<div
|
||||||
|
className="mt-1 text-[9px] font-medium leading-4 text-[#9f2f25]"
|
||||||
|
data-testid={testId ? `${testId}-scope-note` : undefined}
|
||||||
|
>
|
||||||
|
{detail}
|
||||||
|
</div>
|
||||||
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -563,10 +597,19 @@ export function SecurityAssetControlPlaneCockpit({
|
|||||||
label={copy.strictRun}
|
label={copy.strictRun}
|
||||||
value={
|
value={
|
||||||
payload
|
payload
|
||||||
? `${payload.ai_automation.strict_runtime_completion.present_stage_count}/${payload.ai_automation.strict_runtime_completion.required_stage_count}`
|
? payload.ai_automation.strict_runtime_completion.closed
|
||||||
|
? copy.aggregateVerified
|
||||||
|
: copy.aggregateOpen
|
||||||
: "--"
|
: "--"
|
||||||
}
|
}
|
||||||
icon={Bot}
|
icon={Bot}
|
||||||
|
detail={payload ? copy.aggregateScopeNote : undefined}
|
||||||
|
testId="security-aggregate-ai-run-status"
|
||||||
|
title={
|
||||||
|
payload
|
||||||
|
? `${copy.strictRun}: ${payload.ai_automation.strict_runtime_completion.closed ? copy.aggregateVerified : copy.aggregateOpen}. ${copy.aggregateCountsTitle}: ${payload.ai_automation.strict_runtime_completion.present_stage_count}/${payload.ai_automation.strict_runtime_completion.required_stage_count}. ${copy.aggregateScopeNote}`
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
<MetricCell
|
<MetricCell
|
||||||
label={copy.verified}
|
label={copy.verified}
|
||||||
|
|||||||
Reference in New Issue
Block a user