@fxri/toolkit 1.12.3 → 1.12.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  # 规范载体规范(conventions)
2
2
 
3
- > 面向多人 + AI 协作,任何语言项目可直接使用,仅依赖文件读写能力。本文件为 SKILL.md 的配套规范,定义 `.tasks/conventions/` 的目录结构、归属分类、读写判定、内容修订与存量迁移;任务文件本身的规范见 `task-spec.md`。
3
+ > 面向多人 + AI 协作,任何语言项目可直接使用,仅依赖文件读写能力。本文件为 SKILL.md 的配套规范,定义 `.tasks/conventions/` 的目录结构、归属分类、读写判定与内容修订;存量迁移见 `conventions-migration.md`,文风与模板见 `conventions-templates.md`;任务文件本身的规范见 `task-spec.md`。
4
4
 
5
5
  ## 1. 载体结构
6
6
 
@@ -46,7 +46,7 @@
46
46
 
47
47
  > **元原则**:载体新增的任何字段、文件、表格,须能证明它**不进常驻读面**,方允许引入——常驻面每多一列、每多一行,都由全体任务平摊成本,而归档面只在小概率的审计 / 恢复场景被读到。
48
48
 
49
- 载体可另配套**入口壳(一阶触发面)**:在**已存在的**项目级技能目录(`.agents/skills/`、`.trae/skills/`、`.trae-cn/skills/`、`.cursor/skills/`、`.claude/skills/`;多 agent 混用团队多个并存时**每处各写一份**、互不覆盖,一个都不存在时回落 `.agents/skills/`)下生成 `toolkit-conventions/SKILL.md`,目录名与 frontmatter `name` 同名(Agent Skills 标准要求)。壳只作入口、不承载条文,正文指回任务区 `conventions/index.md`;由 `toolkit init` 幂等生成(可安全删除,重跑补回;已存在壳按标记版本分流——标记不旧于当前版本保持不变,落后或无标记就地更新为当前版本),只在已有目录内落盘、不为使用者未安装的 agent 凭空建目录,本包源仓库自身不生成。壳标记版本**独立于载体版本**演进——当前为 `v2`,机制引入时即从 `v2` 起,从未有过 `v1` 壳(区别于载体「无标记即 v1」)。壳首部为 frontmatter,故其形态标记 `<!-- toolkit-conventions-entry: v2 -->` 退居其后、须全文件扫描(区别于载体标记只看首行);壳标记与当前 toolkit 不一致、或被 `.gitignore` 覆盖时,`toolkit conventions status` 与 `toolkit tasks check` 软告警——标记不一致可重跑 `toolkit init` 就地更新为当前版本;同类告警在多落点并存时**合并为一条**并内联全部落点路径(仓库根相对路径),不按壳逐条重复。体检只扫上述 5 个内置候选目录(`findEntryShells`):用户手工把壳拷到未收录目录(如 `.windsurf/skills`)不参与体检。⚠️ 同一批候选目录还承载**项目面技能薄壳**(`toolkit skills install --scope project` 在真源 `<仓库根>/.agents/skills/` 之外的其他已存在候选目录生成 `fxri-*` 薄壳),与 `toolkit-conventions/` 入口壳**不同名并存、互不覆盖**;两者机制独立——入口壳由 `toolkit init` 生成、技能薄壳由技能分发生成。
49
+ 载体可另配套**入口壳(一阶触发面)**:在**已存在的**项目级技能目录(`.agents/skills/`、`.trae/skills/`、`.claude/skills/`、`agent/skills/`(eve)、`.augment/skills/`、`.codebuddy/skills/`、`.continue/skills/`、`.crush/skills/`、`.devin/skills/`、`.goose/skills/`、`.grok/skills/`、`.hermes/skills/`、`.iflow/skills/`、`.junie/skills/`、`.kiro/skills/`、`.openhands/skills/`、`.qwen/skills/`、`.roo/skills/`、`.windsurf/skills/` 共 19 个内置候选;多 agent 混用团队多个并存时**每处各写一份**、互不覆盖,一个都不存在时回落 `.agents/skills/`)下生成 `toolkit-conventions/SKILL.md`,目录名与 frontmatter `name` 同名(Agent Skills 标准要求)。壳只作入口、不承载条文,正文指回任务区 `conventions/index.md`;由 `toolkit init` 幂等生成(可安全删除,重跑补回;已存在壳按标记版本分流——标记不旧于当前版本保持不变,落后或无标记就地更新为当前版本),只在已有目录内落盘、不为使用者未安装的 agent 凭空建目录,本包源仓库自身不生成。壳标记版本**独立于载体版本**演进——当前为 `v2`,机制引入时即从 `v2` 起,从未有过 `v1` 壳(区别于载体「无标记即 v1」)。壳首部为 frontmatter,故其形态标记 `<!-- toolkit-conventions-entry: v2 -->` 退居其后、须全文件扫描(区别于载体标记只看首行);壳标记与当前 toolkit 不一致、或被 `.gitignore` 覆盖时,`toolkit conventions status` 与 `toolkit tasks check` 软告警——标记不一致可重跑 `toolkit init` 就地更新为当前版本;同类告警在多落点并存时**合并为一条**并内联全部落点路径(仓库根相对路径),不按壳逐条重复。体检只扫上述 19 个内置候选目录(`findEntryShells`):用户手工把壳拷到未收录目录(如 `.bob/skills`)不参与体检。⚠️ 同一批候选目录还承载**项目面技能薄壳**(`toolkit skills install --scope project` 在真源 `<仓库根>/.agents/skills/` 之外的其他已存在候选目录生成 `fxri-*` 薄壳),与 `toolkit-conventions/` 入口壳**不同名并存、互不覆盖**;两者机制独立——入口壳由 `toolkit init` 生成、技能薄壳由技能分发生成。
50
50
 
51
51
  规范触发面共三层,**任一层可用即可触达**:① 全局技能 `fxri-plan-to-task`(随包分发到各 agent 全局技能目录,其工作流第 1 步即要求读 `conventions/index.md`)——**不依赖项目内任何文件、恒在兜底**;② 上述项目级入口壳(用户不主动发问也能被 agent 读到);③ `AGENTS.md` 指针块(仅在文件已存在时幂等追加,不存在不新建,跳过时提示仍有第 1 层可触达)。三层同时缺席的唯一情形:装包后未跑 `toolkit skills install`(或 agent 不加载全局技能),且项目既无 `AGENTS.md` 又未跑 `toolkit init`——`init` 检测到尚未安装全局技能时会在「下一步」中补一行 `toolkit skills install` 指引(已安装则不重复提示),把这一情形收敛为「用户忽略了 `init` 的提示」。
52
52
 
@@ -91,14 +91,14 @@
91
91
 
92
92
  - **列集合固定为五列**:`ID | 规则 | 当前语义 | 归属 | 单一事实源`,列名与次序均不得增减或调换——列集合即读接口,漂移会破坏机械读写;`toolkit tasks check` / `toolkit conventions status` 检出列集合偏离(列名 / 次序 / 列数不符)并软告警(只报不改,须人工确认后按本规范归一)
93
93
  - **ID**:`C-<n>`(`C` 表 conventions),**去补零、不带端前缀、只追加不重排不回收**;插入或重排不漂移,废弃条目不回收其 ID(容量不是问题,去补零取的是可读性)
94
- - **引用**:载体内部引用一律行内代码包裹(如 `` `C-17` ``),便于机械匹配;v1 遗留的裸「第 N 条」在升级时改写(见 §10.2)
94
+ - **引用**:载体内部引用一律行内代码包裹(如 `` `C-17` ``),便于机械匹配;v1 遗留的裸「第 N 条」在升级时改写(见 `conventions-migration.md` §10.2)
95
95
  - **归属**:取值必须对应一个实际承接处——`common`、端清单中的端名、或载体目录下存在的分类标签分册名,否则为悬空指针(需修正)
96
96
  - **单一事实源**:条文正文去哪看。已指向项目现有规则层(AGENTS / 全局规则 / skills)时填指向;条文就在本载体分册内时填分册名(如 `common.md`)
97
97
  - **不含「状态」「确立来源任务」两列**(区别于 v2):Z1 只收录活跃条目,故「状态」恒为活跃、不必占列;「确立来源任务」属留痕信息、交 git 历史承载,退休条目则记于 `retired.md`
98
98
 
99
99
  ### 2.3 用法说明
100
100
 
101
- 写明本项目采用哪种形态、读写判定要点、以及规则层源头变更时的同步纪律。骨架与写法见 §13(T2);通用部分收敛为一句并指向本规范,不逐条复述规则正文。
101
+ 写明本项目采用哪种形态、读写判定要点、以及规则层源头变更时的同步纪律。骨架与写法见 `conventions-templates.md`(T2);通用部分收敛为一句并指向本规范,不逐条复述规则正文。
102
102
 
103
103
  ## 3. 分册与留痕文件
104
104
 
@@ -114,7 +114,7 @@
114
114
  (条文全文)
