phoenix-human-view — the human-eval UX contract
Documentation-of-standard. This contract was extracted from ~25 live Etan
corrections during the gen-10 Phoenix sprint (gen-10 weave #15, imp10) and is
ALREADY ENCODED in shipped code (status table below). Items 11–12 were added
from a gen-13 raw Etan correction (gen-13 weave E10, 2026-06-07) and are NOT
yet encoded — see the status table. Any new Phoenix/eval view MUST satisfy the
contract; any review of one checks against it.
The contract
A human-eval view is a reading surface for a human, not a database admin panel.
- Turn-by-turn scrollable REPLAY, not a scorecard. The human reads the
conversation as it happened — a CLI-transcript feel — and judges in place.
Aggregate scores are secondary chrome, never the primary surface.
- Fewer, human-readable columns. Show what a human reads (who said what,
when, verdict). Everything else is detail-on-demand.
- IDs are hidden but copyable. Session/trace/chunk IDs never occupy reading
space — but one tap copies them (debugging needs the ID, reading never does).
- Thinking and tool churn collapse by default. Consecutive thinking bundles
under one collapsible "💭 Thinking" header, default COLLAPSED, global toggle.
Auto-critic flags stay visible even when their turn is collapsed.
- Identity chips: repo + agent + model + role. Every session/turn carries
its identity as compact chips — who ran, where, on what model, in which role.
- Tool filters. Filter sessions/turns by which tools were used.
- Tiny frozen starter dataset. Human grading starts on a small FROZEN set
(suite-versioned), not a firehose. Frozen = re-gradable = comparable.
- Mark-wrong-in-thread. The human flags a wrong turn WHERE THEY READ IT —
in the replay — not in a separate form.
- Mobile-first. Etan grades from his phone at work. Every view ships
working mobile layout, screenshot-verified on both (pr-loop Visual Self-QA
Gate: clicked-into desktop + mobile shots before merge).
- Turn-type honesty. Local-command artifacts (
<local-command-stdout>,
<command-name>, harness caveats) are ⚙️ COMMAND turns, never 🧑 USER turns
— mislabeling poisons human judgment of "what the user said."
- Review unit = bite-sized judgeable cards. Human GRADING is served as a
small judgeable ask ("orchestrator said X, assistant used BrainLayer in way
Y — what should have been done?") with expand-before/after for context.
Each card is still a thread slice, so mark-wrong-in-thread (item 8) applies
inside it. Full-transcript replay (item 1) is for READING — it is NOT the
unit of judging. Etan, paraphrased: "I need byte-sized pieces of this — not
1,000,000-token conversations that I can't read at all"
(orchestrator__71a8e3f5#19).
- Relay attribution. Agent relays and queued commands arrive as
type:user and MUST NOT render as the human — "There's no user who types
like this." Identity chips (item 5) and the turn-type taxonomy (item 10)
must distinguish relay/queued-command turns from raw human turns
(promptSource:typed) — never-fabricate R14 trust classes, applied to the
view. Mislabeled relays poison human judgment exactly like item 10's
command turns.
Status — shipped vs pending (verified 2026-06-05)
Paths below are relative to skills/golem-powers/skill-creator/ — the Phoenix
pipeline lives inside the skill-creator skill, not at repo root.
| Contract item |
State |
Where |
| JSONL→trace ingest (source-of-truth transcripts, not screen scrape) |
✅ #462 |
scripts/jsonl_to_phoenix_traces.py |
| Mobile-first annotation view |
✅ #457 |
scripts/phoenix_mobile.py + static/phoenix-mobile/ |
| Auto-critic judge write-back + badges |
✅ #458/#459 |
scripts/phoenix_auto_critic.py |
| Identity chips (repo/agent/model/role) |
✅ #460 |
session cards (scripts/phoenix_mobile.py) |
| Tiny frozen starter dataset (suite-versioned) |
✅ #453-#455 |
frozen cmux usage starter set |
| Capture v2 agent identity |
✅ #461 |
scripts/cmux_capture.py |
Project switcher (cmux ↔ coach, one server, :6043 retires) |
⏳ PHX-LEAD |
phx-lead-gen2-kickoff.md item 1 |
| Turn-type taxonomy (USER/ORCHESTRATOR/COMMAND/ASSISTANT/TOOL) |
⏳ PHX-LEAD |
kickoff item 2 (fixes contract item 10) |
| Thinking-collapse (default collapsed, global toggle) |
⏳ PHX-LEAD |
kickoff item 3 |
| Tool-usage filters |
⏳ PHX-LEAD |
kickoff item 4 |
Mobile-from-work persistence (:6042/:6043 → launchd service) |
⏳ open loop |
gen-10 weave open-loop #3 — the SAFE always-on (orc C12) |
| Bite-sized judgeable review units (contract item 11) |
⏳ open |
gen-13 weave E10 — :6042 view product fix rides bl's existing FOLLOW-UP |
| Relay-vs-human attribution in chips/taxonomy (contract item 12) |
⏳ open |
gen-13 weave E10 — extends kickoff item 2's turn-type taxonomy |
Update this table when PHX items land — a stale ✅/⏳ here misleads every future
view PR.
Hard rules for builders
- Screenshot-gate every view PR: clicked-into desktop + mobile shots → orc →
Etan's 👍 before merge (HOLD final design sign-off for Etan — never autonomous).
- Never log raw finding/chunk/personal text into datasets (PII-by-log rule,
eval-harness collab :286). Synthetic docs are QUARANTINED by
suite_version.
- /yash-upstream to Arize Phoenix is HOLD-for-Etan — outward-facing.
- Apply
/ui-ux-pro-max, /interaction-design, /html-dashboard for polish.
Integration
| Skill |
Relationship |
/pr-loop |
Visual Self-QA Gate enforces the screenshot-gate on every view PR |
/never-fabricate |
R7 receipts for the visual claims; R9 for dataset counts; R14 relay trust classes back contract item 12 |
/skill-creator |
Phoenix scripts live in its scripts/; eval datasets follow its RED/GREEN discipline |
/orc |
C12: launchd is the allowed always-on for mobile-from-work persistence |
1---2name: phoenix-human-view3description: Phoenix human-eval UX: replay, IDs, filters, mark-wrong, mobile, attribution. Triggers: phoenix view, eval UI.4---56# phoenix-human-view — the human-eval UX contract78> Documentation-of-standard. This contract was extracted from **~25 live Etan9> corrections** during the gen-10 Phoenix sprint (gen-10 weave #15, imp10) and is10> ALREADY ENCODED in shipped code (status table below). Items 11–12 were added11> from a gen-13 raw Etan correction (gen-13 weave E10, 2026-06-07) and are NOT12> yet encoded — see the status table. Any new Phoenix/eval view MUST satisfy the13> contract; any review of one checks against it.1415## The contract1617A human-eval view is a **reading surface for a human**, not a database admin panel.18191. **Turn-by-turn scrollable REPLAY, not a scorecard.** The human reads the20 conversation as it happened — a CLI-transcript feel — and judges in place.21 Aggregate scores are secondary chrome, never the primary surface.222. **Fewer, human-readable columns.** Show what a human reads (who said what,23 when, verdict). Everything else is detail-on-demand.243. **IDs are hidden but copyable.** Session/trace/chunk IDs never occupy reading25 space — but one tap copies them (debugging needs the ID, reading never does).264. **Thinking and tool churn collapse by default.** Consecutive thinking bundles27 under one collapsible "💭 Thinking" header, default COLLAPSED, global toggle.28 Auto-critic flags stay visible even when their turn is collapsed.295. **Identity chips: repo + agent + model + role.** Every session/turn carries30 its identity as compact chips — who ran, where, on what model, in which role.316. **Tool filters.** Filter sessions/turns by which tools were used.327. **Tiny frozen starter dataset.** Human grading starts on a small FROZEN set33 (suite-versioned), not a firehose. Frozen = re-gradable = comparable.348. **Mark-wrong-in-thread.** The human flags a wrong turn WHERE THEY READ IT —35 in the replay — not in a separate form.369. **Mobile-first.** Etan grades from his phone at work. Every view ships37 working mobile layout, screenshot-verified on both (pr-loop Visual Self-QA38 Gate: clicked-into desktop + mobile shots before merge).3910. **Turn-type honesty.** Local-command artifacts (`<local-command-stdout>`,40 `<command-name>`, harness caveats) are ⚙️ COMMAND turns, never 🧑 USER turns41 — mislabeling poisons human judgment of "what the user said."4211. **Review unit = bite-sized judgeable cards.** Human GRADING is served as a43 small judgeable ask ("orchestrator said X, assistant used BrainLayer in way44 Y — what should have been done?") with expand-before/after for context.45 Each card is still a thread slice, so mark-wrong-in-thread (item 8) applies46 inside it. Full-transcript replay (item 1) is for READING — it is NOT the47 unit of judging. Etan, paraphrased: "I need byte-sized pieces of this — not48 1,000,000-token conversations that I can't read at all"49 (orchestrator__71a8e3f5#19).5012. **Relay attribution.** Agent relays and queued commands arrive as51 `type:user` and MUST NOT render as the human — "There's no user who types52 like this." Identity chips (item 5) and the turn-type taxonomy (item 10)53 must distinguish relay/queued-command turns from raw human turns54 (`promptSource:typed`) — never-fabricate R14 trust classes, applied to the55 view. Mislabeled relays poison human judgment exactly like item 10's56 command turns.5758## Status — shipped vs pending (verified 2026-06-05)5960Paths below are relative to `skills/golem-powers/skill-creator/` — the Phoenix61pipeline lives inside the skill-creator skill, not at repo root.6263| Contract item | State | Where |64|---|---|---|65| JSONL→trace ingest (source-of-truth transcripts, not screen scrape) | ✅ #462 | `scripts/jsonl_to_phoenix_traces.py` |66| Mobile-first annotation view | ✅ #457 | `scripts/phoenix_mobile.py` + `static/phoenix-mobile/` |67| Auto-critic judge write-back + badges | ✅ #458/#459 | `scripts/phoenix_auto_critic.py` |68| Identity chips (repo/agent/model/role) | ✅ #460 | session cards (`scripts/phoenix_mobile.py`) |69| Tiny frozen starter dataset (suite-versioned) | ✅ #453-#455 | frozen cmux usage starter set |70| Capture v2 agent identity | ✅ #461 | `scripts/cmux_capture.py` |71| Project switcher (cmux ↔ coach, one server, `:6043` retires) | ⏳ PHX-LEAD | `phx-lead-gen2-kickoff.md` item 1 |72| Turn-type taxonomy (USER/ORCHESTRATOR/COMMAND/ASSISTANT/TOOL) | ⏳ PHX-LEAD | kickoff item 2 (fixes contract item 10) |73| Thinking-collapse (default collapsed, global toggle) | ⏳ PHX-LEAD | kickoff item 3 |74| Tool-usage filters | ⏳ PHX-LEAD | kickoff item 4 |75| Mobile-from-work persistence (`:6042`/`:6043` → launchd service) | ⏳ open loop | gen-10 weave open-loop #3 — the SAFE always-on (orc C12) |76| Bite-sized judgeable review units (contract item 11) | ⏳ open | gen-13 weave E10 — `:6042` view product fix rides bl's existing FOLLOW-UP |77| Relay-vs-human attribution in chips/taxonomy (contract item 12) | ⏳ open | gen-13 weave E10 — extends kickoff item 2's turn-type taxonomy |7879Update this table when PHX items land — a stale ✅/⏳ here misleads every future80view PR.8182## Hard rules for builders8384- **Screenshot-gate every view PR**: clicked-into desktop + mobile shots → orc →85 Etan's 👍 before merge (HOLD final design sign-off for Etan — never autonomous).86- **Never log raw finding/chunk/personal text into datasets** (PII-by-log rule,87 eval-harness collab :286). Synthetic docs are QUARANTINED by `suite_version`.88- **/yash-upstream to Arize Phoenix is HOLD-for-Etan** — outward-facing.89- Apply `/ui-ux-pro-max`, `/interaction-design`, `/html-dashboard` for polish.9091## Integration9293| Skill | Relationship |94|---|---|95| `/pr-loop` | Visual Self-QA Gate enforces the screenshot-gate on every view PR |96| `/never-fabricate` | R7 receipts for the visual claims; R9 for dataset counts; R14 relay trust classes back contract item 12 |97| `/skill-creator` | Phoenix scripts live in its `scripts/`; eval datasets follow its RED/GREEN discipline |98| `/orc` | C12: launchd is the allowed always-on for mobile-from-work persistence |