用途:维护 my-skills 聚合仓库的上游同步环节,使每个来源的合并副本回到当前状态——除已记录的补丁外与上游一致,并让补丁清单中的 pin 记录真实基线,最终关闭 pending-update 议题。新鲜度检查负责检测,本技能负责维护。
主要能力与流程:
- 读取 pending-update 议题并 dry-run:在聚合仓库根目录运行 node scripts/vendor-sync.mjs --dry-run,读取人类可读块与 VENDOR_SYNC_SUMMARY= 行,把每个待处理项分类为 added/updated、removed upstream(保留本地)、patched 且上游已修改、patched 且上游已移除。
- 运行同步:node scripts/vendor-sync.mjs 复制 added/updated 文件,不触碰补丁文件、不删除文件;确认退出码为 0,并用 git status --porcelain / git diff --stat 核对差异。
- 处理待处理项:对 patched 且上游已修改的文件,在临时目录用 git clone、git show、git merge-file 做三方合并(base=pin 的上游、ours=本地副本、theirs=上游 HEAD);干净合并时用 cmp 机械验证补丁是否原样保留,冲突则不写入并交由用户手动解决。对上游已移除的文件,由用户决定删除(git rm)或保留(移到 skills/self/ 下并改记为自撰)。
- 更新 PATCHES.md:提升各来源的 pin 到实际合并所用的提交,重写被重塑补丁的行,删除或改记已移除的行。
- 验证:运行 node --test scripts/*.test.mjs,并再次 dry-run,摘要须为 changed=false 且无 patchedDiffers、patchedRemoved 或 removed 项。
- 提议提交、推送并关闭议题:提交信息形如 vendor: sync <sources> and merge patched files 或 vendor: refresh pins, copies current;推送与关闭议题需用户确认。
两条不变量:补丁文件永不被覆盖,上游变更只能通过保留本地补丁的合并进入;上游删除的文件未经明确指示不得删除。
适用场景:聚合仓库出现待处理的上游更新、需要合并补丁文件或刷新 pin 时。
限制:需要聚合仓库根目录、Git Bash 或 WSL 环境(PowerShell 无法可靠执行 mktemp/重定向);git 写入与远程写入需用户批准;pin 无法获取时需回退为手工合并;若 dry-run 无待处理项则无需维护,若议题仍开启则视为过期并按文档关闭。