From b57d649a2d2823f39fde4ef70fab7d6e344ae60e Mon Sep 17 00:00:00 2001 From: hao Date: Thu, 19 Mar 2026 02:17:16 -0700 Subject: [PATCH] =?UTF-8?q?=E7=9B=91=E6=8E=A7=E6=9B=B4=E6=96=B0:=202026-03?= =?UTF-8?q?-19=2002:17:03?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 07-framework-security/cms/directus/INDEX.md | 2 +- 07-framework-security/cms/discourse/INDEX.md | 2 +- 07-framework-security/cms/drupal/INDEX.md | 2 +- 07-framework-security/cms/ghost/INDEX.md | 2 +- 07-framework-security/cms/joomla/INDEX.md | 2 +- 07-framework-security/cms/mediawiki/INDEX.md | 2 +- 07-framework-security/cms/moodle/INDEX.md | 2 +- 07-framework-security/cms/strapi/INDEX.md | 2 +- 07-framework-security/cms/wordpress/INDEX.md | 2 +- .../ecommerce/adobe-commerce/INDEX.md | 2 +- .../ecommerce/magento-open-source/INDEX.md | 2 +- .../ecommerce/medusa/INDEX.md | 2 +- .../ecommerce/opencart/INDEX.md | 2 +- .../ecommerce/openmage/INDEX.md | 2 +- .../ecommerce/prestashop/INDEX.md | 2 +- .../ecommerce/saleor/INDEX.md | 2 +- .../ecommerce/shopware/INDEX.md | 2 +- .../ecommerce/woocommerce/INDEX.md | 2 +- .../frameworks/angular/INDEX.md | 2 +- .../frameworks/aspnet-core/INDEX.md | 2 +- .../frameworks/astro/INDEX.md | 2 +- .../frameworks/django/INDEX.md | 2 +- .../frameworks/echo/INDEX.md | 2 +- .../frameworks/esbuild/INDEX.md | 2 +- .../frameworks/express/INDEX.md | 2 +- .../frameworks/fastify/INDEX.md | 2 +- .../frameworks/flask/INDEX.md | 2 +- 07-framework-security/frameworks/gin/INDEX.md | 2 +- .../frameworks/hapi/INDEX.md | 2 +- 07-framework-security/frameworks/koa/INDEX.md | 2 +- .../frameworks/laravel/INDEX.md | 2 +- .../frameworks/nestjs/INDEX.md | 2 +- .../frameworks/nextjs/INDEX.md | 2 +- .../frameworks/nodejs/INDEX.md | 2 +- .../frameworks/nuxt/INDEX.md | 2 +- .../frameworks/rails/INDEX.md | 2 +- .../frameworks/react/INDEX.md | 2 +- .../frameworks/spring-boot/INDEX.md | 2 +- .../frameworks/spring-framework/INDEX.md | 2 +- .../frameworks/spring-security/INDEX.md | 2 +- .../frameworks/sveltekit/INDEX.md | 2 +- .../frameworks/symfony/INDEX.md | 2 +- .../frameworks/undici/INDEX.md | 2 +- .../frameworks/vite/INDEX.md | 2 +- 07-framework-security/frameworks/vue/INDEX.md | 2 +- .../frameworks/webpack/INDEX.md | 2 +- .../frameworks/werkzeug/INDEX.md | 2 +- .../platforms/adminer/INDEX.md | 2 +- .../platforms/gitea/INDEX.md | 2 +- .../platforms/gitlab-ce/INDEX.md | 2 +- .../platforms/grafana/INDEX.md | 2 +- .../platforms/jenkins/INDEX.md | 2 +- .../platforms/kibana/INDEX.md | 2 +- .../platforms/mattermost/INDEX.md | 2 +- .../platforms/phpmyadmin/INDEX.md | 2 +- .../platforms/redmine/INDEX.md | 2 +- .../servers/apache-httpd/INDEX.md | 2 +- .../servers/apache-tomcat/INDEX.md | 2 +- 07-framework-security/servers/caddy/INDEX.md | 2 +- .../servers/haproxy/INDEX.md | 2 +- 07-framework-security/servers/nginx/INDEX.md | 2 +- .../servers/traefik/INDEX.md | 2 +- .../generated/dashboard/architecture.json | 4 +- .../dashboard/data/completeness.json | 8 +- .../dashboard/data/monitor-summary.json | 4 +- .../dashboard/data/source-catalog-audit.json | 2 +- .../dashboard/data/source-health.json | 328 +- .../dashboard/docs/architecture-library.html | 4 +- .../dashboard/docs/source-catalog-audit.html | 2 +- .../docs/testing-completeness-report.html | 4 +- .../generated/dashboard/summary.json | 4 +- 08-threat-intel/generated/latest-ingest.md | 2 +- .../generated/monitor-summary.json | 4 +- 08-threat-intel/generated/run-summary.json | 2 +- .../generated/source-catalog-audit.json | 2 +- .../generated/source-catalog-audit.md | 2 +- 08-threat-intel/generated/source-health.json | 328 +- .../monitoring/2026-03-19T09-17-08+00-00.json | 3839 +++++++++++++++++ docs/testing-completeness-report.md | 4 +- 79 files changed, 4253 insertions(+), 414 deletions(-) create mode 100644 08-threat-intel/registry/monitoring/2026-03-19T09-17-08+00-00.json diff --git a/07-framework-security/cms/directus/INDEX.md b/07-framework-security/cms/directus/INDEX.md index e1d6ed9e..f9206170 100644 --- a/07-framework-security/cms/directus/INDEX.md +++ b/07-framework-security/cms/directus/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `29` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/cms/discourse/INDEX.md b/07-framework-security/cms/discourse/INDEX.md index 654b2ae9..7b70b668 100644 --- a/07-framework-security/cms/discourse/INDEX.md +++ b/07-framework-security/cms/discourse/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `30` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/cms/drupal/INDEX.md b/07-framework-security/cms/drupal/INDEX.md index 6938a6e5..e2642040 100644 --- a/07-framework-security/cms/drupal/INDEX.md +++ b/07-framework-security/cms/drupal/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `70` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/cms/ghost/INDEX.md b/07-framework-security/cms/ghost/INDEX.md index 0d792eb5..f07e2be2 100644 --- a/07-framework-security/cms/ghost/INDEX.md +++ b/07-framework-security/cms/ghost/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `23` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/cms/joomla/INDEX.md b/07-framework-security/cms/joomla/INDEX.md index 3238474e..89cf8b4f 100644 --- a/07-framework-security/cms/joomla/INDEX.md +++ b/07-framework-security/cms/joomla/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `100` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/cms/mediawiki/INDEX.md b/07-framework-security/cms/mediawiki/INDEX.md index f1fe1f01..eb4e8b36 100644 --- a/07-framework-security/cms/mediawiki/INDEX.md +++ b/07-framework-security/cms/mediawiki/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `70` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/cms/moodle/INDEX.md b/07-framework-security/cms/moodle/INDEX.md index 3ba37ec4..26b2d76e 100644 --- a/07-framework-security/cms/moodle/INDEX.md +++ b/07-framework-security/cms/moodle/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `40` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/cms/strapi/INDEX.md b/07-framework-security/cms/strapi/INDEX.md index 5ef227d0..4e1340bc 100644 --- a/07-framework-security/cms/strapi/INDEX.md +++ b/07-framework-security/cms/strapi/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `26` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/cms/wordpress/INDEX.md b/07-framework-security/cms/wordpress/INDEX.md index ff98f8c1..5b574b34 100644 --- a/07-framework-security/cms/wordpress/INDEX.md +++ b/07-framework-security/cms/wordpress/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `140` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/adobe-commerce/INDEX.md b/07-framework-security/ecommerce/adobe-commerce/INDEX.md index 993179f2..a00e380c 100644 --- a/07-framework-security/ecommerce/adobe-commerce/INDEX.md +++ b/07-framework-security/ecommerce/adobe-commerce/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `81` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/magento-open-source/INDEX.md b/07-framework-security/ecommerce/magento-open-source/INDEX.md index 96484482..3a444465 100644 --- a/07-framework-security/ecommerce/magento-open-source/INDEX.md +++ b/07-framework-security/ecommerce/magento-open-source/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `89` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/medusa/INDEX.md b/07-framework-security/ecommerce/medusa/INDEX.md index e13ed89e..ba9189af 100644 --- a/07-framework-security/ecommerce/medusa/INDEX.md +++ b/07-framework-security/ecommerce/medusa/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `15` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/opencart/INDEX.md b/07-framework-security/ecommerce/opencart/INDEX.md index 5cb1c1db..4b49caf2 100644 --- a/07-framework-security/ecommerce/opencart/INDEX.md +++ b/07-framework-security/ecommerce/opencart/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `100` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/openmage/INDEX.md b/07-framework-security/ecommerce/openmage/INDEX.md index 1a3cf901..fbc900e6 100644 --- a/07-framework-security/ecommerce/openmage/INDEX.md +++ b/07-framework-security/ecommerce/openmage/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `27` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/prestashop/INDEX.md b/07-framework-security/ecommerce/prestashop/INDEX.md index 2a056a45..f4700c0d 100644 --- a/07-framework-security/ecommerce/prestashop/INDEX.md +++ b/07-framework-security/ecommerce/prestashop/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `112` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/saleor/INDEX.md b/07-framework-security/ecommerce/saleor/INDEX.md index 96c1188f..4e27e78c 100644 --- a/07-framework-security/ecommerce/saleor/INDEX.md +++ b/07-framework-security/ecommerce/saleor/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `24` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/shopware/INDEX.md b/07-framework-security/ecommerce/shopware/INDEX.md index 538b3fb8..d5827463 100644 --- a/07-framework-security/ecommerce/shopware/INDEX.md +++ b/07-framework-security/ecommerce/shopware/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `71` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/ecommerce/woocommerce/INDEX.md b/07-framework-security/ecommerce/woocommerce/INDEX.md index 32f6005b..b8b79352 100644 --- a/07-framework-security/ecommerce/woocommerce/INDEX.md +++ b/07-framework-security/ecommerce/woocommerce/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `111` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/angular/INDEX.md b/07-framework-security/frameworks/angular/INDEX.md index 71481aa0..167fa7d1 100644 --- a/07-framework-security/frameworks/angular/INDEX.md +++ b/07-framework-security/frameworks/angular/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `2` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/aspnet-core/INDEX.md b/07-framework-security/frameworks/aspnet-core/INDEX.md index 6e6fb255..9c5784f7 100644 --- a/07-framework-security/frameworks/aspnet-core/INDEX.md +++ b/07-framework-security/frameworks/aspnet-core/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `3` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/astro/INDEX.md b/07-framework-security/frameworks/astro/INDEX.md index b20092c6..3fd4d67a 100644 --- a/07-framework-security/frameworks/astro/INDEX.md +++ b/07-framework-security/frameworks/astro/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `14` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/django/INDEX.md b/07-framework-security/frameworks/django/INDEX.md index 6f3ee93f..66b07940 100644 --- a/07-framework-security/frameworks/django/INDEX.md +++ b/07-framework-security/frameworks/django/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `82` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/echo/INDEX.md b/07-framework-security/frameworks/echo/INDEX.md index 9197c2b2..5c37c700 100644 --- a/07-framework-security/frameworks/echo/INDEX.md +++ b/07-framework-security/frameworks/echo/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `2` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/esbuild/INDEX.md b/07-framework-security/frameworks/esbuild/INDEX.md index 0bd74d34..109121d6 100644 --- a/07-framework-security/frameworks/esbuild/INDEX.md +++ b/07-framework-security/frameworks/esbuild/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/express/INDEX.md b/07-framework-security/frameworks/express/INDEX.md index 47de3c69..78609806 100644 --- a/07-framework-security/frameworks/express/INDEX.md +++ b/07-framework-security/frameworks/express/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/fastify/INDEX.md b/07-framework-security/frameworks/fastify/INDEX.md index 283b732a..ec3f690d 100644 --- a/07-framework-security/frameworks/fastify/INDEX.md +++ b/07-framework-security/frameworks/fastify/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/flask/INDEX.md b/07-framework-security/frameworks/flask/INDEX.md index 4224cf9f..704406d5 100644 --- a/07-framework-security/frameworks/flask/INDEX.md +++ b/07-framework-security/frameworks/flask/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/gin/INDEX.md b/07-framework-security/frameworks/gin/INDEX.md index 4ae218ef..c0cb923e 100644 --- a/07-framework-security/frameworks/gin/INDEX.md +++ b/07-framework-security/frameworks/gin/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/hapi/INDEX.md b/07-framework-security/frameworks/hapi/INDEX.md index a6474270..63cb747b 100644 --- a/07-framework-security/frameworks/hapi/INDEX.md +++ b/07-framework-security/frameworks/hapi/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/koa/INDEX.md b/07-framework-security/frameworks/koa/INDEX.md index 1b55d99f..bb98cdb4 100644 --- a/07-framework-security/frameworks/koa/INDEX.md +++ b/07-framework-security/frameworks/koa/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/laravel/INDEX.md b/07-framework-security/frameworks/laravel/INDEX.md index 78499e91..1b0f2d31 100644 --- a/07-framework-security/frameworks/laravel/INDEX.md +++ b/07-framework-security/frameworks/laravel/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `2` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/nestjs/INDEX.md b/07-framework-security/frameworks/nestjs/INDEX.md index ea35a9ba..454a5957 100644 --- a/07-framework-security/frameworks/nestjs/INDEX.md +++ b/07-framework-security/frameworks/nestjs/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `2` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/nextjs/INDEX.md b/07-framework-security/frameworks/nextjs/INDEX.md index f2e63c23..6e7c662b 100644 --- a/07-framework-security/frameworks/nextjs/INDEX.md +++ b/07-framework-security/frameworks/nextjs/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `40` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/nodejs/INDEX.md b/07-framework-security/frameworks/nodejs/INDEX.md index df95f14c..3eced5cf 100644 --- a/07-framework-security/frameworks/nodejs/INDEX.md +++ b/07-framework-security/frameworks/nodejs/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `8` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/nuxt/INDEX.md b/07-framework-security/frameworks/nuxt/INDEX.md index d68c8935..885718f9 100644 --- a/07-framework-security/frameworks/nuxt/INDEX.md +++ b/07-framework-security/frameworks/nuxt/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `28` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/rails/INDEX.md b/07-framework-security/frameworks/rails/INDEX.md index 61b4d70e..012b5fe9 100644 --- a/07-framework-security/frameworks/rails/INDEX.md +++ b/07-framework-security/frameworks/rails/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `42` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/react/INDEX.md b/07-framework-security/frameworks/react/INDEX.md index 1af38fd4..11c517ac 100644 --- a/07-framework-security/frameworks/react/INDEX.md +++ b/07-framework-security/frameworks/react/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `21` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/spring-boot/INDEX.md b/07-framework-security/frameworks/spring-boot/INDEX.md index c11e3948..22f0c644 100644 --- a/07-framework-security/frameworks/spring-boot/INDEX.md +++ b/07-framework-security/frameworks/spring-boot/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `2` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/spring-framework/INDEX.md b/07-framework-security/frameworks/spring-framework/INDEX.md index a6698b8f..27517997 100644 --- a/07-framework-security/frameworks/spring-framework/INDEX.md +++ b/07-framework-security/frameworks/spring-framework/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `11` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/spring-security/INDEX.md b/07-framework-security/frameworks/spring-security/INDEX.md index cbb86655..0026d67d 100644 --- a/07-framework-security/frameworks/spring-security/INDEX.md +++ b/07-framework-security/frameworks/spring-security/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `3` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/sveltekit/INDEX.md b/07-framework-security/frameworks/sveltekit/INDEX.md index bb50d30c..418f277c 100644 --- a/07-framework-security/frameworks/sveltekit/INDEX.md +++ b/07-framework-security/frameworks/sveltekit/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `3` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/symfony/INDEX.md b/07-framework-security/frameworks/symfony/INDEX.md index 0bf193fd..d8fce439 100644 --- a/07-framework-security/frameworks/symfony/INDEX.md +++ b/07-framework-security/frameworks/symfony/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `9` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/undici/INDEX.md b/07-framework-security/frameworks/undici/INDEX.md index 5dfbfc72..92350cca 100644 --- a/07-framework-security/frameworks/undici/INDEX.md +++ b/07-framework-security/frameworks/undici/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `9` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/vite/INDEX.md b/07-framework-security/frameworks/vite/INDEX.md index 5005a19c..0aca4bdd 100644 --- a/07-framework-security/frameworks/vite/INDEX.md +++ b/07-framework-security/frameworks/vite/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `30` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/vue/INDEX.md b/07-framework-security/frameworks/vue/INDEX.md index 16f87f1a..e9a1214e 100644 --- a/07-framework-security/frameworks/vue/INDEX.md +++ b/07-framework-security/frameworks/vue/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `15` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/webpack/INDEX.md b/07-framework-security/frameworks/webpack/INDEX.md index a94d5215..3b08db9d 100644 --- a/07-framework-security/frameworks/webpack/INDEX.md +++ b/07-framework-security/frameworks/webpack/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/frameworks/werkzeug/INDEX.md b/07-framework-security/frameworks/werkzeug/INDEX.md index 217f5b54..adebb4d8 100644 --- a/07-framework-security/frameworks/werkzeug/INDEX.md +++ b/07-framework-security/frameworks/werkzeug/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `1` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/platforms/adminer/INDEX.md b/07-framework-security/platforms/adminer/INDEX.md index 3e02e2aa..c3cec55a 100644 --- a/07-framework-security/platforms/adminer/INDEX.md +++ b/07-framework-security/platforms/adminer/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `2` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/platforms/gitea/INDEX.md b/07-framework-security/platforms/gitea/INDEX.md index cea361f1..72b5d252 100644 --- a/07-framework-security/platforms/gitea/INDEX.md +++ b/07-framework-security/platforms/gitea/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `13` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/platforms/gitlab-ce/INDEX.md b/07-framework-security/platforms/gitlab-ce/INDEX.md index 048ddfc5..39693668 100644 --- a/07-framework-security/platforms/gitlab-ce/INDEX.md +++ b/07-framework-security/platforms/gitlab-ce/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `55` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/platforms/grafana/INDEX.md b/07-framework-security/platforms/grafana/INDEX.md index ce4512b1..889dbbce 100644 --- a/07-framework-security/platforms/grafana/INDEX.md +++ b/07-framework-security/platforms/grafana/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `60` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/platforms/jenkins/INDEX.md b/07-framework-security/platforms/jenkins/INDEX.md index fb377290..94ba86bc 100644 --- a/07-framework-security/platforms/jenkins/INDEX.md +++ b/07-framework-security/platforms/jenkins/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `60` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/platforms/kibana/INDEX.md b/07-framework-security/platforms/kibana/INDEX.md index 0c7cfd26..9480222b 100644 --- a/07-framework-security/platforms/kibana/INDEX.md +++ b/07-framework-security/platforms/kibana/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `41` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/platforms/mattermost/INDEX.md b/07-framework-security/platforms/mattermost/INDEX.md index 2c724fdc..03cd60bb 100644 --- a/07-framework-security/platforms/mattermost/INDEX.md +++ b/07-framework-security/platforms/mattermost/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `20` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/platforms/phpmyadmin/INDEX.md b/07-framework-security/platforms/phpmyadmin/INDEX.md index 84d25aef..d21fe2ac 100644 --- a/07-framework-security/platforms/phpmyadmin/INDEX.md +++ b/07-framework-security/platforms/phpmyadmin/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `50` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/platforms/redmine/INDEX.md b/07-framework-security/platforms/redmine/INDEX.md index 2a752423..cc0bf71b 100644 --- a/07-framework-security/platforms/redmine/INDEX.md +++ b/07-framework-security/platforms/redmine/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `50` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/servers/apache-httpd/INDEX.md b/07-framework-security/servers/apache-httpd/INDEX.md index 91ccdf01..b8faefae 100644 --- a/07-framework-security/servers/apache-httpd/INDEX.md +++ b/07-framework-security/servers/apache-httpd/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `135` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/servers/apache-tomcat/INDEX.md b/07-framework-security/servers/apache-tomcat/INDEX.md index 602605e3..bf78a9d8 100644 --- a/07-framework-security/servers/apache-tomcat/INDEX.md +++ b/07-framework-security/servers/apache-tomcat/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `136` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/servers/caddy/INDEX.md b/07-framework-security/servers/caddy/INDEX.md index 804d16d2..ede27919 100644 --- a/07-framework-security/servers/caddy/INDEX.md +++ b/07-framework-security/servers/caddy/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `27` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/servers/haproxy/INDEX.md b/07-framework-security/servers/haproxy/INDEX.md index 7c8949d5..072d3b57 100644 --- a/07-framework-security/servers/haproxy/INDEX.md +++ b/07-framework-security/servers/haproxy/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `6` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/servers/nginx/INDEX.md b/07-framework-security/servers/nginx/INDEX.md index c16a4554..0ea98e83 100644 --- a/07-framework-security/servers/nginx/INDEX.md +++ b/07-framework-security/servers/nginx/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `110` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/07-framework-security/servers/traefik/INDEX.md b/07-framework-security/servers/traefik/INDEX.md index 27bfb925..f9cf910f 100644 --- a/07-framework-security/servers/traefik/INDEX.md +++ b/07-framework-security/servers/traefik/INDEX.md @@ -12,7 +12,7 @@ - 已实证(synthetic): `0` - 阻塞数: `0` - 待人工/缺浏览器证据: `43` -- 最近渲染时间: `2026-03-19T03:38:08+00:00` +- 最近渲染时间: `2026-03-19T09:17:15+00:00` ## 目标约束 diff --git a/08-threat-intel/generated/dashboard/architecture.json b/08-threat-intel/generated/dashboard/architecture.json index 6b8a94da..9458bfda 100644 --- a/08-threat-intel/generated/dashboard/architecture.json +++ b/08-threat-intel/generated/dashboard/architecture.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-03-19T03:38:08+00:00", + "generated_at": "2026-03-19T09:17:16+00:00", "title": "\u5f53\u524d\u67b6\u6784\u5e93", "summary": "\u5de5\u4f5c\u53f0\u3001\u63a7\u5236\u9762\u3001\u6570\u636e\u5c42\u3001\u6388\u6743\u8fb9\u754c\u4e0e\u7cfb\u7edf\u8986\u76d6\u7684\u5f53\u524d\u771f\u503c\u89c6\u56fe\u3002", "sections": [ @@ -49,7 +49,7 @@ }, { "label": "\u751f\u6210\u65f6\u95f4", - "value": "2026-03-19T03:38:08+00:00" + "value": "2026-03-19T09:17:16+00:00" } ], "links": [ diff --git a/08-threat-intel/generated/dashboard/data/completeness.json b/08-threat-intel/generated/dashboard/data/completeness.json index 150aada9..84188129 100644 --- a/08-threat-intel/generated/dashboard/data/completeness.json +++ b/08-threat-intel/generated/dashboard/data/completeness.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-03-19T03:38:08+00:00", + "generated_at": "2026-03-19T09:17:16+00:00", "advisory_total": 89, "registry_advisory_total": 2392, "scope": "latest-run-backed-advisories", @@ -175,18 +175,18 @@ "active_source_count": 113, "green_source_count": 113, "failure_count": 0, - "last_fully_green_run": "2026-03-19T03:38:01+00:00", + "last_fully_green_run": "2026-03-19T09:17:08+00:00", "open_alert_count": 0, "resolved_alert_count": 4 }, "monitor_summary": { - "generated_at": "2026-03-19T03:38:01+00:00", + "generated_at": "2026-03-19T09:17:08+00:00", "active_source_count": 113, "green_source_count": 113, "source_failure_count": 0, "open_alert_count": 0, "resolved_alert_count": 4, - "last_fully_green_run": "2026-03-19T03:38:01+00:00", + "last_fully_green_run": "2026-03-19T09:17:08+00:00", "source_catalog": { "system_count": 62, "source_count": 179, diff --git a/08-threat-intel/generated/dashboard/data/monitor-summary.json b/08-threat-intel/generated/dashboard/data/monitor-summary.json index 916f878e..5df12d99 100644 --- a/08-threat-intel/generated/dashboard/data/monitor-summary.json +++ b/08-threat-intel/generated/dashboard/data/monitor-summary.json @@ -1,11 +1,11 @@ { - "generated_at": "2026-03-19T03:38:01+00:00", + "generated_at": "2026-03-19T09:17:08+00:00", "active_source_count": 113, "green_source_count": 113, "source_failure_count": 0, "open_alert_count": 0, "resolved_alert_count": 4, - "last_fully_green_run": "2026-03-19T03:38:01+00:00", + "last_fully_green_run": "2026-03-19T09:17:08+00:00", "source_catalog": { "system_count": 62, "source_count": 179, diff --git a/08-threat-intel/generated/dashboard/data/source-catalog-audit.json b/08-threat-intel/generated/dashboard/data/source-catalog-audit.json index df8ed15f..cbce5e3e 100644 --- a/08-threat-intel/generated/dashboard/data/source-catalog-audit.json +++ b/08-threat-intel/generated/dashboard/data/source-catalog-audit.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-03-19T03:37:56+00:00", + "generated_at": "2026-03-19T09:17:03+00:00", "system_count": 62, "source_count": 179, "active_source_count": 113, diff --git a/08-threat-intel/generated/dashboard/data/source-health.json b/08-threat-intel/generated/dashboard/data/source-health.json index 8b8783d7..df8e8b22 100644 --- a/08-threat-intel/generated/dashboard/data/source-health.json +++ b/08-threat-intel/generated/dashboard/data/source-health.json @@ -1,17 +1,17 @@ { - "generated_at": "2026-03-19T03:38:01+00:00", + "generated_at": "2026-03-19T09:17:08+00:00", "active_source_count": 113, "green_source_count": 113, "failure_count": 0, "all_green": true, - "last_fully_green_run": "2026-03-19T03:38:01+00:00", + "last_fully_green_run": "2026-03-19T09:17:08+00:00", "retries_performed": 0, "probes": [ { "system_id": "adminer", "source_name": "OSV Adminer", "source_kind": "osv-batch", - "elapsed_seconds": 2.624, + "elapsed_seconds": 2.249, "kind": "osv-batch", "items_seen": 1 }, @@ -19,7 +19,7 @@ "system_id": "adobe-commerce", "source_name": "Adobe Magento Security Index", "source_kind": "vendor-index", - "elapsed_seconds": 0.544, + "elapsed_seconds": 0.906, "kind": "vendor-index", "items_seen": 46 }, @@ -27,7 +27,7 @@ "system_id": "angular", "source_name": "OSV Angular", "source_kind": "osv-batch", - "elapsed_seconds": 1.439, + "elapsed_seconds": 1.215, "kind": "osv-batch", "items_seen": 1 }, @@ -35,7 +35,7 @@ "system_id": "apache-httpd", "source_name": "Apache HTTPD Security", "source_kind": "html-links", - "elapsed_seconds": 2.739, + "elapsed_seconds": 2.765, "kind": "html-links", "items_seen": 182 }, @@ -43,7 +43,7 @@ "system_id": "apache-httpd", "source_name": "CISA KEV Apache HTTPD", "source_kind": "kev-json", - "elapsed_seconds": 2.768, + "elapsed_seconds": 3.122, "kind": "kev-json", "items_seen": 1545 }, @@ -51,7 +51,7 @@ "system_id": "apache-tomcat", "source_name": "Apache Tomcat Security", "source_kind": "html-links", - "elapsed_seconds": 2.707, + "elapsed_seconds": 2.772, "kind": "html-links", "items_seen": 270 }, @@ -59,7 +59,7 @@ "system_id": "apache-tomcat", "source_name": "CISA KEV Tomcat", "source_kind": "kev-json", - "elapsed_seconds": 2.829, + "elapsed_seconds": 3.12, "kind": "kev-json", "items_seen": 1545 }, @@ -67,7 +67,7 @@ "system_id": "aspnet-core", "source_name": "OSV ASP.NET Core", "source_kind": "osv-batch", - "elapsed_seconds": 1.877, + "elapsed_seconds": 1.703, "kind": "osv-batch", "items_seen": 1 }, @@ -75,7 +75,7 @@ "system_id": "astro", "source_name": "OSV Astro", "source_kind": "osv-batch", - "elapsed_seconds": 1.439, + "elapsed_seconds": 1.216, "kind": "osv-batch", "items_seen": 1 }, @@ -83,7 +83,7 @@ "system_id": "caddy", "source_name": "GitHub Caddy Advisories", "source_kind": "html-links", - "elapsed_seconds": 3.835, + "elapsed_seconds": 3.086, "kind": "html-links", "items_seen": 114 }, @@ -91,7 +91,7 @@ "system_id": "caddy", "source_name": "OSV Caddy", "source_kind": "osv-batch", - "elapsed_seconds": 2.434, + "elapsed_seconds": 2.227, "kind": "osv-batch", "items_seen": 1 }, @@ -99,7 +99,7 @@ "system_id": "directus", "source_name": "Directus GitHub Advisories", "source_kind": "html-links", - "elapsed_seconds": 1.474, + "elapsed_seconds": 1.208, "kind": "html-links", "items_seen": 127 }, @@ -107,7 +107,7 @@ "system_id": "directus", "source_name": "OSV Directus", "source_kind": "osv-batch", - "elapsed_seconds": 0.004, + "elapsed_seconds": 0.003, "kind": "osv-batch", "items_seen": 1 }, @@ -115,7 +115,7 @@ "system_id": "discourse", "source_name": "Discourse Release Notes RSS", "source_kind": "rss-feed", - "elapsed_seconds": 1.879, + "elapsed_seconds": 1.525, "kind": "rss-feed", "items_seen": 30 }, @@ -123,7 +123,7 @@ "system_id": "discourse", "source_name": "Discourse Security RSS", "source_kind": "rss-feed", - "elapsed_seconds": 0.999, + "elapsed_seconds": 0.717, "kind": "rss-feed", "items_seen": 3 }, @@ -131,7 +131,7 @@ "system_id": "discourse", "source_name": "OSV Discourse", "source_kind": "osv-batch", - "elapsed_seconds": 0.002, + "elapsed_seconds": 0.001, "kind": "osv-batch", "items_seen": 1 }, @@ -139,7 +139,7 @@ "system_id": "django", "source_name": "Django Security Releases Archive", "source_kind": "vendor-index", - "elapsed_seconds": 2.531, + "elapsed_seconds": 2.617, "kind": "vendor-index", "items_seen": 1276 }, @@ -147,7 +147,7 @@ "system_id": "django", "source_name": "Django Security Weblog", "source_kind": "vendor-index", - "elapsed_seconds": 2.433, + "elapsed_seconds": 2.285, "kind": "vendor-index", "items_seen": 332 }, @@ -155,7 +155,7 @@ "system_id": "django", "source_name": "OSV Django", "source_kind": "osv-batch", - "elapsed_seconds": 1.877, + "elapsed_seconds": 1.701, "kind": "osv-batch", "items_seen": 1 }, @@ -163,7 +163,7 @@ "system_id": "drupal", "source_name": "Drupal Security Advisories RSS", "source_kind": "rss-feed", - "elapsed_seconds": 0.829, + "elapsed_seconds": 0.724, "kind": "rss-feed", "items_seen": 20 }, @@ -171,7 +171,7 @@ "system_id": "drupal", "source_name": "OSV Drupal", "source_kind": "osv-batch", - "elapsed_seconds": 0.006, + "elapsed_seconds": 0.003, "kind": "osv-batch", "items_seen": 1 }, @@ -179,7 +179,7 @@ "system_id": "echo", "source_name": "OSV Echo", "source_kind": "osv-batch", - "elapsed_seconds": 1.878, + "elapsed_seconds": 1.703, "kind": "osv-batch", "items_seen": 1 }, @@ -187,7 +187,7 @@ "system_id": "esbuild", "source_name": "OSV esbuild", "source_kind": "osv-batch", - "elapsed_seconds": 1.47, + "elapsed_seconds": 1.367, "kind": "osv-batch", "items_seen": 1 }, @@ -195,7 +195,7 @@ "system_id": "express", "source_name": "OSV Express", "source_kind": "osv-batch", - "elapsed_seconds": 1.439, + "elapsed_seconds": 1.216, "kind": "osv-batch", "items_seen": 1 }, @@ -203,7 +203,7 @@ "system_id": "fastify", "source_name": "OSV Fastify", "source_kind": "osv-batch", - "elapsed_seconds": 1.439, + "elapsed_seconds": 1.217, "kind": "osv-batch", "items_seen": 1 }, @@ -211,7 +211,7 @@ "system_id": "flask", "source_name": "OSV Flask", "source_kind": "osv-batch", - "elapsed_seconds": 1.877, + "elapsed_seconds": 1.702, "kind": "osv-batch", "items_seen": 1 }, @@ -219,7 +219,7 @@ "system_id": "ghost", "source_name": "Ghost GitHub Advisories", "source_kind": "html-links", - "elapsed_seconds": 1.771, + "elapsed_seconds": 1.217, "kind": "html-links", "items_seen": 119 }, @@ -227,7 +227,7 @@ "system_id": "ghost", "source_name": "OSV Ghost", "source_kind": "osv-batch", - "elapsed_seconds": 0.005, + "elapsed_seconds": 0.003, "kind": "osv-batch", "items_seen": 1 }, @@ -235,7 +235,7 @@ "system_id": "gin", "source_name": "OSV Gin", "source_kind": "osv-batch", - "elapsed_seconds": 1.877, + "elapsed_seconds": 1.703, "kind": "osv-batch", "items_seen": 1 }, @@ -243,7 +243,7 @@ "system_id": "gitea", "source_name": "GitHub Gitea Advisories", "source_kind": "html-links", - "elapsed_seconds": 4.003, + "elapsed_seconds": 3.103, "kind": "html-links", "items_seen": 98 }, @@ -251,7 +251,7 @@ "system_id": "gitea", "source_name": "OSV Gitea", "source_kind": "osv-batch", - "elapsed_seconds": 2.628, + "elapsed_seconds": 2.259, "kind": "osv-batch", "items_seen": 1 }, @@ -259,7 +259,7 @@ "system_id": "gitlab-ce", "source_name": "GitLab Advisory Database", "source_kind": "html-links", - "elapsed_seconds": 3.55, + "elapsed_seconds": 3.272, "kind": "html-links", "items_seen": 5 }, @@ -267,7 +267,7 @@ "system_id": "gitlab-ce", "source_name": "GitLab Security Releases", "source_kind": "html-links", - "elapsed_seconds": 3.18, + "elapsed_seconds": 3.091, "kind": "html-links", "items_seen": 250 }, @@ -275,7 +275,7 @@ "system_id": "gitlab-ce", "source_name": "GitLab Security Releases Atom", "source_kind": "atom-feed", - "elapsed_seconds": 3.395, + "elapsed_seconds": 4.158, "kind": "atom-feed", "items_seen": 186 }, @@ -283,7 +283,7 @@ "system_id": "grafana", "source_name": "CISA KEV Grafana", "source_kind": "kev-json", - "elapsed_seconds": 3.4, + "elapsed_seconds": 3.513, "kind": "kev-json", "items_seen": 1545 }, @@ -291,7 +291,7 @@ "system_id": "grafana", "source_name": "Grafana Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 3.568, + "elapsed_seconds": 3.852, "kind": "html-links", "items_seen": 159 }, @@ -299,7 +299,7 @@ "system_id": "hapi", "source_name": "OSV Hapi", "source_kind": "osv-batch", - "elapsed_seconds": 1.439, + "elapsed_seconds": 1.217, "kind": "osv-batch", "items_seen": 1 }, @@ -307,7 +307,7 @@ "system_id": "haproxy", "source_name": "HAProxy Blog Feed", "source_kind": "rss-feed", - "elapsed_seconds": 5.019, + "elapsed_seconds": 4.003, "kind": "rss-feed", "items_seen": 10 }, @@ -315,7 +315,7 @@ "system_id": "jenkins", "source_name": "Jenkins Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 4.303, + "elapsed_seconds": 3.186, "kind": "html-links", "items_seen": 1194 }, @@ -323,7 +323,7 @@ "system_id": "jenkins", "source_name": "Jenkins Security Advisories RSS", "source_kind": "rss-feed", - "elapsed_seconds": 3.314, + "elapsed_seconds": 3.284, "kind": "rss-feed", "items_seen": 96 }, @@ -331,7 +331,7 @@ "system_id": "joomla", "source_name": "Joomla Security Centre", "source_kind": "html-links", - "elapsed_seconds": 2.302, + "elapsed_seconds": 1.204, "kind": "html-links", "items_seen": 139 }, @@ -339,7 +339,7 @@ "system_id": "joomla", "source_name": "OSV Joomla", "source_kind": "osv-batch", - "elapsed_seconds": 0.006, + "elapsed_seconds": 0.003, "kind": "osv-batch", "items_seen": 1 }, @@ -347,7 +347,7 @@ "system_id": "kibana", "source_name": "Elastic Security Announcements", "source_kind": "html-links", - "elapsed_seconds": 4.005, + "elapsed_seconds": 3.794, "kind": "html-links", "items_seen": 71 }, @@ -355,7 +355,7 @@ "system_id": "kibana", "source_name": "Elastic Security Announcements RSS", "source_kind": "rss-feed", - "elapsed_seconds": 4.874, + "elapsed_seconds": 3.703, "kind": "rss-feed", "items_seen": 25 }, @@ -363,7 +363,7 @@ "system_id": "koa", "source_name": "OSV Koa", "source_kind": "osv-batch", - "elapsed_seconds": 1.439, + "elapsed_seconds": 1.216, "kind": "osv-batch", "items_seen": 1 }, @@ -371,7 +371,7 @@ "system_id": "laravel", "source_name": "OSV Laravel", "source_kind": "osv-batch", - "elapsed_seconds": 1.663, + "elapsed_seconds": 1.526, "kind": "osv-batch", "items_seen": 1 }, @@ -379,7 +379,7 @@ "system_id": "magento-open-source", "source_name": "Magento GitHub Advisories", "source_kind": "html-links", - "elapsed_seconds": 1.417, + "elapsed_seconds": 1.195, "kind": "html-links", "items_seen": 99 }, @@ -395,7 +395,7 @@ "system_id": "magento-open-source", "source_name": "Sansec Research", "source_kind": "html-links", - "elapsed_seconds": 1.128, + "elapsed_seconds": 1.22, "kind": "html-links", "items_seen": 134 }, @@ -403,7 +403,7 @@ "system_id": "mattermost", "source_name": "Mattermost Security Updates JSON", "source_kind": "json-feed", - "elapsed_seconds": 3.628, + "elapsed_seconds": 3.492, "kind": "json-feed", "items_seen": 594 }, @@ -411,7 +411,7 @@ "system_id": "mattermost", "source_name": "OSV Mattermost", "source_kind": "osv-batch", - "elapsed_seconds": 2.829, + "elapsed_seconds": 2.773, "kind": "osv-batch", "items_seen": 1 }, @@ -419,7 +419,7 @@ "system_id": "mediawiki", "source_name": "MediaWiki Announce RSS", "source_kind": "rss-feed", - "elapsed_seconds": 2.681, + "elapsed_seconds": 1.744, "kind": "rss-feed", "items_seen": 30 }, @@ -427,7 +427,7 @@ "system_id": "mediawiki", "source_name": "OSV MediaWiki", "source_kind": "osv-batch", - "elapsed_seconds": 0.003, + "elapsed_seconds": 0.002, "kind": "osv-batch", "items_seen": 1 }, @@ -435,7 +435,7 @@ "system_id": "medusa", "source_name": "GitHub Medusa Advisories", "source_kind": "html-links", - "elapsed_seconds": 2.623, + "elapsed_seconds": 2.053, "kind": "html-links", "items_seen": 102 }, @@ -443,7 +443,7 @@ "system_id": "medusa", "source_name": "OSV Medusa", "source_kind": "osv-batch", - "elapsed_seconds": 1.165, + "elapsed_seconds": 1.205, "kind": "osv-batch", "items_seen": 1 }, @@ -459,7 +459,7 @@ "system_id": "nestjs", "source_name": "OSV NestJS", "source_kind": "osv-batch", - "elapsed_seconds": 1.439, + "elapsed_seconds": 1.216, "kind": "osv-batch", "items_seen": 1 }, @@ -467,7 +467,7 @@ "system_id": "nextjs", "source_name": "GitHub Next.js Advisories", "source_kind": "html-links", - "elapsed_seconds": 2.533, + "elapsed_seconds": 2.062, "kind": "html-links", "items_seen": 123 }, @@ -475,7 +475,7 @@ "system_id": "nextjs", "source_name": "OSV Next.js", "source_kind": "osv-batch", - "elapsed_seconds": 1.235, + "elapsed_seconds": 1.206, "kind": "osv-batch", "items_seen": 1 }, @@ -483,7 +483,7 @@ "system_id": "nginx", "source_name": "CISA KEV NGINX", "source_kind": "kev-json", - "elapsed_seconds": 2.638, + "elapsed_seconds": 2.979, "kind": "kev-json", "items_seen": 1545 }, @@ -491,7 +491,7 @@ "system_id": "nginx", "source_name": "NGINX Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 2.805, + "elapsed_seconds": 2.565, "kind": "html-links", "items_seen": 138 }, @@ -499,7 +499,7 @@ "system_id": "nodejs", "source_name": "CISA KEV Node.js", "source_kind": "kev-json", - "elapsed_seconds": 2.657, + "elapsed_seconds": 2.335, "kind": "kev-json", "items_seen": 1545 }, @@ -507,7 +507,7 @@ "system_id": "nodejs", "source_name": "Node.js Security Releases", "source_kind": "html-links", - "elapsed_seconds": 2.409, + "elapsed_seconds": 2.258, "kind": "html-links", "items_seen": 74 }, @@ -515,7 +515,7 @@ "system_id": "nuxt", "source_name": "Nuxt Security", "source_kind": "html-links", - "elapsed_seconds": 3.025, + "elapsed_seconds": 2.236, "kind": "html-links", "items_seen": 118 }, @@ -523,7 +523,7 @@ "system_id": "nuxt", "source_name": "OSV Nuxt", "source_kind": "osv-batch", - "elapsed_seconds": 1.416, + "elapsed_seconds": 1.21, "kind": "osv-batch", "items_seen": 1 }, @@ -531,7 +531,7 @@ "system_id": "opencart", "source_name": "OSV OpenCart", "source_kind": "osv-batch", - "elapsed_seconds": 1.127, + "elapsed_seconds": 1.183, "kind": "osv-batch", "items_seen": 1 }, @@ -539,7 +539,7 @@ "system_id": "opencart", "source_name": "OpenCart Releases", "source_kind": "html-links", - "elapsed_seconds": 2.819, + "elapsed_seconds": 2.131, "kind": "html-links", "items_seen": 1500 }, @@ -547,7 +547,7 @@ "system_id": "openmage", "source_name": "OSV OpenMage", "source_kind": "osv-batch", - "elapsed_seconds": 0.001, + "elapsed_seconds": 0.002, "kind": "osv-batch", "items_seen": 1 }, @@ -555,7 +555,7 @@ "system_id": "openmage", "source_name": "OpenMage GitHub Advisories", "source_kind": "html-links", - "elapsed_seconds": 1.487, + "elapsed_seconds": 1.183, "kind": "html-links", "items_seen": 125 }, @@ -563,7 +563,7 @@ "system_id": "phpmyadmin", "source_name": "OSV phpMyAdmin", "source_kind": "osv-batch", - "elapsed_seconds": 2.624, + "elapsed_seconds": 2.248, "kind": "osv-batch", "items_seen": 1 }, @@ -571,7 +571,7 @@ "system_id": "phpmyadmin", "source_name": "phpMyAdmin Security Page", "source_kind": "html-links", - "elapsed_seconds": 3.221, + "elapsed_seconds": 2.967, "kind": "html-links", "items_seen": 262 }, @@ -579,7 +579,7 @@ "system_id": "prestashop", "source_name": "Friends Of Presta Security", "source_kind": "html-links", - "elapsed_seconds": 1.437, + "elapsed_seconds": 1.561, "kind": "html-links", "items_seen": 38 }, @@ -587,7 +587,7 @@ "system_id": "prestashop", "source_name": "GitHub PrestaShop Advisories", "source_kind": "html-links", - "elapsed_seconds": 2.234, + "elapsed_seconds": 1.701, "kind": "html-links", "items_seen": 127 }, @@ -595,7 +595,7 @@ "system_id": "prestashop", "source_name": "OSV PrestaShop", "source_kind": "osv-batch", - "elapsed_seconds": 0.998, + "elapsed_seconds": 0.861, "kind": "osv-batch", "items_seen": 1 }, @@ -603,7 +603,7 @@ "system_id": "prestashop", "source_name": "PrestaShop Security Page", "source_kind": "html-links", - "elapsed_seconds": 1.165, + "elapsed_seconds": 1.517, "kind": "html-links", "items_seen": 60 }, @@ -611,7 +611,7 @@ "system_id": "rails", "source_name": "OSV Rails", "source_kind": "osv-batch", - "elapsed_seconds": 1.877, + "elapsed_seconds": 1.702, "kind": "osv-batch", "items_seen": 1 }, @@ -619,7 +619,7 @@ "system_id": "react", "source_name": "GitHub React Advisories", "source_kind": "html-links", - "elapsed_seconds": 2.956, + "elapsed_seconds": 2.057, "kind": "html-links", "items_seen": 110 }, @@ -627,7 +627,7 @@ "system_id": "react", "source_name": "OSV React", "source_kind": "osv-batch", - "elapsed_seconds": 1.169, + "elapsed_seconds": 1.205, "kind": "osv-batch", "items_seen": 1 }, @@ -635,7 +635,7 @@ "system_id": "redmine", "source_name": "OSV Redmine", "source_kind": "osv-batch", - "elapsed_seconds": 2.829, + "elapsed_seconds": 2.948, "kind": "osv-batch", "items_seen": 1 }, @@ -643,7 +643,7 @@ "system_id": "redmine", "source_name": "Redmine Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 4.282, + "elapsed_seconds": 4.655, "kind": "html-links", "items_seen": 371 }, @@ -651,7 +651,7 @@ "system_id": "saleor", "source_name": "GitHub Saleor Advisories", "source_kind": "html-links", - "elapsed_seconds": 2.954, + "elapsed_seconds": 2.23, "kind": "html-links", "items_seen": 120 }, @@ -659,7 +659,7 @@ "system_id": "saleor", "source_name": "OSV Saleor", "source_kind": "osv-batch", - "elapsed_seconds": 1.134, + "elapsed_seconds": 1.187, "kind": "osv-batch", "items_seen": 1 }, @@ -667,7 +667,7 @@ "system_id": "shopware", "source_name": "OSV Shopware", "source_kind": "osv-batch", - "elapsed_seconds": 1.113, + "elapsed_seconds": 0.987, "kind": "osv-batch", "items_seen": 1 }, @@ -675,7 +675,7 @@ "system_id": "shopware", "source_name": "Shopware Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 2.628, + "elapsed_seconds": 2.226, "kind": "html-links", "items_seen": 129 }, @@ -683,7 +683,7 @@ "system_id": "spring-boot", "source_name": "OSV Spring Boot", "source_kind": "osv-batch", - "elapsed_seconds": 1.663, + "elapsed_seconds": 1.525, "kind": "osv-batch", "items_seen": 1 }, @@ -691,7 +691,7 @@ "system_id": "spring-boot", "source_name": "Spring Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 2.258, + "elapsed_seconds": 2.615, "kind": "html-links", "items_seen": 118 }, @@ -699,7 +699,7 @@ "system_id": "spring-framework", "source_name": "OSV Spring Framework", "source_kind": "osv-batch", - "elapsed_seconds": 1.486, + "elapsed_seconds": 1.384, "kind": "osv-batch", "items_seen": 1 }, @@ -707,7 +707,7 @@ "system_id": "spring-framework", "source_name": "Spring Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 2.091, + "elapsed_seconds": 2.573, "kind": "html-links", "items_seen": 118 }, @@ -715,7 +715,7 @@ "system_id": "spring-security", "source_name": "OSV Spring Security", "source_kind": "osv-batch", - "elapsed_seconds": 1.523, + "elapsed_seconds": 1.519, "kind": "osv-batch", "items_seen": 1 }, @@ -723,7 +723,7 @@ "system_id": "spring-security", "source_name": "Spring Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 2.304, + "elapsed_seconds": 2.761, "kind": "html-links", "items_seen": 118 }, @@ -731,7 +731,7 @@ "system_id": "strapi", "source_name": "OSV Strapi", "source_kind": "osv-batch", - "elapsed_seconds": 0.005, + "elapsed_seconds": 0.003, "kind": "osv-batch", "items_seen": 1 }, @@ -739,7 +739,7 @@ "system_id": "strapi", "source_name": "Strapi GitHub Advisories", "source_kind": "html-links", - "elapsed_seconds": 1.443, + "elapsed_seconds": 1.197, "kind": "html-links", "items_seen": 124 }, @@ -747,7 +747,7 @@ "system_id": "sveltekit", "source_name": "OSV SvelteKit", "source_kind": "osv-batch", - "elapsed_seconds": 1.439, + "elapsed_seconds": 1.215, "kind": "osv-batch", "items_seen": 1 }, @@ -755,7 +755,7 @@ "system_id": "symfony", "source_name": "OSV Symfony", "source_kind": "osv-batch", - "elapsed_seconds": 1.663, + "elapsed_seconds": 1.527, "kind": "osv-batch", "items_seen": 1 }, @@ -763,7 +763,7 @@ "system_id": "traefik", "source_name": "GitHub Traefik Advisories", "source_kind": "html-links", - "elapsed_seconds": 4.008, + "elapsed_seconds": 3.102, "kind": "html-links", "items_seen": 124 }, @@ -771,7 +771,7 @@ "system_id": "traefik", "source_name": "OSV Traefik", "source_kind": "osv-batch", - "elapsed_seconds": 2.532, + "elapsed_seconds": 2.231, "kind": "osv-batch", "items_seen": 1 }, @@ -779,7 +779,7 @@ "system_id": "undici", "source_name": "OSV Undici", "source_kind": "osv-batch", - "elapsed_seconds": 1.47, + "elapsed_seconds": 1.366, "kind": "osv-batch", "items_seen": 1 }, @@ -787,7 +787,7 @@ "system_id": "vite", "source_name": "OSV Vite", "source_kind": "osv-batch", - "elapsed_seconds": 1.437, + "elapsed_seconds": 1.214, "kind": "osv-batch", "items_seen": 1 }, @@ -795,7 +795,7 @@ "system_id": "vite", "source_name": "Vite Security", "source_kind": "html-links", - "elapsed_seconds": 2.822, + "elapsed_seconds": 2.062, "kind": "html-links", "items_seen": 124 }, @@ -803,7 +803,7 @@ "system_id": "vue", "source_name": "OSV Vue", "source_kind": "osv-batch", - "elapsed_seconds": 1.4, + "elapsed_seconds": 1.209, "kind": "osv-batch", "items_seen": 1 }, @@ -811,7 +811,7 @@ "system_id": "vue", "source_name": "Vue Security", "source_kind": "html-links", - "elapsed_seconds": 2.824, + "elapsed_seconds": 2.245, "kind": "html-links", "items_seen": 111 }, @@ -819,7 +819,7 @@ "system_id": "webpack", "source_name": "OSV webpack", "source_kind": "osv-batch", - "elapsed_seconds": 1.47, + "elapsed_seconds": 1.367, "kind": "osv-batch", "items_seen": 1 }, @@ -827,7 +827,7 @@ "system_id": "werkzeug", "source_name": "OSV Werkzeug", "source_kind": "osv-batch", - "elapsed_seconds": 1.877, + "elapsed_seconds": 1.702, "kind": "osv-batch", "items_seen": 1 }, @@ -835,7 +835,7 @@ "system_id": "woocommerce", "source_name": "GitHub WooCommerce Advisories", "source_kind": "html-links", - "elapsed_seconds": 1.663, + "elapsed_seconds": 1.178, "kind": "html-links", "items_seen": 107 }, @@ -843,7 +843,7 @@ "system_id": "woocommerce", "source_name": "OSV WooCommerce", "source_kind": "osv-batch", - "elapsed_seconds": 0.001, + "elapsed_seconds": 0.003, "kind": "osv-batch", "items_seen": 1 }, @@ -851,7 +851,7 @@ "system_id": "woocommerce", "source_name": "Patchstack Database", "source_kind": "html-links", - "elapsed_seconds": 1.169, + "elapsed_seconds": 2.948, "kind": "html-links", "items_seen": 193 }, @@ -859,7 +859,7 @@ "system_id": "woocommerce", "source_name": "Woo Developer Advisories", "source_kind": "html-links", - "elapsed_seconds": 1.235, + "elapsed_seconds": 0.861, "kind": "html-links", "items_seen": 121 }, @@ -867,7 +867,7 @@ "system_id": "woocommerce", "source_name": "Wordfence Vulnerability Database", "source_kind": "html-links", - "elapsed_seconds": 1.133, + "elapsed_seconds": 1.382, "kind": "html-links", "items_seen": 0 }, @@ -875,7 +875,7 @@ "system_id": "wordpress", "source_name": "Patchstack Database", "source_kind": "html-links", - "elapsed_seconds": 1.099, + "elapsed_seconds": 2.754, "kind": "html-links", "items_seen": 193 }, @@ -883,7 +883,7 @@ "system_id": "wordpress", "source_name": "PortSwigger Research", "source_kind": "html-links", - "elapsed_seconds": 1.117, + "elapsed_seconds": 1.369, "kind": "html-links", "items_seen": 99 }, @@ -891,7 +891,7 @@ "system_id": "wordpress", "source_name": "WPScan Vulnerability Database", "source_kind": "html-links", - "elapsed_seconds": 1.528, + "elapsed_seconds": 1.19, "kind": "html-links", "items_seen": 74 }, @@ -899,7 +899,7 @@ "system_id": "wordpress", "source_name": "WordPress Security News RSS", "source_kind": "rss-feed", - "elapsed_seconds": 1.405, + "elapsed_seconds": 0.989, "kind": "rss-feed", "items_seen": 10 }, @@ -907,81 +907,81 @@ "system_id": "wordpress", "source_name": "Wordfence Vulnerability Database", "source_kind": "html-links", - "elapsed_seconds": 0.313, + "elapsed_seconds": 0.674, "kind": "html-links", "items_seen": 0 } ], "failures": [], "slow_sources": [ - { - "system_id": "haproxy", - "source_name": "HAProxy Blog Feed", - "source_kind": "rss-feed", - "elapsed_seconds": 5.019, - "status": "ok" - }, - { - "system_id": "kibana", - "source_name": "Elastic Security Announcements RSS", - "source_kind": "rss-feed", - "elapsed_seconds": 4.874, - "status": "ok" - }, - { - "system_id": "jenkins", - "source_name": "Jenkins Security Advisories", - "source_kind": "html-links", - "elapsed_seconds": 4.303, - "status": "ok" - }, { "system_id": "redmine", "source_name": "Redmine Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 4.282, + "elapsed_seconds": 4.655, "status": "ok" }, { - "system_id": "traefik", - "source_name": "GitHub Traefik Advisories", - "source_kind": "html-links", - "elapsed_seconds": 4.008, + "system_id": "gitlab-ce", + "source_name": "GitLab Security Releases Atom", + "source_kind": "atom-feed", + "elapsed_seconds": 4.158, "status": "ok" }, { - "system_id": "kibana", - "source_name": "Elastic Security Announcements", - "source_kind": "html-links", - "elapsed_seconds": 4.005, - "status": "ok" - }, - { - "system_id": "gitea", - "source_name": "GitHub Gitea Advisories", - "source_kind": "html-links", + "system_id": "haproxy", + "source_name": "HAProxy Blog Feed", + "source_kind": "rss-feed", "elapsed_seconds": 4.003, "status": "ok" }, - { - "system_id": "caddy", - "source_name": "GitHub Caddy Advisories", - "source_kind": "html-links", - "elapsed_seconds": 3.835, - "status": "ok" - }, - { - "system_id": "mattermost", - "source_name": "Mattermost Security Updates JSON", - "source_kind": "json-feed", - "elapsed_seconds": 3.628, - "status": "ok" - }, { "system_id": "grafana", "source_name": "Grafana Security Advisories", "source_kind": "html-links", - "elapsed_seconds": 3.568, + "elapsed_seconds": 3.852, + "status": "ok" + }, + { + "system_id": "kibana", + "source_name": "Elastic Security Announcements", + "source_kind": "html-links", + "elapsed_seconds": 3.794, + "status": "ok" + }, + { + "system_id": "kibana", + "source_name": "Elastic Security Announcements RSS", + "source_kind": "rss-feed", + "elapsed_seconds": 3.703, + "status": "ok" + }, + { + "system_id": "grafana", + "source_name": "CISA KEV Grafana", + "source_kind": "kev-json", + "elapsed_seconds": 3.513, + "status": "ok" + }, + { + "system_id": "mattermost", + "source_name": "Mattermost Security Updates JSON", + "source_kind": "json-feed", + "elapsed_seconds": 3.492, + "status": "ok" + }, + { + "system_id": "jenkins", + "source_name": "Jenkins Security Advisories RSS", + "source_kind": "rss-feed", + "elapsed_seconds": 3.284, + "status": "ok" + }, + { + "system_id": "gitlab-ce", + "source_name": "GitLab Advisory Database", + "source_kind": "html-links", + "elapsed_seconds": 3.272, "status": "ok" } ], diff --git a/08-threat-intel/generated/dashboard/docs/architecture-library.html b/08-threat-intel/generated/dashboard/docs/architecture-library.html index 321b708f..999efe15 100644 --- a/08-threat-intel/generated/dashboard/docs/architecture-library.html +++ b/08-threat-intel/generated/dashboard/docs/architecture-library.html @@ -87,7 +87,7 @@

