Lesson 0022 · 综合课 · 横跨全部 22 个已发布 skill · 副作用地图

本地 Markdown 文件全景图:谁创建、何时创建、何时被改

前 21 课把 22 个已发布 skill 逐个拆完了。这一课换一个视角:不按 skill 看,按文件看。 这组 skill 在一个项目仓库里跑起来之后,会在你本地留下一批 Markdown 文件——配置记录、领域词汇表、 架构决策、本地工单、学习存档。每个文件都有明确的生命周期:被谁创建、在什么时机创建、 之后又被谁、在什么时机修改。把这张地图装进脑子,你就拥有了「作者级理解」里最难补的一块: 看到仓库里任何一个 md 文件,能立刻说出它是哪个 skill 的哪一步写的、下一步谁会再碰它。 本课所有结论都来自对 22 个 SKILL.md 及其附属模板原文的逐行核查,文末给出关键出处。

1. 为什么要按文件而不是按 skill 看

回忆 0001 课的系统地图:这组 skill 分成配置层(setup-matt-pocock-skills 跑一次)、 编排层(你手动输入斜杠命令启动的完整流程)和纪律层(被别的 skill 反复调用的基本功)。 那张图回答的是「我该启动哪个 skill」。但日常用久了你会遇到另一类问题,而那张图答不上来:

这些问题的共同点是:它们都问文件的归属和生命周期。MISSION.md 里的目标说得明白—— 要「看见场景就知道每个 skill 会改仓库/tracker 里的什么」。这一课就是把这个能力一次性补齐: 先把全部本地 md 文件按「写它的那一层」分成四类,再逐类讲清创建时机和修改时机, 最后汇成一张可以随时回来查的大表。

一个重要前提 本课讲的是本地仓库里的 Markdown 文件。很多 skill 的主要产物其实不在本地: 当 issue tracker(工单系统,见 CONTEXT.md 的领域语言)配成 GitHub 或 GitLab 时, spec、工单、triage 结论全部落在远端的 issue、评论和标签上,仓库里一个 md 都不会多。 本地文件是「local markdown tracker(本地文件工单模式)」下的产物,加上几个与 tracker 无关的长期文件。 所以几乎每个「创建时机」都要分两种情况说:远端 tracker 和本地 tracker。

2. 总览:四类文件 + 仓库之外

把所有本地 md 文件摆在一起,它们清楚地分成四堆。分类的标准是谁在什么时候写它

文件 写入者 写入频率
配置层 CLAUDE.md/AGENTS.md## Agent skills 区块、docs/agents/issue-tracker.mddocs/agents/domain.mddocs/agents/triage-labels.md setup-matt-pocock-skills 每仓库一次;之后靠手改
领域模型层 CONTEXT.mdCONTEXT-MAP.mddocs/adr/NNNN-*.md domain-modeling(被 grill-with-docs、triage、improve-codebase-architecture、wayfinder 顺带调用) 懒创建,之后持续内联更新
流程产物层(仅本地 tracker) .scratch/<feature>/spec.md.scratch/<feature>/issues/NN-*.md.scratch/<effort>/map.md.out-of-scope/<concept>.md to-specto-ticketswayfindertriage 每个 feature/每张工单一次,之后被追加
教学工作区层 MISSION.mdRESOURCES.mdNOTES.mdGLOSSARY.mdlearning-records/NNNN-*.md teach 学习会话中持续维护

还有第五类不在仓库里:handoff 的交接文档和 improve-codebase-architecture 的 HTML 报告都写进操作系统的临时目录,刻意不落在仓库里—— 因为它们是会话级的消耗品,不该污染版本历史。

把同一件事画成一张「仓库地图」会更直观。下面这棵树按四层配色, 每个文件后面跟着它的创建者和修改者——这就是本课大表的图形版:

