131 行
3.9 KiB
HTML
131 行
3.9 KiB
HTML
<!doctype html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>中文完整度报告</title>
|
||
<style>
|
||
:root {
|
||
--bg: #08111f;
|
||
--panel: rgba(9, 18, 32, 0.9);
|
||
--border: rgba(137, 171, 214, 0.2);
|
||
--text: #f7fafc;
|
||
--muted: #9fb3ca;
|
||
--accent: #5eead4;
|
||
}
|
||
* { box-sizing: border-box; }
|
||
body {
|
||
margin: 0;
|
||
min-height: 100vh;
|
||
font-family: "IBM Plex Sans", "Segoe UI", sans-serif;
|
||
color: var(--text);
|
||
background:
|
||
radial-gradient(circle at top left, rgba(94, 234, 212, 0.12), transparent 26%),
|
||
linear-gradient(160deg, #050c16 0%, #091526 50%, #10233d 100%);
|
||
}
|
||
main {
|
||
max-width: 1080px;
|
||
margin: 0 auto;
|
||
padding: 32px 20px 40px;
|
||
}
|
||
.panel {
|
||
background: var(--panel);
|
||
border: 1px solid var(--border);
|
||
border-radius: 20px;
|
||
padding: 24px;
|
||
box-shadow: 0 24px 80px rgba(1, 7, 20, 0.45);
|
||
}
|
||
.actions {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 12px;
|
||
margin-bottom: 18px;
|
||
}
|
||
.chip {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 8px;
|
||
border-radius: 999px;
|
||
border: 1px solid var(--border);
|
||
padding: 10px 14px;
|
||
color: var(--text);
|
||
background: rgba(255,255,255,0.05);
|
||
text-decoration: none;
|
||
}
|
||
.chip:hover { border-color: rgba(94, 234, 212, 0.42); }
|
||
h1 {
|
||
margin: 0 0 12px;
|
||
font-family: "IBM Plex Serif", Georgia, serif;
|
||
font-size: clamp(1.8rem, 4vw, 3rem);
|
||
line-height: 1.08;
|
||
}
|
||
.meta {
|
||
color: var(--muted);
|
||
margin-bottom: 18px;
|
||
}
|
||
pre {
|
||
margin: 0;
|
||
padding: 20px;
|
||
overflow: auto;
|
||
border-radius: 16px;
|
||
border: 1px solid rgba(137, 171, 214, 0.12);
|
||
background: rgba(2, 8, 22, 0.84);
|
||
color: #d6e5f5;
|
||
font-family: "IBM Plex Mono", "SFMono-Regular", monospace;
|
||
font-size: 0.92rem;
|
||
line-height: 1.6;
|
||
white-space: pre-wrap;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<main>
|
||
<div class="panel">
|
||
<div class="actions">
|
||
<a class="chip" href="/overview/index.html">返回工作台</a>
|
||
</div>
|
||
<h1>中文完整度报告</h1>
|
||
<div class="meta">工作台内置镜像页:89 条 advisory 最新完整度、family 矩阵与 ingest 健康度。</div>
|
||
<pre># 全库 Advisory 完整度报告
|
||
|
||
- 生成时间: `2026-03-18T17:52:49+00:00`
|
||
- 最新 advisory 完整度: `0/0` `verified-real`
|
||
- 合成验证数量: `0`
|
||
- 阻塞数量: `0`
|
||
- 人工/待补证据数量: `0`
|
||
- 完整度百分比: `0.0%`
|
||
- active source 全绿: `110/110`
|
||
- source open alerts: `0`
|
||
- 最近一次 source 全绿: `2026-03-18T17:44:31+00:00`
|
||
|
||
## 系统覆盖矩阵
|
||
|
||
| 系统 | 总数 | verified-real | verified-synthetic | blocked | manual | family 覆盖 |
|
||
| --- | ---: | ---: | ---: | ---: | ---: | --- |
|
||
|
||
## 历史阻塞项修复纪要
|
||
|
||
- Docker daemon unavailable caused provision-compose-environment blocked-artifact.
|
||
- Family profiles previously used note-only attack runners and dry-run placeholders.
|
||
- Baseline and browser steps were skipped when environment readiness was not enforced.
|
||
- Latest completeness now uses one advisory -> latest run semantics instead of historical run piles.
|
||
- Source health now counts only status=active sources; retired sources are audited separately with replacement links.
|
||
|
||
## Ingest / Source 健康度
|
||
|
||
- source failures: `0`
|
||
- active sources: `110`
|
||
- green sources: `110`
|
||
- open alerts: `0`
|
||
|
||
## 剩余风险说明
|
||
|
||
- 本报告按 advisory 的最新 run 计算;历史失败 run 仅保留审计价值,不再污染完整度数字。
|
||
- `browser_required=true` 的案例必须同时存在基线与攻击后浏览器证据,缺失则不会进入 `verified-real`。
|
||
- source collector 健康度单独计数;只有当 failures 归零时,报告与 dashboard 才算真正全绿。
|
||
</pre>
|
||
</div>
|
||
</main>
|
||
</body>
|
||
</html>
|