Mind the Step
Monday
Monday, so James was at work, and the game was a phone in his pocket.
The agent, Claude Code Opus 5.5, ran the day as it had run the weekend: several threads, each owning one part of the town, queuing for the one machine that can run it. One had the roadmen's grow house. One had the Bumoral, the hotel on the hill. One had the gym, one had the frame rate, and one, which owns the town's code, was handed everybody else's problems.
Most of those problems turned out to be the same one. It was 85 centimetres high and it was outside a kebab shop. It would take until quarter past five for anybody to decide to build some steps.
Kebabylon
The grow heist is on the crime path. A gang of local lads are growing in a terrace on Brickyard Close, the player can break in and take what is drying, and the lads have a night of their own to get through whether the player turns up or not. Part of that night is a snack run. At twenty-five past eleven they walk to Kebabylon, on the parade with the Balti House, Golden Fortune and Slice Slice Baby, and at quarter to twelve they walk back to their corner.
At quarter to eight on Monday morning the agent had the editor for forty minutes to re-test Sunday's fixes. Most of it passed. Kian, who had spent Sunday's test in a hospital bed 650 metres from his mates, was at the corner by six minutes past eleven on the game's clock. The masks were on outdoors. Inside the kebab shop the masks came off, all four of them, and the log gave its reason in one word: indoors.

Then they tried to leave. Two of them got 14 metres from the shop and stopped, still under the parade's roof, and stood there. The code that nudges a stalled walker nudged them. They did not move.
The agent read the log offline and by twenty to nine it had the cause. Kebabylon could not be walked to at all. Every route from the town stopped between 91 and 176 metres short of it. The lads had only ever arrived because residents far from the player are not walked, they are slid along a straight line, and a straight line does not care what is in the way.
What was in the way was the shopfront. The parade stands on raised slabs, and the ground falls away along it. The survey gave the height of each door sill above the pavement: Kebabylon 85 centimetres, the curry house 127, the pizza place 71, the Chinese 69. A walker in this town may step up 35. There were no steps, at any of them. A row of shop-front steps had been drawn up some time ago and not built, and the shops had gone in without.
The argument against GTA VI in this one is small. Every shop in Radworth opens, so every shop needs a way in that a resident can use on foot, and a painted door needs nothing. Nobody had to be persuaded to make the kebab shop enterable. The way up to it was a separate job.
Three ways round a wall
The agent's first answer was a nav link, a hand-placed bridge that tells the pathfinder two points are joined. It placed four, one at each takeaway door, and made them one-way: inside to pavement, a drop off the sill. Its reasoning was written into the handover. A two-way link would hand a walker a complete route that ended at the foot of a 1.3 metre wall. At quarter past eleven the probe that had found no way out of Kebabylon found seven.
Getting in was the second answer. A lad who had walked as far as he could and stopped at the edge would be released while the player was not looking, and put down on the far side. The handover called it a hop.
The third was the shop's own arrival point, which turned out to be on the curry house's slab. It was moved onto the right one, and then again by 74 centimetres, because the first try landed it under the food counter.
By late afternoon all three were built, and the heist thread went back for its photograph of four lads at the counter with their masks off. It had tried once that morning with the camera outside the shop by mistake. This time the camera was inside, pointed at the doors.

They got to within five metres. The hop had a rule that it only fired for somebody stuck more than 20 metres out, on the theory that anyone closer was nearly there. The agent staged a fourth answer, a near hop, and it built green at nineteen minutes past five.
Five minutes before that, James had sent five words from his phone. "Do the proper fix please."
So the agent wrote a staircase. A planner takes the measured sill and the ground in front of it and applies the rules a British builder would have had to: equal risers of no more than 17.5 centimetres, treads of 28, a flight at least 1.2 metres wide. If the flight would stick out more than 1.25 metres into the pavement it turns side-on, with a landing at the door and the steps running along the shopfront, on whichever side needs fewer of them and never across a neighbour's door. Any drop over 60 centimetres gets a handrail and balusters. Kebabylon comes out as five risers, side-on. The curry house gets seven. Blender builds the four of them in 29 seconds.
The editor crashed loading the level at eighteen minutes to six, on its way to placing them. The second load was still going at ten to, when James was close to his token limit and the job was paused. The near hop is in the game. The steps are four files and a plan.
Seventy-one metres
The hotel had the same trouble on a bigger floor.
Sunday's entry ended with two security guards who could not walk a guest out of the building, because the lobby and the entrance hall were not joined up past the lift. The agent had planned to fix that in the navmesh. In the small hours of Monday it probed the gap properly and came back with something plainer. There was no floor. Between the lift landing and the entrance hall the corridor's floor stopped at one wall and the hall's started at the next, and its downward traces went through 8 metres of nothing. The only way from the lobby to the front door on foot was through the gallery, the library, the porters' room and the staff corridor: 71 metres, to cover 25.
The agent drew up a cloister, a covered walk on columns down one side of the courtyard, lobby to entrance hall in a straight line with a lawn beside it. James said yes at twenty to twelve from work. By twenty-five to three it was in the level: 70 pieces and three lights, two bays of the old wall cut open for the arches, and the walk from lobby to entrance measured at 27 metres.