配置层(setup 写一次) 领域模型层(懒创建 + 内联更新) 流程产物层(仅本地 tracker) 教学工作区层(teach) 仓库之外(OS 临时目录)
your-repo/
├─ CLAUDE.md └「## Agent skills」区块 · setup 编辑已存在者 · 手改/重跑 setup
├─ docs/agents/
│  ├─ issue-tracker.md · setup 必写 · 手改(如 PR 旗标)
│  ├─ domain.md · setup 必写 · 重跑 setup 才变
│  └─ triage-labels.md · setup 条件写(装了 triage)· 手改
├─ CONTEXT.md · 第一个术语解决时才出生 · domain-modeling 持续内联更新
├─ CONTEXT-MAP.md · 多上下文布局专用 · 没人负责建,需手动补
├─ docs/adr/NNNN-*.md · 三重门槛懒创建 · 推翻不删,新 ADR 标取代
├─ .scratch/<feature>/spec.md · to-spec 写一次即冻结
├─ .scratch/<feature>/issues/NN-*.md · to-tickets 生 · triage 改状态 · prototype 追加指针
├─ .scratch/<effort>/map.md + issues/ · wayfinder 画地图 · 认领/解决/翻案时持续改
├─ .out-of-scope/<concept>.md · triage 拒绝 enhancement 才建 · 翻案时整文件删
├─ MISSION.md · RESOURCES.md · NOTES.md · GLOSSARY.md · teach 懒创建 · 持续维护
├─ learning-records/NNNN-*.md · teach 四类事件触发 · 推翻标 superseded 不删
└─ (仓库外)$TMPDIR/ · handoff 交接文档 · 架构评审 HTML 报告

分层图:0001 系统地图 · 领域语言:本仓库自己的 CONTEXT.md

3. 配置层:setup 写一次的文件

场景:你刚在一个新仓库装好这套 skill,跑 /setup-matt-pocock-skills。 它会问你三个问题——工单系统用哪家、triage 标签叫什么、领域文档放哪—— 然后在第四步把答案落成文件(setup-matt-pocock-skills/SKILL.md:72-112):

3.1 CLAUDE.mdAGENTS.md## Agent skills 区块

这是编辑,不是新建:setup 先探测仓库根目录已有哪个文件—— 有 CLAUDE.md 就编辑它,没有再编辑 AGENTS.md,两个都没有才问你建哪个。 规则写得很死:「绝不在 CLAUDE.md 已存在时新建 AGENTS.md,反之亦然」 (SKILL.md:76-80)。如果文件里已有 ## Agent skills 区块, 就原地更新内容,不会追加重复段落(SKILL.md:82)。 这个区块是给 agent 的导航牌,里面用一句话概括工单系统、标签词汇、领域文档布局, 并各自指向 docs/agents/ 下的详细文件。

3.2 docs/agents/ 下的三份配置记录

3.3 创建之后谁来改

