⚠️ 重要判定:本区间「修复」的 36 条中,绝大多数是行号位移导致的“重新识别”,并非真实修复。典型对应关系(同一问题的旧/新行号):
report-runner.ts:369 → 374(圈复杂度/嵌套/函数过长/扇入扇出/高耦合,新增 import 使整体下移 5 行)
report-runner.ts:510 → 515、app.ts:106 → 111(下移 5 行)、app-config.ts:131 → 141(下移 10 行)
- 各测试文件重复代码块
+21 行左右的位移
即:核心维护性债务没有被消除,只是位置移动;真正的“消失”仅限被删除/改写的旧代码段。
注:新增 Medium 中 6 条为误报(3.3),另有多条是位移伪新增(3.2);真正由本版本新代码引入的独立问题约 6–8 条,集中在 app.ts bootstrapping 膨胀、app-config.ts 解析膨胀、postgres-store.ts DSN 解析复杂度。
-
bootstrap() 职责过载且被本版本继续加重(src/app.ts:111)
本版本在 bootstrap 内又插入了 PromptRegistry 构建、start()、释放、以及 onWarning 回写 readinessWarnings 的逻辑,使本已 300+ 行的函数进一步膨胀(圈复杂度 17、扇出 48)。建议把「提示词装配」抽成独立 createPromptRuntime(appConfig, options, readinessWarnings),返回 { registry, promptStore }。
-
loadAppConfig() 圈复杂度 41 / 179 行(src/config/app-config.ts:141)
prompts 解析分支被直接堆进主干,叠加原有 TOS/override/LLM/部署校验。建议按域拆分 parsePromptConfig(env)、parseLlmConfig(env)、parseStorageConfig(env)。
-
createPromptPoolConfig 圈复杂度 18(src/prompts/postgres-store.ts:19)
DSN 正则解析 + 逐字段映射 + 校验集中在一个函数。正则 ([A-Za-z_][A-Za-z0-9_]*)=(?:'((?:\\.|[^'])*)'|"((?:\\.|[^"])*)"|(\S+)) 的 consumed 累积可读性差且容易在后续改动中出错。建议提取 parseLibpqDsn(dsn): Map<string,string> 并单测覆盖引号/转义/尾随垃圾场景。
-
seedMissing 每轮刷新都执行,且失败会阻断读取
每 30s 先 再 。若运行账号对 (Hub 表常见只读授权), 抛错 → 整个刷新失败 → 动态覆盖,且每 30s 打一条 warning。建议将 seeding 失败与读取解耦(seed 失败仅告警、不阻断 应用),或仅在启动时 seed 一次。
-
issues_summary 配置校验由「启动即失败」变为「运行期降级」
改造后 validateIssuesSummaryConfig 只在 extract() 内执行,且 extract 的异常会被 ReportRunner.run 捕获为非阻断错误 ISSUES_SUMMARY_FAILED。即:issues_summary 配置错误不再于 bootstrap 暴露,而是静默降级(缺陷摘要缺失)。建议在 bootstrap 装配时仍做一次 validateIssuesSummaryConfig 预检,或至少在 readiness 阶段告警。
-
配置热更新路径需回归
ReportRunner / IssuesSummaryExtractor 现改为每次执行读取当前快照,配合 30s 刷新,意味着 DB 改动 MID-任务可能被后续批次采纳。需确认这是预期语义(同一任务内多次读取可能出现“前后不一致”的提示词),并补充“同任务内快照一致性”的说明或约束。
说明:本报告「修复的问题 / 新增问题」两节数据 100% 取自 codescan_issues_diff,未作增删;第四节为基于变更源码的人工复核结论,已逐条标注判定依据。