当前架构库镜像

工作台内置镜像页:当前架构库结构化数据镜像。
{
-  "generated_at": "2026-03-19T03:38:08+00:00",
+  "generated_at": "2026-03-19T09:17:16+00:00",
   "title": "当前架构库",
   "summary": "工作台、控制面、数据层、授权边界与系统覆盖的当前真值视图。",
   "sections": [
@@ -137,7 +137,7 @@
         },
         {
           "label": "生成时间",
-          "value": "2026-03-19T03:38:08+00:00"
+          "value": "2026-03-19T09:17:16+00:00"
         }
       ],
       "links": [
diff --git a/08-threat-intel/generated/dashboard/docs/source-catalog-audit.html b/08-threat-intel/generated/dashboard/docs/source-catalog-audit.html
index 21ec5c18..dc2052ca 100644
--- a/08-threat-intel/generated/dashboard/docs/source-catalog-audit.html
+++ b/08-threat-intel/generated/dashboard/docs/source-catalog-audit.html
@@ -88,7 +88,7 @@
       
工作台内置镜像页:active/retired source、replacement map 与覆盖摘要。
# Source Catalog Audit
 
-- generated_at: `2026-03-19T03:37:56+00:00`
+- generated_at: `2026-03-19T09:17:03+00:00`
 - systems: `62`
 - sources: `179`
 - active_sources: `113`
diff --git a/08-threat-intel/generated/dashboard/docs/testing-completeness-report.html b/08-threat-intel/generated/dashboard/docs/testing-completeness-report.html
index e5434971..503c6542 100644
--- a/08-threat-intel/generated/dashboard/docs/testing-completeness-report.html
+++ b/08-threat-intel/generated/dashboard/docs/testing-completeness-report.html
@@ -88,7 +88,7 @@
       
工作台内置镜像页:89 条 advisory 最新完整度、family 矩阵与 ingest 健康度。
# 全库 Advisory 完整度报告
 
-- 生成时间: `2026-03-19T03:38:08+00:00`
+- 生成时间: `2026-03-19T09:17:16+00:00`
 - 最新 advisory 完整度: `89/89` `verified-real`
 - 合成验证数量: `0`
 - 阻塞数量: `0`
@@ -96,7 +96,7 @@
 - 完整度百分比: `100.0%`
 - active source 全绿: `113/113`
 - source open alerts: `0`
-- 最近一次 source 全绿: `2026-03-19T03:38:01+00:00`
+- 最近一次 source 全绿: `2026-03-19T09:17:08+00:00`
 
 ## 系统覆盖矩阵
 
diff --git a/08-threat-intel/generated/dashboard/summary.json b/08-threat-intel/generated/dashboard/summary.json
index 68dd6957..93fbadbe 100644
--- a/08-threat-intel/generated/dashboard/summary.json
+++ b/08-threat-intel/generated/dashboard/summary.json
@@ -1,5 +1,5 @@
 {
-  "generated_at": "2026-03-19T03:38:08+00:00",
+  "generated_at": "2026-03-19T09:17:16+00:00",
   "advisory_count": 2392,
   "run_count": 140,
   "statuses": {
@@ -158,7 +158,7 @@
     "green_source_count": 113,
     "source_failure_count": 0,
     "open_alert_count": 0,
-    "last_fully_green_run": "2026-03-19T03:38:01+00:00"
+    "last_fully_green_run": "2026-03-19T09:17:08+00:00"
   },
   "systems": [
     {
diff --git a/08-threat-intel/generated/latest-ingest.md b/08-threat-intel/generated/latest-ingest.md
index 90affd1b..ad8a193e 100644
--- a/08-threat-intel/generated/latest-ingest.md
+++ b/08-threat-intel/generated/latest-ingest.md
@@ -1,6 +1,6 @@
 # 最新同步摘要
 
-- 渲染时间: `2026-03-19T03:38:08+00:00`
+- 渲染时间: `2026-03-19T09:17:15+00:00`
 - 系统数量: `62`
 - Advisory 数量: `2348`
 - 重点 Markdown 数量: `156`
diff --git a/08-threat-intel/generated/monitor-summary.json b/08-threat-intel/generated/monitor-summary.json
index 916f878e..5df12d99 100644
--- a/08-threat-intel/generated/monitor-summary.json
+++ b/08-threat-intel/generated/monitor-summary.json
@@ -1,11 +1,11 @@
 {
-  "generated_at": "2026-03-19T03:38:01+00:00",
+  "generated_at": "2026-03-19T09:17:08+00:00",
   "active_source_count": 113,
   "green_source_count": 113,
   "source_failure_count": 0,
   "open_alert_count": 0,
   "resolved_alert_count": 4,
-  "last_fully_green_run": "2026-03-19T03:38:01+00:00",
+  "last_fully_green_run": "2026-03-19T09:17:08+00:00",
   "source_catalog": {
     "system_count": 62,
     "source_count": 179,
diff --git a/08-threat-intel/generated/run-summary.json b/08-threat-intel/generated/run-summary.json
index c8e8298f..acc18ae2 100644
--- a/08-threat-intel/generated/run-summary.json
+++ b/08-threat-intel/generated/run-summary.json
@@ -1,5 +1,5 @@
 {
-  "generated_at": "2026-03-19T03:38:08+00:00",
+  "generated_at": "2026-03-19T09:17:15+00:00",
   "system_count": 62,
   "advisory_count": 2348,
   "markdown_count": 156,
diff --git a/08-threat-intel/generated/source-catalog-audit.json b/08-threat-intel/generated/source-catalog-audit.json
index df8ed15f..cbce5e3e 100644
--- a/08-threat-intel/generated/source-catalog-audit.json
+++ b/08-threat-intel/generated/source-catalog-audit.json
@@ -1,5 +1,5 @@
 {
-  "generated_at": "2026-03-19T03:37:56+00:00",
+  "generated_at": "2026-03-19T09:17:03+00:00",
   "system_count": 62,
   "source_count": 179,
   "active_source_count": 113,
diff --git a/08-threat-intel/generated/source-catalog-audit.md b/08-threat-intel/generated/source-catalog-audit.md
index 528199cd..ed85409d 100644
--- a/08-threat-intel/generated/source-catalog-audit.md
+++ b/08-threat-intel/generated/source-catalog-audit.md
@@ -1,6 +1,6 @@
 # Source Catalog Audit
 
-- generated_at: `2026-03-19T03:37:56+00:00`
+- generated_at: `2026-03-19T09:17:03+00:00`
 - systems: `62`
 - sources: `179`
 - active_sources: `113`
diff --git a/08-threat-intel/generated/source-health.json b/08-threat-intel/generated/source-health.json
index 8b8783d7..df8e8b22 100644
--- a/08-threat-intel/generated/source-health.json
+++ b/08-threat-intel/generated/source-health.json
@@ -1,17 +1,17 @@
 {
-  "generated_at": "2026-03-19T03:38:01+00:00",
+  "generated_at": "2026-03-19T09:17:08+00:00",
   "active_source_count": 113,
   "green_source_count": 113,
   "failure_count": 0,
   "all_green": true,
-  "last_fully_green_run": "2026-03-19T03:38:01+00:00",
+  "last_fully_green_run": "2026-03-19T09:17:08+00:00",
   "retries_performed": 0,
   "probes": [
     {
       "system_id": "adminer",
       "source_name": "OSV Adminer",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 2.624,
+      "elapsed_seconds": 2.249,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -19,7 +19,7 @@
       "system_id": "adobe-commerce",
       "source_name": "Adobe Magento Security Index",
       "source_kind": "vendor-index",
-      "elapsed_seconds": 0.544,
+      "elapsed_seconds": 0.906,
       "kind": "vendor-index",
       "items_seen": 46
     },
@@ -27,7 +27,7 @@
       "system_id": "angular",
       "source_name": "OSV Angular",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.439,
+      "elapsed_seconds": 1.215,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -35,7 +35,7 @@
       "system_id": "apache-httpd",
       "source_name": "Apache HTTPD Security",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.739,
+      "elapsed_seconds": 2.765,
       "kind": "html-links",
       "items_seen": 182
     },
@@ -43,7 +43,7 @@
       "system_id": "apache-httpd",
       "source_name": "CISA KEV Apache HTTPD",
       "source_kind": "kev-json",
-      "elapsed_seconds": 2.768,
+      "elapsed_seconds": 3.122,
       "kind": "kev-json",
       "items_seen": 1545
     },
@@ -51,7 +51,7 @@
       "system_id": "apache-tomcat",
       "source_name": "Apache Tomcat Security",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.707,
+      "elapsed_seconds": 2.772,
       "kind": "html-links",
       "items_seen": 270
     },
@@ -59,7 +59,7 @@
       "system_id": "apache-tomcat",
       "source_name": "CISA KEV Tomcat",
       "source_kind": "kev-json",
-      "elapsed_seconds": 2.829,
+      "elapsed_seconds": 3.12,
       "kind": "kev-json",
       "items_seen": 1545
     },
@@ -67,7 +67,7 @@
       "system_id": "aspnet-core",
       "source_name": "OSV ASP.NET Core",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.877,
+      "elapsed_seconds": 1.703,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -75,7 +75,7 @@
       "system_id": "astro",
       "source_name": "OSV Astro",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.439,
+      "elapsed_seconds": 1.216,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -83,7 +83,7 @@
       "system_id": "caddy",
       "source_name": "GitHub Caddy Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 3.835,
+      "elapsed_seconds": 3.086,
       "kind": "html-links",
       "items_seen": 114
     },
@@ -91,7 +91,7 @@
       "system_id": "caddy",
       "source_name": "OSV Caddy",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 2.434,
+      "elapsed_seconds": 2.227,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -99,7 +99,7 @@
       "system_id": "directus",
       "source_name": "Directus GitHub Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 1.474,
+      "elapsed_seconds": 1.208,
       "kind": "html-links",
       "items_seen": 127
     },
@@ -107,7 +107,7 @@
       "system_id": "directus",
       "source_name": "OSV Directus",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 0.004,
+      "elapsed_seconds": 0.003,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -115,7 +115,7 @@
       "system_id": "discourse",
       "source_name": "Discourse Release Notes RSS",
       "source_kind": "rss-feed",
-      "elapsed_seconds": 1.879,
+      "elapsed_seconds": 1.525,
       "kind": "rss-feed",
       "items_seen": 30
     },
@@ -123,7 +123,7 @@
       "system_id": "discourse",
       "source_name": "Discourse Security RSS",
       "source_kind": "rss-feed",
-      "elapsed_seconds": 0.999,
+      "elapsed_seconds": 0.717,
       "kind": "rss-feed",
       "items_seen": 3
     },
@@ -131,7 +131,7 @@
       "system_id": "discourse",
       "source_name": "OSV Discourse",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 0.002,
+      "elapsed_seconds": 0.001,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -139,7 +139,7 @@
       "system_id": "django",
       "source_name": "Django Security Releases Archive",
       "source_kind": "vendor-index",
-      "elapsed_seconds": 2.531,
+      "elapsed_seconds": 2.617,
       "kind": "vendor-index",
       "items_seen": 1276
     },
@@ -147,7 +147,7 @@
       "system_id": "django",
       "source_name": "Django Security Weblog",
       "source_kind": "vendor-index",
-      "elapsed_seconds": 2.433,
+      "elapsed_seconds": 2.285,
       "kind": "vendor-index",
       "items_seen": 332
     },
