Files
Soul_Game/FINDINGS.md
T
mmcghen 721acbd1aa South town MVP: world sim, seasons, granary, contrast test + findings
Godot 4.7 C# world simulation per SPEC.md (with 2026-07-21 amendments).
15 NPCs, 5-state machine, demand-driven work, soul-imprint triad data
model, seasons with winter frost, granary, need-based gift economy,
selfish-soul contrast wiring, daily/per-villager/gift CSV logging.

FINDINGS.md documents the four soak experiments: the dead paradise,
the buffers winning, the emergent hungry gap, and the contrast test
proving the four-town thesis (and that selfishness wins until the
soul-consequence layer exists).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 12:55:30 -04:00

108 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WorldSim — Soak Experiment Findings (July 2026)
Four long-run experiments against the South (Nature) town MVP. Each run:
15 NPCs, 256×256 world, seed 12345, ~240 simulated days (2 years) at
accelerated speed. Data: `soak_stats.csv` (daily), `soak_npc_days.csv`
(per-villager dominant states), `soak_gifts.csv` (every gift, with names).
---
## Run 1 — Baseline (no seasons): the dead paradise
**Setup:** constant regeneration, upkeep + food demand only.
**Result:** perfectly stable, perfectly inert. 200 days: wood held a ±1%
band, shelter condition pinned at 100%, **zero trades**, no roles — every
villager Socializing-dominant ~114 of 119 days, 78% of waking life idle.
The village completed all construction and expansion by day 34 and then
had nothing left to want.
**Lesson:** a village is a metabolism, not a project. Equilibrium without
pressure produces no society: no differentiation, no exchange, no
structure. Abundance makes generosity unobservable.
---
## Run 2 — Seasons (regen throttle only): the buffers win
**Setup:** 30-day seasons; winter cuts food regen to 5%, wood to 40%.
Granary added (clay walls — first clay use), need-based gift trigger.
**Result:** winter became a *worked* season — gathering 4,889 ticks/day vs
1,857 in summer, wild stocks visibly drained and refilled. But nourishment
ran the identical sawtooth year-round, the granary sat untouched at
150/150 through two winters, and trades stayed at **zero** across 240 days.
**Lesson:** three compounding buffers (the sustainability floor acting as a
~360-unit hidden savings account, personal pack reserves, wild food budget
exceeding winter need) meant scarcity never reached an individual. Pressure
that only raises labor doesn't create interdependence.
---
## Run 3 — Frost: the hungry gap
**Setup:** winter now *decays* standing food ~7%/day toward 15% (frost
kills the larder); granary draws deepened; anti-redeposit rule.
**Result:** the simulation came alive.
- **First trades in sim history: 21** (17 deep winter, 4 early spring) —
exactly when granary-empty met neighbor-with-food.
- **Granary sawtooth textbook**: full through autumn, empty by winter day
~25, refilled within 4 days of spring. Both years.
- **The sim reproduced the "hungry gap"** — a real agricultural phenomenon
neither designed nor named in the code: worst hunger (village nourishment
0.21) fell in *early spring*, after stores ran out but before the land
regrew past harvestable thresholds.
- Crisis cascaded: the food emergency pulled labor from heating (firewood
reserves dipped to 10, condition below 100% for the first time).
- Balanced: severe hunger, zero lasting health damage, both years.
**Lesson:** storage limits + decay + regrowth lag ⇒ emergent seasonality of
need. Sharing is a *response*, not a behavior: 480 days of abundance
produced zero exchanges; ten days of genuine need produced twenty-one.
Still missing: individual roles — identical souls in a global work queue
respond identically (winter gather ticks all within 490553).
---
## Run 4 — The contrast test: 3 selfish souls among 12
**Setup:** villagers M/N/O run the East (Selfish) soul profile. Same
engine, same possibility space; only behavior weights differ: low
sustainability (strip nodes to ~15% vs the 50% commons floor), low
generosity (refuse gifts; excluded from asking), low community bias (no
communal work at all), high accumulation (double carry, standing hoard).
**Result — the four-town thesis validated:**
- Selfish villager-days: **0 build ticks** (vs 104/day for nature souls),
gather 69 vs 269, **rest 0** (never tired), socializing 1,369 vs 921.
A visible leisure class living off a working village.
- Gift network: 11 gifts, all nature→nature. The selfish never gave and
never needed to receive. First individual differentiation appeared:
**Villager_A gave 4 of 11 gifts** — the village's generous one.
- The 12 communal souls absorbed 15 souls' worth of burden without a
single ruin.
**The central finding: selfishness strictly won.** Most leisure, least
fatigue, fullest bellies, zero costs, no pushback. This is not a balance
bug — it is the empirical case for the game's soul layer. Economics alone
cannot make selfishness cost anything; that is the job of imprints,
debris, echoes, and social memory (the Unity POC's warmth-echo system).
The soul-consequence layer is not flavor on top of the economy — it is
the only thing standing between the South town and being farmed by the
East.
---
## Next
1. **Port the soul layer into the sim**: imprint triad accumulation,
social memory of gifts/refusals, consequences routed through behavior
(the generous get helped first; the ungenerous get asked last, served
last, remembered coldly). Rerun the contrast test; see if the village
organically stops carrying its parasites.
2. Instrumentation gap: per-villager nourishment/health in
`soak_npc_days.csv` (currently the village average hides who starves).
3. Save/load round-trip (SPEC §9 amendment) — still outstanding.