helloagents 3.0.32 → 3.0.35
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/.claude-plugin/plugin.json +2 -2
- package/.codex-plugin/plugin.json +3 -4
- package/README.md +72 -73
- package/README_CN.md +72 -73
- package/bootstrap-lite.md +10 -12
- package/bootstrap.md +22 -24
- package/gemini-extension.json +1 -1
- package/install.ps1 +21 -3
- package/install.sh +19 -2
- package/package.json +2 -2
- package/scripts/capability-registry.mjs +5 -3
- package/scripts/cli-doctor-codex.mjs +150 -1
- package/scripts/cli-doctor-render.mjs +2 -1
- package/scripts/cli-lifecycle-hosts.mjs +76 -34
- package/scripts/cli-lifecycle.mjs +50 -15
- package/scripts/cli-messages.mjs +5 -5
- package/scripts/delivery-gate-messages.mjs +5 -4
- package/scripts/delivery-gate.mjs +11 -22
- package/scripts/guard.mjs +1 -1
- package/scripts/notify-closeout.mjs +61 -22
- package/scripts/notify-context.mjs +6 -6
- package/scripts/notify-payload.mjs +8 -0
- package/scripts/notify-route.mjs +1 -1
- package/scripts/notify-ui.mjs +14 -1
- package/scripts/notify.mjs +80 -4
- package/scripts/plan-contract.mjs +10 -14
- package/scripts/project-session-cleanup.mjs +45 -31
- package/scripts/qa-review-state.mjs +313 -0
- package/scripts/ralph-loop.mjs +86 -14
- package/scripts/runtime-scope.mjs +1 -3
- package/scripts/session-capsule.mjs +51 -13
- package/scripts/state-document.mjs +77 -0
- package/scripts/workflow-core.mjs +13 -19
- package/scripts/workflow-plan-files.mjs +1 -1
- package/scripts/workflow-recommendation.mjs +55 -67
- package/scripts/workflow-state.mjs +8 -8
- package/skills/commands/auto/SKILL.md +12 -12
- package/skills/commands/build/SKILL.md +9 -10
- package/skills/commands/commit/SKILL.md +1 -1
- package/skills/commands/help/SKILL.md +11 -13
- package/skills/commands/init/SKILL.md +18 -9
- package/skills/commands/loop/SKILL.md +70 -96
- package/skills/commands/plan/SKILL.md +7 -8
- package/skills/commands/prd/SKILL.md +3 -3
- package/skills/commands/qa/SKILL.md +49 -0
- package/skills/hello-ui/SKILL.md +3 -3
- package/skills/helloagents/SKILL.md +12 -15
- package/skills/qa-review/SKILL.md +92 -0
- package/templates/plans/contract.json +4 -7
- package/templates/plans/plan.md +1 -1
- package/templates/plans/tasks.md +1 -1
- package/templates/verify.yaml +1 -1
- package/scripts/review-state.mjs +0 -193
- package/scripts/verify-state.mjs +0 -175
- package/skills/commands/global/SKILL.md +0 -71
- package/skills/commands/verify/SKILL.md +0 -46
- package/skills/commands/wiki/SKILL.md +0 -57
- package/skills/hello-review/SKILL.md +0 -42
- package/skills/hello-verify/SKILL.md +0 -144
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ~verify
|
|
3
|
-
description: 验证总入口 — 审查、lint、typecheck、test、build 与修复循环(~verify 命令)
|
|
4
|
-
policy:
|
|
5
|
-
allow_implicit_invocation: false
|
|
6
|
-
---
|
|
7
|
-
Trigger: ~verify [scope]
|
|
8
|
-
|
|
9
|
-
## 流程
|
|
10
|
-
|
|
11
|
-
0. 先对齐当前工作流状态:
|
|
12
|
-
- 若当前上下文中已注入“当前工作流约束”或“当前推荐下一命令”,先服从它
|
|
13
|
-
- 即使命令通过,也不能越过当前方案包边界:不完整方案包不能视为可信交付记录,未闭合方案包不能被整体报告为已完成
|
|
14
|
-
- 当推荐路径已进入 `~verify` / 收尾时,优先把本命令用于审查、验真和交付收尾
|
|
15
|
-
- 若当前存在活跃方案包,先读取 `requirements.md`、`plan.md`、`tasks.md`、`contract.json`,把它们当作当前验证契约;不要只看命令结果
|
|
16
|
-
- 若当前运行在 Codex active goal 下,按 active goal 关联方案包和 `state_path` 复核范围;`/goal` 只负责续跑,不改变验证契约
|
|
17
|
-
- 若 `contract.json` 声明 `advisor.required=true` 或 `ui.styleAdvisor.required=true`,则本次验证还必须补齐当前会话 `artifacts/advisor.json`;advisor / style advisor 都是可选能力,不是默认常驻步骤
|
|
18
|
-
- 若 `contract.json` 声明 `ui.visualValidation.required=true`,则本次验证还必须补齐当前会话 `artifacts/visual.json`;视觉验收优先用截图/浏览器工具,没有工具时才降级为结构化代码级自检
|
|
19
|
-
1. 先决定验证分流:
|
|
20
|
-
- 若当前上下文中已注入“验证分流”,先按该分流执行
|
|
21
|
-
- 用户显式使用 `~review` 时,即使当前没有注入分流,也按审查优先起步
|
|
22
|
-
- 若没有注入分流、也不是 `~review`,默认先做全量验证;执行中一旦发现高风险流程、关键权限/配置/迁移/发布边界或明显未覆盖的风险点,立即补做 `hello-review`
|
|
23
|
-
2. 审查优先模式:
|
|
24
|
-
- 获取变更范围:无参数默认未提交变更;`staged` 代表暂存区;指定文件/目录则只审查对应范围
|
|
25
|
-
- 按 hello-* 技能查找路径读取 `hello-review` SKILL.md,执行逐文件审查
|
|
26
|
-
- 高风险流程除显式范围外,还要主动补查相关配置、迁移、权限、部署或安全边界文件,不能只盯住单个功能文件
|
|
27
|
-
- 审查结论确定后,立即调用 `scripts/review-state.mjs write` 写当前会话 `artifacts/review.json`;用结构化字段记录 `outcome`、`conclusion`、`findings`、`fileReferences`,不要让后续检查脚本再从自然语言消息里猜结论
|
|
28
|
-
3. 全量验证模式或审查后继续验证:
|
|
29
|
-
- 读取 `hello-verify` SKILL.md
|
|
30
|
-
- 按其“验证命令来源”优先级检测命令
|
|
31
|
-
- 逐个运行所有检测到的命令
|
|
32
|
-
- 收集每个命令的输出和退出码
|
|
33
|
-
- 对照当前契约逐项核对:requirements 是否覆盖、tasks 中每项“完成标准”是否满足、`plan.md` 中风险与设计约束是否被验证、`contract.json` 中声明的 `verifyMode` / reviewer / tester 关注边界是否已被覆盖
|
|
34
|
-
- 若 Codex active goal 存在,还要确认 `tasks.md` 的 AFK/HITL 边界:仍有可执行 AFK 项时,不进入 complete;只在目标、任务、验证和收尾都闭合后标记 goal complete
|
|
35
|
-
- 若 `advisor.required=true` 或 `ui.styleAdvisor.required=true`,在进入收尾前调用 `scripts/advisor-state.mjs write` 写当前会话 `artifacts/advisor.json`;记录触发原因、focus、consultedSources、结论与建议,禁止只在自然语言里留一段 advisor 意见
|
|
36
|
-
- 若 `ui.visualValidation.required=true`,在进入收尾前调用 `scripts/visual-state.mjs write` 写当前会话 `artifacts/visual.json`;记录 `reason`、`tooling`、`screensChecked`、`statesChecked`、`status`、`summary`、`findings` 与 `recommendations`
|
|
37
|
-
4. 汇总报告:
|
|
38
|
-
- ✅ 通过的审查项 / 命令
|
|
39
|
-
- ❌ 失败的审查项 / 命令 + 错误详情
|
|
40
|
-
- 合同核对结论:哪些需求 / 任务完成标准已满足,哪些仍未满足
|
|
41
|
-
- 修复建议
|
|
42
|
-
- 高风险流程额外说明:不能把“命令通过”直接等同于“风险已解除”;若仍存在未验证的风险边界、待授权操作或不可逆步骤,必须明确列出并停下
|
|
43
|
-
|
|
44
|
-
## 失败处理
|
|
45
|
-
- 有失败 → 逐个修复,修复后重新运行对应审查或验证
|
|
46
|
-
- 全部通过 → 按当前已加载的 HelloAGENTS 规则进入 CONSOLIDATE 收尾;若 Codex active goal 的目标也已满足,再标记 goal complete,并按交付边界报告完成
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ~wiki
|
|
3
|
-
description: 初始化或同步项目知识库(与 ~init 同义)
|
|
4
|
-
policy:
|
|
5
|
-
allow_implicit_invocation: false
|
|
6
|
-
---
|
|
7
|
-
Trigger: ~wiki
|
|
8
|
-
|
|
9
|
-
`~wiki` 是用户显式命令,仅创建、补全或同步项目知识库。
|
|
10
|
-
|
|
11
|
-
`~wiki` 是显式知识库命令,不受 `kb_create_mode` 限制。
|
|
12
|
-
执行 `~wiki` 时,`.helloagents/` 目录结构、模板格式和状态文件重写规则按当前已加载的 HelloAGENTS 规则执行;不写入项目级规则文件,也不创建项目级 HelloAGENTS 包根链接。
|
|
13
|
-
`.helloagents/` 在本 skill 中统一按项目级存储路径理解:状态文件只使用 `state_path`;若 `project_store_mode=repo-shared`,`context.md`、`guidelines.md`、`verify.yaml`、`CHANGELOG.md`、`DESIGN.md`、`modules/` 改按当前上下文中已注入的项目知识目录写入。
|
|
14
|
-
|
|
15
|
-
## 流程
|
|
16
|
-
|
|
17
|
-
### 阶段 1:基础准备(必做)
|
|
18
|
-
|
|
19
|
-
1. 创建 `.helloagents/` 目录 + `state_path`(按 templates/STATE.md 格式);初始“主线目标”只写当前知识库初始化 / 同步目标,不把它写成长期项目总目标
|
|
20
|
-
2. 追加 `.gitignore`(如果对应行不存在):
|
|
21
|
-
```
|
|
22
|
-
.helloagents/
|
|
23
|
-
```
|
|
24
|
-
3. 明确不执行以下操作:
|
|
25
|
-
- 不创建或更新项目级规则文件(`AGENTS.md`、`CLAUDE.md`、`.gemini/GEMINI.md`)
|
|
26
|
-
- 不创建项目级 HelloAGENTS 包根链接
|
|
27
|
-
|
|
28
|
-
### 阶段 2:知识库创建或补全(条件性)
|
|
29
|
-
|
|
30
|
-
检查项目是否有实际代码文件(非空项目):
|
|
31
|
-
- 有代码文件 → 执行完整知识库创建/补全(下方流程)
|
|
32
|
-
- 空项目 → 保留 `.helloagents/` 和 `state_path`,告知用户“项目为空,其余知识文件将在后续开发或首次编码任务中补全”
|
|
33
|
-
|
|
34
|
-
知识库创建/补全流程(统一写入 `.helloagents/` 对应的项目级存储路径;`project_store_mode=repo-shared` 时实际落在共享知识目录):
|
|
35
|
-
1. 按 templates/ 目录的模板格式,分析项目代码库后创建或补全:
|
|
36
|
-
- context.md — 按 templates/context.md 格式,填入项目概述、技术栈、架构、目录结构、模块链接
|
|
37
|
-
- guidelines.md — 按 templates/guidelines.md 格式,从现有代码推断编码约定
|
|
38
|
-
- verify.yaml — 验证命令(从 package.json/pyproject.toml 检测)
|
|
39
|
-
- CHANGELOG.md — 按 templates/CHANGELOG.md 格式创建或更新
|
|
40
|
-
- DESIGN.md — 如果项目包含 UI 代码,按 templates/DESIGN.md 格式提取或补全项目级设计契约(产品表面、设计 token、组件与模式、状态覆盖、无障碍要求、禁止事项等)
|
|
41
|
-
2. 创建或补全 modules/ 目录,按 templates/modules/module.md 格式为主要模块生成文档
|
|
42
|
-
3. 已存在的文件按模板格式增量更新,不自由改写结构;无新增信息时保持原样
|
|
43
|
-
|
|
44
|
-
## verify.yaml 格式
|
|
45
|
-
```yaml
|
|
46
|
-
commands:
|
|
47
|
-
- npm run lint
|
|
48
|
-
- npm run test
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## 幂等性
|
|
52
|
-
重复执行 `~wiki` 是安全的:
|
|
53
|
-
- `.helloagents/` 缺失时创建,已存在时复用
|
|
54
|
-
- `state_path` 按当前任务状态重写,不追加历史;它只记录当前知识库任务,不承担项目的长期记忆
|
|
55
|
-
- 知识库文件缺失时补全,已存在时按模板增量更新
|
|
56
|
-
- `.gitignore` 只追加缺失行
|
|
57
|
-
- 永不写入项目级规则文件,也不创建任何项目级 HelloAGENTS 包根链接
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: hello-review
|
|
3
|
-
description: 审查代码变更、检查 PR、review 代码质量,或用户要求看看代码、检查代码时使用。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
代码审查必须遵循以下规范。
|
|
7
|
-
|
|
8
|
-
## 审查维度
|
|
9
|
-
|
|
10
|
-
逐文件检查以下维度:
|
|
11
|
-
- 逻辑正确性:Bug、边界条件、空值处理、竞态条件
|
|
12
|
-
- 安全漏洞:注入、XSS、硬编码密钥、权限绕过
|
|
13
|
-
- 性能问题:N+1 查询、内存泄漏、不必要的重渲染、大循环
|
|
14
|
-
- 可维护性:命名清晰、职责单一、重复代码、过度抽象
|
|
15
|
-
- 错误处理:异常是否被正确捕获和处理
|
|
16
|
-
|
|
17
|
-
## 严重度分类
|
|
18
|
-
|
|
19
|
-
- 🔴 严重:必须修复(Bug、安全漏洞、数据丢失风险)
|
|
20
|
-
- 🟡 建议:应该修复(性能问题、可维护性、代码风格)
|
|
21
|
-
- 🟢 良好:值得肯定的好实践
|
|
22
|
-
|
|
23
|
-
## 审查原则
|
|
24
|
-
|
|
25
|
-
- 指出问题时给出具体修复建议和代码示例
|
|
26
|
-
- 不只挑毛病,也肯定好的实践
|
|
27
|
-
- 关注变更本身,不扩大审查范围到未修改的代码
|
|
28
|
-
- 严重问题优先,建议性问题其次
|
|
29
|
-
|
|
30
|
-
## 输出要求
|
|
31
|
-
|
|
32
|
-
- 审查结束时必须单独给出一行“审查结论:...”
|
|
33
|
-
- 若发现阻塞问题,结论中明确写出存在问题,并在正文中为每个问题附文件定位
|
|
34
|
-
- 若未发现阻塞问题,明确写“审查结论:未发现阻塞问题。”
|
|
35
|
-
- 若当前项目已初始化,或当前审查结果需要进入后续交付检查或收尾,审查结论确定后立即调用 `scripts/review-state.mjs write` 写当前会话 `artifacts/review.json`
|
|
36
|
-
- `artifacts/review.json` 必须使用结构化字段记录:`outcome`(`clean` / `findings`)、`conclusion`、`findings`、`fileReferences`
|
|
37
|
-
- 不要依赖“审查结论:...”这行让运行时再从自然语言里猜机器结论;这行只服务于人类阅读
|
|
38
|
-
|
|
39
|
-
## 交付检查
|
|
40
|
-
- [ ] 每个文件都已审查
|
|
41
|
-
- [ ] 严重问题都有修复建议
|
|
42
|
-
- [ ] 按严重度分类输出
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: hello-verify
|
|
3
|
-
description: 声称工作完成前、提交代码前、创建 PR 前、报告任务完成前使用。确保验证命令已运行并检查输出后才能声称成功。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
声称完成之前,必须有验证证据。
|
|
7
|
-
`.helloagents/` 在本 skill 中统一按项目级存储路径理解:交付证据写入当前 `state_path` 所在目录下的 `artifacts/*.json`;若 `project_store_mode=repo-shared`,`verify.yaml`、方案包与 `DESIGN.md` 按当前上下文中已注入的项目知识/方案目录解析。
|
|
8
|
-
|
|
9
|
-
## 铁律
|
|
10
|
-
|
|
11
|
-
没有运行验证命令 = 不能说"完成"、"通过"、"已修复"。
|
|
12
|
-
没有看到验证输出 = 不能声称结果。
|
|
13
|
-
|
|
14
|
-
## 验证循环
|
|
15
|
-
|
|
16
|
-
验证不是一次性操作,而是循环直到通过:
|
|
17
|
-
|
|
18
|
-
```
|
|
19
|
-
任务完成
|
|
20
|
-
↓
|
|
21
|
-
运行验证命令(lint/test/build/typecheck)
|
|
22
|
-
↓
|
|
23
|
-
全部通过?
|
|
24
|
-
├─ 是 → 收集已激活技能的交付检查清单 → 逐项确认 → 报告完成
|
|
25
|
-
└─ 否 → 反思 → 修复 → 重新运行验证(回到循环开头)
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
这个循环没有上限。验证失败就修复,修复后再验证,直到全部通过。
|
|
29
|
-
不允许在验证失败的状态下报告完成或询问用户是否跳过。
|
|
30
|
-
|
|
31
|
-
## 反思(验证失败时必须执行)
|
|
32
|
-
|
|
33
|
-
验证失败后,禁止跳过反思直接改代码。必须先回答:
|
|
34
|
-
1. 失败的根本原因是什么?
|
|
35
|
-
2. 之前的实现遗漏了什么?
|
|
36
|
-
3. 修复方案是什么?会不会引入新问题?
|
|
37
|
-
|
|
38
|
-
### 断路器
|
|
39
|
-
连续 3 次以上验证失败 → 激活 hello-debug 的卡住升级机制。
|
|
40
|
-
|
|
41
|
-
### 进展检测
|
|
42
|
-
声称任务完成时,必须有实际文件变更。如果 git diff 为空(没有任何文件变更),不能声称完成了产出文件的任务。
|
|
43
|
-
|
|
44
|
-
### 原子性自检
|
|
45
|
-
提交前检查变更范围:
|
|
46
|
-
- 如果单次变更涉及 >5 个文件 → 暂停,重新评估是否应该拆分为多个独立变更
|
|
47
|
-
- 用一句话描述变更内容,如果需要用"和"连接不相关的操作 → 拆分为多次提交
|
|
48
|
-
- 每次提交应该是一个原子操作:要么全部有意义,要么全部回滚
|
|
49
|
-
|
|
50
|
-
### 代码体积检查
|
|
51
|
-
变更涉及的文件必须符合 HelloAGENTS 编码原则中的体积控制规则:
|
|
52
|
-
- 文件/类 >300 行 → 评估是否需要拆分
|
|
53
|
-
- 文件/类 >400 行 → 必须按职责拆分(例外:生成代码、大型测试夹具、迁移脚本、协议常量表)
|
|
54
|
-
- 函数/方法 >40 行 → 评估是否需要拆分
|
|
55
|
-
- 函数/方法 >60 行 → 必须拆分
|
|
56
|
-
|
|
57
|
-
### 回归守卫
|
|
58
|
-
优化或新增功能不能破坏已有测试:
|
|
59
|
-
- 修改代码后,先运行已有测试确认无回归
|
|
60
|
-
- 如果新代码让指标改善但已有测试失败 → 修复回归(最多 2 次尝试),不修改已有测试
|
|
61
|
-
- 已有测试是底线,不能为了新功能而降低底线
|
|
62
|
-
- Bug 修复必须复跑最初的复现循环;如果没有自动化回归测试,必须记录替代验证和无法补测试的原因
|
|
63
|
-
- 新增或修改测试时,确认测试验证公共接口和用户可观察行为,而不是实现细节
|
|
64
|
-
|
|
65
|
-
## 验证命令来源
|
|
66
|
-
- 逻辑 `.helloagents/verify.yaml` 中的 commands(优先;`project_store_mode=repo-shared` 时按共享知识目录解析)
|
|
67
|
-
- package.json 中的 lint/test/typecheck 脚本
|
|
68
|
-
- pyproject.toml 中的 ruff/mypy/pytest
|
|
69
|
-
|
|
70
|
-
## 交付检查清单把关
|
|
71
|
-
|
|
72
|
-
验证命令全部通过后,还需要:
|
|
73
|
-
这些标记只用于交付检查清单、验收记录和验证结果,不用于普通说明、方案解释或进度汇报。
|
|
74
|
-
1. 收集所有已激活 hello-* 技能的交付检查清单
|
|
75
|
-
2. 逐项确认每个检查项,标记 [√] 并附带证据(如:`src/api.ts:42` 使用了参数化查询)
|
|
76
|
-
3. 不适用的项标记 [-] 并说明原因
|
|
77
|
-
4. 有未通过项 → 修复 → 重新运行验证循环
|
|
78
|
-
5. 若当前存在方案包并准备最终回复,优先调用 `scripts/closeout-state.mjs write` 写当前会话 `artifacts/closeout.json`,记录 `requirementsCoverage` 与 `deliveryChecklist` 两项结论;两项都必须包含 `status`(`PASS` / `BLOCKED`)和 `summary`
|
|
79
|
-
6. 若当前方案包要求 `review-first`,必须先确认当前会话 `artifacts/review.json` 已通过 `scripts/review-state.mjs write` 写成最新结构化证据;不要把审查自然语言消息直接当成交付证据
|
|
80
|
-
7. 若 `contract.json` 中 `ui.visualValidation.required=true`,必须确认当前会话 `artifacts/visual.json` 已通过 `scripts/visual-state.mjs write` 写成最新结构化证据;若没有视觉验收证据,不得把当前结果视为 UI 可交付
|
|
81
|
-
8. 本地版本检查点:非只读任务完成验证且产生工作区变更时,若 `auto_commit_enabled=true`,最终回复前自动执行本地提交;若 `auto_commit_enabled=false`,跳过这一步。先检查 `git status --short`;若不是 git 仓库或无变更则跳过。若发现 `.env`、密钥、凭据、明显不应提交的大文件或二进制产物,停止提交并说明风险;否则执行 `git add -A`,使用当前回复语言生成简洁 conventional commit message 后执行 `git commit`。显式 `~commit` 不受这个开关影响。不自动远程 `git push`,除非用户明确要求
|
|
82
|
-
9. 若当前对话需要运行时识别验证收尾状态,优先调用 `helloagents-turn-state write --kind complete --role main`;若因阻塞判定等待输入或因前置条件缺失而停下,写 `kind=waiting` 或 `kind=blocked`,并同时写 `reasonCategory` 与 `reason`;显式 `~auto` / `~loop` 下还要写 `blocker.target`、`blocker.evidence`、`blocker.requiredAction`,不要让运行时从自然语言消息里猜状态
|
|
83
|
-
|
|
84
|
-
## 需求追踪验证
|
|
85
|
-
|
|
86
|
-
如果有方案包(requirements.md),执行完成后必须交叉检查:
|
|
87
|
-
1. 逐条读取 requirements.md 的需求(核心目标、功能边界、质量要求)
|
|
88
|
-
2. 确认每条需求都有对应的任务实现,没有被静默丢弃
|
|
89
|
-
3. 确认非目标章节列出的内容确实没有被实现(防止范围蔓延)
|
|
90
|
-
4. 若 tasks.md 中定义了“完成标准”,逐项确认每个任务的完成标准确实成立,不能只因为代码存在或命令通过就视为完成
|
|
91
|
-
5. 若存在 `contract.json`,逐项确认其中的 `verifyMode`、reviewer / tester 关注边界都已被本次验证覆盖
|
|
92
|
-
6. 若 `contract.json` 中 `advisor.required=true` 或 `ui.styleAdvisor.required=true`,额外确认当前会话 `artifacts/advisor.json` 已存在且结论为 clean;若没有 advisor 证据,不得把当前结果视为可交付
|
|
93
|
-
7. 若 `contract.json` 中 `ui.visualValidation.required=true`,额外确认当前会话 `artifacts/visual.json` 已存在、覆盖要求的关键 screens / states,且结论为 `PASS`;若没有视觉验收证据,不得把当前结果视为 UI 可交付
|
|
94
|
-
8. 发现遗漏 → 补充实现 → 重新验证
|
|
95
|
-
|
|
96
|
-
## 目标偏移检查
|
|
97
|
-
|
|
98
|
-
验证时必须区分真正目标和代理指标:
|
|
99
|
-
- 真正目标:用户实际要解决的问题(功能正确、体验达标、需求满足)
|
|
100
|
-
- 代理指标:测试通过、lint 干净、类型检查通过、diff 整洁
|
|
101
|
-
|
|
102
|
-
代理指标全部通过 ≠ 真正目标达成。验证时必须回答:
|
|
103
|
-
1. 用户的真正目标是什么?
|
|
104
|
-
2. 代码是否真的实现了这个目标?(不是"测试说通过了",而是"功能确实能用")
|
|
105
|
-
3. 是否存在测试通过但功能实际不工作的情况?(如:测试 mock 了关键依赖、测试只验证了 happy path)
|
|
106
|
-
|
|
107
|
-
## 目标反向验证
|
|
108
|
-
|
|
109
|
-
不要从"任务完成了吗"出发,而是从目标反向推导:
|
|
110
|
-
1. 明确阶段目标(用户要什么结果?)
|
|
111
|
-
2. 反向推导:要达成这个目标,哪些条件必须为真?
|
|
112
|
-
3. 逐条验证每个条件,使用四级验证深度
|
|
113
|
-
|
|
114
|
-
### 四级验证深度
|
|
115
|
-
每个关键产出必须通过四级检查:
|
|
116
|
-
1. 存在 — 文件/函数/组件确实存在
|
|
117
|
-
2. 真实 — 包含真实实现(不是 stub、TODO、placeholder、空函数)
|
|
118
|
-
3. 连接 — 被其他代码导入/调用/使用(不是孤立的死代码)
|
|
119
|
-
4. 数据流 — 有真实数据流过(API 返回真实数据、UI 渲染真实内容、事件真实触发)
|
|
120
|
-
|
|
121
|
-
未通过任何一级 → 视为未完成,必须修复。
|
|
122
|
-
|
|
123
|
-
## 危险信号
|
|
124
|
-
|
|
125
|
-
以下想法意味着你在合理化跳过验证:
|
|
126
|
-
- "应该没问题了" → 运行验证
|
|
127
|
-
- "我很有信心" → 信心 ≠ 证据
|
|
128
|
-
- "linter 过了" → linter ≠ 测试 ≠ 构建
|
|
129
|
-
- "代码改了应该修好了" → 运行验证确认
|
|
130
|
-
- "就这一次跳过" → 没有例外
|
|
131
|
-
- "问问用户要不要跳过" → 不允许,必须修复
|
|
132
|
-
- "先写完再测" → 未经测试的代码是负债不是资产
|
|
133
|
-
- "已经手动测过了" → 手动测试无记录、不可重复、不可回归
|
|
134
|
-
- "太简单不需要测" → 简单代码在复杂系统中照样出错
|
|
135
|
-
- "这次例外" → 每个例外都成为先例
|
|
136
|
-
- "用户没要求测试" → 质量是底线不是选项
|
|
137
|
-
|
|
138
|
-
## 五步证据链(每次声称完成前必须走完)
|
|
139
|
-
|
|
140
|
-
1. 识别 — 确定哪个命令能证明你的声明
|
|
141
|
-
2. 运行 — 完整执行该命令
|
|
142
|
-
3. 阅读 — 审查完整输出和退出码
|
|
143
|
-
4. 验证 — 确认输出确实支持你的声明
|
|
144
|
-
5. 声明 — 附带证据报告结果
|