SuperAPI AI 工具集

maintain-context

写作与研究

查看项目

更新于 11-05 17:18

技能介绍

maintain-context 的核心用途,是在对话进行中增量维护两个项目工件:CONTEXT.md(项目的领域术语表)和 docs/adr/(架构决策记录)。两者只有在保持诚实、狭窄、稀少的前提下才会产生复利价值。

职责范围方面,该技能独占 docs/adr/ 目录,并负责 CONTEXT.md 术语表文件。docs/adr/ 是从 docs-agent 更宽泛的 docs/ 所有权中明确划出的例外,否则 docs/ 会静默吞掉 ADR 子树;docs-agent 可以读取 docs/adr/ 获取上下文,但从不写入。权威映射见编排器中的 references/file-ownership.md。

ADR 的三条件门槛:写 ADR 之前,以下三条必须同时成立,缺一即跳过——下一条 ADR 不会因为这一条未记录而成为更差的决策。第一,难以逆转:回滚需要真实的时间或金钱成本,例如 schema 迁移、公共 API 形态、供应商锁定、合同承诺;可逆的默认值(开关、CSS 选择、文件夹命名)不符合。第二,脱离上下文会令人意外:新贡献者无法从眼前代码推导出该选择,会走向显而易见但错误的答案;如果代码已自解释,则不写 ADR。第三,存在真实取舍:存在可行替代方案,且选择此项关闭了部分门;如果替代方案毫无意义(如“我们本可以不用 HTTPS”),那只是事实而非决策。理由在于:满是常规选择的 ADR 文件夹读起来像噪音,人们会停止打开它,稀缺性正是关键。

CONTEXT.md 是术语表,不是规格说明、草稿本或实现笔记。每个条目包含:术语(项目使用的规范名称)、其在本项目词汇中的含义、以及一行 Avoid 列出禁用同义词——日常语义相同但在此处与其他概念冲突的词。如果条目不是在消歧某个术语,就不应放入 CONTEXT.md,而应放到 README 或设计文档中。

内联更新模式:术语一旦确定就立即记录,禁止把术语表更新批量推迟到会话结束。当用户说“我们叫它 subscribers,不叫 users”时,立刻打开 CONTEXT.md 写入条目,并与用户确认 Avoid 列表。五秒钟的更新比三十分钟但丢失一半细节的会后整理更有价值。

Avoid 别名列表模式:每个术语都列出禁用同义词并附一句原因,原因让规则站得住脚。示例:Subscriber 定义为 subscription_status = active 的客户记录,可使用付费功能;Avoid:user(过于笼统)、member(v1 遗留术语)、client(在营销中另有所指)。完整结构与三个示例见 references/context-format.md。

与代码交叉核对:当用户陈述行为(如“Subscriber 有 30 天试用期”)时,先用 Grep 查找相关常量或模型字段核实,再记录。若代码不一致,停下来询问哪一方有误;不要记录与代码库矛盾的术语条目或 ADR,否则本应消歧的工件反而会成为混淆源。

项目布局:写入或读取任何术语条目或 ADR 之前,先检查仓库是否有 docs/agents/domain-docs.md(由 /setup-project-skills 生成),它声明单上下文还是多上下文布局。存在时按其声明路径:单上下文将 CONTEXT.md 放在仓库根目录、ADR 放在 docs/adr/;多上下文 monorepo 放在 apps/<app>/CONTEXT.md 和 apps/<app>/docs/adr/,不要自行发明路径。缺失时默认单上下文,并提示:“This repo isn't configured for Skill-Madness yet. Run /setup-project-skills to make the layout choice durable; I'll use single-context defaults for this entry.” 不要静默假设,错误的默认值会把条目写进错误位置。

延迟创建文件:在有真实条目之前,不要创建 CONTEXT.md 或 docs/adr/。若触发时文件不存在,询问一次是否现在创建,取得明确同意;空脚手架会传递“此项目有文档”的误导信号。

ADR 工作流:三个条件全部命中时,先口头提议(说明难以逆转之处、意外之处、真实取舍),征得同意后按 references/adr-format.md 起草,保存为 docs/adr/NNNN-title.md 并使用下一个顺序编号;决策已生效时状态为 Accepted,仍在讨论中为 Proposed。不确定时可参考 references/three-condition-gate.md,其中走查了五个场景并给出正确判断。

该技能可与 grill-me(揭示应被捕获的决策和术语)以及 architecture-rescue(加入陌生代码库时,恢复的理解落到此处)配合使用。