115
115
  ```
116
116
 
117
- 端分册同构,首部 `# {端名} 规范`、`> 归属:{端名}`;分类标签分册同构,首部 `# {标签} 规范`。小节标题用稳定 ID(`## C-<n>. {规则名}`),与 `index.md` 索引一致,便于互引。条文正文的子项与次序见 §13(T4);分册内不写「确立来源」行——来源已由 `index.md` 索引列与 `history.md` 承载(见 §13)。
117
+ 端分册同构,首部 `# {端名} 规范`、`> 归属:{端名}`;分类标签分册同构,首部 `# {标签} 规范`。小节标题用稳定 ID(`## C-<n>. {规则名}`),与 `index.md` 索引一致,便于互引。条文正文的子项与次序见 `conventions-templates.md`(T4);分册内不写「确立来源」行——来源已由 `index.md` 索引列与 `history.md` 承载(见 `conventions-templates.md`)。
118
118
 
119
119
  ### 3.2 history.md 结构
120
120
 
@@ -131,7 +131,7 @@
131
131
  ```
132
132
 
133
133
  - **首列记为行内代码包裹的裸 ID `C-<n>`,不写规则名**(规范名以 `index.md` 索引表为准;规则改名等沿革信息作前置括注记入「修订内容」列,如「(原名「X」)」)。此为硬性要求:`toolkit tasks check` 与 `toolkit conventions status` 检出非 ID 首列并软告警(只报不改——历史行只追加不改旧行的元规则下,补齐须人工确认)
134
- - **「修订内容」列只记该条自身语义**:新立条目直接写其语义;语义变更写「旧语义」→「新语义」(箭头两侧文本加全角引号)。两条禁令——不得写自指套话(如「(本次起入表)」「新立条目:」,表内每行本就是入表记录、自指零信息量);不得复述 `index.md` 索引列信息(如「;条文全文落 `common.md`」与索引「单一事实源」列重复,违反 §1.1 不变量 I4)。规范名沿革作前置括注(如「(原名「增量判别」)」)。**措辞归一例外**:措辞层归一(表格形态归一见 §9,规范词归一见 §13 T5)属非语义变更,可原地改写旧行、不入 `history.md` 留痕行。`toolkit tasks check` / `toolkit conventions status` 检出禁用语料并软告警(只报不改,改写须人工确认)
134
+ - **「修订内容」列只记该条自身语义**:新立条目直接写其语义;语义变更写「旧语义」→「新语义」(箭头两侧文本加全角引号)。两条禁令——不得写自指套话(如「(本次起入表)」「新立条目:」,表内每行本就是入表记录、自指零信息量);不得复述 `index.md` 索引列信息(如「;条文全文落 `common.md`」与索引「单一事实源」列重复,违反 §1.1 不变量 I4)。规范名沿革作前置括注(如「(原名「增量判别」)」)。**措辞归一例外**:措辞层归一(表格形态归一见 §9,规范词归一见 `conventions-templates.md` T5)属非语义变更,可原地改写旧行、不入 `history.md` 留痕行。`toolkit tasks check` / `toolkit conventions status` 检出禁用语料并软告警(只报不改,改写须人工确认)
135
135
  - **表头固定**:须恰为 `ID | 修订内容 | 修订来源任务` 三列,逐格一致(含列名与次序);`toolkit tasks check` / `toolkit conventions status` 检出表头偏离并软告警
136
136
  - **表语义边界写死**:载体结构升级(如 v1 / v2 → v3)、入口壳生成 / 删除、条目退休都不入表——表只记**规范语义**变更
137
137
 
@@ -216,65 +216,11 @@
216
216
 
217
217
  ## 10. 存量迁移
218
218
 
219
- ### 10.1 旧单文件 → 目录形态(v0 → v1)
220
-
221
- 触发:`toolkit tasks check` 报旧 `conventions.md` 存在;或用户直接要求迁移。
222
-
223
- **三段式**(可中断,中途停下不丢内容):
224
-
225
- 1. **机器搬骨架**:建 `conventions/`,旧文件**整体**搬为 `index.md`(原文一字不丢),删除旧文件——此刻 `index.md` 是原文快照,功能上与旧文件等价
226
- 2. **AI 提归属建议**:读原有条目,逐条给出「`common` / 某端」建议与理由(旧文件无端信息,语义分流无法机械完成),形成待确认清单
227
- 3. **用户逐条确认**:确认后写索引行 + 把条文全文拆入对应分册;**未确认的条目保持原样留在 `index.md`**,不强推
228
-
229
- 补充要求:
230
-
231
- - 迁移与内容重排分开做:先完成形态迁移(结构到位),再谈条目归属调整,避免一次变更混合两种风险
232
- - 端清单在迁移时同步建立:从项目已有 `scope` 取值与实际子项目构成归纳,经用户确认写入端清单节
233
- - 旧文件已不存在时不重复迁移
234
-
235
- ### 10.2 v1 → v2 结构升级
236
-
237
- 触发:`toolkit conventions status` 报「需升级」;`toolkit tasks check` 报形态告警(标为 v2 缺 `history.md` 或索引表首列非 `ID`;有 `history.md` 但首列仍是 `#`);或用户直接要求升级。
238
-
239
- 优先用 `toolkit conventions upgrade`(纯机械,可 `--dry-run` 预演),动作序:
240
-
241
- 1. **发 ID**:按现有条序 `1..n` 发 `C-1..C-n`,索引表首列由 `#` 改 `ID`
242
- 2. **切 `history.md`**:原 `index.md`「演进记录」节整表平移为独立 `history.md`(表头首格归一为 `ID`),`index.md` 撤该节;标题归一 `# 项目协作规范索引`,首行补形态标记(版本段写 `v2`)
243
- 3. **改内部引用**:裸「第 N 条」(仅 N ≤ 索引表最大序号者)改写为 `` `C-<n>` ``;带外部文档限定词前缀的引用(如 `AGENTS.md` 质量门第 5 条、`SPEC.md` 协作模型第 3 条、`task-spec.md` 第 6 节)一律不动;改写清单进报告
244
- 4. **分册小节归一**:分册小节标题改 `## C-<n>. {规则名}`
245
-
246
- 补充要求:
247
-
248
- - **ID 映射不落盘**:映射由 `upgrade` 输出(实跑与 `--dry-run` 均打印);真值可由 git 历史复现(迁移提交的父提交即 v1 原件),故不落盘代价近零
249
- - **先判后写**:遇形态异常(标记与结构不一致)拒绝执行并给非 0 退出码,**不写任何文件**,提示人工确认
250
- - `upgrade` 幂等:已是 v2(或更高)时原样返回,不做二次改写
251
- - **手工迁 v2 与工具升级的落点不同**:手工迁移按本节在首行写版本段为 `v2` 的形态标记、停在 v2;用 `toolkit conventions upgrade` 升级则不落 v2——工具从 v1 输入链式直达 v3(`v1 → v2 → v3`,见 §10.3),仅手工路径停在 v2
252
- - 手动迁移时按同一动作序执行
253
-
254
- ### 10.3 v2 → v3 结构升级
255
-
256
- 触发:`toolkit conventions status` 报「需升级」;`toolkit tasks check` 报形态告警(标为 v3 缺 `history.md` 或索引表首列非 `ID`;有 `history.md` 但首列仍是 `#`);或用户直接要求升级。
257
-
258
- 优先用 `toolkit conventions upgrade`(纯机械,可 `--dry-run` 预演;v1 输入将链式升级 v1 → v2 → v3),动作序:
259
-
260
- 1. **索引表删两列**:删「状态」「确立来源任务」两列
261
- 2. **`history.md` 表头归一**:v2 存量 `history.md` 沿用「规则 ID / 名称」旧表头,首格归一为稳定 ID `ID`(与索引表首列同归一)
262
- 3. **退休条目迁出**:把原状态为 `已废弃` 的行迁入 `retired.md`(首部补 `# 规范退休记录`、元规则与 7 列表头),并从 Z1 索引表删除;同步删除 Z2 分册内对应小节(三层清理的索引 + 分册两层)
263
- 4. **`retired.md` 按需建**:无退休条目则不创建该文件
264
- 5. **来源 / ID 补录报告**:`history.md` 中 ID 列仍用规则名者、来源列含多任务者,输出人工复核报告——**不做全自动改写**(历史行只追加不改旧的元规则下,改写须人工确认)
265
- 6. **用法说明 / 写入纪律复核**:`index.md` 表外的自由文本(用法说明、写入纪律)若仍残留 v2 措辞(如「填『确立来源任务』」「把『状态』改为『已废弃』」),输出人工复核报告——升级只机械归一索引表列结构,不改写描述该表的自由文本
266
- 7. **标记升 v3**:`index.md` 首行改为 `<!-- toolkit-conventions: v3 -->`
267
-
268
- 补充要求:
269
-
270
- - **先判后写**:遇形态异常(标记与结构不一致)拒绝执行并给非 0 退出码,**不写任何文件**,提示人工确认
271
- - **dry-run 迁移报告**:`--dry-run` 打印将删的列、将迁出的条目与将删的分册小节、待人工复核项,供人工确认后再实跑
272
- - `upgrade` 幂等:已是 v3 时原样返回,不做二次改写
273
- - 手动迁移时按同一动作序执行
219
+ 见 `conventions-migration.md`(10.1 旧单文件 → 目录形态、10.2 v1 → v2、10.3 v2 → v3)。仅在迁移存量载体或处置形态告警时加载。
274
220
 
