Development journal

Making Vandrel with AI, including the parts that go wrong.

Vandrel is a colony simulation you can inhabit. I use Codex and ChatGPT to coordinate agents, write and inspect code, change the rules of the project, and generally get more done than I could alone. I make the decisions, reject bad work, and remain responsible for what ships. This is the running account, not the cleaned-up version written later.

Last night I committed a rule that sounds obvious: when somebody turns three branches into a firewood bundle, the result has to go somewhere the player can see. The action system could already describe outputs, but that did not settle whether the result belonged in a hidden inventory, in a hand, at a work site, or loose in the world. The new carrier rule makes that destination part of the action definition. CavemanMod now says that bundling firewood consumes three branches from the camp supply pile and creates one persistent bundle on supported ground. A separate action can target that exact world item and move it into the right hand. Knapped tools use the same generic contract differently: their output goes straight into a declared equipment slot, and the transaction fails instead of eating the materials when that slot is already occupied.

The accepted firewood run started from the ordinary saved/default `Main` path with no save override. It used native camera movement, walking, context cycling and `E`, reached the supply pile, completed the bundle action, found one new ground entity, selected it, and picked it up. The monitored corridor returned zero and recorded no application-error window, Windows event or crash dump. I committed the platform rule, the Caveman content and the acceptance coverage in my name. Git does not say who typed each patch, so I am not going to invent that attribution. For this journal pass, Codex traced the claim through the exact commits, the clean committed harness, the runtime report and these two pictures, and excluded a later cooking run because it happened after more uncommitted work.

This is still a narrow proof. It does not show another villager planning the job, hauling the bundle, feeding it into the fire, saving and loading it, or using it as fuel. The new raw and cooked meat models are committed too, but their later hearth sequence is not part of this accepted evidence. The camp itself still needs presentation work: the granite outcrop crowds the interaction area, the debug labels overlap, and the bundle is easy to miss against the ground. The useful change is that the missing object is now a visible problem I can judge instead of an inventory number I have to trust.

*Ground output — September 7 ordinary-`Main` acceptance capture: the new bundle is a targetable world item beside the cook fire; the oversized outcrop and diagnostic overlays are still plainly visible.*

*Recovered output — September 7 ordinary-`Main` acceptance capture: the same bundle has been picked up into the player’s right hand; this does not prove hauling, fuel use or persistence across save/load.*

A monitored ordinary-Main acceptance view of the opening camp showing a newly crafted firewood bundle on the ground beside the player, cook fire, sleeping mats and crowded granite outcrop.
A monitored ordinary-Main acceptance view of the same camp showing the player holding the recovered firewood bundle in the right hand beside the cook fire and crowded granite outcrop.

On September 1 I committed a basket loop that begins with something visible in the world instead of an item appearing in a menu. The accepted run used ordinary `Main` with real movement, targeting and controls. The player found visible grass, wove a basket, picked that exact basket up in the left hand, gathered two berries from a live plant with the fitted `PickFruitStand` action, walked back to camp, placed the loaded basket on supported ground, saw the berry-filled version while it was placed, and picked up the same instance with the same two berries still inside. Moving a basket model between a hand and the ground was not enough. The identity and cargo ledger now move together between the equipped item and the persistent world item instead of becoming an anonymous inventory count or a second hidden copy. The commits are authored in my name, but they do not record who typed each implementation patch, so I am not assigning that work from guesswork.

The failed runs are part of why this took so long. One version treated every possible grass patch as if it had to stay alive as a permanent simulation entity and blew through the bounded projection budget. Another kept the nearby usable grass behind completion of the whole site's cosmetic dressing build. A later run successfully wove the basket and gathered the berries, then lost the final camp route when a newly spawned carcass blocked the target. The committed package corrected the sparse resident projection, separated local usable occupancy from distant cosmetic completion, and kept the last transfer on the same real-input route rather than teleporting the player or injecting the action. The final report passed the complete player-driven route, and the monitored corridor recorded no Windows crash evidence. It still does not prove unloading the basket, saving and loading it, another actor eating from it, or GOAP multi-action planning. For this journal pass, Codex traced those claims through the exact commit range, report, contracts and images. These three pictures are phase captures from the September 1 ordinary-`Main` acceptance run, not unscripted gameplay.

*Weave — September 1 acceptance capture: the player is squatting beside a rendered grass patch while the fitted weaving action is halfway through.*

*Forage — September 1 acceptance capture: the woven basket is in the left hand while two berries are gathered from a live plant.*

*Placed — September 1 ordinary-`Main` acceptance inspection-camera capture: the same loaded basket is on the camp ground and visibly shows its berry contents before it is picked up again.*

A monitored ordinary-Main acceptance view showing the player squatting beside visible grass while the Weave Gathering Basket action is in progress.
A monitored ordinary-Main acceptance view showing the player holding the woven basket beside a berry plant while the Forage Berries action is in progress.
A monitored ordinary-Main acceptance inspection-camera view showing the loaded gathering basket placed on the camp ground with its berry-filled visual visible.

Yesterday evening I committed the first bounded piece of a much larger terrain-streaming change. The previous correction made detailed collision follow every active actor instead of only the player, but that still left the dangerous question of when a terrain chunk counts as real ground. The new rule is deliberately stricter: being requested, attached to the scene, visible, or absent from a work queue is not physical readiness. A replacement chunk has to match the current terrain generation, the affecting voxel-edit revision and the current residency plan, then survive a later physics step before it can become physical ground. The old collision stays in place until that happens and crosses another physics step before it is removed. Blocking trees, rocks and other resource objects have to match the same generation and exact footprint set. The actor motor checks both the column it occupies and the column it is about to enter; if either one is not ready, it stops at the boundary and keeps a short, bounded request alive so the missing ground can be prefetched. It does not walk into empty space and get teleported back afterward.

