fix(governance): 改善 automation KPI 卡片換行
All checks were successful
CD Pipeline / tests (push) Successful in 1m27s
Code Review / ai-code-review (push) Successful in 13s
CD Pipeline / build-and-deploy (push) Successful in 4m10s
CD Pipeline / post-deploy-checks (push) Successful in 1m48s

This commit is contained in:
Your Name
2026-06-11 23:28:08 +08:00
parent 353bcb7796
commit 1d28ce7731

View File

@@ -1443,7 +1443,7 @@ export function AutomationInventoryTab() {
/>
</div>
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 12 }} className="automation-inventory-deployment-layout-kpi-grid">
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 12 }} className="automation-inventory-deployment-layout-kpi-grid">
<MetricCard label={t('deploymentLayout.metrics.targets')} value={deploymentLayoutTargets} icon={<Boxes size={16} />} />
<MetricCard label={t('deploymentLayout.metrics.openclaw')} value={deploymentLayoutOpenClawTargets} icon={<ShieldCheck size={16} />} />
<MetricCard label={t('deploymentLayout.metrics.hermes')} value={deploymentLayoutHermesTargets} icon={<FileText size={16} />} />
@@ -1561,7 +1561,7 @@ export function AutomationInventoryTab() {
/>
</div>
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 12 }} className="automation-inventory-proof-kpi-grid">
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 12 }} className="automation-inventory-proof-kpi-grid">
<MetricCard label={t('interactionProof.metrics.overall')} value={`${proofOverall}%`} tone="warn" icon={<Gauge size={16} />} />
<MetricCard label={t('interactionProof.metrics.contractReady')} value={proofContractReadyLevels} tone="ok" icon={<ShieldCheck size={16} />} />
<MetricCard label={t('interactionProof.metrics.liveSessions')} value={proofLiveSessions} tone={proofLiveSessions > 0 ? 'ok' : 'warn'} icon={<Route size={16} />} />
@@ -1611,7 +1611,7 @@ export function AutomationInventoryTab() {
/>
</div>
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
<MetricCard label={t('liveReadModelGate.metrics.overall')} value={`${liveReadModelOverall}%`} tone="warn" icon={<Gauge size={16} />} />
<MetricCard label={t('liveReadModelGate.metrics.readyCards')} value={liveReadModelReadyCards} tone="ok" icon={<ShieldCheck size={16} />} />
<MetricCard label={t('liveReadModelGate.metrics.approvalGates')} value={liveReadModelApprovalGates} tone={liveReadModelApprovalGates > 0 ? 'danger' : 'ok'} icon={<Lock size={16} />} />
@@ -1729,7 +1729,7 @@ export function AutomationInventoryTab() {
/>
</div>
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
<MetricCard label={t('redisDryRunGate.metrics.overall')} value={`${redisDryRunOverall}%`} tone="warn" icon={<Gauge size={16} />} />
<MetricCard label={t('redisDryRunGate.metrics.steps')} value={redisDryRunSteps} tone="ok" icon={<Route size={16} />} />
<MetricCard label={t('redisDryRunGate.metrics.lanes')} value={redisHandoffLanes} tone="ok" icon={<GitBranch size={16} />} />
@@ -1838,7 +1838,7 @@ export function AutomationInventoryTab() {
/>
</div>
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
<MetricCard label={t('learningWritebackPackage.metrics.overall')} value={`${learningWritebackOverall}%`} tone="warn" icon={<Gauge size={16} />} />
<MetricCard label={t('learningWritebackPackage.metrics.gates')} value={learningWritebackGates} tone="ok" icon={<ShieldCheck size={16} />} />
<MetricCard label={t('learningWritebackPackage.metrics.lanes')} value={learningWritebackLanes} tone="ok" icon={<Route size={16} />} />
@@ -1943,7 +1943,7 @@ export function AutomationInventoryTab() {
/>
</div>
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
<MetricCard label={t('telegramReceiptPackage.metrics.overall')} value={`${telegramReceiptOverall}%`} tone="warn" icon={<Gauge size={16} />} />
<MetricCard label={t('telegramReceiptPackage.metrics.gates')} value={telegramReceiptGates} tone="ok" icon={<ShieldCheck size={16} />} />
<MetricCard label={t('telegramReceiptPackage.metrics.lanes')} value={telegramReceiptLanes} tone="ok" icon={<Route size={16} />} />
@@ -2156,7 +2156,7 @@ export function AutomationInventoryTab() {
/>
</div>
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 10 }} className="automation-inventory-live-read-kpi-grid">
<MetricCard label={t('ownerDryRunPackage.metrics.overall')} value={`${ownerDryRunOverall}%`} tone="warn" icon={<Gauge size={16} />} />
<MetricCard label={t('ownerDryRunPackage.metrics.fixtures')} value={ownerDryRunFixtures} tone="ok" icon={<PackageCheck size={16} />} />
<MetricCard label={t('ownerDryRunPackage.metrics.gates')} value={ownerDryRunGates} tone="ok" icon={<ShieldCheck size={16} />} />
@@ -2400,7 +2400,7 @@ export function AutomationInventoryTab() {
/>
</div>
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 12 }} className="automation-inventory-proactive-kpi-grid">
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 12 }} className="automation-inventory-proactive-kpi-grid">
<MetricCard label={t('proactiveOperations.metrics.overall')} value={`${proactiveOverall}%`} tone="ok" icon={<Gauge size={16} />} />
<MetricCard label={t('proactiveOperations.metrics.capabilities')} value={proactiveDelegableCapabilities} icon={<Boxes size={16} />} />
<MetricCard label={t('proactiveOperations.metrics.approval')} value={proactiveApprovalCapabilities} tone="warn" icon={<Lock size={16} />} />
@@ -2744,7 +2744,7 @@ export function AutomationInventoryTab() {
</div>
</div>
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 12 }} className="automation-inventory-backup-kpi-grid">
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 12 }} className="automation-inventory-backup-kpi-grid">
<MetricCard label={t('backupEvidence.metrics.targets')} value={backupTargets.rollups.total_targets} icon={<HardDrive size={16} />} />
<MetricCard label={t('backupEvidence.metrics.ready')} value={readyBackupRows} tone="ok" icon={<ShieldCheck size={16} />} />
<MetricCard label={t('backupEvidence.metrics.actionRequired')} value={actionRequiredBackupRows} tone="warn" icon={<AlertTriangle size={16} />} />
@@ -3057,7 +3057,7 @@ export function AutomationInventoryTab() {
</div>
</div>
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(6, minmax(0, 1fr))', gap: 12 }} className="automation-inventory-gitea-kpi-grid">
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 12 }} className="automation-inventory-gitea-kpi-grid">
<MetricCard label={t('giteaHealth.metrics.workflows')} value={giteaHealth.rollups.total_workflows} icon={<GitBranch size={16} />} />
<MetricCard label={t('giteaHealth.metrics.schedules')} value={giteaHealth.rollups.workflows_with_schedule} icon={<RefreshCw size={16} />} />
<MetricCard label={t('giteaHealth.metrics.dispatch')} value={giteaHealth.rollups.workflows_with_workflow_dispatch} tone="warn" icon={<AlertTriangle size={16} />} />