@gordon.gan/specflow 1.4.3-beta → 1.4.4-beta

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.
@@ -0,0 +1,171 @@
1
+ # Approval · Project Conventions Router
2
+
3
+ > Used by `/specflow:approval` before drafting **§3 架构 / §4.4 数据 / §4.5 接口 / §4.6 前端**
4
+ > (frontend when `uiInScope=yes`).
5
+ > **目的**:让方案贴合**本仓库**的 skill / rule / 工程约定,而不是只套 SpecFlow 通用 guidance。
6
+ > **懒加载**:按主题按需 `Read`,禁止一次灌入全部 IDE rules。
7
+ > **Not** an MCP tool; **禁止** `invoke /xxx skill` —— 一律解析路径后 `Read`。
8
+
9
+ ---
10
+
11
+ ## 0. Priority (冲突时必须遵守)
12
+
13
+ ```text
14
+ ① 项目约定 + 现网代码/DDL/OpenAPI > ② SpecFlow Guidance Pack > ③ LLM 常识
15
+ ```
16
+
17
+ - ① 决定「能不能做、禁令、现网形状」。
18
+ - ② 只补强「怎么写清楚」(如完整 CREATE TABLE、接口失败示例骨架)。
19
+ - ②/③ **不得**覆盖 ①(例:项目约定「本迭代禁止迁移」时,不得按通用 skill 发明 `ALTER`)。
20
+
21
+ Announce after resolve:
22
+
23
+ ```text
24
+ Project conventions (architecture|api|database|frontend): <paths…> | none
25
+ Conflict policy: project > SpecFlow guidance > LLM
26
+ ```
27
+
28
+ ---
29
+
30
+ ## 1. Topics (何时加载)
31
+
32
+ | 主题 `topic` | 何时 **必须**跑本路由 | 典型要找的内容 |
33
+ |--------------|----------------------|----------------|
34
+ | `architecture` | 起草 **§3** 前 | 分层、模块边界、目录约定、禁止直连 |
35
+ | `database` | 起草 **§4.4** 前(且有持久化) | 迁移工具禁令、命名、字符集、现网表规范 |
36
+ | `api` | 起草 **§4.5** 前(且有对外/跨端接口) | 错误码、鉴权、契约/OpenAPI、通道 |
37
+ | `frontend` | 起草 **§4.6** 前(且 `uiInScope=yes`) | 组件/状态/路由/API client/设计系统/**表单/测试/a11y** 等落地约定;须含 IDE skills/rules 扫描(见 `frontend-guidance.md` §3) |
38
+
39
+ 每个主题 **最多 Read 5 个文件**(配置列出的优先;自动探测时取最相关的前 5 个)。细节 references 仅在入口文件点名时再读(禁止 reference 链式跳转)。
40
+
41
+ ---
42
+
43
+ ## 2. Resolve paths (跨 IDE)
44
+
45
+ ### 2.1 显式配置(最高优先)
46
+
47
+ 读 `specflow/config.yaml` → `conventions.<topic>`(字符串路径数组,相对项目根)。
48
+ 有配置则 **只 Read 这些路径**(仍受「最多 5 个」限制);缺文件 → WARNING。
49
+
50
+ ```yaml
51
+ conventions:
52
+ architecture:
53
+ - docs/engineering/architecture.md
54
+ api:
55
+ - docs/api/guidelines.md
56
+ database:
57
+ - docs/db/conventions.md
58
+ frontend:
59
+ - docs/frontend/conventions.md
60
+ ```
61
+
62
+ ### 2.2 自动探测(无配置时)
63
+
64
+ 1. 判定 `activeIde`(本会话 IDE):Cursor / Claude / Codex。
65
+ 2. **先**扫 activeIde 候选。
66
+ 3. 若无命中:按 `cursor → claude → agents` 回退扫同主题候选。
67
+ 4. 再扫**仓根中立**路径。
68
+ 5. 仍无 → `none`(允许继续,但总则/架构说明须写「未发现项目级约定」)。
69
+
70
+ #### 候选路径表
71
+
72
+ **仓根中立(跨 IDE 推荐真相源)**
73
+
74
+ | topic | 候选(存在则纳入) |
75
+ |-------|------------------|
76
+ | `architecture` | `docs/engineering/architecture.md`, `.specflow/conventions/architecture.md`, `ARCHITECTURE.md` |
77
+ | `api` | `docs/api/guidelines.md`, `docs/engineering/api.md`, `.specflow/conventions/api.md` |
78
+ | `database` | `docs/db/conventions.md`, `docs/engineering/database.md`, `.specflow/conventions/database.md` |
79
+ | `frontend` | `docs/frontend/conventions.md`, `docs/frontend/patterns.md`, `docs/frontend/testing.md`, `docs/engineering/frontend.md`, `.specflow/conventions/frontend.md`, `agent_docs/tech_stack.md`, `agent_docs/code_patterns.md`, `agent_docs/testing.md` |
80
+
81
+ **Cursor**
82
+
83
+ | topic | 候选 |
84
+ |-------|------|
85
+ | 通用 | `.cursor/rules/**/*.mdc` 中文件名/标题含 architecture\|api\|database\|db\|frontend\|backend\|ui\|react\|vue\|component\|tailwind\|a11y\|playwright 的条目(每主题最多 2) |
86
+ | skill | `.cursor/skills/**/SKILL.md` 目录名或 frontmatter `name`/`description` 匹配主题关键词 |
87
+
88
+ **Claude**
89
+
90
+ | topic | 候选 |
91
+ |-------|------|
92
+ | 通用 | `CLAUDE.md`, `.claude/CLAUDE.md`(整文件较大时只提取与主题相关章节) |
93
+ | skill | `.claude/skills/**/SKILL.md`(主题关键词匹配) |
94
+ | rules | `.claude/rules/**/*`(若存在;同名过滤) |
95
+
96
+ **Codex**
97
+
98
+ | topic | 候选 |
99
+ |-------|------|
100
+ | 通用 | `AGENTS.md`(提取与主题相关段落) |
101
+ | skill | `.agents/skills/**/SKILL.md`(主题关键词匹配) |
102
+
103
+ 关键词提示:
104
+
105
+ - `architecture|arch|分层|模块`
106
+ - `api|openapi|rpc|接口|错误码`
107
+ - `database|db|sql|迁移|schema`
108
+ - `frontend|ui|react|vue|next|svelte|tailwind|component|控制台|页面|组件|表单|路由|a11y|playwright|vitest|样式|design.?system`
109
+
110
+ > **前端专题**:`topic=frontend` 时 **必须**按 `frontend-guidance.md` §3 扩扫 IDE skills/rules
111
+ > 与落地文档(状态/表单/测试/a11y 等);不要只命中一个泛化的「frontend」文件名就停。
112
+
113
+ ---
114
+
115
+ ## 3. How to apply (写入方案时)
116
+
117
+ 1. **用可读中文**把约定写进 §2.1 / §3 图要点 / §4.4 / §4.5 / §4.6(禁止代码腔堆砌)。
118
+ 2. **硬禁令**原样保留语义(例:「本迭代禁止 goose 迁移」)。
119
+ 3. 与 SpecFlow DB/API 硬门槛同时满足:项目禁令优先;表达骨架用 SpecFlow 规则。
120
+ 4. 在对应章节**标明来源路径**(总则「项目约定」列,或架构图要点首条)。
121
+ 5. 若探测到约定文件但正文未体现关键禁令 → 确认摘要 / §8(若有)记 `WARNING`:
122
+ `发现项目约定 <path> 但方案未采纳关键约束`。
123
+
124
+ ---
125
+
126
+ ## 4. Interaction with SpecFlow database guidance
127
+
128
+ 写 §4.4 时顺序固定:
129
+
130
+ 1. 本路由 `topic=database`(项目约定)
131
+ 2. `prompts/approval/database-guidance.md`(SpecFlow pack + dbStack)
132
+ 3. 现网 DDL / 迁移 / 锚点文件(Pass 6)
133
+ 4. 起草:表形状与禁令 ← ①+③;DDL 完整度与类型惯例 ← ②
134
+
135
+ §4.4.1 总则必须同时填写:
136
+
137
+ | 项 | 说明 |
138
+ |----|------|
139
+ | 项目约定 | 实际 Read 到的路径,或 **未发现** |
140
+ | DB 技能 | SpecFlow guidance 路径或 `LLM-fallback` |
141
+ | DDL 来源 | 迁移/基线路径或本迭代新增 |
142
+
143
+ ---
144
+
145
+ ## 4b. Interaction with frontend guidance
146
+
147
+ 写 §4.6 时顺序固定:
148
+
149
+ 1. 本路由 `topic=frontend`(项目约定 docs + IDE skills/rules 关键词匹配)
150
+ 2. **强制**再跑 `prompts/approval/frontend-guidance.md` §3 —— 补扫开发落地维
151
+ (组件/路由/状态/表单/API client/样式/a11y/测试/lint);与步骤 1 **去重**,合计 ≤5 文件
152
+ 3. 现网路由/布局/API client 锚点(Pass 6)
153
+ 4. 起草:页面/组件边界与禁令 ← ①+②+③;章节骨架与 G5/G6 ← `frontend-guidance` 其余条款
154
+
155
+ §4.6.1 总则必须填写:
156
+
157
+ | 项 | 说明 |
158
+ |----|------|
159
+ | 项目约定 | config + 中立 docs 路径,或 **未发现** |
160
+ | IDE skills/rules | 实际 Read 的 `.cursor/.claude/.agents` skill/rule 路径,或 **未发现** |
161
+ | FE 栈 | 五元组 |
162
+
163
+ 无 UI → 整章省略。发现约定但方案未采纳 → WARNING。
164
+
165
+ ---
166
+
167
+ ## 5. Why this shape
168
+
169
+ - IDE 目录不同 → 用 **activeIde + 回退 + 中立 docs** 统一发现,不强迫业务仓只选一个 IDE。
170
+ - 上下文有限 → **按主题懒加载**,最多 3 文件。
171
+ - 贴合项目 → **优先级写死**,并要求总则可核对来源。
@@ -1,49 +1,70 @@
1
- # Guidance Packs(两层技能模型)
1
+ # Guidance Packs 与项目约定
2
2
 
3
- SpecFlow 区分两类能力包,避免把内部知识暴露成可 `/` 调用的 IDE skill。
3
+ 审批写技术章时的取证优先级:
4
4
 
5
- ## 两层模型
5
+ ```text
6
+ ① 项目约定 (conventions / IDE rules / docs) > ② SpecFlow Guidance Pack > ③ LLM
7
+ ```
8
+
9
+ ## SpecFlow 两层模型(包内)
6
10
 
7
11
  | 层 | 包内位置 | 业务仓落地 | IDE 可发现 |
8
12
  |----|----------|------------|------------|
9
13
  | **Workflow skill** | `skills/specflow-*` + `COMMAND_CATALOG` | `.cursor/skills/specflow-*`(及 claude/agents) | 是 |
10
- | **Guidance pack** | `skills/<pack>/` + 本注册表 | `{ide}/specflow/guidance/<pack>/` | **否** |
14
+ | **Guidance pack** | `skills/<pack>/` + [`guidance-packs.yaml`](guidance-packs.yaml) | `{ide}/specflow/guidance/<pack>/` | **否** |
15
+
16
+ Workflow 通过路由 `Read` 路径加载 guidance;禁止写成「invoke `/mysql` skill」。
17
+
18
+ ## 项目约定(仓内,懒加载)
11
19
 
12
- Workflow skill(如 `/specflow:approval`)通过路由文档指示 Agent **`Read` 文件路径**加载 guidance;禁止写成「invoke `/mysql` skill」。
20
+ | | 说明 |
21
+ |----|------|
22
+ | 路由 | `prompts/approval/project-conventions-guidance.md` |
23
+ | 解析辅助 | `src/core/project-conventions.ts`(config + 仓根中立路径) |
24
+ | 主题 | `architecture` → §3;`database` → §4.4;`api` → §4.5;`frontend` → §4.6(有 UI;含 IDE skills/rules 落地扫描) |
25
+ | 上限 | 每主题约定文件最多 **3**(helper);前端专题合计约定+IDE skills/rules ≤ **5**(见 `frontend-guidance.md` §3) |
13
26
 
14
- 设计原则对齐 Anthropic Agent Skillsprogressive disclosure(元数据 → 正文 → 按需 Read `references/`),并复用 SpecFlow 已有的 runtime assets(与 `prompts/` / `templates/` 同级安装)。
27
+ 另:前端详设结构由 `prompts/approval/frontend-guidance.md` 驱动(`uiInScope`、栈五元组、G5/G6、Visual Loop);与 DB 的 `database-guidance.md` 对称,**暂无**独立 `skills/frontend` guidance pack。
15
28
 
16
- ## 注册表
29
+ ```yaml
30
+ # specflow/config.yaml(可选,优先于自动探测)
31
+ conventions:
32
+ database:
33
+ - docs/db/conventions.md
34
+ api:
35
+ - docs/api/guidelines.md
36
+ architecture:
37
+ - docs/engineering/architecture.md
38
+ ```
17
39
 
18
- [`guidance-packs.yaml`](guidance-packs.yaml) 列出所有需随 `specflow init` / `--force-assets` 同步的 pack:
40
+ 无配置时:仓根中立文件(如 `docs/db/conventions.md`)+ Cursor/Claude/Codex rules/skills(见路由文档,按 activeIde 优先再回退)。
41
+
42
+ ## Guidance Pack 注册表
19
43
 
20
44
  ```yaml