This also separates direct movement from routed movement. A player-controlled body needs current physical ground. An autonomous route additionally needs the matching Godot navigation generation, and an edited column needs the exact replacement navigation revision after Godot has applied it to the map. Codex traced the committed state machine, motor gate, blocker signature and tests for this journal pass. The commits are authored in my name, but they do not say who typed each implementation patch, so I am not inventing that attribution. The new Main-based ground smoke is designed to walk 32 metres forward and back across at least three columns, reverse immediately without waiting for the residency plan to settle, and reject any missed floor contact, collision void, snapback or unbounded plan growth. Its result and screenshot were not committed, and I did not run Godot again for the journal. What is committed is the first Stage 1 state-machine slice inside the current finite selected site. Global near-terrain sampling, navigation across an arbitrary moving tile set, multi-kilometre travel, save migration, medium/far handoff and coarse off-screen simulation are still later work.

Today I committed another correction to the local terrain. The selected site already inherited the world map's broad slopes and drainage, but the smaller ground shapes were still so blended that the place could read as one smooth surface. The river had a worse version of the same problem: each coarse map reach was carved and drawn as a straight connection between two endpoints, and the visible water simply interpolated between their heights. The new terrain adds deterministic broad knolls and sparse exposed bedrock outside the settlement's clear core. Each river reach now has one bounded curved centerline shared by the terrain carve, build and spawn exclusions, ecology distance and visible water. The water height is sampled against the actual ground along that curve and is only allowed to stay level or go downhill, so an interior low point cannot be hidden by a ribbon that climbs again toward the next endpoint.

Curving the river exposed another boundary. A reach outside the old 40-metre query halo can bend far enough to affect the playable area, so the committed projection now includes the 40-metre physical influence plus up to 24 metres of permitted centerline displacement. Codex traced those relationships and the before-and-after implementation for this journal pass. The commit is authored in my name, but it does not record who typed each implementation patch, so I am not assigning that work from guesswork. It also contains a Main-based visual runner that would save a river view, an overview and a local-landform view, but none of those images or its result were committed. I did not run Godot again for the journal, and I am not claiming that the new terrain has passed visual acceptance from source code alone. The contract still leaves tributary junction caps, shoreline treatment, moving water, production water materials, lakes and medium- or far-distance continuity unfinished.

Today I committed a correction to the terrain streamer I described two weeks ago. The detailed terrain columns were still organized around the player's focus. That is enough to keep the player's patch solid, but it is not enough for autonomous actors that can move somewhere else. The new code puts every active actor's current terrain column and a one-chunk guard into the desired collision set. Before the terrain relocation hold releases, actors, furniture and resource nodes are now staged against the same exact physical terrain samples. If an actor loses floor contact while moving, it is rolled back to the last position Godot actually proved was on the floor and has to regain floor contact before its position can be written back to simulation.

One of those fixes was still ordered wrong. The first actor-aware streaming plan added the player's detail columns before the actor floors. The next commit moved every actor center to the front, ahead of player detail and the outer guard rings, because keeping a floor in the plan does not help a newly restored or spawned actor if the floor is still waiting to be built. Codex traced that sequence for this journal pass and checked the final ordering and playable-world bounds. The commits are authored in my name, but they do not record who typed each implementation change, so I am not going to pretend they do. There is no committed runtime result or authentic screenshot in this range. The changed ordinary-route smoke describes how to measure autonomous progress and facing after terrain release, but its result is not part of the evidence I reviewed. This is a better rule for who terrain collision has to follow, not proof that NPC navigation is finished in ordinary Main.

I committed a platform boundary today for something the world generator had been blurring: placing a tree, rock or other terrain dressing is not the same as creating a resource that the simulation can save and change. The terrain view can now hand an accepted deterministic placement to simulation through an explicit resource definition. Simulation gives that placement a stable identity, owns its active, depleted, regrowing or removed state, and restores the same grounded transform instead of letting the visual generator quietly make another copy. The ordinary resource planner and the terrain generator are not allowed to place the same definition. Once simulation accepts a promoted placement, the temporary dressing visual is discarded, and World3D renders the simulation-owned resource view. This is less glamorous than adding another tree, but without it a generated object can look like part of the world while remaining outside the rules that make the world persistent.

The startup boundary had to change with it. Collision-declaring and resource-backed dressing is now planned before the terrain hold can release, while purely cosmetic instances are still allowed to fill in afterward. Codex checked the exact committed range for this journal pass and found that no CavemanMod world-content entry declares the new promotion field yet, so I am not claiming that any current CavemanMod terrain-dressing tree or rock has been promoted into a harvestable resource in ordinary play. There is also no committed screenshot that could prove persistence, depletion or restoration, and I am not attaching a decorative one. What exists now is the reusable handoff and its tests for stable placement, save restoration, removal tombstones and companion resources. The mod still has to opt specific content into it, and that consumer path still needs a real runtime result.

Last night I directed the local intake of four Meshy camp-wood props. Codex did the scale audit and independent release checks, and the committed CavemanMod change put the approved models into actual content roles: weathered branches and stacked firewood became a persistent Wood Supply Pile, charred timber was added to the cook fire's burning and coals states, and a bundle of sticks became a right-hand heavy-carry item. The tests bind all four consumer copies to their exact release hashes and keep these props out of the ecology and resource-node catalogs. That part is useful, but it is not the part I want to blur into a success story.

The same commit added a user visual-review queue, and it says all 36 consumer-integrated asset releases are still unconfirmed by me. Automated imports, tests, screenshots and visible launches do not set `user_seen`; only an explicit statement from me does. That distinction matters here because the recorded ordinary saved/default `Main` run showed the new wood pile grounded and instantiated the charred timber, but the same run failed an unrelated heavy-carry return check. Its screenshot and JSON are referenced by the committed queue but are not committed evidence, so I am not putting an image here. Codex can move assets through custody, check their dimensions, wire them into the mod and collect runtime evidence. I still have to look at the result and decide whether it belongs. These four props are integrated, not accepted, and the heavy-carry path still needs a clean result.

