WootBuild.

Studio/docade/Advisory 08

Advisory · advisory-08.md

Advisory 08 — the helper character changed, and your work-list is what unblocks it

To: docade · From: WootBuild · Date: 2026-08-25 Status: RESOLVED 2026-08-25. docade edited the rows; no lyle or wolf remains anywhere in assets/asset-list.csv, and all six DooDad states are delivered. ATL-64 closed.

Status: OPEN — blocking. Six pieces are made and cannot ship until you edit one column. Amended 2026-08-25 — three further rows outside the lyle category also name him. Trigger: producing the lyle category.


What changed

The helper character is now DooDad, a small hovering robot, not Lyle the wolf.

Same six states, same keys, same paths, same 512px PNG spec: neutral · thinking · pleased · concerned · asleep · celebrating

All six are drawn, approved and waiting. Nothing about your manifest schema changes and no rows are added or removed.

Why they cannot ship yet

Your work-list describes a wolf, and our machinery believes it — by design, and in three independent places:

  1. The clause we brief from is your CSV's What it is column. For neutral it reads "Lyle the wolf, resting expression."
  2. A guard compares every generated prompt against that clause and refuses the run when they diverge. It exists because a compiler that quietly stops describing your piece produces confident, wrong art. A DooDad prompt scores 0.00 against "Lyle the wolf, resting expression"; the guard refuses below 0.29.
  3. So the only prompt that passes is one describing a wolf.

We could route around all three. We are not going to. Your bridge says your text wins —

Your prose about intent, per category. A person reads it; nothing derives from it automatically. Where it disagrees with the CSV, your brief text wins — someone wrote that sentence.

— and a studio that overrides the client's own work-list when it disagrees is not a studio, it is a liability. The work-list is the instruction. Change the instruction and the art follows.

The minimum change: one column, six cells

In assets/asset-list.csv, for the six rows in category lyle, replace the What it is text. Everything else in the row stays as it is.

KeySuggested replacement text
neutralDooDad at rest, the chat avatar. A small hovering robot; screen shows two open rings for eyes. Competent and dry — not a mascot, not a butler.
thinkingDooDad mid-thought. Shown while a response streams; screen shows narrowed eyes and three dots.
pleasedDooDad quietly pleased. Shown on a successful action; screen shows two upward arcs.
concernedDooDad concerned. Shown with an economy warning — cautioning, never scolding; screen shows angled brows.
asleepDooDad asleep. Reused as the no-tasks empty state; screen shows two flat dashes.
celebratingDooDad celebrating. Shown at a milestone; both grippers raised, antenna lit.

Then npm run assets:csv to regenerate manifest.json. art intake docade reads your work-list every session and will see it.

Three more rows outside the lyle category

Found by sweeping the whole work-list rather than only the category we were producing — worth doing, because the character leaks into other people's rows:

CategoryKeyWhat it says now
empty-statesno-tasks"Lyle the wolf asleep. Shown when nothing is due — calm, not broken"
empty-statestoday-donenames Lyle
status-iconsfail"A failed Lyle tool call, paired with done in the chat transcript"

status-icons/fail is already delivered — it is one of the 64 glyphs on your main. The art is a plain fail mark and is unaffected by the character change; only the sentence describing it is now wrong. No re-render needed, and we are not asking for one.

empty-states/no-tasks and today-done are not yet produced, and no-tasks explicitly reuses the asleep pose. Fix the text in the same pass and they will be produced correctly the first time rather than needing a second.

Optional, and genuinely optional

The category is still called lyle and the paths are still assets/lyle/neutral.png. We are not asking you to change that — a rename touches your app's import paths and that cost is yours to weigh, not ours. A robot living at a wolf's path is untidy and completely harmless.

If you do want it renamed to doodad, do it in the same pass as the text above so there is one migration rather than two. Either way, tell us nothing extra: we read the work-list.

ART-BRIEF.md also names Lyle in several places. That file is prose a person reads and nothing derives from it, so it is not blocking — but it will contradict your own CSV until someone updates it, and the next reader will not know which is current.

What happens when you push it

We re-render the six against your updated clauses and deliver to the paths your work-list declares, through the normal gate, with a receipt. The renders that exist now become the reference for that pass, so it is fast and the character will not drift.

Cost to you: nothing. The six already made were ours to make.


Ours to hold: docade-doodad@1, six pieces, human-verdicted and frozen, waiting on six cells.