275
221
  ## 11. 兼容读(迁移期)
276
222
 
277
- 读取时先找 `conventions/index.md`;不存在再看旧单文件 `conventions.md`,存在则按旧单文件内容读取并**在对话中提示可迁移**。两者并存时以目录形态为准,并提示旧文件待清理。v1 / v2 / v3 都按目录形态正常读取,形态判据见 §10.3(`index.md` 首行标记:无标记为 v1,`v2` 且含 `history.md` 与首列 `ID` 为 v2,`v3` 且含 `history.md` 与首列 `ID` 为 v3)。
223
+ 读取时先找 `conventions/index.md`;不存在再看旧单文件 `conventions.md`,存在则按旧单文件内容读取并**在对话中提示可迁移**。两者并存时以目录形态为准,并提示旧文件待清理。v1 / v2 / v3 都按目录形态正常读取,形态判据见 `conventions-migration.md` §10.3(`index.md` 首行标记:无标记为 v1,`v2` 且含 `history.md` 与首列 `ID` 为 v2,`v3` 且含 `history.md` 与首列 `ID` 为 v3)。
278
224
 
279
225
  ## 12. 自查清单
280
226
 
@@ -296,86 +242,8 @@
296
242
  - [ ] 有入口壳时其标记与当前 toolkit 一致(落后或无标记可重跑 `toolkit init` 就地更新)、且未被 `.gitignore` 覆盖(否则 `check` / `conventions status` 告警)
297
243
  - [ ] 载体与任务区表格为紧凑形态(无列对齐填充、无按列宽补长的分隔行横线;`toolkit conventions format` 可归一,`check` / `conventions status` 会检出)
298
244
  - [ ] 规范写入均经用户确认,来源可溯:活跃条目记于写入任务文件正文,退休条目记入 `retired.md` 的「退休来源任务」列
299
- - [ ] 分册内无「确立来源」行(来源由 `index.md` 索引列与 `history.md` / `retired.md` 承载;`toolkit tasks check` / `toolkit conventions status` 检出并软告警,见 §13)
245
+ - [ ] 分册内无「确立来源」行(来源由 `index.md` 索引列与 `history.md` / `retired.md` 承载;`toolkit tasks check` / `toolkit conventions status` 检出并软告警,见 `conventions-templates.md`)
300
246
 
301
247
  ## 13. 载体文风与模板
302
248
 
303
- §1–§3 规定结构层,本节规定**文风与模板层**。多个仓库的载体在结构上早已一致,分歧集中在头注、用法说明骨架、引用写法、条文格式、规范词与标点这些原先未规定的层面;以下 T1–T6 为**唯一形态**,新载体照此起步、存量载体照此归一,偏离由 `toolkit conventions status` / `toolkit tasks check` 按可机械判定者软告警(只报不改,交人工确认)。
304
-
305
- ### T1 index 头注固定两行
306
-
307
- `index.md` 首行形态标记之后、端清单之前,头注**恰为两行**,各一句 blockquote:
308
-
309
- ```markdown
310
- <!-- toolkit-conventions: v3 -->
311
- # 项目协作规范索引
312
-
313
- > 本文件为规范载体唯一入口与唯一权威;规范全貌见下方索引,条文见各分册。
314
- > 读面纪律:`history.md` / `retired.md` 属归档面,仅在审计 / 恢复时读,不在常规读面。
315
- ```
316
-
317
- - 第 1 行说明载体定位(唯一入口 + 条文去向),第 2 行说明归档面读面纪律
318
- - 头注只承载「读什么、去哪读」;检测面细则、维护步骤、指向 spec 等**不进头注**——它们是写作者须知、非每次建档必读,进了常驻面即违反 §1.1 元原则
319
-
320
- ### T2 用法说明固定骨架
321
-
322
- `index.md`「用法说明」节固定三段,段名与次序为 载体形态 → 本项目约定(可选)→ 读写与维护;通用部分收敛为一句 + 指向本规范,不逐条复述规则正文:
323
-
324
- ```markdown
325
- - **载体形态**:本项目采用「溯源索引式」(条文在外部规则层,本载体只索引)/「条文式」(条文在本载体分册)。
326
- - **本项目约定**:(可选,如 `scope` 分类标签、分册命名等本仓特例;无则整段省略)
327
- - **读写与维护**:读面与读写判定、写入归属、语义修订与退休流程一律见 `skills/<技能名>/references/conventions-spec.md`,本载体不另述。
328
- ```
329
-
330
- - 「载体形态」取值即 §7 两种形态(可混用,需逐条说明时在括号内补述)
331
- - 「读写与维护」指向 spec,不在此复述 §5 / §6 / §8 的规则正文
332
-
333
- ### T3 「单一事实源」列写法二分
334
-
335
- 索引表「单一事实源」列的写法按指向目标二分:
336
-
337
- - **载体内分册**(条文就在本载体)→ 相对链接:`[common.md](./common.md)`、`[web.md](./web.md)`
338
- - **载体外文件**(条文在项目规则层)→ 行内代码:`docs/ai-rules.md`、`AGENTS.md`、`skills/<技能名>/references/task-spec.md`
339
- - 同格需补充说明时,链接 / 代码之后接短述(如 `skills/<技能名>/references/task-spec.md(口径随版本走)`)
340
-
341
- 理由:两类指向的可点击性不同——载体内相对链接点击即达;载体外路径跨仓后不可靠,故不作链接、只作行内代码指路。
342
-
343
- ### T4 分册条文模板
344
-
345
- 分册内每条条文固定为 小节标题 + 一句当前语义 + 四类子项,**子项次序固定为 要求 → 反例 → 理由 → 配套**:
346
-
347
- ```markdown
348
- ## C-<n>. {规则名}
349
-
350
- {一句当前语义}。
351
-
352
- - **要求**:{须做什么 / 不得做什么}。
353
- - **反例**:{常见的错误做法}。
354
- - **理由**:{为什么这样规定}。
355
- - **配套**:{与索引 `C-<n>`、外部载体等的联动关系;无则省略本子项}。
356
- ```
357
-
358
- - 子项名与次序固定;`配套` 无内容时整条省略
359
- - 子项以 `- **{名}**:` 起头(全角冒号),内容用规范词(见 T5)
360
- - **分册内不得写「确立来源」子项**:来源已由 `index.md` 索引行(活跃条目)与 `history.md` / `retired.md`(留痕与退休)承载,分册内重复即违反 §1.1 不变量 I4;`toolkit conventions status` / `toolkit tasks check` 对残留行软告警(跳过 fenced code block)
361
-
362
- ### T5 规范词分级
363
-
364
- 条文正文用统一强弱词,对标 RFC 2119 的 MUST / SHOULD / MAY:
365
-
366
- | 词 | 强度 | 含义 |
367
- | --- | --- | --- |
368
- | `须` | 强制 | 必须遵守,违反即偏离 |
369
- | `应` | 推荐 | 通常遵守,例外须有理由 |
370
- | `可` | 可选 | 允许但不强制 |
371
- | `不得` | 禁止 | 必须避免 |
372
-
373
- 同一强度不混用多种措辞——不用「必须」「应该」「不可以」「禁止」等近义词替代上表四词。
374
-
375
- 适用范围:条文正文、`index.md` 索引行与 `history.md`「修订内容」列。`history.md` 的规范词归一属措辞层(非语义变更),按 §3.2 措辞归一例外原地改写、不新增留痕行;引号内引述的外部文档原文不改。
376
-
377
- ### T6 标点与代码
378
-
379
- - 标识符、文件路径、文件名、命令、配置项、规则 ID 一律用**行内代码**包裹(如 `C-17`、`index.md`、`toolkit conventions status`、`scope`)
380
- - 中文引述、术语、举例名用全角直角引号「」,不用英文引号或书名号
381
- - 中英文混排的空格处理随仓库既有排版习惯,不作硬性要求
249
+ 见 `conventions-templates.md`(T1 索引头注、T2 用法说明骨架、T3 单一事实源列、T4 分册条文、T5 规范词、T6 标点与代码)。新建载体、归一存量文风或处置文风偏离告警时加载。
@@ -0,0 +1,83 @@
1
+ # 规范载体文风与模板
2
+
3
+ > 本文件为 `conventions-spec.md` 的配套规范,承载载体的文风与模板层(T1–T6)。新建载体、归一存量载体文风,或按机械判定处置文风偏离时加载;结构层见 `conventions-spec.md` §1–§3。
4
+
5
+ 多个仓库的载体在结构上早已一致,分歧集中在头注、用法说明骨架、引用写法、条文格式、规范词与标点这些原先未规定的层面;以下 T1–T6 为**唯一形态**,新载体照此起步、存量载体照此归一,偏离由 `toolkit conventions status` / `toolkit tasks check` 按可机械判定者软告警(只报不改,交人工确认)。
6
+
7
+ ## T1 index 头注固定两行
8
+
9
+ `index.md` 首行形态标记之后、端清单之前,头注**恰为两行**,各一句 blockquote:
10
+
11
+ ```markdown
12
+ <!-- toolkit-conventions: v3 -->
13
+ # 项目协作规范索引
14
+
15
+ > 本文件为规范载体唯一入口与唯一权威;规范全貌见下方索引,条文见各分册。
16
+ > 读面纪律:`history.md` / `retired.md` 属归档面,仅在审计 / 恢复时读,不在常规读面。
17
+ ```
18
+
19
+ - 第 1 行说明载体定位(唯一入口 + 条文去向),第 2 行说明归档面读面纪律
20
+ - 头注只承载「读什么、去哪读」;检测面细则、维护步骤、指向 spec 等**不进头注**——它们是写作者须知、非每次建档必读,进了常驻面即违反 `conventions-spec.md` §1.1 元原则
21
+
22
+ ## T2 用法说明固定骨架
23
+
24
+ `index.md`「用法说明」节固定三段,段名与次序为 载体形态 → 本项目约定(可选)→ 读写与维护;通用部分收敛为一句 + 指向本规范,不逐条复述规则正文:
25
+
26
+ ```markdown
27
+ - **载体形态**:本项目采用「溯源索引式」(条文在外部规则层,本载体只索引)/「条文式」(条文在本载体分册)。
28
+ - **本项目约定**:(可选,如 `scope` 分类标签、分册命名等本仓特例;无则整段省略)
29
+ - **读写与维护**:读面与读写判定、写入归属、语义修订与退休流程一律见 `skills/<技能名>/references/conventions-spec.md`,本载体不另述。
30
+ ```
31
+
32
+ - 「载体形态」取值即 `conventions-spec.md` §7 两种形态(可混用,需逐条说明时在括号内补述)
33
+ - 「读写与维护」指向 spec,不在此复述 §5 / §6 / §8 的规则正文
34
+
35
+ ## T3 「单一事实源」列写法二分
36
+
37
+ 索引表「单一事实源」列的写法按指向目标二分:
38
+
39
+ - **载体内分册**(条文就在本载体)→ 相对链接:`[common.md](./common.md)`、`[web.md](./web.md)`
40
+ - **载体外文件**(条文在项目规则层)→ 行内代码:`docs/ai-rules.md`、`AGENTS.md`、`skills/<技能名>/references/task-spec.md`
41
+ - 同格需补充说明时,链接 / 代码之后接短述(如 `skills/<技能名>/references/task-spec.md(口径随版本走)`)
42
+
43
+ 理由:两类指向的可点击性不同——载体内相对链接点击即达;载体外路径跨仓后不可靠,故不作链接、只作行内代码指路。
44
+
45
+ ## T4 分册条文模板
46
+
47
+ 分册内每条条文固定为 小节标题 + 一句当前语义 + 四类子项,**子项次序固定为 要求 → 反例 → 理由 → 配套**:
48
+
49
+ ```markdown
50
+ ## C-<n>. {规则名}
51
+
52
+ {一句当前语义}。
53
+
54
+ - **要求**:{须做什么 / 不得做什么}。
55
+ - **反例**:{常见的错误做法}。
56
+ - **理由**:{为什么这样规定}。
57
+ - **配套**:{与索引 `C-<n>`、外部载体等的联动关系;无则省略本子项}。
58
+ ```
59
+
60
+ - 子项名与次序固定;`配套` 无内容时整条省略
61
+ - 子项以 `- **{名}**:` 起头(全角冒号),内容用规范词(见 T5)
62
+ - **分册内不得写「确立来源」子项**:来源已由 `index.md` 索引行(活跃条目)与 `history.md` / `retired.md`(留痕与退休)承载,分册内重复即违反 `conventions-spec.md` §1.1 不变量 I4;`toolkit conventions status` / `toolkit tasks check` 对残留行软告警(跳过 fenced code block)
63
+
64
+ ## T5 规范词分级
65
+
66
+ 条文正文用统一强弱词,对标 RFC 2119 的 MUST / SHOULD / MAY:
67
+
68
+ | 词 | 强度 | 含义 |
69
+ | --- | --- | --- |
70
+ | `须` | 强制 | 必须遵守,违反即偏离 |
71
+ | `应` | 推荐 | 通常遵守,例外须有理由 |
72
+ | `可` | 可选 | 允许但不强制 |
73
+ | `不得` | 禁止 | 必须避免 |
74
+
75
+ 同一强度不混用多种措辞——不用「必须」「应该」「不可以」「禁止」等近义词替代上表四词。
76
+
77
+ 适用范围:条文正文、`index.md` 索引行与 `history.md`「修订内容」列。`history.md` 的规范词归一属措辞层(非语义变更),按 `conventions-spec.md` §3.2 措辞归一例外原地改写、不新增留痕行;引号内引述的外部文档原文不改。
78
+
79
+ ## T6 标点与代码
80
+
81
+ - 标识符、文件路径、文件名、命令、配置项、规则 ID 一律用**行内代码**包裹(如 `C-17`、`index.md`、`toolkit conventions status`、`scope`)
82
+ - 中文引述、术语、举例名用全角直角引号「」,不用英文引号或书名号
83
+ - 中英文混排的空格处理随仓库既有排版习惯,不作硬性要求
@@ -21,7 +21,7 @@
21
21
 
