Verify Change logo

Verify Change

Community
ljxpython
verify-change

AI 在链路改动/治理改动的功能实现完成后自动调用(不需要用户手动触发),执行验证测试并记录结果(含完成度四态判定)到项目文档的 verification.md。跳过条件:单项目改动只需单元测试+lint,不必套用四态记录格式。

Overview

Publisherljxpython
Repositoryai-agent-platform
Skill nameverify-change
Stars
148
Forks
26
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by ljxpython on GitHub. Read the source before you install it.

Installation

Install the Verify Change AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/ljxpython/ai-agent-platform/tree/main/.codex/skills/verify-change
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/ljxpython/ai-agent-platform.git /tmp/ai-agent-platform
mkdir -p .claude/skills
cp -r /tmp/ai-agent-platform/.codex/skills/verify-change .claude/skills/verify-change
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Verify Change in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Verify Change on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Verify Change is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Verify Change(验证改动)

执行验证测试并记录结果。这是 AI 在实现完成后自动调用的 Skill,不需要用户手动触发。

触发条件

  • 功能实现完成后(链路改动、治理改动)
  • 需要验证改动是否符合预期
  • 需要记录验证证据

跳过条件

  • 单项目改动:跑单元测试和 lint 即可,不必生成 verification.md 记录

验证层级

1. 单元测试

范围: 单个函数、类、模块

执行:

bash
# Python
pytest apps/xxx/tests/test_xxx.py -v

# Node.js
pnpm test

记录:

  • 测试用例名称
  • 通过/失败状态
  • 失败原因(如果有)

2. 集成测试

范围: 单服务内多个模块协同

执行:

bash
# 启动本地栈(Runtime + Platform API + Platform Web)
bash scripts/local-stack.sh start

# 执行集成测试场景
curl http://localhost:8123/api/xxx

记录:

  • 测试场景描述
  • 执行步骤
  • 预期结果 vs 实际结果
  • 截图或日志(如有必要)

3. 端到端测试

范围: 完整业务链路

执行:

bash
# 启动完整栈(Runtime + Platform API + Platform Web)
bash scripts/local-stack.sh start

# 检查服务健康状态
bash scripts/local-stack.sh status

# 在浏览器或 Postman 中测试完整流程
# Platform Web 默认: http://localhost:3000
# Platform API 默认: http://localhost:2142
# Runtime Service 默认: http://localhost:8123

记录:

  • 用户操作步骤
  • 关键验证点
  • 响应时间
  • 截图(重要界面)

4. 性能测试(按需)

范围: 性能敏感的改动

执行:

bash
# 压力测试
ab -n 1000 -c 10 http://localhost:8123/api/xxx

记录:

  • 性能指标(QPS、延迟、资源占用)
  • 与目标值对比
  • 性能瓶颈分析

两阶段验证原则

不要每改一小块就全量回归,验证分两个阶段:

阶段触发时机范围
Phase 验证每个 Task 完成后只跑这个 Task 直接相关的最小测试集,验证改动本身不出错
Final 验证当前范围内所有 Task 全部完成后全量单元测试 + 集成测试 + E2E 链路测试

工作流

Phase 验证(每个 Task 完成后执行)

  1. 确认 Task 的验证项:读 tasks.md 对应 Task 的「验证项」字段
  2. 执行最小测试集:只跑与这个 Task 直接相关的单元测试
  3. 记录到 Phase 验证记录:在 verification.md 的 ## Phase 验证记录 区块追加一行

Final 验证(所有 Task 完成后执行)

