Commit Graph

58 Commits

Author SHA1 Message Date
浅念 27a8282367 docs(plan): P3 Task 5 终验注记补全
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 19:46:05 +08:00
浅念 15d7c91648 docs(plan): P3 Task 5 审查移交的 Task 6 汇流契约底本
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 19:40:35 +08:00
浅念 fae44a11f8 docs(plan): P3 Task 5 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 19:15:38 +08:00
浅念 c8a2ed81e5 docs(plan): P3 Task 4 勾选 + Task 7 度量口径
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 18:56:44 +08:00
浅念 99c07906cd docs(plan): P3 Task 3 勾选 + Task 6 编排义务六项
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 18:20:08 +08:00
浅念 24220c5ee9 docs(plan): P3 Task 2 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 16:50:12 +08:00
浅念 2d57c3c814 docs(plan): P3 Task 1 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 16:00:14 +08:00
浅念 eb188da5c2 fix(import): 复用口径忠实化;管道 Outcome 契约与 succeeded_with_issues;报告写入时序;stale 警告
评审修复(Plan 3 Task 1 复审):
- 复用路径只返回 job 锚定字段(jobId/status/reused/siteId/mapping_version/
  report_path),快照/版本块仅在非复用时解析返回——复用结果不再回显编造数据
- ImportPipeline 契约钉死:返回 Promise<ImportPipelineOutcome>
  ({ counts, issues });服务按"累加器 ⊕ 返回值"合并(counts 同键返回值
  覆盖、issues 累加器在前),issues 非空 → succeeded_with_issues;
  ctx.report 即累加器(管道抛错时部分产出仍入报告)
- 报告时序:mkdir + tmp 写入 + rename 先于终态行更新——report_path 落库
  即文件存在;写失败 → failed(REPORT_WRITE_FAILED),不挂悬空路径
- CLI 复用命中非终态(queued/running)→ 崩溃残留警告(重试需显式换 --key)
- 管道抛 ImportError 保留原 code 入 error_code,summary 冠 [pipeline]
- 确定性 23505 探针:未提交孪生 job 行事务内持唯一键触发真实 PG 唯一
  冲突 → 败者复用既有 job
- 报告补 idempotencyKey / attempt 字段
- 计划文档 Task 6 增补 stale 回收决策项(ADR-017)

测试 282 通过(279 + 3:Outcome 合并/ImportError 前缀/23505 探针);
typecheck 四段链 + lint 全绿。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 15:56:00 +08:00
浅念 0e8b2b5356 feat(import): job 骨架与生命周期
Plan 3 Task 1:sf import 命令骨架 + import_jobs 生命周期(空管道,Task 6 接真实管道)。

- import.service.ts(零装饰器):createImportJob——站点/快照解析(缺省按 (connection,
  kind='wxr') 选最新;三快照绑定按前置事实 13 记入报告,job 行不扩列)、幂等建行
  (默认 key=site+wxr快照+三语义版本;重复提交复用既有 job 不重跑,并发撞唯一约束
  重查收敛)、状态推进 queued→running→succeeded/failed(attempt/started_at/finished_at/
  error_code/error_summary)、报告落 artifacts/import/<jobId>/reports/import.json
  (全四版本块:adapter/mapping/sanitizer/parser;job 行落 mapping_version)
- 可预期错误带 code:SITE_NOT_FOUND / SNAPSHOT_NOT_FOUND / NO_WXR_SNAPSHOT /
  PIPELINE_FAILED——解析期失败零 job 行
- adapter 事件加法式补 postId(前置事实 12):unsupported/error 事件可选携带
  String(postId),缺失时键缺席不硬造 source_id;row 事件与报告聚合零影响、不触发版本 bump
- canonicalJson 提取至 apps/api/src/common/canonical.ts 共享导出(前置事实 6),
  register 侧改 import 零行为变更(既有清单哈希测试守护)