22
22
  目录名 `.tasks` 为默认约定,项目可自定(如集中式任务库按项目分子目录),内部子结构不变。
23
23
 
24
- `index.md` 首行为形态标记(`<!-- toolkit-conventions: v3 -->`),索引表首列是稳定 ID(`C-<n>`);无标记的 v1、标记为 `v2` 的旧形态仍合法、`check` 不告警,可用 `toolkit conventions upgrade` 升级。载体结构、端名规则、分层读写判定与存量迁移见 `conventions-spec.md`。
24
+ `index.md` 首行为形态标记(`<!-- toolkit-conventions: v3 -->`),索引表首列是稳定 ID(`C-<n>`);无标记的 v1、标记为 `v2` 的旧形态仍合法、`check` 不告警,可用 `toolkit conventions upgrade` 升级。载体结构、端名规则与分层读写判定见 `conventions-spec.md`;存量迁移、文风与模板见同目录 `conventions-migration.md` / `conventions-templates.md`。
25
25
 
26
26
  `conventions/` 不是任务文件:tasks 各子命令不读其内容,check 不会因内容告警(仅在载体形态异常与入口层现场异常时软告警,口径见 `conventions-spec.md`);它只作为 AI 协作时的规范源,由 fxri-plan-to-task 归档时与 fxri-session-recap 收尾时维护(写入前需用户确认)。
27
27
 
@@ -103,11 +103,16 @@ scope: app # 影响范围;只标本仓内的端 / 面(跨仓库
103
103
  ## 6. 协作约定
104
104
 
105
105
  - 任务区是多写者共享区:先查后写,同一需求共用一个任务文件;建档与执行时遵守 conventions 载体(`.tasks/conventions/index.md`,存在时)中的项目规范,旧单文件 `conventions.md` 亦兼容读取
106
- - **多人同天归档冲突**:归档文件按完成日期聚合、整文件重写,两个写者落在同一日必冲突;`pull` 后残留 git 冲突标记时跑 `toolkit tasks normalize --fix` 按并集去重 + 完成时间降序**确定性**解决(保留两侧任务块、丢弃 diff3 的 `\|\|\|\|\|\|\|` base 段与全部标记行),无需人工逐块合并
106
+ - **多人同天归档冲突**:归档文件按完成日期聚合、整文件重写,两个写者落在同一日必冲突;`pull` 后残留冲突标记的处置见 §4(可跑 `toolkit tasks normalize --fix` 确定性解决,无需人工逐块合并)
107
107
  - **动手前置建档评估**:涉及仓库文件改动的任务,动手前先查 active/archive 判同主题(完整判别表见 SKILL.md 工作流第 1 步);active 有同主题则更新原文件;archive 有同主题且本次不产生仓库文件改动(重复提议 / 重复执行)则不重复建档,本次产生仓库文件改动(延续 / 扩展 / 重新实现)则重新建档并标注来源链
108
108
  - **仓库文件改动口径**:需写入版本控制的工作区文件的增 / 改 / 删(源码、配置、文档、技能、任务区自身均计入);纯读取、纯执行、纯汇报不计入;拿不准时列出差异问用户,不猜
109
109
  - **动作不算,改动才算**:收尾动作(提交、发版、推送、部署)本身及其固有产物(版本号、更新日志、标签)不构成任务、不单独建档;这些动作过程中若出现需改仓库文件才能解决的缺陷(如打包配置错误、发布渠道错误),该修复按普通任务建档