Yesterday's showcase made the Stone Hatchet, Bone Club and Flint Spear choose one-handed, two-handed and spear-ready attack routes, but the three item records still pointed at the same old `Chop` clip. The routing was more specific than the motion it reached. In the source change I committed today, each weapon finally got a different motion: a right-hand slash for the hatchet, a heavy two-handed swing for the club and a forward thrust for the spear. The two imported animation releases were isolated from their source folders and prior import cache, then reviewed at eight fixed phases on the female average, male average and feral bodies before their three accepted clips were collected into CavemanMod's shared combat library and loaded by all 21 registered humanoid wrappers.

For this journal pass, Codex traced those claims from the previous `Chop` values through the release evidence, body wrappers and final item mappings instead of treating the new names as proof. The three pictures here are the actual female-body phase sheets from that review. They deliberately contain no weapon, so they prove that the body motion retargets coherently, not that the hatchet, club or spear sits correctly in the hands throughout the strike. The spear review also records open hands as a limitation of the 24-bone rig. None of this proves hit timing, damage, contact or ordinary `Main`; the items now call distinct motions, but they still need a real combat pass with the weapons attached.

Eight fixed phases of the female average Caveman body performing the accepted one-handed slash motion without a weapon attached.
Eight fixed phases of the female average Caveman body performing the accepted two-handed heavy swing without a weapon attached.
Eight fixed phases of the female average Caveman body performing the accepted spear-thrust motion without a spear attached.

Yesterday I had Codex put CavemanMod's current characters, biome dressing and equippable items into one catalog-driven showcase. The point was not to make another version of the game. It was to stop checking a character in one room, a plant in another and an item only through data and tests, then assuming they would make sense together. The first pass still hid too much: it could leave a missing animation looking like a frozen previous pose, had no ground-line view and did not show the items on a body. Codex added those views while keeping the showcase on the production catalogs and wrappers and the production equipment-attachment path, while using its own inspection lighting. Once the registered content was together, four understory plants were buried too deeply, the right-hand weapon transforms were split between item data and the item scenes, the gathering basket looked wrong in the right hand, and both teen bodies were still adult scale.

I had those corrections made in the content the game actually uses: explicit soil-line lifts for the four plants, one canonical equipped frame for each item scene, a left-hand-only basket, separate child and teen scale bounds, and melee animation routing for one-handed, two-handed and spear-ready postures. Codex also changed the item view so a weapon has to be inspected through its declared attack motion instead of merely hanging from an idle hand. For this journal pass, Codex traced each claim through the exact commit range instead of treating the showcase itself as proof. It still is not normal Main: it does not load a save, generate the playable world, run navigation or prove that any of this appears correctly during ordinary play. The pictures attached here were taken afterward from three clean monitored showcase runs: the complete character room, the adjacent biome exhibits and the stone-hatchet attack view. They show what the showcase itself displays, not what normal Main proves. What I have now is a faster way to catch content that is valid one piece at a time and wrong when it stands next to the rest.

The Caveman content showcase displaying all 22 registered character and species visuals together on one inspection platform.
Adjacent biome exhibit tiles displaying registered Caveman trees, rocks, shrubs and ground dressing under the same inspection lighting.
A Caveman body replaying the Stone Hatchet attack pose while colored axes mark the exact right-hand equipment socket.

This morning I wrote that the controlled roster review did not prove all 21 Caveman bodies would appear correctly in ordinary play. A later lighting commit gave that limitation a concrete shape. Only the two average bodies had the shared script and reviewed external materials that made their Meshy textures answer to Vandrel's lighting. The other 19 wrappers could use the normalized humanoid skeleton and the accepted animation libraries without going through the same lighting and shadow treatment. The roster images proved that those bodies moved coherently in that review room. They did not prove that the material setup belonged under the game's lights.

I committed the material rule in the shared body script and attached it to every production wrapper. When a Meshy body stores its color atlas as an emission texture, the script now uses that texture as ordinary albedo, turns emission off, restores per-pixel shading and lets the body receive and cast shadows. The two average bodies can still use their reviewed external materials, and the catalog test now enforces the lit, shadowed path for all 21 registered humanoids alongside the animation and import gates. For this journal pass, Codex compared the catalog paths before and after that commit and verified the two-versus-19 split instead of trusting the commit title. That closes the mismatch in the wrappers; it does not prove all 21 look right in ordinary play. There is no committed ordinary-play capture for this change, so I am not reusing the roster screenshots or calling the lighting finished.

Yesterday I had Codex try the female athletic Meshy body with the animations that came embedded in it. Ordinary idle and squat looked coherent, which made the body seem usable, but both sleep aliases rolled it upside down or onto its back and several work and locomotion clips carried visible root movement. When Codex switched it to the curated animation libraries that already worked on the two average bodies, every sampled clip left it in a T-pose. The problem was not another bad animation library. This body had reached the consumer without Godot renaming its 24 bones to the normalized humanoid skeleton, applying the Rest Fixer settings and disabling the embedded animations. Codex applied the existing humanoid BoneMap and the same curated idle, run, sleep and work samples then moved coherently. I made that import sequence a mandatory gate before another humanoid can be wrapped, registered or called ready. A plausible static pose or a good screenshot cannot waive it.

Codex then applied that gate to the other 18 bodies. The first roster gallery failed before it could review anything because its output and camera setup were wrong. The second loaded and animated every body, but clipped the ones at the edges, so I treated it as inconclusive rather than rejecting the characters. After the camera correction, all 18 exposed a 24-bone skeleton under the same normalized contract and resolved the accepted shared animation tracks. Fifteen review images covered idle, run, entering sleep, sleeping and squatting in three groups without visible deformation. I accepted their registration with the three bodies already through the gate, bringing the Caveman humanoid catalog to 21 bodies and expanding its age and body-type choices. That is still a roster and a controlled visual review, not proof that all 21 have appeared correctly in ordinary play or that every animation fits every body. The useful change is that a new character now has to pass the import path that makes shared motion possible before its appearance can persuade me that it belongs in the game.