- sf CLI + import 命令(--site/--snapshot/--key/--connection),输出 job 摘要与版本块
- 测试:tests/integration/import-job.test.ts(5 例:生命周期观察/最新快照解析/幂等复用
  与并发收敛/可预期失败零落行/failed 路径)+ adapter postId 3 例 + canonical 单测 6 例
  (265→279 全绿);typecheck 四段链/lint 绿;临时库 CLI 冒烟(register→import→复用)通过

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 15:30:42 +08:00
浅念 e52a2eb3e4 docs(plan): P3 Task 0 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 15:13:09 +08:00
浅念 9937f76856 docs(plan): Plan 3 定稿——Task 1 补 adapter 扩展提示
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 14:19:51 +08:00
浅念 9233f1ce5d docs(plan): Plan 3 终审收尾——unsupported 事件加法补 postId、product-tag 同步、Task0 SQL 过滤、措辞统一
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 14:17:56 +08:00
浅念 4f6d50a7ae docs(plan): Plan 3 复审两 minor+五建议——status 入 checksum 域、unsupported 也写 source_records(1122)、三快照绑定语义、product-tag 勘误、permalink 措辞
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 14:15:40 +08:00
浅念 d392370fda docs(plan): Plan 3 修复评审两 P0+四项——媒体映射侧车(真实数据实证扁平目录零命中)、checksum 输入域钉死(排 rawLocation)、attachment 降级 301、站点路径来源、悬空引用用例、§6.1 全行覆盖、locale 接缝、计数勘误
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 14:10:36 +08:00
浅念 664aade131 docs(plan): Plan 3 实施计划——阶段3 内容导入管道(8任务)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 14:00:09 +08:00
浅念 a96f35c854 docs(plan): Plan 2 收官——Task 9 勾选、终审账本补遗(issues 机器码化/媒体限额/ADR 第三处 paths)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 13:41:51 +08:00
浅念 2a0d830520 docs: 阶段2收尾——ADR-016/typecheck链/阶段3移交清单/README
- ADR-016:saxes ^6.0.0(勘误:计划曾误写 ^0.9)/commander ^14 根依赖/清洗三件套
  同 range + 镜像直调 launder.naughtyHref/tsx ^4 CLI 直吃 TS;跨包接线(根 tsconfig
  paths 三方消费、build 侧 dist+prebuild、tsconfig 双链型并存);根 engines 升
  >=22.12(对齐 sanitize-html 2.18 engines,CI node 22 与本机 24 均满足)
- 根 typecheck 链扩为四段:追加 pnpm --filter @sf/adapter-wp typecheck
- Plan 2 文末新增"移交阶段 3 清单"定稿(7 项:taxonomyRefs 自建缺失 term、
  media_bundle 映射、connection 库级唯一索引、REST 重审项、导入消费接口、
  Task 0.2 cms 备份续传携带、versions.ts bump 纪律);Task 9 与验收节勾选
- README:快速开始加 pnpm sf 示例;目录结构/文档导航/当前状态更新为阶段 2 完成
- 三绿:lint / typecheck(四段)/ test 263 全部通过(数量不变)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 13:34:15 +08:00
浅念 57357cd493 docs(plan): P2 Task 8 勾选——真实冒烟验收通过
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 13:28:03 +08:00
浅念 75028e8a16 docs(plan): P2 Task 7 勾选 + Task 9 移交清单
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 13:14:35 +08:00
浅念 c28c1655a4 fix(source): DB 事务化;storageRoot 入 metadata;siteCreated 与并发测试;CLI 体验与校验小修
评审修复(4 项 Important + 8 项 Minor):
- DB 事务化:site→connection→snapshots 全部落库包进 db.transaction 单事务
  ("任何失败零落库"字面成立);助手改收 Pick<select|insert|execute> 结构类型
  (tx 与直连 db 通用)。并发撞唯一约束不在事务内补查(语句失败后续查 25P02),
  改为 registerSource 层事务级重试(≤3 次,第二次 select 命中复用分支)
- connection 并发:select-then-insert 无约束可兜底,事务内 pg_advisory_xact_lock
  (siteId:name) 串行化同键登记(kind 枚举扩展推迟 REST 通道,注释注明)
- storageRoot 绝对路径固化进每条 snapshot metadata 与报告 inputs(快照不可变,
  事后无法补写——永久缺口封堵)
- ensureSite 返回 created;RegisterResult.siteCreated;CLI 站点已存在时提示
  --name/--locale/--origin 未生效
- 媒体复制期逐文件 sha 复核(copyAndHash 对拍清单,源中途变更 → COPY_FAILED)
- 空媒体目录拒绝(EMPTY_MEDIA_DIR)
- CLI:PATH_NOT_ALLOWED 追加 --allow 提示;--origin 经 new URL 校验(http/s)、
  --locale 语言标签形状校验,fail fast;开跑打印生效白名单(审计)
- makeRunId 服务导出、CLI 复用;.tmp 残留手工清理策略写入文件头注释
- 测试 +2:并发同输入恰好一组行/双方同 id/新建标志恰一(3 次重跑稳定);
  isUniqueViolation 形状单测(drizzle cause.code / 裸 code / 其他)