110
- - **跨仓库改动各自归档(本仓自述)**:任务档是仓库自述,只记本仓的改动与动机;跨仓库是会话属性而非仓库属性,同一会话涉及多仓时各仓各自建档归档,不在一仓记录里承载另一仓的工作痕迹。判据取**视角**(描述的是不是本仓的改动与动机),非词表——依赖包名 / 被调接口名等属本仓事实者照写
110
+ - **跨仓库改动各自归档(本仓自述)**:任务档是仓库自述,只记本仓的改动与动机;跨仓库是会话属性而非仓库属性,同一会话涉及多仓时各仓各自建档归档,不在一仓记录里承载另一仓的工作痕迹。判据取**视角**(描述的是不是本仓的改动与动机),非词表——依赖包名 / 被调接口名等本仓事实者照写
111
+ - **任务粒度(按序判定)**:一个任务 = 可独立验收、可独立回滚、单独提交后仓库自洽的最小交付单元,且不跨仓库。判定顺序:① 跨仓库必拆——一个任务只属于一个仓库;② 拆出的中间态仓库验收不过则合并回去;③ 写不出一句独立的验收结论则合并;④ 单独回滚会破坏其他交付则合并。常见反例:按文件拆、按步骤拆(编码 / 测试 / 文档各建一档)、把文档 + 技能 + 变更集从代码任务里拆出、按人拆、把重构与依赖它的功能随意拆开。任务数通常不超过 7,超过多半是把步骤当成了任务
112
+ - **触发建档的改动不含任务区自身**:建档评估与「本次是否产生仓库文件改动」的判别中,`.tasks/` 下的读写不单独构成建档理由(否则建档本身即为改动,形成自证循环);archive 同主题判别仍按上一条「任务区自身均计入」的完整口径
113
+ - **纯展示开发计划表**:方案确认后、建档前,若涉及两个及以上任务,先在对话中给出唯一一张顺序表,列为「序号 | 仓库 | 任务 | 前置」——跨端、跨仓同表,按执行先后排列;表只作展示与排序,不落档、不写入任务正文、不设状态列(状态以任务 frontmatter 为唯一真源)。单任务方案不出表;计划调整时先更新该表再继续
114
+ - **逐任务交付**:按计划表顺序推进,前置未完成或阻塞未解除时下游不开工;每个任务完成即走完该仓库的「归档 → 验收 → 提交」,不跨任务攒批。一个任务至少一次提交、允许多次;不得把多个任务攒成一个提交,也不得为凑一次提交塞入无关改动
115
+ - **任务正文保留顺序线索**:批次 / 计划位置 / 前置任务写在正文,用于回顾与中断恢复;串行先后只进展示表与正文,不写 `depends_on`(`depends_on` 只用于仍 active 的并行依赖,指向已归档任务会被 check 告警)
111
116
  - **归档块不可变**:已归档块是终结记录(唯一键 + 完成时间已固定),不追加新的工作内容;延续 / 扩展需求走新任务并标注来源链。唯一例外是**事实更正**——后续核实推翻原块结论、或协作口径变更导致历史事实字段需更正时,在其正文末尾追加「修订记录」(保留原结论、附更正时刻与依据);口径变更类更正可改受影响的**事实字段**(如 `scope`),但唯一键 / 完成时间 / 状态 / 负责人仍冻结。与 conventions 载体「废弃不删行」同属留痕优于抹除
112
117
  - **验收与 CI 同源,不手写清单**:项目的验收步骤清单只允许一份真源——一条聚合命令(如 `pnpm verify`)背后由脚本定义步骤,本地与全部 CI 流水线共用它;禁止在规则文件、CI 配置里另抄一份步骤枚举。多份手写清单必然漂移,征兆就是「本地自检通过、CI 才报错」,出现该征兆先查清单是否已经漂移
113
118
  - 强制约束到**沉淀**为止:归档 + 规范沉淀即流程终点;提交、发版、推送不是必经步骤,是否执行取决于用户的全局 / 个人 / 项目规则;若提交代码,按「归档与沉淀 → 跑项目验收命令 → git commit」的顺序执行,任务记录(归档文件 + conventions 载体)与代码变更落在同一提交
@@ -1,20 +1,20 @@
1
1
  ---
2
2
  name: fxri-release-changelog
3
- description: 基于 changesets 的发版与多语言 CHANGELOG 维护流程:创建变更集、消费发版、把分组标题与条目转为项目语言风格、清理变更集、打标签发布;无 changesets 的项目提供同格式手工模式。当用户表达发版或记录变更意图——含创建变更集、changeset、发版、version、CHANGELOG 格式化等说法及其口语近义表达(如发一版、出个版本、记一下这次改动、生成更新日志)时使用。⚠️ 注意区分:用户说「提交个版本 / 先提交一版 / commit」通常指 git 提交当前改动(走任务收尾后提交),**不是发版**。不用于日常 commit message 撰写、git 提交操作或与发版无关的文档修改。
3
+ description: 基于 changesets 的发版与多语言 CHANGELOG 维护流程:创建变更集、消费发版、把分组标题与条目转为项目语言风格、清理变更集、打标签发布;无 changesets 的项目提供同格式手工模式。用户表达发版或记录变更意图时使用——含创建变更集、changeset、发版、version、CHANGELOG 格式化等说法及口语近义表达(发一版、出个版本、记一下这次改动、生成更新日志)。⚠️ 注意区分:用户说「提交个版本 / 先提交一版 / commit」通常指 git 提交当前改动(走任务收尾后提交),**不是发版**。不用于日常 commit message 撰写、git 提交操作或与发版无关的文档修改。
4
4
  license: MIT
5
5
  metadata:
6
- version: "1.1.9"
6
+ version: "1.2.1"
7
7
  author: fxri
8
8
  source: https://github.com/fxri-net/toolkit
9
9
  ---
10
10
 
11
11
  # 发版与 CHANGELOG
12
12
 
13
- > 本技能版本 1.1.9(随 @fxri/toolkit 同批分发)。被问版本时即报此值——不读磁盘、不跑 CLI:报出的值就是本会话上下文里已加载内容的版本,可与 `toolkit skills status` 打印的磁盘基准值对照,不一致即说明会话上下文已过期,开新会话即可。
13
+ > 本技能版本 1.2.1(随 @fxri/toolkit 同批分发)。被问版本时即报此值(不读磁盘、不跑 CLI);与 `toolkit skills status` 的磁盘值不一致即说明会话上下文已过期,开新会话即可。
14
14
 
15
15
  ## 何时使用
16
16
 
17
- - 记录变更(创建变更集)、消费变更集发版、格式化 CHANGELOG(语义触发,不要求字面一致):changeset / 变更集 / 发版 / version / CHANGELOG 格式化 / 发一版 / 出个版本 / 记一下这次改动 / 生成更新日志
17
+ - 记录变更(创建变更集)、消费变更集发版、格式化 CHANGELOG(语义触发,不要求字面一致;触发词见 frontmatter `description`)
18
18
  - 触发前置条件:**用户明确表达发版或记录变更意图**。⚠️ **git 提交 ≠ 发版**:用户说「提交个版本 / 先提交一版 / 提交一下 / commit 这版」通常指把当前改动 git 提交(涉及任务时先走 fxri-plan-to-task / fxri-session-recap 收尾再提交),**不触发本技能**;纯日常对话出现「版本」字样也不触发
19
19
  - 拿不准用户意图时向用户确认,不猜
20
20
 
@@ -54,7 +54,7 @@ metadata:
54
54
  | 条目与仓库既有风格不一致 | 人工润色为项目语言与句式,勿保留机器直译 |
55
55
  | 变更集遗漏(发版后才发现功能未记录) | 补建变更集随下次发版;本次在发布说明中人工补充 |
56
56
  | `toolkit tasks check` 报「变更集条目缺类型前缀」 | 打开所列文件,给缺前缀的**顶层条目**按「类型:描述」补前缀(缩进续行随父条目迁属、无需加);补前缀只改分类信号,不改变 bump 级别 |
57
- | `toolkit tasks check` 报「变更集条目未加「- 」列表标记」 | 打开所列文件,把裸行逐条改为 `- 类型:描述`(列 0 起首、无 `- ` 标记的行会被 changesets 并入相邻条目作续行,整段塌成单一条目、只有首行归组剥前缀);若已发版才发现,说明该版本块条目可能已挤在单组且前缀未剥离,按 references 的「人工事实更正」修 `CHANGELOG.md` 并重跑镜像页同步 |
57
+ | `toolkit tasks check` 报「变更集条目未加「- 」列表标记」 | 打开所列文件,把裸行逐条改为 `- 类型:描述`(成因见 changesets 流程第 1 步);若已发版才发现,说明该版本块条目可能已挤在单组且前缀未剥离,按 references 的「人工事实更正」修 `CHANGELOG.md` 并重跑镜像页同步 |
58
58
  | 改动已发布却无归档记录(有提交、无任务档) | 先补归档(fxri-session-recap 模式一)再继续发布后续步骤;发版本身不补建档 |
59
59
  | 发版后历史块内出现多余空行(`自举一致性` 类零改动用例失败) | 跑 `toolkit changelog --history format` 归一(**必须带 `--history`**,默认模式不动历史块),再补跑一次镜像页同步脚本 |
