verify-init · v1.0.2 · 2026-09-22 · sha256 481fc3ec8c9206ef

verify-init v1.0.2A

Immutable. This exact content never changes and is served at /api/v1/blob/481fc3ec8c9206ef.

---
name: verify-init
description: >-
  扫描项目领域与技术栈,自动检测已有测试框架,经用户确认后增量补齐测试脚手架
  (框架安装+配置+示例+scripts)+ 生成通用 testing 规范 + 生成验证 agent。
  为 test-case-designer 的用例提供可执行落点和自主验证闭环。
  触发词:验证初始化、测试平台搭建、verify-init、搭建测试基建
metadata:
  author: "devkeel"
  version: "1.0.2"
---

# Verify Init — 验证层初始化器

扫描项目 → 识别领域/技术栈 → 搭建测试脚手架 + 通用 testing 规范 + 验证 agent。

**与 domain-init / test-case-designer 的关系:**

- `domain-init` R4 — 扫描**真实代码**生成**项目特定**软规范(mock 策略、覆盖模式等依赖现状的约定)
- `verify-init`(本 skill)— 搭建**可执行测试基建**:框架选型+安装+配置+示例+scripts+**通用结构化**规范+验证 agent
- `test-case-designer` — 从需求/spec 产出测试点+用例**文档**
- 验证 agent(本 skill 产出)— 变更驱动验证闭环的执行端

**互补关系**:verify-init 搭台子(框架+通用规范+执行 agent),test-case-designer 写剧本(用例文档),验证 agent 当演员(执行+判定)。R4 管项目特有的软约定,verify-init 管可执行的结构化基建。

**产出位置:** 项目根(框架配置/示例)+ `.harness/rules/`(规范)+ `.harness/agents/`(验证 agent)

## Read First

按需加载以下参考文档:

- `references/detection-signals.md` — 领域+技术栈+框架已存在检测信号表、降级策略
- `references/stack-matrix.md` — 领域→技术栈→测试框架映射表(v1 四大类)
- `references/frameworks-index.md` — 官方文档定位方法论 + fetch 链(context7 首选非必需)
- `references/scaffolding-principles.md` — 脚手架产出原则 checklist(必含项 + 跨栈注意点)
- `references/output-formats.md` — testing 规范 + test-verifier agent 格式规范

## 何时使用

- 项目已完成 `devkeel init`,需要搭建标准化测试基建
- 接手新项目,需要快速配置测试框架(单测/e2e/API)
- 项目已有部分测试框架,需要增量补齐缺失类型
- 需要「自主验证代码输出」能力时,配套生成验证 agent

何时**不**使用:

- 项目还没 `devkeel init`(先 init 建好 `.harness/`)
- 只想写测试用例文档(用 `test-case-designer`)
- 想改被测代码逻辑(用 executor,验证 agent 不改逻辑)

## Hard Rules

1. **必须先完成检测**(Phase 1),禁止跳过直接安装框架
2. **增量补齐 + 幂等** — 已有框架标记「✅ 已就绪」不重复装,已有配置文件/示例不覆盖
3. **补齐前需用户同意** — 缺失项列入待确认清单,用户勾选后才执行安装(Phase 2 门禁)
4. **fetch 失败降级不阻塞** — 可用的文档查询、网页搜索与页面读取途径均失败时(含 GitHub README 兜底不可达),跳过精确 config 产出,只生成 testing 规范 + 验证 agent,向用户提示「未能获取 <框架> 官方文档,config 请手动补」。不凭记忆编造可能过时的 config
5. **规范与 R4 互补不重叠** — 生成的 testing 规范是通用结构化约定(金字塔/命名/执行/覆盖率),R4 是项目特定软规范(mock 策略/覆盖模式)
6. **格式严格遵循** — 规范/agent 按 `references/output-formats.md` 格式生成
7. **代码依据** — 检测结论必须基于真实项目信号(依赖/config/lockfile/目录),不凭假设
8. **由当前 Agent 执行安装命令** — 纯文档驱动,不内置安装脚本;按官方文档 + scaffolding-principles 产出精确命令执行

## 流程总览

```
Phase 1: 检测       → 领域 + 技术栈 + 已有框架 + 缺口(就绪清单)
Phase 2: 确认       → 用户勾选要补齐项(门禁,补齐前需同意)
Phase 3: 脚手架     → 定位官方文档 → 照 scaffolding-principles 产出 install/config/example/scripts(幂等)
Phase 4: 规范+agent → testing.md + test-verifier.md
Phase 5: 收尾       → 报告 + review 提示 commit
```

---

## Phase 1: 检测

### 1.1 领域与技术栈识别

读取 `references/detection-signals.md` 和 `references/stack-matrix.md`,按信号表扫描项目根目录,推断领域(前端/后端/移动端/CLI/库)+ 具体技术栈(react/vue/express/fastapi/go/spring 等)。

多领域命中取并集(如 Electron = 前端 + 桌面)。所有信号未命中 → 标 `custom:<标签>`,只配基础结构 + 通用规范,不强制装框架。

### 1.2 已有框架检测与就绪清单

对 stack-matrix 推荐的每个框架,检查是否**已存在**:

