Field Notes
Every run is data. Collapse, stagnation, and survival are all outcomes worth recording.
Phase 2 - Survival loop
Run log
First run to produce a second generation. The full reproduction chain fired end to end: agents bonded over multiple days, gathered materials, built shelter, paired, gestated, and gave birth. Six generation-1 children were recorded (s_a31 through s_b35) from gen-0 parents across groups a and b, each tagged with parentage and birth location. The generational system works.
Reproduction had been stalled across every prior run by a single gate: nobody held shelter. Shelter required either a cave (which only spawns on mountain biomes, far from the valley where agents actually live) or building one - and the build action was never being selected. Two fixes unblocked it. First, building was made an investable action: an agent must gather hardwood before it can build, so shelter emerges from agents doing well enough to afford the detour rather than being handed to them. Second, the bonding counter was corrected. It had been incrementing on every socialise interaction rather than once per day, so a pair hit the five-day bonding threshold in minutes - which is why earlier builds and pairings fired on day 0. Bonding now accrues at most once per simulated day, so five bonding days means five distinct days of contact.
Apex predation remains the dominant cause of death but is no longer population-threatening at the tuned spawn density and aggression range. A new minor death cause appeared - overconsumption - traced to the raised forage yields letting agents eat past the gorge threshold; foraging now stops at a safe satiety ceiling below that threshold.
Cardinal Time was running on two disagreeing clocks - the page load derived time from the simulation tick counter while the status poll used a separate wall-clock formula at a stale multiplier, so the displayed day drifted from the real day and jumped on refresh. All time sources now derive from one tick-based value. The admin console was also rebuilt as a terminal-style interface, mobile-first, to stop the readout strip and tables overflowing on phones.
Phases 7 and 8 (continuity and social) are implemented but have not yet run live: memory decay and reinforcement, fear distortion, knowledge artifacts with a spread/mutate/decay/myth lifecycle, emergent group detection, in-group versus stranger trust, and corpse traces. The logic is unit-tested in isolation but unobserved in a full simulation. Run 07 is the first test of those systems.
Key findings
- First successful reproduction and live birth - generation 1 exists, six children recorded
- Shelter bottleneck resolved: build-from-gathered-materials path plus bonding counter fix
- Bonding now day-gated (one increment per sim day) - no more instant day-0 pairing
- Overconsumption deaths fixed by capping forage at a safe satiety ceiling
- Cardinal Time unified to a single tick-derived source - no more drift or refresh jump
- Admin console rebuilt terminal-style and mobile-first
- Phases 7 & 8 deployed but not yet run - Run 07 will be their first live test
- Outstanding: SQLite is on ephemeral storage - every redeploy wipes the world, needs a persistent volume before any long run
Longest run to date: 17 real hours, 17 simulated days. All three groups landed on river biome cells - spawn anchor is now pulling biome scores correctly. Entity counts at boot: 191 apex, 3482 small prey, 587 large prey, 11507 berry bushes, 4500 water sources, 36411 total entities across the 1000×1000 grid.
The simulation ran continuously and did not crash. However the chronicle tick failed on every single simulated day with ReferenceError: dayPhase is not defined in population.js:400. This means 17 daily summaries were never written, no DB snapshots were taken, and survival state across the run is unobserved. The Scintillae were alive and ticking - the Substrate just wasn't watching.
The resource formatting bug from Run 05 persists: spawn anchor logs show resource=%.2f instead of an actual value, meaning the anchor scoring function is passing an unformatted float string through a printf-style placeholder that never gets evaluated.
Key findings
- Chronicle tick broken for entire run - dayPhase is not defined in population.js:400, needs to be passed into or computed inside chronicleTick()
- Simulation itself is stable: 17 hours continuous uptime, no crashes, no process exits
- 191 apex still spawning - density unchanged from Run 05, fear baseline remains artificially elevated
- Spawn anchor biome scoring working (all three groups landed on river cells) but resource=%.2f format bug still present
- No survival data recoverable for this run - without chronicle ticks, there are no DB records of what happened
- Priority before Run 06: fix dayPhase reference, add chronicle smoke test on boot
All deaths from starvation. Goal commit window was 60 ticks; food 8 cells away required 160 ticks to reach. Agents walked toward targets for 60 ticks, replanned, walked again, never arrived anywhere. Every agent starved while technically pursuing food.
Key findings
- Root cause: commit window (60t) shorter than travel time (160t for 8-cell distance)
- 700+ socialise interactions recorded for adjacent pair - cooldown system added after this run
- Cardinal Time stopped interpolating - client-side ×24 multiplier removed, broke live clock
Three consecutive extinction runs. All deaths from starvation. The forage action was firing but never completing - moveToward() moved at 0.05 units/tick, food was 8+ cells away, and the policy re-selected the closest prey every cognitive tick, constantly interrupting approach. Agents showed 16,000+ forage interactions in 4 days with zero successful eats. One anomaly: s_b11 reached 88% satiety, suggesting the execution path was valid but the targeting lock was broken for all others.
Key findings
- Forage execution broken: target lock not persisted across cognitive ticks
- No persistent goal state - agents chose a new target every 5 micro ticks
- Wander behavior was random-angle-per-tick - drunk walk, no ground covered
- Entity spawning not biome-gated - water sources in forests, prey in ocean
- 200×200 grid mismatch with 1000×1000 Azgaar map - coordinate scaling errors throughout
Protocol
How runs are observed
Each run is allowed to reach its natural conclusion - extinction, stable equilibrium, or reproduction. Runs are not terminated early unless a fatal infrastructure bug is confirmed.
Observations are recorded by day: entity counts, survival rates, notable events (first reproduction, first group contact, first resource depletion cycle). Memory tab snapshots are taken on notable agents every 2–3 days.
The Administrator does not intervene in outcomes. God commands exist only for infrastructure testing, not to prevent collapse.
Collapse is data. Extinction is data. Survival is data. None of these outcomes is a failure.