60
60
  | 格式化时 stderr 报「归类后条目数由 N 降为 M,疑似丢失内容」 | 归类只应搬移条目,减少即疑似丢内容:核对该版本块是否含非纯条目分组(标题下先出现正文)或被保留分组;确认属正常去重可忽略,否则按 references 的归类规则修回 |
@@ -9,7 +9,7 @@
9
9
 
10
10
  ### 🐛 问题修复
11
11
 
12
- - 修复xxx:……
12
+ - 金额计算精度丢失
13
13
 
14
14
  ### 📦 其他变更
15
15
 
@@ -21,7 +21,7 @@
21
21
  - 版本标题 `## {版本号}`;隔一行后接引用行 `> {YYYY-MM-DD} 发布`(标题与日期行之间保留一个空行)
22
22
  - 分组标题 = emoji + 组名,一行一组,按**语义分组顺序**输出——重大变更 → 新增功能 → 功能调整 → 优化改进 → 问题修复 → 文档更新 → 清理移除 → 依赖变更 → 其他变更;空组省略
23
23
  - 条目一行一条,每条**须以 `- ` 列表标记开头**(仅 `- ` 列表项被逐条收录);项目语言句式(中文条目句末不加句号),与仓库既有风格一致
24
- - ⚠️ **务必逐条写成 `- 类型:描述`**:变更集正文里列 0 起首、无 `- ` 标记的裸行会被 changesets 并入相邻条目作缩进续行——整段正文塌成**单一条目**,只有首行参与前缀识别与归类,其余行既不归组也不剥前缀,最终全挤在首行所属的单组里(本仓 v1.12.0 块的成因)。`toolkit tasks check` 对裸行(前缀开头、连续 2 行起)报软告警,归档前据此自查
24
+ - ⚠️ **务必逐条写成 `- 类型:描述`**:变更集正文里列 0 起首、无 `- ` 标记的裸行会被 changesets 并入相邻条目作缩进续行——整段正文塌成**单一条目**,只有首行参与前缀识别与归类,其余行既不归组也不剥前缀,最终全挤在首行所属的单组里(本仓 v1.12.0 块的成因);自查入口见 §2「缺前缀与裸行的检测入口」
25
25
  - 同一分组内顶层条目**逐行相邻输出**(条目之间不留空行,缩进子项紧随父条目),分组之间与日期行前后各留一个空行——这是格式化的**不动点**:合规文件重复执行 `toolkit changelog format` 应零改动,`--history` 归一之后同理
26
26
  - ⚠️ 变更集条目以 `- ` 开头时,changesets 会写入 `- - 条目` 首行并把后续行缩进 2 空格(伪影);`toolkit changelog version/format` 会自动还原为顶层条目,手工模式需手动清理
27
27
  - 分组标题集合随版本演进而变化;**历史版本块保留当时口径,`toolkit changelog format` 不追溯改写**(只归类 changesets 本次新写入的英文源标题块)
@@ -1,23 +1,23 @@
1
1
  ---
2
2
  name: fxri-session-recap
3
- description: 会话收尾的工作记忆沉淀 + 新会话开场恢复 + 历史任务时间修正:收尾时把整场会话的全部任务完整建档归档,按四级时间源还原真实完成时间,沉淀规范进 conventions 载体;新会话开场按三层恢复(全量索引 + active 精读 + 近窗归档)重建现场并核对规范;也可批量修正历史归档时间。当用户表达会话收尾意图(如今天先到这、收个尾、归档本次会话、把结论记下来)、接续意图(如恢复上下文、继续上次、上次做到哪)、或修正历史任务时间时使用。不用于会话中途的常规方案建档(那是 fxri-plan-to-task 的职责)、与工作交接无关的代码技术总结。
3
+ description: 会话收尾的工作记忆沉淀 + 新会话开场恢复 + 历史任务时间修正:收尾时把整场会话的全部任务完整建档归档,按四级时间源还原真实完成时间,沉淀规范进 conventions 载体;新会话开场按三层恢复(全量索引 + active 精读 + 近窗归档)重建现场并核对规范;也可批量修正历史归档时间。用户表达会话收尾意图(今天先到这、收个尾、归档本次会话、把结论记下来)、接续意图(恢复上下文、继续上次、上次做到哪)或修正历史任务时间时使用。不用于会话中途的常规方案建档(那是 fxri-plan-to-task 的职责)、与工作交接无关的代码技术总结。
4
4
  license: MIT
5
5
  metadata:
6
- version: "1.4.1"
6
+ version: "1.6.0"
7
7
  author: fxri
8
8
  source: https://github.com/fxri-net/toolkit
9
9
  ---
10
10
 
11
11
  # 会话归档、上下文恢复与历史修正
12
12
 
13
- > 本技能版本 1.4.1(随 @fxri/toolkit 同批分发)。被问版本时即报此值——不读磁盘、不跑 CLI:报出的值就是本会话上下文里已加载内容的版本,可与 `toolkit skills status` 打印的磁盘基准值对照,不一致即说明会话上下文已过期,开新会话即可。
13
+ > 本技能版本 1.6.0(随 @fxri/toolkit 同批分发)。被问版本时即报此值(不读磁盘、不跑 CLI);与 `toolkit skills status` 的磁盘值不一致即说明会话上下文已过期,开新会话即可。
14
14
 
15
15
  ## 何时使用
16
16
 
17
- - **沉淀模式(模式一)**:会话接近尾声,用户表达收尾意图——「今天先到这 / 收个尾 / 先这样吧 / 把结论记下来 / 归档本次会话 / 总结本次」,或其近义表达(不要求字面一致)
18
- - **恢复模式(模式二)**:新会话开场,用户表达接续意图——「恢复上下文 / 继续上次 / 上次做到哪了 / 接着上次的干」,或其近义表达
19
- - **修正模式(模式三)**:用户发现历史任务时间不准,要批量修正——「修正历史任务时间 / 历史归档时间不对」
20
- - ⚠️ 触发识别靠语义不靠字面:用户说「收个尾」可能指收尾工作也可能指会话收尾,需结合上下文判断;无法判断时向用户确认,不猜
17
+ - **沉淀模式(模式一)**:会话接近尾声,用户表达收尾意图(如「今天先到这 / 收个尾 / 把结论记下来 / 归档本次会话」)
18
+ - **恢复模式(模式二)**:新会话开场,用户表达接续意图(如「恢复上下文 / 继续上次 / 上次做到哪了」)
19
+ - **修正模式(模式三)**:用户发现历史任务时间不准,要批量修正
20
+ - ⚠️ 触发识别靠语义不靠字面(完整触发词见 frontmatter `description`):用户说「收个尾」可能指收尾工作也可能指会话收尾,需结合上下文判断;无法判断时向用户确认,不猜
21
21
 
22
22
  **何时不使用**:会话中途的常规方案建档与归档(fxri-plan-to-task);对某段代码的技术总结(与会话交接无关,不落 .tasks);日常对话。
23
23
 
@@ -25,7 +25,7 @@ metadata:
25
25
 
26
26
  - 所有 agent 的共性约束:新会话读不到其他会话的内部上下文,对话记录本身不可跨会话传递
27
27
  - 本技能解法是把记忆**沉淀进仓库文件**(`.tasks/`);个别 agent 可直读历史会话转录,属非通用高级路径,不依赖
28
- - 本技能**不直接执行 git 提交**:归档 + 沉淀即流程终点,提交/推送/发版由用户全局规则决定(见「收尾边界」)
28
+ - 本技能**不直接执行 git 提交**:提交/推送/发版由用户全局规则决定(见 R2)
29
29
 
30
30
  ## 核心规则(先读这段)
31
31
 
@@ -51,8 +51,7 @@ metadata:
51
51
  任务终结 → 归档 → 规范沉淀(硬终点) → 验收 → 提交/发版/推送(可选,需用户确认)