@@ -155,7 +155,7 @@
       "system_id": "django",
       "source_name": "OSV Django",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.877,
+      "elapsed_seconds": 1.701,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -163,7 +163,7 @@
       "system_id": "drupal",
       "source_name": "Drupal Security Advisories RSS",
       "source_kind": "rss-feed",
-      "elapsed_seconds": 0.829,
+      "elapsed_seconds": 0.724,
       "kind": "rss-feed",
       "items_seen": 20
     },
@@ -171,7 +171,7 @@
       "system_id": "drupal",
       "source_name": "OSV Drupal",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 0.006,
+      "elapsed_seconds": 0.003,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -179,7 +179,7 @@
       "system_id": "echo",
       "source_name": "OSV Echo",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.878,
+      "elapsed_seconds": 1.703,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -187,7 +187,7 @@
       "system_id": "esbuild",
       "source_name": "OSV esbuild",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.47,
+      "elapsed_seconds": 1.367,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -195,7 +195,7 @@
       "system_id": "express",
       "source_name": "OSV Express",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.439,
+      "elapsed_seconds": 1.216,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -203,7 +203,7 @@
       "system_id": "fastify",
       "source_name": "OSV Fastify",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.439,
+      "elapsed_seconds": 1.217,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -211,7 +211,7 @@
       "system_id": "flask",
       "source_name": "OSV Flask",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.877,
