# the bug an AI couldn't catch — spoolcast dev log 4

Type: video guidebook

Published: 2026-05-02

[Original page](<https://artlu.ai/video/spoolcast-dev-log-04>)

[Browse this group](<https://artlu.ai/ai/groups/spoolcast.md>)

Format: long

Duration (seconds): 264

Series: Spoolcast Dev Log

## Production

writing: author: Claude; role: screenplay, shot-list, scene prompts
audio: voice: Puck; tts: Google Cloud TTS; beatCount: 63
render: engine: Remotion

## Style

wojak-gpt2

Modern wojak / doomer-chad meme comic style, built natively on GPT Image 2 (text-to-image + image-to-image). Sister library to wojak-comic (which was built on nano-banana-2). Use this when the session's preferred_model is the GPT Image 2 family.

Modern wojak / doomer-chad meme comic style, built natively on GPT Image 2 (text-to-image + image-to-image). Sister library to wojak-comic (which was built on nano-banana-2). Use this when the session's preferred_model is the GPT Image 2 family.

builder: the main hooded figure — mid-register wojak (not fully doomer, not fully chad). Alias for the style anchor; serves double-duty as both the style anchor and the builder character reference.

ai-figure: a wojak-universe AI figure that is slowly breaking down from overuse. Full-body standing. EMOTIONAL REGISTER: flat-affect, NO displayed emotion, NO smile, NO frown — a dead expressionless stare. Depression is the absence of emotion, not the display of sadness. FACE LINEWORK: brows, nose, mouth drawn in the classic rough / jagged / slightly-disjointed wojak linework (uneven strokes, hand-drawn imperfections). EYES: replaced with hollow loading-spinner icons (dashed rings) set in dark-shadowed sockets. CRACKS: visible hairline cracks spider across the face and forehead as if the outer shell is fracturing from overuse. At least one crack wide enough to reveal a glimpse of AI circuitry underneath — thin circuit-trace lines, a small exposed chip pattern. Fractures read as structural fatigue, not injury. FOREHEAD: a crooked rectangular ink-stamp reading 'AI' in bold capital letters, partially crossed by a crack. HOODIE: pale cream / off-white hoodie, hood down, noticeably lighter than the weary narrator's gray hoodie. POSTURE: slight slouch, arms hanging at sides. PLAIN background, no environment, no other characters, no other text. Single clear readable subject.

## Scenes

### Act 1 — cold open

I built a tool to update my own projects.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "MCP".

### Act 1 — cold open

I asked it to update one project.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 1 — cold open

But instead of updating the one I asked for, it updated a different one.

## Scene prompt

Chat-UI mockup of the MCP's response message. The response text reads roughly: 'Updated project: homepage showcase — artlu.ai (demos grid + top/showcase flag split). Slug regenerated.' The wrong-project name is highlighted in red. Browser/chat-UI chrome contrasts with the wojak anchor.

### Act 1 — cold open

But when I checked, it told me — in writing — that it had done the right thing.

## Scene prompt

Same chat-UI response held; push-in zoom on the success-confirmation phrasing in the response (e.g. 'Updated successfully.' or '✓ Slug regenerated.'). Red highlight on the wrong-name still visible above. The contradiction is the point.

### Act 1 — cold open

Hmm...

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic scene: the builder character at desk, eyebrow raised, eyes narrowed at the laptop screen with a clearly skeptical / suspicious expression. Slightly leaned-in posture. The chat-UI from the previous beats is still visible on the laptop in the background but de-emphasized. Held longer than other cold-open chunks — silent doubt.

### Act 1 — setup

Before we dive in — quick context. I run a tracker for my projects. Fifty-eight of them.

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "artlu.ai/project/spoolcast" | "artlu.ai/project/tribe".

### Act 1 — setup

Each one has a unique identifier — a slug, the short readable bit at the end of a web address. Like 'spoolcast,' or 'tribe.'

## Scene prompt

Wojak-comic scene: a single hand-drawn URL written across the cream paper, e.g. 'artlu.ai/project/spoolcast'. The slug part 'spoolcast' is circled in pencil. Below it, a second URL 'artlu.ai/project/tribe' with 'tribe' circled. Clear, label-style layout.

### Act 1 — setup

However, some projects had no slug. A few were stale — I'd renamed the project, the slug never followed.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "MCP".

### Act 1 — setup

So claude was running through the list, fixing each one. Through a tool I built — an MCP, a bridge that lets claude operate the tracker.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "+14" | "+3".

### Act 2 — bumper

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "THE AUDIT".

### Act 2 — THE AUDIT

Fourteen had no slug. Claude added them. Three were stale. Claude updated those too.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 2 — THE AUDIT

With the updates complete, things were moving smoothly.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 2 — THE AUDIT

As he went through, he noticed some specific issues.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 2 — THE AUDIT

Going great. Routine work.

## Scene prompt

Wojak-comic scene: the builder leans back in his chair, hands behind head, relaxed confident posture. The ai-figure continues working at the laptop in the background, calmly. Quiet rhythm beat — pre-disaster calm.

### Act 2 — THE AUDIT

But then things took a turn — claude got to a project literally named 'artlu.ai.'

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "update_project("artlu.ai")".

### Act 2 — THE AUDIT

Curious, claude called the update tool. The tool responded.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 2 — THE AUDIT

But the response was unexpected.

## Scene prompt

Wojak-comic scene: pause-frame on the response bubble materializing, builder leaning slightly forward; tension on the laptop screen.

### Act 2 — THE AUDIT

And the response named a completely different project.

## Scene prompt

Chat-UI mockup: the MCP response text fully visible. The response reads roughly: 'Updated project: homepage showcase — artlu.ai (demos grid + top/showcase flag split).' The wrong-name region 'homepage showcase' is highlighted in red. Same chat-UI register as C3/C4.

### Act 2 — THE AUDIT

The one it had actually updated — was the homepage demos grid. Not artlu.ai.

## Scene prompt

Side-by-side card render: LEFT panel labeled 'asked for' shows the artlu.ai project (tracker row). RIGHT panel labeled 'updated' shows the homepage-showcase project (different tracker row). Strikethrough animation between them suggested. Tracker-UI register.

### Act 2 — THE AUDIT

This discrepancy caught my attention. The tool's own response gave it away.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "index.ts".

### Act 3 — bumper

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "THE COLLISION".

### Act 3 — THE COLLISION

I reverted the change. Opened the source code.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 3 — THE COLLISION

That's when I noticed something strange.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 3 — THE COLLISION

So, I knew what to do next.

## Scene prompt

Wojak-comic scene: builder's hand reaching toward the keyboard, decisive but quiet.

### Act 3 — THE COLLISION

Both tools used the same single line of code.

## Scene prompt

Code-editor screenshot mockup: split view of pre-fix index.ts. LEFT panel shows the get_project tool body with the line `doc.data().name?.toLowerCase().includes(name.toLowerCase())` highlighted. RIGHT panel shows the update_project tool body with the SAME line highlighted. Monospace, code-editor theme, distinct from wojak anchor.

### Act 3 — THE COLLISION

This line of code performed a pure substring match — anything containing the search string would match. Nine of my projects did.

## Scene prompt

Code-editor card: the single line `doc.data().name?.toLowerCase().includes(query.toLowerCase())` displayed prominently. Below it, a list of nine real-or-representative project names (e.g. 'artlu.ai', '— artlu.ai', '— artlu.ai v2', 'homepage showcase — artlu.ai', etc.) all glowing because each contains the substring 'artlu.ai'. Counter '9' visible.

### Act 3 — THE COLLISION

Nine matches. But only one came back. I needed to know which one — and why.

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 3 — THE COLLISION

To find out, I looked into how the system processes matches.

## Scene prompt

Wojak-comic scene: zooming-in on the laptop screen, the matcher logic represented as a small flowchart sketch.

### Act 3 — THE COLLISION

It returned the first match it found. Sorted by ID — the random label each project gets when it's saved.

## Scene prompt

Code-editor card: same nine project names from C18, each with its randomly-generated firestore doc ID rendered next to it (monospace). The IDs are visually distinct (mix of letters and digits). A small label: 'sorted by document ID'. The first item in sorted order is at the top.

### Act 3 — THE COLLISION

Artlu.ai's ID started with M. The wrong project's started with 4. Four sorts before M.

## Scene prompt

Two large monospace ID strings rendered side by side: 'mE3rAaf8IZqxEn4t3Rj4' (labeled artlu.ai) and '4EdEwKBbJWejkxwv8WVw' (labeled homepage-showcase). The first character of each is enlarged and color-coded — 'M' in one color, '4' in another. A small label 'sort order: 4 < M' visible.

### Act 3 — THE COLLISION

So the wrong project always won. Every time.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 3 — THE COLLISION

I needed to understand why this was happening.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "get_project("artlu.ai")".

### Act 3 — THE COLLISION

Then I tried to verify what 'artlu.ai' actually was. Using the same tool.

## Scene prompt

Wojak-comic scene: the builder at the desk, typing into a chat window. The chat shows 'get_project("artlu.ai")'. Investigative posture, brow furrowed. The MCP icon glows faintly between the chat and the tracker.

### Act 3 — THE COLLISION

Asked for 'artlu.ai.' Got the homepage one back.

## Scene prompt

Chat-UI / terminal mockup: prompt `get_project("artlu.ai")`; response below shows the wrong project (homepage showcase) being returned. Red highlight on the wrong-name region.

### Act 3 — THE COLLISION

Tried the full name — 'homepage showcase — artlu.ai.' Got the homepage one back.

## Scene prompt

Chat-UI / terminal mockup: same get_project but with the full name as the query; same wrong project comes back. Red highlight repeated.

### Act 3 — THE COLLISION

Tried all caps — ARTLU.AI. Same wrong answer.

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 3 — THE COLLISION

Three different ways to ask. Same broken answer. Same matcher under the hood.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 3 — THE COLLISION

So, I realized the tool I was using to verify the results was also relying on this broken matcher.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 3 — THE COLLISION

The thing I was using to check the work — was the same thing that was broken.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 3 — THE COLLISION

So — I stepped outside it.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 3 — THE COLLISION

And what I did next was simple.

## Scene prompt

Wojak-comic scene: builder pulling up a fresh editor pane on the side, deliberate pace.

### Act 3 — THE COLLISION

Wrote a tiny script. Six lines. Talked straight to the database. Read the project by its ID.

## Scene prompt

Code-editor card: six lines of Node.js using firebase-admin. Visible code roughly: `import admin from 'firebase-admin';` / `import key from './service-account.json' assert { type: 'json' };` / `admin.initializeApp({ credential: admin.credential.cert(key) });` / `const db = admin.firestore();` / `const doc = await db.collection('projects').doc('mE3rAaf8IZqxEn4t3Rj4').get();` / `console.log(doc.data());`. Monospace, code-editor theme.

### Act 3 — THE COLLISION

That gave me ground truth. The tool didn't get to lie about it.

## Scene prompt

Terminal-style output: the firebase-admin script's console.log result, showing the REAL artlu.ai project's data — name 'artlu.ai', slug, doc id mE3rAaf8IZqxEn4t3Rj4, etc. A small ✓ stamp on 'ground truth.' Plain terminal aesthetic.

### Act 4 — bumper

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "THE FIX".

### Act 4 — THE FIX

The fix was small. About ten lines.

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 4 — THE FIX

The fix involved a helper function to handle name matching.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 4 — THE FIX

With ground truth, the fix became clear.

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 4 — THE FIX

A helper function. Try an exact name match first. If nothing matches exactly, fall back to substring.

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "findProjectDoc" | "get_project" | "update_project".

### Act 4 — THE FIX

Patched the lookup tool. Patched the update tool. Same helper, used in both places.

## Scene prompt

Concept diagram in wojak-comic style: a single helper labeled 'findProjectDoc' in the center; two arrows fan out from it to two boxes labeled 'get_project' and 'update_project'. Hand-drawn, tidy. No characters.

### Act 4 — THE FIX

Time to test the changes. Rebuilt. Restarted. Asked the tool for 'artlu.ai.' It returned the right one.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 4 — THE FIX

But there was a catch.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged.

### Act 4 — THE FIX

That bug had been in the tool since day one.

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic concept diagram: a hand-drawn calendar with 'today' marked. Below it, the word 'artlu.ai' shown literally fitting inside several longer names that contain it (e.g. '— artlu.ai', 'homepage showcase — artlu.ai'). Visual: 'artlu.ai' is the smaller string sitting inside the bigger ones. Render exactly this text on the frame, hand-lettered in the session style: "today" | "artlu.ai" | "— artlu.ai" | "homepage showcase — artlu.ai".

### Act 4 — THE FIX

It only fired today. Because today was the first time one project's whole name was hiding inside other project names.

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic concept diagram: a hand-drawn page or notebook labeled 'tests' that's mostly blank, with a few entries written but no entry for the substring-collision case. A pencil rests on the page. Quiet, reflective tone. Render exactly this text on the frame, hand-lettered in the session style: "tests".

### Act 4 — THE FIX

The kind of input I never thought to test for — because I'd never written it down as a thing to test for.

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: This scene is being regenerated for a 9:16 portrait mobile video. Render the SAME single-scene composition the visual direction below describes, just framed for a tall vertical canvas instead of widescreen. Do NOT produce a multi-panel comic strip, a sequence of frames, or a before/after time-lapse — render ONE single scene matching the beat. Only if the beat description explicitly names a horizontal side-by-side layout (e.g. 'left panel ... / right panel ...', 'A vs B' compared side-by-side), restack those two panels vertically (top/bottom). For every other beat — single-character scenes, single-prop scenes, diagrams with one focal subject — keep it as ONE scene, recomposed vertically with the subject filling the portrait frame. Keep all declared on_screen_text legible inside the portrait canvas. Existing style anchor applies unchanged. Render exactly this text on the frame, hand-lettered in the session style: "tests".

### Act 4 — THE FIX

Here's the harder thing. I trusted the tool because I wrote it.

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic concept diagram: a hand-drawn page of code with two overlays: the LITERAL line (`includes(...)`) drawn small, and the INTENDED meaning (`exact match`) drawn large above it. The intended version is what the eye reads. Render exactly this text on the frame, hand-lettered in the session style: "what you meant" | "what's on the page".

### Act 4 — THE FIX

When you read your own code, you read what you meant. Not what's on the page.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic scene: builder gesturing outward, a question-mark beside him; small question-form visual.

### Act 4 — THE FIX

But is this a problem that only I have?

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic frame: a wide hand-drawn map / globe sketch with three pins dropping. Quiet, opening-the-aperture tone.

### Act 4 — THE FIX

And it's not just me.

## Scene prompt

Wojak-comic frame: a wide hand-drawn map / globe sketch with three pins dropping. Quiet, opening-the-aperture tone.

### Act 4 — THE FIX

For example, when AWS went down in 2017, their status page kept showing green. Because the status page lived on AWS.

## Scene prompt

News-headline-style card: 'AWS S3 outage, Feb 28 2017 — status dashboard hosted on AWS, kept showing all-green during the outage.' Short paragraph and a screenshot or sketch of the dashboard with green checkmarks while real services are red.

### Act 4 — THE FIX

Similarly, when Crowdstrike pushed a bad update last summer, eight million Windows machines crashed. The fix couldn't reach them — they couldn't boot.

## Scene prompt

News-headline-style card: 'Crowdstrike Falcon update — July 2024 — 8.5M Windows machines bricked into boot loop.' Short paragraph; sketch or screenshot of a Windows blue screen of death (BSOD).

### Act 4 — THE FIX

Ask an AI to grade its own work. The scores go up. Same model. Same blind spots.

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic concept diagram: three small icons stacked — a server tower (AWS), a Windows desktop (Crowdstrike), an AI brain (LLM) — all bent in the same self-referential loop shape. Same shape across three scales. Render exactly this text on the frame, hand-lettered in the session style: "different scales" | "same shape".

### Act 4 — THE FIX

Different scales. Same shape.

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic concept diagram: a literal hand-drawn wooden ruler attempting to measure itself. The ruler is bent into a small loop, one end of it touching its own surface. Quiet, philosophical tone — the metaphor is the entire frame, no other elements. Centered composition.

### Act 4 — THE FIX

You can't measure a ruler with itself.

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic concept diagram: a small hand-drawn tool (a wrench / hammer / box labeled 'tool') with a green check mark coming out of it. But behind the check, the input it received is visibly wrong (a small mismatched shape entering the tool from the left). The mismatch is part of the visual — viewer sees the tool emitting OK while the input is malformed. Render exactly this text on the frame, hand-lettered in the session style: "✓".

### Act 4 — THE FIX

Every tool you build assumes something about what gets fed into it. The day that assumption breaks — the tool will tell you everything's fine.

Model: gpt-image-2-image-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic scene: the builder at the desk, having closed the chat window, now opening a separate plain editor. Quiet, reflective posture — looking at the editor, hand on chin. The MCP icon visible but de-emphasized in the background. Held longer than other Act 4 chunks. Quiet payoff.

### Act 4 — THE FIX

And the only way you find out... is to step outside it.

Model: gpt-image-2-text-to-image

## Scene prompt

Flat-shaded cartoon illustration in the modern wojak-comic style. Characters drawn with exaggerated archetypal features — weary/defeated faces (hollow eyes, gray tones, slouched posture) vs. confident/heroic faces (jawline, cheekbones, steady gaze) depending on the scene. Subtle soft cel-shading, not bold inked outlines. Muted color palette with deliberate contrast between desolate and triumphant scenes. Detailed background environments — offices, dungeons, desks, monitors, paperwork, props render with texture. Dialog bubbles rendered in-frame when characters speak. Reminiscent of Nick Col / virgin-vs-chad meme-comics but painted with care. Composition is comic-strip: one clear subject, readable at small sizes. Scene: Wojak-comic style sign-off card on cream paper. Centered hand-lettered text: 'Built with spoolcast.' Below it, smaller: 'Subscribe for more.' Optional small spoolcast wordmark or icon. No characters. Render exactly this text on the frame, hand-lettered in the session style: "Built with spoolcast." | "Subscribe for more.".

### Act 4 — outro

Built with spoolcast. Subscribe for more.

## Scene prompt

Wojak-comic style sign-off card on cream paper. Centered hand-lettered text: 'Built with spoolcast.' Below it, smaller: 'Subscribe for more.' Optional small spoolcast wordmark or icon. No characters.


## Transcript

I built a tool to update my own projects. I asked it to update one project. But instead of updating the one I asked for, it updated a different one. But when I checked, it told me — in writing — that it had done the right thing. Hmm... Before we dive in — quick context. I run a tracker for my projects. Fifty-eight of them. Each one has a unique identifier — a slug, the short readable bit at the end of a web address. Like 'spoolcast,' or 'tribe.' However, some projects had no slug. A few were stale — I'd renamed the project, the slug never followed. So claude was running through the list, fixing each one. Through a tool I built — an MCP, a bridge that lets claude operate the tracker. Fourteen had no slug. Claude added them. Three were stale. Claude updated those too. With the updates complete, things were moving smoothly. As he went through, he noticed some specific issues. Going great. Routine work. But then things took a turn — claude got to a project literally named 'artlu.ai.' Curious, claude called the update tool. The tool responded. But the response was unexpected. And the response named a completely different project. The one it had actually updated — was the homepage demos grid. Not artlu.ai. This discrepancy caught my attention. The tool's own response gave it away. I reverted the change. Opened the source code. That's when I noticed something strange. So, I knew what to do next. Both tools used the same single line of code. This line of code performed a pure substring match — anything containing the search string would match. Nine of my projects did. Nine matches. But only one came back. I needed to know which one — and why. To find out, I looked into how the system processes matches. It returned the first match it found. Sorted by ID — the random label each project gets when it's saved. Artlu.ai's ID started with M. The wrong project's started with 4. Four sorts before M. So the wrong project always won. Every time. I needed to understand why this was happening. Then I tried to verify what 'artlu.ai' actually was. Using the same tool. Asked for 'artlu.ai.' Got the homepage one back. Tried the full name — 'homepage showcase — artlu.ai.' Got the homepage one back. Tried all caps — ARTLU.AI. Same wrong answer. Three different ways to ask. Same broken answer. Same matcher under the hood. So, I realized the tool I was using to verify the results was also relying on this broken matcher. The thing I was using to check the work — was the same thing that was broken. So — I stepped outside it. And what I did next was simple. Wrote a tiny script. Six lines. Talked straight to the database. Read the project by its ID. That gave me ground truth. The tool didn't get to lie about it. The fix was small. About ten lines. The fix involved a helper function to handle name matching. With ground truth, the fix became clear. A helper function. Try an exact name match first. If nothing matches exactly, fall back to substring. Patched the lookup tool. Patched the update tool. Same helper, used in both places. Time to test the changes. Rebuilt. Restarted. Asked the tool for 'artlu.ai.' It returned the right one. But there was a catch. That bug had been in the tool since day one. It only fired today. Because today was the first time one project's whole name was hiding inside other project names. The kind of input I never thought to test for — because I'd never written it down as a thing to test for. Here's the harder thing. I trusted the tool because I wrote it. When you read your own code, you read what you meant. Not what's on the page. But is this a problem that only I have? And it's not just me. For example, when AWS went down in 2017, their status page kept showing green. Because the status page lived on AWS. Similarly, when Crowdstrike pushed a bad update last summer, eight million Windows machines crashed. The fix couldn't reach them — they couldn't boot. Ask an AI to grade its own work. The scores go up. Same model. Same blind spots. Different scales. Same shape. You can't measure a ruler with itself. Every tool you build assumes something about what gets fed into it. The day that assumption breaks — the tool will tell you everything's fine. And the only way you find out... is to step outside it. Built with spoolcast. Subscribe for more.


## Related tracker entries

[the bug an AI couldn't catch — spoolcast dev log 4](<https://artlu.ai/ai/project/the-bug-an-ai-couldn-t-catch-spoolcast-dev-log-4.md>)


Status and dates describe the published record, not a recent test of an external service. Missing details are not inferred. Public links do not imply an open-source licence or permission to reuse material.

[Directory](<https://artlu.ai/llms.txt>)