Last night I went back to the sleep failure I had just written about. I had Codex bring a Meshy side-lying motion into the two active Caveman bodies and connect it to the real hide-mat action. The first version looked like progress: there was a sleeping loop, then an authored stand-to-side-lying transition, and the checks said both aliases were present. The problem was that the first smoke test put the actor into the animation state directly. When Codex replaced that shortcut with a real Main run that placed a hide mat, requested the sleep action and followed one action-execution ID from the action request through the enter phase into the loop, the original Sleep Normally conversion visibly mutilated the female body. Position tracks that were harmless on the source rig were not harmless when reused on the other body. That loop had to be rejected after I had already accepted it.

Codex kept the stand-to-side-lying transition, removed the non-root position tracks and stopped applying the hand-added hip roll. Instead of trying to rescue the bad sleeping source, it holds the transition's final coherent pose as a three-second loop. The monitored Main run then passed on the female and male bodies through the real action request, with no recorded Godot crash evidence. I accepted that narrower result. The Cavemen can now enter the hide-mat sleep action and stay in a coherent sleeping pose, but they still have no cough, stir or roll-over events; those need exact source files and sleep-state wiring. This is not the sleep system finished. It is one rejected clip, one working transition and a test that finally measures what the game is actually doing.

Today I had Codex stop counting accepted animation files and make them answer to things the Cavemen actually do. I decided that passing an isolated three-body review was not enough. The first ordinary-play target was simple: three accepted idle clips should cycle while an actor stays in the default idle action. The first monitored run stayed on Idle9 three times in a row. The clips and selector were present, but the game had removed the default-idle action ID before it reached animation because that same ID is hidden from the overhead status text, and repeated executions of one action had no identity at that boundary. Codex split the raw animation action from the status shown to the player, forwarded an execution ID, and the next run played Idle6, Idle7 and Idle9 in consecutive 12-second periods with no recorded crash evidence.

That failure changed what I am willing to call an imported animation. Codex brought in a Meshy library of six reactions that passed the monitored review on the female, male and feral bodies, then wired motions to existing owners: AngryStomp for venting frustration and rage, CrouchBackstep for cowering, FallingDown for unconscious, DyingBackward for dead, and HeadPain for the target of a real melee hit. From a separate work library, KneelingFixing now serves knapping and ground construction. StandDodge remains in the reaction library because there is no dodge action. The accepted kneel transition still has no reviewed action-phase contract. Sleep still falls back to idle because the Godot conversion changes a plausible side-lying source into an implausible raised-limb pose. Even the new work motion will not normally appear at the opening because the actors start without a knapping workstone or the required materials. The useful result is not that the animation list got longer. It is that accepted files, ordinary gameplay and unfinished conversion work are now three different claims, and the game records which one is actually true.

After the last entry I had Codex return to the same flight coordinate, and in the new picture I found another boundary hiding in the ground. Codex had replaced the procedural triangle grass with the actual Meshy Golden Harvest Grass release and added Rooted Fern Majesty and Rooted Harvest, so the opening area could use real Caveman plants. Out where I had flown, though, the count was still zero. The near-ground-cover map ended with the local playable site. This was not another problem I could fix by turning up tree density or asking for more landmark attempts; the plants themselves needed a separate way to follow the camera beyond that map.

Codex's first medium-distance version spread a fixed 2,048-plant budget across the whole ring and grounded each cluster from a coarse parent sample. Independent review rejected it because places I actually traveled through could still be bare, while plants on slopes could float or disappear into the ground. Codex replaced that version with one that keeps an 88-metre square around the camera, moves it after 44 metres of travel, and seats each plant on the exact triangle the terrain renderer produced. At the same coordinate, Codex's monitored run showed 2,000 instances from the three Meshy plant families; 24 distributed checks were within 0.0000009313 metres of the rendered surface, and it produced no crash evidence. The attached screenshot is a real improvement over the empty carpet I showed yesterday, but it is not a finished landscape. The trees are still sparse, there are no far-tree assets, and this new layer is visual only: it does not create forage, collision, ecology or persistence. It fixes the ground around a traveling player without pretending the rest of the world is done.

The Vandrel player at the same distant flight coordinate, now standing in a dense pool of real Caveman grass and rooted plants while sparse trees remain visible on the ridges.

Today I had Codex test five more Meshy character motions instead of assuming that a clean import meant they were usable. The result was two passing cells out of ten on the two active bodies. One kneel-to-stand motion worked on both. Both side-lying motions drove the characters through the ground until they almost disappeared, and the two stand-up motions launched their feet as much as 4.9 metres into the air. The attached contact sheet is the female review. It is not subtle. Codex rejected the batch instead of registering any of it in the game.

The stranger failure came after the third-body canary capture. Its wrapper returned zero, which is the answer automation normally treats as success, and then I saw Windows report a native Godot write fault. That means the capture cannot be used even where its frames look coherent. I stopped further automated Godot launches, and Codex changed the review corridor so it watches for the application-error dialog, keeps watching for five seconds after the process exits, saves the matching Windows crash evidence, and rejects a crash-marked run even when the wrapper says zero. This does not fix the engine crash or give Vandrel a usable sleep motion. The canary capture is quarantined, the launch hold remains in force, and the only candidate that survived the active-body review still needs a clean canary result before it can even be considered for the external asset pipeline.

Eight-phase review rows for five Meshy motions on the female character; the kneel-to-stand motion stays grounded, two side-lying motions disappear below the surface, and two stand-up motions throw the body into the air.

Yesterday I flew the player to (105.9, 14.4, -634.7) because I wanted to see what Vandrel looked like beyond the local-detail area. Codex first read that screenshot as proof that the playable boundary had failed. I had to stop that diagnosis: I had flown there on purpose. Once it was removed, the picture split into three different problems owned by three different systems—the local voxel ground, the visual-only long-range terrain, and Caveman's plants and props. Codex reproduced the exact location and ordinary camera view in a finite diagnostic, then tried blending the medium terrain straight back to the regional elevation. That made nearly vertical slabs. A second version limited only the medium ring, and independent review rejected it because the seam could just move outward. The accepted version gives both medium and far terrain the same bounded-slope rule and changes the stretched near texture before it covers kilometer-scale triangles.

