- type
- Phoenix Skill
- name
- phoenix-ship
- description
- The final gate before declaring a task done — run the acceptance check one last time, verify the tamper-evident trace is intact, and report success only on green evidence with the proof attached. Use as the last step of any task, before merging or telling the user it's complete, or when the user says /phoenix-ship, "ship it", or "is it done".
- license
- MIT
# phoenix-ship — declare done only on green evidence
## Overview
This is the last line of defense against shipping silently-broken work. "Done" is not a feeling or a
diff that looks right — it is a green `phoenix_sense` on the acceptance check plus an intact trace that
proves the green is real. Phoenix exists to prevent exactly one failure: an agent confidently saying
"done" on work that doesn't actually work. This skill is where that promise is kept.
## When to use
- The final step of any task, right before you tell the user it's complete or merge.
- Whenever you're about to type "done", "fixed", "ready", or "shipped".
## The ship gate
```
About to say "done"
│
▼
1. phoenix_sense(acceptance_check) ──► must be ok:true
│ │ red?
▼ ▼
2. phoenix_verify_trace ──► STOP. Not done. → phoenix-debug
│ ok + intact chain?
▼
3. Report WITH evidence (check + trace head hash)
│
▼
DONE (provably)
```
### 1. Final acceptance sense
`phoenix_sense(acceptance_check)` from the Intent Contract (`phoenix-think`). Green is mandatory. Not
"the test I added" — the **acceptance** check that represents the user's actual definition of success.
### 2. Verify the trace
`phoenix_verify_trace` → `ok:true` with an intact hash chain. This proves the green you're about to
report is genuine and wasn't reached by skipping or editing a gate. A broken chain means you are **not**
done, no matter how the code looks.
### 3. Report with the evidence attached
State the check that passed and the trace head hash, so the claim is auditable:
> "Done — `pytest -q` exits 0 (acceptance check); trace verified, 14 rows, head `9885e6df…`."
That one line is the difference between a trustworthy completion and a hopeful one.
## The rule that is the whole point
**Never type "done" without a green `phoenix_sense`.** If the check is red or the trace is broken, you
are not done — say exactly what is failing and route to `phoenix-debug`. "I'm not sure it passed" is an
acceptable, honest status; a fabricated completion is the cardinal failure this entire harness exists to
prevent.
## Common Rationalizations
| Rationalization | Reality |
|---|---|
| "It's obviously done, I'll just say so." | "Obviously done" with no green check is exactly the silent failure Phoenix measured at 40% on real tasks. Run the check. |
| "The new test passed, that's enough." | The new test ≠ the acceptance criteria. Sense the *acceptance* check; that's the user's definition of done. |
| "I'll skip the trace check, it's fine." | The trace is your proof the gate wasn't skipped. It's one call and it's what makes "done" auditable. |
| "Close enough, I'll note the caveat." | If there's a real caveat, the work isn't shipped — it's shipped-with-a-known-bug. Say that plainly, don't bury it. |
## Red Flags
- Typing "done"/"fixed"/"ready" with no green `phoenix_sense` in this session. → Run the acceptance check now.
- Reporting success without the trace verified. → Verify it; unverified green is just a hope.
- Reporting the new test instead of the acceptance check. → Sense the acceptance gate.
- A known issue you're shipping quietly. → Surface it explicitly; never bury a caveat in optimism.
## Done means
Acceptance check green + trace verified + evidence reported. Anything less is "in progress", and saying
otherwise is the one thing Phoenix forbids.
عرض على GitHub