PACE impl 后的运行时验证环 (v9.8.0 新). 用官方 /goal 承载"实跑接口→自测自改→模拟环境/数据"自驱循环, 补 PACE 只单测不实跑的洞. System/Refactor 强制, Feature 可选, Bugfix/Quick/Hotfix 跳过. Loop Engineering 落地: DOER (generator 改代码) + CHECKER (/goal supervisor + delivery-gate), 不自批不自造 loop.
Scanned 9/5/2026
Install to Claude Code
npx -y skills add WenJunDuan/Rlues --skill athena-runtime-verify --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Athena Runtime Verify?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/wenjunduan-athena-runtime-verify)More formats (shields.io, HTML) on the badges page.
---
name: athena-runtime-verify
description: |
PACE impl 后的运行时验证环 (v9.8.0 新). 用官方 /goal 承载"实跑接口→自测自改→模拟环境/数据"自驱循环, 补 PACE 只单测不实跑的洞.
System/Refactor 强制, Feature 可选, Bugfix/Quick/Hotfix 跳过.
Loop Engineering 落地: DOER (generator 改代码) + CHECKER (/goal supervisor + delivery-gate), 不自批不自造 loop.
effort: high
attach_to_stages: [impl, runtime-verify, review]
---
# /athena-runtime-verify — 运行时验证环 (v9.8.0)
## 为什么存在 (痛点)
PACE 到 impl 为止, review 三件套 + 单测只验证 **"我们想的问题实现没 / 单测过没"**, 不验证 **实际运行**.
代码单测全绿 ≠ 真实接口跑得通 / 边界数据不炸 / 换个环境不挂.
本 skill 在 impl 与 review 之间插一个 **运行时验证环**: 写完 → 实跑 → 自测自改 → 直到真能跑.
把"人盯着跑测试、贴日志、让它改"这件事, 换成 **系统自己跑、自己发现、自己改** (Loop Engineering).
## 触发 (按 PACE 级别)
| 路径 | runtime-verify | /goal 承载范围 |
|---|---|---|
| Hotfix | 跳过 (救火无时间) | — |
| Bugfix / Quick | 跳过 (改动小, 单测够) | — |
| Feature | **可选** (主 agent 判断: 碰外部接口 / 有状态 / 多环境 → 做) | impl+runtime (可选) |
| Refactor | **强制** | impl+runtime |
| System | **强制 + 完整 Sprint** | 全程 PACE |
> 不在小改动上强制 (铁律[不过度工程]). 单测能覆盖的别上 /goal, 杀鸡用牛刀。
## 核心: 用官方 /goal 承载, 不自造 loop
官方 `/goal` (CC 2.1.139+) 就是现成 loop 引擎: observe-act-observe, 独立 supervisor 审计 [官方 code.claude.com/docs/en/goal].
本 skill **不重新发明 loop**, 只把"运行时验证"写成一个 /goal 完成条件, 让 CC 自己跑到完成.
### Step 0 · 开环前自检 (Loop Readiness · 借 cobusgreyling/loop-engineering loop-audit)
把 /goal 这种自驱 loop 放出去前, agent 先给自己打分 —— 这是 "agent in loop and check" 把 check **前移**:
让 loop 跑之前就有能说 no 的东西, 而不是烧完 token 才发现没护栏。三项全绿才进 Step 1。
| 自检项 | 不通过则 |
|---|---|
| **CHECKER 能说 no?** 有 test / typecheck / lint / delivery-gate 能判失败 | 无硬验证 → 先补一个会失败的断言再开环 (没有 no 的 loop 会安静地烧钱) |
| **预算护栏有硬数字?** turn 上限 + (大任务) token/时间预算 | 没写 → 补 "Stop after N turns"; 大任务额外估 token (借 loop-cost 思路) |
| **状态落盘点?** 进展写 .ai_state 而非只在 context | 不落盘 → loop 一断片就失忆; 配 /athena-checkpoint 固化接续点 |
> 这是把 loop-audit 的 "Loop Readiness Score" 做成 agent 自评的一次性 gate —— 不引外部 CLI, 不自造轮子, 只把"开环前该问的三件事"固化成动作。
### Step 1 · 主 agent 设 /goal (impl 完成后)
完成条件三件套 (官方, ≤4000 字符):
1. **可测终态**: 实跑结果可判定 (HTTP 200 / 退出码 0 / 边界用例全过 / 响应字段匹配)
2. **stated check** (Claude 怎么证明 — 见下方陷阱): 把实跑命令 + 输出晒进 transcript
3. **约束 + turn 上限护栏**: 改哪些不能动 + "Stop after N turns" (/goal 无内建 token 预算, 上限必写)
示例 (后端 API):
```
/goal 对本 sprint 新增的 /api/refresh 端点做运行时验证, 直到:
(a) 运行 `curl -s -X POST localhost:3000/api/refresh -d @test/normal.json | jq .status` 输出 200;
(b) 5 个边界用例 (空 token / 过期 token / 篡改签名 / 并发刷新 / 超长 payload) 各跑一次, 把命令和输出贴进对话, 每个都返回预期错误码而非 500;
(c) 测出的每个问题都已改代码并复跑通过.
约束: 只动 src/api/ 和 src/auth/, 不碰 .ai_state. Stop after 25 turns.
```
### ⚠️ /goal supervisor 只读 transcript (致命陷阱)
官方明确: **supervisor 只判断 Claude 在对话里实际展示出来的东西, 不读文件、不跑命令**.
→ 完成条件必须写成 **"Claude 输出能演示的"**, 每次实跑把 **命令 + 输出** 晒进 transcript.
| ❌ 错误 (supervisor 看不到) | ✅ 正确 (晒进 transcript) |
|---|---|
| "接口测试通过" | "运行 `curl ... \| jq .status` → 输出 `200`" |
| "边界都覆盖了" | 5 个用例的实跑命令 + 实际输出逐条贴出 |
| "改完没问题了" | 改后复跑命令 + 输出, 证明从 fail 变 pass |
### Step 2 · agent 在 /goal 循环内自驱 (DOER + CHECKER)
每轮 agent 自己决定下一步 (这就是你说的"自己给自己提要求"):
- **写测试场景**: 实际接口调用 / 模拟数据 (正常 + 边界 + 异常) / 不同环境 (空库 / 满库 / 慢网络)
- **实跑** (按类型选已装插件/工具):
- 前端 / E2E → `$playwright` skill / 官方 `playwright-skill` 插件 (启 dev server + 浏览器驱动 + 断言 + 可复跑测试)
- 后端 / API → `curl` / 真实 HTTP 调用 / 测试库真实读写
- CLI → 实际命令执行 + 退出码 + stdout 断言
- **测出问题 → 自己改代码 → 复跑** (自测自改)
- 循环到完成条件满足 → supervisor 独立审计
### Step 3 · 执行者判定 (CC /goal 主路径)
默认 **CC /goal** (本平台). 理由: /goal 是有状态连续 loop + 自带 supervisor; codex exec 每次独立 session 断片、无 supervisor 层; 交互式 CC 在订阅内.
**codex 特例**: System 级密集测试想省 token / 隔离 → 走 athena-route (executor_weight; 本包未含, 待 U5 五五路由落地), opt-in. 不默认。
## Step 4 · reflect (写完先自测, 再想哪里没完善)
runtime-verify 跑完, 触发一次 **结构化反思** (Loop Engineering 的"系统自己发现任务"):
- 对照 design.md 验收 + 实跑中暴露的现实 (性能 / 边界 / 兼容), 列 **"还有哪些没覆盖 / 没完善"**
- 写 `runtime-verify.md` 的 `## Reflect` 段
- 决策:
- 发现实质缺口 → 回 impl 补 (写进 checklist.yaml 新 task)
- 够了 → next_action=review
> 这一步把"人来发现还缺什么"换成"系统跑完自己反思". 不是 brainstorm 新需求 (那是项目级), 是 **本 sprint 落地完整性的自检**.
## 产出
`sprints/{slug}/runtime-verify.md`:
```markdown
# Runtime Verify — {slug}
## /goal 完成条件
[设的 goal 原文]
## 测试场景 (实跑)
| 场景 | 类型 | 命令 | 实际输出 | 判定 |
|---|---|---|---|---|
| 正常刷新 | API | curl... | 200 | ✅ |
| 过期 token | 边界 | curl... | 401 | ✅ |
| 并发刷新 | 异常 | ... | 改前 500→改后 409 | ✅ (已修) |
## 自测自改记录
- 问题 1: 并发刷新返回 500 → 根因: 无锁 → 改: 加乐观锁 → 复跑 409 ✅
## Reflect (还有哪里没完善)
- [ ] 未覆盖: refresh token 轮换后的旧 token 失效 (design 没要求, 但实跑发现风险) → 回 impl 补 T7
- [x] 已确认完整: 正常 + 5 边界全过
## VERDICT: PASS | REWORK(回 impl)
```
## delivery-gate 联动
System/Refactor + stage=ship 时, delivery-gate 检查:
- `runtime-verify.md` 存在
- 含 `## 测试场景 (实跑)` 段且有实际输出 (不是空模板)
缺失 → block, 解锁动作: 跑 /athena-runtime-verify.
## 与单测 / review 的分工
| | 单测 (impl 内) | runtime-verify (本) | review (之后) |
|---|---|---|---|
| 验什么 | 函数逻辑对不对 | **真实运行跑不跑得通** | 代码质量 + spec 覆盖 |
| 怎么验 | mock + 断言 | 实跑接口 + 真实数据 + 自测自改 | 读代码 + 对照 design/checklist |
| 谁做 | generator | /goal 循环 (DOER+CHECKER) | reviewer/spec-compliance/evaluator |
## 不做
- ❌ 不自造 loop 引擎 (用官方 /goal)
- ❌ 不替代单测 (单测在 impl; 这里是运行时实跑)
- ❌ 不无限循环 (/goal turn 上限护栏必写, 撞上限停下来报告)
- ❌ Hotfix/Bugfix/Quick 不强制 (小改动过度工程)
- ❌ reflect 不发散成新需求 (那是项目级 brainstorm; 这里只查本 sprint 落地完整性)
## 例外
- 项目无可运行环境 (纯库 / 纯算法, 无接口无 UI): 降级为"用真实数据跑示例 + 边界", 不强求起服务
- `_index.skip_runtime_verify = true`: 跳过 (用户自负责, 不推荐 System/Refactor 跳)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!