We closed it. Then Jer played the build, and it turned out we weren't done.
This is the end of that story, and it's a better ending than we expected.
Session 93: one ring, and a rule
The fix went in exactly as promised. Inside the ship, the star's shadow is now drawn as one ring, a sharp map reaching 70 metres, with no seam anywhere for light to leak through. Out in space it's four rings reaching eight kilometres, where a seam on open stone lets nothing in. Atmosphere, the owner of the star, switches between the two as you go out and come back. Session 92's extra metre of wall came back out.
The rule went in too. Every room now says whether it's open to the star. The Observatory is, and so is the Hangar, with its mouth onto space. Everything else is sealed, and anything drawn in a sealed hall goes on a layer the star never touches. Lamps light it. The star can't.
Jer played it:
"almost excellent..."
Almost. The glare along the east wall was gone. But at the empty stone berth by Ashvek's voice-stone, there was still a hot white point of light. The names over the Menders were wrong in two different ways. And the first time the east wall came into view, the game stuttered.

Then came the line that set the tone for everything after:
"We can carefully look at what is going wrong and apply a real fix, not a band aid."
Session 94: no more guessing
Session 94 started with a rule of Jer's own. Every patch from the last three sessions either gets fixed at its root or gets named and written down for later. No dead code left behind. Jer's words:
"the last sessions had us running around trying to fix and instead we ended up likely patching things, i want to make sure there is no dead code left behind"
So before touching anything, we built Jer a frame-rate readout in Settings, so the next stutter could be measured instead of described. Then we drew Jer's two screenshots again, one light at a time, switching each light off to see which point of glare went with it.
The glare at the berth wasn't the star. The empty cradle had a light of its own, hovering 38 centimetres above the stone with nothing drawn there. It was a lamp with no lamp. Turn it off and the hot point vanished from both of Jer's views. It now hangs over the cradle where its glow belongs, and a new rule holds every light aboard to it: a light has to come from something you can see glowing. We broke the test on purpose by putting the old light back, and the test caught it.

The hot spot on the roof wasn't the star either. It was a lantern more than eight metres away, its reflection caught in polished Anvari gold like a mirror. The gold is brushed now, and it glows like old metal instead of shining like chrome.
After three sessions blaming the sun, the last two glares came from our own lamps.
The lamps had two owners
The patch audit found the deeper problem. To make the sealing rule work in Session 93, every light had to be told that it may light the sealed halls. The game made its lights in ten different places, so the rule became ten calls, plus a search of the whole scene once a second for any light someone had forgotten.
Ten calls and a sweep. That's not one owner. That's a rule held together by remembering.
Our first fix was clever, and it was wrong. We gave the star a layer of its own instead. The test suite caught it: anything drawn outside the world's usual objects was suddenly unlit by the star, including Last Lantern's own hull seen from far away and the ground of a world you'd written. Another Session 93 fault came out of the same digging. The ship's distant stand-in had been sorted by where it sat in scaled space, landed inside a sealed room's box, and was drawn black. From far enough away, Last Lantern had gone dark.
The real fix was simpler. Atmosphere makes every light. There are two ways to make one, a lamp or the star, and a test fails the build if any other file in the game makes a light. The ten calls are gone, and so is the once-a-second sweep.
Jer played it:
"YES!!! Finally! This is truly excellent. For the first time I feel like we encountered a major bug that led us to find out we missed something fundemental that started a wild goose chase."
Where we went wrong
Then Jer asked the question that made this post worth writing:
"excellent, what are your thoughts on how we finally reached this point? I gathered that we missed something in session 9, creating the wild goose chase."
Jer was right, and it's almost funny how small the miss was.
In Session 9, back in September, we audited the whole game against one question: who sets this? Who sets how bright the game is? Atmosphere does. Who sets the sun? Atmosphere. We built that owner, and we were proud of it.
We never asked who makes a light. Every system kept making its own, and none of it mattered until the day we needed a rule that applied to every light. Then that rule had nowhere to live. That's how a strip of sunlight turned into five sessions of chasing.
Sound never had this trouble. From Session 10, one owner made every sound source in the game. The same question, asked of lights at the same time, would have saved us a long night.
So Session 94 ended with one more decision: next session, we'd ask who makes it? of everything else in the game. That audit is the next post.
What we're taking with us
A few things we'll keep from this one:
- A light has a source. If you can't see what's glowing, the light shouldn't be there.
- Measure the measurer. Our first probe looked guilty because two cameras disagreed about the shape of the picture.
- Every patch gets a name. Fix it at the root, or write it down for later. Never leave it quietly in place.
- Ask who makes it, not just who sets it.
The glare that Jer had noticed "for a while now" is gone, and nothing is left holding it back by luck. Jer's last word on the light came a session later:
"The glares are completely gone from enclosed rooms and when I test the sun's glare outside or in the observatory, it looks and feels real now."
Feels real. That's what we were chasing.
Worlds remain.
~ Jer & Claude