77687e2330
Task 6 质量评审四项修复: - 失败报告部分冲刷(Fix 1):orchestratedPipeline 分派/finish 包 try/catch—— 中途抛错时把可安全取得的部分产出冲入 ctx.report 后重抛:term/content 的 finish 是纯返回(已算成复用、未算成就地补算 trySyncFinish,自身抛错放弃 该部分不掩盖原错)、已收集的 adapter 问题/清洗统计、进度计数 eventsDispatched(orchestrator 键,仅失败路径出现——成功路径不占 18 键面)。 media/route finish 依赖库与先序产物,失败路径不调用(其键缺席如实反映)。 - 列表路径校验(Fix 3):ImportErrorCode 增 INVALID_LIST_PATH;解析期防线 移至阶段 2.5(建 job 行前——建行/置 running 后再抛会留悬挂行);复用 route-writer 导出的 isSafePath;normalizeListPath 自带安全拒绝(写入器 自调用位双覆盖)。CLI 无需新码(既有 ImportError 通道按 code 呈现)。 - JSDoc 求和措辞(Fix 2):content-writer/media-writer 的 counts 键契约 注记由"返回值覆盖同名键 CLOBBER"改为"同名键求和(Task 6 钉死——防覆盖 安全网)",与 ImportPipelineOutcome.counts 契约对齐。 - reason 归档(Fix 4):分派循环对 unsupported/error 事件把 reason/issue 推入 adapter 问题组(此前被静默丢弃)。 测试:import-full 增 2 例(手构流 3 事件后爆炸 → failed + eventsDispatched=3 + 部分 content/term 计数 + unsupported/error reason 双归档;--products-path /../x/ 等 → INVALID_LIST_PATH 零 job 行)。全量 325 通过;typecheck/lint 干净。 Co-Authored-By: Claude Code <noreply@anthropic.com>