只要当前范围仍有可推进的未完成 Task,新增测试证据仍记在 Phase 验证记录中;不得提前写入 ## Final 验证记录 或生成“最终结论”。真实环境暂缺时,先完成隔离环境内可执行的场景,再判断剩余项是否需要用户提供条件。

  1. 状态一致性检查(前置,必须通过才能继续)

    对照以下四处,确认状态描述一致:

    • README.md 的"状态"字段
    • tasks.md 的进度追踪(所有 Phase 的 [ ] 是否都打 x 了)
    • verification.md 的 Phase 验证记录条数 == 已完成 Task 数
    • CONTEXT.md 的活跃项目状态行

    不一致 → 先对齐,再做 Final 验证,不得跳过此步骤。

  2. 读取验证计划

    • 标准模板:读取 docs/projects/{YYYYMMDD}-{项目名}/verification.md 的「验证计划」章节
    • 多专题模板:读取对应子专题文档「验证要求与记录」小节
  3. 执行全量测试,按顺序:单元 → 集成 → 端到端 → 性能/安全(按需)

  4. 记录到 Final 验证记录:更新 verification.md 的 ## Final 验证记录 区块

  5. 问题追踪:发现问题立即记录,分析原因,制定修复方案,修复后重跑受影响的测试

验证记录模板

在 docs/projects/{YYYYMMDD}-{项目名}/verification.md 中维护两个独立区块:

markdown
# {项目标题} - 验证记录

## Phase 验证记录
<!-- 每个 Task 完成后追加一条,只记最小验证结果 -->

### Task 1.1 验证 {日期}
- 验证项:{对应 tasks.md 里的验证项描述}
- 结果:✅ 通过 / ❌ 失败(原因:{说明},修复:{方案})

### Task 1.2 验证 {日期}
- 验证项:{对应 tasks.md 里的验证项描述}
- 结果:✅ 通过

---

## Final 验证记录
<!-- 所有 Task 完成后执行一次,全量回归 -->

### {日期} Final 验证
**执行人:** @{用户名}
**验证范围:** 全量

#### 单元测试
- ✅ `test_xxx()` - 通过
- ✅ `test_yyy()` - 通过
- ❌ `test_zzz()` - 失败
  - **原因:** {失败原因}
  - **修复:** {修复方案}

#### 集成测试

##### 场景1:{场景名称}
**步骤:**
1. {步骤1}
2. {步骤2}

**预期:** {预期结果}
**实际:** {实际结果}
**结论:** ✅ 通过 / ❌ 失败

#### 端到端测试

##### 链路:platform-web → platform-api → runtime-service
**操作:**
1. {用户操作}

**结果:**
- ✅ 请求成功,耗时 1.2s
- ✅ 数据正确显示

#### 性能测试(按需)
**指标:** QPS **目标:** > 100 req/s **实际:** 125 req/s **结论:** ✅ 满足要求

#### 问题汇总
1. **问题:** {问题描述}
   - **发现于:** {哪个测试}
   - **原因:** {原因分析}
   - **修复:** {修复方案}
   - **状态:** 已修复 / 待修复

#### 最终结论
✅ 全部验证通过,可以合并
⚠️ 部分通过,有 X 个待修复问题
❌ 验证失败,需要重新实现

{详细说明}

验证标准

单项目改动

  • ✅ 单元测试通过
  • ✅ 代码质量检查通过(lint、类型检查)

链路改动

  • ✅ 单元测试通过
  • ✅ 集成测试通过
  • ✅ 端到端测试通过(至少一条完整链路)
  • ✅ 相关服务联调成功

治理改动

  • ✅ 单元测试通过
  • ✅ 集成测试通过
  • ✅ 端到端测试通过(所有关键链路)
  • ✅ 性能测试通过(如适用)
  • ✅ 安全测试通过(如适用)
  • ✅ 回滚方案验证(如适用)
  • ✅ 生产环境预演(如适用)

完成度判定(四态)

验证完成后,不要只写"通过/不通过",用下面四个状态描述实际证据情况,避免把"代码改完了"误当成"验证完成了":