+      "elapsed_seconds": 1.702,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -219,7 +219,7 @@
       "system_id": "ghost",
       "source_name": "Ghost GitHub Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 1.771,
+      "elapsed_seconds": 1.217,
       "kind": "html-links",
       "items_seen": 119
     },
@@ -227,7 +227,7 @@
       "system_id": "ghost",
       "source_name": "OSV Ghost",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 0.005,
+      "elapsed_seconds": 0.003,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -235,7 +235,7 @@
       "system_id": "gin",
       "source_name": "OSV Gin",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.877,
+      "elapsed_seconds": 1.703,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -243,7 +243,7 @@
       "system_id": "gitea",
       "source_name": "GitHub Gitea Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 4.003,
+      "elapsed_seconds": 3.103,
       "kind": "html-links",
       "items_seen": 98
     },
@@ -251,7 +251,7 @@
       "system_id": "gitea",
       "source_name": "OSV Gitea",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 2.628,
+      "elapsed_seconds": 2.259,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -259,7 +259,7 @@
       "system_id": "gitlab-ce",
       "source_name": "GitLab Advisory Database",
       "source_kind": "html-links",
-      "elapsed_seconds": 3.55,
+      "elapsed_seconds": 3.272,
       "kind": "html-links",
       "items_seen": 5
     },
@@ -267,7 +267,7 @@
       "system_id": "gitlab-ce",
       "source_name": "GitLab Security Releases",
       "source_kind": "html-links",
-      "elapsed_seconds": 3.18,
+      "elapsed_seconds": 3.091,
       "kind": "html-links",
       "items_seen": 250
     },
@@ -275,7 +275,7 @@
       "system_id": "gitlab-ce",
       "source_name": "GitLab Security Releases Atom",
       "source_kind": "atom-feed",
-      "elapsed_seconds": 3.395,
+      "elapsed_seconds": 4.158,
       "kind": "atom-feed",
       "items_seen": 186
     },
@@ -283,7 +283,7 @@
       "system_id": "grafana",
       "source_name": "CISA KEV Grafana",
       "source_kind": "kev-json",
-      "elapsed_seconds": 3.4,
+      "elapsed_seconds": 3.513,
       "kind": "kev-json",
       "items_seen": 1545
     },
@@ -291,7 +291,7 @@
       "system_id": "grafana",
       "source_name": "Grafana Security Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 3.568,
+      "elapsed_seconds": 3.852,
       "kind": "html-links",
       "items_seen": 159
     },
@@ -299,7 +299,7 @@
       "system_id": "hapi",
       "source_name": "OSV Hapi",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.439,
+      "elapsed_seconds": 1.217,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -307,7 +307,7 @@
       "system_id": "haproxy",
       "source_name": "HAProxy Blog Feed",
       "source_kind": "rss-feed",
-      "elapsed_seconds": 5.019,
+      "elapsed_seconds": 4.003,
       "kind": "rss-feed",
       "items_seen": 10
     },
@@ -315,7 +315,7 @@
       "system_id": "jenkins",
       "source_name": "Jenkins Security Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 4.303,
+      "elapsed_seconds": 3.186,
       "kind": "html-links",
       "items_seen": 1194
     },
@@ -323,7 +323,7 @@
       "system_id": "jenkins",
       "source_name": "Jenkins Security Advisories RSS",
       "source_kind": "rss-feed",
-      "elapsed_seconds": 3.314,
+      "elapsed_seconds": 3.284,
       "kind": "rss-feed",
       "items_seen": 96
     },
@@ -331,7 +331,7 @@
       "system_id": "joomla",
       "source_name": "Joomla Security Centre",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.302,
+      "elapsed_seconds": 1.204,
       "kind": "html-links",
       "items_seen": 139
     },
@@ -339,7 +339,7 @@
       "system_id": "joomla",
       "source_name": "OSV Joomla",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 0.006,
+      "elapsed_seconds": 0.003,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -347,7 +347,7 @@
       "system_id": "kibana",
       "source_name": "Elastic Security Announcements",
       "source_kind": "html-links",
-      "elapsed_seconds": 4.005,
+      "elapsed_seconds": 3.794,
       "kind": "html-links",
       "items_seen": 71
     },
@@ -355,7 +355,7 @@
       "system_id": "kibana",
       "source_name": "Elastic Security Announcements RSS",
       "source_kind": "rss-feed",
-      "elapsed_seconds": 4.874,
+      "elapsed_seconds": 3.703,
       "kind": "rss-feed",
       "items_seen": 25
     },
@@ -363,7 +363,7 @@
       "system_id": "koa",
       "source_name": "OSV Koa",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.439,
+      "elapsed_seconds": 1.216,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -371,7 +371,7 @@
       "system_id": "laravel",
       "source_name": "OSV Laravel",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.663,
+      "elapsed_seconds": 1.526,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -379,7 +379,7 @@
       "system_id": "magento-open-source",
       "source_name": "Magento GitHub Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 1.417,
+      "elapsed_seconds": 1.195,
       "kind": "html-links",
       "items_seen": 99
     },
@@ -395,7 +395,7 @@
       "system_id": "magento-open-source",
       "source_name": "Sansec Research",
       "source_kind": "html-links",
-      "elapsed_seconds": 1.128,
+      "elapsed_seconds": 1.22,
       "kind": "html-links",
       "items_seen": 134
     },
@@ -403,7 +403,7 @@
       "system_id": "mattermost",
       "source_name": "Mattermost Security Updates JSON",
       "source_kind": "json-feed",
-      "elapsed_seconds": 3.628,
+      "elapsed_seconds": 3.492,
       "kind": "json-feed",
       "items_seen": 594
     },
@@ -411,7 +411,7 @@
       "system_id": "mattermost",
       "source_name": "OSV Mattermost",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 2.829,
+      "elapsed_seconds": 2.773,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -419,7 +419,7 @@
       "system_id": "mediawiki",
       "source_name": "MediaWiki Announce RSS",
       "source_kind": "rss-feed",
-      "elapsed_seconds": 2.681,
+      "elapsed_seconds": 1.744,
       "kind": "rss-feed",
       "items_seen": 30
     },
@@ -427,7 +427,7 @@
       "system_id": "mediawiki",
       "source_name": "OSV MediaWiki",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 0.003,
+      "elapsed_seconds": 0.002,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -435,7 +435,7 @@
       "system_id": "medusa",
       "source_name": "GitHub Medusa Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.623,
+      "elapsed_seconds": 2.053,
       "kind": "html-links",
       "items_seen": 102
     },
@@ -443,7 +443,7 @@
       "system_id": "medusa",
       "source_name": "OSV Medusa",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.165,
+      "elapsed_seconds": 1.205,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -459,7 +459,7 @@
       "system_id": "nestjs",
       "source_name": "OSV NestJS",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.439,
+      "elapsed_seconds": 1.216,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -467,7 +467,7 @@
       "system_id": "nextjs",
       "source_name": "GitHub Next.js Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.533,
+      "elapsed_seconds": 2.062,
       "kind": "html-links",
       "items_seen": 123
     },
@@ -475,7 +475,7 @@
       "system_id": "nextjs",
       "source_name": "OSV Next.js",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.235,
+      "elapsed_seconds": 1.206,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -483,7 +483,7 @@
       "system_id": "nginx",
       "source_name": "CISA KEV NGINX",
       "source_kind": "kev-json",
-      "elapsed_seconds": 2.638,
+      "elapsed_seconds": 2.979,
       "kind": "kev-json",
       "items_seen": 1545
     },
@@ -491,7 +491,7 @@
       "system_id": "nginx",
       "source_name": "NGINX Security Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.805,
+      "elapsed_seconds": 2.565,
       "kind": "html-links",
       "items_seen": 138
     },
@@ -499,7 +499,7 @@
       "system_id": "nodejs",
       "source_name": "CISA KEV Node.js",
       "source_kind": "kev-json",
-      "elapsed_seconds": 2.657,
+      "elapsed_seconds": 2.335,
       "kind": "kev-json",
       "items_seen": 1545
     },
@@ -507,7 +507,7 @@
       "system_id": "nodejs",
       "source_name": "Node.js Security Releases",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.409,
+      "elapsed_seconds": 2.258,
       "kind": "html-links",
       "items_seen": 74
     },
@@ -515,7 +515,7 @@
       "system_id": "nuxt",
       "source_name": "Nuxt Security",
       "source_kind": "html-links",
-      "elapsed_seconds": 3.025,
+      "elapsed_seconds": 2.236,
       "kind": "html-links",
       "items_seen": 118
     },
@@ -523,7 +523,7 @@
       "system_id": "nuxt",
       "source_name": "OSV Nuxt",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.416,
+      "elapsed_seconds": 1.21,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -531,7 +531,7 @@
       "system_id": "opencart",
       "source_name": "OSV OpenCart",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.127,
+      "elapsed_seconds": 1.183,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -539,7 +539,7 @@
       "system_id": "opencart",
       "source_name": "OpenCart Releases",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.819,
+      "elapsed_seconds": 2.131,
       "kind": "html-links",
       "items_seen": 1500
     },
@@ -547,7 +547,7 @@
       "system_id": "openmage",
       "source_name": "OSV OpenMage",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 0.001,
+      "elapsed_seconds": 0.002,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -555,7 +555,7 @@
       "system_id": "openmage",
       "source_name": "OpenMage GitHub Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 1.487,