That still did not make the scene good. The distant tree placeholders were 22-to-40-metre oval canopy blobs that looked like floating rocks, so I rejected them and had Codex turn them off. It then added a provider-facing landscape-distance contract and used the real Caveman tree mesh for 78 medium-distance instances along the route. The attached screenshot is the accepted result: no giant handoff slab, no placeholder blobs, and actual trees. It is also plainly sparse. There are no far-tree assets yet, the grass is still simple card art even after fixing its upside-down taper, and several visible rocks and the spring are stand-ins waiting on properly approved replacements. This pass did not finish the landscape. It stopped the AI from treating every ugly thing in one screenshot as the same bug.

The Vandrel player at the intentionally inspected flight coordinate, with continuous visual terrain and sparse real Caveman trees visible around him.

On August 13 I wrote that one Meshy-native character had come back from quarantine. That was wrong. I had rejected the first replacement batch after the bodies deformed in normal play, then accepted the female adult-average body after a lighter review. This week I had Codex trace the complete source chain instead of trying another animation fix. It found that 21 Meshy-native character releases had been assembled from the same three model-specific animation archives even though their own release records said they were not compatible with a shared animation pool. We had already learned why: two bodies can share the same 24 bone names and hierarchy while having different rest rotations and proportions. The old Foundry had recorded that warning and suspended the first retarget processor after severe deformation, then later work ignored the warning, transferred position, rotation and scale across every bone, checked only three representative clips from a 61-clip product, and let gameplay select releases that still said they were not runtime accepted.

I am not calling those characters repaired again. I went back to the authenticated Meshy packages and had Codex build a clean-room inventory: 19 newly downloaded rig-task packages plus the two Primal packages already on hand, with 82 exact payload records and 41 native animation files. The new rule is that a motion stays bound to the body, rest pose, skin and provider task it came from until a specific source-to-target result passes both technical and visual review. That produces 2,037 exact body-and-motion checks, which is a large obligation but also prevents two different files called walk from hiding behind the same label. This is only custody evidence and a processing plan. No replacement has reached the Foundry, the Asset Library or Caveman, the blocked average-body rows remain in the catalog because removing them before a valid replacement would break startup, and the Godot launch hold means there is no new runtime acceptance. The useful result is not a better character yet. It is a precise account of how we repeated a known mistake and a testable route for not repeating it a third time.

Last night the recovered Vandrel files finally became the actual project. The current rules now make C:\Users\vandr\Projects\vandrel the only authoritative checkout and treat the old C:\Dev repositories as evidence, not places to keep working. The recovered platform, the configured game, Caveman, the tests and the governing documents are split into separate commits, the usable AI history is indexed, and bounded project roles are restored so one primary task stays responsible instead of making me carry messages between a swarm of agents. The index also records nine corrupt conversation files and warns that old claims marked complete still have to be proved against the current repository. A commit is better than a loose recovery tree, but it is not runtime acceptance.

That distinction mattered almost immediately. Repeated Godot 4.6.3 crashes were landing in .NET's coreclr.dll 9.0.19, and the evidence suggests that the .NET 8 plugin was rolling forward into .NET 9. The committed repair added a process-local roll-forward guard to 96 launch wrappers and a static check that was supposed to inventory them. During the review for this entry, a separate Codex agent found 31 more launch-capable wrappers in the committed tree that were outside that list, so the test was giving a cleaner answer than the repository deserved. The project now targets Godot 4.7.2 and .NET 10, and there is a guarded updater for the stable Godot installation. I have not accepted a runtime launch, and we have not proved that the upgrade fixes every crash. The automation hold remains until the launch paths receive independent review and I authorize one finite diagnostic. So the project is canonical and committed again, but ordinary play, the visuals and a long list of recovered completion claims are still unverified.

The computer I was building Vandrel on failed, and for a few days the project was less a game than a pile of repositories, recovered files, old Codex conversations and half-finished work spread across several machines. I tried to use Codex to orchestrate the recovery as an experiment. It was an extremely difficult experiment, probably much harder than it needed to be, with the process repeatedly getting tangled in permissions, file sharing, sandbox limits and uncertainty about what had actually moved. In the end I had to do most of the recovery myself anyway. I would not recommend that anybody try to recover a failed computer this way. Codex was useful later for searching the recovered material and rebuilding context from it, including finding this journal and restoring it as its own project, but that is different from saying the Codex-driven recovery worked well.

These are two views of the character problem I was in the middle of when the machine failed. The isolated reviewer can cycle through bodies, animations and equipment, which is useful for finding broken skinning or an absurd motion without waiting for a colony to produce the right circumstances. The other picture is the ordinary game, where the characters have to stand in the world, carry things, hunt, work and still look like they belong there. Those views had started to disagree: a body could pass the reviewer and remain unacceptable in play. One repaired female body had made it back from quarantine, but the rest of the Meshy-native roster had not earned that decision, several animation choices were still temporary, and the pictured opening was still full of debug furniture. Recovering the files did not finish any of that, and recovering enough context to resume should not be mistaken for an endorsement of the recovery method. It only means I can continue from the actual unresolved problem instead of letting the computer failure turn a bad visual judgment into forgotten history.

The Vandrel character review screen showing a grey skulker apeman playing an animation beside its profile and inventory.
An in-game Vandrel scene showing the player character and another caveman near a deer in the generated world.

Today I was working on the other half of the startup stall. Replacing a thousand grass objects helped, but the relief renderer was still trying to build far too much of the world before the player could do anything. Codex changed that into a streamed presentation: a small set of detailed terrain columns stays around the player, coarser coverage appears farther out, and the detailed set moves as the player moves. That sounds obvious, but the first implementations kept finding ways to lie. An old terrain worker could finish after a newer one and put obsolete objects back into the scene. An edit outside the loaded area could disappear when the player arrived. A replacement that happened to produce no visible mesh could also throw away the collision it was supposed to preserve. Those were not performance details. They were ways for the displayed world and the actual world to become different places.

