更新: 109 个文件 - 2026-03-18 10:55:52
这个提交包含在:
@@ -34,6 +34,18 @@ REQUIRED_SYSTEM_FIELDS = {
|
||||
"render_policy",
|
||||
}
|
||||
|
||||
REQUIRED_SOURCE_FIELDS = {
|
||||
"name",
|
||||
"kind",
|
||||
"confidence",
|
||||
"status",
|
||||
"retired_reason",
|
||||
"replacement_sources",
|
||||
"request_policy",
|
||||
"health_policy",
|
||||
"parser_hints",
|
||||
}
|
||||
|
||||
FORBIDDEN_RUNTIME_PATTERNS = [
|
||||
"assets-persist.lovart.ai",
|
||||
"cdnjs.cloudflare.com",
|
||||
@@ -73,6 +85,11 @@ def validate(source_map: Dict[str, Any]) -> List[str]:
|
||||
errors.append(f"system INDEX missing: {system_root / 'INDEX.md'}")
|
||||
if not (SYSTEMS_DIR / f"{system_id}.json").exists():
|
||||
errors.append(f"system registry summary missing: {SYSTEMS_DIR / f'{system_id}.json'}")
|
||||
for bucket_name in ("official_sources", "ecosystem_sources", "research_sources"):
|
||||
for source in system.get(bucket_name, []):
|
||||
missing_source_fields = REQUIRED_SOURCE_FIELDS - set(source.keys())
|
||||
if missing_source_fields:
|
||||
errors.append(f"source missing required fields: {system_id}/{source.get('name', 'unknown')} -> {sorted(missing_source_fields)}")
|
||||
|
||||
if not (FRAMEWORK_ROOT / "README.md").exists():
|
||||
errors.append(f"framework root README missing: {FRAMEWORK_ROOT / 'README.md'}")
|
||||
@@ -89,6 +106,12 @@ def validate(source_map: Dict[str, Any]) -> List[str]:
|
||||
GENERATED_DIR / "coverage-matrix.md",
|
||||
GENERATED_DIR / "latest-ingest.md",
|
||||
GENERATED_DIR / "run-summary.json",
|
||||
GENERATED_DIR / "source-health.json",
|
||||
GENERATED_DIR / "alerts.json",
|
||||
GENERATED_DIR / "monitor-summary.json",
|
||||
GENERATED_DIR / "source-catalog-audit.json",
|
||||
GENERATED_DIR / "source-catalog-audit.md",
|
||||
GENERATED_DIR / "retired-sources.json",
|
||||
GENERATED_DIR / "dashboard" / "index.html",
|
||||
GENERATED_DIR / "dashboard" / "overview" / "index.html",
|
||||
GENERATED_DIR / "dashboard" / "runs" / "index.html",
|
||||
@@ -115,17 +138,27 @@ def validate(source_map: Dict[str, Any]) -> List[str]:
|
||||
GENERATED_DIR / "dashboard" / "docs" / "root-readme.html",
|
||||
GENERATED_DIR / "dashboard" / "docs" / "authorization-model.html",
|
||||
GENERATED_DIR / "dashboard" / "docs" / "source-map.html",
|
||||
GENERATED_DIR / "dashboard" / "docs" / "source-catalog-audit.html",
|
||||
GENERATED_DIR / "dashboard" / "docs" / "retired-sources.html",
|
||||
GENERATED_DIR / "dashboard" / "docs" / "repro-map.html",
|
||||
GENERATED_DIR / "dashboard" / "docs" / "coverage-matrix.html",
|
||||
GENERATED_DIR / "dashboard" / "docs" / "design-source.html",
|
||||
GENERATED_DIR / "dashboard" / "docs" / "architecture-library.html",
|
||||
GENERATED_DIR / "dashboard" / "data" / "completeness.json",
|
||||
GENERATED_DIR / "dashboard" / "data" / "source-health.json",
|
||||
GENERATED_DIR / "dashboard" / "data" / "alerts.json",
|
||||
GENERATED_DIR / "dashboard" / "data" / "monitor-summary.json",
|
||||
GENERATED_DIR / "dashboard" / "data" / "source-catalog-audit.json",
|
||||
ROOT / "docs" / "testing-completeness-report.md",
|
||||
ROOT / "08-threat-intel" / "registry" / "source-confidence.md",
|
||||
]:
|
||||
if not path.exists():
|
||||
errors.append(f"generated artifact missing: {path}")
|
||||
|
||||
monitoring_files = sorted((REGISTRY_ROOT / "monitoring").glob("*.json"))
|
||||
if not monitoring_files:
|
||||
errors.append(f"monitoring history missing: {REGISTRY_ROOT / 'monitoring'}")
|
||||
|
||||
runtime_files = [
|
||||
GENERATED_DIR / "dashboard" / "index.html",
|
||||
GENERATED_DIR / "dashboard" / "overview" / "index.html",
|
||||
|
||||
在新工单中引用
屏蔽一个用户