用途
这是“舰队”的下游更新器,与 fork-fleet 相对:fork-fleet 从父仓库向外查找各 fork 中值得回收的工作,而 aeon-update 运行在实例内部,把父仓库发布的框架变更拉下来——包括新技能、脚本与测试框架修复、工作流与文档更新——并以可审查的 PR 形式落地。它的目标是让实例无需手工执行 rsync-overlay rebase 也能跟 aeonfun/aeon 保持同步。
运行原则
- PR,绝不直接推送到 main:每个框架变更都作为单个可审查 PR 提交,由操作者合并。
- 绝不覆盖操作者配置:aeon.yml、STRATEGY.md、soul/、memory/、output/、.mcp.json 以及由 git 推导出的目录文件均归实例所有;上游对这些文件的改动只在 PR 正文中展示供人工审查,绝不写入工作树。
- 三方合并,而非盲目覆盖:已被操作者定制过的框架文件,如果本地编辑与上游编辑触及互不重叠的区域,则自动合并(真正的 git merge-file 三方合并);只有当同一行在两侧都被修改时才列为冲突交由人工处理。
- 同步时静默:基线等于上游 HEAD 时无事可做,也不发送通知。
- 基线即水位线,随合并推进:新的基线 SHA 写入 PR 分支,因此只有操作者合并该 PR 后水位线才会移动;未解决的冲突单独跟踪,推进基线不会静默丢弃它们。
参数
${var} 为模式选择器,空格分隔、顺序无关、全部可选:
- mode(sync | report,默认 sync):sync 会开启一个包含框架变更的 PR;report 仅计算差异并通知,不修改任何内容(dry run)。
- repo=owner/name:覆盖上游源仓库(否则从本实例的 parent 自动解析,回退到 aeonfun/aeon)。
- reset=<sha|fork-point>:在运行前强制将存储的基线设为 <sha>(或与上游的 merge-base)。用于恢复/回填。
空值表示从自动解析出的上游执行 sync。示例:`` · report · repo=aeonfun/aeon · reset=fork-point。
主要流程
- S0 引导并加载状态:确保 memory/topics/aeon-update-state.json 存在,读取基线、待处理冲突等状态。
- S1 解析参数:确定 MODE、REPO_OVERRIDE、RESET。
- S2 解析上游来源:通过 gh repo view 获取自身仓库,取其 parent 作为上游,否则回退 aeonfun/aeon;若上游等于自身则说明本实例即 canon,写入状态并停止。
- S3 建立/重置基线:支持 reset=fork-point 或指定 SHA;首次运行仅锚定水位线;基线等于 HEAD 时视为已同步。
- S4 比较 baseline → HEAD:调用 compare 接口获取提交与文件列表;若基线不是 HEAD 祖先(历史重写或不相关仓库)则停止并提示重新运行;跨仓库比较最多返回 300 个文件,可能被截断。
- S5 划分变更文件:将文件分为 OPERATOR 所有(仅展示、绝不自动写入)与 OWNED(可自动应用)两类;对 pack-registry 单元(catalog/skill-packs.json、docs/community-skill-packs.md、scripts/validate-skill-packs.mjs、scripts/tests/test_validate_skill_packs.sh、.github/workflows/ci-skill-packs.yml)作为整体处理,采用全有或全无策略。
- S6 对每个 OWNED 文件做三方分类:依据文件状态与内容三方比较,判定为 CLEAN-ADD、CLEAN-UPDATE、CLEAN-DELETE、CLEAN-MERGE、SKIP 或 CONFLICT;对已定制的文件尝试 git merge-file 三方合并,仅在真正重叠时才列为冲突。
- S7 在分支上应用 CLEAN 变更(仅 sync 模式):创建 aeon-update/sync-<sha> 分支,写入 CLEAN-ADD/UPDATE/MERGE,git rm CLEAN-DELETE;不触碰冲突与操作者文件。若涉及 skills/**,则重新生成派生目录;执行 pack-registry 一致性校验;对新增技能刷新 eyebrow 完整性锁,并保证 PR 的 CI 为绿色。
适用场景
- 实例需要定期跟进上游框架更新(新技能、修复、文档/工作流变更)。
- 操作者希望先审查再合并,而不是让变更直接进入 main。
- 已对框架文件做过定制,希望后续上游修复能自动合并而不必每次手动处理。
限制
- 仅同步框架层文件;实例自有配置只在 PR 正文中展示,需人工处理。
- 直接冲突(同一行两侧都改)始终交人工处理。
- 跨仓库比较最多返回 300 个文件,可能截断。
- 如果基线不是上游 HEAD 的祖先,需用 reset 重新建立。
- 首次运行默认只锚定水位线,不回填历史;如需回填需以 reset=fork-point 重新运行。
(其余步骤,例如 S8 与 S9 的具体内容,当前资料未提供。)