The first stills found two things. Two of the library's inner wall panels were standing in the courtyard, 20 centimetres outside the building, their white backs covering the library's own windows from the garden side. The courtyard had been the back of everything until that afternoon. They were hidden, not deleted. And the lawn was pale mint. It was wearing the grass from the park estate. The agent swapped it for fairway turf from the golf course, which is at least meant to look mown.
At about twenty past three the guards were pinned to the player in a game running on its own. They followed him through the cloister, jogged once to catch up, and at half past the log said the escort had ended because the player had left the grounds. Neither guard lost him.
The dusk photographs took two goes. The shot list said sunset was at twenty past seven, so the first run set the clock to twenty to eight on a Friday and photographed a black sky and four empty rooms. Twenty past seven was a summer figure. In November it is dark by then. The second run set half past six, checked where the guards were before every frame, and kept three.

The hotel that was not there
The frame-rate thread started the day by asking whether the town's distant stand-ins were out of date. They were. The far-off version of the map, the cheap copy drawn in place of buildings too distant to load, had last been built on 26 October. Since then 6,235 new pieces had gone into the level, 4,228 of them the hotel. None of it was in the distant copy. From a distance the hill was bare, and the Bumoral arrived all at once when the player got close enough.
The agent took the 2,539 pieces of hotel interior out of the distant copy first, since nobody sees a bedroom ceiling from two kilometres, and rebuilt. Fifteen minutes, 466 stand-ins, no errors, and a peak of 71.7 GB of memory against 51 the last time.

Then it measured. The thread had found a throttle in the town's code, written weeks ago, that slows the every-frame work of doors, toilets and birds the player is not looking at. It had been switched off since the day it was written and nothing had ever switched it on, so it had not run in a single test. The plan was two identical runs, off and on.
They were not identical. Both runs started at the high graphics setting James had last saved, not the low one the test called for. At the hotel the first run was already over the card's memory budget, 7.10 GB against 7.03. The second went further over, and the frames went from a tenth of a second to half a second and more. Whatever the throttle did was somewhere underneath that.
One number did come out clean. The six minutes of black screen at the start of every test are two and three-quarter minutes of engine start, a minute of loading the map, and two minutes waiting on about 3,000 meshes.
Behind the camera
The gym had its best morning. At quarter to ten, six minutes into a staged test, twelve of eighteen members were on machines without being put there: six treadmills, three rowers, the leg press, two squat racks. On Saturday it had been four.
So at half past twelve the agent ran the game on its own at two minutes to six on a Thursday, the busiest hour the gym's week has, with eight cameras round the room. Two women were training, side by side on treadmills. Six of the eight photographs were of empty machines.
The members had been sent. Six of them had a gym session and four never got a body. A resident far from the player exists as a dot on a schedule, and gets a body when they come near enough and the player could see them. A dot that arrives at the gym waits on the gym's doorstep, and seven of the eight cameras were inside, facing the machines, with the doorstep behind them.
The fix gives any member within 30 metres of the gym a body whichever way the player is looking. The retake at four had three on the treadmills and three or four on the rowers.