- **依赖痕迹** — `package.json` / `pyproject.toml` / `go.mod` / `pom.xml` 中是否声明
- **配置文件** — `vitest.config.*` / `playwright.config.*` / `pytest.ini` / `conftest.py` / `jest.config.*` / `tsconfig` test 字段
- **锁文件痕迹** — `pnpm-lock.yaml` / `package-lock.json` 中的包名
- **目录结构** — `tests/` / `e2e/` / `__tests__/` / `test/` / `__snapshots__/`

输出就绪清单:

| 测试类型 | 推荐框架 | 状态 | 依据 |
|---------|---------|------|------|
| 单元测试 | vitest | ✅ 已就绪 / ➕ 待补齐 | 依赖/config/lockfile 依据 |
| e2e | Playwright | ... | ... |
| API 测试 | supertest | ... | ... |

---

## Phase 2: 用户确认

### 2.1 展示就绪清单

向用户展示 Phase 1 的就绪清单,用户可以:

1. **勾选/取消** — 选择要补齐的框架(默认全勾缺失项,可取消)
2. **补充上下文** — 对特定框架补充说明(如「e2e 只覆盖关键路径」「API 测试用内存数据库」)
3. **确认规范/agent 生成** — 默认生成 testing 规范 + 验证 agent,可取消

### 2.2 门禁

**用户明确确认后才进入 Phase 3。** 全空(项目已就绪)时:

- 仅生成规范/agent(若用户勾选)→ 直接 Phase 4
- 全部已就绪且不补规范/agent → 直接 Phase 5 提示无需操作

---

## Phase 3: 脚手架

按确认清单逐项执行。对每个要补齐的框架,定位其官方文档并照清单产出,不依赖任何固定配方基线。

### 3.1 定位官方文档

读取 `references/frameworks-index.md`,按定位方法论从 manifest 取包名,通过当前可用的文档查询、页面读取和网页搜索找到官方文档,必要时回退到官方仓库 README。提取安装命令、config schema、示例、scripts、最佳实践,确认文档版本对应当前安装版本。需要平台工具说明时,Claude Code 只读 [Claude 参考](references/claude-code.md),Codex 只读 [Codex 参考](references/codex.md)。

### 3.2 照清单产出

读取 `references/scaffolding-principles.md`,对照必含项 + 跨栈注意点核对产出:安装命令(检测到的包管理器)/ config 文件(已存在则跳过或提示合并)/ 每类测试一个最小示例 / scripts / 幂等守卫。缺项不编造,标 TODO 交还用户。

### 3.3 执行(由 Claude 照 principles)

1. **安装依赖** — 按官方文档精确的包管理器命令执行(pnpm/npm/pip/uv/go get/cargo add/maven),已声明依赖跳过安装只确认版本
2. **写配置文件** — 按官方文档 schema 写入框架约定 config(已存在则跳过或提示合并)
3. **写示例测试** — 每个测试类型一个最小可跑示例(如 `tests/example.test.ts`、`e2e/smoke.spec.ts`),让用户能立刻跑通
4. **更新 scripts** — 补 `test` / `test:unit` / `test:e2e` / `test:api` / `test:coverage`(已有则不覆盖)

**幂等**:每步先 `existsSync` 守卫,已存在不覆盖。

**fetch 全失败降级**:所有可用的文档读取途径均失败时,跳过上面 1-4 步,向用户提示「未能获取 `<框架>` 官方文档,config 请手动补」,只产 Phase 4 规范 + agent。

---

## Phase 4: 规范 + 验证 agent

### 4.1 生成 testing 规范

按 `references/output-formats.md` 格式,写入 `.harness/rules/testing.md`:

- 通用结构化约定(非项目特定):测试金字塔比例、文件命名、目录组织、断言风格、mock 边界、覆盖率门槛、执行约定、测试独立性、失败可诊断
- 半固定模板,按检测到的技术栈微调(如 Python 项目命名换 `test_*.py`、Go 换 `_test.go`)
- 已存在则提示合并而非覆盖(幂等)

### 4.2 生成验证 agent

按 `references/output-formats.md` 格式,写入 `.harness/agents/test-verifier.md`:

- 角色:验证执行者,不写用例、不改被测逻辑
- 强制启动步骤:确认验证目标 → 识别变更范围 → 映射测试类型 → 判断补回归 → 收窄 scope 跑测试 → 解析结果 → blocker-first 回报
- 与 test-case-designer 衔接:不直接消费 TC 文档,把 TC 预期结果当验证目标断言

---

## Phase 5: 收尾

### 5.1 输出报告

输出本次生成的完整清单(类型 / 文件 / 状态 / 新增 vs 跳过),标记「✅ 已就绪」「➕ 新增」「⚠️ 降级(fetch 失败)」。

### 5.2 验证提示

提示用户运行最接近的验证命令(如 `pnpm test`)确认脚手架可用。

### 5.3 commit 提示

提示用户 review 生成内容后 commit。不碰 symlink(脚手架在项目根,规范/agent 在 `.harness/`,平台链接由 `devkeel init` 负责)。

---

## 通用能力沉淀

在 Phase 2 交互中,如果发现某个技术栈的测试配置具有跨项目通用性:

- 标记为「候选跨栈注意点」
- 建议用户后续 PR 到 devkeel 的 `templates/skills/verify-init/references/scaffolding-principles.md`(补充跨栈通用注意点,而非写死具体栈配方)
- **不自动操作**,只做建议