全套 263 绿;typecheck / lint 绿;CLI 冒烟对临时库验证事务路径、siteCreated
输出、defaults 落库(en-US / https://qa.example)、白名单打印与校验报错

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 13:06:48 +08:00
浅念 9732e1b684 fix(source): 中间段符号链接逃逸堵截(无条件 realpath);注释口径修正
- validateInputPath 原先只在末段是符号链接时 realpath——中间目录段含 junction
  (链接在白名单内、目标在外,Windows 免特权可构造)时词法前缀判定被绕过,
  会读到白名单外内容(评审 PoC 复现)。改为 lstat 存在性探测后无条件
  realpath(abs),整条路径解析到物理位置再做白名单与类型判定;断链场景
  realpath 抛 ENOENT 仍归入 INPUT_NOT_FOUND(语义不变)
- 回归测试:中间段 junction 逃逸用例(incoming/junc → pkg-outside/escape.xml,
  断言 PATH_NOT_ALLOWED + 零落库);已对修复前代码验证为红(逃逸被接受)、
  修复后绿
- 注释口径修正:registerSource 的"任何失败零落库零复制"只在校验阶段成立——
  摄取中途失败不回滚已落位副本(content-addressed、幂等无害),但 DB 写入
  在全部摄取完成后才开始,任何失败零落库不变
- 计划勾选:Task 7 "CLI 执行机制(钉死)"(已实现并双命令冒烟验证)

全套 261 测试绿(+1);typecheck / lint 绿

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 12:47:07 +08:00
浅念 46b823e667 docs(plan): P2 Task 7 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 12:31:31 +08:00
浅念 a535cde270 docs(plan): P2 Task 6 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 12:09:41 +08:00
浅念 15e1e51a14 docs(plan): P2 Task 5 勾选 + Task 6 对接清单
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 11:27:18 +08:00
浅念 8796da03f1 docs(plan): P2 Task 4 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 10:14:47 +08:00
浅念 f4971a943b docs(plan): P2 Task 3 勾选 + 两批审查移交件并入 Task 4
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 09:26:49 +08:00
浅念 6eb5fa6dda docs(plan): P2 Task 2 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 08:41:17 +08:00
浅念 ec898f6e0a docs(plan): P2 Task 1 勾选;tsconfig 双链型注释(ADR-016 待记)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-21 08:16:18 +08:00
浅念 2d33dd17dd docs(plan): Plan 2 采纳复审建议——paths 统一三方消费、commander 定根依赖
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 22:53:40 +08:00
浅念 5cc98c584f docs(plan): Plan 2 修复评审三 Issue 与建议——CLI机制/跨包接线前置/media清单哈希定义/probe路径策略/内存采样法/报告路径/责任链续传
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 22:51:53 +08:00
浅念 ecff5a34af docs(plan): Plan 2 实施计划——阶段2 WXR 流式适配器(9任务)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 22:46:37 +08:00
浅念 494beadf94 chore: 终审 Minor 清理——@types/node 钉 22、contracts 构建排除测试、helpers 盲区注记、计划收口注记
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 21:08:34 +08:00
浅念 c128ebf5a0 docs(plan): Task 14 勾选——Plan 1 全部任务完成;修注释笔误
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 20:59:58 +08:00
浅念 622c2b09d8 docs(plan): Task 13 勾选——阶段 1 验收:globalSetup 临时库 + 空库一键迁移
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 20:43:24 +08:00
浅念 9e0b49885b docs(plan): Task 12 勾选——七域迁移收官,21 表齐
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 20:28:07 +08:00
浅念 c09a9b31f6 docs(plan): Task 11 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 20:19:00 +08:00
浅念 de415e7301 docs(plan): Task 10 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 20:08:24 +08:00
浅念 cb959c905d docs(plan): Task 9 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 19:52:01 +08:00
浅念 60581047ef docs(plan): Task 8 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 19:42:46 +08:00
浅念 7636a81bd2 docs(plan): Task 7 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 19:31:25 +08:00
浅念 5da883cd40 docs(plan): Task 6 勾选;schema 注释编号对齐
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 19:19:54 +08:00
浅念 7720d66630 docs(plan): Task 5 勾选 + Step3 验证命令对齐现实
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 19:14:17 +08:00
浅念 6725bf0024 docs(plan): Task 4 勾选;Task 13 沉淀 KINDS 复用注记
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 18:50:18 +08:00
浅念 33517065f6 docs(plan): Task 3 勾选 + 阶段2责任清单
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 18:30:43 +08:00
浅念 5e4524e2fb docs(plan): Task 2 勾选
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 18:12:37 +08:00
浅念 b538c21e78 docs(plan): Task 1 勾选;Task 14 沉淀质量审查建议(type:module/.gitattributes/engines)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 17:43:25 +08:00
浅念 7d1ccd3dd8 docs: 阶段0收尾——Task 0.3/0.4 勾选、基数文档措辞修正
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 17:34:28 +08:00
浅念 2f1d594034 fix(fixtures): 修正 wppop_sections PHP 序列化长度前缀(审查发现);记录悬空图库引用为有意设计
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 17:30:25 +08:00
浅念 2b1130c92c docs: Task 0.1 收尾——cms 基线降级为信息性记录(发现 cms 为活跃仓库)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 17:23:28 +08:00
浅念 277523fa2c docs(plan): Task 0.2 标记用户暂缓(待备份目标盘)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 17:18:02 +08:00