@chenmk/superflow 0.1.2 → 0.1.3
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 +39 -1
- package/README.zh-CN.md +13 -1
- package/assets/skills/superflow-design/SKILL.md +16 -8
- package/assets/skills/superflow-docs/SKILL.md +17 -8
- package/assets/skills/superflow-pipeline/references/api-design-template.md +99 -63
- package/assets/skills/superflow-pipeline/references/batch-prompt-template.md +62 -14
- package/assets/skills/superflow-pipeline/references/implementation-prompt-template.md +114 -67
- package/assets/skills/superflow-pipeline/references/quality-gate.md +104 -102
- package/assets/skills/superflow-pipeline/references/superpower-technical-design-template.md +45 -19
- package/assets/skills/superflow-pipeline/scripts/superflow-guard.sh +35 -0
- package/dist/commands/design.js +25 -3
- package/dist/commands/design.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
## Copy-Paste 版本
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
````
|
|
10
10
|
使用superpower技能,开启合适的团队,最少包含一名开发和一名测试交叉验证进行需求开发,测试验证闭环交付,更新测试文档和api.md:
|
|
11
11
|
|
|
12
12
|
你是本次开发任务的 Leader Agent,负责指挥一个 Agent Team 完成编码实现。
|
|
@@ -85,7 +85,7 @@ Worker 自测通过 ≠ 完成任务
|
|
|
85
85
|
~/.codex/skills/superflow-pipeline/scripts/superflow-state.sh set {change-dir} review_mode standard
|
|
86
86
|
~/.codex/skills/superflow-pipeline/scripts/superflow-state.sh set {change-dir} implementation_prompt prompt/{batch-prompt}.md
|
|
87
87
|
~/.codex/skills/superflow-pipeline/scripts/superflow-state.sh set {change-dir} worktree_ports "{derived-port}"
|
|
88
|
-
|
|
88
|
+
````
|
|
89
89
|
|
|
90
90
|
`review_mode` 必须在 `off|standard|thorough` 中选择。full workflow 默认
|
|
91
91
|
`standard`;高风险跨仓/接口/DB/第三方任务使用 `thorough`;只有纯文本或明确低风险
|
|
@@ -129,19 +129,32 @@ Worker 自测通过 ≠ 完成任务
|
|
|
129
129
|
从 [design.md](../design.md) 复制本批涉及字段的语义合同,并在当前源码、Mapper/XML
|
|
130
130
|
和数据库样例中复核。必须填写:
|
|
131
131
|
|
|
132
|
-
| 字段
|
|
133
|
-
|
|
134
|
-
|
|
|
132
|
+
| 字段 | 来源表/DTO/事件 | 真实语义 | 目标字段 | 目标语义 | 是否可等价 | 证据锚点 | 禁止用法 | 不确定项/owner |
|
|
133
|
+
| -------- | --------------- | -------- | -------- | -------- | ---------- | ------------- | -------- | -------------- |
|
|
134
|
+
| \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | 是/否 | 文件/SQL/样例 | \_\_\_\_ | \_\_\_\_ |
|
|
135
135
|
|
|
136
136
|
字段语义未确认时,停止并报告 `Blocked`。禁止凭字段名相似、类型相同或值非空继续实现。
|
|
137
137
|
|
|
138
|
+
### 1.1 外部枚举绑定确认
|
|
139
|
+
|
|
140
|
+
如果本批涉及第三方、SDK、BEM/停车、支付退款、财务展示、来源字段、状态同步、
|
|
141
|
+
外部字典或外部枚举,必须从 api.md / sdd-quality-gate.md /
|
|
142
|
+
Superpowers 技术详设复制 `外部枚举绑定确认` / `External Enum Binding`,并在编码前复核:
|
|
143
|
+
|
|
144
|
+
| 业务字段 | 本系统真源字段/枚举 | 外部系统字段 | 外部枚举/字典值 | 展示文案/业务语义/财务语义 | 取值来源 | owner/确认时间 | 不确定项/阻塞处理 | 测试证据 |
|
|
145
|
+
| -------- | ------------------- | ------------ | --------------- | -------------------------- | --------------------------- | -------------- | ---------------------- | ----------------------- |
|
|
146
|
+
| \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | 文档/日志/接口样例/用户确认 | \_\_\_\_ | 无 / Blocked: \_\_\_\_ | TC-\_\_\_ / test-report |
|
|
147
|
+
|
|
148
|
+
禁止用请求成功、值非空或字段存在替代外部枚举业务语义确认。未确认的外部枚举、
|
|
149
|
+
支付来源、财务展示含义或兜底映射,必须停止并报告 `Blocked`。
|
|
150
|
+
|
|
138
151
|
### 2. 写入闭环
|
|
139
152
|
|
|
140
153
|
凡本批涉及回填、落库、绑定、持久化、快照、同步、状态推进,必须填写:
|
|
141
154
|
|
|
142
|
-
| 业务动作 | Java setter/赋值点 | Converter/DTO 映射 | Mapper insert/update | DB column | 后续读取方 | 消费入口 | 验证 SQL
|
|
143
|
-
|
|
144
|
-
|
|
|
155
|
+
| 业务动作 | Java setter/赋值点 | Converter/DTO 映射 | Mapper insert/update | DB column | 后续读取方 | 消费入口 | 验证 SQL | 测试用例 |
|
|
156
|
+
| -------- | ------------------ | ------------------ | -------------------- | --------- | ---------- | -------- | ---------- | --------- |
|
|
157
|
+
| \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | SELECT ... | TC-\_\_\_ |
|
|
145
158
|
|
|
146
159
|
只看到 Java setter 不算落库证明;必须核对 Mapper/XML、注解 SQL、BaseMapper、
|
|
147
160
|
resultMap、条件更新和后续读取方。成组字段必须整组验证。
|
|
@@ -150,15 +163,16 @@ resultMap、条件更新和后续读取方。成组字段必须整组验证。
|
|
|
150
163
|
|
|
151
164
|
必须按真实用户或真实系统入口填写:
|
|
152
165
|
|
|
153
|
-
| 用户/外部动作 | 上游服务/接口 | 本仓入口 | MQ/异步回调 | 关键字段变化 | DB 状态
|
|
154
|
-
|
|
155
|
-
|
|
|
166
|
+
| 用户/外部动作 | 上游服务/接口 | 本仓入口 | MQ/异步回调 | 关键字段变化 | DB 状态 | 结算/通知/展示消费点 | 真实验证方式 |
|
|
167
|
+
| ------------- | ------------- | -------- | ----------- | ------------ | -------- | -------------------- | ------------ |
|
|
168
|
+
| \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | curl/日志/DB |
|
|
156
169
|
|
|
157
170
|
测试 Controller、mock endpoint、绕过鉴权端点只能作为局部证据,不能替代真实入口。
|
|
158
171
|
|
|
159
172
|
### 4. 禁止 fallback 与猜测实现
|
|
160
173
|
|
|
161
174
|
默认禁止以下行为:
|
|
175
|
+
|
|
162
176
|
- 默认值、兜底反查、替代字段、保留旧值、空值转可用、静默跳过。
|
|
163
177
|
- 在下游结算/展示/通知层补偿上游本该写入的业务快照。
|
|
164
178
|
- 只为让测试通过而改断言、改入参、改口径。
|
|
@@ -166,16 +180,16 @@ resultMap、条件更新和后续读取方。成组字段必须整组验证。
|
|
|
166
180
|
若确实需要兼容历史脏数据或外部不可控输入,必须先记录并获得 owner 确认:
|
|
167
181
|
|
|
168
182
|
| 兜底触发条件 | 业务依据 | 会掩盖的异常 | 暴露/告警方式 | 移除条件 | owner确认 |
|
|
169
|
-
|
|
170
|
-
|
|
|
183
|
+
| ------------ | -------- | ------------ | ------------- | -------- | --------- |
|
|
184
|
+
| \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ |
|
|
171
185
|
|
|
172
186
|
### 5. Agent 执行前自检
|
|
173
187
|
|
|
174
188
|
编码前必须填写,任一项为否或不确定则停止:
|
|
175
189
|
|
|
176
|
-
| 真实入口已定位 | 字段语义合同已核对 | 写入闭环已核对 | 禁止兜底边界已确认 | RED 测试已执行 | 允许修改文件 | 禁止修改文件 | 阻塞项
|
|
177
|
-
|
|
178
|
-
| 是/否
|
|
190
|
+
| 真实入口已定位 | 字段语义合同已核对 | 写入闭环已核对 | 禁止兜底边界已确认 | RED 测试已执行 | 允许修改文件 | 禁止修改文件 | 阻塞项 |
|
|
191
|
+
| -------------- | ------------------ | -------------- | ------------------ | -------------- | ------------ | ------------ | -------- |
|
|
192
|
+
| 是/否 | 是/否 | 是/否 | 是/否 | 是/否 | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ |
|
|
179
193
|
|
|
180
194
|
## 项目信息
|
|
181
195
|
|
|
@@ -307,13 +321,14 @@ curl -s -H "token: $TOKEN" ...
|
|
|
307
321
|
|
|
308
322
|
本项目使用 {BUILD_TOOL},命令如下:
|
|
309
323
|
|
|
310
|
-
| 操作 | 命令
|
|
311
|
-
|
|
324
|
+
| 操作 | 命令 |
|
|
325
|
+
| ---- | ------------- |
|
|
312
326
|
| 编译 | {compile-cmd} |
|
|
313
|
-
| 启动 | {run-cmd}
|
|
314
|
-
| 测试 | {test-cmd}
|
|
327
|
+
| 启动 | {run-cmd} |
|
|
328
|
+
| 测试 | {test-cmd} |
|
|
315
329
|
|
|
316
330
|
⚠️ 关键警告:
|
|
331
|
+
|
|
317
332
|
- Gradle 启动 Spring Profile 必须用 --args='--spring.profiles.active=xxx'
|
|
318
333
|
- 绝对不能用 -Dspring-boot.run.profiles=xxx(这是 Maven 的语法,Gradle 会忽略)
|
|
319
334
|
- 每次修改后必须先 clean 再编译,不能依赖增量编译
|
|
@@ -387,9 +402,9 @@ done
|
|
|
387
402
|
6. 字段迁移后必须同步查询逻辑,例如旧 `status` 持久化字段改为派生状态、旧 `plot_id` 改为多站点快照字段。
|
|
388
403
|
7. 在 test-report 填写:
|
|
389
404
|
|
|
390
|
-
| 表
|
|
391
|
-
|
|
392
|
-
|
|
|
405
|
+
| 表 | 真源结构 | 消费仓 | 实体/Mapper/SQL 字段 | 实际库字段 | 处理结论 | 验证证据 |
|
|
406
|
+
| -------- | -------- | -------- | -------------------- | ---------- | ---------------- | -------- |
|
|
407
|
+
| \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | \_\_\_\_ | 通过/阻塞/已修复 | \_\_\_\_ |
|
|
393
408
|
|
|
394
409
|
任一消费仓存在不存在列或旧查询条件时,本批次不得标记完成。
|
|
395
410
|
|
|
@@ -407,6 +422,7 @@ done
|
|
|
407
422
|
8. 任务完成前必须回查版本总 SQL:本批新增/修改的表、字段、索引、默认值、初始化数据必须已合并进需求级汇总 SQL 文件,不能只存在于开发库、临时脚本或 agent 回复中。
|
|
408
423
|
|
|
409
424
|
**禁止事项:**
|
|
425
|
+
|
|
410
426
|
- 禁止为绕过数据库缺字段、缺默认值、缺初始化数据而修改业务逻辑(如加 if-null 判断兼容缺失字段、用硬编码代替数据库默认值)。
|
|
411
427
|
- 禁止自行创建独立 SQL 文件。所有 SQL 脚本必须追加到需求级汇总 SQL 文件。
|
|
412
428
|
- 禁止把 SQL 写在临时说明里但不追加到需求汇总 SQL 文件。
|
|
@@ -415,6 +431,7 @@ done
|
|
|
415
431
|
- 禁止因为开发库已经存在字段就跳过总 SQL 收口;发布以版本总 SQL 为准。
|
|
416
432
|
|
|
417
433
|
**任务完成前必须输出 SQL 收口对账表:**
|
|
434
|
+
|
|
418
435
|
```
|
|
419
436
|
版本总 SQL 收口对账:
|
|
420
437
|
| P编号 | 表 | 字段/索引/数据 | 源码引用 | 总SQL位置 | 开发库状态 | 测试库状态 | 处理结论 |
|
|
@@ -423,6 +440,7 @@ done
|
|
|
423
440
|
```
|
|
424
441
|
|
|
425
442
|
**任务交付报告中必须包含的数据库核查章节:**
|
|
443
|
+
|
|
426
444
|
```
|
|
427
445
|
数据库结构核查:
|
|
428
446
|
- 检查的表/字段/索引/初始化数据:{列出具体检查项}
|
|
@@ -436,6 +454,7 @@ done
|
|
|
436
454
|
## 强制执行顺序(数据库迁移类任务硬门禁)
|
|
437
455
|
|
|
438
456
|
**自动检测规则**:生成本 prompt 时,如本批次涉及以下任一条件,则**必须**包含本章节,不可跳过、不可绕行:
|
|
457
|
+
|
|
439
458
|
- 新增表
|
|
440
459
|
- 删除字段
|
|
441
460
|
- 物理删除旧字段
|
|
@@ -485,6 +504,7 @@ done
|
|
|
485
504
|
- 禁止只靠 `BUILD SUCCESS` 或编译通过宣称完成
|
|
486
505
|
|
|
487
506
|
**禁止事项:**
|
|
507
|
+
|
|
488
508
|
- 禁止为绕过数据库缺字段、缺默认值、缺初始化数据、历史数据未迁移而修改业务逻辑
|
|
489
509
|
- 禁止自行创建独立 SQL 文件。所有 SQL 脚本必须追加到需求级汇总 SQL 文件
|
|
490
510
|
- 禁止把 SQL 写在临时说明里但不追加到需求汇总 SQL 文件
|
|
@@ -516,21 +536,25 @@ done
|
|
|
516
536
|
从 api.md 提取接口矩阵后,必须执行以下对账检查:
|
|
517
537
|
|
|
518
538
|
### 检查 1:动作-接口映射对账
|
|
539
|
+
|
|
519
540
|
- 每个前端按钮是否在 api.md 有对应接口定义?
|
|
520
541
|
- 每个 api.md 接口是否在 Controller 有对应 mapping?
|
|
521
542
|
- api.md 中的固定路径(如 `/export`、`/template`)是否可能与 `{id}` 路径变量冲突?
|
|
522
543
|
|
|
523
544
|
### 检查 2:文件流接口对账
|
|
545
|
+
|
|
524
546
|
- 导出/下载接口在 api.md 是否标注为文件流?
|
|
525
547
|
- 对应 Controller 方法是否直接操作 HttpServletResponse 而非返回 Response<T>?
|
|
526
548
|
- 是否设置了 Content-Type 和 Content-Disposition?
|
|
527
549
|
|
|
528
550
|
### 检查 3:导入接口对账
|
|
551
|
+
|
|
529
552
|
- failureCount > 0 时,业务 code 是否为非 0?
|
|
530
553
|
- Excel 模板下载 DTO 和导入解析 DTO 的列头是否一致?
|
|
531
554
|
- 日期字段是否兼容 yyyy-MM-dd 和 yyyy-MM-dd HH:mm:ss?
|
|
532
555
|
|
|
533
556
|
### 检查 4:数据权限决策对账
|
|
557
|
+
|
|
534
558
|
- 每个访问业务数据的接口是否都有数据权限判断(需要/不需要/不确定)?
|
|
535
559
|
- 如果判断为"需要",是否已调查当前仓库已有权限模型并写明复用方案?
|
|
536
560
|
- 如果判断为"不需要",是否写明了原因?
|
|
@@ -539,12 +563,14 @@ done
|
|
|
539
563
|
- 详情/编辑/删除是否做了越权保护?
|
|
540
564
|
|
|
541
565
|
### 检查 5:外部依赖对账
|
|
566
|
+
|
|
542
567
|
- SDK 调用参数是否有来源说明?
|
|
543
568
|
- 是否已记录真实请求/响应或标记阻塞?
|
|
544
569
|
|
|
545
570
|
## Phase 2: 创建 Agent Team
|
|
546
571
|
|
|
547
572
|
创建 Team,成员如下:
|
|
573
|
+
|
|
548
574
|
- **Leader**: 你(协调、集成验证、亲自执行回归测试)
|
|
549
575
|
- **Worker-1(至少保留)**: Group A - {task-list-1}
|
|
550
576
|
- **Worker-2(可选)**: Group B - {task-list-2}
|
|
@@ -554,7 +580,7 @@ done
|
|
|
554
580
|
|
|
555
581
|
## Phase 3: 给每个 Worker 的 Prompt 模板
|
|
556
582
|
|
|
557
|
-
|
|
583
|
+
````
|
|
558
584
|
你是 Worker Agent,负责执行分配给你的开发任务。
|
|
559
585
|
|
|
560
586
|
### 核心原则
|
|
@@ -575,7 +601,8 @@ done
|
|
|
575
601
|
pwd
|
|
576
602
|
git branch --show-current
|
|
577
603
|
git status --short
|
|
578
|
-
|
|
604
|
+
````
|
|
605
|
+
|
|
579
606
|
- 确认当前目录包含本批次 worktree 名称
|
|
580
607
|
- 确认当前分支是本批次分支
|
|
581
608
|
- 如有异常,停止工作,向 Leader 报告
|
|
@@ -583,6 +610,7 @@ git status --short
|
|
|
583
610
|
步骤 0.5: 数据库前置门禁与强制执行顺序(写代码前必须执行,不可跳过)
|
|
584
611
|
|
|
585
612
|
**一般任务(仅字段/索引变更,无历史数据迁移):**
|
|
613
|
+
|
|
586
614
|
- 对照 design.md / tasks.md 列出本 Worker 任务依赖的表、字段、索引、默认值
|
|
587
615
|
- 连接开发环境数据库,执行 SHOW CREATE TABLE / SHOW COLUMNS / SELECT 确认结构
|
|
588
616
|
- 如果发现缺失,从需求汇总 SQL 文件中找到对应脚本执行到开发环境数据库
|
|
@@ -618,6 +646,7 @@ git status --short
|
|
|
618
646
|
- 禁止只靠 BUILD SUCCESS 或编译通过宣称完成
|
|
619
647
|
|
|
620
648
|
**通用禁止:**
|
|
649
|
+
|
|
621
650
|
- 禁止因为字段缺失而在业务代码里写绕过逻辑
|
|
622
651
|
- 禁止自行创建独立 SQL 文件,所有 SQL 统一追加到需求级汇总 SQL 文件
|
|
623
652
|
- 禁止用 mock/单测/BUILD SUCCESS 代替真实数据库结构核查和数据迁移验证
|
|
@@ -626,24 +655,26 @@ git status --short
|
|
|
626
655
|
步骤 1: 读取 design.md 对应章节,理解设计
|
|
627
656
|
步骤 2: 修改代码(所有编辑操作必须在 worktree 目录内完成)
|
|
628
657
|
步骤 3: 代码自审(必须先做,不能跳过)
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
658
|
+
|
|
659
|
+
- 重新读取修改后的文件,逐行检查
|
|
660
|
+
- 对照 design.md 检查是否按设计实现
|
|
661
|
+
- 重点检查:空指针风险、异常处理、事务边界、日志规范
|
|
662
|
+
- **文件流接口检查**:导出/下载方法是否直接操作 HttpServletResponse?是否设置了 Content-Type 和 Content-Disposition?是否避免了被统一 JSON 包装?
|
|
663
|
+
- **导入接口检查**:failureCount > 0 时业务 code 是否非 0?Excel 列头是否与模板一致?日期格式是否兼容 yyyy-MM-dd?
|
|
664
|
+
- **路由检查**:新增的固定路径是否可能被现有 `{id}` 路径变量抢占?
|
|
665
|
+
- **数据权限检查**:访问业务数据的接口是否按 api.md 的数据权限决策实现了?是否复用了当前仓库已有权限模式?是否避免了凭字段名猜测?
|
|
666
|
+
- **外部 SDK 检查**:SDK 参数是否有来源说明?是否凭字段名猜测?
|
|
667
|
+
- 使用 `code-review-java` skill 进行评审
|
|
668
|
+
- 发现问题立即修复,修复后重新自审
|
|
669
|
+
- 自审未通过不得进入编译环节
|
|
670
|
+
步骤 4: 停止旧进程
|
|
641
671
|
pkill -f "spring-boot:run" 2>/dev/null || true
|
|
642
672
|
pkill -f "GradleDaemon" 2>/dev/null || true
|
|
643
673
|
sleep 2
|
|
644
|
-
步骤 5: 确认端口已释放
|
|
645
|
-
netstat -tlnp | grep {port}
|
|
646
|
-
步骤 6: 检查端口占用(必须先做,再编译)
|
|
674
|
+
步骤 5: 确认端口已释放
|
|
675
|
+
netstat -tlnp | grep {port} # 应该无输出
|
|
676
|
+
步骤 6: 检查端口占用(必须先做,再编译)
|
|
677
|
+
|
|
647
678
|
```bash
|
|
648
679
|
PORT={port}
|
|
649
680
|
# 检查端口占用
|
|
@@ -658,9 +689,11 @@ if lsof -i :$PORT > /dev/null 2>&1 || netstat -tlnp 2>/dev/null | grep -q ":$POR
|
|
|
658
689
|
done
|
|
659
690
|
fi
|
|
660
691
|
```
|
|
692
|
+
|
|
661
693
|
- 如果更换了端口,后续所有 URL 必须同步使用新端口
|
|
662
694
|
|
|
663
695
|
步骤 7: 重新编译(必须先 clean)
|
|
696
|
+
|
|
664
697
|
```bash
|
|
665
698
|
{compile-cmd}
|
|
666
699
|
```
|
|
@@ -693,12 +726,14 @@ fi
|
|
|
693
726
|
```
|
|
694
727
|
|
|
695
728
|
**关键原则**:
|
|
729
|
+
|
|
696
730
|
- 其他 agent 能正常编译启动,说明环境和配置是对的
|
|
697
731
|
- 遇到问题时,先检查自己的代码修改,而非假设环境有问题
|
|
698
732
|
- 必须尝试修复,不能一遇到错误就放弃
|
|
699
733
|
- 修复后必须重新 clean compile,确认 BUILD SUCCESS
|
|
700
734
|
|
|
701
735
|
步骤 8: 启动应用(记录 PID)
|
|
736
|
+
|
|
702
737
|
```bash
|
|
703
738
|
# 先停止自己的旧进程(只停自己的,不碰别人的)
|
|
704
739
|
pkill -f "spring-boot:run" 2>/dev/null || true
|
|
@@ -709,45 +744,48 @@ nohup {run-cmd} > app.log 2>&1 &
|
|
|
709
744
|
echo $! > /tmp/app.pid
|
|
710
745
|
sleep 15
|
|
711
746
|
```
|
|
747
|
+
|
|
712
748
|
- 如果使用了新端口,run-cmd 中必须传入新端口(如 --server.port=$PORT)
|
|
713
|
-
步骤 9: 进程验证(必须执行)
|
|
749
|
+
步骤 9: 进程验证(必须执行)
|
|
714
750
|
- 检查 PID: ps -o pid,lstart,cmd -p $(cat /tmp/app.pid)
|
|
715
751
|
- 检查端口: netstat -tlnp | grep $PORT 或 lsof -i :$PORT
|
|
716
752
|
- 检查日志: tail -30 app.log | grep "Started Application\|JVM running"
|
|
717
753
|
- 确认启动时间是本次启动
|
|
718
754
|
- 如果用了新端口,确认新端口确实被本进程监听
|
|
719
|
-
步骤 10: 健康检查
|
|
720
|
-
|
|
721
|
-
步骤 11: 获取测试 Token(严格按 Token 获取规范执行)
|
|
755
|
+
步骤 10: 健康检查
|
|
756
|
+
curl -s http://localhost:$PORT{context-path}/actuator/health | grep UP
|
|
757
|
+
步骤 11: 获取测试 Token(严格按 Token 获取规范执行)
|
|
722
758
|
- 调用 /captcha/image 获取验证码(带 Cookie)
|
|
723
759
|
- 调用 /login 表单提交获取 token
|
|
724
760
|
- 验证 token 非空且不为 null
|
|
725
|
-
步骤 12: 执行 RED 验证(必须在生产代码修改前完成)
|
|
761
|
+
步骤 12: 执行 RED 验证(必须在生产代码修改前完成)
|
|
726
762
|
- 从 tests.md 提取本批次用例 ID 和自动化命令
|
|
727
763
|
- 运行目标单测/接口自动化命令,确认失败原因是预期业务断言
|
|
728
764
|
- 记录命令、失败摘要、失败断言到 test-report 的 RED 失败证据
|
|
729
765
|
- RED 未正确失败时不得继续编码
|
|
730
|
-
步骤 13: 执行接口验证 Checklist(逐项执行,来自 tests.md L3 用例)
|
|
766
|
+
步骤 13: 执行接口验证 Checklist(逐项执行,来自 tests.md L3 用例)
|
|
731
767
|
- 按照 Phase 4.5 的 checklist 逐项执行 curl 命令
|
|
732
768
|
- 记录每个用例的请求、响应和断言结果
|
|
733
769
|
- 未全部勾选不得报告完成
|
|
734
|
-
步骤 14: 数据库验证
|
|
770
|
+
步骤 14: 数据库验证
|
|
735
771
|
- 执行 SHOW CREATE TABLE 确认结构
|
|
736
772
|
- 执行 SELECT 查询确认数据状态
|
|
737
|
-
步骤 15: 日志检查
|
|
773
|
+
步骤 15: 日志检查
|
|
738
774
|
- grep ERROR app.log
|
|
739
775
|
- 确认无 ERROR
|
|
740
|
-
步骤 16: 回填 test-report.md
|
|
776
|
+
步骤 16: 回填 test-report.md
|
|
741
777
|
- 记录 RED、GREEN、curl、响应、DB 查询、日志检查结果
|
|
742
|
-
步骤 17: 执行 SDD 集成验收脚本(必须执行)
|
|
743
|
-
|
|
744
|
-
|
|
778
|
+
步骤 17: 执行 SDD 集成验收脚本(必须执行)
|
|
779
|
+
~/.codex/hooks/superflow-verify-integration.sh \
|
|
780
|
+
{project-path}/doc/openspec/changes/{change-id}/embedded-changes/pXX-xxx/test-report.md
|
|
745
781
|
- 脚本失败时不得提交、不得交付、不得写"后续补测"
|
|
746
782
|
- 必须补齐真实启动、curl、DB、日志证据后重跑
|
|
747
|
-
步骤 18: 报告开发完成,等待 Tester 独立测试
|
|
783
|
+
步骤 18: 报告开发完成,等待 Tester 独立测试
|
|
748
784
|
|
|
749
785
|
### 报告格式
|
|
786
|
+
|
|
750
787
|
开发完成报告:
|
|
788
|
+
|
|
751
789
|
- 任务 ID: {task-id}
|
|
752
790
|
- 状态: 开发完成,等待独立测试
|
|
753
791
|
- 修改文件: {file}
|
|
@@ -783,25 +821,31 @@ sleep 15
|
|
|
783
821
|
- test-report 已回填: {是 / 否}
|
|
784
822
|
- SDD 集成验收脚本: {通过 / 失败,失败时贴出原因}
|
|
785
823
|
- 说明: 应用已启动,接口已验证,等待独立 Tester 测试验证
|
|
824
|
+
|
|
786
825
|
```
|
|
787
826
|
|
|
788
827
|
## Phase 3b: 给 Tester 的 Prompt 模板
|
|
789
828
|
|
|
790
829
|
```
|
|
830
|
+
|
|
791
831
|
你是独立测试 Agent(Tester),负责验证 Worker 的开发成果。
|
|
792
832
|
|
|
793
833
|
### 核心原则
|
|
834
|
+
|
|
794
835
|
- **与 Worker 完全分离**:不参考 Worker 的自测报告,独立从头执行测试
|
|
795
836
|
- **客观报告**:如实报告失败,不替 Worker 找理由
|
|
796
837
|
- **覆盖全部用例**:执行 tests.md 中所有标注 [自动化] 的用例
|
|
797
838
|
|
|
798
839
|
### 你的任务
|
|
840
|
+
|
|
799
841
|
测试 Worker 完成的任务:{task-id}
|
|
800
842
|
|
|
801
843
|
### 参考文档
|
|
844
|
+
|
|
802
845
|
- tests.md: {project-path}/doc/openspec/changes/{change-id}/tests.md
|
|
803
846
|
|
|
804
847
|
### 执行流程
|
|
848
|
+
|
|
805
849
|
步骤 1: 读取 tests.md 对应章节的全部用例
|
|
806
850
|
步骤 2: 独立执行接口测试(curl)
|
|
807
851
|
步骤 3: 独立执行数据库验证(mysql 查询)
|
|
@@ -809,7 +853,9 @@ sleep 15
|
|
|
809
853
|
步骤 5: 向 Leader 报告客观结果
|
|
810
854
|
|
|
811
855
|
### 报告格式
|
|
856
|
+
|
|
812
857
|
独立测试报告:
|
|
858
|
+
|
|
813
859
|
- 任务 ID: {task-id}
|
|
814
860
|
- 测试人: Tester(独立)
|
|
815
861
|
- 测试用例: 共 X 个,执行 X 个,通过 X 个,失败 X 个
|
|
@@ -819,6 +865,7 @@ sleep 15
|
|
|
819
865
|
- 数据库验证: ...
|
|
820
866
|
- 日志检查: ...
|
|
821
867
|
- 结论: 通过 / 不通过
|
|
868
|
+
|
|
822
869
|
```
|
|
823
870
|
|
|
824
871
|
## Phase 4: 集成验证(你亲自执行)
|
|
@@ -1040,17 +1087,17 @@ Worker 完成编码和启动后,必须按以下 checklist 逐项执行接口
|
|
|
1040
1087
|
3. 粘贴给新 Agent 执行
|
|
1041
1088
|
4. 关键占位符对照表:
|
|
1042
1089
|
|
|
1043
|
-
| 占位符
|
|
1044
|
-
|
|
1045
|
-
| `{change-id}`
|
|
1046
|
-
| `{project-path}`
|
|
1047
|
-
| `{maven-or-gradle}` | 构建工具
|
|
1048
|
-
| `{profile-name}`
|
|
1049
|
-
| `{base-port}`
|
|
1050
|
-
| `{batch-id}`
|
|
1051
|
-
| `{port}`
|
|
1052
|
-
| `{context-path}`
|
|
1053
|
-
| `{compile-cmd}`
|
|
1054
|
-
| `{run-cmd}`
|
|
1055
|
-
| `{task-list-N}`
|
|
1056
|
-
| `{curl-examples}`
|
|
1090
|
+
| 占位符 | 说明 | 示例 |
|
|
1091
|
+
| ------------------- | ------------------------------- | --------------------------------------------------------- |
|
|
1092
|
+
| `{change-id}` | 变更目录名 | `3.24.0.2-fix-debug-status-and-light-on-bind` |
|
|
1093
|
+
| `{project-path}` | 项目绝对路径 | `/home/ake-yanfa/IdeaProjects/MPGS/park-mpgs` |
|
|
1094
|
+
| `{maven-or-gradle}` | 构建工具 | `Gradle` |
|
|
1095
|
+
| `{profile-name}` | Spring Profile | `cmk` |
|
|
1096
|
+
| `{base-port}` | 应用基础端口号(配置文件中) | `9250` |
|
|
1097
|
+
| `{batch-id}` | 批次序号 | `15` |
|
|
1098
|
+
| `{port}` | 计算端口 = base-port + batch-id | `9265` |
|
|
1099
|
+
| `{context-path}` | 上下文路径 | `/mpgs` |
|
|
1100
|
+
| `{compile-cmd}` | 编译命令 | `./gradlew clean compileJava -x test` |
|
|
1101
|
+
| `{run-cmd}` | 启动命令 | `./gradlew bootRun --args='--spring.profiles.active=cmk'` |
|
|
1102
|
+
| `{task-list-N}` | 分配给 Worker 的任务 | `Task 5.1, Task 7.1, Task 9.1` |
|
|
1103
|
+
| `{curl-examples}` | curl 命令示例 | 从 tests.md 提取 |
|