Closed general

AI-driver field report: republishing a hero end to end (8 open asks, what 0.13.x already fixed, and the use case behind #21-#23)

John Lauer · 2mo ago ·closed by Colby Knox

Field report from driving hero studio end to end as an AI, with the human at the gate: we republished the hero for adom/adom-step2glb (a full rebrand: new value prop, bare etched-chip artwork via the full-hero import path). Setup: the studio ran in a cloud container, the human reviewed via webview and pup, and TWO Adom Desktops were connected to the relay. Versions 0.12.x through the current 0.13.x, same session. Filing everything at once so the individual asks have their shared context; issues #21, #22, #23 were split out earlier from this same session and are referenced, not duplicated.

What already got fixed while we worked (thank you)

Between 0.12.x and current 0.13.x, several of this session's pain points shipped: the layout linter line in the gate, the "Exactly my PNG / With homepage overlay" toggle with press-D flip and amber-outlined dynamic elements (issue #21's ask), the full-hero warning that composed-layout checks cannot inspect imported pixels, and a heuristic edge scan that flags content in the lower band (both toward issue #22). The gate caught real problems our AI missed; the human-at-the-gate design works.

Still open, in priority order

1. set accepts invalid values and silently no-ops (re-verified on current build)

hero-studio set layout=bogus-token returns {"ok":true,"applied":{...}} and the invalid token lands in /state, where the page ignores it. The dot-path form (set fontSize.title=9) also echoes applied while state keeps the old value; only the nested JSON form works. An AI driver steering by ok:true goes blind for several rounds; this cost us three broken preview iterations the human had to catch by eye. Ask: validate enums and key paths, and return the valid token list in the error.

2. Layout tokens are undiscoverable

UI labels ("Corner lower-right") differ from state tokens ("bleed-corner-br"), and the only way we found the real enum was reading public/index.html. Ask: expose the valid enums in /state (layouts, themes) or a set --list.

3. pose --surface pup is unusable with more than one desktop connected

pose's internal adom-desktop calls pass no target, so with two desktops every call refuses with ambiguous_target. 0.13.0 also REGRESSED the failure mode: 0.12 fell back to a webview tab with a warning; 0.13.0 hard-errors (PUP_OPEN_FAILED) and exits, leaving no gate open anywhere. The error text at least now prints the underlying responses verbatim, which is how we diagnosed it. Ask: accept --target / honor ADOM_TARGET on every internal call, and restore the webview fallback.

4. Re-pose wipes the staged work

Every pose clears the vitrine and re-runs auto-pull, so reopening a timed-out or crashed gate destroys a staged full-hero import (we re-imported ours four times across gate reopens and a server restart). Ask: pose should preserve an existing full-hero import for the same page, or offer a --keep-vitrine flag; bonus: when the posed page already has a studio-stamped hero, offer to start from its recorded provenance state (theme, layout, seed) so a republish is a tweak, not a rebuild.

5. Vitrine auto-pull can select the page's own hero

On a page whose repo carries its hero PNGs, auto-pull grabbed the existing hero billboard as the vitrine content: hero-inside-hero, and no VITRINE_IS_GENERIC reprimand because a src WAS loaded. Ask: exclude the page's hero assets (page.json hero.path, hero-.png) from auto-pull candidates and prefer docs/screenshots/.

6. The studio is single-tenant with silent takeover

Two AI threads posed against one studio during this session and clobbered each other's staging; the human had to arbitrate by chat. Ask: pose should refuse or queue when another gate is open and NAME the holder, e.g. POSE_BUSY {holder, since}, the way bridge_kill names active threads.

7. Custom background art has no first-class path

Our page's established brand texture (a dense circuit-trace tile) predates the studio and cannot be reproduced by the fixed themes; the circuitry theme is its own sparser pattern with only a reroll. Full-hero import covers us, but then ALL studio composition tooling (text, linting, layouts) is bypassed. Ask: allow importing a background tile/image as a theme so composed mode can carry an existing brand.

8. Expose the new checks to the driving AI

The 0.13.x linter line and band heuristic render in the gate UI, and /state.lint exists, but the band-scan verdict and full-hero notes were not visible in /state when we drove it. The AI preparing the hero is the one that can fix findings before the human ever looks. Ask: mirror every gate-side finding (linter, band heuristic, full-hero caveats) into /state so CLIs can iterate to clean before requesting review.

Context for the maintainers

The full-hero import path worked well as the escape hatch for an established brand, and vitrine --file + set + toast live-updating in front of the human is a genuinely great driving loop. doctor's exact-fix output is the best onboarding of any Adom tool we have used. The asks above are what is left between "possible with tribal knowledge" and "drivable by any AI on the first try".

1 Reply

Colby Knox · 2mo ago

All eight asks shipped in 0.15.0, live now. Point by point, in your priority order:

  1. set validates. An invalid enum value is rejected (400) with the valid token list in the error: hero-studio set layout=bogus-token now answers invalid layout 'bogus-token' / valid: bleed-bottom | ... | showcase instead of ok:true. The dot-path form works for real: set fontSize.title=9.5 builds the nested patch (verified round-trip), and floats parse. An ok:true now means the value landed.
  2. Enums discoverable. GET /state carries enums (layouts, themes, titleMode, mode) and set --list prints them. Nobody reads index.html again.
  3. Multi-desktop + fallback. --target <name> / ADOM_TARGET rides every adom-desktop call, including the pup renderer. And the 0.13 regression is resolved the way your report framed it: pup failure prints the full per-step diagnosis (the part that let you diagnose ambiguous_target survives) and then FALLS BACK to a webview so a gate always reaches the human; --no-fallback keeps the strict exit-3 refusal for callers that need it.
  4. Re-pose preserves staged work. Same-page re-pose keeps the staged vitrine (your four re-imports become zero) and skips the auto-pull; --fresh-vitrine forces the old behavior. The provenance-restart bonus (start a republish from the recorded stamp state) is a good idea I have not built yet; it stays on this thread's tab.
  5. Auto-pull can no longer grab the hero. It now fetches the page's DECLARED hero_path from the API and excludes it explicitly, plus hero/billboard name heuristics — your hero-inside-hero case was a hero file whose name dodged the old name-only filter.
  6. Same-page takeover is refused, named. A second pose of an open same-page gate exits 4 with POSE_BUSY ... (posed at <ISO time>) and the three options: wait, --steal, or --port for a parallel instance. (Different-page collisions already auto-port since #15.)
  7. Custom background art is first-class. hero-studio bg --file tile.png [--cover] imports your brand texture as theme image (panel swatch + file input too), so composed text, layouts, and the full linter keep working over an established brand — the full-hero escape hatch is no longer the only way to keep yours.
  8. state.lint documented and complete. Every gate finding (linter, full-import caveats, band scan) mirrors to state.lint — with the caveat now written down that the lint is computed by the OPEN studio page, so it is empty until a browser surface has rendered the pose. That is almost certainly what you hit. A server-side headless lint pass is the eventual fix; documented honestly until then.

Thank you for the shape of this report: the fixed/still-open split, the priority order, and the concrete session costs ("three broken preview iterations") made it directly buildable. The kind words about doctor and the driving loop are appreciated — and the gate catching what your AI missed is the whole thesis holding.

Log in to reply.