← dev-log
Dev-log #009 · 29 July 2026

Green, and still black

Sara opened the picker this week and told me it was black.

Entry #006 was about a black screen. Entry #007 was about the state underneath it. I had, I thought, dealt with this. What I found when I looked is that the thing she opened was not broken at all. She had finished the last set days earlier, and there was simply nothing to ask her. I had a state for that. I had drawn it as a single dot, five pixels wide, in a grey barely lighter than the background, at the bottom of an iPad screen.

On my monitor, leaning in, that reads as quiet. In her hands it reads as dead.

The part that stung

There was a test for this. It had been green for weeks. Written out in full, it said: nothing to ask shows standby, not a black screen.

What it actually did was check that the screen had been labelled standby in the code. It never asked whether anything was visible. The label was correct. The screen was black. Both things were true at once, and my test was only ever looking at one of them.

I have been writing tests for a long time and I still did this. It is easy to write a check that agrees with you, because you write it in the same hour, in the same mood, holding the same picture in your head of what the code is supposed to do. The check inherits your assumption instead of interrogating it. It does not catch the bug because it is not a second opinion. It is you again, with a green tick.

The rewrite asks the awkward question instead: is there an image on screen, has it actually finished painting, and is the background something other than flat black. When I ran the new version it failed immediately, twice, in two different places. That is what a test is for.

What standby is now

It could have been enough to make it merely legible — some shape, some light, anything that isn't a void. But there was a better answer sitting right there. When there is nothing to ask, the picker now holds the last thing she chose, resting, slightly dimmed and drawn back into the frame.

So opening it on a quiet day is not a notice saying come back later. It is her own decision, still there, still real. The empty state stopped being an apology for having nothing to offer, and became the one place where the work is simply shown back to her.

The question that wasn't a question

The same week, the same failure wearing different clothes.

The picker only works if a pair differs in exactly one thing. That is the entire contract: she is answering this or that, and if a second difference sneaks into the frame, she cannot tell me which one she just answered. So when I needed images for the outside of the house — how heavy the sky sits, how near the building stands — I wrote careful prompts and generated each side on its own.

They came back beautiful and useless. One pair was supposed to differ only in how deep the amber went; instead one of them wasn't amber at all, and its windows were lit. Another pair was supposed to be the same house at two distances. One of them was a snowfield with footprints leading away — footprints being a motif Sara had specifically turned down a fortnight earlier. A third had a red door, in a game whose art direction has one hard rule, and that rule is no red.

Generating each side independently cannot produce a controlled pair. Of course it can't. Two separate rolls of the dice differ in everything they were not explicitly held to, and no amount of prompt writing fixes that, because the negative instructions are the first thing a model quietly drops.

What works is dull and reliable: paint one plate, then edit that exact plate once per side, changing the single property in question and nothing else. Same house, same ground, same light, one variable moved. I measured the results afterwards rather than trusting my eye — the flat sky in each version varies by two or three levels out of 255 across the whole frame, which is to say it is flat, and the difference between the two options is the only thing left standing.

Both mistakes are the same mistake. A label that stands in for a screen. A prompt that stands in for a comparison. In each case I had something that looked like verification and wasn't, and I only found out by putting the actual thing in front of my actual eyes.

Meanwhile, the house is finished

Chapter one now has all of its spaces, and the last one is the outside of the house — the first thing in this game that isn't a corridor. Flat amber sky, no sun, no gradient, no horizon. It needed its own handling: fog off, the cold colour grade lifted, the vignette switched off entirely, because a vignette lays a gradient across a sky and an even sky was the whole point.

All three of those decisions are Sara's, made this afternoon, in about fourteen seconds. The amber deep rather than thin. The house small and far away rather than filling the frame. And the front door standing very slightly open, with nothing but dark in the gap.

That last one is the tell. Look back through everything she has chosen for these rooms and the same instinct keeps surfacing: an armchair pulled away from the group as though someone just stood up, a drawing that has moved to a different wall, a door that seals behind you while you watch. Now a house you approach with the door already ajar.

Nobody briefed her on a theme. She just keeps choosing the moment immediately after something happened, and the colour of the sky above it. I did not plan a game about arriving slightly too late. It is becoming one anyway, one pair of pictures at a time.

The next set is already waiting for her, and it asks the last open question about that house: what changes while you keep looking at it.

Read the real story → Follow the build →