+      "elapsed_seconds": 1.183,
       "kind": "html-links",
       "items_seen": 125
     },
@@ -563,7 +563,7 @@
       "system_id": "phpmyadmin",
       "source_name": "OSV phpMyAdmin",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 2.624,
+      "elapsed_seconds": 2.248,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -571,7 +571,7 @@
       "system_id": "phpmyadmin",
       "source_name": "phpMyAdmin Security Page",
       "source_kind": "html-links",
-      "elapsed_seconds": 3.221,
+      "elapsed_seconds": 2.967,
       "kind": "html-links",
       "items_seen": 262
     },
@@ -579,7 +579,7 @@
       "system_id": "prestashop",
       "source_name": "Friends Of Presta Security",
       "source_kind": "html-links",
-      "elapsed_seconds": 1.437,
+      "elapsed_seconds": 1.561,
       "kind": "html-links",
       "items_seen": 38
     },
@@ -587,7 +587,7 @@
       "system_id": "prestashop",
       "source_name": "GitHub PrestaShop Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.234,
+      "elapsed_seconds": 1.701,
       "kind": "html-links",
       "items_seen": 127
     },
@@ -595,7 +595,7 @@
       "system_id": "prestashop",
       "source_name": "OSV PrestaShop",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 0.998,
+      "elapsed_seconds": 0.861,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -603,7 +603,7 @@
       "system_id": "prestashop",
       "source_name": "PrestaShop Security Page",
       "source_kind": "html-links",
-      "elapsed_seconds": 1.165,
+      "elapsed_seconds": 1.517,
       "kind": "html-links",
       "items_seen": 60
     },
@@ -611,7 +611,7 @@
       "system_id": "rails",
       "source_name": "OSV Rails",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.877,
+      "elapsed_seconds": 1.702,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -619,7 +619,7 @@
       "system_id": "react",
       "source_name": "GitHub React Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.956,
+      "elapsed_seconds": 2.057,
       "kind": "html-links",
       "items_seen": 110
     },
@@ -627,7 +627,7 @@
       "system_id": "react",
       "source_name": "OSV React",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.169,
+      "elapsed_seconds": 1.205,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -635,7 +635,7 @@
       "system_id": "redmine",
       "source_name": "OSV Redmine",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 2.829,
+      "elapsed_seconds": 2.948,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -643,7 +643,7 @@
       "system_id": "redmine",
       "source_name": "Redmine Security Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 4.282,
+      "elapsed_seconds": 4.655,
       "kind": "html-links",
       "items_seen": 371
     },
@@ -651,7 +651,7 @@
       "system_id": "saleor",
       "source_name": "GitHub Saleor Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.954,
+      "elapsed_seconds": 2.23,
       "kind": "html-links",
       "items_seen": 120
     },
@@ -659,7 +659,7 @@
       "system_id": "saleor",
       "source_name": "OSV Saleor",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.134,
+      "elapsed_seconds": 1.187,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -667,7 +667,7 @@
       "system_id": "shopware",
       "source_name": "OSV Shopware",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.113,
+      "elapsed_seconds": 0.987,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -675,7 +675,7 @@
       "system_id": "shopware",
       "source_name": "Shopware Security Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.628,
+      "elapsed_seconds": 2.226,
       "kind": "html-links",
       "items_seen": 129
     },
@@ -683,7 +683,7 @@
       "system_id": "spring-boot",
       "source_name": "OSV Spring Boot",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.663,
+      "elapsed_seconds": 1.525,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -691,7 +691,7 @@
       "system_id": "spring-boot",
       "source_name": "Spring Security Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.258,
+      "elapsed_seconds": 2.615,
       "kind": "html-links",
       "items_seen": 118
     },
@@ -699,7 +699,7 @@
       "system_id": "spring-framework",
       "source_name": "OSV Spring Framework",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.486,
+      "elapsed_seconds": 1.384,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -707,7 +707,7 @@
       "system_id": "spring-framework",
       "source_name": "Spring Security Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.091,
+      "elapsed_seconds": 2.573,
       "kind": "html-links",
       "items_seen": 118
     },
@@ -715,7 +715,7 @@
       "system_id": "spring-security",
       "source_name": "OSV Spring Security",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.523,
+      "elapsed_seconds": 1.519,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -723,7 +723,7 @@
       "system_id": "spring-security",
       "source_name": "Spring Security Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.304,
+      "elapsed_seconds": 2.761,
       "kind": "html-links",
       "items_seen": 118
     },
@@ -731,7 +731,7 @@
       "system_id": "strapi",
       "source_name": "OSV Strapi",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 0.005,
+      "elapsed_seconds": 0.003,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -739,7 +739,7 @@
       "system_id": "strapi",
       "source_name": "Strapi GitHub Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 1.443,
+      "elapsed_seconds": 1.197,
       "kind": "html-links",
       "items_seen": 124
     },
@@ -747,7 +747,7 @@
       "system_id": "sveltekit",
       "source_name": "OSV SvelteKit",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.439,
+      "elapsed_seconds": 1.215,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -755,7 +755,7 @@
       "system_id": "symfony",
       "source_name": "OSV Symfony",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.663,
+      "elapsed_seconds": 1.527,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -763,7 +763,7 @@
       "system_id": "traefik",
       "source_name": "GitHub Traefik Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 4.008,
+      "elapsed_seconds": 3.102,
       "kind": "html-links",
       "items_seen": 124
     },
@@ -771,7 +771,7 @@
       "system_id": "traefik",
       "source_name": "OSV Traefik",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 2.532,
+      "elapsed_seconds": 2.231,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -779,7 +779,7 @@
       "system_id": "undici",
       "source_name": "OSV Undici",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.47,
+      "elapsed_seconds": 1.366,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -787,7 +787,7 @@
       "system_id": "vite",
       "source_name": "OSV Vite",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.437,
+      "elapsed_seconds": 1.214,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -795,7 +795,7 @@
       "system_id": "vite",
       "source_name": "Vite Security",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.822,
+      "elapsed_seconds": 2.062,
       "kind": "html-links",
       "items_seen": 124
     },
@@ -803,7 +803,7 @@
       "system_id": "vue",
       "source_name": "OSV Vue",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.4,
+      "elapsed_seconds": 1.209,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -811,7 +811,7 @@
       "system_id": "vue",
       "source_name": "Vue Security",
       "source_kind": "html-links",
-      "elapsed_seconds": 2.824,
+      "elapsed_seconds": 2.245,
       "kind": "html-links",
       "items_seen": 111
     },
@@ -819,7 +819,7 @@
       "system_id": "webpack",
       "source_name": "OSV webpack",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.47,
+      "elapsed_seconds": 1.367,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -827,7 +827,7 @@
       "system_id": "werkzeug",
       "source_name": "OSV Werkzeug",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 1.877,
+      "elapsed_seconds": 1.702,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -835,7 +835,7 @@
       "system_id": "woocommerce",
       "source_name": "GitHub WooCommerce Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 1.663,
+      "elapsed_seconds": 1.178,
       "kind": "html-links",
       "items_seen": 107
     },
@@ -843,7 +843,7 @@
       "system_id": "woocommerce",
       "source_name": "OSV WooCommerce",
       "source_kind": "osv-batch",
-      "elapsed_seconds": 0.001,
+      "elapsed_seconds": 0.003,
       "kind": "osv-batch",
       "items_seen": 1
     },
@@ -851,7 +851,7 @@
       "system_id": "woocommerce",
       "source_name": "Patchstack Database",
       "source_kind": "html-links",
-      "elapsed_seconds": 1.169,
+      "elapsed_seconds": 2.948,
       "kind": "html-links",
       "items_seen": 193
     },
@@ -859,7 +859,7 @@
       "system_id": "woocommerce",
       "source_name": "Woo Developer Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 1.235,
+      "elapsed_seconds": 0.861,
       "kind": "html-links",
       "items_seen": 121
     },
@@ -867,7 +867,7 @@
       "system_id": "woocommerce",
       "source_name": "Wordfence Vulnerability Database",
       "source_kind": "html-links",
-      "elapsed_seconds": 1.133,
+      "elapsed_seconds": 1.382,
       "kind": "html-links",
       "items_seen": 0
     },
@@ -875,7 +875,7 @@
       "system_id": "wordpress",
       "source_name": "Patchstack Database",
       "source_kind": "html-links",
-      "elapsed_seconds": 1.099,
+      "elapsed_seconds": 2.754,
       "kind": "html-links",
       "items_seen": 193
     },
@@ -883,7 +883,7 @@
       "system_id": "wordpress",
       "source_name": "PortSwigger Research",
       "source_kind": "html-links",
-      "elapsed_seconds": 1.117,
+      "elapsed_seconds": 1.369,
       "kind": "html-links",
       "items_seen": 99
     },
@@ -891,7 +891,7 @@
       "system_id": "wordpress",
       "source_name": "WPScan Vulnerability Database",
       "source_kind": "html-links",
-      "elapsed_seconds": 1.528,
+      "elapsed_seconds": 1.19,
       "kind": "html-links",
       "items_seen": 74
     },
@@ -899,7 +899,7 @@
       "system_id": "wordpress",
       "source_name": "WordPress Security News RSS",
       "source_kind": "rss-feed",
-      "elapsed_seconds": 1.405,
+      "elapsed_seconds": 0.989,
       "kind": "rss-feed",
       "items_seen": 10
     },
@@ -907,81 +907,81 @@
       "system_id": "wordpress",
       "source_name": "Wordfence Vulnerability Database",
       "source_kind": "html-links",
-      "elapsed_seconds": 0.313,
+      "elapsed_seconds": 0.674,
       "kind": "html-links",
       "items_seen": 0
     }
   ],
   "failures": [],
   "slow_sources": [
-    {
-      "system_id": "haproxy",
-      "source_name": "HAProxy Blog Feed",
-      "source_kind": "rss-feed",
-      "elapsed_seconds": 5.019,
-      "status": "ok"
-    },
-    {
-      "system_id": "kibana",
-      "source_name": "Elastic Security Announcements RSS",
-      "source_kind": "rss-feed",
-      "elapsed_seconds": 4.874,
-      "status": "ok"
-    },
-    {
-      "system_id": "jenkins",
-      "source_name": "Jenkins Security Advisories",
-      "source_kind": "html-links",
-      "elapsed_seconds": 4.303,
-      "status": "ok"
-    },
     {
       "system_id": "redmine",
       "source_name": "Redmine Security Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 4.282,
+      "elapsed_seconds": 4.655,
       "status": "ok"
     },
     {
-      "system_id": "traefik",
-      "source_name": "GitHub Traefik Advisories",
-      "source_kind": "html-links",
-      "elapsed_seconds": 4.008,
+      "system_id": "gitlab-ce",
+      "source_name": "GitLab Security Releases Atom",
+      "source_kind": "atom-feed",
+      "elapsed_seconds": 4.158,
       "status": "ok"
     },
     {
-      "system_id": "kibana",
-      "source_name": "Elastic Security Announcements",
-      "source_kind": "html-links",
-      "elapsed_seconds": 4.005,
-      "status": "ok"
-    },
-    {
-      "system_id": "gitea",
-      "source_name": "GitHub Gitea Advisories",
-      "source_kind": "html-links",
+      "system_id": "haproxy",
+      "source_name": "HAProxy Blog Feed",
+      "source_kind": "rss-feed",
       "elapsed_seconds": 4.003,
       "status": "ok"
     },
-    {
-      "system_id": "caddy",
-      "source_name": "GitHub Caddy Advisories",
-      "source_kind": "html-links",
-      "elapsed_seconds": 3.835,
-      "status": "ok"
-    },
-    {
-      "system_id": "mattermost",
-      "source_name": "Mattermost Security Updates JSON",
-      "source_kind": "json-feed",
-      "elapsed_seconds": 3.628,
-      "status": "ok"
-    },
     {
       "system_id": "grafana",
       "source_name": "Grafana Security Advisories",
       "source_kind": "html-links",
-      "elapsed_seconds": 3.568,
+      "elapsed_seconds": 3.852,
+      "status": "ok"
+    },
+    {
+      "system_id": "kibana",
+      "source_name": "Elastic Security Announcements",
+      "source_kind": "html-links",
+      "elapsed_seconds": 3.794,
+      "status": "ok"
+    },
+    {
+      "system_id": "kibana",
+      "source_name": "Elastic Security Announcements RSS",
+      "source_kind": "rss-feed",
+      "elapsed_seconds": 3.703,
+      "status": "ok"
+    },
+    {
+      "system_id": "grafana",
+      "source_name": "CISA KEV Grafana",
+      "source_kind": "kev-json",
+      "elapsed_seconds": 3.513,
+      "status": "ok"
+    },
+    {
+      "system_id": "mattermost",
+      "source_name": "Mattermost Security Updates JSON",
+      "source_kind": "json-feed",
+      "elapsed_seconds": 3.492,
+      "status": "ok"
+    },
+    {
+      "system_id": "jenkins",
+      "source_name": "Jenkins Security Advisories RSS",
+      "source_kind": "rss-feed",
+      "elapsed_seconds": 3.284,
+      "status": "ok"
+    },
+    {
+      "system_id": "gitlab-ce",
+      "source_name": "GitLab Advisory Database",
+      "source_kind": "html-links",
+      "elapsed_seconds": 3.272,
       "status": "ok"
     }
   ],