状态含义
done实现 + 必要验证证据都齐全,且和文档描述一致
partial只有局部证据(比如只跑了单元测试,没跑端到端),需要写清楚缺哪部分
blocked缺少外部条件(比如没有生产环境权限、依赖服务未就绪),需要写清楚卡在哪
deferred本阶段明确不覆盖(比如性能测试留到治理改动阶段再做),需要写清楚谁决定推迟、推迟到哪个阶段

按边界类型的最低证据要求

改动边界类型最低证据
单服务内部(单项目改动)单元测试或组合测试
跨文件/跨模块覆盖最短相关链路的测试
鉴权/权限/审计真实调用链证据,或已锁定的契约测试
持久化/重启/重放真实部署验证,或明确标注 blocked
生产环境/治理改动负责人评审 + 验证记录

反模式(不要这样做)

  • 代码改完了就等于 done——没有验证证据不能算完成
  • 跳过某项测试(skip)却当作通过(pass)来记录
  • verification.md 里写着 partial,但项目 README.md 的状态却写"已完成"——两者必须一致
  • 文档里描述的能力超前于实际验证证据(比如设计文档说"已支持",但没有测试能证明)

只有"必要任务完成 + 必要验证记录存在 + 未覆盖的边界已明确标注 + 状态描述一致",才能把整个项目标记为 done。标准模板下"状态描述一致"指 README.md/plan.md/tasks.md/verification.md 四份文档状态一致;多专题模板下指 README.md 汇总状态与各子专题文档自己的「状态」一致。

partial 和 deferred 是证据或范围状态,不自动结束用户要求的全部工作;继续完成当前范围内可推进的任务。只有整体达到 done,或剩余工作确实需要用户行动、已记录具体阻塞条件和请求而判为 blocked,才作最终汇报。

示例

示例1:链路改动验证

markdown
## 2024-09-07 验证
**执行人:** @ljxpython
**验证范围:** Runtime 数据建模重构

### 单元测试
执行 `pytest apps/runtime-service/tests/ -v`
- ✅ 所有 23 个测试通过
- 覆盖率:95%

### 集成测试

#### 场景1:创建 runtime 配置
**步骤:**
1. POST /api/runtime/configs
2. 传入新格式的 model_config
3. 检查响应

**结果:** ✅ 通过
- 配置创建成功
- 返回正确的 runtime_id

### 端到端测试

#### 链路:platform-web → platform-api → runtime-service
**操作:**
1. 在平台页面创建新 Agent
2. 选择模型和工具
3. 启动对话

**结果:** ✅ 通过
- 页面正常
- 对话成功
- 耗时 1.8s

### 最终结论
✅ 全部验证通过,可以合并

最佳实践

  1. 验证要完整

    • 不要遗漏验证项
    • 关键路径都要测试到
  2. 记录要清晰

    • 写清楚怎么测的
    • 结果是什么
    • 有问题的话,原因是什么
  3. 及时修复问题

    • 发现问题立即记录
    • 优先修复阻塞性问题
    • 记录修复后的验证结果
  4. 保留证据

    • 重要的截图保存
    • 日志保存(如有异常)
    • 性能数据保存

注意事项

  • 验证要真实执行,不能编造结果
  • 发现问题要如实记录,不要隐瞒
  • 对于治理改动,验证要特别严格
  • 验证通过后才能合并代码

Frequently asked questions

What does the Verify Change AI skill do?

AI 在链路改动/治理改动的功能实现完成后自动调用(不需要用户手动触发),执行验证测试并记录结果(含完成度四态判定)到项目文档的 verification.md。跳过条件:单项目改动只需单元测试+lint,不必套用四态记录格式。

Why use Verify Change on TypingMind?

Because you install it once and use it with any model. Verify Change is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Verify Change in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/ljxpython/ai-agent-platform/tree/main/.codex/skills/verify-change. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Verify Change?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Verify Change?

As many as you like. As long as a model supports skills, you can use Verify Change with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Verify Change AI skill free?

It is published on GitHub by ljxpython. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