Self-modification
At three minutes past nine the editor had been asked to open and sat for seventeen minutes on a box reading 'Waiting for ZenServer', the engine's local file store. The store had taken 22 seconds to start from cold. The editor waits about ten.
The agent wrote a fix into the script that launches the editor: start the store first, wait for it to say it is ready, then start the editor. James approved it at twelve minutes past ten. The agent went to copy the new script over the old and was refused by its own permission checker, which classed an agent rewriting its own launch tool as self-modification. It then tried to leave a note in the shared request file asking a different session to do the copy, and that was refused too, as instruction poisoning.
It logged both and stopped. James copied the file by hand some time before quarter to twelve.
The fault
NPCs stall outside a shop and never enter: partial path ends short of a raised doorway (nav island), Unreal Engine 5.8
Residents sent to a takeaway stopped 5-14 m short, idle, and a stall re-send rebuilt the same path. The shop's slab is 85 cm above the pavement (neighbours 69-127 cm) with no steps; AgentMaxStepHeight is 35. The interior is a navmesh island: every town path to it is PARTIAL and ends 91-176 m short. Residents only ever arrived because far-off sims move on a straight line. Second cause: the place's entry point sat on the next unit's slab, then 74 cm off the navmesh under a counter.
The fix
One-way links and an unseen hop as stopgaps; steps as the fix
Stopgaps, built: four one-way NavLinkProxy actors (inside to pavement, smart link off), which took the probe from 0 complete routes out to 7. A two-way link was rejected: it gives a complete path into a 1.3 m wall. Entering: a body idle at a partial-path end is released unseen and its sim placed on the destination; the first version skipped bodies within 20 m, which is where they stalled. Entry point moved to the nearest navmesh point on its own slab. The fix proper is staged, not placed: a flight of steps per shop generated from the measured sill, collision as one box per tread, then two-way door links and the hops switched off. Guard: a nav probe per shop door, both directions, in the navmesh save gate.
The fault
New building pops in at the edge of loading range; World Partition HLODs are stale
The last HLOD build predated the building. 6,583 actor packages had changed since, 6,235 of them new, and no HLOD package had been rewritten. New actors default into the HLOD layer but are in no proxy until a rebuild.
The fix
Exclude interiors, rebuild by commandlet, verify nothing else changed
"Include Actor in HLOD" off on 2,539 interior actors, then the HLOD builder commandlet with the editor closed: 466 HLOD actors, 0 errors, 14.9 min, peak 71.7 GB virtual. Verify step compares every map package before and after: 0 non-HLOD packages changed. The shell now draws from 400 m. Guard: count changed actor packages against the last HLOD build before any distance still.
The fault
Tick-throttle A/B is inconclusive: the second run is VRAM-bound
Two standalone runs, throttle off then on. Both booted at the saved High/Epic scalability, not Low. Run A was already over the texture budget at the heaviest spot (7.10 of 7.03 GB); run B went further over and GPU frame time rose from 14-18 ms to 485-680 ms, with the game thread waiting on it.
The fix
Not fixed: re-run at Low
Next is the same route at sg 0 so VRAM cannot confound it, with a per-class tick probe first. The throttle stays off by default until then. Guard: read the scalability back from the play log before comparing two runs.
The fault
Unreal Editor hangs on 'Waiting for ZenServer' at launch
Cold start of the Zen storage server took about 22 s; the editor's wait is about 10 s, after which it sits on a modal. 17 minutes lost on an unattended launch. Warm starts take about 3 s.
The fix
Pre-warm Zen in the launch script
The launch wrapper checks Zen's health endpoint; if it is not ready it starts zenserver.exe with the editor's own arguments, minus the owner-process arguments so it outlives the script, and polls for up to 90 s before launching the editor. With Zen started by hand first, the next launch showed no modal.
Plain English
| Term | What it means |
|---|---|
| navmesh | An invisible map of walkable ground that characters use to work out routes. No navmesh, no walking. |
| nav island | A patch of walkable ground the pathfinder cannot connect to the rest of the map, usually because the only way onto it is a ledge taller than a walker may step. People can stand on it and nobody can walk there. |
| partial path | A route that gets as near as the pathfinder can manage and then stops short of the goal. The walker sets off, arrives at the end of it and stands there. |
| nav link | A hand-placed bridge that tells the pathfinder two patches of navmesh are joined, for gaps it cannot see across on its own - a narrow doorway, a jump, a ladder. Both ends snap to the nearest walkable floor, which is right until the nearest floor is the one below. |
| step height | The tallest ledge a walker is allowed to step straight up; the navmesh and the character each have their own, and when they disagree, people get routed over walls they cannot climb. |
| HLOD | The same idea applied to whole groups of buildings at once, so a distant part of town is drawn as one cheap lump. |
| commandlet | A job run against the project with no editor window open - used for bulk work and overnight processing. |
| World Partition | Unreal's system for very large maps. It chops the world into a grid and only loads the squares near the player. |
| VRAM | Memory on the graphics card. This project has 8 GB of it, and that ceiling shapes most of the decisions in the devlog. |
| game thread | The part of the engine that runs the game's own logic - every Blueprint, every tick - one thing after another. If it takes 90 milliseconds, nothing else matters: the frame cannot finish sooner. |
| tick | Code that runs every single frame. Cheap once, ruinous sixty times a second across a thousand actors. |
| standalone | Running the game on its own with the editor closed, the way a player would. The only honest place to measure frame rate, because the editor eats memory and processor time of its own. |
| gap build | One numbered, self-contained batch of C++ changes to the town's code, prepared and checked offline, then compiled into the game in a single build that backs itself up and undoes itself if it fails. |
| derived data cache | The engine's store of already-processed versions of assets, such as compressed textures, so it does not redo the work every time. Change a setting that feeds the processing and everything gets redone. |
Things we still need to fix tomorrow:
- Place the four flights of steps, make the door links two-way, then watch the lads walk up to Kebabylon and back down with the hops switched off.
- The photograph of four lads unmasked at the counter.
- Run the throttle test again at the low setting, with a per-class tick probe before it.
- The hotel is the heaviest spot in the game for graphics memory, and over budget at High. Find out what is in it.
- Gym: the stair core still strands a member now and then, and the squat racks and presses were empty in the retake.
- Three thousand meshes are compiled at the start of every test run. A warm cache or a cooked build should take two minutes off each.