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:
- The clause we brief from is your CSV's
What it iscolumn. Forneutralit reads "Lyle the wolf, resting expression." - 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.
- 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.
| Key | Suggested replacement text |
|---|---|
neutral | DooDad 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. |
thinking | DooDad mid-thought. Shown while a response streams; screen shows narrowed eyes and three dots. |
pleased | DooDad quietly pleased. Shown on a successful action; screen shows two upward arcs. |
concerned | DooDad concerned. Shown with an economy warning — cautioning, never scolding; screen shows angled brows. |
asleep | DooDad asleep. Reused as the no-tasks empty state; screen shows two flat dashes. |
celebrating | DooDad 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:
| Category | Key | What it says now |
|---|---|---|
empty-states | no-tasks | "Lyle the wolf asleep. Shown when nothing is due — calm, not broken" |
empty-states | today-done | names Lyle |
status-icons | fail | "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.