答案干净利落:主要就是你的手。setup 在结尾明确说「之后可以直接编辑 docs/agents/*.md,只有想换工单系统或推倒重来时才需要重跑本 skill」 (SKILL.md:116)。除此之外,所有别的 skill 对这些文件只读: triage 读标签映射、wayfinder 读「Wayfinding operations」一节、to-spec/to-tickets 读发布位置—— 但没有任何 skill 会回头改它们。它们是「人拥有的配置」,不是「skill 拥有的状态」。

setup 不创建什么 一个常见的误解是 setup 会把领域文档也建好。不会。CONTEXT.mdCONTEXT-MAP.mddocs/adr/ 在 setup 阶段一个都不会出现—— setup 只在 domain.md 里记录它们将来住哪。 domain.md 原文说得很白:「domain-modeling skill 在术语或决策 真正被解决时懒创建它们」。下一节讲这套懒创建机制。

出处:setup-matt-pocock-skills/SKILL.md 第 49、59-61、72-116 行 · 详解课:0002

4. 领域模型层:CONTEXT.md、CONTEXT-MAP.md、ADR

场景:你在和 agent 讨论一个功能,对话里第五次出现「materialization cascade(实体化级联)」 这个行话。如果此时 grill-with-docs 在场,它会把术语钉进 CONTEXT.md——而这就是领域模型层文件被写入的典型瞬间。 这一层的写入者只有一个:domain-modeling,但它常被四个上层 skill 顺带调用。

4.1 CONTEXT.md:懒创建 + 内联更新

创建时机:「如果没有 CONTEXT.md,在第一个术语被解决时创建它」 (domain-modeling/SKILL.md:40)。不是会话开始时,不是 setup 时——是第一个 术语真正被钉下来的那一刻。单上下文布局就在仓库根目录;多上下文布局下, 写进 src/<context>/CONTEXT.md(由根目录的 CONTEXT-MAP.md 指路, 格式细节见 domain-modeling/CONTEXT-FORMAT.md:34-60)。

修改时机:每次有新术语被解决,就地更新——「不要攒着批量写」 (SKILL.md:62)。触发这些更新的入口有四个:

4.2 CONTEXT-MAP.md:一个没有明确创建者的文件

这是本组 skill 里少有的文档空白。setup 只在 docs/agents/domain.md 里记录 「这个仓库用多上下文布局」,domain-modeling 只说「如果 CONTEXT-MAP.md 存在就读它」——没有任何一行原文规定谁来创建这张地图本身。 实际推断:选了多上下文布局后,由用户或 domain-modeling 在第二个上下文出现时补建。 如果你在真实仓库里遇到它缺失,手动创建是安全的——格式在 domain-modeling/CONTEXT-FORMAT.md 里。

4.3 docs/adr/NNNN-<slug>.md:三重门槛把关的懒创建

ADR(架构决策记录,记录一个难解释的技术决策)同样懒创建,但门槛高得多: 一个决策必须同时满足三个条件才配拥有一个文件——难逆转、出人意料、 有真实取舍(domain-modeling/SKILL.md:67-73)。文件名按序号递增 (NNNN-<slug>.md,模板见 ADR-FORMAT.md)。 多上下文仓库里,系统级 ADR 放根目录 docs/adr/,上下文专属 ADR 放 src/<context>/docs/adr/SKILL.md:29-37)。

修改时机:ADR 文件本身基本不可变,但它有两个额外的创建入口和一个「软修改」机制——

出处:domain-modeling/SKILL.md 第 29-73 行 · 详解课:0004 domain-modeling0014 triage0017 improve-codebase-architecture

5. 流程产物层:.scratch/ 本地工单

场景:你 setup 时选了「本地文件工单」。此后每一次「发布到工单系统」的动作, 实际都变成「在 .scratch/ 下写一个 md 文件」。这套约定集中定义在 setup-matt-pocock-skills/issue-tracker-local.md——它是本节最重要的一手材料, 四个 skill 的写入行为都从它派生:

5.1 spec.md:to-spec 写一次,之后没人改

创建时机to-spec 第三步「按模板写好 spec,发布到工单系统」 (to-spec/SKILL.md:19),本地模式下即 .scratch/<feature-slug>/spec.md, 同时写入 triage 状态行 Status: ready-for-agent修改时机没有。spec 是写一次就冻结的快照—— 之后的 to-tickets、code-review、implement 都只读它。远端 tracker 模式下, 它变成一个 GitHub/GitLab issue,本地什么都不写。

5.2 issues/NN-*.md:to-tickets 创建,prototype 和 triage 追加

创建时机to-tickets 第五步,一张工单一个文件,按依赖顺序从 01 编号, 使用本地工单模板(标题、Blocked by:Status: ready-for-agent、 验收标准勾选项,to-tickets/SKILL.md:62-82)。注意它明确不碰父级: 「不要关闭或修改任何父 issue」(第 67 行)。

修改时机,按时间顺序:

5.3 wayfinder 的地图:.scratch/<effort>/map.md + 决策工单

wayfinder 在远端 tracker 下用 issue + 子 issue 表达一切;本地模式下才落文件, 且它有一条独立规则:「如果没有提供 tracker,默认用本地文件工单」(wayfinder/SKILL.md:25)。 它写两种文件:

修改时机(本地模式的操作全部定义在 issue-tracker-local.md:23-30):

出处:issue-tracker-local.md 全文 · 详解课:0009 to-spec0010 to-tickets0016 wayfinder

6. triage 的 .out-of-scope/ 与工单状态

triage 在远端 tracker 下几乎全落在远端(评论、标签、关闭);本地仓库里它有一个专属文件和一个共享行为:

6.1 .out-of-scope/<concept>.md:拒绝增强提案时的档案

创建时机非常窄:一个增强提案(enhancement,不是 bug)被判定为 wontfix 时(triage/SKILL.md:85)。而且「因为已经实现了所以 wontfix」 的情况不写triage/OUT-OF-SCOPE.md:86-88)—— 这个文件的用途是让未来的 agent 知道「这个方向我们已经拒绝过」,已实现的功能不需要这个档案。 一个概念一个文件,kebab-case 命名。

修改时机:同一个概念再次被提出时,往已有文件的「Prior requests(历史请求)」 列表里追加一行(OUT-OF-SCOPE.md:94);维护者改变主意、重新考虑某个拒绝时, 整个文件被删除OUT-OF-SCOPE.md:99-105)。

6.2 本地工单上的 triage 痕迹

第 5.2 节已说过:本地模式下 triage 的「应用角色」和「发简报」都落在工单文件里—— 改 Status: 行、往 ## Comments 追加。 所以本地模式下一份工单文件的一生是这样的(注意最后一棒是只读, implement 不会回头写它):

① to-tickets 创建 一单一文件,从 01 编号;顶部写入 Status: ready-for-agent,正文是验收标准勾选项
② triage 分诊 改顶部 Status: 行应用角色;往 ## Comments 追加 agent brief
③ prototype 追加 若做了原型验证,往 ## Comments 追加原型分支的上下文指针和结论
④ implement 只读 按工单实现,但不更新 Status——本地工单没有「done」这个终态(见坑 11.2)

出处:triage/OUT-OF-SCOPE.md 第 17、86-105 行 · 详解课:0014 triage

7. 一次性产物:research、handoff、prototype

这三个 skill 都写 md,但写的是「写完就不再碰」的一次性产物,只是落点完全不同:

Skill 文件 创建时机 修改时机
research 一份调研结论 md,路径不固定——「存在仓库已有同类笔记的地方,没有惯例就放在合理位置并说明」(research/SKILL.md:11-12),本地 tracker 仓库里通常自然落在 .scratch/ 每次调研结束,由后台 agent 写出,每个论断附出处 无——写完即冻结的快照
handoff 一份交接文档 md,写在操作系统临时目录——「存到用户操作系统的临时目录,不是当前工作区」(handoff/SKILL.md:8),文件名由 agent 自定 每次你输入 /handoff 时(纯 user-invoked) 无——它就是给下一个会话用的消耗品,刻意不污染仓库
prototype 可选的一份小 README.md,挨着一次性原型代码,说明「这个原型回答什么问题」(prototype/LOGIC.md:18);UI 分支更倾向写在文件顶部注释里 搭原型时(LOGIC 分支且需要说明运行方式时) 无——原型本身是「用完即删」的,README 随它一起消失

三者对比着记:research 落仓库但不归任何目录惯例管;handoff 刻意落仓库外; prototype 的 README 跟着一次性代码生死。诊断 bug 时 diagnosing-bugs 也会产生大量东西,但全是脚本、日志和回归测试代码, 不是 md——它把复盘假设写进的是提交信息或 PR 描述(diagnosing-bugs/SKILL.md:132)。

详解课:0006 handoff0007 research0008 prototype0015 diagnosing-bugs

8. 教学工作区:teach 维护的 md

这层你最熟悉——本课程自己就是产物。teach当前目录当作有状态的 教学工作区,维护五份 md(0021 课有完整讲解,这里只列生命周期):

文件 创建时机 修改时机
MISSION.md 首次会话,问清「你为什么想学这个」之后 学习目标发生转移时——先征得你同意,同时配一条学习记录
RESOURCES.md 课程早期,还没积累起可信资源清单时优先建 持续:补新资源、记 ## Gaps(覆盖缺口)、删掉坏来源
NOTES.md 你第一次表达教学偏好时 持续:每有新偏好或工作笔记就记
GLOSSARY.md 主题发展出自己的术语体系时;一个术语你真正懂了才收录 就地更新,理解加深就修订;建好后每节课都必须遵守它
learning-records/NNNN-*.md 懒创建目录,出现四类事件之一时写一条:你展示出了真实理解、你透露了已有知识、一个误解被纠正、目标发生转移 原则不可变;被后来的记录推翻时标注 Status: superseded by 而不是删除

注意一个和工程 skill 同构的设计:懒创建 + 序号文件 + 推翻不删除—— learning-records 之于 teach,就是 ADR 之于 domain-modeling。这不是巧合, SKILL.md 自己就说学习记录「大致相当于软件开发里的架构决策记录」。

详解课:0021 teach · 格式源:LEARNING-RECORD-FORMAT.md

9. 完全不写 md 的十个 skill

知道谁不写和知道谁写一样重要——当你在仓库里找不到某个文件时, 这张「沉默名单」能帮你排除一半嫌疑。以下 skill 在消费仓库里一个 md 都不写:

Skill 为什么不写 / 它的产物在哪
grill-me 全部实现是一行「跑一场 grilling」,纯对话,无文件
grilling 纯访谈循环,产物是「对齐了的理解」,留在对话里
ask-matt 纯路由器,只描述别的 skill 的产物,自己零写入
implement 只写源代码和测试代码;工单文件它只读。本地模式下它连工单的 Status 都不更新——这个状态转换属于 wayfinder 的认领/解决流程
tdd 只写测试与被测代码;读 CONTEXT.md 对齐测试命名
diagnosing-bugs 产物是复现脚本、调试日志、回归测试代码;复盘写进提交信息
code-review 双轴评审报告只在对话里呈现,不落盘
resolving-merge-conflicts 只改冲突中的文件(其中可能碰巧有 md,但那是合并带的,不是 skill 的指令)
codebase-design 纯词汇与流程纪律;design-it-twice 的设计稿只在对话里
writing-great-skills 纯参考资料,SKILL.md 自己声明「This skill is all reference.」

反过来,会写 md 的 skill 一共十二个:setup-matt-pocock-skills、domain-modeling、 grill-with-docs(借道 domain-modeling)、triage、improve-codebase-architecture、 wayfinder、to-spec、to-tickets、research、handoff、prototype、teach。 12 写 + 10 不写 = 22,与已发布集合对平。

10. 完整地图:文件 × 创建 × 修改

全课浓缩成一张表。打印出来贴在手边的就是它(速查表版见 reference/local-md-files-map.html):

文件 创建者 × 创建时机 修改者 × 修改时机 主要读者
CLAUDE.md/AGENTS.md## Agent skills 区块 setup 第四步,编辑已存在的那个文件(都没有才问建哪个);已有区块则原地更新 重跑 setup(换工单系统时);用户随时手改 每次会话的 agent 入口
docs/agents/issue-tracker.md setup 第四步,必写,按所选举证复制种子模板 用户手改(如打开 PR 旗标);重跑 setup triage、wayfinder、to-spec、to-tickets、code-review
docs/agents/domain.md setup 第四步,必写,记录单/多上下文布局 重跑 setup domain-modeling 及所有读领域文档的 skill
docs/agents/triage-labels.md setup 第四步,仅当安装了 triage 用户手改标签映射 triage
CONTEXT.md(根或 src/<ctx>/ domain-modeling 懒创建:第一个术语被解决时 domain-modeling 内联更新:每个术语落地即改(入口含 grill-with-docs、triage 第四步、improve-codebase-architecture、wayfinder);用户手改安全 tdd、diagnosing-bugs、to-spec、to-tickets、triage 等几乎全员
CONTEXT-MAP.md 无明确创建者(文档空白);多上下文布局下推断由用户或 domain-modeling 补建 新增上下文时更新指针 domain-modeling
docs/adr/NNNN-*.md domain-modeling 懒创建:决策同时满足难逆转+出人意料+有取舍时;improve-codebase-architecture 在你拒绝候选且理由有分量时提议创建 不修改旧文件;被推翻时新写 ADR 并在 Status 里标注取代 全员(做决策前查历史)
.scratch/<feature>/spec.md(仅本地 tracker) to-spec 第三步「发布到工单系统」时,含 Status: ready-for-agent 无——写一次即冻结 to-tickets、implement、code-review
.scratch/<feature>/issues/NN-*.md(仅本地 tracker) to-tickets 第五步,一单一文件,从 01 按依赖顺序编号 triage 改 Status: 行、往 ## Comments 追加简报;prototype 追加原型分支的上下文指针 implement、code-review、resolving-merge-conflicts
.scratch/<effort>/map.md(仅本地 tracker) wayfinder「画地图」第三步 wayfinder:每张工单解决后往「已做决定」追加指针;雾散、越界、决定被推翻时同步改 wayfinder 后续会话
.scratch/<effort>/issues/NN-*.md(仅本地 tracker) wayfinder 画地图时一批 + 探路中新问题浮现时逐张新增 wayfinder:认领改 Status: claimed,解决写 ## Answer 并改 resolved wayfinder 后续会话
.out-of-scope/<concept>.md triage:增强提案被判 wontfix 时(已实现而关闭的不写) triage:同概念再被提出时追加历史请求行;维护者翻案时整文件删除 triage 未来的自己
research 调研结论 md(路径随仓库惯例) research 的后台 agent,调研结束时 委托调研的人
handoff 交接文档(OS 临时目录) handoff,每次手动调用时 无——下一个会话的消耗品 下一个会话的 agent
prototype 的 README.md(可选,挨原型代码) prototype 的 LOGIC 分支需要说明运行方式时 无——随原型一起删除 用户
MISSION.md / RESOURCES.md / NOTES.md / GLOSSARY.md / learning-records/NNNN-*.md teach:首次会话 / 早期 / 首个偏好 / 首个术语 / 四类学习事件(均懒创建) teach:目标转移(需你同意)/ 持续 / 持续 / 就地修订 / 推翻时标 superseded 不删除 teach 自己(算最近发展区)

11. 三个容易踩的坑

11.1 CONTEXT-MAP.md 没有 owner

第 4.2 节说过:setup 只记录布局,domain-modeling 只读地图,没人负责建地图。 选了多上下文布局后记得手动补建这个文件,格式照 CONTEXT-FORMAT.md。 这也是「行为不对时该拧哪段文本」的实例——若想让 setup 顺手建它, 改的是 setup-matt-pocock-skills/SKILL.md 第四步的写入清单。

11.2 本地工单的 Status: 没人写「done」

本地模式下,工单从 to-tickets 创建起就是 Status: ready-for-agent, 而 implement 实现完不会更新这行状态—— 认领(claimed)和解决(resolved)的语义是 wayfinder 那套决策工单流程的, 普通实现工单在流程文本里没有对应的状态推进。如果你在意本地工单的状态闭环, 要么手改,要么在 implement/SKILL.md 里补一段「收尾时更新 Status」的指令。

11.3 docs/agents/*.md 是手改区,不是状态区

想调行为——换 tracker、改标签映射、打开 PR 旗标——直接编辑 docs/agents/ 下对应文件即可,不要重跑 setup。setup 自己明说重跑只用于换工单系统或推倒重来。 反过来,CONTEXT.md 和 ADR 是 skill 的内联更新区,你手改它们也安全, 但要预期 skill 会持续往里面写——它们更像「人机共写的活文档」。

12. 文件侦探:场景练手

大表查起来容易,难的是现场判断。下面五个「案情」都是真实使用中会遇到的场景—— 你在仓库里发现某个文件(或发现某个文件不在),能立刻说出它是谁写的、 什么时候写的吗?点一个选项,马上见分晓;答错可以重试,答对会展开解析。 先凭第 10 节大表的记忆作答,别往上翻。

案情 1 你在 .scratch/search-rework/issues/02-index-strategy.md 顶部看到一行 Status: claimed。这行状态是谁、在什么时候写上去的?

claimed 是 wayfinder 探路流程的专属语义:开始处理某张决策工单时, 先把它的 Status: 改成 claimed,解决后再写 ## Answer 并改 resolvedissue-tracker-local.md:23-30)。 to-tickets 创建的初始状态是 ready-for-agent;triage 改的是五个 triage role (needs-triage 等),没有 claimed 这个角色。 顺带:这个 Status 行出现在 wayfinder 的 .scratch/<effort>/issues/ 下, 正好说明这是一张决策工单而不是实现工单。

案情 2 同事说他刚在新仓库跑完 /setup-matt-pocock-skills,但根目录下怎么也找不到 CONTEXT.md,怀疑 setup 坏了。真相是?

setup 只在 docs/agents/domain.md 里记录 CONTEXT.md 将来住哪, 从不创建文件本身。CONTEXT.md 的出生时刻是「第一个术语被解决时」—— 由 domain-modeling(或借道它的 grill-with-docs、triage 等)懒创建 (domain-modeling/SKILL.md:40)。所以新仓库没有它完全正常, 重跑 setup 也不会变出来。

案情 3 仓库里出现一份 .out-of-scope/dark-mode.md,里面还有一列 「Prior requests」。这份文件是因什么而生的?

.out-of-scope/<concept>.md 只有一个出生条件:增强提案 被 triage 判 wontfix(bug 不算、「已实现所以关闭」也不算)。 同概念再被提出时 triage 往「Prior requests」追加一行;维护者翻案时整文件删除 (triage/OUT-OF-SCOPE.md:86-105)。wayfinder 的越界记在 map.md 的「Out of scope」一节;架构评审的拒绝记成 ADR——三处别混。

案情 4 你发现 docs/agents/issue-tracker.md 里的工单系统选错了, 想从 GitHub 换成本地文件模式。正确动作是?

「换工单系统」正是 setup 自己点名的重跑理由(SKILL.md:116)—— 因为本地模式和 GitHub 模式的 issue-tracker.md 内容来自不同种子模板, 手改描述改不出本地模式需要的「Wayfinding operations」等整段约定。 而调小行为(比如打开 PR 旗标、改标签映射)才是直接手改文件的场景: docs/agents/ 是手改区,但换底层 tracker 属于结构性变更。

案情 5 你在操作系统的临时目录里发现一份两周前的 handoff 文档, 内容早已过时。该怎么理解它的存在?

handoff 文档是「写给下一个会话的消耗品」:每次调用写一份新的到 OS 临时目录, 刻意不进仓库(handoff/SKILL.md:8),写完后没有任何 skill 会再碰它—— 没有更新机制,也没有人去读旧档。过期了删掉即可,和仓库状态无关。 teach 的状态文件(MISSION.md 等)在本仓库工作区里,不在临时目录。

13. 检索练习

先别往回翻表,凭记忆答。选项字数刻意对齐,不会从长度泄题。

自测(立即反馈)

1. 在一个全新仓库跑完 setup 后,哪个文件还不会出现?
2. 一个增强提案被 triage 判为 wontfix,会写什么?
3. 本地 tracker 下,to-tickets 创建的工单文件之后会被谁追加?
4. handoff 的交接文档默认写在哪里?
5. 关于 ADR 的创建,哪种说法符合原文?

14. 结课:速查表、一手材料

本课的压缩版已经放进 reference/local-md-files-map.html—— 一张打印友好的一页表,以后在仓库里遇到陌生 md 文件时翻它。 建议配对的复习路径:先回 0001 系统地图 把四层结构再过一遍,然后随便挑一个你自己的仓库,对着大表找出里面已有哪些文件、缺哪些。

推荐一手材料 本节最值得自己通读一遍的原文是 skills/engineering/setup-matt-pocock-skills/issue-tracker-local.md—— 全文不到一屏,却是 .scratch/ 下所有文件格式的唯一权威定义, to-spec、to-tickets、triage、wayfinder 四个 skill 的本地写入行为都从它派生。 其次是 setup 的 SKILL.md 第四步(第 72-116 行),配置层文件的写入规则全在那里。
有疑问随时问你的 agent 老师。好问题举例:「我的仓库选了 GitHub tracker,那这套 .scratch/ 约定对我完全无效吗?」「如果我想让 implement 收尾时更新本地工单状态,该改哪个文件的哪一段?」 「ADR 和 learning-records 的『推翻不删除』机制具体怎么标注?」——每一个都能引出对原文的新一轮精读。