Commit Graph

2 Commits

Author SHA1 Message Date
浅念 073b9ca39c fix(adapter-wp): IO 错误归入 fatalError;rowErrors 封顶;timings 契约与纯 term 流测试;PARSER 版本漂移保险
审查修复(Task 6 质量审查 5 项):
- Fix 1:Node 系统错误(Error 且 code 字符串——ENOENT/EACCES 等 IO 形态)与 WxrError
  同路记入 fatalError(message 含 code 与 path),报告不上抛保留已聚合部分;无 code 的
  程序 bug 仍原样上抛;模块头契约注释同步修正
- Fix 2:rowErrors 固化封顶 10_000 条 + rowErrorsTruncated 计数(超出只计数不固化,
  防对抗性输入使报告体积失去上界;counts/byDiffType 统计维度不受截断影响);HTML
  渲染追加截断说明行
- Fix 3:timings 注入契约测试(多 chunk 流消费完成后外部对象 parseMs>0/sanitizeMs>=0)
- Fix 4:纯 wp:term 流测试(counts 空对象/rows=0/terms 计数)
- Fix 5:PARSER_VERSION 漂移保险(createRequire 读 saxes/package.json,主版本不一致
  即爆红,fail loud)

247 → 253 测试全绿;tsc/lint/build 绿。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 12:04:15 +08:00
浅念 6573b8b326 feat(adapter-wp): 全链组装与导入前报告
- src/versions.ts:ADAPTER/MAPPING/SANITIZER_VERSION 三常量(bump 语义 JSDoc 冻结:
  映射表/清洗白名单实质变更才 bump 对应项,三者独立演进)+ PARSER_VERSION(saxes 硬编码)
- src/adapter.ts:runWxrAdapter 串联 parseWxrStream→mapItem→sanitizeBodyHtml 为
  AsyncGenerator<AdapterEvent>;term 旁路直通;bodyHtml 为空跳过清洗零 diff;
  changed 用 html!==input(Task 5 移交:diffs.length===0 ≠ 未变更);validateUniversalRow
  加法式契约复检(不动 contracts);解析/清洗分段计时(parser.next() await 窗口归属解析)
- src/report.ts:runWxrAdapterReport 聚合(首条版本块/按 sourceType Created-Skipped(无
  变化)-Failed-Unsupported/清洗统计按 diff.type+changedRows/行级错误 rawLocation+message
  +excerpt/致命 WxrError 记 fatalError 不上抛——wxr:probe 消费通道);renderReportHtml
  所有动态文本经 escapeHtml(<>&"',Task 5 移交的标记注入面防线)
- test/adapter.test.ts:19 用例(mini 全链/changed 语义/报告结构/恶意样本转义/
  unsupported-error 汇聚/wppop 失败贯通/JSON 可序列化/致命解析错误交付确定性)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 11:44:55 +08:00