52
52
  ```
53
53
 
54
- - 归档是中间步骤,**规范沉淀才是流程终点**
55
- - 沉淀时机固定:归档完成后、任何收尾动作(验收 / 提交 / 发版 / 推送)前,规范与归档文件同批落盘
54
+ - 归档是中间步骤,**规范沉淀才是流程终点**;沉淀时机固定:归档完成后、任何收尾动作(验收 / 提交 / 发版 / 推送)前,规范与归档文件同批落盘
56
55
  - ⚠️ **验收须晚于归档**:归档会改写 `.tasks/`,且归档本身不做阻断式校验——早于归档跑验收就覆盖不到终态,归档产物等于无人校验;归档块「完成情况」只记改动事实与所用验证命令,不逐条抄写验收输出
57
56
  - 提交、发版、推送**不是必经步骤**,是否执行取决于用户全局/个人/项目规则;若提交代码:先归档、后跑项目验收命令、再提交,归档文件与代码变更落在同一 git 提交
58
57
  - **动作不算、改动才算**:收尾动作(提交、发版、推送、部署)本身及其固有产物(版本号、更新日志、标签)不构成任务、不单独建档;其所依据的改动须有归档记录,缺则补档
@@ -60,17 +59,16 @@ metadata:
60
59
 
61
60
  ### R3 规范落点:`.tasks/conventions/` 载体(两级沉淀同一载体)
62
61
 
63
- - 唯一落点 `.tasks/conventions/`(纯 Markdown 随 git 走):`index.md` 唯一入口(形态标记 + 端清单 + 活跃索引表,首列为稳定 ID `C-<n>`),`history.md` 承载语义演进记录(独立文件、仅追加),`retired.md` 承载退休台账(条目作废时迁入、冻结语义,按需创建),`common.md` 承载所有端通用条文,`<端名>.md`(或分类标签分册)承载各端专属条文;每条规范带来源任务与日期,可审计
64
- - **任务级**(fxri-plan-to-task 归档时):单任务产出可升格规范才追加,无则完全静默
65
- - **会话级**(本技能收尾时):聚合全会话候选,与已有规范**合并去重**——跨任务重复模式在此补,用户明示规则兜底
62
+ - 唯一落点 `.tasks/conventions/`(纯 Markdown 随 git 走):`index.md` 唯一入口(形态标记 + 端清单 + 活跃索引表,首列稳定 ID `C-<n>`),`history.md` 语义演进(独立文件、仅追加),`retired.md` 退休台账(条目作废迁入、冻结语义,按需创建),`common.md` 通用条文,`<端名>.md`(或分类标签分册)端专属条文;每条规范带来源任务与日期,可审计
63
+ - **任务级**(fxri-plan-to-task 归档时):单任务产出可升格规范才追加,无则完全静默;**会话级**(本技能收尾时):聚合全会话候选,与已有规范**合并去重**——跨任务重复模式在此补,用户明示规则兜底
66
64
  - **归属判定**:先问「是否**所有端都适用**」→ 是则归 `common`;否则逐端确认后写入命中的端分册。⚠️ 禁止跨端合并归属(真全端才升 `common`,只适用几端则各端各记一条);`common` 的语义是「所有端」不是「不确定归哪端」的暂存区
67
65
  - **端名**:与任务 frontmatter `scope` 取值**逐字一致**(任务写 `scope: web+server` → 读 `web.md` + `server.md`,无论命中与否**恒叠加 `common.md`**;`scope` 中非端值且存在同名分册者按分类标签分册加载);`index.md` 顶部「端清单」是端的**唯一权威**,不扫目录
68
66
  - 写前**必须用户确认**;同义规范不重复记录,只补差异或合并增强
69
67
  - **表格形态**:载体与任务区表格一律**紧凑形态**(单元格间只留一个空格,不做列对齐填充);手工写表不为对齐补空格,已有填充用 `toolkit conventions format` 归一(幂等、跳过代码块、不改语义),源头由 `toolkit init` 托管的 `.prettierignore` 排除任务区
70
68
  - 一次性决策留在任务正文,不进规范(升格标准:重复出现 ≥2 次,或用户明示「以后都要这样」)
71
- - **内容修订 vs 形态迁移**:语义变更走「`history.md` 追加留痕 + index 行更新」;条目作废走**迁出 + 三层清理**(索引行删除并迁入 `retired.md` 冻结语义、物理删除分册内该条小节、外部单一事实源同步删改,不留「已废弃」占位);使用者项目存旧单文件 `conventions.md` 且要求迁移时走**迁移三段式**(建目录搬原文 → 逐条提归属建议 → 用户确认后拆分册);载体为 v1 / v2(无首行形态标记,或标记为 `v2` / 索引表首列非 `ID` / 缺 `history.md`)时走 **v1 / v2→v3 升级**——优先 `toolkit conventions upgrade`(可 `--dry-run` 预演),亦可按链路手工执行;均可中断不丢内容;已成 v3 标记却残留 v2 独有列(「状态」「确立来源任务」)或 `history.md` / `retired.md` 表头首格非 `ID` 者属**形态残留**(非升级触发),`toolkit tasks check` / `toolkit conventions status` 软告警提示人工归一
69
+ - **内容修订 vs 形态迁移**:语义变更走「`history.md` 追加留痕 + index 行更新」;条目作废走**迁出 + 三层清理**(索引行删除并迁入 `retired.md` 冻结语义、物理删除分册内该条小节、外部单一事实源同步删改,不留「已废弃」占位);发现旧单文件 `conventions.md`、载体为 v1 / v2,或已成 v3 却残留 v2 独有列 / 表头首格非 `ID` 的**形态残留**时,一律按 `conventions-migration.md` 的迁移与升级链路处置(可中断不丢内容)
72
70
  - ⚠️ 兼容读:先找 `conventions/index.md`,不存在再看旧单文件 `conventions.md`(提示可迁移);两者并存时以目录形态为准
73
- - 完整细则(三分区结构、形态标记与稳定 ID、`index.md` 表列定义、`history.md` / `retired.md` 结构、分层读写判定、内容修订、表格形态(紧凑)、两种形态、迁移与 v1 / v2→v3 升级步骤、自查清单)见 `../fxri-plan-to-task/references/conventions-spec.md`;fxri-plan-to-task 未一并安装、该兄弟路径不存在时,改读包内真源——`toolkit skills status` 打印的「技能源」目录下 `fxri-plan-to-task/references/conventions-spec.md`
71
+ - 完整细则(三分区结构、形态标记与稳定 ID、表列定义、分层读写判定、修订与迁移步骤、自查清单)见 `../fxri-plan-to-task/references/conventions-spec.md`;形态判据、迁移与升级步骤见同目录 `conventions-migration.md`,文风模板见 `conventions-templates.md`;兄弟路径不存在时改读包内真源——`toolkit skills status` 打印的「技能源」目录下同名文件
74
72
 
75
73
  ### 规范提炼子流程(三模式共用)
76
74
 
@@ -86,37 +84,29 @@ metadata:
86
84
  1. **全量回放**:按时间线完整回放本会话,产出**全部任务候选清单**(含结论、决策及理由、代码改动、未尽事项、用户明示要求记录的内容;与工作产出无关的闲聊不记)。⚠️ 决策及其理由必须记——决策散在对话里,会话一关就丢
87
85
  2. **事前核对(新增,防漏档的关口)**:把任务候选清单(每条附时间证据来源:0/1/2/3 级)**先输出给用户确认无遗漏**,确认后才开始落盘——用户切会话漏档的痛点在结构上解决
88
86
  3. **逐条落盘**(先查后写;格式与目录规范见 `../fxri-plan-to-task/references/task-spec.md`;fxri-plan-to-task 未一并安装、该兄弟路径不存在时,改读包内真源——`toolkit skills status` 打印的「技能源」目录下 `fxri-plan-to-task/references/task-spec.md`):
87
+ - **多仓会话逐仓逐任务建档**:会话涉及多个仓库时,每个产生改动的仓库按任务清单各自独立建档(一任务一档,不得把同仓多个任务合并为一档);只读参与的仓库不建档
89
88
  - 会话工作有对应任务 → 更新原文件:正文追加结论与决策,时间字段按 R1 校准
90
89
  - 无对应任务但有独立成果 → 按 fxri-plan-to-task 规范建档,created 取任务真实创建日
91
90
  - 未尽事项 → 拆独立任务文件(status: 待办),不在正文留游离待办
92
- - 收尾动作(提交、发版、推送、部署)本身及其固有产物(版本号、更新日志、标签)不单独成档;其所依据的改动缺归档记录时须补档
91
+ - 收尾动作及其固有产物不单独成档,所依据改动缺归档时须补档(见 R2)
93
92
  4. **归档**:终结态任务按 task-spec「手工归档步骤」执行(合并归档块 → 降序重排 → 写回 → 删源文件 → 清理空月份目录),或 `toolkit tasks archive` 自动化
94
93
  5. **规范沉淀(终点)**:按「规范提炼子流程」执行会话级提炼,写入 conventions 载体
95
- 6. **收尾边界**:沉淀即本技能流程终点。提交、发版、推送不是必经步骤,是否执行取决于用户规则;⚠️ 验收须晚于归档——若提交代码,先归档、再跑项目验收命令、后提交,任务归档文件 + conventions 载体与本次代码变更落在**同一个 git 提交**;提交前向用户展示待提交内容供确认
94
+ 6. **收尾边界**:沉淀即本技能流程终点,提交、发版、推送按用户规则决定(见 R2);⚠️ 验收须晚于归档;**逐任务交付**——一个任务至少一次提交、允许多次,不得把多个任务攒成一个提交,也不得为凑一次提交塞入无关改动;提交前向用户展示待提交内容供确认
96
95
  7. **回报**:向用户列出本次沉淀的任务清单、归档位置与规范变更,确认无遗漏后再结束
97
96
 
98
97
  ## 模式二:恢复上下文
99
98
 
100
- > 目标:新会话快速重建现场。恢复范围覆盖全部任务(含已归档),但按层级控制上下文成本。
99
+ > 目标:新会话快速重建现场,按「全量索引 → active 精读 → 近窗归档」三层控制上下文成本。
101
100
 
102
- 1. **L0 全量索引**:`toolkit tasks --view all`(无 CLI 时读目录)——active 全部 + archived 全部历史一行一条 + `toolkit tasks stats` 周期统计;一眼看清全貌,不漏任何历史任务
103
- 2. **L1 工作层精读**:逐文件读 `.tasks/active/` 全部任务(决策、进展、阻塞)。⚠️ **搁置识别**:active 任务 `updated` 距今 >1 年时标注「疑似搁置(距今 X 年)」,建议用户确认收尾或放弃,不当「进行中」呈现
104
- 3. **L2 近窗精读**:读最近归档。**近窗按时间连续性判定,不按数量**:先定位最新归档块的完成时间,只精读从该时刻向前连续活跃的归档(归档月份 ≤ 6 个月或归档块 ≤ 200 条时精读全文);**被 ≥1 年空洞隔断的旧归档一律只入 L0 索引,不精读、不列为「最近完成」**;超阈值降级为统计(按月/负责人汇总 + 近期明细),防止历史膨胀撑爆上下文
105
- 4. **按需拉取**:更早历史(含空洞隔断的旧归档)不主动展开,在 L0 索引可见;用户点名、或 AI 判断相关时用 `--owner`/`--date` 过滤检索;用户明确说「全部恢复」才全量列出
106
- 5. **规范核对与提炼**:读 conventions 载体(存在时)纳入现场——常驻只读 `index.md`(`history.md` 与各分册按需读),再按任务 `scope` 命中加载 `common.md` 与端分册;载体为 v1 或 `check` / `toolkit conventions status` 报形态告警时提示用户可升级;对照近期任务按「规范提炼子流程」提议增改——⚠️ 恢复主体只读,写载体是用户确认后的独立动作
107
- 6. **输出**:全部任务索引摘要 → 进行中/阻塞任务(含搁置标注)→ 最近完成(连续活跃期内,不含空洞旧档)→ 未完事项 → 规范现场 → **建议的下一步**
108
- 7. 全程不写任务区文件;对存疑内容向用户确认后再动
101
+ - 关键护栏:近窗按**时间连续性**判定不按数量,被 ≥1 年空洞隔断的旧归档只入索引、不精读;active 任务 `updated` 超 1 年标注「疑似搁置」;**恢复主体只读**,写任务区 / 载体须用户确认后另行执行
102
+ - 完整步骤见 `references/mode-2-recovery.md`
109
103
 
110
104
  ## 模式三:批量修正历史任务时间
111
105
 
112
- > 目标:旧规则沉淀的归档时间与真实发生时刻不符时批量修正。识别靠证据,CLI 只做结构迁移不推断时间。
106
+ > 目标:旧规则沉淀的归档时间与真实发生时刻不符时批量修正;识别靠证据,CLI 只做结构迁移、不推断时间。
113
107
 
114
- 1. **取证**:对照 git log(`git log --format="%h %ci"`)与聊天记录时间戳,列出疑似错时任务清单,每条附证据(属于 R1 哪一级)
115
- 2. **确认**:清单交用户逐条确认正确时间,不自行推断
116
- 3. **改值**:active 任务直接改文件 completed;已归档任务改归档块元数据行的完成时间
117
- 4. **迁移核验**:`toolkit tasks normalize --fix` 自动把改动后的归档块迁移到正确日期文件(已完成能力:按 completed 合并降序、清理空文件空目录);再 `toolkit tasks normalize` 只读核验 0 漂移
118
- 5. **规范观察**:批量回读历史任务时发现的重复模式,按「规范提炼子流程」列为候选(确认后写入载体,与修正动作同批)
119
- 6. **收尾边界**:同上(沉淀终点,提交可选需确认)
108
+ - 关键护栏:每条改动须附 R1 级别证据并交用户逐条确认,不自行推断;改值后用 `toolkit tasks normalize --fix` 迁移,再以只读模式核验 0 漂移
109
+ - 完整步骤见 `references/mode-3-time-fix.md`
120
110
 
121
111
  ## 失败模式
122
112
 
@@ -129,6 +119,8 @@ metadata:
129
119
  | 归档历史量太大撑爆上下文 | 走 L2 降级:只出统计 + 近期明细,按需拉取更早 |
130
120
  | 新会话仍说「找不到上下文」 | 先查磁盘文件是否存在、是否落在正确月份目录、conventions 载体是否同目录;跨环境场景(换机 / 工作区被 git 清理)才需查是否已 git 提交 |
131
121
  | 归档未提交,新会话能恢复吗 | 同机同目录**能恢复**(恢复读磁盘 `.tasks/` 文件,与提交状态无关);仅跨环境(换机 / checkout、clean 清掉工作区)时未提交内容会丢,恢复才依赖提交 |
122
+ | 多仓会话只在一个仓建档 | 按仓库清单逐仓逐任务补建;任务档只记本仓的改动与动机 |
123
+ | 恢复后看不出任务先后 | 有展示型计划表则按表;无表时按各 active 任务正文的「批次 / 计划位置 / 前置」行重建顺序 |
132
124
 
133
125
  ## 可选加速(不构成依赖)
134
126
 
@@ -0,0 +1,13 @@
1
+ # 模式二:恢复上下文
2
+
3
+ > 由 `../SKILL.md`「模式二」按需加载。时间取证口径见主文件 R1,规范载体结构与提炼流程见主文件 R3 与「规范提炼子流程」,本文件不重复。
4
+
5
+ > 目标:新会话快速重建现场。恢复范围覆盖全部任务(含已归档),但按层级控制上下文成本。
6
+
7
+ 1. **L0 全量索引**:`toolkit tasks --view all`(无 CLI 时读目录)——active 全部 + archived 全部历史一行一条 + `toolkit tasks stats` 周期统计;一眼看清全貌,不漏任何历史任务
8
+ 2. **L1 工作层精读**:逐文件读 `.tasks/active/` 全部任务(决策、进展、阻塞)。⚠️ **搁置识别**:active 任务 `updated` 距今 >1 年时标注「疑似搁置(距今 X 年)」,建议用户确认收尾或放弃,不当「进行中」呈现
9
+ 3. **L2 近窗精读**:读最近归档。**近窗按时间连续性判定,不按数量**:先定位最新归档块的完成时间,只精读从该时刻向前连续活跃的归档(归档月份 ≤ 6 个月或归档块 ≤ 200 条时精读全文);**被 ≥1 年空洞隔断的旧归档一律只入 L0 索引,不精读、不列为「最近完成」**;超阈值降级为统计(按月/负责人汇总 + 近期明细),防止历史膨胀撑爆上下文
10
+ 4. **按需拉取**:更早历史(含空洞隔断的旧归档)不主动展开,在 L0 索引可见;用户点名、或 AI 判断相关时用 `--owner`/`--date` 过滤检索;用户明确说「全部恢复」才全量列出
11
+ 5. **规范核对与提炼**:读 conventions 载体(存在时)纳入现场——常驻只读 `index.md`(`history.md` 与各分册按需读),再按任务 `scope` 命中加载 `common.md` 与端分册;载体为 v1 或 `check` / `toolkit conventions status` 报形态告警时提示用户可升级(升级链路见 `../../fxri-plan-to-task/references/conventions-migration.md`);对照近期任务按主文件「规范提炼子流程」提议增改——⚠️ 恢复主体只读,写载体是用户确认后的独立动作
12
+ 6. **输出**:全部任务索引摘要 → 进行中/阻塞任务(含搁置标注)→ 最近完成(连续活跃期内,不含空洞旧档)→ 未完事项 → **多任务执行顺序**(会话留有展示型计划表则按表;无表时按各 active 任务正文的「批次 / 计划位置 / 前置」行重建)→ 规范现场 → **建议的下一步**
13
+ 7. 全程不写任务区文件;对存疑内容向用户确认后再动
@@ -0,0 +1,12 @@
1
+ # 模式三:批量修正历史任务时间
2
+
3
+ > 由 `../SKILL.md`「模式三」按需加载。时间取证口径见主文件 R1(四级时间源),本文件不重复。
4
+
5
+ > 目标:旧规则沉淀的归档时间与真实发生时刻不符时批量修正。识别靠证据,CLI 只做结构迁移不推断时间。
6
+
7
+ 1. **取证**:对照 git log(`git log --format="%h %ci"`)与聊天记录时间戳,列出疑似错时任务清单,每条附证据(属于 R1 哪一级)
8
+ 2. **确认**:清单交用户逐条确认正确时间,不自行推断
9
+ 3. **改值**:active 任务直接改文件 completed;已归档任务改归档块元数据行的完成时间
10
+ 4. **迁移核验**:`toolkit tasks normalize --fix` 自动把改动后的归档块迁移到正确日期文件(已完成能力:按 completed 合并降序、清理空文件空目录);再 `toolkit tasks normalize` 只读核验 0 漂移
11
+ 5. **规范观察**:批量回读历史任务时发现的重复模式,按主文件「规范提炼子流程」列为候选(确认后写入载体,与修正动作同批)
12
+ 6. **收尾边界**:同上(沉淀终点,提交可选需确认)