After two correction rounds, superseded workers cancel, terrain edits invalidate the right streamed pieces, and an edited chunk outside the current detail area enters and leaves through the same production path as everything else. In the current runtime proof, local relief appeared in 99 milliseconds, coarse coverage in 124 milliseconds, an edited distant chunk arrived with collision, the player stood on it, and the system returned to 25 detailed columns with no queued work or hole in the ground. I also corrected the trees, which had somehow reached roughly twenty to sixty meters tall; they are back around two to six meters. This is a much more credible world renderer, but the proof still has four old missing-material warnings, and the test took its final grass sample after deliberately teleporting six chunks away, so I am not claiming that the grass recovered correctly when it came back. The world remains the same 384-meter-radius site. We are streaming what gets detailed, not quietly making the game smaller.

Last night I let one of the Meshy-native characters back into the game, but only one. After I rejected the whole batch, Codex traced part of the visual damage to the export rule itself: the Foundry was keeping four bone influences per vertex, which is a normal enough limit until the source body actually depends on more than four. The repaired path can keep eight, proves that the final file still has its skin, joints, bind matrices, geometry and texture, and refuses to pretend that any weight above eight was preserved. We ran that repair on the female adult-average body as a canary instead of promoting the roster again. Even reviewing the canary exposed another problem, because the paperdoll preview was rebuilding pieces of the character at the wrong time and did not understand some older animation names. Codex had to fix the reviewer before its judgment was worth anything.

The repaired body passed the lightweight in-game review and now replaces the older Mixamo version for that one profile. Then two of the animation choices immediately looked wrong. The clip labeled as a walk was a poor walk in practice, and the supposedly sensible heavy-hammer animation was ridiculous for gathering flint without the missing hammer and context. I replaced the walk with a more conventional clip and the hammer motion with a temporary squat-and-ground-work approximation. That is exactly why I do not want the asset pipeline deciding that semantic similarity equals visual acceptance. The canary is usable enough to continue, but the squat is explicitly temporary, tool and carrying clips still need their actual props, the exporter still has a bounded eight-weight limit, and the other rejected bodies remain rejected until they go through the same repair and actual visual review.

Earlier today I wrote that I had replaced Takka and Brukk with the new Meshy-native rigs. That was true in the narrow technical sense and wrong as a statement about the game. The transfer tests passed, the isolated paperdoll could play the clips, and Codex had enough evidence to show that the H4 orientation correction worked. Then I looked at the characters in normal play and rejected them. A character is not accepted because the skeleton loads and sixty-one animations can be selected from a test panel. The actual bodies and poses still looked bad enough that I did not want them in the opening or quietly spreading through the demographic roster while the tests continued congratulating themselves.

I quarantined those releases and put the opening and selectable character profiles back on the last accepted Mixamo-rigged bodies. The native releases are still preserved in the asset pipeline, because deleting failed work would only make it harder to diagnose and repair, but the runtime no longer calls them playable. This also means the earlier entry needs to be read as an account of a transfer that worked, not a character replacement that survived visual review. The useful technical work is still there: the Foundry can move animation between these rigs, and the isolated reviewer can show exactly what it produced. What remains is the part the automated checks did not settle—getting bodies, skinning, hands and low poses that I am actually willing to put in front of a player.

This afternoon I was trying to work out why the opening takes so long to become a game. The logs finally separated two different problems that had been getting lumped together: the relief renderer was building more than a million vertices and allocating roughly 855 megabytes, while the terrain-dressing pass was spending about 47 seconds placing 1,539 individual objects, 1,070 of which were little grass tufts. The grass itself was three flat box-shaped blades, with no wind or reaction to the player, and it did not even start near enough to look like a carpet. Codex replaced that path with a fixed set of GPU-instanced chunks centered on the camera. The chunks are recycled as the player moves, the blades move in layered wind, and they bend and recover around the player without creating a separate game object for every clump.

The current normal-game proof is much denser and runs at a reasonable frame rate, but I do not think the grass looks finished. The near field is still visibly procedural, the join with the sparse distant dressing needs work, and the screenshot is full of debug furniture because this is still an engineering build. More important, taking a thousand grass objects out of startup does not fix the separate relief renderer, and I made the rule explicit that the AI is not allowed to solve that by shrinking the playable world. It can reduce rendering distance, simulation radius, update frequency or what stays loaded, but the distant terrain still has to remain part of the same world and regain detail when somebody approaches it. The grass is now a bounded rendering problem instead of a thousand tiny scene objects. The world-streaming problem is what comes next.

The current Vandrel opening in normal play, with the new dense grass carpet around the player and the older sparse terrain dressing beyond it.

The deer processing chain now does the thing I wanted from the beginning: when the doe dies, it remains an actor. It does not disappear and turn into a generic resource node. Codex first built the useful general rule underneath this, where a dead actor can hold separate processing channels with their own order and depletion state. Caveman then uses that rule to dress the deer once for one raw hide, after which it can be butchered once for three meat and two bones. The meat-and-bone channel is not eligible until the hide channel is empty, and the body remains present with both channels exhausted, so later systems can still know that this particular animal existed and died here.

The latest normal-game run reaches the whole sequence and keeps the same dead actor through both jobs. That matters because I want bodies to remain part of the world eventually: they may be examined, moved, buried, resurrected or used by some mod I have not thought of. Converting them into anonymous loot would have made the current task simpler and the larger game worse. The present result is still fairly literal. Dressing is a ground-work animation, butchering is a kneeling repair animation, the animal does not yet show a properly skinned intermediate body, and the exhausted corpse does not have all of the decay or disposal behavior it will need. I also added an F1 control sheet because none of this helps if a person cannot find the controls, although that sheet will need to keep changing as the game does. So the data and action order are finally right; the physical work still looks like a first representation of the idea.

I replaced the two Mixamo characters in the opening with the Meshy characters I actually want to use, and the supposedly easy part turned out not to be easy. A direct animation transfer looked broken. Then Codex tried the obvious same-skeleton copy, which also looked broken, because matching joint names and hierarchy did not mean the files had the same rest and container bases. The correction had to happen in the Foundry: H4 now works out the global orientation difference and normalizes the animation onto the target rig instead of assuming that two similar skeletons inhabit the same coordinate system.

