# Athena Runtime Verify

> PACE impl 后的运行时验证环 (v9.8.0 新, Codex). 用 Codex Goals 承载"实跑接口→自测自改→模拟环境/数据"自驱循环, 补 PACE 只单测不实跑的洞. System/Refactor 强制, Feature 可选, Bugfix/Quick/Hotfix 跳过. Loop Engineering 落地: DOER (generator 改) + CHECKER (Goals 完成判定 + delivery-gate), 不自批不自造 loop.

- Skill: `wenjunduan/athena-runtime-verify-3` (Agent Skill)
- Install (CLI): `npx skillmds@latest add wenjunduan/athena-runtime-verify-3`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wenjunduan/athena-runtime-verify-3/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: wenjunduan (https://skillmd.com/u/wenjunduan)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/wenjunduan/athena-runtime-verify-3

---


# /athena-runtime-verify — 运行时验证环 (v9.9.0, Codex)

## 为什么存在 (痛点)

PACE 到 impl 为止, review + 单测只验证 "想的问题实现没 / 单测过没", 不验证 **实际运行**.
单测全绿 ≠ 真实接口跑得通 / 边界数据不炸 / 换环境不挂.
本 skill 在 impl 与 review 之间插 **运行时验证环**: 写完 → 实跑 → 自测自改 → 直到真能跑.
把"人盯着跑测试、贴日志、让它改"换成 **系统自己跑、自己发现、自己改** (Loop Engineering).

## 触发 (按 PACE 级别)

| 路径 | runtime-verify | Goals 承载范围 |
|---|---|---|
| Hotfix | 跳过 (救火) | — |
| Bugfix / Quick | 跳过 (单测够) | — |
| Feature | 可选 (碰外部接口/有状态/多环境 → 做) | impl+runtime (可选) |
| Refactor | 强制 | impl+runtime |
| System | 强制 + 完整 Sprint | 全程 PACE |

> 小改动不强制 (铁律[不过度工程]).

## 核心: 用 Codex Goals 承载, 不自造 loop

Codex Goals (0.133+ 默认开启 [官方 release 0.133]) 是 CX 端的 objective-driven loop: 持续执行直到完成条件满足.
本 skill 不重新发明 loop, 把"运行时验证"写成 Goals 完成条件, 让 Codex 自驱.

### Step 0 · 开环前自检 (Loop Readiness · 借 cobusgreyling/loop-engineering loop-audit)

把 Goals 这种自驱 loop 放出去前, 主 thread 先给自己打分 —— "agent in loop and check" 把 check **前移**:
让 loop 跑之前就有能说 no 的东西, 而不是烧完 token 才发现没护栏。三项全绿才进 Step 1。

| 自检项 | 不通过则 |
|---|---|
| **CHECKER 能说 no?** 有 test / typecheck / lint / delivery-gate 能判失败 | 无硬验证 → 先补一个会失败的断言再开环 |
| **预算护栏有硬数字?** turn/时间上限 (大任务) token 预算 | 没写 → 补上限; 大任务额外估 token (借 loop-cost 思路) |
| **状态落盘点?** 进展写 .ai_state 而非只在 context | 不落盘 → 一断片就失忆; 配 /athena-checkpoint |

> 把 loop-audit 的 "Loop Readiness Score" 做成 agent 自评的一次性 gate —— 不引外部 CLI, 不自造轮子。

### Step 1 · 主 thread 设 Goals (impl 完成后)

完成条件三件套:
1. **可测终态**: 实跑结果可判定 (HTTP 200 / 退出码 0 / 边界用例全过)
2. **stated check** (怎么证明 — 见陷阱): 把实跑命令 + 输出晒进对话
3. **约束 + turn 上限护栏**: 改哪些不能动 + turn/时间上限 (Goals continuation 撞 usage limit/重复 blocker 自动停, 但上限仍要写)

### ⚠️ 完成判定只看对话里展示的 (致命陷阱)

同 CC /goal: 完成判定基于 agent 在对话里**实际展示**的东西, 不读文件.
→ 完成条件必须写成"输出能演示的", 每次实跑把 **命令 + 输出** 晒进对话.

| ❌ 错误 | ✅ 正确 |
|---|---|
| "接口测试通过" | "运行 `curl ... \| jq .status` → 输出 200" |
| "边界都覆盖了" | 5 个用例的实跑命令 + 实际输出逐条贴出 |

### Step 2 · 主 thread 在 Goals 循环内自驱 (DOER + CHECKER)

每轮自己决定下一步 (即"自己给自己提要求"):
- **写测试场景**: 实际接口调用 / 模拟数据 (正常+边界+异常) / 不同环境
- **环境矩阵 (v9.9.0)**: `_index.tools_available.vm_available=true` → 先 `/athena-vm doctor` 自检,
  然后关键场景在远程 VM 复跑一轮 (`ssh athena-vm-{name} 'cd {workdir} && ...'`) —
  干净环境暴露隐式依赖, 真实发行版暴露平台差异; ssh 命令 + 远端输出照旧晒进对话.
  VM 不通 → 降级回本机模拟, runtime-verify.md 里记一行"VM 未覆盖"进 Reflect
- **实跑** (按类型):
  - 前端 / E2E → `$playwright` skill (优先, 可落 repeatable tests); browser/computer-use plugin 仅作探索或人工式冒烟
  - 后端 / API → `curl` / 真实 HTTP / 测试库真实读写 (shell)
  - CLI → 实际命令 + 退出码 + stdout 断言
- **测出问题 → 自己改 → 复跑** (自测自改)
- 循环到完成条件满足

### Step 3 · 执行者判定 (CX 本平台 Goals 主路径)

默认 **CX 本平台 Goals**. 密集测试想隔离/省 token → spawn_agent generator.toml 分派 (multi-agent v2), opt-in.

## Step 4 · reflect (写完先自测, 再想哪里没完善)

Goals 跑完, 触发结构化反思 (Loop Engineering "系统自己发现任务"):
- 对照 design.md 验收 + 实跑暴露的现实, 列 "还有哪些没覆盖 / 没完善"
- 写 runtime-verify.md 的 `## Reflect` 段
- 决策: 发现缺口 → 回 impl 补 (写进 checklist.yaml 新 task); 够了 → next_action=review

> reflect 不发散新需求 (那是项目级 brainstorm); 只查本 sprint 落地完整性.

## 产出

`sprints/{slug}/runtime-verify.md` (用 apply_patch 写): 含 `## /goal 完成条件` `## 测试场景 (实跑)` (表格: 场景/类型/命令/实际输出/判定) `## 自测自改记录` `## Reflect` `## VERDICT`.

## delivery-gate 联动

System/Refactor + stage=ship 时, delivery-gate.py 检查 runtime-verify.md 存在 + 含 `## 测试场景` 段. 缺失 → block.

## 与单测/review 分工

| | 单测 (impl) | runtime-verify (本) | review |
|---|---|---|---|
| 验什么 | 函数逻辑 | **真实运行** | 代码质量+spec |
| 怎么验 | mock+断言 | 实跑+真实数据+自测自改 | 读代码对照 design/checklist |

## 不做

- ❌ 不自造 loop (用 Codex Goals)
- ❌ 不替代单测 (单测在 impl)
- ❌ 不无限循环 (turn 上限护栏必写)
- ❌ Hotfix/Bugfix/Quick 不强制
- ❌ reflect 不发散新需求

## 例外

- 纯库/纯算法 (无接口无 UI): 降级为"真实数据跑示例 + 边界", 不强求起服务
- `_index.skip_runtime_verify = true`: 跳过 (不推荐 System/Refactor 跳)

