@gordon.gan/specflow 1.8.0-beta → 1.8.2-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.
- package/README.md +7 -5
- package/dist/cli/commands/document-run.d.ts +98 -0
- package/dist/cli/commands/document-run.js +1064 -0
- package/dist/cli/index.js +2 -2
- package/dist/core/artifact-language.js +11 -1
- package/dist/core/document/asset-paths.d.ts +15 -0
- package/dist/core/document/asset-paths.js +38 -0
- package/dist/core/document/chapters.d.ts +6 -0
- package/dist/core/document/chapters.js +38 -0
- package/dist/core/document/coverage.d.ts +25 -0
- package/dist/core/document/coverage.js +49 -0
- package/dist/core/document/digests.d.ts +40 -0
- package/dist/core/document/digests.js +144 -0
- package/dist/core/document/engine.d.ts +101 -0
- package/dist/core/document/engine.js +722 -0
- package/dist/core/document/extract.d.ts +61 -0
- package/dist/core/document/extract.js +437 -0
- package/dist/core/{approval → document}/forbidden-patterns.d.ts +4 -2
- package/dist/core/document/forbidden-patterns.js +36 -0
- package/dist/core/document/gates.d.ts +39 -0
- package/dist/core/document/gates.js +75 -0
- package/dist/core/document/input-digest.d.ts +63 -0
- package/dist/core/document/input-digest.js +200 -0
- package/dist/core/document/input-features.d.ts +43 -0
- package/dist/core/document/input-features.js +161 -0
- package/dist/core/document/lint.d.ts +39 -0
- package/dist/core/document/lint.js +147 -0
- package/dist/core/document/llm.d.ts +28 -0
- package/dist/core/document/llm.js +22 -0
- package/dist/core/document/map.d.ts +52 -0
- package/dist/core/document/map.js +296 -0
- package/dist/core/document/outline.d.ts +29 -0
- package/dist/core/document/outline.js +171 -0
- package/dist/core/document/paths.d.ts +23 -0
- package/dist/core/document/paths.js +36 -0
- package/dist/core/document/profile-validator.d.ts +23 -0
- package/dist/core/document/profile-validator.js +155 -0
- package/dist/core/document/profiles.d.ts +23 -0
- package/dist/core/document/profiles.js +76 -0
- package/dist/core/document/render.d.ts +61 -0
- package/dist/core/document/render.js +243 -0
- package/dist/core/document/review.d.ts +57 -0
- package/dist/core/document/review.js +202 -0
- package/dist/core/document/scene-detect.d.ts +32 -0
- package/dist/core/document/scene-detect.js +237 -0
- package/dist/core/document/schemas.d.ts +1111 -0
- package/dist/core/document/schemas.js +191 -0
- package/dist/integrations/shared/capability-evidence.js +4 -9
- package/dist/integrations/shared/command-catalog.js +2 -1
- package/dist/integrations/shared/parity-manifest.js +4 -9
- package/package.json +2 -1
- package/prompts/apply/phase-a-plan.md +1 -1
- package/prompts/document/map/acceptance.md +9 -0
- package/prompts/document/map/anti-ai.md +29 -0
- package/prompts/document/map/api-design.md +26 -0
- package/prompts/document/map/architecture.md +27 -0
- package/prompts/document/map/benchmark.md +26 -0
- package/prompts/document/map/closed-loop.md +9 -0
- package/prompts/document/map/compat-migration.md +31 -0
- package/prompts/document/map/component-design.md +30 -0
- package/prompts/document/map/config-runtime.md +9 -0
- package/prompts/document/map/core-flow.md +62 -0
- package/prompts/document/map/core-logic.md +9 -0
- package/prompts/document/map/data-model.md +18 -0
- package/prompts/document/map/deploy.md +26 -0
- package/prompts/document/map/fix.md +8 -0
- package/prompts/document/map/frontend-architecture.md +35 -0
- package/prompts/document/map/goal.md +8 -0
- package/prompts/document/map/impact.md +8 -0
- package/prompts/document/map/implementability.md +9 -0
- package/prompts/document/map/migration-guide.md +36 -0
- package/prompts/document/map/mvp-boundary.md +8 -0
- package/prompts/document/map/non-goals.md +8 -0
- package/prompts/document/map/ops.md +33 -0
- package/prompts/document/map/performance.md +32 -0
- package/prompts/document/map/poc-demo.md +25 -0
- package/prompts/document/map/regression.md +8 -0
- package/prompts/document/map/reproduce.md +8 -0
- package/prompts/document/map/requirement.md +8 -0
- package/prompts/document/map/research.md +25 -0
- package/prompts/document/map/root-cause.md +8 -0
- package/prompts/document/map/signoff.md +9 -0
- package/prompts/document/map/state-management.md +23 -0
- package/prompts/document/map/tech-selection.md +29 -0
- package/prompts/document/map/test-strategy.md +24 -0
- package/prompts/document/map/ui-design.md +21 -0
- package/prompts/document/outline/general.md +46 -0
- package/prompts/document/review/ai-review.md +57 -0
- package/prompts/document/shared/grounding.md +84 -0
- package/prompts/explore/explore-session.md +1 -1
- package/prompts/propose/design-draft.md +1 -1
- package/prompts/propose/proposal.md +1 -1
- package/prompts/propose/specs.md +1 -1
- package/prompts/propose/tasks-draft.md +1 -1
- package/prompts/refine/design-output.md +1 -1
- package/prompts/refine/update-artifacts.md +2 -0
- package/prompts/shared/artifact-language.md +13 -0
- package/skills/specflow-techdoc/SKILL.md +143 -0
- package/skills/specflow-techdoc-synth/SKILL.md +115 -0
- package/templates/document/chapters/acceptance.yaml +16 -0
- package/templates/document/chapters/api-design.yaml +29 -0
- package/templates/document/chapters/architecture.yaml +21 -0
- package/templates/document/chapters/benchmark.yaml +20 -0
- package/templates/document/chapters/closed-loop.yaml +22 -0
- package/templates/document/chapters/compat-migration.yaml +21 -0
- package/templates/document/chapters/component-design.yaml +22 -0
- package/templates/document/chapters/config-runtime.yaml +16 -0
- package/templates/document/chapters/core-flow.yaml +27 -0
- package/templates/document/chapters/core-logic.yaml +16 -0
- package/templates/document/chapters/data-model.yaml +25 -0
- package/templates/document/chapters/deploy.yaml +22 -0
- package/templates/document/chapters/fix.yaml +18 -0
- package/templates/document/chapters/frontend-architecture.yaml +22 -0
- package/templates/document/chapters/goal.yaml +17 -0
- package/templates/document/chapters/impact.yaml +16 -0
- package/templates/document/chapters/implementability.yaml +22 -0
- package/templates/document/chapters/migration-guide.yaml +21 -0
- package/templates/document/chapters/mvp-boundary.yaml +20 -0
- package/templates/document/chapters/non-goals.yaml +17 -0
- package/templates/document/chapters/ops.yaml +25 -0
- package/templates/document/chapters/performance.yaml +21 -0
- package/templates/document/chapters/poc-demo.yaml +22 -0
- package/templates/document/chapters/regression.yaml +16 -0
- package/templates/document/chapters/reproduce.yaml +16 -0
- package/templates/document/chapters/requirement.yaml +18 -0
- package/templates/document/chapters/research.yaml +22 -0
- package/templates/document/chapters/root-cause.yaml +18 -0
- package/templates/document/chapters/signoff.yaml +15 -0
- package/templates/document/chapters/state-management.yaml +22 -0
- package/templates/document/chapters/tech-selection.yaml +23 -0
- package/templates/document/chapters/test-strategy.yaml +23 -0
- package/templates/document/chapters/ui-design.yaml +28 -0
- package/templates/document/profiles/0to1.yaml +44 -0
- package/templates/document/profiles/approve.yaml +22 -0
- package/templates/document/profiles/bugfix.yaml +15 -0
- package/templates/document/profiles/feature.yaml +23 -0
- package/templates/document/profiles/frontend-0to1.yaml +47 -0
- package/templates/document/profiles/migration.yaml +42 -0
- package/templates/document/profiles/poc.yaml +46 -0
- package/dist/cli/commands/approval-assemble.d.ts +0 -64
- package/dist/cli/commands/approval-assemble.js +0 -408
- package/dist/core/approval/assemble.d.ts +0 -10
- package/dist/core/approval/assemble.js +0 -384
- package/dist/core/approval/bundle.d.ts +0 -9
- package/dist/core/approval/bundle.js +0 -172
- package/dist/core/approval/forbidden-patterns.js +0 -40
- package/dist/core/approval/index-schema.d.ts +0 -676
- package/dist/core/approval/index-schema.js +0 -193
- package/dist/core/approval/index.d.ts +0 -12
- package/dist/core/approval/index.js +0 -9
- package/dist/core/approval/lint.d.ts +0 -10
- package/dist/core/approval/lint.js +0 -302
- package/dist/core/approval/paths.d.ts +0 -13
- package/dist/core/approval/paths.js +0 -43
- package/dist/core/approval/pipeline.d.ts +0 -28
- package/dist/core/approval/pipeline.js +0 -146
- package/dist/core/approval/playbook-schema.d.ts +0 -182
- package/dist/core/approval/playbook-schema.js +0 -51
- package/dist/core/approval/render.d.ts +0 -20
- package/dist/core/approval/render.js +0 -210
- package/dist/core/approval/review-pack.d.ts +0 -26
- package/dist/core/approval/review-pack.js +0 -205
- package/dist/core/approval/types.d.ts +0 -223
- package/dist/core/approval/types.js +0 -1
- package/prompts/approval/acp-pipeline.md +0 -106
- package/prompts/approval/ai-review.md +0 -145
- package/prompts/approval/api-guidance.md +0 -179
- package/prompts/approval/database-guidance.md +0 -105
- package/prompts/approval/frontend-guidance.md +0 -249
- package/prompts/approval/generate.md +0 -1596
- package/prompts/approval/multi-repo-guidance.md +0 -263
- package/prompts/approval/multi-repo-spoke-subagent.md +0 -94
- package/prompts/approval/project-conventions-guidance.md +0 -171
- package/prompts/approval/runtime-guidance.md +0 -64
- package/prompts/approval/segmented-generation.md +0 -157
- package/skills/specflow-approval/SKILL.md +0 -778
- package/templates/approval-index.yaml +0 -93
- package/templates/approval-part.md +0 -15
- package/templates/approval-playbook-talos-scenario-job-compile.yaml +0 -29
- package/templates/approval-playbook.yaml +0 -28
- package/templates/approval.md +0 -261
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
# Approval · API / RPC / OpenAPI Guidance
|
|
2
|
-
|
|
3
|
-
> Used by `/specflow:approval` before drafting **§4.5 接口设计** (after
|
|
4
|
-
> `project-conventions-guidance.md` `topic=api`).
|
|
5
|
-
>
|
|
6
|
-
> **目的**:产出**可生成**的接口契约(非 narrative stub),并避免 **Worker 面 HTTP** 与 **平台内部 RPC**
|
|
7
|
-
> 混写导致某一侧被省略。
|
|
8
|
-
>
|
|
9
|
-
> **优先级**:项目约定 + 现网 proto/OpenAPI **>** 本路由 **>** LLM。
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## 0. When to run
|
|
14
|
-
|
|
15
|
-
| 条件 | 必须执行 |
|
|
16
|
-
|------|----------|
|
|
17
|
-
| 本迭代有 **新增** HTTP 路径或 gRPC | 全文 §1–§4 |
|
|
18
|
-
| 本迭代 **修改/行为扩展** 对外或 Worker 契约 | §1 分层 + §2 锁名 + §3 变更 delta |
|
|
19
|
-
| 仅 **不变·本迭代消费** 既有 RPC/HTTP | §1 分层 + §4 完整骨架(字段/示例/错误);禁止一句带过 |
|
|
20
|
-
| 三仓/多仓合订 | §1 **每层每面一个 `In`**,禁止用「内部调用」合并条目 |
|
|
21
|
-
|
|
22
|
-
Announce after Read:
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
API guidance: layering=<n surfaces> | proto=<path|draft in §4.5> | worker_openapi=<path|must draft>
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## 1. 接口分层 — 禁止混层 (fixes B2)
|
|
31
|
-
|
|
32
|
-
一条业务链路上常有 **多个契约面**,每一面在 §4.5 清单中必须是 **独立 `In`**,各自完整展开:
|
|
33
|
-
|
|
34
|
-
| 层 | 典型调用方 → 被调方 | 协议形态 | 清单命名示例 | 常见错误 |
|
|
35
|
-
|----|---------------------|----------|--------------|----------|
|
|
36
|
-
| L1 控制台/北向 | Web → Gateway | HTTP `/api/v1/...` | I1 调试启动 | 把字段只写在 design,§4.5 无表 |
|
|
37
|
-
| L2 Worker 边车 HTTP | Worker → Gateway | HTTP `/internal/v1/...` + work 鉴权头 | I4 逐步上报 | **只写路径,无 OpenAPI schema** |
|
|
38
|
-
| L3 平台编排 RPC | Gateway/调度 → 本服务 logic | gRPC + `google.api.http` | I4 对应 RPC(与 L2 同编号或 I4a/I4b 成对) | 写「暂定 RPC,HTTP 冻结」—— **禁止** |
|
|
39
|
-
| L4 平台东向 RPC | 调度 → result/testcase/… | gRPC `client/<svc>/` | I6/I7 确保壳/写入逐步 | **用一句「内部调用 I7」代替 I4 的 RPC 详设** |
|
|
40
|
-
|
|
41
|
-
### 1.1 硬规则
|
|
42
|
-
|
|
43
|
-
1. **L2 与 L3 成对**:新增 Worker HTTP 路径时,**必须**同时写清:
|
|
44
|
-
- L2:HTTP method/path、必填头、request/response JSON 字段表、失败示例
|
|
45
|
-
- L3:冻结 RPC 全名、`message` 字段号、`option (google.api.http)`、Gateway 注册点
|
|
46
|
-
2. **L4 不得 stub**:列入清单的东向 RPC(即使 proto 已存在)仍须 **§4.5.2 完整骨架**;
|
|
47
|
-
可标注「与现网 proto 一致」但**必须**贴字段表 + 成功/失败示例 + 错误表。
|
|
48
|
-
3. **禁止**在 L2 小节写满 HTTP,再在 L4 用「经 client/result 调 I7」一行替代 I7 详设。
|
|
49
|
-
4. **调用关系图**须显式画出 L2→L3→L4,例如:
|
|
50
|
-
`Worker --L2 HTTP--> Gateway --L3 RPC--> Scheduler --L4 RPC--> Result`
|
|
51
|
-
|
|
52
|
-
### 1.2 三仓合订
|
|
53
|
-
|
|
54
|
-
| 仓 | 负责的层 | §4.5 须写 |
|
|
55
|
-
|----|----------|-----------|
|
|
56
|
-
| talos | L3/L4 + Gateway 注册 | proto 草案 + 注册文件/函数 |
|
|
57
|
-
| talos-worker | L2 | OpenAPI path + schema + 鉴权头示例 |
|
|
58
|
-
| talos-web | L1 | HTTP 消费 + TS 类型(§4.6 交叉引用 `In`) |
|
|
59
|
-
|
|
60
|
-
合订文档 **禁止**只写 talos 侧 L4 而 Worker OpenAPI 写「apply 时补」。
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
## 2. RPC / 服务名冻结 (fixes A1)
|
|
65
|
-
|
|
66
|
-
### 2.1 禁止用语 (硬)
|
|
67
|
-
|
|
68
|
-
下列写法 **一律禁止**出现在 §4.5 / §2 决策 / §4.8:
|
|
69
|
-
|
|
70
|
-
- `暂定` / `TBD` / `实现时命名` / `实现时与 OpenAPI 对齐`
|
|
71
|
-
- `如 SubmitXxx` / `例如 scheduler.SubmitXxx`
|
|
72
|
-
- `RPC 名以实现为准`
|
|
73
|
-
|
|
74
|
-
未锁名 → 视为 **BLOCKED**,不得标 READY;须 `[待 refine 澄清: RPC 名]` 或写入锁定名。
|
|
75
|
-
|
|
76
|
-
### 2.2 必须输出
|
|
77
|
-
|
|
78
|
-
| 项 | 格式 |
|
|
79
|
-
|----|------|
|
|
80
|
-
| 服务 | `package` 名,如 `scheduler` |
|
|
81
|
-
| RPC | **冻结**全名,如 `scheduler.SubmitStepResult`(无「如」) |
|
|
82
|
-
| HTTP | method + 完整 path(可含 `{job_id}`) |
|
|
83
|
-
| proto 文件 | 相对路径,如 `proto/scheduler/scheduler.proto` |
|
|
84
|
-
|
|
85
|
-
决策表新增行时使用 **Proposed → Accepted** 仅当 RPC 名已在 §4.5 冻结。
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## 3. 可生成契约包 (fixes A2)
|
|
90
|
-
|
|
91
|
-
对 **新增** 或 **修改 HTTP 绑定** 的 RPC,§4.5 **必须**含 **「Proto / OpenAPI 契约包」** 块(可用 `**Proto 草案**` 加粗标签,非标题):
|
|
92
|
-
|
|
93
|
-
### 3.1 Proto 最小集
|
|
94
|
-
|
|
95
|
-
```protobuf
|
|
96
|
-
// 文件: proto/<svc>/<svc>.proto
|
|
97
|
-
rpc SubmitStepResult(SubmitStepResultReq) returns (SubmitStepResultResp) {
|
|
98
|
-
option (google.api.http) = {
|
|
99
|
-
post: "/internal/v1/tasks/{job_id}/step-results"
|
|
100
|
-
body: "*"
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
message SubmitStepResultReq {
|
|
104
|
-
int32 schema_version = 1;
|
|
105
|
-
string request_id = 2;
|
|
106
|
-
// … 每个字段必须有号与类型
|
|
107
|
-
}
|
|
108
|
-
message SubmitStepResultResp {
|
|
109
|
-
int32 schema_version = 1;
|
|
110
|
-
string request_id = 2;
|
|
111
|
-
bool accepted = 3;
|
|
112
|
-
bool replayed = 4;
|
|
113
|
-
}
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
要求:
|
|
117
|
-
|
|
118
|
-
- 每个字段 **字段号 + 类型 + json_name**(若与 snake 不同)
|
|
119
|
-
- `google.api.http` **完整** post/get/path/body
|
|
120
|
-
- enum/status **闭合**,禁止「等」;与现网 ingest 白名单对齐(例:逐步 ingest 仅四终态)
|
|
121
|
-
|
|
122
|
-
### 3.2 Gateway 注册 (硬)
|
|
123
|
-
|
|
124
|
-
必须写明 **其一**:
|
|
125
|
-
|
|
126
|
-
- 「与 `ReportProgress` / `SubmitResult` **同一**注册点:`<文件路径>` 函数 `<Name>`」
|
|
127
|
-
- 或「ProtoSets 清单 `<path>` 新增 `<proto>` 条目」
|
|
128
|
-
|
|
129
|
-
禁止只写「网关 ProtoSet 含新绑定」。
|
|
130
|
-
|
|
131
|
-
### 3.3 Worker OpenAPI 交叉引用
|
|
132
|
-
|
|
133
|
-
- 路径必须在 `talos-worker/contracts/v1/http.openapi.yaml`(或项目约定路径)**给出 schema 草案**
|
|
134
|
-
- 必填头须与现网 progress/result **同构列出**:
|
|
135
|
-
`Idempotency-Key`, `Authorization-date`, `Authorization: TALOS-WORK-1:...`, `Content-Type`, `Accept`
|
|
136
|
-
- HTTP 请求示例 **必须含上述头**,不得只有 JSON body
|
|
137
|
-
|
|
138
|
-
### 3.4 错误映射
|
|
139
|
-
|
|
140
|
-
| 条件 | gRPC `codes.*` | HTTP | 禁止 |
|
|
141
|
-
|------|----------------|------|------|
|
|
142
|
-
| 租约无效 | `FailedPrecondition` 或项目约定 **唯一**值 | **唯一** 403 或 409 | `403/409(与 progress 同类)` |
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## 4. §4.5 逐接口最低深度 (含不变)
|
|
147
|
-
|
|
148
|
-
每个 `In` **必须**含 generate.md §4.5.2 全部加粗块;额外:
|
|
149
|
-
|
|
150
|
-
| 变更类型 | 额外要求 |
|
|
151
|
-
|----------|----------|
|
|
152
|
-
| 新增 L2+L3 | §3 契约包 + Gateway 注册 + Worker OpenAPI 指针 |
|
|
153
|
-
| 修改 | 字段号/changelog + 兼容缺省 |
|
|
154
|
-
| 不变·本迭代消费 | 从现网 proto/OpenAPI **摘录**字段表+示例;标注源路径;仍须失败示例 |
|
|
155
|
-
| 不变·协议不变 | 同上;禁止「详见 OpenAPI」无正文 |
|
|
156
|
-
|
|
157
|
-
---
|
|
158
|
-
|
|
159
|
-
## 5. 自检 (生成后必过)
|
|
160
|
-
|
|
161
|
-
- [ ] 清单中每个契约面有独立 `In`,无 L2/L4 混写 stub
|
|
162
|
-
- [ ] 无「暂定/如/实现时」RPC 措辞
|
|
163
|
-
- [ ] 新增 RPC 有 proto 字段号 + http option + 注册点
|
|
164
|
-
- [ ] Worker HTTP 示例含完整 work 鉴权头
|
|
165
|
-
- [ ] status/enum 闭合,与 ingest/现网校验一致
|
|
166
|
-
- [ ] 错误表无「或」「同类映射」模糊语
|
|
167
|
-
- [ ] L4 东向 RPC 非一句话 stub
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
## 6. 与 database / frontend guidance 对称
|
|
172
|
-
|
|
173
|
-
| 包 | 路由 | 章节 |
|
|
174
|
-
|----|------|------|
|
|
175
|
-
| database | `database-guidance.md` | §4.4 |
|
|
176
|
-
| frontend | `frontend-guidance.md` | §4.6 |
|
|
177
|
-
| **api** | **本文件** | **§4.5** |
|
|
178
|
-
|
|
179
|
-
`project-conventions-guidance.md` `topic=api` 解决「项目禁令与风格」;本文件解决「可生成契约与分层」。
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
# Approval · Database Guidance Router
|
|
2
|
-
|
|
3
|
-
> **本地技能**: SpecFlow pack 在 `{ide}/specflow/guidance/database/`(见 `skills/guidance-packs.yaml`)。
|
|
4
|
-
> **项目约定**: 写 §4.4 **之前**还须执行 `prompts/approval/project-conventions-guidance.md`(`topic=database`)。
|
|
5
|
-
> **优先级**: 项目约定 + 现网 DDL **>** 本文件 SpecFlow guidance **>** LLM-fallback。
|
|
6
|
-
> **禁止**依赖远程 skill 仓库; **Not** an MCP tool; 禁止「invoke `/mysql` skill」。
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 1. Detect project database stack
|
|
11
|
-
|
|
12
|
-
Scan the **project under review** (change's repo root), not SpecFlow itself. Collect signals
|
|
13
|
-
(non-recursive first; optional one-level into `docker-compose*.yml` / `migrations/`).
|
|
14
|
-
|
|
15
|
-
| Signal | Suggested stack |
|
|
16
|
-
|--------|-----------------|
|
|
17
|
-
| `go.mod` / deps: `go-sql-driver/mysql`, `gorm.io` + mysql DSN, `ENGINE=InnoDB` in `*.sql` | `mysql` |
|
|
18
|
-
| `package.json`: `mysql2`, `mysql`, `@prisma/client` + datasource mysql, drizzle mysql | `mysql` |
|
|
19
|
-
| `pyproject` / requirements: `PyMySQL`, `mysqlclient`, `aiomysql` | `mysql` |
|
|
20
|
-
| `go.mod`: `jackc/pgx`, `lib/pq`; `package.json`: `pg`, `postgres`; Prisma/drizzle postgres | `postgresql` |
|
|
21
|
-
| `docker-compose`: image `postgres` / `mysql` / `mariadb` / `redis` / `elasticsearch` | matching image |
|
|
22
|
-
| SQL files with `ENGINE=InnoDB` / `CHARSET=utf8mb4` | `mysql` |
|
|
23
|
-
| SQL with `JSONB`, `SERIAL`, `gen_random_uuid()` | `postgresql` |
|
|
24
|
-
| Oracle JDBC / `oracledb` / `go-ora` | `oracle` |
|
|
25
|
-
| `ioredis` / `redis` client / `go-redis` | `redis` (cache/KV — usually **not** §4.4 relational DDL) |
|
|
26
|
-
| `@elastic/elasticsearch` / OpenSearch client | `elasticsearch` (search — usually not relational DDL) |
|
|
27
|
-
|
|
28
|
-
**Multi-hit**: pick primary OLTP store for §4.4 (prefer `mysql` / `postgresql` / `oracle` over
|
|
29
|
-
`redis` / `elasticsearch`). Mention secondary stores in §4.7/架构 if relevant.
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## 2. Resolve guidance root (path priority)
|
|
34
|
-
|
|
35
|
-
Before reading pack files, resolve `guidanceRoot` for stack `<stack>`:
|
|
36
|
-
|
|
37
|
-
| Priority | Path | When |
|
|
38
|
-
|----------|------|------|
|
|
39
|
-
| 1 | `.cursor/specflow/guidance/database/<stack>/` | Cursor IDE assets present |
|
|
40
|
-
| 1 | `.claude/specflow/guidance/database/<stack>/` | Claude IDE assets present |
|
|
41
|
-
| 1 | `.agents/specflow/guidance/database/<stack>/` | Codex IDE assets present |
|
|
42
|
-
| 2 | `skills/database/<stack>/` | SpecFlow package / self-repo fallback (relative to SpecFlow package root) |
|
|
43
|
-
| 3 | *(missing)* | `LLM-fallback` |
|
|
44
|
-
|
|
45
|
-
If multiple IDE roots exist, prefer the IDE the user is running in; otherwise the first existing path among cursor → claude → agents.
|
|
46
|
-
|
|
47
|
-
**Announce** after detection + resolve:
|
|
48
|
-
|
|
49
|
-
```text
|
|
50
|
-
DB stack for approval: <mysql|postgresql|oracle|redis|elasticsearch|none>
|
|
51
|
-
Guidance: <.cursor|claude|agents>/specflow/guidance/database/<stack>/SKILL.md
|
|
52
|
-
| skills/database/<stack>/SKILL.md | LLM-fallback
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## 3. On hit — load **local** guidance (Read, do not invent, do not fetch)
|
|
58
|
-
|
|
59
|
-
> 先完成 `project-conventions-guidance.md` 的 `topic=database` 解析并 Read 项目约定(若有)。
|
|
60
|
-
> 本表仅加载 **SpecFlow** guidance pack,用于补强 DDL 写法;不得覆盖项目禁令。
|
|
61
|
-
|
|
62
|
-
Base = resolved `guidanceRoot` above. From that directory:
|
|
63
|
-
|
|
64
|
-
| Stack | Must Read | Also Read when §4.4 needs it |
|
|
65
|
-
|-------|-----------|------------------------------|
|
|
66
|
-
| `mysql` | `SKILL.md` | `references/05-sql-ddl-types.md`, `references/06-index-optimization.md`; JSON → `references/04-functions-json.md` |
|
|
67
|
-
| `postgresql` | `SKILL.md` | `references/06-index-types.md`; JSONB → `references/04-functions-jsonb.md` |
|
|
68
|
-
| `oracle` | `SKILL.md` | `references/09-sql-syntax.md`, `references/10-features.md` |
|
|
69
|
-
| `redis` | `SKILL.md` | Only if change is cache/key design — **not** a substitute for relational DDL |
|
|
70
|
-
| `elasticsearch` | `SKILL.md` | Only if change is index/mapping — **not** a substitute for relational DDL |
|
|
71
|
-
|
|
72
|
-
Point to files **from the router entry** (no reference→reference chains).
|
|
73
|
-
|
|
74
|
-
Apply guidance to §4.4 output:
|
|
75
|
-
|
|
76
|
-
1. Prefer engine/charset/collation idioms from the local skill (MySQL: InnoDB + utf8mb4…).
|
|
77
|
-
2. Prefer type/index gotchas from the skill (e.g. DECIMAL for money, no FLOAT amounts).
|
|
78
|
-
3. Keep SpecFlow hard rules (ER, full CREATE TABLE, 本迭代用法, G3/G4) — skill **supplements**, does not replace.
|
|
79
|
-
|
|
80
|
-
Cite in §4.4 总则 the **actual** paths used:
|
|
81
|
-
- `项目约定: <path…> | 未发现`
|
|
82
|
-
- `DB 技能: .cursor/specflow/guidance/database/mysql` 或 `skills/database/mysql (package fallback)` 或 `LLM-fallback`
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## 4. On miss — LLM fallback
|
|
87
|
-
|
|
88
|
-
If `DB stack = none`, or stack set but **no** guidance root resolves:
|
|
89
|
-
|
|
90
|
-
1. **Do not** force-load mysql/postgresql skills.
|
|
91
|
-
2. Generate §4.4 with SpecFlow rules only (`generate.md` §4.4 + Quality Gates G3/G4).
|
|
92
|
-
3. If design/tasks claim a DB but signals are absent → `WARNING` in §8:
|
|
93
|
-
`design 声称落库但未检测到 DB 栈信号 — 已用 LLM 通用 DDL;建议 refine 标明引擎`.
|
|
94
|
-
4. If stack detected but guidance files missing → `WARNING` in §8:
|
|
95
|
-
`dbStack=<stack> 但未找到 guidance/database — 已用 LLM-fallback;建议 specflow init --force-assets`.
|
|
96
|
-
5. Pure CLI/config changes → keep `不涉及数据库变更(...)`.
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
## 5. Why not remote skills / MCP / IDE skills?
|
|
101
|
-
|
|
102
|
-
- **Remote**: approval must work offline; maintain pack in this repo + init sync.
|
|
103
|
-
- **MCP tools**: markdown guidance, not APIs; routing chooses which local files to `Read`.
|
|
104
|
-
- **IDE skills**: packs must **not** appear under `.cursor/skills` / `.claude/skills` / `.agents/skills`
|
|
105
|
-
(noise + false discoverability). They live only under `{ide}/specflow/guidance/`.
|
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
# Approval · Frontend Guidance Router
|
|
2
|
-
|
|
3
|
-
> Used by `/specflow:approval` when the change touches **UI / 控制台 / 页面 / 组件**.
|
|
4
|
-
> **项目约定**: 写 **§4.6** 前必须执行 `project-conventions-guidance.md`(`topic=frontend`),
|
|
5
|
-
> **并**按本文件 §3 补扫 IDE skills / rules / 落地规约(组件、样式、表单、测试等)。
|
|
6
|
-
> **优先级**: 项目约定 + IDE skills/rules + 现网页面/组件/路由 **>** 本文件结构硬门槛 **>** LLM。
|
|
7
|
-
> **Not** an MCP tool; **禁止** `invoke /react` 之类 IDE skill 口号 —— 一律解析路径后 `Read`。
|
|
8
|
-
> 灵感对齐 vibe-coding Part3 Frontend(栈五元组 / 目录分层 / Visual Loop),**不**搬 MVP 访谈问卷。
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## 1. Detect `uiInScope`
|
|
13
|
-
|
|
14
|
-
Scan proposal / design / tasks / specs (and Tech Stack Intake answers) for UI signals:
|
|
15
|
-
|
|
16
|
-
| Signal (any) | Meaning |
|
|
17
|
-
|--------------|---------|
|
|
18
|
-
| 控制台 / 前端 / UI / 页面 / 路由 / 组件 / 表单 / 弹窗 | UI work in scope |
|
|
19
|
-
| `*.tsx` / `*.vue` / `*.svelte` / `pages/` / `app/` router paths in tasks | UI work in scope |
|
|
20
|
-
| §2.2 前端行非「不涉及」 | UI work in scope |
|
|
21
|
-
| Explicit「不涉及前端」+ no UI paths | `uiInScope=false` |
|
|
22
|
-
|
|
23
|
-
**Announce**:
|
|
24
|
-
|
|
25
|
-
```text
|
|
26
|
-
UI in scope for approval: yes | no
|
|
27
|
-
FE stack: <detected or user-confirmed or unknown>
|
|
28
|
-
Project conventions (frontend): <paths…> | none
|
|
29
|
-
IDE FE skills/rules: <paths…> | none
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
If `uiInScope=no` → omit entire §4.6 from `approval.md`(write one line under detailed design
|
|
33
|
-
optional checklist only if needed: `不涉及前端/UI 变更`). Do **not** invent pages.
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## 2. Detect frontend stack (signals)
|
|
38
|
-
|
|
39
|
-
Project root / common app dirs (non-recursive first; optional `apps/*` / `web/` / `frontend/` one level):
|
|
40
|
-
|
|
41
|
-
| Signal | Suggested FE |
|
|
42
|
-
|--------|--------------|
|
|
43
|
-
| `next` / `next.config.*` | Next.js |
|
|
44
|
-
| `vite` + `react` | React + Vite |
|
|
45
|
-
| `vue` / `nuxt` | Vue / Nuxt |
|
|
46
|
-
| `svelte` / `@sveltejs/kit` | Svelte / SvelteKit |
|
|
47
|
-
| `@angular/core` | Angular |
|
|
48
|
-
| `react-native` / `expo` | React Native |
|
|
49
|
-
| `tailwindcss` | Styling: Tailwind |
|
|
50
|
-
| `zustand` / `@reduxjs/toolkit` / `pinia` / `jotai` | State hint |
|
|
51
|
-
| `shadcn` / `@mui` / `antd` / `element-plus` | UI kit hint |
|
|
52
|
-
|
|
53
|
-
Record a **五元组** for §2.2 / §4.6.1 (fill unknowns via Intake, never invent):
|
|
54
|
-
|
|
55
|
-
1. **Framework** — e.g. React+TS / Next.js / Vue3
|
|
56
|
-
2. **Styling** — Tailwind / CSS Modules / 现网设计系统
|
|
57
|
-
3. **State** — Zustand / Redux / Pinia / 仅服务端状态 …
|
|
58
|
-
4. **UI kit** — shadcn / Ant Design / 公司组件库 / Custom
|
|
59
|
-
5. **FE testing** — Vitest+RTL / Playwright / Cypress / 项目现网命令
|
|
60
|
-
|
|
61
|
-
If `uiInScope=yes` and any of Framework / Styling / State is still unknown after artifacts +
|
|
62
|
-
signals → **STOP** and ask (merge into Tech Stack Intake; do not invent):
|
|
63
|
-
|
|
64
|
-
```text
|
|
65
|
-
本变更含前端/UI,请补全前端技术选型(可写「沿用现网」):
|
|
66
|
-
1. Framework / 语言
|
|
67
|
-
2. Styling / 设计系统
|
|
68
|
-
3. 状态管理(client vs server state 偏好)
|
|
69
|
-
4. UI 组件库(或公司内部库)
|
|
70
|
-
5. 前端验证方式(单测 / 组件测 / E2E / browser 手测命令)
|
|
71
|
-
6.(可选)若用 v0/Lovable 等 AI builder 起稿:导出与本地可构建计划
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## 3. Load implementation conventions (项目约定 + IDE skills/rules + 落地文档)
|
|
77
|
-
|
|
78
|
-
> **目的**:§4.6 不是只选栈,还要让 apply 阶段能按**本仓真实落地规约**写页面/组件。
|
|
79
|
-
> **硬规则**:`uiInScope=yes` 时,起草 §4.6 **之前**必须完成本节;禁止跳过 IDE skills/rules 扫描。
|
|
80
|
-
> **预算**:合计最多 **Read 5 个文件**(配置路径优先占满预算;细节 reference 仅入口点名后再读,禁止链式跳转)。
|
|
81
|
-
|
|
82
|
-
### 3.1 加载顺序(固定)
|
|
83
|
-
|
|
84
|
-
1. **`project-conventions-guidance.md` `topic=frontend`**
|
|
85
|
-
- 先 `specflow/config.yaml` → `conventions.frontend`
|
|
86
|
-
- 再仓根中立 docs(见该路由 §2.2)
|
|
87
|
-
2. **IDE skills / rules / 记忆文件**(本会话 `activeIde` 优先,再 cursor → claude → agents 回退)
|
|
88
|
-
3. **落地向 agent/工程文档**(若尚未纳入预算)
|
|
89
|
-
4. **现网锚点**(Pass 6:路由/布局/API client,**仅读 design/tasks 点名的文件**)
|
|
90
|
-
|
|
91
|
-
**Priority**: ① 项目约定 + IDE skills/rules + 现网 UI **>** ② §4.6 骨架 **>** ③ LLM。
|
|
92
|
-
|
|
93
|
-
### 3.2 必须覆盖的「开发落地」主题(按需匹配文件)
|
|
94
|
-
|
|
95
|
-
扫描/选取文件时,优先覆盖下列维度(有则 Read,无则在 §4.6.1 写「未发现」——**禁止臆造**):
|
|
96
|
-
|
|
97
|
-
| 落地维度 | 写入 §4.6 何处 | 典型关键词 / 文件名线索 |
|
|
98
|
-
|----------|----------------|-------------------------|
|
|
99
|
-
| 目录与命名(components/features/pages) | 4.6.1 / 4.6.3 | `structure`, `folder`, `naming`, `feature-based` |
|
|
100
|
-
| 组件边界与复用(ui vs features) | 4.6.3 | `component`, `design.?system`, `shadcn`, `storybook` |
|
|
101
|
-
| 路由 / 信息架构 | 4.6.2 | `router`, `routing`, `app.?router`, `pages` |
|
|
102
|
-
| 状态与数据获取 | 4.6.4 | `state`, `zustand`, `redux`, `react.?query`, `swr`, `pinia` |
|
|
103
|
-
| 表单与校验 | 4.6.3 / 4.6.4 | `form`, `zod`, `yup`, `validation`, `rhf` |
|
|
104
|
-
| API client / 错误呈现(Toast/Alert) | 4.6.3 / 4.6.4 + 挂 §4.5 | `api.?client`, `fetch`, `axios`, `toast`, `error.?boundary` |
|
|
105
|
-
| 样式 / Token / 主题 | 4.6.1 / 4.6.5 | `tailwind`, `css`, `theme`, `token`, `styled` |
|
|
106
|
-
| 无障碍 / 响应式 | 4.6.5 | `a11y`, `accessibility`, `responsive`, `breakpoint` |
|
|
107
|
-
| i18n | 4.6.1 备注 / 4.6.3 | `i18n`, `locale`, `intl` |
|
|
108
|
-
| 测试与 Visual Loop 命令 | 4.6.5 + §6 | `vitest`, `playwright`, `cypress`, `rtl`, `testing`, `e2e` |
|
|
109
|
-
| Lint / format 禁令 | §2.1 约束 + 4.6.1 | `eslint`, `prettier`, `stylelint`, `biome` |
|
|
110
|
-
|
|
111
|
-
### 3.3 IDE 扫描清单(解析路径后 Read,禁止 invoke)
|
|
112
|
-
|
|
113
|
-
对每个命中路径:**先看文件名/frontmatter `name`/`description`/首段标题**,与上表关键词匹配再纳入预算。
|
|
114
|
-
|
|
115
|
-
**Cursor**
|
|
116
|
-
|
|
117
|
-
| 类型 | 路径模式 |
|
|
118
|
-
|------|----------|
|
|
119
|
-
| Rules | `.cursor/rules/**/*.mdc`(及 `.md`) |
|
|
120
|
-
| Skills | `.cursor/skills/**/SKILL.md` |
|
|
121
|
-
| 其它 | `.cursor/rules` 下与 FE 相关的聚合 rule |
|
|
122
|
-
|
|
123
|
-
**Claude**
|
|
124
|
-
|
|
125
|
-
| 类型 | 路径模式 |
|
|
126
|
-
|------|----------|
|
|
127
|
-
| Skills | `.claude/skills/**/SKILL.md` |
|
|
128
|
-
| Rules | `.claude/rules/**/*` |
|
|
129
|
-
| 记忆 | `CLAUDE.md` / `.claude/CLAUDE.md`(只抽取 FE 相关章节,勿整文件灌入上下文) |
|
|
130
|
-
|
|
131
|
-
**Codex**
|
|
132
|
-
|
|
133
|
-
| 类型 | 路径模式 |
|
|
134
|
-
|------|----------|
|
|
135
|
-
| Skills | `.agents/skills/**/SKILL.md` |
|
|
136
|
-
| 记忆 | `AGENTS.md`(只抽取 FE 相关段落) |
|
|
137
|
-
|
|
138
|
-
**仓根 / 中立落地文档(补充候选,与 conventions 路由合并去重)**
|
|
139
|
-
|
|
140
|
-
| 路径 |
|
|
141
|
-
|------|
|
|
142
|
-
| `docs/frontend/**/*.md`(优先 `conventions.md` / `patterns.md` / `testing.md`) |
|
|
143
|
-
| `docs/engineering/frontend.md` |
|
|
144
|
-
| `.specflow/conventions/frontend.md` |
|
|
145
|
-
| `agent_docs/tech_stack.md` |
|
|
146
|
-
| `agent_docs/code_patterns.md` |
|
|
147
|
-
| `agent_docs/testing.md` |
|
|
148
|
-
| `REVIEW-CHECKLIST.md`(仅 UI/前端相关条目) |
|
|
149
|
-
|
|
150
|
-
**关键词**(文件名 + 标题 + skill description,大小写不敏感):
|
|
151
|
-
|
|
152
|
-
```text
|
|
153
|
-
frontend|front-end|ui|ux|react|vue|next|nuxt|svelte|angular|
|
|
154
|
-
tailwind|component|design-system|design system|css|style|
|
|
155
|
-
router|routing|form|zod|state|zustand|redux|pinia|query|
|
|
156
|
-
playwright|vitest|cypress|testing-library|a11y|accessibility|
|
|
157
|
-
i18n|控制台|前端|页面|组件|样式|表单|路由
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### 3.4 选取与冲突
|
|
161
|
-
|
|
162
|
-
1. `conventions.frontend` 配置路径 **最先占用预算**。
|
|
163
|
-
2. 其次 activeIde 命中的 skill/rule(每类优先 1–2 个最相关)。
|
|
164
|
-
3. 再补仓根 `agent_docs/*` / `docs/frontend/*`。
|
|
165
|
-
4. 同主题多文件内容冲突 → **以 config / 仓根中立 docs 为准**,IDE skill 仅作补充;在 §4.6.1 注明。
|
|
166
|
-
5. 发现硬禁令(例:「禁止新建全局 CSS」「必须用公司 Button」)→ 写入 §2.1 与 §4.6,违反则 chat/`§8` WARNING。
|
|
167
|
-
|
|
168
|
-
### 3.5 写入总则
|
|
169
|
-
|
|
170
|
-
Cite in §4.6.1:
|
|
171
|
-
|
|
172
|
-
| 项 | 填法 |
|
|
173
|
-
|----|------|
|
|
174
|
-
| 项目约定 | config + 中立 docs 路径,`; ` 分隔 / **未发现** |
|
|
175
|
-
| IDE skills/rules | 实际 Read 的 skill/rule 路径 / **未发现** |
|
|
176
|
-
| FE 栈 | 五元组摘要 \| 用户确认 \| 沿用现网 |
|
|
177
|
-
|
|
178
|
-
Announce 示例:
|
|
179
|
-
|
|
180
|
-
```text
|
|
181
|
-
Project conventions (frontend): docs/frontend/conventions.md
|
|
182
|
-
IDE FE skills/rules: .cursor/rules/frontend.mdc; .cursor/skills/ui-patterns/SKILL.md
|
|
183
|
-
Conflict policy: project > IDE conventions > SpecFlow §4.6 skeleton > LLM
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
---
|
|
187
|
-
|
|
188
|
-
## 4. §4.6 output contract (when `uiInScope=yes`)
|
|
189
|
-
|
|
190
|
-
Follow `generate.md` §4.6 exactly. Outline hygiene:
|
|
191
|
-
|
|
192
|
-
```text
|
|
193
|
-
### 4.6 前端 / UI 设计
|
|
194
|
-
├── #### 4.6.1 总则与本迭代结论
|
|
195
|
-
├── #### 4.6.2 信息架构与路由
|
|
196
|
-
├── #### 4.6.3 关键页面 / 组件详设
|
|
197
|
-
│ └── ##### Page · <短名> ← 每页仅此一级标题
|
|
198
|
-
├── #### 4.6.4 状态与数据获取
|
|
199
|
-
└── #### 4.6.5 视觉与验证回路
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
Labels such as「空态」「加载」「错误」「依赖接口」are `**bold**`, never extra headings.
|
|
203
|
-
|
|
204
|
-
Apply loaded conventions into the body:
|
|
205
|
-
|
|
206
|
-
- 目录/命名禁令 → 4.6.1「本迭代不涉及」与 4.6.3 组件边界
|
|
207
|
-
- 状态/表单/API client 模式 → 4.6.4(写「采用项目约定:<path>」)
|
|
208
|
-
- a11y/响应式/测试命令 → 4.6.5
|
|
209
|
-
- **禁止**把 skill 原文整段粘贴进 approval;用可读中文转述硬约束
|
|
210
|
-
|
|
211
|
-
**Quality gates (UI path)**:
|
|
212
|
-
|
|
213
|
-
| ID | Rule |
|
|
214
|
-
|----|------|
|
|
215
|
-
| **G5** | 必须有本迭代**页面/路由清单**(禁止只写「用 React」) |
|
|
216
|
-
| **G6** | 每个关键 `Page · …` 至少覆盖 **空态 / 加载 / 错误** 之一,并标明依赖的 §4.5 `In` |
|
|
217
|
-
|
|
218
|
-
**Visual Verification Loop** (write into §4.6.5 + feed §6 when useful):
|
|
219
|
-
|
|
220
|
-
1. **Generate** — AI/人产出组件
|
|
221
|
-
2. **Render** — dev server 或 headless browser
|
|
222
|
-
3. **Inspect** — 截图 / 设计原则 / a11y 抽查
|
|
223
|
-
4. **Refine** — 修视觉与交互回归后再合入
|
|
224
|
-
|
|
225
|
-
Record exact `dev` / `test` / `browser` commands when known (from conventions / IDE skills / Intake).
|
|
226
|
-
|
|
227
|
-
**Builder exit** (only if AI builder used): source ownership + local install/dev/test + secrets
|
|
228
|
-
handling + exit plan — put under §4.6.1 备注 or §2.5 风险; do not pad marketing lists.
|
|
229
|
-
|
|
230
|
-
---
|
|
231
|
-
|
|
232
|
-
## 5. Cross-links
|
|
233
|
-
|
|
234
|
-
- Pages that call APIs **must** reference §4.5 interface numbers (`I1…`).
|
|
235
|
-
- User journeys in §1.3 / Happy Path §4.2 should name the same pages.
|
|
236
|
-
- §3 architecture may show「控制台 / Web」box; details live in §4.6, not duplicated as
|
|
237
|
-
code-dump trees in §2.1.
|
|
238
|
-
|
|
239
|
-
---
|
|
240
|
-
|
|
241
|
-
## 6. On miss / fallback
|
|
242
|
-
|
|
243
|
-
| Case | Action |
|
|
244
|
-
|------|--------|
|
|
245
|
-
| `uiInScope=no` | Omit §4.6 |
|
|
246
|
-
| `uiInScope=yes`, no conventions / no IDE FE skills | Draft §4.6 with skeleton + Intake;`项目约定: 未发现`;`IDE skills/rules: 未发现`; chat 可 WARNING 建议补 `docs/frontend/conventions.md` 或 Cursor rule |
|
|
247
|
-
| User refuses FE selection while UI required | `[待 refine 澄清: 前端技术选型]`; do not fabricate page trees |
|
|
248
|
-
| Only API change, no UI | §4.5 only; §4.6 omitted |
|
|
249
|
-
| IDE skill 与仓根约定冲突 | 仓根/config 优先;记 WARNING |
|