实现分层实体漏洞知识库与实体级完整度监控

这个提交包含在:
hao
2026-03-19 17:57:45 -07:00
父节点 49fe46ab89
当前提交 1e81279e32
修改 2712 个文件,包含 434447 行新增2774 行删除

查看文件

@@ -87,7 +87,7 @@
<h1>当前架构库镜像</h1>
<div class="meta">工作台内置镜像页:当前架构库结构化数据镜像。</div>
<pre>{
&quot;generated_at&quot;: &quot;2026-03-19T23:44:56+00:00&quot;,
&quot;generated_at&quot;: &quot;2026-03-20T00:56:32+00:00&quot;,
&quot;title&quot;: &quot;当前架构库&quot;,
&quot;summary&quot;: &quot;工作台、控制面、数据层、授权边界与系统覆盖的当前真值视图。&quot;,
&quot;sections&quot;: [
@@ -113,6 +113,14 @@
&quot;label&quot;: &quot;近两年全量系统&quot;,
&quot;value&quot;: &quot;42&quot;
},
{
&quot;label&quot;: &quot;已编目实体&quot;,
&quot;value&quot;: &quot;97&quot;
},
{
&quot;label&quot;: &quot;发现 backlog&quot;,
&quot;value&quot;: &quot;17&quot;
},
{
&quot;label&quot;: &quot;当前运行&quot;,
&quot;value&quot;: &quot;140&quot;
@@ -137,7 +145,7 @@
},
{
&quot;label&quot;: &quot;生成时间&quot;,
&quot;value&quot;: &quot;2026-03-19T23:44:56+00:00&quot;
&quot;value&quot;: &quot;2026-03-20T00:56:32+00:00&quot;
}
],
&quot;links&quot;: [
@@ -267,6 +275,10 @@
&quot;label&quot;: &quot;系统 Registry&quot;,
&quot;value&quot;: &quot;08-threat-intel/registry/systems/*.json&quot;
},
{
&quot;label&quot;: &quot;实体 Registry&quot;,
&quot;value&quot;: &quot;08-threat-intel/registry/entities/*.json&quot;
},
{
&quot;label&quot;: &quot;运行 Registry&quot;,
&quot;value&quot;: &quot;08-threat-intel/registry/runs/*.json&quot;
@@ -366,6 +378,16 @@
&quot;href&quot;: &quot;/docs/retired-sources.html&quot;,
&quot;description&quot;: &quot;退役源、退役原因与 replacement map。&quot;
},
{
&quot;label&quot;: &quot;entity catalog report&quot;,
&quot;href&quot;: &quot;/docs/entity-catalog-report.html&quot;,
&quot;description&quot;: &quot;分层实体覆盖、history-full 完整度与 workflow 指标。&quot;
},
{
&quot;label&quot;: &quot;entity discovery backlog&quot;,
&quot;href&quot;: &quot;/docs/entity-discovery-backlog.html&quot;,
&quot;description&quot;: &quot;待编目 repo / 插件 / 包 backlog 与等待原因。&quot;
},
{
&quot;label&quot;: &quot;repro-map 真值&quot;,
&quot;href&quot;: &quot;/docs/repro-map.html&quot;,
@@ -411,6 +433,21 @@
&quot;href&quot;: &quot;/data/monitor-summary.json&quot;,
&quot;description&quot;: &quot;每日监控摘要、open alerts 与最近全绿时间。&quot;
},
{
&quot;label&quot;: &quot;entity-completeness.json&quot;,
&quot;href&quot;: &quot;/data/entity-completeness.json&quot;,
&quot;description&quot;: &quot;实体级 catalog 完整度、版本映射与 workflow 覆盖。&quot;
},
{
&quot;label&quot;: &quot;entity-discovery-backlog.json&quot;,
&quot;href&quot;: &quot;/data/entity-discovery-backlog.json&quot;,
&quot;description&quot;: &quot;发现但尚未正式编目的 repo / 插件 / 包 backlog。&quot;
},
{
&quot;label&quot;: &quot;entity-queues.json&quot;,
&quot;href&quot;: &quot;/data/entity-queues.json&quot;,
&quot;description&quot;: &quot;discovery/history/latest/workflow 四类队列摘要。&quot;
},
{
&quot;label&quot;: &quot;runs.json&quot;,
&quot;href&quot;: &quot;/runs.json&quot;,
@@ -451,6 +488,18 @@
&quot;label&quot;: &quot;运行归档根目录&quot;,
&quot;value&quot;: &quot;06-case-studies/generated-runs/&lt;run-id&gt;/&quot;
},
{
&quot;label&quot;: &quot;实体完整度&quot;,
&quot;value&quot;: &quot;/data/entity-completeness.json&quot;
},
{
&quot;label&quot;: &quot;发现 backlog&quot;,
&quot;value&quot;: &quot;/data/entity-discovery-backlog.json&quot;
},
{
&quot;label&quot;: &quot;实体队列&quot;,
&quot;value&quot;: &quot;/data/entity-queues.json&quot;
},
{
&quot;label&quot;: &quot;默认入口&quot;,
&quot;value&quot;: &quot;/index.html&quot;

查看文件

@@ -0,0 +1,171 @@
<!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">工作台内置镜像页分层实体覆盖、history-full 完整度和 workflow 统计。</div>
<pre># 分层实体覆盖与完整度报告
- 生成时间: `2026-03-20T00:56:31+00:00`
- 已编目实体: `97`
- 待编目 backlog: `17`
- history-full 已完成: `40`
- latest green: `97`
- workflow 完整: `97`
- 版本映射完整: `49`
- 官方源覆盖: `97`
- 插件 history-full 已完成: `4`
## 系统分层摘要
| 系统 | cataloged entities | candidate backlog | workflow complete | version mapped | official covered | plugins |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| adminer | 1 | 0 | 1 | 0 | 1 | 0 |
| adobe-commerce | 1 | 0 | 1 | 0 | 1 | 0 |
| angular | 2 | 0 | 2 | 2 | 2 | 0 |
| apache-httpd | 1 | 0 | 1 | 0 | 1 | 0 |
| apache-tomcat | 1 | 0 | 1 | 0 | 1 | 0 |
| aspnet-core | 1 | 0 | 1 | 0 | 1 | 0 |
| astro | 3 | 0 | 3 | 3 | 3 | 1 |
| caddy | 3 | 0 | 3 | 2 | 3 | 1 |
| directus | 1 | 1 | 1 | 0 | 1 | 0 |
| discourse | 1 | 0 | 1 | 0 | 1 | 0 |
| django | 2 | 0 | 2 | 1 | 2 | 0 |
| drupal | 1 | 0 | 1 | 0 | 1 | 0 |
| echo | 2 | 0 | 2 | 2 | 2 | 0 |
| esbuild | 2 | 0 | 2 | 2 | 2 | 0 |
| express | 1 | 0 | 1 | 0 | 1 | 0 |
| fastify | 2 | 0 | 2 | 2 | 2 | 0 |
| flask | 2 | 0 | 2 | 2 | 2 | 0 |
| ghost | 1 | 1 | 1 | 0 | 1 | 0 |
| gin | 2 | 0 | 2 | 2 | 2 | 0 |
| gitea | 1 | 1 | 1 | 0 | 1 | 0 |
| gitlab-ce | 1 | 0 | 1 | 0 | 1 | 0 |
| grafana | 1 | 0 | 1 | 0 | 1 | 0 |
| hapi | 2 | 0 | 2 | 2 | 2 | 0 |
| haproxy | 1 | 0 | 1 | 0 | 1 | 0 |
| jenkins | 1 | 0 | 1 | 0 | 1 | 0 |
| joomla | 1 | 0 | 1 | 0 | 1 | 0 |
| kibana | 1 | 0 | 1 | 0 | 1 | 0 |
| koa | 2 | 0 | 2 | 2 | 2 | 0 |
| laravel | 2 | 0 | 2 | 2 | 2 | 0 |
| magento-open-source | 1 | 1 | 1 | 0 | 1 | 0 |
| mattermost | 5 | 0 | 5 | 5 | 5 | 1 |
| mediawiki | 1 | 0 | 1 | 0 | 1 | 0 |
| medusa | 1 | 1 | 1 | 0 | 1 | 0 |
| moodle | 1 | 0 | 1 | 0 | 1 | 0 |
| nestjs | 1 | 0 | 1 | 0 | 1 | 0 |
| nextjs | 2 | 1 | 2 | 1 | 2 | 0 |
| nginx | 1 | 0 | 1 | 0 | 1 | 0 |
| nodejs | 1 | 0 | 1 | 0 | 1 | 0 |
| nuxt | 2 | 1 | 2 | 1 | 2 | 0 |
| opencart | 1 | 1 | 1 | 0 | 1 | 0 |
| openmage | 1 | 1 | 1 | 0 | 1 | 0 |
| phpmyadmin | 1 | 0 | 1 | 0 | 1 | 0 |
| prestashop | 1 | 1 | 1 | 0 | 1 | 0 |
| rails | 2 | 0 | 2 | 1 | 2 | 0 |
| react | 3 | 1 | 3 | 2 | 3 | 0 |
| redmine | 1 | 0 | 1 | 0 | 1 | 0 |
| saleor | 1 | 1 | 1 | 0 | 1 | 0 |
| shopware | 1 | 1 | 1 | 0 | 1 | 0 |
| spring-boot | 2 | 0 | 2 | 1 | 2 | 0 |
| spring-framework | 1 | 0 | 1 | 0 | 1 | 0 |
| spring-security | 1 | 0 | 1 | 0 | 1 | 0 |
| strapi | 1 | 1 | 1 | 0 | 1 | 0 |
| sveltekit | 2 | 0 | 2 | 2 | 2 | 0 |
| symfony | 2 | 0 | 2 | 2 | 2 | 0 |
| traefik | 2 | 0 | 2 | 1 | 2 | 0 |
| undici | 3 | 0 | 3 | 2 | 3 | 1 |
| vite | 5 | 1 | 5 | 4 | 5 | 3 |
| vue | 2 | 1 | 2 | 1 | 2 | 0 |
| webpack | 1 | 0 | 1 | 0 | 1 | 0 |
| werkzeug | 2 | 0 | 2 | 2 | 2 | 0 |
| woocommerce | 1 | 1 | 1 | 0 | 1 | 0 |
| wordpress | 1 | 0 | 1 | 0 | 1 | 0 |
</pre>
</div>
</main>
</body>
</html>

查看文件

@@ -0,0 +1,117 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>分层实体发现 Backlog</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>分层实体发现 Backlog</h1>
<div class="meta">工作台内置镜像页:待编目 repo / 插件 / 包 backlog 与等待原因。</div>
<pre># 分层实体发现 Backlog
- 生成时间: `2026-03-20T00:56:31+00:00`
- 待编目数量: `17`
| candidate_id | root_system | entity_type | risk | reason | waiting_for | source |
| --- | --- | --- | --- | --- | --- | --- |
| directus--repo-candidate--https-github-com-directus-directus | directus | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/directus/directus/security/advisories |
| ghost--repo-candidate--https-github-com-tryghost-ghost | ghost | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/TryGhost/Ghost/security/advisories |
| gitea--repo-candidate--https-github-com-go-gitea-gitea | gitea | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/go-gitea/gitea/security/advisories |
| magento-open-source--repo-candidate--https-github-com-magento-magento2 | magento-open-source | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/magento/magento2/security/advisories |
| medusa--repo-candidate--https-github-com-medusajs-medusa | medusa | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/medusajs/medusa/security/advisories |
| nextjs--repo-candidate--https-github-com-vercel-next-js | nextjs | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/vercel/next.js/security/advisories |
| nuxt--repo-candidate--https-github-com-nuxt-nuxt | nuxt | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/nuxt/nuxt/security/advisories |
| opencart--repo-candidate--https-github-com-opencart-opencart | opencart | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/opencart/opencart/releases |
| openmage--repo-candidate--https-github-com-openmage-magento-lts | openmage | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/OpenMage/magento-lts/security/advisories |
| prestashop--repo-candidate--https-github-com-prestashop-prestashop | prestashop | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/PrestaShop/PrestaShop/security/advisories |
| react--repo-candidate--https-github-com-facebook-react | react | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/facebook/react/security/advisories |
| saleor--repo-candidate--https-github-com-saleor-saleor | saleor | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/saleor/saleor/security/advisories |
| shopware--repo-candidate--https-github-com-shopware-shopware | shopware | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/shopware/shopware/security/advisories |
| strapi--repo-candidate--https-github-com-strapi-strapi | strapi | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/strapi/strapi/security/advisories |
| vite--repo-candidate--https-github-com-vitejs-vite | vite | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/vitejs/vite/security/advisories |
| vue--repo-candidate--https-github-com-vuejs-core | vue | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/vuejs/core/security |
| woocommerce--repo-candidate--https-github-com-woocommerce-woocommerce | woocommerce | repo | medium | source catalog exposed a repo-like URL that is not yet cataloged as an entity | 确认是否应升级为 cataloged repo/package 实体并补齐历史漏洞 | https://github.com/woocommerce/woocommerce/security/advisories |
</pre>
</div>
</main>
</body>
</html>

查看文件

@@ -88,7 +88,7 @@
<div class="meta">工作台内置镜像页active/retired source、replacement map 与覆盖摘要。</div>
<pre># Source Catalog Audit
- generated_at: `2026-03-19T23:44:51+00:00`
- generated_at: `2026-03-20T00:56:25+00:00`
- systems: `62`
- sources: `179`
- active_sources: `101`

查看文件

@@ -88,7 +88,7 @@
<div class="meta">工作台内置镜像页89 条 advisory 最新完整度、family 矩阵与 ingest 健康度。</div>
<pre># 全库 Advisory 完整度报告
- 生成时间: `2026-03-19T23:44:56+00:00`
- 生成时间: `2026-03-20T00:56:32+00:00`
- 最新 advisory 完整度: `89/89` `verified-real`
- 合成验证数量: `0`
- 阻塞数量: `0`
@@ -96,7 +96,9 @@
- 完整度百分比: `100.0%`
- active source 全绿: `101/101`
- source open alerts: `0`
- 最近一次 source 全绿: `2026-03-19T23:44:51+00:00`
- 最近一次 source 全绿: `2026-03-20T00:56:25+00:00`
- 已编目实体: `97`
- 待编目 backlog: `17`
## 系统覆盖矩阵
@@ -107,6 +109,15 @@
| undici | 14 | 14 | 0 | 0 | 0 | ssrf(14/14) |
| vite | 12 | 12 | 0 | 0 | 0 | proxy-boundary(11/11), xss(1/1) |
## 分层实体完整度
- history-full 已完成: `40`
- latest green: `97`
- workflow 完整: `97`
- 版本映射完整: `49`
- 官方源覆盖: `97`
- 插件 history-full 已完成: `4`
## 历史阻塞项修复纪要
- Docker daemon unavailable caused provision-compose-environment blocked-artifact.
@@ -114,6 +125,7 @@
- Baseline and browser steps were skipped when environment readiness was not enforced.
- Latest completeness now uses one advisory -&gt; latest run semantics instead of historical run piles.
- Source health now counts only status=active sources; retired sources are audited separately with replacement links.
- Entity coverage now separates cataloged entities from discovery backlog so infinite internet scope no longer pollutes completion numbers.
## Ingest / Source 健康度