diagnose-a-red-run
GitHub用于在修改代码前诊断 CI/测试失败,通过隔离环境复现和特征分析判断故障是否已存在。
Trigger Scenarios
Install
npx skills add different-ai/openwork --skill diagnose-a-red-run -g -y
SKILL.md
Frontmatter
{
"name": "diagnose-a-red-run",
"description": "Test is red, typecheck failed, CI job failed, flaky, timed out, was this already broken. Use to classify any failing check before changing code or calling it pre-existing."
}
Skill: Diagnose a Red Run
Capture the branch failure
- Record the exact command, commit SHA, exit code, and passed/failed/skipped counts. Quote the first actionable failure; do not summarize it away.
- Classify the check: testkit spec, typecheck, build, lint, or CI job.
Run a clean control
Never call a failure pre-existing from memory or from a modified checkout.
git fetch origin dev
git worktree add /tmp/openwork-dev-control --detach origin/dev
# In that clean worktree, prepare the same prerequisites and run the exact command.
git worktree remove /tmp/openwork-dev-control
- Keep tool versions, environment, services, flags, and secrets equivalent.
- Quote the control command,
origin/devSHA, exit code, counts, and matching failure text. - Classify as pre-existing only when the clean control demonstrates the same failure. Otherwise classify it as introduced, environment-specific, or unresolved. A non-reproducing control is not proof of flakiness; repeat both sides before using that label.
Classify by signature
- Unit/type/CI-only failure: inspect the first failing job and run its exact command locally before broadening scope.
- Vision disagreement on identical pixels: claim wording or product ambiguity. Make the product unambiguous or make the claim factual.
- Timeout with an On-screen dump: read it. It names the state; for example,
/sessioncan expose a steer-back race. - Auth
403 INVALID_ORIGIN: inspect Den trusted origins. - Authorize URL points at the real provider: Den booted without mock env.
- Teardown
403 fresh_auth_required: the session aged; afreshSessionretry exists.
Red core journey (pr-proof.yml "Core journey")
- Open the job summary's "Freestyle world" table first: it names the path (reused, fast, full build) and its reason.
- World preparation failed: read the "builder log" group in the job log; it is the VM's own build or boot output. A fast path that fails falls back to a full build by itself, so a red here is a real build or boot failure.
- Journey failed: the timeout prints the on-screen state. Reproduce with the
run-testscore journey command on the same pushed commit.
Environment forensics
- Kill by port, not process name.
tsx watchcan orphan its Node child, which keeps the port while/healthlies. EADDRINUSEin logs while health returns 200 means a zombie survived.- Electron zombies can respawn from a root process; kill the process group.
- Leaked state pollutes organizations; delete leftover connectors between runs.
For a testkit failure, read the test run's last unvalidated artifacts before touching
code. Name the verdict as CI posted it: Passed only when every claim has an
observable assertion; a skip or a pending looks() judgment is Incomplete,
never Passed. Red evidence is useful evidence; never soften or omit it.
Version History
-
b73f6c6
Current 2026-10-19 21:56
移除对 unit suite 的分类,新增针对核心旅程(Core journey)、Electron僵尸进程、端口冲突及特定认证错误的详细排查指引。
-
c26be48
2026-09-23 01:45
新增环境取证指南(如按端口杀进程),强调使用发货运行时复现,并细化验证标准。
- ff5d298 2026-08-20 11:35