21
45
  packs:
22
46
  - id: database
23
- source: skills/database # 相对 SpecFlow 包根
24
- installAs: guidance/database # 相对 {ide}/specflow/
25
- consumers: [approval] # 文档用:哪些 workflow 会 Read
47
+ source: skills/database
48
+ installAs: guidance/database
49
+ consumers: [approval]
26
50
  ```
27
51
 
28
- ## 新增一个 Guidance Pack
52
+ ## 新增 Guidance Pack
29
53
 
30
- 1. 在 `skills/<id>/` 放置 `SKILL.md`(及可选 `references/`、`examples/`)。
54
+ 1. 在 `skills/<id>/` 放置 `SKILL.md`(及可选 `references/`)。
31
55
  2. 在 `guidance-packs.yaml` 增加一行。
32
- 3. 在消费方 workflow prompt/SKILL 中写明解析顺序:
33
- - `{ide}/specflow/guidance/<id>/…`(业务仓标准路径)
34
- - 回退:包内 `skills/<id>/…`(SpecFlow 自研仓)
35
- - 仍缺失:显式 fallback + WARNING
36
- 4. 「调用」语义:`Read …/SKILL.md`(及入口直接点名的 references),禁止链式跳转、禁止 MCP、禁止远程 `npx skills add`。
56
+ 3. 消费方 prompt 写清:业务仓 `{ide}/specflow/guidance/<id>/` → 包内回退 → fallback。
57
+
58
+ ## 数据库章节取证顺序
37
59
 
38
- ## 共享 vs 包内 references
60
+ 1. 项目约定 `topic=database`
61
+ 2. SpecFlow `guidance/database/<stack>/`
62
+ 3. 现网 DDL / 迁移 / 锚点
39
63
 
40
- | 场景 | 放哪里 |
41
- |------|--------|
42
- | 多个 workflow 共用 | Guidance pack(本机制) |
43
- | 仅单一 skill 使用 | 该 skill 目录下的 `references/`(Anthropic 包内资源) |
64
+ §4.4.1 总则必须填写「项目约定」「DB 技能」「DDL 来源」。
44
65
 
45
66
  ## 当前 packs
46
67
 
47
68
  | id | consumers | 说明 |
48
69
  |----|-----------|------|
49
- | `database` | approval | §4.4 按 `dbStack` Read mysql/postgresql/oracle/redis/elasticsearch |
70
+ | `database` | approval | 按 `dbStack` 补强 DDL 写法;不得覆盖项目禁令 |
@@ -8,19 +8,20 @@
8
8
 
9
9
  | 项 | 约定 |
10
10
  |----|------|
11
- | 运行时依赖 | **无远程仓库依赖**。审批流程只读本地文件,禁止 `npx skills add`、禁止 clone/fetch 上游 |
12
- | 维护方式 | 在本仓库直接改 `SKILL.md` / `references/` / `examples/`,随 SpecFlow 发版 |
13
- | 加载方式 | `prompts/approval/database-guidance.md` 路由:命中栈 → Read;未命中 → LLM-fallback |
14
- | init 安装目标 | `{ide}/specflow/guidance/database/`(与 prompts/templates 同级) |
15
- | IDE 全局技能 | **不**安装到 `.cursor/skills` / `.claude/skills` / `.agents/skills`(避免噪音与误发现) |
11
+ | 与项目约定关系 | **项目约定优先**。先跑 `project-conventions-guidance.md`(`topic=database`),再读本 pack |
12
+ | 运行时依赖 | **无远程仓库依赖**。审批流程只读本地文件 |
13
+ | 加载方式 | `database-guidance.md`:命中栈 → Read 本目录;未命中 → LLM-fallback |
14
+ | init 安装目标 | `{ide}/specflow/guidance/database/` |
15
+ | IDE 全局技能 | **不**安装到 `.cursor/skills` 等发现路径 |
16
16
 
17
- ## 路径解析(业务仓)
17
+ ## 路径解析(业务仓 §4.4)
18
18
 
19
- 1. `.cursor/specflow/guidance/database/<stack>/`(或 `.claude` / `.agents`)
20
- 2. 回退:包内 `skills/database/<stack>/`(SpecFlow 自研仓)
21
- 3. 仍缺失:`LLM-fallback` + §8 WARNING(建议 `specflow init --force-assets`)
19
+ 1. 项目约定(`conventions.database` `docs/db/conventions.md` 等)
20
+ 2. `.cursor/specflow/guidance/database/<stack>/`(或 `.claude` / `.agents`)
21
+ 3. 回退:包内 `skills/database/<stack>/`
22
+ 4. 仍缺失:`LLM-fallback` + WARNING
22
23
 
23
- 「调用」语义:`Read …/SKILL.md`(及路由直接点名的 references),**禁止** `invoke /mysql`。
24
+ §4.4.1 总则须同时填写「项目约定」「DB 技能」「DDL 来源」。
24
25
 
25
26
  ## 目录
26
27