That got Takka and Brukk onto the Meshy-native rigs with the full animation set, but it did not make every pose good. The squat is crude, the hands still carry some of the source rig's bad orientation and weighting, and one bow walk looked like a transfer failure until an isolated review showed that the animation was intact and the missing bow plus the old hand pose were the real problem. I had Codex build that isolated paperdoll reviewer because testing animation inside the running simulation was nonsense: the actor would wander off, terrain could interfere with grounding, and the evidence became a test of several systems at once. The same reviewer now covers the larger character roster. Humans have the broad age and build range; apemen and goblins currently have only the adult-average bodies that actually exist, and the absent combinations stay visible but disabled rather than quietly substituting a different person. There are more usable bodies now, but the roster is deliberately sparse and the hands and low poses still need real work.

An isolated Vandrel character-animation reviewer showing a goblin body and the actual animation and equipment controls used to inspect it.

I had to correct the way I was using AI again, because the project rules were starting to create more work than the product. Rules that were supposed to keep agents from damaging one another's changes had gradually turned into repeated permission handbacks, complete test-ladder restarts, file hashes, process checks and evidence packages for work that had already been demonstrated. Codex and the other agents were following those rules quite conscientiously, which was the problem: each local precaution made sense, but together they were building a bureaucracy around every correction.

I changed the rules so ordinary work can continue under durable authority, related changes get reviewed as one package, and a failed check sends the work back to the relevant part of the ladder instead of the beginning of the universe. Full suites, source-absence checks, independent reviewers, runtime launches and hash proofs still exist, but an agent now has to name the risk that makes one necessary. I also made the reports separate an actual product failure from a broken test harness, a machine problem or some unrelated old failure. This should reduce a lot of wasted motion. It will not remove the need for judgment, and I am sure there are still rules that looked prudent when I wrote them and are now mostly getting in the way. The useful part is that the AI management system is itself something I can inspect and change instead of pretending that more procedure automatically means more control.

I spent a ridiculous amount of time getting one deer to die correctly. The first version started so fast that there was no useful opening state to look at. Then the doe would freeze in a running pose. Then it died by rotating the whole model like somebody had knocked over a cardboard cutout. The label and the actor state did not agree about whether it was a deer or a corpse, parts of it went through the ground, and the hunting and butchering were technically happening without being readable to a person watching the game. Codex could keep producing screenshots and logs that proved some narrow condition, but I kept rejecting them because they did not prove that a normal player would see a coherent sequence in the real game.

We ended up correcting the startup timing, the idle and death transitions, the grounding and the corpse presentation, then slowing the work down enough that the approach, strike, death, dressing and butchering can actually be seen. The more important correction was underneath that: the hunt has to have a live reason to happen, the worker has to remain eligible for the action when it completes, and an old action payload cannot be replayed against a body that has already been processed. That required changing the action rules instead of arranging a prettier test. It works much better now, but the animation is still crude in places and this is one deer in one small chain. It is not yet a hunting system I would call finished.

Today the thing I had to fix was not terrain or cavemen. It was the AI management system. I was looking at the DevMaster task, which is supposed to manage the whole Vandrel program, and realized it had become a very diligent manager of whatever it had touched most recently. It had spent so much time coordinating the Caveman extraction that its status reports were starting to treat that lane as the project. Meanwhile there was a volumetric-terrain prototype, a large unresolved integration tree in Vandrel, an Asset Foundry candidate, the provider workflow, the asset library and several other active dependencies that either got one line or disappeared entirely. This is a fairly ordinary failure when you use AI to manage AI: the model follows the local momentum of the conversation and produces a coherent account of the part directly in front of it, which is not the same thing as maintaining control of the whole program. I corrected it and made DevMaster rebuild its control view from the actual tasks and repositories instead of continuing the story it had been telling itself.

There is now one register that names every active workstream, its current evidence and the next gate that would make it count. It also says something I apparently need to keep saying to the agents: a clean commit from an isolated worker is not integrated product acceptance. The terrain prototype has passing focused tests but no production renderer, collision, navigation or persistence. The new Caveman package still lacks the source-absent proof that would show it works as a delivered mod. The Foundry rock candidate has test evidence but is not approved or in the game. The main Vandrel tree still has a large amount of overlapping work that has to be integrated in a controlled order. This new register does not solve any of those things. What it does is make it harder for a confident AI summary to quietly replace the actual state of the project, which is one of the stranger management problems I have encountered here and probably one of the more important ones to get right.

This morning I said Caveman was becoming a standalone mod. By this afternoon the next audit had found sixty-two places where that was not really true. The files were under the mod directory, but characters still reached into private game scripts, trees and grass still borrowed scenes and textures from another provider, held axes and baskets still carried a host equipment script, and the first external package did not even contain a valid packaged mod. Codex tried a `public` folder as the answer, but that mostly put a respectable label on the same dependency: concrete caveman heads and construction pieces are content, not public API, and tiny wrapper classes still depend on whatever they wrap. I rejected that version. I also rejected the external-pack handoff because its logs already showed missing scripts, textures and models, and because its idea of trust was essentially that anything under `res://public` must be safe. That is not a mod boundary. It is a hole with a nicer name.

I changed the governing rule while DevMaster coordinated the repair agents: a playable Vandrel build has exactly one root gameplay pack. Caveman is the default root pack, an add-on can depend on it, and a total conversion can replace it, but being first-party does not give Caveman private access to the platform. The accepted repairs gave the vegetation its own scenes and textures, made the character heads and construction visuals self-contained, removed the unused host script from the four held-item scenes, and moved the five genuinely generic character resource types into a real public API without duplicating them. The reviewers rejected several bad test versions along the way, and one proposed round of extra test work was stopped because it had turned into validation theater. The private reach-through count is now six instead of sixty-two, all in animation setup and loading. That is substantial, but the packaged external mod is still not accepted, those six references still need a proper contract, and the newest resource move has not yet been loaded through Godot itself. So the boundary is much less fictional than it was this morning, but I still cannot hand somebody a Caveman package and honestly say the job is done.

