@fxri/toolkit 1.9.5 → 1.10.0
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 +23 -5
- package/SPEC.md +7 -4
- package/dist/cli.cjs +53 -30
- package/dist/cli.js +57 -34
- package/dist/index.cjs +22 -22
- package/dist/index.js +26 -26
- package/package.json +1 -1
- package/skills/README.md +5 -3
- package/skills/fxri-plan-to-task/SKILL.md +12 -10
- package/skills/fxri-plan-to-task/references/conventions-spec.md +147 -0
- package/skills/fxri-plan-to-task/references/task-spec.md +10 -7
- package/skills/fxri-release-changelog/SKILL.md +8 -6
- package/skills/fxri-release-changelog/references/changelog-format.md +1 -0
- package/skills/fxri-session-recap/SKILL.md +18 -13
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# 规范载体规范(conventions)
|
|
2
|
+
|
|
3
|
+
> 面向多人 + AI 协作,任何语言项目可直接使用,仅依赖文件读写能力。本文件为 SKILL.md 的配套规范,定义 `.tasks/conventions/` 的目录结构、归属分类、读写判定与存量迁移;任务文件本身的规范见 `task-spec.md`。
|
|
4
|
+
|
|
5
|
+
## 1. 载体结构
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
.tasks/
|
|
9
|
+
├── active/ # 进行中的任务
|
|
10
|
+
├── archive/ # 已终结任务归档
|
|
11
|
+
└── conventions/ # 项目协作规范载体
|
|
12
|
+
├── index.md # 唯一入口与唯一权威(常驻读)
|
|
13
|
+
├── common.md # 全端通用条文(按需创建)
|
|
14
|
+
└── <端名>.md # 各端专有条文(按需创建)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
- `index.md` 是唯一入口:端清单在此声明、每条规范在此留一行指针,读取时只读它即可掌握规范全貌
|
|
18
|
+
- 分册**按需创建**,判据是「该归属下有无需独立承载的条文」,不设条数阈值——溯源索引式项目可能始终只有 `index.md`
|
|
19
|
+
- 目录与任务目录同在 `.tasks/` 根层,纯 Markdown 随 git 走;默认 `.tasks` 目录名可随任务区自定而变,内部结构不变
|
|
20
|
+
- 非任务文件:`toolkit tasks` 各子命令不读其内容,`check` 不因内容告警;仅在**载体形态异常**时给软告警(旧单文件残留、缺 `index.md`)
|
|
21
|
+
|
|
22
|
+
## 2. index.md 结构
|
|
23
|
+
|
|
24
|
+
四节固定顺序:端清单 → 索引 → 演进记录 → 用法说明。
|
|
25
|
+
|
|
26
|
+
### 2.1 端清单(唯一权威)
|
|
27
|
+
|
|
28
|
+
```markdown
|
|
29
|
+
## 一、端清单
|
|
30
|
+
|
|
31
|
+
> 端名与任务 frontmatter 的 `scope` 取值共用同一套词表;保留字 `index` / `common` 不得作端名。
|
|
32
|
+
|
|
33
|
+
| 端名 | 说明 |
|
|
34
|
+
| --- | --- |
|
|
35
|
+
| web | 前端主站 |
|
|
36
|
+
| server | 后端服务 |
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
单端项目写一行或留空表并注明「本项目单端,规范全归 common」。
|
|
40
|
+
|
|
41
|
+
### 2.2 索引表
|
|
42
|
+
|
|
43
|
+
```markdown
|
|
44
|
+
| # | 规则 | 当前语义 | 归属 | 状态 | 确立来源任务 | 单一事实源 |
|
|
45
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
46
|
+
| 1 | 四级时间源 | 时间取证优先级:当场打点 > 聊天记录时间戳 > git 提交时间 > 系统时间兜底 | common | 生效 | 20260906-会话收尾沉淀能力升级 | task-spec.md(口径随版本走) |
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
- **归属**:取值必须 ∈ {`common`} ∪ 端清单,否则为悬空指针(需修正)
|
|
50
|
+
- **状态**:`生效` / `已废弃`;废弃不删行,改状态即可(与「归档任务不可变」同哲学:留痕优于抹除)
|
|
51
|
+
- **单一事实源**:条文正文去哪看。已指向项目现有规则层(AGENTS / 全局规则 / skills)时填指向;条文就在本载体分册内时填分册名(如 `common.md`)
|
|
52
|
+
|
|
53
|
+
### 2.3 演进记录(修订留痕)
|
|
54
|
+
|
|
55
|
+
规则语义变更不覆盖丢史:先在演进记录追加一行(规则 → 旧语义 → 变更为 → 修订来源任务),再更新索引表当前语义。
|
|
56
|
+
|
|
57
|
+
```markdown
|
|
58
|
+
| 规则 | 修订内容 | 修订来源任务 |
|
|
59
|
+
| --- | --- | --- |
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 2.4 用法说明
|
|
63
|
+
|
|
64
|
+
写明本项目采用哪种形态、读写判定要点、以及规则层源头变更时的同步纪律。
|
|
65
|
+
|
|
66
|
+
## 3. 分册结构
|
|
67
|
+
|
|
68
|
+
```markdown
|
|
69
|
+
# 全端通用规范(common)
|
|
70
|
+
|
|
71
|
+
> 归属:common(所有端适用)。条文全文见本节,索引见 index.md。
|
|
72
|
+
|
|
73
|
+
## 1. 四级时间源
|
|
74
|
+
|
|
75
|
+
(条文全文)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
端分册同构,首部 `# {端名} 规范`、`> 归属:{端名}`。
|
|
79
|
+
|
|
80
|
+
## 4. 端名规则
|
|
81
|
+
|
|
82
|
+
- **与任务 frontmatter `scope` 取值逐字一致**:两者共用同一套词表,读取时才能机械匹配(任务写 `scope: web+server` → 加载 `web.md` + `server.md`)
|
|
83
|
+
- **形态约束**:非空、不含空格、不含路径分隔符(`/ \ : * ? " < > |`)
|
|
84
|
+
- **保留字**:`index`、`common` 不得作端名
|
|
85
|
+
- **风格**:随项目 `scope` 既有写法(`web` / `server` / `admin` / `前端` 均成立),无全局词表——工具无法预知项目端构成,故不硬编码取值
|
|
86
|
+
|
|
87
|
+
## 5. 读取判定(分层)
|
|
88
|
+
|
|
89
|
+
1. **常驻**:只读 `index.md`(端清单 + 索引),成本与规范条数成线性、不随分册增大
|
|
90
|
+
2. **按需**:取当前任务 `scope` 的每个值 → 命中端清单的加载对应分册,再叠加 `common.md`
|
|
91
|
+
3. **非端值**:`scope` 中不在端清单的值视为分类标签,静默跳过,不报错
|
|
92
|
+
4. **空 scope**:只加载 `common.md`(保守,不臆测端归属)
|
|
93
|
+
|
|
94
|
+
## 6. 写入判定(沉淀归属)
|
|
95
|
+
|
|
96
|
+
1. 先问「这条是否**所有端都适用**」→ 是则归 `common`
|
|
97
|
+
2. 否则逐端确认「适用于哪些端」→ 写入命中的端分册
|
|
98
|
+
3. **禁止跨端合并归属**:不得出现「web+server 共识」这类跨端条目——真全端升 `common`,只适用几端则各端各记一条
|
|
99
|
+
4. `common` 语义锁死为「所有端都适用」,**不得用作「不确定归哪端」的暂存区**,否则会退化为垃圾桶
|
|
100
|
+
5. 写入前须经用户确认;一次性决策不升格为规范,留在任务正文
|
|
101
|
+
|
|
102
|
+
## 7. 两种形态
|
|
103
|
+
|
|
104
|
+
形态差异体现在分册是否存在与「单一事实源」列取值,**不是结构二选一**:
|
|
105
|
+
|
|
106
|
+
| 形态 | 适用 | 表现 |
|
|
107
|
+
| --- | --- | --- |
|
|
108
|
+
| 溯源索引式 | 项目已有规则层(AGENTS / 全局规则 / skills) | 不复制条文,索引行「当前语义」写简版语义、「单一事实源」写指向;可能只有 `index.md` |
|
|
109
|
+
| 条文式 | 无其他规则文件的项目 | 条文全文写入对应归属分册,本载体即项目唯一规范载体 |
|
|
110
|
+
|
|
111
|
+
同一项目内可混用:部分规则指向外部规则层、部分条文落在本载体。
|
|
112
|
+
|
|
113
|
+
## 8. 内容修订
|
|
114
|
+
|
|
115
|
+
- 语义变更:先在「演进记录」留痕,再更新索引表当前语义;条文在分册内的同步改分册
|
|
116
|
+
- 规则作废:索引行状态改 `已废弃`,不删行、不删分册条目
|
|
117
|
+
- 规则层源头变更(AGENTS / 全局规则 / skills 条文改了):同步检查索引对应行当前语义是否需更新,随该变更同批落盘
|
|
118
|
+
|
|
119
|
+
## 9. 存量迁移(旧单文件 → 目录形态)
|
|
120
|
+
|
|
121
|
+
触发:`toolkit tasks check` 报旧 `conventions.md` 存在;或用户直接要求迁移。
|
|
122
|
+
|
|
123
|
+
**三段式**(可中断,中途停下不丢内容):
|
|
124
|
+
|
|
125
|
+
1. **机器搬骨架**:建 `conventions/`,旧文件**整体**搬为 `index.md`(原文一字不丢),删除旧文件——此刻 `index.md` 是原文快照,功能上与旧文件等价
|
|
126
|
+
2. **AI 提归属建议**:读原有条目,逐条给出「`common` / 某端」建议与理由(旧文件无端信息,语义分流无法机械完成),形成待确认清单
|
|
127
|
+
3. **用户逐条确认**:确认后写索引行 + 把条文全文拆入对应分册;**未确认的条目保持原样留在 `index.md`**,不强推
|
|
128
|
+
|
|
129
|
+
补充要求:
|
|
130
|
+
|
|
131
|
+
- 迁移与内容重排分开做:先完成形态迁移(结构到位),再谈条目归属调整,避免一次变更混合两种风险
|
|
132
|
+
- 端清单在迁移时同步建立:从项目已有 `scope` 取值与实际子项目构成归纳,经用户确认写入端清单节
|
|
133
|
+
- 旧文件已不存在时不重复迁移
|
|
134
|
+
|
|
135
|
+
## 10. 兼容读(迁移期)
|
|
136
|
+
|
|
137
|
+
读取时先找 `conventions/index.md`;不存在再看旧单文件 `conventions.md`,存在则按旧单文件内容读取并**在对话中提示可迁移**。两者并存时以目录形态为准,并提示旧文件待清理。
|
|
138
|
+
|
|
139
|
+
## 11. 自查清单
|
|
140
|
+
|
|
141
|
+
- [ ] `conventions/` 存在时必有 `index.md`(缺则为形态异常)
|
|
142
|
+
- [ ] 端清单非空且不含保留字 `index` / `common`
|
|
143
|
+
- [ ] 索引表「归属」列取值 ∈ {`common`} ∪ 端清单(无悬空指针)
|
|
144
|
+
- [ ] 「状态」列取值为 `生效` / `已废弃`
|
|
145
|
+
- [ ] 分册文件与端清单 + `common` 对应,无孤立文件
|
|
146
|
+
- [ ] 旧单文件 `conventions.md` 已迁移(不存在,或已提示待清理)
|
|
147
|
+
- [ ] 规范写入均经用户确认,且带「确立来源任务」
|
|
@@ -12,12 +12,15 @@
|
|
|
12
12
|
├── archive/ # 已终结任务归档
|
|
13
13
|
│ └── {YYYYMM}/
|
|
14
14
|
│ └── {YYYYMMDD}.md # 按完成日期归组的归档文件
|
|
15
|
-
└── conventions
|
|
15
|
+
└── conventions/ # 项目协作规范载体(可选,从任务提炼的规范沉淀地)
|
|
16
|
+
├── index.md # 唯一入口与唯一权威:端清单 + 每条一行指针
|
|
17
|
+
├── common.md # 全端通用条文(按需创建)
|
|
18
|
+
└── <端名>.md # 各端专有条文,端名 = 任务 scope 取值(按需创建)
|
|
16
19
|
```
|
|
17
20
|
|
|
18
21
|
目录名 `.tasks` 为默认约定,项目可自定(如集中式任务库按项目分子目录),内部子结构不变。
|
|
19
22
|
|
|
20
|
-
`conventions
|
|
23
|
+
`conventions/` 不是任务文件:tasks 各子命令不读其内容,check 不会因内容告警(仅在载体形态异常时软告警);它只作为 AI 协作时的规范源,由 fxri-plan-to-task 归档时与 fxri-session-recap 收尾时维护(写入前需用户确认)。载体结构、端名规则、读写判定与存量迁移见 `conventions-spec.md`。
|
|
21
24
|
|
|
22
25
|
## 2. active 任务文件
|
|
23
26
|
|
|
@@ -85,16 +88,16 @@ scope: app # 影响范围;多值以半角加号分隔(toolkit+lxg
|
|
|
85
88
|
- [ ] created 为 YYYYMMDD 且等于文件名日期前缀
|
|
86
89
|
- [ ] 文件名符合 `{YYYYMMDD}-{用户名}-{任务简述}.md`
|
|
87
90
|
- [ ] 任务文件放在 `active/{YYYYMM}/` 月份子目录,不直放 active 根目录
|
|
88
|
-
- [ ] `.tasks/` 下无游离于 active/ 之外的任务文件(直放 `.tasks` 根目录或漏建 active/ 层的 `{YYYYMM}/` 均不会被校验与归档;`conventions
|
|
91
|
+
- [ ] `.tasks/` 下无游离于 active/ 之外的任务文件(直放 `.tasks` 根目录或漏建 active/ 层的 `{YYYYMM}/` 均不会被校验与归档;`conventions/` 属规范文件不受此限)
|
|
89
92
|
- [ ] active 内无跨文件同名任务
|
|
90
93
|
- [ ] depends_on 目标存在且无循环依赖
|
|
91
94
|
- [ ] 正文无「待实施 / 待核对 / 待评估 / TODO」等游离标记与未勾选的 `- [ ]`
|
|
92
|
-
- [ ] 归档后已做任务级规范沉淀检查(有可升格候选则经用户确认写入 conventions
|
|
93
|
-
- [ ] 若按项目约定提交代码:确认 `.tasks/` 全部改动(本次归档文件 + conventions
|
|
95
|
+
- [ ] 归档后已做任务级规范沉淀检查(有可升格候选则经用户确认写入 conventions 载体,无则跳过)
|
|
96
|
+
- [ ] 若按项目约定提交代码:确认 `.tasks/` 全部改动(本次归档文件 + conventions 载体变更 + active 剩余任务)已纳入 git 提交范围,与代码变更同批提交
|
|
94
97
|
|
|
95
98
|
## 6. 协作约定
|
|
96
99
|
|
|
97
|
-
- 任务区是多写者共享区:先查后写,同一需求共用一个任务文件;建档与执行时遵守
|
|
100
|
+
- 任务区是多写者共享区:先查后写,同一需求共用一个任务文件;建档与执行时遵守 conventions 载体(`.tasks/conventions/index.md`,存在时)中的项目规范,旧单文件 `conventions.md` 亦兼容读取
|
|
98
101
|
- **动手前置建档评估**:涉及仓库文件改动的任务,动手前先查 active/archive 判同主题(完整判别表见 SKILL.md 工作流第 1 步);active 有同主题则更新原文件,archive 有同主题且无增量则不重复建档
|
|
99
102
|
- **归档任务不可变**:已归档块是终结记录(唯一键 + 完成时间已固定),不向其追加新内容;延续/扩展需求走新任务并标注来源链
|
|
100
|
-
- 强制约束到**沉淀**为止:归档 + 规范沉淀即流程终点;提交、发版、推送不是必经步骤,是否执行取决于用户的全局 / 个人 / 项目规则;若提交代码,先归档与沉淀、后 git commit,任务记录(归档文件 + conventions
|
|
103
|
+
- 强制约束到**沉淀**为止:归档 + 规范沉淀即流程终点;提交、发版、推送不是必经步骤,是否执行取决于用户的全局 / 个人 / 项目规则;若提交代码,先归档与沉淀、后 git commit,任务记录(归档文件 + conventions 载体)与代码变更落在同一提交
|
|
@@ -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.0.
|
|
6
|
+
version: "1.0.12"
|
|
7
7
|
author: fxri
|
|
8
8
|
source: https://github.com/fxri-net/toolkit
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# 发版与 CHANGELOG
|
|
12
12
|
|
|
13
|
-
> 本技能版本 1.0.
|
|
13
|
+
> 本技能版本 1.0.12(随 @fxri/toolkit 同批分发)。被问版本时即报此值——不读磁盘、不跑 CLI:报出的值就是本会话上下文里已加载内容的版本,可与 `toolkit skills status` 打印的磁盘基准值对照,不一致即说明会话上下文已过期,开新会话即可。
|
|
14
14
|
|
|
15
15
|
## 何时使用
|
|
16
16
|
|
|
@@ -31,9 +31,10 @@ metadata:
|
|
|
31
31
|
|
|
32
32
|
1. 记录变更:`npx changeset`(或项目包管理器等价脚本)——**变更描述一律以 `类型:` 前缀开头**(如 `新增:` / `修复:` / `优化:`),并按类型选影响级别(重大→major、新增/修改→minor、优化/修复/清理/文档→patch,完整对照见 `references/changelog-format.md`)
|
|
33
33
|
2. 消费发版:`npx changeset version`——自动写版本号与 CHANGELOG
|
|
34
|
-
3. 格式化:按 `references/changelog-format.md` 的语义分组规则归类条目、转换分组标题、润色为项目语言风格(中文示例:`### Patch Changes` 下的 `- 修复:xxx` → `### 🐛 问题修复` 下的 `- xxx`——归类后类型前缀被剥离,类型由分组标题承接);分组维度与 bump 维度正交,条目归组只看类型前缀
|
|
35
|
-
4.
|
|
36
|
-
5.
|
|
34
|
+
3. 格式化:按 `references/changelog-format.md` 的语义分组规则归类条目、转换分组标题、润色为项目语言风格(中文示例:`### Patch Changes` 下的 `- 修复:xxx` → `### 🐛 问题修复` 下的 `- xxx`——归类后类型前缀被剥离,类型由分组标题承接);分组维度与 bump 维度正交,条目归组只看类型前缀
|
|
35
|
+
4. 归一:润色后跑一次 `toolkit changelog --history format`——人工润色(含补写历史块明细)容易在条目之间留空行,该命令按「同组顶层条目逐行相邻」重排历史块;项目另有更新日志镜像页(如 `docs/changelog.md`)时再跑一次同步脚本,否则镜像一致性校验会失败
|
|
36
|
+
5. 清理:删除已消费的 `.changeset/*.md`
|
|
37
|
+
6. 发布:提交版本与 CHANGELOG 改动 → 打 `vX.Y.Z` 标签 → 按项目渠道发布(如 `npm publish`)
|
|
37
38
|
|
|
38
39
|
⚠️ 自动生成的条目必须人工核对润色,与仓库既有 CHANGELOG 风格保持一致。
|
|
39
40
|
|
|
@@ -48,7 +49,8 @@ metadata:
|
|
|
48
49
|
| version 后 CHANGELOG 分组标题仍是英文 | 按 references 的映射表补一次格式化 |
|
|
49
50
|
| CHANGELOG 出现「- - 条目」双前缀伪影(变更集条目以 `- ` 开头) | `toolkit changelog version/format` 已自动还原为顶层条目;手工模式按 references 规则手动清理 |
|
|
50
51
|
| 条目与仓库既有风格不一致 | 人工润色为项目语言与句式,勿保留机器直译 |
|
|
51
|
-
| 变更集遗漏(发版后才发现功能未记录) | 补建变更集随下次发版;本次在发布说明中人工补充 |
|
|
52
|
+
| 变更集遗漏(发版后才发现功能未记录) | 补建变更集随下次发版;本次在发布说明中人工补充 |
|
|
53
|
+
| 发版后历史块内出现多余空行(`自举一致性` 类零改动用例失败) | 跑 `toolkit changelog --history format` 归一(**必须带 `--history`**,默认模式不动历史块),再补跑一次镜像页同步脚本 |
|
|
52
54
|
|
|
53
55
|
## 可选加速(不构成依赖)
|
|
54
56
|
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
- 版本标题 `## {版本号}`;隔一行后接引用行 `> {YYYY-MM-DD} 发布`(标题与日期行之间保留一个空行)
|
|
22
22
|
- 分组标题 = emoji + 组名,一行一组,按**语义分组顺序**输出——重大变更 → 新增功能 → 功能调整 → 优化改进 → 问题修复 → 文档更新 → 清理移除 → 依赖变更 → 其他变更;空组省略
|
|
23
23
|
- 条目一行一条,项目语言句式(中文条目句末不加句号),与仓库既有风格一致
|
|
24
|
+
- 同一分组内顶层条目**逐行相邻输出**(条目之间不留空行,缩进子项紧随父条目),分组之间与日期行前后各留一个空行——这是格式化的**不动点**:合规文件重复执行 `toolkit changelog format` 应零改动,`--history` 归一之后同理
|
|
24
25
|
- ⚠️ 变更集条目以 `- ` 开头时,changesets 会写入 `- - 条目` 首行并把后续行缩进 2 空格(伪影);`toolkit changelog version/format` 会自动还原为顶层条目,手工模式需手动清理
|
|
25
26
|
- 分组标题集合随版本演进而变化;**历史版本块保留当时口径,`toolkit changelog format` 不追溯改写**(只归类 changesets 本次新写入的英文源标题块)
|
|
26
27
|
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: fxri-session-recap
|
|
3
|
-
description: 会话收尾的工作记忆沉淀 + 新会话开场恢复 + 历史任务时间修正:收尾时把整场会话的全部任务完整建档归档,按四级时间源还原真实完成时间,沉淀规范进 conventions
|
|
3
|
+
description: 会话收尾的工作记忆沉淀 + 新会话开场恢复 + 历史任务时间修正:收尾时把整场会话的全部任务完整建档归档,按四级时间源还原真实完成时间,沉淀规范进 conventions 载体;新会话开场按三层恢复(全量索引 + active 精读 + 近窗归档)重建现场并核对规范;也可批量修正历史归档时间。当用户表达会话收尾意图(如今天先到这、收个尾、归档本次会话、把结论记下来)、接续意图(如恢复上下文、继续上次、上次做到哪)、或修正历史任务时间时使用。不用于会话中途的常规方案建档(那是 fxri-plan-to-task 的职责)、与工作交接无关的代码技术总结。
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.2.0"
|
|
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.2.0(随 @fxri/toolkit 同批分发)。被问版本时即报此值——不读磁盘、不跑 CLI:报出的值就是本会话上下文里已加载内容的版本,可与 `toolkit skills status` 打印的磁盘基准值对照,不一致即说明会话上下文已过期,开新会话即可。
|
|
14
14
|
|
|
15
15
|
## 何时使用
|
|
16
16
|
|
|
@@ -55,19 +55,24 @@ metadata:
|
|
|
55
55
|
- 沉淀时机固定:归档完成后、任何 git 操作前,规范与归档文件同批落盘
|
|
56
56
|
- 提交、发版、推送**不是必经步骤**,是否执行取决于用户全局/个人/项目规则;若提交代码:先归档、后提交,归档文件与代码变更落在同一 git 提交
|
|
57
57
|
|
|
58
|
-
### R3 规范落点:`.tasks/conventions
|
|
58
|
+
### R3 规范落点:`.tasks/conventions/` 载体(两级沉淀同一载体)
|
|
59
59
|
|
|
60
|
-
- 唯一落点
|
|
60
|
+
- 唯一落点 `.tasks/conventions/`(纯 Markdown 随 git 走):`index.md` 唯一入口(端清单 + 索引表 + 演进记录),`common.md` 承载所有端通用条文,`<端名>.md` 承载各端专属条文;每条规范带来源任务与日期,可审计
|
|
61
61
|
- **任务级**(fxri-plan-to-task 归档时):单任务产出可升格规范才追加,无则完全静默
|
|
62
62
|
- **会话级**(本技能收尾时):聚合全会话候选,与已有规范**合并去重**——跨任务重复模式在此补,用户明示规则兜底
|
|
63
|
+
- **归属判定**:先问「是否**所有端都适用**」→ 是则归 `common`;否则逐端确认后写入命中的端分册。⚠️ 禁止跨端合并归属(真全端才升 `common`,只适用几端则各端各记一条);`common` 的语义是「所有端」不是「不确定归哪端」的暂存区
|
|
64
|
+
- **端名**:与任务 frontmatter `scope` 取值**逐字一致**(任务写 `scope: web+server` → 读 `web.md` + `server.md`);`index.md` 顶部「端清单」是端的**唯一权威**,不扫目录
|
|
63
65
|
- 写前**必须用户确认**;同义规范不重复记录,只补差异或合并增强
|
|
64
66
|
- 一次性决策留在任务正文,不进规范(升格标准:重复出现 ≥2 次,或用户明示「以后都要这样」)
|
|
67
|
+
- **内容修订 vs 形态迁移**:旧条目过时走「演进记录留痕 + index 行更新 + 状态置 `已废弃`」(不删行);使用者项目存旧单文件 `conventions.md` 且要求迁移时走**迁移三段式**(建目录搬原文 → 逐条提归属建议 → 用户确认后拆分册),可中断不丢内容
|
|
68
|
+
- ⚠️ 兼容读:先找 `conventions/index.md`,不存在再看旧单文件 `conventions.md`(提示可迁移);两者并存时以目录形态为准
|
|
69
|
+
- 完整细则(载体结构、index 表列定义、两种形态、迁移步骤、自查清单)见 `../fxri-plan-to-task/references/conventions-spec.md`;fxri-plan-to-task 未一并安装、该兄弟路径不存在时,改读包内真源——`toolkit skills status` 打印的「技能源」目录下 `fxri-plan-to-task/references/conventions-spec.md`
|
|
65
70
|
|
|
66
71
|
### 规范提炼子流程(三模式共用)
|
|
67
72
|
|
|
68
|
-
1. 对照 conventions
|
|
69
|
-
2.
|
|
70
|
-
3.
|
|
73
|
+
1. 对照 conventions 载体收集候选:会话中用户明示的规则、与已有规范重复印证的决策、跨任务重复模式
|
|
74
|
+
2. 输出候选清单(每条含来源任务、建议归属与理由),交用户确认
|
|
75
|
+
3. 用户确认后写入载体:`index.md` 补索引行(归属 / 状态 / 确立来源任务),条文归位到 `common.md` 或命中的端分册
|
|
71
76
|
4. 无候选时完全静默,不强加流程
|
|
72
77
|
|
|
73
78
|
## 模式一:沉淀本次会话
|
|
@@ -81,8 +86,8 @@ metadata:
|
|
|
81
86
|
- 无对应任务但有独立成果 → 按 fxri-plan-to-task 规范建档,created 取任务真实创建日
|
|
82
87
|
- 未尽事项 → 拆独立任务文件(status: 待办),不在正文留游离待办
|
|
83
88
|
4. **归档**:终结态任务按 task-spec「手工归档步骤」执行(合并归档块 → 降序重排 → 写回 → 删源文件 → 清理空月份目录),或 `toolkit tasks archive` 自动化
|
|
84
|
-
5. **规范沉淀(终点)**:按「规范提炼子流程」执行会话级提炼,写入 conventions
|
|
85
|
-
6. **收尾边界**:沉淀即本技能流程终点。提交、发版、推送不是必经步骤,是否执行取决于用户规则;若提交代码,先归档、后提交,任务归档文件 + conventions
|
|
89
|
+
5. **规范沉淀(终点)**:按「规范提炼子流程」执行会话级提炼,写入 conventions 载体
|
|
90
|
+
6. **收尾边界**:沉淀即本技能流程终点。提交、发版、推送不是必经步骤,是否执行取决于用户规则;若提交代码,先归档、后提交,任务归档文件 + conventions 载体与本次代码变更落在**同一个 git 提交**;提交前向用户展示待提交内容供确认
|
|
86
91
|
7. **回报**:向用户列出本次沉淀的任务清单、归档位置与规范变更,确认无遗漏后再结束
|
|
87
92
|
|
|
88
93
|
## 模式二:恢复上下文
|
|
@@ -93,7 +98,7 @@ metadata:
|
|
|
93
98
|
2. **L1 工作层精读**:逐文件读 `.tasks/active/` 全部任务(决策、进展、阻塞)。⚠️ **搁置识别**:active 任务 `updated` 距今 >1 年时标注「疑似搁置(距今 X 年)」,建议用户确认收尾或放弃,不当「进行中」呈现
|
|
94
99
|
3. **L2 近窗精读**:读最近归档。**近窗按时间连续性判定,不按数量**:先定位最新归档块的完成时间,只精读从该时刻向前连续活跃的归档(归档月份 ≤ 6 个月或归档块 ≤ 200 条时精读全文);**被 ≥1 年空洞隔断的旧归档一律只入 L0 索引,不精读、不列为「最近完成」**;超阈值降级为统计(按月/负责人汇总 + 近期明细),防止历史膨胀撑爆上下文
|
|
95
100
|
4. **按需拉取**:更早历史(含空洞隔断的旧归档)不主动展开,在 L0 索引可见;用户点名、或 AI 判断相关时用 `--owner`/`--date` 过滤检索;用户明确说「全部恢复」才全量列出
|
|
96
|
-
5. **规范核对与提炼**:读 conventions.md
|
|
101
|
+
5. **规范核对与提炼**:读 conventions 载体(存在时)纳入现场——常驻只读 `index.md`,再按任务 `scope` 命中加载 `common.md` 与端分册;对照近期任务按「规范提炼子流程」提议增改——⚠️ 恢复主体只读,写载体是用户确认后的独立动作
|
|
97
102
|
6. **输出**:全部任务索引摘要 → 进行中/阻塞任务(含搁置标注)→ 最近完成(连续活跃期内,不含空洞旧档)→ 未完事项 → 规范现场 → **建议的下一步**
|
|
98
103
|
7. 全程不写任务区文件;对存疑内容向用户确认后再动
|
|
99
104
|
|
|
@@ -105,7 +110,7 @@ metadata:
|
|
|
105
110
|
2. **确认**:清单交用户逐条确认正确时间,不自行推断
|
|
106
111
|
3. **改值**:active 任务直接改文件 completed;已归档任务改归档块元数据行的完成时间
|
|
107
112
|
4. **迁移核验**:`toolkit tasks normalize --fix` 自动把改动后的归档块迁移到正确日期文件(已完成能力:按 completed 合并降序、清理空文件空目录);再 `toolkit tasks normalize` 只读核验 0 漂移
|
|
108
|
-
5.
|
|
113
|
+
5. **规范观察**:批量回读历史任务时发现的重复模式,按「规范提炼子流程」列为候选(确认后写入载体,与修正动作同批)
|
|
109
114
|
6. **收尾边界**:同上(沉淀终点,提交可选需确认)
|
|
110
115
|
|
|
111
116
|
## 失败模式
|
|
@@ -117,7 +122,7 @@ metadata:
|
|
|
117
122
|
| completed 填了收尾时刻而非真实完成时刻 | 按 R1 四级时间源重新取证(git log / 聊天记录时间戳) |
|
|
118
123
|
| 恢复时 active 有游离文件(不在月份目录) | 先按规范移入 `active/{YYYYMM}/` 再读 |
|
|
119
124
|
| 归档历史量太大撑爆上下文 | 走 L2 降级:只出统计 + 近期明细,按需拉取更早 |
|
|
120
|
-
| 新会话仍说「找不到上下文」 | 先查磁盘文件是否存在、是否落在正确月份目录、conventions
|
|
125
|
+
| 新会话仍说「找不到上下文」 | 先查磁盘文件是否存在、是否落在正确月份目录、conventions 载体是否同目录;跨环境场景(换机 / 工作区被 git 清理)才需查是否已 git 提交 |
|
|
121
126
|
| 归档未提交,新会话能恢复吗 | 同机同目录**能恢复**(恢复读磁盘 `.tasks/` 文件,与提交状态无关);仅跨环境(换机 / checkout、clean 清掉工作区)时未提交内容会丢,恢复才依赖提交 |
|
|
122
127
|
|
|
123
128
|
## 可选加速(不构成依赖)
|