用途:在本地 Claude Code 中回填某个来源的 changelog 历史,避开远程更新工作流的服务端抽取(Haiku / 工具循环)开销。通过 backfill-source 动态工作流,或 backfill-sweep 一次处理多个来源。工作流封装本地入库原语:前置校验、抓取与抽取、/batch 批量 upsert、一致性规则。
主要能力:由确定性外壳负责窗口上限、预算门禁、去重与安全门禁,把易被自然语言遗漏的纪律固化进代码。成本仅消耗会话 token,由该轮 budget.total 硬上限(用 +Nk 指令设置);抽取用 Sonnet,机械阶段用 Haiku;不产生服务端抽取费用,不调用 POST /v1/workflows/update,/batch 插入不跑 AI。
使用方式:按 scriptPath 启动,而非名称(项目 .claude/workflows/ 脚本未注册进名称注册表)。默认 dryRun,先跑干跑查看计划与计数,再提交:Workflow({ scriptPath: ".claude/workflows/backfill-source.ts", args: { source: "acme/changelog" } }); 正式提交需传 dryRun: false 与 maxReleases。多来源用 backfill-sweep.ts 传 sources 数组。参数:source(slug | src_ id | URL)、maxReleases(默认 50)、dryRun(默认 true)、model(默认 sonnet)。
前置校验门禁不可绕过:先运行 preflight.ts,失败即关闭;ai-input=no 的选择退出会拒绝,持续未知状态在抓取或写入前终止;仅在有明确记录的发布者许可时覆盖。
限制与注意:仅限本地 Claude Code,依赖持久化本地文件系统(~/.releases/work/)与 RELEASES_API_* 环境变量,不部署到托管代理集群。干净 feed / GitHub 来源应直接添加并交给 cron。对已入库的 scrape 来源,首次回填需先硬删除旧行以释放 UNIQUE(source_id, url) 去重槽:releases admin release delete --source <slug> --hard,再以 dryRun: false 运行;否则会写入重复行。抽取粒度可在 onboard 时设 metadata.granularity 为 feature | period | version | rollup 以固定。运行记录写在 ~/.releases/work/ 的隔离目录,不占用全局 .current-run 指针,故不出现在 releases admin work status。声明来源“干净/已恢复”前,必须按同一门禁自行抓取线上页面,比对最新 3-5 条与已存记录。媒体与内容修复走四个服务端管理路由(backfill-media、backfill-video、reextract-source、refetch-release),均幂等且多数默认 dryRun。