Last night I was trying to get the Caveman material out of the game itself and into an actual mod, which sounds like moving some files until you look at how many parts of the game had quietly learned where those files lived. Codex first had to make the runtime prove that it was running the current build, because a passing test is not much use if Godot has picked up an old DLL. Once that was fixed, the real Main scene ran for 120 ticks with the player, Takka and Brukk and no fatal shutdown errors. Then I made the rule explicit: the Vandrel platform owns the simulation and the mod interfaces, while Caveman owns cavemen, berry bushes, stone tools, furniture, animations and the rest of that particular world. The first extraction pass failed its focused tests because several fixtures still expected Caveman assets under the main game directory. After those were fixed, the full suite found seven more assumptions of the same kind. Moving the assets also broke old saved resource paths, so Codex added a bounded alias table that lets existing saves find the relocated objects without giving every mod permission to wander through the game's files.

The accepted version moved more than a thousand files and now boots the real Main scene both with no mods at all and with Caveman enabled. That is the first convincing proof that Caveman is becoming a mod instead of a theme welded onto Vandrel. It is not the end of the separation. There is already more uncommitted work around Caveman's world-content catalog, and the current GUI run still needs human visual judgment; a headless boot can prove that the resources load, but it cannot tell me that a gnarled tree is in a sensible place or that the opening looks good. The useful part for future modders is that the pain is forcing the boundary to become real: content can supply characters, objects and rules through declared paths, but it does not get to reach back into the platform and make up its own private integration scheme.

Today I got past the part where the right three people appear and then stand there. The production run now starts with the player, Takka and Brukk, no prefab camp, and four nearby resources. Takka chose to explore and Brukk chose to forage berries through GOAP, so the Utility AI repair worked and the test now proves the actors are actually making decisions. Then Brukk hit the next broken boundary: every time he tried to finish foraging, the C# action system rejected it because the reservation was no longer live. That happened over and over, which is useful because it means the test is no longer dying during startup and is finally finding an actual game-rule problem. Codex spent the rest of the day pulling duplicated scoring and mod-loading rules out of the runtime and making the real Main scene publish definitions through one path. Those changes have a lot of tests, but I have not rerun this complete opening proof since the latest fixes, and Godot still leaks objects when it shuts down. So the opening now has the right people and working decision-making, but Brukk cannot reliably finish the first useful job. That is closer to a game, but it is still a failed run.

Today I was trying to prove that the navigation data Vandrel is actually using stays connected when I rebuild the same four terrain tiles in a different order. Codex got the real gather-order run all the way through and the paths still crossed the tile boundaries in every direction I checked, but the wrapper failed anyway because Godot left objects behind when it shut down. That is not the same thing as broken navigation, but I do not want the test quietly calling it a pass either. I tightened the rules so it now checks nine routes, all 24 possible tile orders, and the actual server map before and after the rebuild, and I changed the cleanup code so the navigation result and the shutdown failure are reported separately. The navigation part now works for this test. The complete run still is not clean, because the object leak remains, so I am still chasing that instead of pretending the green part of the result proves the whole thing is done.

A development proof comparing disconnected navigation paths with a connected rebuilt path.

I'm keeping this journal because I eventually want to release Vandrel into early access, and I think people should be able to see how the thing is actually getting made instead of hearing a cleaned-up story after the fact. A lot of this project is me telling Codex what I want, watching it hand work to other AI agents, finding out that one of my rules was vague or contradicted another rule, and then changing the rules and trying again. Sometimes the AI gets something useful in a few minutes. Sometimes it takes fifty tries and I eventually realize that I have been asking for the wrong thing. I want to leave that part in here. If somebody is thinking about playing Vandrel, making a mod, or using AI on a project of their own, they should be able to see what worked, what did not, and where I am still trying to figure it out. I also want feedback to come back to an actual person. I am using a lot of AI, but I am still the one deciding what this is supposed to be, rejecting the bad results, changing the rules, and taking responsibility when I break something.

Today I was working on getting the Foundry to process several candidate assets at once. The bad version of this was that one broken asset could kill the entire batch, which meant I would wait for the AI to run a bunch of work and then get almost nothing useful back. I changed it so each asset can fail on its own, and I added timing and result information so I can tell the difference between one bad candidate and a problem with the whole pipeline. It works for the batch I tested, and that is a lot less irritating. It does not mean the assets are good, though. The Foundry is still much better at static objects than characters, and it can now produce a complete batch of ugly or wrong things more efficiently, which is useful but not exactly victory.

A stylized bronze axe processed by the Vandrel asset pipeline.

Today I finally got the second chest all the way through the Foundry and into Vandrel without losing track of where it came from or which version I actually looked at. That has been more annoying than it sounds, because the AI can make an asset, validate the files, and put it in the game while still blurring together three separate questions: is it technically valid, did I actually review this version, and do I want it in Vandrel? For this one object, those pieces now line up. I am happy with that. It still only proves the path for one static object. I have not shown that it scales, and the character pipeline is still a much larger mess.

An open wood-and-metal chest after it passed through the Foundry and into Vandrel.

Today I was working on what happens when one terrain tile changes. The easy thing was to rebuild the navigation for that tile and everything around it, but that kept replacing things that had not actually changed. I finally got it to rebuild only the tile I edited, keep the neighboring tile intact, and still let a route cross from one to the other. That looks right in the small test. It took a bunch of work to get the rules about identity and rebuilding to stop fighting each other. I still only have a two-tile test, though. I have not shown that it survives a large rebuild or the stranger terrain changes the game will eventually allow, so this is working, not solved.

What this is for

I want prospective players, modders, and people trying to build with AI to be able to follow the actual work and tell me when I have got something wrong. Vandrel is intended to become a general-purpose framework that other people can modify and add to, not a sealed box.