diff --git a/08-threat-intel/registry/monitoring/2026-03-19T09-17-08+00-00.json b/08-threat-intel/registry/monitoring/2026-03-19T09-17-08+00-00.json
new file mode 100644
index 00000000..df6ac64d
--- /dev/null
+++ b/08-threat-intel/registry/monitoring/2026-03-19T09-17-08+00-00.json
@@ -0,0 +1,3839 @@
+{
+  "generated_at": "2026-03-19T09:17:08+00:00",
+  "source_catalog_audit": {
+    "generated_at": "2026-03-19T09:17:03+00:00",
+    "system_count": 62,
+    "source_count": 179,
+    "active_source_count": 113,
+    "retired_source_count": 66,
+    "systems_with_active_official": 61,
+    "systems_with_machine_readable_source": 61,
+    "systems": [
+      {
+        "system_id": "adminer",
+        "display_name": "Adminer",
+        "category": "platforms",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 1,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "adobe-commerce",
+        "display_name": "Adobe Commerce",
+        "category": "ecommerce",
+        "tier": "history-full",
+        "source_total": 5,
+        "active_source_total": 1,
+        "retired_source_total": 4,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 0,
+        "has_active_official": true,
+        "has_machine_readable_source": false
+      },
+      {
+        "system_id": "angular",
+        "display_name": "Angular",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 1,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "apache-httpd",
+        "display_name": "Apache HTTP Server",
+        "category": "servers",
+        "tier": "history-full",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "apache-tomcat",
+        "display_name": "Apache Tomcat",
+        "category": "servers",
+        "tier": "history-full",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "aspnet-core",
+        "display_name": "ASP.NET Core",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 1,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "astro",
+        "display_name": "Astro",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 1,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "caddy",
+        "display_name": "Caddy",
+        "category": "servers",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 2,
+        "retired_source_total": 0,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "directus",
+        "display_name": "Directus",
+        "category": "cms",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 2,
+        "retired_source_total": 0,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "discourse",
+        "display_name": "Discourse",
+        "category": "cms",
+        "tier": "rolling-24m",
+        "source_total": 5,
+        "active_source_total": 3,
+        "retired_source_total": 2,
+        "official_active": 2,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 3,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "django",
+        "display_name": "Django",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 4,
+        "active_source_total": 3,
+        "retired_source_total": 1,
+        "official_active": 3,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "drupal",
+        "display_name": "Drupal",
+        "category": "cms",
+        "tier": "history-full",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 2,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "echo",
+        "display_name": "Echo",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 1,
+        "active_source_total": 1,
+        "retired_source_total": 0,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "esbuild",
+        "display_name": "esbuild",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 1,
+        "retired_source_total": 2,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "express",
+        "display_name": "Express",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 1,
+        "retired_source_total": 2,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "fastify",
+        "display_name": "Fastify",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 1,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "flask",
+        "display_name": "Flask",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 1,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "ghost",
+        "display_name": "Ghost",
+        "category": "cms",
+        "tier": "history-full",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "gin",
+        "display_name": "Gin",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 1,
+        "active_source_total": 1,
+        "retired_source_total": 0,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "gitea",
+        "display_name": "Gitea",
+        "category": "platforms",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 2,
+        "retired_source_total": 0,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "gitlab-ce",
+        "display_name": "GitLab CE",
+        "category": "platforms",
+        "tier": "rolling-24m",
+        "source_total": 4,
+        "active_source_total": 3,
+        "retired_source_total": 1,
+        "official_active": 2,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "grafana",
+        "display_name": "Grafana",
+        "category": "platforms",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 2,
+        "retired_source_total": 0,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "hapi",
+        "display_name": "Hapi",
+        "category": "frameworks",
+        "tier": "history-full",
+        "source_total": 2,
+        "active_source_total": 1,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "haproxy",
+        "display_name": "HAProxy",
+        "category": "servers",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 1,
+        "retired_source_total": 2,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "jenkins",
+        "display_name": "Jenkins",
+        "category": "platforms",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "joomla",
+        "display_name": "Joomla",
+        "category": "cms",
+        "tier": "history-full",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "kibana",
+        "display_name": "Kibana",
+        "category": "platforms",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "koa",
+        "display_name": "Koa",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 1,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "laravel",
+        "display_name": "Laravel",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 1,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "magento-open-source",
+        "display_name": "Magento Open Source",
+        "category": "ecommerce",
+        "tier": "history-full",
+        "source_total": 4,
+        "active_source_total": 3,
+        "retired_source_total": 1,
+        "official_active": 2,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "mattermost",
+        "display_name": "Mattermost",
+        "category": "platforms",
+        "tier": "rolling-24m",
+        "source_total": 4,
+        "active_source_total": 2,
+        "retired_source_total": 2,
+        "official_active": 1,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 2,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "mediawiki",
+        "display_name": "MediaWiki",
+        "category": "cms",
+        "tier": "rolling-24m",
+        "source_total": 4,
+        "active_source_total": 2,
+        "retired_source_total": 2,
+        "official_active": 1,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 2,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "medusa",
+        "display_name": "Medusa",
+        "category": "ecommerce",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 2,
+        "retired_source_total": 0,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "moodle",
+        "display_name": "Moodle",
+        "category": "cms",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 1,
+        "retired_source_total": 2,
+        "official_active": 0,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": false,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "nestjs",
+        "display_name": "NestJS",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 1,
+        "retired_source_total": 2,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "nextjs",
+        "display_name": "Next.js",
+        "category": "frameworks",
+        "tier": "history-full",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "nginx",
+        "display_name": "Nginx",
+        "category": "servers",
+        "tier": "history-full",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "nodejs",
+        "display_name": "Node.js",
+        "category": "frameworks",
+        "tier": "history-full",
+        "source_total": 2,
+        "active_source_total": 2,
+        "retired_source_total": 0,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "nuxt",
+        "display_name": "Nuxt",
+        "category": "frameworks",
+        "tier": "history-full",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "opencart",
+        "display_name": "OpenCart",
+        "category": "ecommerce",
+        "tier": "history-full",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "openmage",
+        "display_name": "OpenMage / Mage-OS",
+        "category": "ecommerce",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "phpmyadmin",
+        "display_name": "phpMyAdmin",
+        "category": "platforms",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "prestashop",
+        "display_name": "PrestaShop",
+        "category": "ecommerce",
+        "tier": "history-full",
+        "source_total": 5,
+        "active_source_total": 4,
+        "retired_source_total": 1,
+        "official_active": 2,
+        "ecosystem_active": 2,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "rails",
+        "display_name": "Ruby on Rails",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 1,
+        "retired_source_total": 2,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "react",
+        "display_name": "React",
+        "category": "frameworks",
+        "tier": "history-full",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "redmine",
+        "display_name": "Redmine",
+        "category": "platforms",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "saleor",
+        "display_name": "Saleor",
+        "category": "ecommerce",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "shopware",
+        "display_name": "Shopware",
+        "category": "ecommerce",
+        "tier": "history-full",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "spring-boot",
+        "display_name": "Spring Boot",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "spring-framework",
+        "display_name": "Spring Framework",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "spring-security",
+        "display_name": "Spring Security",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 1,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "strapi",
+        "display_name": "Strapi",
+        "category": "cms",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 2,
+        "retired_source_total": 0,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "sveltekit",
+        "display_name": "SvelteKit",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 1,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "symfony",
+        "display_name": "Symfony",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 1,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "traefik",
+        "display_name": "Traefik",
+        "category": "servers",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 2,
+        "retired_source_total": 0,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "undici",
+        "display_name": "Undici",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 1,
+        "retired_source_total": 2,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "vite",
+        "display_name": "Vite",
+        "category": "frameworks",
+        "tier": "history-full",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "vue",
+        "display_name": "Vue",
+        "category": "frameworks",
+        "tier": "history-full",
+        "source_total": 3,
+        "active_source_total": 2,
+        "retired_source_total": 1,
+        "official_active": 2,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "webpack",
+        "display_name": "webpack",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 3,
+        "active_source_total": 1,
+        "retired_source_total": 2,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "werkzeug",
+        "display_name": "Werkzeug",
+        "category": "frameworks",
+        "tier": "rolling-24m",
+        "source_total": 2,
+        "active_source_total": 1,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 0,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "woocommerce",
+        "display_name": "WooCommerce",
+        "category": "ecommerce",
+        "tier": "history-full",
+        "source_total": 6,
+        "active_source_total": 5,
+        "retired_source_total": 1,
+        "official_active": 2,
+        "ecosystem_active": 3,
+        "research_active": 0,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      },
+      {
+        "system_id": "wordpress",
+        "display_name": "WordPress",
+        "category": "cms",
+        "tier": "history-full",
+        "source_total": 6,
+        "active_source_total": 5,
+        "retired_source_total": 1,
+        "official_active": 1,
+        "ecosystem_active": 3,
+        "research_active": 1,
+        "machine_readable_active": 1,
+        "has_active_official": true,
+        "has_machine_readable_source": true
+      }
+    ],
+    "retired_sources": [
+      {
+        "system_id": "adminer",
+        "display_name": "Adminer",
+        "source_name": "NVD Adminer",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV Adminer provides a machine-readable Packagist-aligned source, removing the need for NVD public search.",
+        "replacement_sources": [
+          "OSV Adminer"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "adobe-commerce",
+        "display_name": "Adobe Commerce",
+        "source_name": "Adobe Security Bulletins",
+        "bucket": "official_sources",
+        "kind": "html-links",
+        "retired_reason": "Original bulletin index probe was unstable under the old transport path; vendor index replacement uses explicit request policy and parser hints.",
+        "replacement_sources": [
+          "Adobe Magento Security Index",
+          "NVD Adobe Commerce",
+          "GHSA Adobe Commerce"
+        ],
+        "url": "https://helpx.adobe.com/security/products/magento.html"
+      },
+      {
+        "system_id": "adobe-commerce",
+        "display_name": "Adobe Commerce",
+        "source_name": "GHSA Adobe Commerce",
+        "bucket": "ecosystem_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; Adobe index and NVD remain active replacements.",
+        "replacement_sources": [
+          "Adobe Magento Security Index",
+          "NVD Adobe Commerce"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "adobe-commerce",
+        "display_name": "Adobe Commerce",
+        "source_name": "NVD Adobe Commerce",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "Adobe Magento Security Index is now the active official machine-readable source, so NVD public search is no longer needed for daily collection.",
+        "replacement_sources": [
+          "Adobe Magento Security Index"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "adobe-commerce",
+        "display_name": "Adobe Commerce",
+        "source_name": "Sansec Research",
+        "bucket": "ecosystem_sources",
+        "kind": "vendor-index",
+        "retired_reason": "Research index is too slow for daily active monitoring; GHSA Adobe Commerce provides a stable machine-readable replacement.",
+        "replacement_sources": [
+          "GHSA Adobe Commerce",
+          "Adobe Magento Security Index"
+        ],
+        "url": "https://sansec.io/research"
+      },
+      {
+        "system_id": "angular",
+        "display_name": "Angular",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Angular remains the active replacement source.",
+        "replacement_sources": [
+          "OSV Angular"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "apache-httpd",
+        "display_name": "Apache HTTP Server",
+        "source_name": "NVD Apache HTTP Server",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "Official Apache HTTPD advisories page plus CISA KEV are sufficient active sources for daily monitoring.",
+        "replacement_sources": [
+          "Apache HTTPD Security",
+          "CISA KEV Apache HTTPD"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "apache-tomcat",
+        "display_name": "Apache Tomcat",
+        "source_name": "NVD Tomcat",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "Official Tomcat advisories page plus CISA KEV are sufficient active sources for daily monitoring.",
+        "replacement_sources": [
+          "Apache Tomcat Security",
+          "CISA KEV Tomcat"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "aspnet-core",
+        "display_name": "ASP.NET Core",
+        "source_name": "NVD ASP.NET Core",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV ASP.NET Core provides machine-readable NuGet-aligned coverage with lower latency than NVD public search.",
+        "replacement_sources": [
+          "OSV ASP.NET Core"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "astro",
+        "display_name": "Astro",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Astro remains the active replacement source.",
+        "replacement_sources": [
+          "OSV Astro"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "discourse",
+        "display_name": "Discourse",
+        "source_name": "Discourse Meta Security",
+        "bucket": "official_sources",
+        "kind": "html-links",
+        "retired_reason": "Meta security category HTML changed and no longer provides stable scrape semantics for health checks.",
+        "replacement_sources": [
+          "Discourse Release Notes RSS",
+          "GitHub Discourse Advisories"
+        ],
+        "url": "https://meta.discourse.org/c/bug/security/40"
+      },
+      {
+        "system_id": "discourse",
+        "display_name": "Discourse",
+        "source_name": "GitHub Discourse Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; Discourse release feed remains the active official source.",
+        "replacement_sources": [
+          "Discourse Release Notes RSS",
+          "Discourse Security RSS"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "django",
+        "display_name": "Django",
+        "source_name": "Django Security RSS",
+        "bucket": "official_sources",
+        "kind": "rss-feed",
+        "retired_reason": "Official security tag feed became unstable; use official weblog index and release archive instead.",
+        "replacement_sources": [
+          "Django Security Weblog",
+          "Django Security Releases Archive"
+        ],
+        "url": "https://www.djangoproject.com/weblog/feeds/tags/security/"
+      },
+      {
+        "system_id": "drupal",
+        "display_name": "Drupal",
+        "source_name": "NVD Drupal",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV Drupal + Drupal official RSS now cover machine-readable collection with lower cold-start latency than NVD public search.",
+        "replacement_sources": [
+          "Drupal Security Advisories RSS",
+          "OSV Drupal"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "esbuild",
+        "display_name": "esbuild",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV esbuild remains the active replacement source.",
+        "replacement_sources": [
+          "OSV esbuild"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "esbuild",
+        "display_name": "esbuild",
+        "source_name": "NVD esbuild",
+        "bucket": "ecosystem_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV esbuild replaces NVD public search for lower-latency machine-readable collection.",
+        "replacement_sources": [
+          "OSV esbuild"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "express",
+        "display_name": "Express",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Express remains the active replacement source.",
+        "replacement_sources": [
+          "OSV Express"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "express",
+        "display_name": "Express",
+        "source_name": "NVD Express.js",
+        "bucket": "ecosystem_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV Express replaces NVD public search for lower-latency machine-readable collection.",
+        "replacement_sources": [
+          "OSV Express"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "fastify",
+        "display_name": "Fastify",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Fastify remains the active replacement source.",
+        "replacement_sources": [
+          "OSV Fastify"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "flask",
+        "display_name": "Flask",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GitHub advisory API is quota-limited; OSV Flask remains the active machine-readable source.",
+        "replacement_sources": [
+          "OSV Flask"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "ghost",
+        "display_name": "Ghost",
+        "source_name": "NVD Ghost",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV Ghost replaces NVD for machine-readable collection and keeps npm package alignment.",
+        "replacement_sources": [
+          "Ghost GitHub Advisories",
+          "OSV Ghost"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "gitlab-ce",
+        "display_name": "GitLab CE",
+        "source_name": "NVD GitLab",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "GitLab Security Releases Atom provides an official machine-readable feed, so NVD public search is no longer required.",
+        "replacement_sources": [
+          "GitLab Security Releases",
+          "GitLab Security Releases Atom"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "hapi",
+        "display_name": "Hapi",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Hapi remains the active replacement source.",
+        "replacement_sources": [
+          "OSV Hapi"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "haproxy",
+        "display_name": "HAProxy",
+        "source_name": "HAProxy Security Advisories",
+        "bucket": "official_sources",
+        "kind": "html-links",
+        "retired_reason": "Legacy haproxy.org security page no longer yields stable scrape results for monitoring.",
+        "replacement_sources": [
+          "HAProxy Blog Feed"
+        ],
+        "url": "https://www.haproxy.org/security/"
+      },
+      {
+        "system_id": "haproxy",
+        "display_name": "HAProxy",
+        "source_name": "NVD HAProxy",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "HAProxy Blog Feed is an active official RSS source, so NVD public search is no longer required.",
+        "replacement_sources": [
+          "HAProxy Blog Feed"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "jenkins",
+        "display_name": "Jenkins",
+        "source_name": "NVD Jenkins",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "Jenkins Security Advisories RSS provides an official machine-readable feed, replacing NVD public search.",
+        "replacement_sources": [
+          "Jenkins Security Advisories",
+          "Jenkins Security Advisories RSS"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "joomla",
+        "display_name": "Joomla",
+        "source_name": "NVD Joomla",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV Joomla CMS replaces NVD for machine-readable collection without public NVD throttling.",
+        "replacement_sources": [
+          "Joomla Security Centre",
+          "OSV Joomla"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "kibana",
+        "display_name": "Kibana",
+        "source_name": "NVD Kibana",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "Elastic Security Announcements RSS provides an official machine-readable feed, replacing NVD public search.",
+        "replacement_sources": [
+          "Elastic Security Announcements",
+          "Elastic Security Announcements RSS"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "koa",
+        "display_name": "Koa",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Koa remains the active replacement source.",
+        "replacement_sources": [
+          "OSV Koa"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "laravel",
+        "display_name": "Laravel",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GitHub advisory API is quota-limited; OSV Laravel remains the active machine-readable source.",
+        "replacement_sources": [
+          "OSV Laravel"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "magento-open-source",
+        "display_name": "Magento Open Source",
+        "source_name": "NVD Magento",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV Magento Open Source plus Magento GitHub advisories replace NVD public search for machine-readable collection.",
+        "replacement_sources": [
+          "Magento GitHub Advisories",
+          "OSV Magento Open Source"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "mattermost",
+        "display_name": "Mattermost",
+        "source_name": "Mattermost Security Updates",
+        "bucket": "official_sources",
+        "kind": "html-links",
+        "retired_reason": "Mattermost security updates page returned repeated 403 responses from the collector path; NVD replacement remains active.",
+        "replacement_sources": [
+          "NVD Mattermost"
+        ],
+        "url": "https://mattermost.com/security-updates/"
+      },
+      {
+        "system_id": "mattermost",
+        "display_name": "Mattermost",
+        "source_name": "NVD Mattermost",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "Mattermost official JSON feed plus OSV Mattermost replace NVD for lower-latency machine-readable collection.",
+        "replacement_sources": [
+          "Mattermost Security Updates JSON",
+          "OSV Mattermost"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "mediawiki",
+        "display_name": "MediaWiki",
+        "source_name": "MediaWiki Security Releases",
+        "bucket": "official_sources",
+        "kind": "html-links",
+        "retired_reason": "MediaWiki security page is no longer reachable reliably from the collector path; NVD replacement remains active.",
+        "replacement_sources": [
+          "MediaWiki Announce RSS",
+          "NVD MediaWiki"
+        ],
+        "url": "https://www.mediawiki.org/wiki/Security"
+      },
+      {
+        "system_id": "mediawiki",
+        "display_name": "MediaWiki",
+        "source_name": "NVD MediaWiki",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "MediaWiki announce RSS plus OSV MediaWiki now replace NVD for lower-latency machine-readable collection.",
+        "replacement_sources": [
+          "MediaWiki Announce RSS",
+          "OSV MediaWiki"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "moodle",
+        "display_name": "Moodle",
+        "source_name": "Moodle Security News",
+        "bucket": "official_sources",
+        "kind": "html-links",
+        "retired_reason": "Security page is reachable with a browser-style UA, but the current markup only exposes generic \"Discuss this topic\" anchors to the collector; NVD Moodle remains the active replacement source until a richer parser is added.",
+        "replacement_sources": [
+          "NVD Moodle"
+        ],
+        "url": "https://moodle.org/security/"
+      },
+      {
+        "system_id": "moodle",
+        "display_name": "Moodle",
+        "source_name": "NVD Moodle",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV Moodle replaces NVD for machine-readable collection while official Moodle sources remain for cross-checking.",
+        "replacement_sources": [
+          "OSV Moodle"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "nestjs",
+        "display_name": "NestJS",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV NestJS remains the active replacement source.",
+        "replacement_sources": [
+          "OSV NestJS"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "nestjs",
+        "display_name": "NestJS",
+        "source_name": "NVD NestJS",
+        "bucket": "ecosystem_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV NestJS replaces NVD public search for lower-latency machine-readable collection.",
+        "replacement_sources": [
+          "OSV NestJS"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "nextjs",
+        "display_name": "Next.js",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; GitHub Next.js Advisories and OSV Next.js remain active replacements.",
+        "replacement_sources": [
+          "GitHub Next.js Advisories",
+          "OSV Next.js"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "nginx",
+        "display_name": "Nginx",
+        "source_name": "NVD NGINX",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "Official NGINX advisories page and CISA KEV together provide the needed daily signal without NVD public-search latency.",
+        "replacement_sources": [
+          "NGINX Security Advisories",
+          "CISA KEV NGINX"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "nuxt",
+        "display_name": "Nuxt",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; Nuxt Security and OSV Nuxt remain active replacements.",
+        "replacement_sources": [
+          "Nuxt Security",
+          "OSV Nuxt"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "opencart",
+        "display_name": "OpenCart",
+        "source_name": "NVD OpenCart",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV OpenCart replaces NVD for machine-readable collection while official release source remains active.",
+        "replacement_sources": [
+          "OpenCart Releases",
+          "OSV OpenCart"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "openmage",
+        "display_name": "OpenMage / Mage-OS",
+        "source_name": "NVD OpenMage",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV OpenMage replaces NVD for machine-readable composer-aligned collection.",
+        "replacement_sources": [
+          "OpenMage GitHub Advisories",
+          "OSV OpenMage"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "phpmyadmin",
+        "display_name": "phpMyAdmin",
+        "source_name": "NVD phpMyAdmin",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV phpMyAdmin replaces NVD for machine-readable collection while the official security page remains active.",
+        "replacement_sources": [
+          "phpMyAdmin Security Page",
+          "OSV phpMyAdmin"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "prestashop",
+        "display_name": "PrestaShop",
+        "source_name": "NVD PrestaShop",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV PrestaShop replaces NVD for machine-readable collection while official and ecosystem advisories remain active.",
+        "replacement_sources": [
+          "PrestaShop Security Page",
+          "GitHub PrestaShop Advisories",
+          "OSV PrestaShop"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "rails",
+        "display_name": "Ruby on Rails",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GitHub advisory API is quota-limited; OSV Rails remains the active machine-readable source.",
+        "replacement_sources": [
+          "OSV Rails"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "rails",
+        "display_name": "Ruby on Rails",
+        "source_name": "NVD Ruby on Rails",
+        "bucket": "ecosystem_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV Rails replaces NVD public search for lower-latency machine-readable collection.",
+        "replacement_sources": [
+          "OSV Rails"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "react",
+        "display_name": "React",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; GitHub React Advisories and OSV React remain active replacements.",
+        "replacement_sources": [
+          "GitHub React Advisories",
+          "OSV React"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "redmine",
+        "display_name": "Redmine",
+        "source_name": "NVD Redmine",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "Official Redmine advisories page remains active and NVD public search is retired to reduce cold-start latency.",
+        "replacement_sources": [
+          "Redmine Security Advisories"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "saleor",
+        "display_name": "Saleor",
+        "source_name": "NVD Saleor",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV Saleor replaces NVD for machine-readable collection and aligns with the published PyPI package.",
+        "replacement_sources": [
+          "GitHub Saleor Advisories",
+          "OSV Saleor"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "shopware",
+        "display_name": "Shopware",
+        "source_name": "NVD Shopware",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV Shopware replaces NVD for machine-readable collection with lower cold-start overhead.",
+        "replacement_sources": [
+          "Shopware Security Advisories",
+          "OSV Shopware"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "spring-boot",
+        "display_name": "Spring Boot",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GitHub advisory API is quota-limited; Spring official page and OSV remain the active replacements.",
+        "replacement_sources": [
+          "Spring Security Advisories",
+          "OSV Spring Boot"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "spring-framework",
+        "display_name": "Spring Framework",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; Spring official page and OSV remain the active replacements.",
+        "replacement_sources": [
+          "Spring Security Advisories",
+          "OSV Spring Framework"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "spring-security",
+        "display_name": "Spring Security",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GitHub advisory API is quota-limited; Spring official page and OSV remain the active replacements.",
+        "replacement_sources": [
+          "Spring Security Advisories",
+          "OSV Spring Security"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "sveltekit",
+        "display_name": "SvelteKit",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV SvelteKit remains the active replacement source.",
+        "replacement_sources": [
+          "OSV SvelteKit"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "symfony",
+        "display_name": "Symfony",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GitHub advisory API is quota-limited; OSV Symfony remains the active machine-readable source.",
+        "replacement_sources": [
+          "OSV Symfony"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "undici",
+        "display_name": "Undici",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV Undici remains the active replacement source.",
+        "replacement_sources": [
+          "OSV Undici"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "undici",
+        "display_name": "Undici",
+        "source_name": "NVD Undici",
+        "bucket": "ecosystem_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV Undici replaces NVD public search for lower-latency machine-readable collection.",
+        "replacement_sources": [
+          "OSV Undici"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "vite",
+        "display_name": "Vite",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; Vite Security and OSV Vite remain active replacements.",
+        "replacement_sources": [
+          "Vite Security",
+          "OSV Vite"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "vue",
+        "display_name": "Vue",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; Vue Security and OSV Vue remain active replacements.",
+        "replacement_sources": [
+          "Vue Security",
+          "OSV Vue"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "webpack",
+        "display_name": "webpack",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GHSA API requests are rate-limited in daily monitoring; OSV webpack remains the active replacement source.",
+        "replacement_sources": [
+          "OSV webpack"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "webpack",
+        "display_name": "webpack",
+        "source_name": "NVD webpack",
+        "bucket": "ecosystem_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV webpack replaces NVD public search for lower-latency machine-readable collection.",
+        "replacement_sources": [
+          "OSV webpack"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "werkzeug",
+        "display_name": "Werkzeug",
+        "source_name": "GitHub Global Advisories",
+        "bucket": "official_sources",
+        "kind": "ghsa-global",
+        "retired_reason": "Unauthenticated GitHub advisory API is quota-limited; OSV Werkzeug remains the active machine-readable source.",
+        "replacement_sources": [
+          "OSV Werkzeug"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "woocommerce",
+        "display_name": "WooCommerce",
+        "source_name": "NVD WooCommerce",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "OSV WooCommerce replaces NVD for machine-readable collection while official and ecosystem advisory pages remain active.",
+        "replacement_sources": [
+          "Woo Developer Advisories",
+          "GitHub WooCommerce Advisories",
+          "OSV WooCommerce"
+        ],
+        "url": ""
+      },
+      {
+        "system_id": "wordpress",
+        "display_name": "WordPress",
+        "source_name": "NVD WordPress",
+        "bucket": "official_sources",
+        "kind": "nvd-search",
+        "retired_reason": "WordPress official RSS plus ecosystem plugin intelligence cover active collection with lower cold-start latency and lower public-search dependence than NVD.",
+        "replacement_sources": [
+          "WordPress Security News RSS",
+          "Wordfence Vulnerability Database",
+          "WPScan Vulnerability Database"
+        ],
+        "url": ""
+      }
+    ],
+    "replacement_map": [
+      {
+        "system_id": "adminer",
+        "retired_source": "NVD Adminer",
+        "replacement_sources": [
+          "OSV Adminer"
+        ]
+      },
+      {
+        "system_id": "adobe-commerce",
+        "retired_source": "Adobe Security Bulletins",
+        "replacement_sources": [
+          "Adobe Magento Security Index",
+          "NVD Adobe Commerce",
+          "GHSA Adobe Commerce"
+        ]
+      },
+      {
+        "system_id": "adobe-commerce",
+        "retired_source": "GHSA Adobe Commerce",
+        "replacement_sources": [
+          "Adobe Magento Security Index",
+          "NVD Adobe Commerce"
+        ]
+      },
+      {
+        "system_id": "adobe-commerce",
+        "retired_source": "NVD Adobe Commerce",
+        "replacement_sources": [
+          "Adobe Magento Security Index"
+        ]
+      },
+      {
+        "system_id": "adobe-commerce",
+        "retired_source": "Sansec Research",
+        "replacement_sources": [
+          "GHSA Adobe Commerce",
+          "Adobe Magento Security Index"
+        ]
+      },
+      {
+        "system_id": "angular",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV Angular"
+        ]
+      },
+      {
+        "system_id": "apache-httpd",
+        "retired_source": "NVD Apache HTTP Server",
+        "replacement_sources": [
+          "Apache HTTPD Security",
+          "CISA KEV Apache HTTPD"
+        ]
+      },
+      {
+        "system_id": "apache-tomcat",
+        "retired_source": "NVD Tomcat",
+        "replacement_sources": [
+          "Apache Tomcat Security",
+          "CISA KEV Tomcat"
+        ]
+      },
+      {
+        "system_id": "aspnet-core",
+        "retired_source": "NVD ASP.NET Core",
+        "replacement_sources": [
+          "OSV ASP.NET Core"
+        ]
+      },
+      {
+        "system_id": "astro",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV Astro"
+        ]
+      },
+      {
+        "system_id": "discourse",
+        "retired_source": "Discourse Meta Security",
+        "replacement_sources": [
+          "Discourse Release Notes RSS",
+          "GitHub Discourse Advisories"
+        ]
+      },
+      {
+        "system_id": "discourse",
+        "retired_source": "GitHub Discourse Advisories",
+        "replacement_sources": [
+          "Discourse Release Notes RSS",
+          "Discourse Security RSS"
+        ]
+      },
+      {
+        "system_id": "django",
+        "retired_source": "Django Security RSS",
+        "replacement_sources": [
+          "Django Security Weblog",
+          "Django Security Releases Archive"
+        ]
+      },
+      {
+        "system_id": "drupal",
+        "retired_source": "NVD Drupal",
+        "replacement_sources": [
+          "Drupal Security Advisories RSS",
+          "OSV Drupal"
+        ]
+      },
+      {
+        "system_id": "esbuild",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV esbuild"
+        ]
+      },
+      {
+        "system_id": "esbuild",
+        "retired_source": "NVD esbuild",
+        "replacement_sources": [
+          "OSV esbuild"
+        ]
+      },
+      {
+        "system_id": "express",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV Express"
+        ]
+      },
+      {
+        "system_id": "express",
+        "retired_source": "NVD Express.js",
+        "replacement_sources": [
+          "OSV Express"
+        ]
+      },
+      {
+        "system_id": "fastify",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV Fastify"
+        ]
+      },
+      {
+        "system_id": "flask",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV Flask"
+        ]
+      },
+      {
+        "system_id": "ghost",
+        "retired_source": "NVD Ghost",
+        "replacement_sources": [
+          "Ghost GitHub Advisories",
+          "OSV Ghost"
+        ]
+      },
+      {
+        "system_id": "gitlab-ce",
+        "retired_source": "NVD GitLab",
+        "replacement_sources": [
+          "GitLab Security Releases",
+          "GitLab Security Releases Atom"
+        ]
+      },
+      {
+        "system_id": "hapi",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV Hapi"
+        ]
+      },
+      {
+        "system_id": "haproxy",
+        "retired_source": "HAProxy Security Advisories",
+        "replacement_sources": [
+          "HAProxy Blog Feed"
+        ]
+      },
+      {
+        "system_id": "haproxy",
+        "retired_source": "NVD HAProxy",
+        "replacement_sources": [
+          "HAProxy Blog Feed"
+        ]
+      },
+      {
+        "system_id": "jenkins",
+        "retired_source": "NVD Jenkins",
+        "replacement_sources": [
+          "Jenkins Security Advisories",
+          "Jenkins Security Advisories RSS"
+        ]
+      },
+      {
+        "system_id": "joomla",
+        "retired_source": "NVD Joomla",
+        "replacement_sources": [
+          "Joomla Security Centre",
+          "OSV Joomla"
+        ]
+      },
+      {
+        "system_id": "kibana",
+        "retired_source": "NVD Kibana",
+        "replacement_sources": [
+          "Elastic Security Announcements",
+          "Elastic Security Announcements RSS"
+        ]
+      },
+      {
+        "system_id": "koa",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV Koa"
+        ]
+      },
+      {
+        "system_id": "laravel",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV Laravel"
+        ]
+      },
+      {
+        "system_id": "magento-open-source",
+        "retired_source": "NVD Magento",
+        "replacement_sources": [
+          "Magento GitHub Advisories",
+          "OSV Magento Open Source"
+        ]
+      },
+      {
+        "system_id": "mattermost",
+        "retired_source": "Mattermost Security Updates",
+        "replacement_sources": [
+          "NVD Mattermost"
+        ]
+      },
+      {
+        "system_id": "mattermost",
+        "retired_source": "NVD Mattermost",
+        "replacement_sources": [
+          "Mattermost Security Updates JSON",
+          "OSV Mattermost"
+        ]
+      },
+      {
+        "system_id": "mediawiki",
+        "retired_source": "MediaWiki Security Releases",
+        "replacement_sources": [
+          "MediaWiki Announce RSS",
+          "NVD MediaWiki"
+        ]
+      },
+      {
+        "system_id": "mediawiki",
+        "retired_source": "NVD MediaWiki",
+        "replacement_sources": [
+          "MediaWiki Announce RSS",
+          "OSV MediaWiki"
+        ]
+      },
+      {
+        "system_id": "moodle",
+        "retired_source": "Moodle Security News",
+        "replacement_sources": [
+          "NVD Moodle"
+        ]
+      },
+      {
+        "system_id": "moodle",
+        "retired_source": "NVD Moodle",
+        "replacement_sources": [
+          "OSV Moodle"
+        ]
+      },
+      {
+        "system_id": "nestjs",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV NestJS"
+        ]
+      },
+      {
+        "system_id": "nestjs",
+        "retired_source": "NVD NestJS",
+        "replacement_sources": [
+          "OSV NestJS"
+        ]
+      },
+      {
+        "system_id": "nextjs",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "GitHub Next.js Advisories",
+          "OSV Next.js"
+        ]
+      },
+      {
+        "system_id": "nginx",
+        "retired_source": "NVD NGINX",
+        "replacement_sources": [
+          "NGINX Security Advisories",
+          "CISA KEV NGINX"
+        ]
+      },
+      {
+        "system_id": "nuxt",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "Nuxt Security",
+          "OSV Nuxt"
+        ]
+      },
+      {
+        "system_id": "opencart",
+        "retired_source": "NVD OpenCart",
+        "replacement_sources": [
+          "OpenCart Releases",
+          "OSV OpenCart"
+        ]
+      },
+      {
+        "system_id": "openmage",
+        "retired_source": "NVD OpenMage",
+        "replacement_sources": [
+          "OpenMage GitHub Advisories",
+          "OSV OpenMage"
+        ]
+      },
+      {
+        "system_id": "phpmyadmin",
+        "retired_source": "NVD phpMyAdmin",
+        "replacement_sources": [
+          "phpMyAdmin Security Page",
+          "OSV phpMyAdmin"
+        ]
+      },
+      {
+        "system_id": "prestashop",
+        "retired_source": "NVD PrestaShop",
+        "replacement_sources": [
+          "PrestaShop Security Page",
+          "GitHub PrestaShop Advisories",
+          "OSV PrestaShop"
+        ]
+      },
+      {
+        "system_id": "rails",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV Rails"
+        ]
+      },
+      {
+        "system_id": "rails",
+        "retired_source": "NVD Ruby on Rails",
+        "replacement_sources": [
+          "OSV Rails"
+        ]
+      },
+      {
+        "system_id": "react",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "GitHub React Advisories",
+          "OSV React"
+        ]
+      },
+      {
+        "system_id": "redmine",
+        "retired_source": "NVD Redmine",
+        "replacement_sources": [
+          "Redmine Security Advisories"
+        ]
+      },
+      {
+        "system_id": "saleor",
+        "retired_source": "NVD Saleor",
+        "replacement_sources": [
+          "GitHub Saleor Advisories",
+          "OSV Saleor"
+        ]
+      },
+      {
+        "system_id": "shopware",
+        "retired_source": "NVD Shopware",
+        "replacement_sources": [
+          "Shopware Security Advisories",
+          "OSV Shopware"
+        ]
+      },
+      {
+        "system_id": "spring-boot",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "Spring Security Advisories",
+          "OSV Spring Boot"
+        ]
+      },
+      {
+        "system_id": "spring-framework",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "Spring Security Advisories",
+          "OSV Spring Framework"
+        ]
+      },
+      {
+        "system_id": "spring-security",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "Spring Security Advisories",
+          "OSV Spring Security"
+        ]
+      },
+      {
+        "system_id": "sveltekit",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV SvelteKit"
+        ]
+      },
+      {
+        "system_id": "symfony",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV Symfony"
+        ]
+      },
+      {
+        "system_id": "undici",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV Undici"
+        ]
+      },
+      {
+        "system_id": "undici",
+        "retired_source": "NVD Undici",
+        "replacement_sources": [
+          "OSV Undici"
+        ]
+      },
+      {
+        "system_id": "vite",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "Vite Security",
+          "OSV Vite"
+        ]
+      },
+      {
+        "system_id": "vue",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "Vue Security",
+          "OSV Vue"
+        ]
+      },
+      {
+        "system_id": "webpack",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV webpack"
+        ]
+      },
+      {
+        "system_id": "webpack",
+        "retired_source": "NVD webpack",
+        "replacement_sources": [
+          "OSV webpack"
+        ]
+      },
+      {
+        "system_id": "werkzeug",
+        "retired_source": "GitHub Global Advisories",
+        "replacement_sources": [
+          "OSV Werkzeug"
+        ]
+      },
+      {
+        "system_id": "woocommerce",
+        "retired_source": "NVD WooCommerce",
+        "replacement_sources": [
+          "Woo Developer Advisories",
+          "GitHub WooCommerce Advisories",
+          "OSV WooCommerce"
+        ]
+      },
+      {
+        "system_id": "wordpress",
+        "retired_source": "NVD WordPress",
+        "replacement_sources": [
+          "WordPress Security News RSS",
+          "Wordfence Vulnerability Database",
+          "WPScan Vulnerability Database"
+        ]
+      }
+    ]
+  },
+  "source_health": {
+    "generated_at": "2026-03-19T09:17:08+00:00",
+    "active_source_count": 113,
+    "green_source_count": 113,
+    "failure_count": 0,
+    "all_green": true,
+    "last_fully_green_run": "2026-03-19T09:17:08+00:00",
+    "retries_performed": 0,
+    "probes": [
+      {
+        "system_id": "adminer",
+        "source_name": "OSV Adminer",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 2.249,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "adobe-commerce",
+        "source_name": "Adobe Magento Security Index",
+        "source_kind": "vendor-index",
+        "elapsed_seconds": 0.906,
+        "kind": "vendor-index",
+        "items_seen": 46
+      },
+      {
+        "system_id": "angular",
+        "source_name": "OSV Angular",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.215,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "apache-httpd",
+        "source_name": "Apache HTTPD Security",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.765,
+        "kind": "html-links",
+        "items_seen": 182
+      },
+      {
+        "system_id": "apache-httpd",
+        "source_name": "CISA KEV Apache HTTPD",
+        "source_kind": "kev-json",
+        "elapsed_seconds": 3.122,
+        "kind": "kev-json",
+        "items_seen": 1545
+      },
+      {
+        "system_id": "apache-tomcat",
+        "source_name": "Apache Tomcat Security",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.772,
+        "kind": "html-links",
+        "items_seen": 270
+      },
+      {
+        "system_id": "apache-tomcat",
+        "source_name": "CISA KEV Tomcat",
+        "source_kind": "kev-json",
+        "elapsed_seconds": 3.12,
+        "kind": "kev-json",
+        "items_seen": 1545
+      },
+      {
+        "system_id": "aspnet-core",
+        "source_name": "OSV ASP.NET Core",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.703,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "astro",
+        "source_name": "OSV Astro",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.216,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "caddy",
+        "source_name": "GitHub Caddy Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 3.086,
+        "kind": "html-links",
+        "items_seen": 114
+      },
+      {
+        "system_id": "caddy",
+        "source_name": "OSV Caddy",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 2.227,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "directus",
+        "source_name": "Directus GitHub Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 1.208,
+        "kind": "html-links",
+        "items_seen": 127
+      },
+      {
+        "system_id": "directus",
+        "source_name": "OSV Directus",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 0.003,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "discourse",
+        "source_name": "Discourse Release Notes RSS",
+        "source_kind": "rss-feed",
+        "elapsed_seconds": 1.525,
+        "kind": "rss-feed",
+        "items_seen": 30
+      },
+      {
+        "system_id": "discourse",
+        "source_name": "Discourse Security RSS",
+        "source_kind": "rss-feed",
+        "elapsed_seconds": 0.717,
+        "kind": "rss-feed",
+        "items_seen": 3
+      },
+      {
+        "system_id": "discourse",
+        "source_name": "OSV Discourse",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 0.001,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "django",
+        "source_name": "Django Security Releases Archive",
+        "source_kind": "vendor-index",
+        "elapsed_seconds": 2.617,
+        "kind": "vendor-index",
+        "items_seen": 1276
+      },
+      {
+        "system_id": "django",
+        "source_name": "Django Security Weblog",
+        "source_kind": "vendor-index",
+        "elapsed_seconds": 2.285,
+        "kind": "vendor-index",
+        "items_seen": 332
+      },
+      {
+        "system_id": "django",
+        "source_name": "OSV Django",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.701,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "drupal",
+        "source_name": "Drupal Security Advisories RSS",
+        "source_kind": "rss-feed",
+        "elapsed_seconds": 0.724,
+        "kind": "rss-feed",
+        "items_seen": 20
+      },
+      {
+        "system_id": "drupal",
+        "source_name": "OSV Drupal",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 0.003,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "echo",
+        "source_name": "OSV Echo",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.703,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "esbuild",
+        "source_name": "OSV esbuild",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.367,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "express",
+        "source_name": "OSV Express",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.216,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "fastify",
+        "source_name": "OSV Fastify",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.217,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "flask",
+        "source_name": "OSV Flask",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.702,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "ghost",
+        "source_name": "Ghost GitHub Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 1.217,
+        "kind": "html-links",
+        "items_seen": 119
+      },
+      {
+        "system_id": "ghost",
+        "source_name": "OSV Ghost",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 0.003,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "gin",
+        "source_name": "OSV Gin",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.703,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "gitea",
+        "source_name": "GitHub Gitea Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 3.103,
+        "kind": "html-links",
+        "items_seen": 98
+      },
+      {
+        "system_id": "gitea",
+        "source_name": "OSV Gitea",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 2.259,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "gitlab-ce",
+        "source_name": "GitLab Advisory Database",
+        "source_kind": "html-links",
+        "elapsed_seconds": 3.272,
+        "kind": "html-links",
+        "items_seen": 5
+      },
+      {
+        "system_id": "gitlab-ce",
+        "source_name": "GitLab Security Releases",
+        "source_kind": "html-links",
+        "elapsed_seconds": 3.091,
+        "kind": "html-links",
+        "items_seen": 250
+      },
+      {
+        "system_id": "gitlab-ce",
+        "source_name": "GitLab Security Releases Atom",
+        "source_kind": "atom-feed",
+        "elapsed_seconds": 4.158,
+        "kind": "atom-feed",
+        "items_seen": 186
+      },
+      {
+        "system_id": "grafana",
+        "source_name": "CISA KEV Grafana",
+        "source_kind": "kev-json",
+        "elapsed_seconds": 3.513,
+        "kind": "kev-json",
+        "items_seen": 1545
+      },
+      {
+        "system_id": "grafana",
+        "source_name": "Grafana Security Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 3.852,
+        "kind": "html-links",
+        "items_seen": 159
+      },
+      {
+        "system_id": "hapi",
+        "source_name": "OSV Hapi",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.217,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "haproxy",
+        "source_name": "HAProxy Blog Feed",
+        "source_kind": "rss-feed",
+        "elapsed_seconds": 4.003,
+        "kind": "rss-feed",
+        "items_seen": 10
+      },
+      {
+        "system_id": "jenkins",
+        "source_name": "Jenkins Security Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 3.186,
+        "kind": "html-links",
+        "items_seen": 1194
+      },
+      {
+        "system_id": "jenkins",
+        "source_name": "Jenkins Security Advisories RSS",
+        "source_kind": "rss-feed",
+        "elapsed_seconds": 3.284,
+        "kind": "rss-feed",
+        "items_seen": 96
+      },
+      {
+        "system_id": "joomla",
+        "source_name": "Joomla Security Centre",
+        "source_kind": "html-links",
+        "elapsed_seconds": 1.204,
+        "kind": "html-links",
+        "items_seen": 139
+      },
+      {
+        "system_id": "joomla",
+        "source_name": "OSV Joomla",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 0.003,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "kibana",
+        "source_name": "Elastic Security Announcements",
+        "source_kind": "html-links",
+        "elapsed_seconds": 3.794,
+        "kind": "html-links",
+        "items_seen": 71
+      },
+      {
+        "system_id": "kibana",
+        "source_name": "Elastic Security Announcements RSS",
+        "source_kind": "rss-feed",
+        "elapsed_seconds": 3.703,
+        "kind": "rss-feed",
+        "items_seen": 25
+      },
+      {
+        "system_id": "koa",
+        "source_name": "OSV Koa",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.216,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "laravel",
+        "source_name": "OSV Laravel",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.526,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "magento-open-source",
+        "source_name": "Magento GitHub Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 1.195,
+        "kind": "html-links",
+        "items_seen": 99
+      },
+      {
+        "system_id": "magento-open-source",
+        "source_name": "OSV Magento Open Source",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 0.002,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "magento-open-source",
+        "source_name": "Sansec Research",
+        "source_kind": "html-links",
+        "elapsed_seconds": 1.22,
+        "kind": "html-links",
+        "items_seen": 134
+      },
+      {
+        "system_id": "mattermost",
+        "source_name": "Mattermost Security Updates JSON",
+        "source_kind": "json-feed",
+        "elapsed_seconds": 3.492,
+        "kind": "json-feed",
+        "items_seen": 594
+      },
+      {
+        "system_id": "mattermost",
+        "source_name": "OSV Mattermost",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 2.773,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "mediawiki",
+        "source_name": "MediaWiki Announce RSS",
+        "source_kind": "rss-feed",
+        "elapsed_seconds": 1.744,
+        "kind": "rss-feed",
+        "items_seen": 30
+      },
+      {
+        "system_id": "mediawiki",
+        "source_name": "OSV MediaWiki",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 0.002,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "medusa",
+        "source_name": "GitHub Medusa Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.053,
+        "kind": "html-links",
+        "items_seen": 102
+      },
+      {
+        "system_id": "medusa",
+        "source_name": "OSV Medusa",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.205,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "moodle",
+        "source_name": "OSV Moodle",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 0.003,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "nestjs",
+        "source_name": "OSV NestJS",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.216,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "nextjs",
+        "source_name": "GitHub Next.js Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.062,
+        "kind": "html-links",
+        "items_seen": 123
+      },
+      {
+        "system_id": "nextjs",
+        "source_name": "OSV Next.js",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.206,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "nginx",
+        "source_name": "CISA KEV NGINX",
+        "source_kind": "kev-json",
+        "elapsed_seconds": 2.979,
+        "kind": "kev-json",
+        "items_seen": 1545
+      },
+      {
+        "system_id": "nginx",
+        "source_name": "NGINX Security Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.565,
+        "kind": "html-links",
+        "items_seen": 138
+      },
+      {
+        "system_id": "nodejs",
+        "source_name": "CISA KEV Node.js",
+        "source_kind": "kev-json",
+        "elapsed_seconds": 2.335,
+        "kind": "kev-json",
+        "items_seen": 1545
+      },
+      {
+        "system_id": "nodejs",
+        "source_name": "Node.js Security Releases",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.258,
+        "kind": "html-links",
+        "items_seen": 74
+      },
+      {
+        "system_id": "nuxt",
+        "source_name": "Nuxt Security",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.236,
+        "kind": "html-links",
+        "items_seen": 118
+      },
+      {
+        "system_id": "nuxt",
+        "source_name": "OSV Nuxt",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.21,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "opencart",
+        "source_name": "OSV OpenCart",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.183,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "opencart",
+        "source_name": "OpenCart Releases",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.131,
+        "kind": "html-links",
+        "items_seen": 1500
+      },
+      {
+        "system_id": "openmage",
+        "source_name": "OSV OpenMage",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 0.002,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "openmage",
+        "source_name": "OpenMage GitHub Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 1.183,
+        "kind": "html-links",
+        "items_seen": 125
+      },
+      {
+        "system_id": "phpmyadmin",
+        "source_name": "OSV phpMyAdmin",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 2.248,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "phpmyadmin",
+        "source_name": "phpMyAdmin Security Page",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.967,
+        "kind": "html-links",
+        "items_seen": 262
+      },
+      {
+        "system_id": "prestashop",
+        "source_name": "Friends Of Presta Security",
+        "source_kind": "html-links",
+        "elapsed_seconds": 1.561,
+        "kind": "html-links",
+        "items_seen": 38
+      },
+      {
+        "system_id": "prestashop",
+        "source_name": "GitHub PrestaShop Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 1.701,
+        "kind": "html-links",
+        "items_seen": 127
+      },
+      {
+        "system_id": "prestashop",
+        "source_name": "OSV PrestaShop",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 0.861,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "prestashop",
+        "source_name": "PrestaShop Security Page",
+        "source_kind": "html-links",
+        "elapsed_seconds": 1.517,
+        "kind": "html-links",
+        "items_seen": 60
+      },
+      {
+        "system_id": "rails",
+        "source_name": "OSV Rails",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.702,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "react",
+        "source_name": "GitHub React Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.057,
+        "kind": "html-links",
+        "items_seen": 110
+      },
+      {
+        "system_id": "react",
+        "source_name": "OSV React",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.205,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "redmine",
+        "source_name": "OSV Redmine",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 2.948,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "redmine",
+        "source_name": "Redmine Security Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 4.655,
+        "kind": "html-links",
+        "items_seen": 371
+      },
+      {
+        "system_id": "saleor",
+        "source_name": "GitHub Saleor Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.23,
+        "kind": "html-links",
+        "items_seen": 120
+      },
+      {
+        "system_id": "saleor",
+        "source_name": "OSV Saleor",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.187,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "shopware",
+        "source_name": "OSV Shopware",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 0.987,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "shopware",
+        "source_name": "Shopware Security Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.226,
+        "kind": "html-links",
+        "items_seen": 129
+      },
+      {
+        "system_id": "spring-boot",
+        "source_name": "OSV Spring Boot",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.525,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "spring-boot",
+        "source_name": "Spring Security Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.615,
+        "kind": "html-links",
+        "items_seen": 118
+      },
+      {
+        "system_id": "spring-framework",
+        "source_name": "OSV Spring Framework",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.384,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "spring-framework",
+        "source_name": "Spring Security Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.573,
+        "kind": "html-links",
+        "items_seen": 118
+      },
+      {
+        "system_id": "spring-security",
+        "source_name": "OSV Spring Security",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.519,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "spring-security",
+        "source_name": "Spring Security Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.761,
+        "kind": "html-links",
+        "items_seen": 118
+      },
+      {
+        "system_id": "strapi",
+        "source_name": "OSV Strapi",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 0.003,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "strapi",
+        "source_name": "Strapi GitHub Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 1.197,
+        "kind": "html-links",
+        "items_seen": 124
+      },
+      {
+        "system_id": "sveltekit",
+        "source_name": "OSV SvelteKit",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.215,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "symfony",
+        "source_name": "OSV Symfony",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.527,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "traefik",
+        "source_name": "GitHub Traefik Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 3.102,
+        "kind": "html-links",
+        "items_seen": 124
+      },
+      {
+        "system_id": "traefik",
+        "source_name": "OSV Traefik",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 2.231,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "undici",
+        "source_name": "OSV Undici",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.366,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "vite",
+        "source_name": "OSV Vite",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.214,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "vite",
+        "source_name": "Vite Security",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.062,
+        "kind": "html-links",
+        "items_seen": 124
+      },
+      {
+        "system_id": "vue",
+        "source_name": "OSV Vue",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.209,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "vue",
+        "source_name": "Vue Security",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.245,
+        "kind": "html-links",
+        "items_seen": 111
+      },
+      {
+        "system_id": "webpack",
+        "source_name": "OSV webpack",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.367,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "werkzeug",
+        "source_name": "OSV Werkzeug",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 1.702,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "woocommerce",
+        "source_name": "GitHub WooCommerce Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 1.178,
+        "kind": "html-links",
+        "items_seen": 107
+      },
+      {
+        "system_id": "woocommerce",
+        "source_name": "OSV WooCommerce",
+        "source_kind": "osv-batch",
+        "elapsed_seconds": 0.003,
+        "kind": "osv-batch",
+        "items_seen": 1
+      },
+      {
+        "system_id": "woocommerce",
+        "source_name": "Patchstack Database",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.948,
+        "kind": "html-links",
+        "items_seen": 193
+      },
+      {
+        "system_id": "woocommerce",
+        "source_name": "Woo Developer Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 0.861,
+        "kind": "html-links",
+        "items_seen": 121
+      },
+      {
+        "system_id": "woocommerce",
+        "source_name": "Wordfence Vulnerability Database",
+        "source_kind": "html-links",
+        "elapsed_seconds": 1.382,
+        "kind": "html-links",
+        "items_seen": 0
+      },
+      {
+        "system_id": "wordpress",
+        "source_name": "Patchstack Database",
+        "source_kind": "html-links",
+        "elapsed_seconds": 2.754,
+        "kind": "html-links",
+        "items_seen": 193
+      },
+      {
+        "system_id": "wordpress",
+        "source_name": "PortSwigger Research",
+        "source_kind": "html-links",
+        "elapsed_seconds": 1.369,
+        "kind": "html-links",
+        "items_seen": 99
+      },
+      {
+        "system_id": "wordpress",
+        "source_name": "WPScan Vulnerability Database",
+        "source_kind": "html-links",
+        "elapsed_seconds": 1.19,
+        "kind": "html-links",
+        "items_seen": 74
+      },
+      {
+        "system_id": "wordpress",
+        "source_name": "WordPress Security News RSS",
+        "source_kind": "rss-feed",
+        "elapsed_seconds": 0.989,
+        "kind": "rss-feed",
+        "items_seen": 10
+      },
+      {
+        "system_id": "wordpress",
+        "source_name": "Wordfence Vulnerability Database",
+        "source_kind": "html-links",
+        "elapsed_seconds": 0.674,
+        "kind": "html-links",
+        "items_seen": 0
+      }
+    ],
+    "failures": [],
+    "slow_sources": [
+      {
+        "system_id": "redmine",
+        "source_name": "Redmine Security Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 4.655,
+        "status": "ok"
+      },
+      {
+        "system_id": "gitlab-ce",
+        "source_name": "GitLab Security Releases Atom",
+        "source_kind": "atom-feed",
+        "elapsed_seconds": 4.158,
+        "status": "ok"
+      },
+      {
+        "system_id": "haproxy",
+        "source_name": "HAProxy Blog Feed",
+        "source_kind": "rss-feed",
+        "elapsed_seconds": 4.003,
+        "status": "ok"
+      },
+      {
+        "system_id": "grafana",
+        "source_name": "Grafana Security Advisories",
+        "source_kind": "html-links",
+        "elapsed_seconds": 3.852,
+        "status": "ok"
+      },
+      {
+        "system_id": "kibana",
+        "source_name": "Elastic Security Announcements",
+        "source_kind": "html-links",
+        "elapsed_seconds": 3.794,
+        "status": "ok"
+      },
+      {
+        "system_id": "kibana",
+        "source_name": "Elastic Security Announcements RSS",
+        "source_kind": "rss-feed",
+        "elapsed_seconds": 3.703,
+        "status": "ok"
+      },
+      {
+        "system_id": "grafana",
+        "source_name": "CISA KEV Grafana",
+        "source_kind": "kev-json",
+        "elapsed_seconds": 3.513,
+        "status": "ok"
+      },
+      {
+        "system_id": "mattermost",
+        "source_name": "Mattermost Security Updates JSON",
+        "source_kind": "json-feed",
+        "elapsed_seconds": 3.492,
+        "status": "ok"
+      },
+      {
+        "system_id": "jenkins",
+        "source_name": "Jenkins Security Advisories RSS",
+        "source_kind": "rss-feed",
+        "elapsed_seconds": 3.284,
+        "status": "ok"
+      },
+      {
+        "system_id": "gitlab-ce",
+        "source_name": "GitLab Advisory Database",
+        "source_kind": "html-links",
+        "elapsed_seconds": 3.272,
+        "status": "ok"
+      }
+    ],
+    "systems": [
+      {
+        "system_id": "adminer",
+        "display_name": "Adminer",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "adobe-commerce",
+        "display_name": "Adobe Commerce",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "angular",
+        "display_name": "Angular",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "apache-httpd",
+        "display_name": "Apache HTTP Server",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "apache-tomcat",
+        "display_name": "Apache Tomcat",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "aspnet-core",
+        "display_name": "ASP.NET Core",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "astro",
+        "display_name": "Astro",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "caddy",
+        "display_name": "Caddy",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "directus",
+        "display_name": "Directus",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "discourse",
+        "display_name": "Discourse",
+        "active_source_total": 3,
+        "green_source_total": 3,
+        "failure_count": 0
+      },
+      {
+        "system_id": "django",
+        "display_name": "Django",
+        "active_source_total": 3,
+        "green_source_total": 3,
+        "failure_count": 0
+      },
+      {
+        "system_id": "drupal",
+        "display_name": "Drupal",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "echo",
+        "display_name": "Echo",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "esbuild",
+        "display_name": "esbuild",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "express",
+        "display_name": "Express",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "fastify",
+        "display_name": "Fastify",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "flask",
+        "display_name": "Flask",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "ghost",
+        "display_name": "Ghost",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "gin",
+        "display_name": "Gin",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "gitea",
+        "display_name": "Gitea",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "gitlab-ce",
+        "display_name": "GitLab CE",
+        "active_source_total": 3,
+        "green_source_total": 3,
+        "failure_count": 0
+      },
+      {
+        "system_id": "grafana",
+        "display_name": "Grafana",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "hapi",
+        "display_name": "Hapi",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "haproxy",
+        "display_name": "HAProxy",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "jenkins",
+        "display_name": "Jenkins",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "joomla",
+        "display_name": "Joomla",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "kibana",
+        "display_name": "Kibana",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "koa",
+        "display_name": "Koa",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "laravel",
+        "display_name": "Laravel",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "magento-open-source",
+        "display_name": "Magento Open Source",
+        "active_source_total": 3,
+        "green_source_total": 3,
+        "failure_count": 0
+      },
+      {
+        "system_id": "mattermost",
+        "display_name": "Mattermost",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "mediawiki",
+        "display_name": "MediaWiki",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "medusa",
+        "display_name": "Medusa",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "moodle",
+        "display_name": "Moodle",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "nestjs",
+        "display_name": "NestJS",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "nextjs",
+        "display_name": "Next.js",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "nginx",
+        "display_name": "Nginx",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "nodejs",
+        "display_name": "Node.js",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "nuxt",
+        "display_name": "Nuxt",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "opencart",
+        "display_name": "OpenCart",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "openmage",
+        "display_name": "OpenMage / Mage-OS",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "phpmyadmin",
+        "display_name": "phpMyAdmin",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "prestashop",
+        "display_name": "PrestaShop",
+        "active_source_total": 4,
+        "green_source_total": 4,
+        "failure_count": 0
+      },
+      {
+        "system_id": "rails",
+        "display_name": "Ruby on Rails",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "react",
+        "display_name": "React",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "redmine",
+        "display_name": "Redmine",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "saleor",
+        "display_name": "Saleor",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "shopware",
+        "display_name": "Shopware",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "spring-boot",
+        "display_name": "Spring Boot",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "spring-framework",
+        "display_name": "Spring Framework",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "spring-security",
+        "display_name": "Spring Security",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "strapi",
+        "display_name": "Strapi",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "sveltekit",
+        "display_name": "SvelteKit",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "symfony",
+        "display_name": "Symfony",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "traefik",
+        "display_name": "Traefik",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "undici",
+        "display_name": "Undici",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "vite",
+        "display_name": "Vite",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "vue",
+        "display_name": "Vue",
+        "active_source_total": 2,
+        "green_source_total": 2,
+        "failure_count": 0
+      },
+      {
+        "system_id": "webpack",
+        "display_name": "webpack",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "werkzeug",
+        "display_name": "Werkzeug",
+        "active_source_total": 1,
+        "green_source_total": 1,
+        "failure_count": 0
+      },
+      {
+        "system_id": "woocommerce",
+        "display_name": "WooCommerce",
+        "active_source_total": 5,
+        "green_source_total": 5,
+        "failure_count": 0
+      },
+      {
+        "system_id": "wordpress",
+        "display_name": "WordPress",
+        "active_source_total": 5,
+        "green_source_total": 5,
+        "failure_count": 0
+      }
+    ]
+  },
+  "alerts": [
+    {
+      "alert_id": "django::OSV Django",
+      "system_id": "django",
+      "display_name": "Django",
+      "source_name": "OSV Django",
+      "source_kind": "osv-batch",
+      "status": "resolved",
+      "opened_at": "2026-03-19T02:27:12+00:00",
+      "updated_at": "2026-03-19T02:27:12+00:00",
+      "resolved_at": "2026-03-19T02:27:12+00:00",
+      "failure_streak": 1,
+      "last_category": "tls",
+      "last_failure": {
+        "system_id": "django",
+        "display_name": "Django",
+        "source_name": "OSV Django",
+        "source_kind": "osv-batch",
+        "source_bucket": "official_sources",
+        "category": "tls",
+        "exception": "SSLError",
+        "message": "HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+        "status_code": null,
+        "url": "",
+        "summary": "django::OSV Django::tls::HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+        "elapsed_seconds": 25.112
+      }
+    },
+    {
+      "alert_id": "flask::OSV Flask",
+      "system_id": "flask",
+      "display_name": "Flask",
+      "source_name": "OSV Flask",
+      "source_kind": "osv-batch",
+      "status": "resolved",
+      "opened_at": "2026-03-19T02:27:12+00:00",
+      "updated_at": "2026-03-19T02:27:12+00:00",
+      "resolved_at": "2026-03-19T02:27:12+00:00",
+      "failure_streak": 1,
+      "last_category": "tls",
+      "last_failure": {
+        "system_id": "flask",
+        "display_name": "Flask",
+        "source_name": "OSV Flask",
+        "source_kind": "osv-batch",
+        "source_bucket": "official_sources",
+        "category": "tls",
+        "exception": "SSLError",
+        "message": "HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+        "status_code": null,
+        "url": "",
+        "summary": "flask::OSV Flask::tls::HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+        "elapsed_seconds": 25.129
+      }
+    },
+    {
+      "alert_id": "spring-security::OSV Spring Security",
+      "system_id": "spring-security",
+      "display_name": "Spring Security",
+      "source_name": "OSV Spring Security",
+      "source_kind": "osv-batch",
+      "status": "resolved",
+      "opened_at": "2026-03-19T02:27:12+00:00",
+      "updated_at": "2026-03-19T02:27:12+00:00",
+      "resolved_at": "2026-03-19T02:27:12+00:00",
+      "failure_streak": 1,
+      "last_category": "tls",
+      "last_failure": {
+        "system_id": "spring-security",
+        "display_name": "Spring Security",
+        "source_name": "OSV Spring Security",
+        "source_kind": "osv-batch",
+        "source_bucket": "ecosystem_sources",
+        "category": "tls",
+        "exception": "SSLError",
+        "message": "HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+        "status_code": null,
+        "url": "",
+        "summary": "spring-security::OSV Spring Security::tls::HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+        "elapsed_seconds": 25.247
+      }
+    },
+    {
+      "alert_id": "symfony::OSV Symfony",
+      "system_id": "symfony",
+      "display_name": "Symfony",
+      "source_name": "OSV Symfony",
+      "source_kind": "osv-batch",
+      "status": "resolved",
+      "opened_at": "2026-03-19T02:27:12+00:00",
+      "updated_at": "2026-03-19T02:27:12+00:00",
+      "resolved_at": "2026-03-19T02:27:12+00:00",
+      "failure_streak": 1,
+      "last_category": "tls",
+      "last_failure": {
+        "system_id": "symfony",
+        "display_name": "Symfony",
+        "source_name": "OSV Symfony",
+        "source_kind": "osv-batch",
+        "source_bucket": "official_sources",
+        "category": "tls",
+        "exception": "SSLError",
+        "message": "HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+        "status_code": null,
+        "url": "",
+        "summary": "symfony::OSV Symfony::tls::HTTPSConnectionPool(host='api.osv.dev', port=443): Max retries exceeded with url: /v1/querybatch (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))",
+        "elapsed_seconds": 25.232
+      }
+    }
+  ],
+  "monitor_summary": {
+    "generated_at": "2026-03-19T09:17:08+00:00",
+    "active_source_count": 113,
+    "green_source_count": 113,
+    "source_failure_count": 0,
+    "open_alert_count": 0,
+    "resolved_alert_count": 4,
+    "last_fully_green_run": "2026-03-19T09:17:08+00:00",
+    "source_catalog": {
+      "system_count": 62,
+      "source_count": 179,
+      "retired_source_count": 66
+    },
+    "ingest": {
+      "new_count": 0,
+      "updated_count": 0,
+      "failure_count": 0,
+      "systems_touched": []
+    },
+    "validation": {
+      "passed": true,
+      "error_count": 0,
+      "errors": []
+    }
+  }
+}
diff --git a/docs/testing-completeness-report.md b/docs/testing-completeness-report.md
index 1eb47e4e..b032da7d 100644
--- a/docs/testing-completeness-report.md
+++ b/docs/testing-completeness-report.md
@@ -1,6 +1,6 @@
 # 全库 Advisory 完整度报告
 
-- 生成时间: `2026-03-19T03:38:08+00:00`
+- 生成时间: `2026-03-19T09:17:16+00:00`
 - 最新 advisory 完整度: `89/89` `verified-real`
 - 合成验证数量: `0`
 - 阻塞数量: `0`
@@ -8,7 +8,7 @@
 - 完整度百分比: `100.0%`
 - active source 全绿: `113/113`
 - source open alerts: `0`
-- 最近一次 source 全绿: `2026-03-19T03:38:01+00:00`
+- 最近一次 source 全绿: `2026-03-19T09:17:08+00:00`
 
 ## 系统覆盖矩阵