f92065bc0b
Guards for the three cross-field invariants (source timeout vs lease TTL, stall window vs max TTFT, probe TTL vs slowest timeout) only ran inside from_env, so the from_settings path could build a GatewaySettings that violates the class's own documented invariants. Design moves all of them plus a non-empty sources check into __post_init__ as _validate_* methods, matching the existing frozen dataclasses in types.py. Covers two defects left by PR#1: probe_ttl_s was never moved, and an empty sources tuple leaked a bare 'max() arg is an empty sequence'.
165 lines
4.9 KiB
JSON
165 lines
4.9 KiB
JSON
{
|
|
"directed": true,
|
|
"nodes": [
|
|
{
|
|
"id": "plan:m1-core-plan",
|
|
"label": "M1 核心里程碑实现计划",
|
|
"type": "plan"
|
|
},
|
|
{
|
|
"id": "schema:llm-calls",
|
|
"label": "表结构: llm_calls(遥测 18 字段)",
|
|
"type": "schema"
|
|
},
|
|
{
|
|
"id": "metric:call-telemetry-coverage",
|
|
"label": "每次调用必录覆盖率(含缓存命中/失败/取消)",
|
|
"type": "metric"
|
|
},
|
|
{
|
|
"id": "finding:m2-soak-workload",
|
|
"label": "M2 真实数据压测: 场景矩阵与数据清单",
|
|
"type": "finding"
|
|
},
|
|
{
|
|
"id": "design:m2-distributed",
|
|
"label": "M2 分布式:Redis 治理后端+背压+Postgres 遥测+pricing+Embedding+压测 harness",
|
|
"type": "design"
|
|
},
|
|
{
|
|
"id": "plan:m2-distributed",
|
|
"label": "M2 分布式实现计划",
|
|
"type": "plan"
|
|
},
|
|
{
|
|
"id": "finding:m2-verifier-fixes",
|
|
"label": "M2 verifier 三项 Important 补齐(不变量接线/网关保护/P3 验收)",
|
|
"type": "finding"
|
|
},
|
|
{
|
|
"id": "finding:p6-soak-baseline",
|
|
"label": "P6 混合浸泡首跑基线与记分板三重伪击穿修复",
|
|
"type": "finding"
|
|
},
|
|
{
|
|
"id": "design:m25-resilience",
|
|
"label": "M2.5 治理韧性: 半死源隔离与健康感知调度",
|
|
"type": "design"
|
|
},
|
|
{
|
|
"id": "plan:m25-resilience",
|
|
"label": "M2.5 治理韧性实现计划",
|
|
"type": "plan"
|
|
},
|
|
{
|
|
"id": "finding:m25-acceptance",
|
|
"label": "M2.5 验收: P6 同场景 58.1% → 98.96%",
|
|
"type": "finding"
|
|
},
|
|
{
|
|
"id": "design:m3-ocr",
|
|
"label": "M3 OCR 端口族设计",
|
|
"type": "design"
|
|
},
|
|
{
|
|
"id": "metric:ocr-call-success",
|
|
"label": "OCR 治理调用成功率与错误分类分布",
|
|
"type": "metric"
|
|
},
|
|
{
|
|
"id": "plan:m3-ocr",
|
|
"label": "M3 OCR 实现计划",
|
|
"type": "plan"
|
|
},
|
|
{
|
|
"id": "finding:p7-ocr-soak",
|
|
"label": "P7 OCR soak 验收: 99.73% 与 13 不变量全 PASS",
|
|
"type": "finding"
|
|
},
|
|
{
|
|
"id": "design:m4-migration",
|
|
"label": "M4 迁移验证设计(GovDoc→CHS,发 v1.0)",
|
|
"type": "design"
|
|
},
|
|
{
|
|
"id": "plan:m4-migration",
|
|
"label": "M4 迁移实现计划(T0-T14)",
|
|
"type": "plan"
|
|
},
|
|
{
|
|
"id": "finding:m4-acceptance",
|
|
"label": "M4 迁移验收(GovDoc+CHS)",
|
|
"type": "finding"
|
|
},
|
|
{
|
|
"id": "design:settings-invariant-guards",
|
|
"label": "GatewaySettings 跨字段不变量守卫的生效范围",
|
|
"type": "design"
|
|
}
|
|
],
|
|
"links": [
|
|
{
|
|
"source": "plan:m1-core-plan",
|
|
"target": "design:m1-core-design",
|
|
"relation": "implements",
|
|
"evidence": "plans/2026-07-20-m1-core-plan.md 实现 designs/2026-07-20-m1-core-design.md 冻结的全部签名",
|
|
"added": "2026-07-20T10:18:41.339537+00:00"
|
|
},
|
|
{
|
|
"source": "metric:call-telemetry-coverage",
|
|
"target": "schema:llm-calls",
|
|
"relation": "measures",
|
|
"evidence": "遥测必录铁律: 一切调用路径落 llm_calls",
|
|
"added": "2026-07-20T11:11:46.302045+00:00"
|
|
},
|
|
{
|
|
"source": "schema:llm-calls",
|
|
"target": "design:m1-core-design",
|
|
"relation": "implements",
|
|
"evidence": "M1 设计 §4.4 冻结 18 字段",
|
|
"added": "2026-07-20T11:11:47.240466+00:00"
|
|
},
|
|
{
|
|
"source": "plan:m2-distributed",
|
|
"target": "design:m2-distributed",
|
|
"relation": "implements",
|
|
"evidence": "plans/2026-07-20-m2-distributed-plan.md 实现 designs/2026-07-20-m2-distributed-design.md 全部八项",
|
|
"added": "2026-07-21T03:46:35.186670+00:00"
|
|
},
|
|
{
|
|
"source": "plan:m25-resilience",
|
|
"target": "design:m25-resilience",
|
|
"relation": "implements",
|
|
"evidence": "方案B三件套任务分解",
|
|
"added": "2026-07-21T12:30:35.550386+00:00"
|
|
},
|
|
{
|
|
"source": "metric:ocr-call-success",
|
|
"target": "schema:llm-calls",
|
|
"relation": "measures",
|
|
"evidence": "OCR 调用复用 llm_calls 表(provider=monkey 行,tokens=0),成功率=error IS NULL 占比,错误分布按 error 前缀归类",
|
|
"added": "2026-07-22T02:05:15.793306+00:00"
|
|
},
|
|
{
|
|
"source": "schema:llm-calls",
|
|
"target": "design:m3-ocr",
|
|
"relation": "implements",
|
|
"evidence": "M3 设计 §7: 复用 18 字段表,无新表;messages 占位摘要,图像 bytes 不入库",
|
|
"added": "2026-07-22T02:05:15.836258+00:00"
|
|
},
|
|
{
|
|
"source": "plan:m3-ocr",
|
|
"target": "design:m3-ocr",
|
|
"relation": "implements",
|
|
"evidence": "T1-T10 逐任务落地设计 §3-§12",
|
|
"added": "2026-07-22T02:09:43.346922+00:00"
|
|
},
|
|
{
|
|
"source": "plan:m4-migration",
|
|
"target": "design:m4-migration",
|
|
"relation": "implements",
|
|
"evidence": "T0-T14 逐节实现设计 §4-§10/§15",
|
|
"added": "2026-07-22T09:33:05.357964+00:00"
|
|
}
|
|
]
|
|
} |