@fxri/toolkit 1.11.8 → 1.12.1
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.
- package/CHANGELOG.md +53 -0
- package/SPEC.md +129 -128
- package/dist/cli.cjs +77 -67
- package/dist/cli.js +77 -67
- package/dist/index.cjs +39 -34
- package/dist/index.js +39 -34
- package/package.json +1 -1
- package/skills/README.md +102 -102
- package/skills/fxri-plan-to-task/SKILL.md +123 -122
- package/skills/fxri-plan-to-task/references/conventions-spec.md +379 -215
- package/skills/fxri-plan-to-task/references/task-spec.md +114 -114
- package/skills/fxri-release-changelog/SKILL.md +5 -4
- package/skills/fxri-release-changelog/references/changelog-format.md +3 -2
- package/skills/fxri-session-recap/SKILL.md +7 -7
|
@@ -1,114 +1,114 @@
|
|
|
1
|
-
# 任务文件规范(通用版)
|
|
2
|
-
|
|
3
|
-
> 面向多人 + AI 协作,任何语言项目可直接使用,仅依赖文件读写能力。本文件为 SKILL.md 的配套规范,是 @fxri/toolkit 仓库 `SPEC.md` 的通用裁剪版(去实现化,供非 toolkit 项目直接使用);两者重叠段以 `SPEC.md` 为单一事实源,本文件新增或改动须回写 `SPEC.md`。
|
|
4
|
-
|
|
5
|
-
## 1. 目录结构
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
.tasks/
|
|
9
|
-
├── active/ # 进行中的任务
|
|
10
|
-
│ └── {YYYYMM}/ # 月份子目录,如 202609
|
|
11
|
-
│ └── {YYYYMMDD}-{用户名}-{任务简述}.md
|
|
12
|
-
├── archive/ # 已终结任务归档
|
|
13
|
-
│ └── {YYYYMM}/
|
|
14
|
-
│ └── {YYYYMMDD}.md # 按完成日期归组的归档文件
|
|
15
|
-
└── conventions/ # 项目协作规范载体(可选,从任务提炼的规范沉淀地)
|
|
16
|
-
├── index.md # 唯一入口与唯一权威(首行为形态标记):端清单 + 每条一行指针(首列稳定 ID)
|
|
17
|
-
├── history.md # 规范演进记录(仅追加、不改旧行;只记规范语义变更)
|
|
18
|
-
├── common.md # 全端通用条文(按需创建)
|
|
19
|
-
└── <端名>.md # 各端专有条文,端名 = 任务 scope 取值(按需创建)
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
目录名 `.tasks` 为默认约定,项目可自定(如集中式任务库按项目分子目录),内部子结构不变。
|
|
23
|
-
|
|
24
|
-
`index.md` 首行为形态标记(`<!-- toolkit-conventions:
|
|
25
|
-
|
|
26
|
-
`conventions/` 不是任务文件:tasks 各子命令不读其内容,check 不会因内容告警(仅在载体形态异常与入口层现场异常时软告警,口径见 `conventions-spec.md`);它只作为 AI 协作时的规范源,由 fxri-plan-to-task 归档时与 fxri-session-recap 收尾时维护(写入前需用户确认)。
|
|
27
|
-
|
|
28
|
-
## 2. active 任务文件
|
|
29
|
-
|
|
30
|
-
### 2.1 命名
|
|
31
|
-
|
|
32
|
-
`{YYYYMMDD}-{用户名}-{任务简述}.md`
|
|
33
|
-
|
|
34
|
-
- 年月日 = 任务创建日,`YYYYMMDD` 直接拼接(不加 `-`)
|
|
35
|
-
- 用户名 = git 用户名;任务简述 = 不含空格的短语
|
|
36
|
-
|
|
37
|
-
### 2.2 frontmatter
|
|
38
|
-
|
|
39
|
-
```yaml
|
|
40
|
-
---
|
|
41
|
-
owner: 唐启云 # 负责人(git 用户名)
|
|
42
|
-
status: 进行中 # 待办 / 进行中 / 已完成 / 阻塞 / 已放弃
|
|
43
|
-
created: 20260902 # 创建日 YYYYMMDD,须等于文件名日期前缀
|
|
44
|
-
updated: 20260902 # 最近更新日 YYYYMMDD
|
|
45
|
-
completed: '' # 完成时间 YYYY-MM-DD HH:mm;仅终结态必填
|
|
46
|
-
depends_on: [] # 依赖的任务文件名(可带 .md),目标必须存在且不得成环
|
|
47
|
-
scope: app # 影响范围;只标本仓内的端 / 面(跨仓库改造时不含另一仓);多值以半角加号分隔(web+server),标签内不使用加号;顿号/逗号列表属误写会触发 check 软告警,中文列表请改用加号
|
|
48
|
-
---
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
- `已完成` / `已放弃` 为终结态:进入时必须补 `completed`(真实收工时间)。⚠️ `completed` 按**四级时间源**取证,禁止凭记忆估算、取对话时间或做时区换算:
|
|
52
|
-
1. **当场打点**(首选):任务完成时立即执行命令取真实时间(Windows `Get-Date -Format "yyyy-MM-dd HH:mm"`,macOS/Linux `date "+%Y-%m-%d %H:%M"`)
|
|
53
|
-
2. **聊天记录准确时间戳**:用户贴过的日志/终端输出时间戳、用户口述的确定时刻
|
|
54
|
-
3. **任务改动 git 提交时间**:`git log --format="%h %ci" <file>` 按提交时间取证
|
|
55
|
-
4. **系统当前时间兜底**:前三级皆不可得时当场取时,并在正文标注「时间为收尾补记」
|
|
56
|
-
|
|
57
|
-
工具对「完成时间晚于当前系统时间」会告警(时间源错误的典型症状)——为免跨时区误报,工具留最大正偏移(UTC+14)容差,实则晚于当前时刻 14 小时以上才告警;完成时间恰为零点整(如 `2026-09-05 00:00`,只填日期被自动补零的典型特征)亦会告警,需人工核实。归档块完成时间早于归档动作时间属正常(补档/历史修正场景),迁移由 `normalize --fix` 自动完成
|
|
58
|
-
- 正文以 `# 任务标题` 开头;游离待办子项必须拆为独立任务文件
|
|
59
|
-
|
|
60
|
-
## 3. 归档文件
|
|
61
|
-
|
|
62
|
-
- 命名 `{YYYYMMDD}.md`,日期 = 任务完成时间日期;放入 `archive/{YYYYMM}/`
|
|
63
|
-
- 文件头:`# {YYYYMMDD} 归档` + 引言(如自动生成说明)
|
|
64
|
-
- 每个任务块:
|
|
65
|
-
|
|
66
|
-
```markdown
|
|
67
|
-
## {YYYYMMDD}-{用户名}-{任务简述}
|
|
68
|
-
|
|
69
|
-
> 负责人:{owner} 状态:{status} 范围:{scope} 完成时间:{completed}
|
|
70
|
-
|
|
71
|
-
(任务正文)
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
- 块间以 `---` 分隔;**全文件按完成时间降序**(最新在前)
|
|
75
|
-
- 元数据行以 `> ` 开头、四字段齐全、以全角空格分隔
|
|
76
|
-
|
|
77
|
-
## 4. 手工归档步骤(有序)
|
|
78
|
-
|
|
79
|
-
1. 确认任务 status 为终结态且 `completed` 已填
|
|
80
|
-
2. 计算目标文件 `archive/{completed 的 YYYYMM}/{completed 的 YYYYMMDD}.md`
|
|
81
|
-
3. 读取已有归档文件(不存在则新建含文件头),把任务块加入
|
|
82
|
-
4. 全文件按 `completed` 降序重排,块间补 `---` 分隔
|
|
83
|
-
5. 写回归档文件
|
|
84
|
-
6. 删除 active 源文件;月份子目录与 `active/` 若已空则一并删除
|
|
85
|
-
|
|
86
|
-
⚠️ 多人同天归档、`pull` 后归档文件残留 git 冲突标记(`<<<<<<<` / `=======` / `>>>>>>>`,diff3 风格另有 `|||||||` base 段)时,按步骤 3-5 取冲突两侧任务块**并集、去重**后重新降序写回,删除全部标记行与 base 段即可;可跑 `toolkit tasks normalize --fix` 自动完成(按并集去重 + 完成时间降序确定性解决,无需人工逐块合并)。
|
|
87
|
-
|
|
88
|
-
## 5. 自查清单(校验)
|
|
89
|
-
|
|
90
|
-
- [ ] frontmatter 存在且七字段齐全
|
|
91
|
-
- [ ] status 为五枚举之一;终结态已填 completed
|
|
92
|
-
- [ ] completed 为 `YYYY-MM-DD HH:mm` 且日期真实存在,且不晚于当前系统时间(时间按四级时间源取证:当场打点 / 聊天记录时间戳 / git 提交时间 / 兜底标注补记,非估算)
|
|
93
|
-
- [ ] created 为 YYYYMMDD 且等于文件名日期前缀
|
|
94
|
-
- [ ] 文件名符合 `{YYYYMMDD}-{用户名}-{任务简述}.md`
|
|
95
|
-
- [ ] 任务文件放在 `active/{YYYYMM}/` 月份子目录,不直放 active 根目录
|
|
96
|
-
- [ ] `.tasks/` 下无游离于 active/ 之外的任务文件(直放 `.tasks` 根目录或漏建 active/ 层的 `{YYYYMM}/` 均不会被校验与归档;`conventions/` 属规范文件不受此限)
|
|
97
|
-
- [ ] active 内无跨文件同名任务
|
|
98
|
-
- [ ] depends_on 目标存在且无循环依赖
|
|
99
|
-
- [ ] 正文无「待实施 / 待核对 / 待评估 / TODO」等游离标记与未勾选的 `- [ ]`
|
|
100
|
-
- [ ] 归档后已做任务级规范沉淀检查(有可升格候选则经用户确认写入 conventions 载体,无则跳过)
|
|
101
|
-
- [ ] 若按项目约定提交代码:确认 `.tasks/` 全部改动(本次归档文件 + conventions 载体变更 + active 剩余任务)已纳入 git 提交范围,与代码变更同批提交
|
|
102
|
-
|
|
103
|
-
## 6. 协作约定
|
|
104
|
-
|
|
105
|
-
- 任务区是多写者共享区:先查后写,同一需求共用一个任务文件;建档与执行时遵守 conventions 载体(`.tasks/conventions/index.md`,存在时)中的项目规范,旧单文件 `conventions.md` 亦兼容读取
|
|
106
|
-
- **多人同天归档冲突**:归档文件按完成日期聚合、整文件重写,两个写者落在同一日必冲突;`pull` 后残留 git 冲突标记时跑 `toolkit tasks normalize --fix` 按并集去重 + 完成时间降序**确定性**解决(保留两侧任务块、丢弃 diff3 的 `\|\|\|\|\|\|\|` base 段与全部标记行),无需人工逐块合并
|
|
107
|
-
- **动手前置建档评估**:涉及仓库文件改动的任务,动手前先查 active/archive 判同主题(完整判别表见 SKILL.md 工作流第 1 步);active 有同主题则更新原文件;archive 有同主题且本次不产生仓库文件改动(重复提议 / 重复执行)则不重复建档,本次产生仓库文件改动(延续 / 扩展 / 重新实现)则重新建档并标注来源链
|
|
108
|
-
- **仓库文件改动口径**:需写入版本控制的工作区文件的增 / 改 / 删(源码、配置、文档、技能、任务区自身均计入);纯读取、纯执行、纯汇报不计入;拿不准时列出差异问用户,不猜
|
|
109
|
-
- **动作不算,改动才算**:收尾动作(提交、发版、推送、部署)本身及其固有产物(版本号、更新日志、标签)不构成任务、不单独建档;这些动作过程中若出现需改仓库文件才能解决的缺陷(如打包配置错误、发布渠道错误),该修复按普通任务建档
|
|
110
|
-
- **跨仓库改动各自归档(本仓自述)**:任务档是仓库自述,只记本仓的改动与动机;跨仓库是会话属性而非仓库属性,同一会话涉及多仓时各仓各自建档归档,不在一仓记录里承载另一仓的工作痕迹。判据取**视角**(描述的是不是本仓的改动与动机),非词表——依赖包名 / 被调接口名等属本仓事实者照写
|
|
111
|
-
- **归档块不可变**:已归档块是终结记录(唯一键 + 完成时间已固定),不追加新的工作内容;延续 / 扩展需求走新任务并标注来源链。唯一例外是**事实更正**——后续核实推翻原块结论、或协作口径变更导致历史事实字段需更正时,在其正文末尾追加「修订记录」(保留原结论、附更正时刻与依据);口径变更类更正可改受影响的**事实字段**(如 `scope`),但唯一键 / 完成时间 / 状态 / 负责人仍冻结。与 conventions 载体「废弃不删行」同属留痕优于抹除
|
|
112
|
-
- **验收与 CI 同源,不手写清单**:项目的验收步骤清单只允许一份真源——一条聚合命令(如 `pnpm verify`)背后由脚本定义步骤,本地与全部 CI 流水线共用它;禁止在规则文件、CI 配置里另抄一份步骤枚举。多份手写清单必然漂移,征兆就是「本地自检通过、CI 才报错」,出现该征兆先查清单是否已经漂移
|
|
113
|
-
- 强制约束到**沉淀**为止:归档 + 规范沉淀即流程终点;提交、发版、推送不是必经步骤,是否执行取决于用户的全局 / 个人 / 项目规则;若提交代码,按「归档与沉淀 → 跑项目验收命令 → git commit」的顺序执行,任务记录(归档文件 + conventions 载体)与代码变更落在同一提交
|
|
114
|
-
- **验收须晚于归档**:归档会改写任务区(写归档文件、删 active 源文件、清理空月份目录),而归档本身不做阻断式校验——早于归档跑验收就覆盖不到终态,归档产物等于无人校验。同理,归档块「完成情况」只记改动事实与所用验证命令,不逐条抄写验收输出(归档在前、验收在后,抄结果就成了先写结论后验证)
|
|
1
|
+
# 任务文件规范(通用版)
|
|
2
|
+
|
|
3
|
+
> 面向多人 + AI 协作,任何语言项目可直接使用,仅依赖文件读写能力。本文件为 SKILL.md 的配套规范,是 @fxri/toolkit 仓库 `SPEC.md` 的通用裁剪版(去实现化,供非 toolkit 项目直接使用);两者重叠段以 `SPEC.md` 为单一事实源,本文件新增或改动须回写 `SPEC.md`。
|
|
4
|
+
|
|
5
|
+
## 1. 目录结构
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
.tasks/
|
|
9
|
+
├── active/ # 进行中的任务
|
|
10
|
+
│ └── {YYYYMM}/ # 月份子目录,如 202609
|
|
11
|
+
│ └── {YYYYMMDD}-{用户名}-{任务简述}.md
|
|
12
|
+
├── archive/ # 已终结任务归档
|
|
13
|
+
│ └── {YYYYMM}/
|
|
14
|
+
│ └── {YYYYMMDD}.md # 按完成日期归组的归档文件
|
|
15
|
+
└── conventions/ # 项目协作规范载体(可选,从任务提炼的规范沉淀地)
|
|
16
|
+
├── index.md # 唯一入口与唯一权威(首行为形态标记):端清单 + 每条一行指针(首列稳定 ID)
|
|
17
|
+
├── history.md # 规范演进记录(仅追加、不改旧行;只记规范语义变更)
|
|
18
|
+
├── common.md # 全端通用条文(按需创建)
|
|
19
|
+
└── <端名>.md # 各端专有条文,端名 = 任务 scope 取值(按需创建)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
目录名 `.tasks` 为默认约定,项目可自定(如集中式任务库按项目分子目录),内部子结构不变。
|
|
23
|
+
|
|
24
|
+
`index.md` 首行为形态标记(`<!-- toolkit-conventions: v3 -->`),索引表首列是稳定 ID(`C-<n>`);无标记的 v1、标记为 `v2` 的旧形态仍合法、`check` 不告警,可用 `toolkit conventions upgrade` 升级。载体结构、端名规则、分层读写判定与存量迁移见 `conventions-spec.md`。
|
|
25
|
+
|
|
26
|
+
`conventions/` 不是任务文件:tasks 各子命令不读其内容,check 不会因内容告警(仅在载体形态异常与入口层现场异常时软告警,口径见 `conventions-spec.md`);它只作为 AI 协作时的规范源,由 fxri-plan-to-task 归档时与 fxri-session-recap 收尾时维护(写入前需用户确认)。
|
|
27
|
+
|
|
28
|
+
## 2. active 任务文件
|
|
29
|
+
|
|
30
|
+
### 2.1 命名
|
|
31
|
+
|
|
32
|
+
`{YYYYMMDD}-{用户名}-{任务简述}.md`
|
|
33
|
+
|
|
34
|
+
- 年月日 = 任务创建日,`YYYYMMDD` 直接拼接(不加 `-`)
|
|
35
|
+
- 用户名 = git 用户名;任务简述 = 不含空格的短语
|
|
36
|
+
|
|
37
|
+
### 2.2 frontmatter
|
|
38
|
+
|
|
39
|
+
```yaml
|
|
40
|
+
---
|
|
41
|
+
owner: 唐启云 # 负责人(git 用户名)
|
|
42
|
+
status: 进行中 # 待办 / 进行中 / 已完成 / 阻塞 / 已放弃
|
|
43
|
+
created: 20260902 # 创建日 YYYYMMDD,须等于文件名日期前缀
|
|
44
|
+
updated: 20260902 # 最近更新日 YYYYMMDD
|
|
45
|
+
completed: '' # 完成时间 YYYY-MM-DD HH:mm;仅终结态必填
|
|
46
|
+
depends_on: [] # 依赖的任务文件名(可带 .md),目标必须存在且不得成环
|
|
47
|
+
scope: app # 影响范围;只标本仓内的端 / 面(跨仓库改造时不含另一仓);多值以半角加号分隔(web+server),标签内不使用加号;顿号/逗号列表属误写会触发 check 软告警,中文列表请改用加号
|
|
48
|
+
---
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- `已完成` / `已放弃` 为终结态:进入时必须补 `completed`(真实收工时间)。⚠️ `completed` 按**四级时间源**取证,禁止凭记忆估算、取对话时间或做时区换算:
|
|
52
|
+
1. **当场打点**(首选):任务完成时立即执行命令取真实时间(Windows `Get-Date -Format "yyyy-MM-dd HH:mm"`,macOS/Linux `date "+%Y-%m-%d %H:%M"`)
|
|
53
|
+
2. **聊天记录准确时间戳**:用户贴过的日志/终端输出时间戳、用户口述的确定时刻
|
|
54
|
+
3. **任务改动 git 提交时间**:`git log --format="%h %ci" <file>` 按提交时间取证
|
|
55
|
+
4. **系统当前时间兜底**:前三级皆不可得时当场取时,并在正文标注「时间为收尾补记」
|
|
56
|
+
|
|
57
|
+
工具对「完成时间晚于当前系统时间」会告警(时间源错误的典型症状)——为免跨时区误报,工具留最大正偏移(UTC+14)容差,实则晚于当前时刻 14 小时以上才告警;完成时间恰为零点整(如 `2026-09-05 00:00`,只填日期被自动补零的典型特征)亦会告警,需人工核实。归档块完成时间早于归档动作时间属正常(补档/历史修正场景),迁移由 `normalize --fix` 自动完成
|
|
58
|
+
- 正文以 `# 任务标题` 开头;游离待办子项必须拆为独立任务文件
|
|
59
|
+
|
|
60
|
+
## 3. 归档文件
|
|
61
|
+
|
|
62
|
+
- 命名 `{YYYYMMDD}.md`,日期 = 任务完成时间日期;放入 `archive/{YYYYMM}/`
|
|
63
|
+
- 文件头:`# {YYYYMMDD} 归档` + 引言(如自动生成说明)
|
|
64
|
+
- 每个任务块:
|
|
65
|
+
|
|
66
|
+
```markdown
|
|
67
|
+
## {YYYYMMDD}-{用户名}-{任务简述}
|
|
68
|
+
|
|
69
|
+
> 负责人:{owner} 状态:{status} 范围:{scope} 完成时间:{completed}
|
|
70
|
+
|
|
71
|
+
(任务正文)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
- 块间以 `---` 分隔;**全文件按完成时间降序**(最新在前)
|
|
75
|
+
- 元数据行以 `> ` 开头、四字段齐全、以全角空格分隔
|
|
76
|
+
|
|
77
|
+
## 4. 手工归档步骤(有序)
|
|
78
|
+
|
|
79
|
+
1. 确认任务 status 为终结态且 `completed` 已填
|
|
80
|
+
2. 计算目标文件 `archive/{completed 的 YYYYMM}/{completed 的 YYYYMMDD}.md`
|
|
81
|
+
3. 读取已有归档文件(不存在则新建含文件头),把任务块加入
|
|
82
|
+
4. 全文件按 `completed` 降序重排,块间补 `---` 分隔
|
|
83
|
+
5. 写回归档文件
|
|
84
|
+
6. 删除 active 源文件;月份子目录与 `active/` 若已空则一并删除
|
|
85
|
+
|
|
86
|
+
⚠️ 多人同天归档、`pull` 后归档文件残留 git 冲突标记(`<<<<<<<` / `=======` / `>>>>>>>`,diff3 风格另有 `|||||||` base 段)时,按步骤 3-5 取冲突两侧任务块**并集、去重**后重新降序写回,删除全部标记行与 base 段即可;可跑 `toolkit tasks normalize --fix` 自动完成(按并集去重 + 完成时间降序确定性解决,无需人工逐块合并)。
|
|
87
|
+
|
|
88
|
+
## 5. 自查清单(校验)
|
|
89
|
+
|
|
90
|
+
- [ ] frontmatter 存在且七字段齐全
|
|
91
|
+
- [ ] status 为五枚举之一;终结态已填 completed
|
|
92
|
+
- [ ] completed 为 `YYYY-MM-DD HH:mm` 且日期真实存在,且不晚于当前系统时间(时间按四级时间源取证:当场打点 / 聊天记录时间戳 / git 提交时间 / 兜底标注补记,非估算)
|
|
93
|
+
- [ ] created 为 YYYYMMDD 且等于文件名日期前缀
|
|
94
|
+
- [ ] 文件名符合 `{YYYYMMDD}-{用户名}-{任务简述}.md`
|
|
95
|
+
- [ ] 任务文件放在 `active/{YYYYMM}/` 月份子目录,不直放 active 根目录
|
|
96
|
+
- [ ] `.tasks/` 下无游离于 active/ 之外的任务文件(直放 `.tasks` 根目录或漏建 active/ 层的 `{YYYYMM}/` 均不会被校验与归档;`conventions/` 属规范文件不受此限)
|
|
97
|
+
- [ ] active 内无跨文件同名任务
|
|
98
|
+
- [ ] depends_on 目标存在且无循环依赖
|
|
99
|
+
- [ ] 正文无「待实施 / 待核对 / 待评估 / TODO」等游离标记与未勾选的 `- [ ]`
|
|
100
|
+
- [ ] 归档后已做任务级规范沉淀检查(有可升格候选则经用户确认写入 conventions 载体,无则跳过)
|
|
101
|
+
- [ ] 若按项目约定提交代码:确认 `.tasks/` 全部改动(本次归档文件 + conventions 载体变更 + active 剩余任务)已纳入 git 提交范围,与代码变更同批提交
|
|
102
|
+
|
|
103
|
+
## 6. 协作约定
|
|
104
|
+
|
|
105
|
+
- 任务区是多写者共享区:先查后写,同一需求共用一个任务文件;建档与执行时遵守 conventions 载体(`.tasks/conventions/index.md`,存在时)中的项目规范,旧单文件 `conventions.md` 亦兼容读取
|
|
106
|
+
- **多人同天归档冲突**:归档文件按完成日期聚合、整文件重写,两个写者落在同一日必冲突;`pull` 后残留 git 冲突标记时跑 `toolkit tasks normalize --fix` 按并集去重 + 完成时间降序**确定性**解决(保留两侧任务块、丢弃 diff3 的 `\|\|\|\|\|\|\|` base 段与全部标记行),无需人工逐块合并
|
|
107
|
+
- **动手前置建档评估**:涉及仓库文件改动的任务,动手前先查 active/archive 判同主题(完整判别表见 SKILL.md 工作流第 1 步);active 有同主题则更新原文件;archive 有同主题且本次不产生仓库文件改动(重复提议 / 重复执行)则不重复建档,本次产生仓库文件改动(延续 / 扩展 / 重新实现)则重新建档并标注来源链
|
|
108
|
+
- **仓库文件改动口径**:需写入版本控制的工作区文件的增 / 改 / 删(源码、配置、文档、技能、任务区自身均计入);纯读取、纯执行、纯汇报不计入;拿不准时列出差异问用户,不猜
|
|
109
|
+
- **动作不算,改动才算**:收尾动作(提交、发版、推送、部署)本身及其固有产物(版本号、更新日志、标签)不构成任务、不单独建档;这些动作过程中若出现需改仓库文件才能解决的缺陷(如打包配置错误、发布渠道错误),该修复按普通任务建档
|
|
110
|
+
- **跨仓库改动各自归档(本仓自述)**:任务档是仓库自述,只记本仓的改动与动机;跨仓库是会话属性而非仓库属性,同一会话涉及多仓时各仓各自建档归档,不在一仓记录里承载另一仓的工作痕迹。判据取**视角**(描述的是不是本仓的改动与动机),非词表——依赖包名 / 被调接口名等属本仓事实者照写
|
|
111
|
+
- **归档块不可变**:已归档块是终结记录(唯一键 + 完成时间已固定),不追加新的工作内容;延续 / 扩展需求走新任务并标注来源链。唯一例外是**事实更正**——后续核实推翻原块结论、或协作口径变更导致历史事实字段需更正时,在其正文末尾追加「修订记录」(保留原结论、附更正时刻与依据);口径变更类更正可改受影响的**事实字段**(如 `scope`),但唯一键 / 完成时间 / 状态 / 负责人仍冻结。与 conventions 载体「废弃不删行」同属留痕优于抹除
|
|
112
|
+
- **验收与 CI 同源,不手写清单**:项目的验收步骤清单只允许一份真源——一条聚合命令(如 `pnpm verify`)背后由脚本定义步骤,本地与全部 CI 流水线共用它;禁止在规则文件、CI 配置里另抄一份步骤枚举。多份手写清单必然漂移,征兆就是「本地自检通过、CI 才报错」,出现该征兆先查清单是否已经漂移
|
|
113
|
+
- 强制约束到**沉淀**为止:归档 + 规范沉淀即流程终点;提交、发版、推送不是必经步骤,是否执行取决于用户的全局 / 个人 / 项目规则;若提交代码,按「归档与沉淀 → 跑项目验收命令 → git commit」的顺序执行,任务记录(归档文件 + conventions 载体)与代码变更落在同一提交
|
|
114
|
+
- **验收须晚于归档**:归档会改写任务区(写归档文件、删 active 源文件、清理空月份目录),而归档本身不做阻断式校验——早于归档跑验收就覆盖不到终态,归档产物等于无人校验。同理,归档块「完成情况」只记改动事实与所用验证命令,不逐条抄写验收输出(归档在前、验收在后,抄结果就成了先写结论后验证)
|
|
@@ -3,14 +3,14 @@ name: fxri-release-changelog
|
|
|
3
3
|
description: 基于 changesets 的发版与多语言 CHANGELOG 维护流程:创建变更集、消费发版、把分组标题与条目转为项目语言风格、清理变更集、打标签发布;无 changesets 的项目提供同格式手工模式。当用户表达发版或记录变更意图——含创建变更集、changeset、发版、version、CHANGELOG 格式化等说法及其口语近义表达(如发一版、出个版本、记一下这次改动、生成更新日志)时使用。⚠️ 注意区分:用户说「提交个版本 / 先提交一版 / commit」通常指 git 提交当前改动(走任务收尾后提交),**不是发版**。不用于日常 commit message 撰写、git 提交操作或与发版无关的文档修改。
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.1.
|
|
6
|
+
version: "1.1.9"
|
|
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.
|
|
13
|
+
> 本技能版本 1.1.9(随 @fxri/toolkit 同批分发)。被问版本时即报此值——不读磁盘、不跑 CLI:报出的值就是本会话上下文里已加载内容的版本,可与 `toolkit skills status` 打印的磁盘基准值对照,不一致即说明会话上下文已过期,开新会话即可。
|
|
14
14
|
|
|
15
15
|
## 何时使用
|
|
16
16
|
|
|
@@ -31,7 +31,7 @@ metadata:
|
|
|
31
31
|
|
|
32
32
|
## changesets 流程
|
|
33
33
|
|
|
34
|
-
1. 记录变更:`npx changeset
|
|
34
|
+
1. 记录变更:`npx changeset`(或项目包管理器等价脚本)——**变更描述一律逐条以 `- 类型:描述` 书写**:既要 `类型:` 前缀(如 `新增:` / `修复:` / `优化:`)作归类信号,也要 `- ` 列表标记把每条独立成项(缺标记的裸行会被 changesets 并入相邻条目作缩进续行,整段塌成单一条目、只有首行归组剥前缀);并按改动的**能力量级**选影响级别(破坏性→major、全新大功能/独立新能力→minor、存量能力上的修补与增量→patch,完整对照见 `references/changelog-format.md`)。写完可跑 `toolkit tasks check` 早期自查:它扫 `.changeset/` 下待发布变更集,逐文件报出缺前缀条目与未加 `- ` 标记的裸行及条数(免得到发版、变更集源被消费删除后才由 changelog 侧兜底告警——那时已无从补写)
|
|
35
35
|
2. 消费发版:`npx changeset version`——自动写版本号与 CHANGELOG
|
|
36
36
|
3. 格式化:按 `references/changelog-format.md` 的语义分组规则归类条目、转换分组标题、润色为项目语言风格(中文示例:`### Patch Changes` 下的 `- 修复:xxx` → `### 🐛 问题修复` 下的 `- xxx`——归类后类型前缀被剥离,类型由分组标题承接);分组维度与 bump 维度正交,条目归组只看类型前缀
|
|
37
37
|
4. 归一:润色后跑一次 `toolkit changelog --history format`——人工润色(含补写历史块明细)容易在条目之间留空行,该命令按「同组顶层条目逐行相邻」重排历史块;项目另有更新日志镜像页(如 `docs/changelog.md`)时再跑一次同步脚本,否则镜像一致性校验会失败
|
|
@@ -54,6 +54,7 @@ metadata:
|
|
|
54
54
|
| 条目与仓库既有风格不一致 | 人工润色为项目语言与句式,勿保留机器直译 |
|
|
55
55
|
| 变更集遗漏(发版后才发现功能未记录) | 补建变更集随下次发版;本次在发布说明中人工补充 |
|
|
56
56
|
| `toolkit tasks check` 报「变更集条目缺类型前缀」 | 打开所列文件,给缺前缀的**顶层条目**按「类型:描述」补前缀(缩进续行随父条目迁属、无需加);补前缀只改分类信号,不改变 bump 级别 |
|
|
57
|
+
| `toolkit tasks check` 报「变更集条目未加「- 」列表标记」 | 打开所列文件,把裸行逐条改为 `- 类型:描述`(列 0 起首、无 `- ` 标记的行会被 changesets 并入相邻条目作续行,整段塌成单一条目、只有首行归组剥前缀);若已发版才发现,说明该版本块条目可能已挤在单组且前缀未剥离,按 references 的「人工事实更正」修 `CHANGELOG.md` 并重跑镜像页同步 |
|
|
57
58
|
| 改动已发布却无归档记录(有提交、无任务档) | 先补归档(fxri-session-recap 模式一)再继续发布后续步骤;发版本身不补建档 |
|
|
58
59
|
| 发版后历史块内出现多余空行(`自举一致性` 类零改动用例失败) | 跑 `toolkit changelog --history format` 归一(**必须带 `--history`**,默认模式不动历史块),再补跑一次镜像页同步脚本 |
|
|
59
60
|
| 格式化时 stderr 报「归类后条目数由 N 降为 M,疑似丢失内容」 | 归类只应搬移条目,减少即疑似丢内容:核对该版本块是否含非纯条目分组(标题下先出现正文)或被保留分组;确认属正常去重可忽略,否则按 references 的归类规则修回 |
|
|
@@ -68,6 +69,6 @@ metadata:
|
|
|
68
69
|
- `toolkit changelog format`:仅格式化既有 CHANGELOG
|
|
69
70
|
- `toolkit changelog --history format`:连带追溯改写历史版本块(用户主动要求修正历史块时才加,默认不动)
|
|
70
71
|
- `toolkit changelog --lang <语言> …`:切换输出语言(内置 zh / en,其余可配置扩展)
|
|
71
|
-
- `toolkit tasks check`:扫 `.changeset/`
|
|
72
|
+
- `toolkit tasks check`:扫 `.changeset/` 下待发布变更集并逐文件报出缺前缀条目与未加 `- ` 标记的裸行(流程第 1 步的早期自查入口,归档前的 `tasks check` 即含此项)
|
|
72
73
|
- ⚠️ `changelog` 域开了选项透传,自有选项(`--lang` / `--history` / `--redact` / `--warn`)必须写在子命令**之前**:`toolkit changelog --history format` 生效,写成 `toolkit changelog format --history` 会被 changesets 静默忽略(表现为「无 CHANGELOG 需要更新」)
|
|
73
74
|
- `toolkit skills install` / `toolkit skills status`:把本包 fxri-* 技能分发到目标技能目录(`--scope` 缺省按 CLI 安装位置自动判定全局面 / 项目面;项目面真源落 `<仓库根>/.agents/skills/`、其余候选目录落入口薄壳,随仓库入库后队友 clone 即用)/ 查看链接、副本与项目面现场(技能随包同源分发,与 CLI 同一发布批次;技能内容版本独立编号,`skills status` 会打印各技能真源版本)
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
|
|
21
21
|
- 版本标题 `## {版本号}`;隔一行后接引用行 `> {YYYY-MM-DD} 发布`(标题与日期行之间保留一个空行)
|
|
22
22
|
- 分组标题 = emoji + 组名,一行一组,按**语义分组顺序**输出——重大变更 → 新增功能 → 功能调整 → 优化改进 → 问题修复 → 文档更新 → 清理移除 → 依赖变更 → 其他变更;空组省略
|
|
23
|
-
-
|
|
23
|
+
- 条目一行一条,每条**须以 `- ` 列表标记开头**(仅 `- ` 列表项被逐条收录);项目语言句式(中文条目句末不加句号),与仓库既有风格一致
|
|
24
|
+
- ⚠️ **务必逐条写成 `- 类型:描述`**:变更集正文里列 0 起首、无 `- ` 标记的裸行会被 changesets 并入相邻条目作缩进续行——整段正文塌成**单一条目**,只有首行参与前缀识别与归类,其余行既不归组也不剥前缀,最终全挤在首行所属的单组里(本仓 v1.12.0 块的成因)。`toolkit tasks check` 对裸行(前缀开头、连续 2 行起)报软告警,归档前据此自查
|
|
24
25
|
- 同一分组内顶层条目**逐行相邻输出**(条目之间不留空行,缩进子项紧随父条目),分组之间与日期行前后各留一个空行——这是格式化的**不动点**:合规文件重复执行 `toolkit changelog format` 应零改动,`--history` 归一之后同理
|
|
25
26
|
- ⚠️ 变更集条目以 `- ` 开头时,changesets 会写入 `- - 条目` 首行并把后续行缩进 2 空格(伪影);`toolkit changelog version/format` 会自动还原为顶层条目,手工模式需手动清理
|
|
26
27
|
- 分组标题集合随版本演进而变化;**历史版本块保留当时口径,`toolkit changelog format` 不追溯改写**(只归类 changesets 本次新写入的英文源标题块)
|
|
@@ -46,7 +47,7 @@
|
|
|
46
47
|
|
|
47
48
|
**无前缀条目的兜底规则**:按条目**所属源组标题**声明的影响级别归组——`### Major Changes` → `breaking`、`### Minor Changes` → `added`、`### Patch Changes` → `other`;不从版本号推导。
|
|
48
49
|
|
|
49
|
-
|
|
50
|
+
**缺前缀与裸行的检测入口**:`toolkit tasks check` 扫 `.changeset/` 下待发布变更集(`.md` 且非 `README.md`),逐文件报出两类软告警——**缺类型前缀**的顶层条目数与首条行号、以及**未加 `- ` 列表标记**的裸行数与首条行号(后者取列 0 起首、以已识别前缀开头且连续 2 行起的行,阈值 2 避开正常正文误报);归档前的早期自查,发版时 changelog 侧另有兜底告警。前缀识别取全局表与各配置语言 `prefixes` 的并集(自定义语言不误报),依赖源条目归 `deps` 不计缺前缀,缩进续行随父条目迁属、不参与识别。
|
|
50
51
|
|
|
51
52
|
**追溯历史块的兜底规则**(`--history`):历史块没有英文源组标题,改按**所属既有组标题**查槽位——先查当前语言组标题,再查历史组标题表(如 `### 🐛 补丁修复` → `fixed`);两处都识别不出则整组连同标题保留、不臆造归属。
|
|
52
53
|
|
|
@@ -3,14 +3,14 @@ name: fxri-session-recap
|
|
|
3
3
|
description: 会话收尾的工作记忆沉淀 + 新会话开场恢复 + 历史任务时间修正:收尾时把整场会话的全部任务完整建档归档,按四级时间源还原真实完成时间,沉淀规范进 conventions 载体;新会话开场按三层恢复(全量索引 + active 精读 + 近窗归档)重建现场并核对规范;也可批量修正历史归档时间。当用户表达会话收尾意图(如今天先到这、收个尾、归档本次会话、把结论记下来)、接续意图(如恢复上下文、继续上次、上次做到哪)、或修正历史任务时间时使用。不用于会话中途的常规方案建档(那是 fxri-plan-to-task 的职责)、与工作交接无关的代码技术总结。
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.4.1"
|
|
7
7
|
author: fxri
|
|
8
8
|
source: https://github.com/fxri-net/toolkit
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# 会话归档、上下文恢复与历史修正
|
|
12
12
|
|
|
13
|
-
> 本技能版本 1.
|
|
13
|
+
> 本技能版本 1.4.1(随 @fxri/toolkit 同批分发)。被问版本时即报此值——不读磁盘、不跑 CLI:报出的值就是本会话上下文里已加载内容的版本,可与 `toolkit skills status` 打印的磁盘基准值对照,不一致即说明会话上下文已过期,开新会话即可。
|
|
14
14
|
|
|
15
15
|
## 何时使用
|
|
16
16
|
|
|
@@ -60,23 +60,23 @@ metadata:
|
|
|
60
60
|
|
|
61
61
|
### R3 规范落点:`.tasks/conventions/` 载体(两级沉淀同一载体)
|
|
62
62
|
|
|
63
|
-
- 唯一落点 `.tasks/conventions/`(纯 Markdown 随 git 走):`index.md` 唯一入口(形态标记 + 端清单 +
|
|
63
|
+
- 唯一落点 `.tasks/conventions/`(纯 Markdown 随 git 走):`index.md` 唯一入口(形态标记 + 端清单 + 活跃索引表,首列为稳定 ID `C-<n>`),`history.md` 承载语义演进记录(独立文件、仅追加),`retired.md` 承载退休台账(条目作废时迁入、冻结语义,按需创建),`common.md` 承载所有端通用条文,`<端名>.md`(或分类标签分册)承载各端专属条文;每条规范带来源任务与日期,可审计
|
|
64
64
|
- **任务级**(fxri-plan-to-task 归档时):单任务产出可升格规范才追加,无则完全静默
|
|
65
65
|
- **会话级**(本技能收尾时):聚合全会话候选,与已有规范**合并去重**——跨任务重复模式在此补,用户明示规则兜底
|
|
66
66
|
- **归属判定**:先问「是否**所有端都适用**」→ 是则归 `common`;否则逐端确认后写入命中的端分册。⚠️ 禁止跨端合并归属(真全端才升 `common`,只适用几端则各端各记一条);`common` 的语义是「所有端」不是「不确定归哪端」的暂存区
|
|
67
|
-
- **端名**:与任务 frontmatter `scope` 取值**逐字一致**(任务写 `scope: web+server` → 读 `web.md` + `server.md
|
|
67
|
+
- **端名**:与任务 frontmatter `scope` 取值**逐字一致**(任务写 `scope: web+server` → 读 `web.md` + `server.md`,无论命中与否**恒叠加 `common.md`**;`scope` 中非端值且存在同名分册者按分类标签分册加载);`index.md` 顶部「端清单」是端的**唯一权威**,不扫目录
|
|
68
68
|
- 写前**必须用户确认**;同义规范不重复记录,只补差异或合并增强
|
|
69
69
|
- **表格形态**:载体与任务区表格一律**紧凑形态**(单元格间只留一个空格,不做列对齐填充);手工写表不为对齐补空格,已有填充用 `toolkit conventions format` 归一(幂等、跳过代码块、不改语义),源头由 `toolkit init` 托管的 `.prettierignore` 排除任务区
|
|
70
70
|
- 一次性决策留在任务正文,不进规范(升格标准:重复出现 ≥2 次,或用户明示「以后都要这样」)
|
|
71
|
-
- **内容修订 vs
|
|
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` 软告警提示人工归一
|
|
72
72
|
- ⚠️ 兼容读:先找 `conventions/index.md`,不存在再看旧单文件 `conventions.md`(提示可迁移);两者并存时以目录形态为准
|
|
73
|
-
-
|
|
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`
|
|
74
74
|
|
|
75
75
|
### 规范提炼子流程(三模式共用)
|
|
76
76
|
|
|
77
77
|
1. 对照 conventions 载体收集候选:会话中用户明示的规则、与已有规范重复印证的决策、跨任务重复模式
|
|
78
78
|
2. 输出候选清单(每条含来源任务、建议归属与理由),交用户确认
|
|
79
|
-
3. 用户确认后写入载体:`index.md` 补索引行(首列稳定 ID `C-<n>` /
|
|
79
|
+
3. 用户确认后写入载体:`index.md` 补索引行(首列稳定 ID `C-<n>` / 归属),条文归位到 `common.md` 或命中的端分册 / 分类标签分册;语义变更先在 `history.md` 追加一行留痕,条目作废按三层清理迁入 `retired.md`
|
|
80
80
|
4. 无候选时完全静默,不强加流程
|
|
81
81
|
|
|
82
82
|
## 模式一:沉淀本次会话
|