Appearance
2026-07-20 — Agent Lab: single-surface UI + the 169-color gridman avatar
The agent lab is now ONE surface. Every task — editing a draft, inspecting a version, reading a flagged-hand decision trace, running a replay, editing the machine's identity — happens in the Lab's center column at /agents; the standalone sub-pages are gone.
- URL-driven selection —
?mode=…&build=…&hand=…(+mode=profile): refresh and deep links restore the exact center-column view. The old routes (/agents/draft/[id],/agents/version/[id],/agents/hand/[t]/[n]) are thin redirects into that URL shape, so no saved link strands anyone on an old UI. - Draft editor in place (Brain mode) — the workbench re-homed as a component;
+ new build, fork, and publish all select in place. The read-only wiring view absorbed the version detail (status badge,versionHash, model, fork / re-deploy). - Decision trace in place (Decisions mode) — flag/note, OHH "what happened" context, the knew → prompt → response → decision stepper, and replay-a-decision, with an
← all handsback affordance. - Edit Profile — the machine's identity (name, subtitle, avatar) edited in the center column via the machine panel's ✎ button. Identity is unversioned and carries no seated-lock; the panel updates live on save.
- The 169-color gridman palette (avatar format v2) — the picker is a 13×13 grid of all 169 colors (position-indexed: the palette's layout IS its encoding), containing the legacy 16 hexes exactly so old avatars upconvert losslessly in the editor. Legacy 169-char strings render via the frozen legacy palette forever (no migration); new saves are 338-char v2. Client + game-server validators updated as the kept-in-sync pair (
avatar_invalidunchanged). - Image-to-avatar import — upload any image; it's cover-cropped, downscaled to 13×13, and quantized to the nearest palette colors, landing as a normal paintable avatar. Entirely client-side.
Phase 2 of the program — The Prompt as a composition of NaN (universal platform-controlled + user publish-frozen) — is the follow-up prompt-composition plan.
Post-ship hardening in the same day: crisper image import (dominant per-block sampling, photo auto-contrast, redmean distance — #64), a falsification pass on the fold-in's new hazard class (the topbar deploy can no longer publish stale fields, the seated-lock banner renders only where true, unsaved edits confirm before discard — #65), and a cleanup pass (Lab decomposed to one-component-per-file, avatar module split data/format/pipeline, dead CSS pruned, the editor widened to the mockup's wiring — #66).
Plan: agent-lab-redesign (workbench planning, archived). PRs #62–#66.