Internal document

Cardinal
MVP Roadmap

everything needed to get from nothing to a running simulation. phases, stack, world dynamics, and what to leave alone until it's stable.

01 — Stack

what it runs on

EngineNode.js
PersistenceSQLite / better-sqlite3
LLMGroq free tier / llama3-8b
World gridFloat32Array — in-memory
DeployRailway — private repo
DashboardExpress + HTML/CSS/JS
95% pure heuristic JS. Groq only for chronicle narration, memory distillation, and communication utterances. all Groq calls go through groq/client.js only.

02 — World

world dynamics

200²Grid cells (~2km²)
16Starting Scintillae
1h= 1 sim day
~1mo= 1 sim year
4Seasons per year
0Starting knowledge
Micro tick — every frame
Movement & Physics

movement, physics, resource regen, env update, collision and proximity detection.

Cognitive tick — every N micro ticks
Decision & Continuity

needs eval, action select, Continuity rw, social eval, comms signal emission and reception.

Chronicle tick — every sim day
History & Flush

event aggregation, Continuity decay, history compression, cultural markers, Groq narration, SQLite flush.

FieldDescriptionBehaviour
R(x,y,t)Resource densityRegenerates slowly. Depletes under sustained use.
T(x,y,t)TemperatureVaries by season. Causes cold and heat stress.
C(x,y)Traversal costStatic per terrain type.
H(x,y,t)Hazard probabilityAccumulates from events.

03 — Scintillae

life inside Cardinal

StageAgeLearningSurvivalContinuityRepro
Child0–5 yrVery highVery lowLowNo
Adolescent5–15 yrHighModerateModerateRare
Adult15–45 yrModerateHighHighYes
Elder45+ yrLowDecliningVery highNo
a group that protects its elders has better knowledge retention. a group that doesn't, forgets faster.

Reproduction is conditions-based, not scheduled. trust threshold, resource surplus, shelter, safety, and bonding duration all required. gestation is 9 sim days. mother needs decay faster. pregnancy can fail. infant mortality 15% in first 2 sim days. always one offspring.

Death causeCondition
Starvation / dehydration / cold / injuryHealth reaches 0
Old ageLifespan reached (45–75 sim years)
Infant mortalityFirst 2 sim days — 15% chance
ConflictLethal resolution

04 — Entities

the world around them

none of these are known at spawn. everything is discovered through behavior, survived, remembered, and transmitted. knowledge dies with the carrier if untransmitted.

Small prey

Low risk. 0.3 hunger yield. Respawns every 5 sim days.

Large prey

High risk. 0.8 hunger yield. Respawns every 15 sim days.

Apex

Lethal. Patrols a radius, attacks on proximity. Respawns every 30 sim days.

Flora

Berry bush, fruit tree, hardwood, reed. Seasonal availability. Some finite.

Water source

Infinite. Detectable from 8 cells. First Scintilla to find it has a survival edge.

Terrain objects

Cave (natural shelter), rock deposit (finite, never respawns). Scarcity drives migration.

05 — Structure

project structure

cardinal/
├── world/
│   ├── grid.js           # Float32Array world, R/T/C/H channels
│   ├── seasons.js        # season cycle, field mutations per tick
│   └── entities.js       # entity spawning, state, respawn, predator behavior
├── scintillae/
│   ├── scintilla.js      # Scintilla state, needs decay, aging
│   ├── perception.js     # local radius, entity detection, fog of war
│   ├── policy.js         # heuristic action selection
│   └── tendencies.js     # weight shifts from experience
├── continuity/
│   ├── memory.js         # episodic/semantic/procedural/social
│   ├── decay.js          # memory decay and reinforcement
│   └── knowledge.js      # knowledge artifact lifecycle
├── communication/
│   ├── signals.js        # primitive signal tokens
│   └── language.js       # co-occurrence → stabilization → spread
├── substrate/
│   ├── micro.js          # micro tick loop
│   ├── cognitive.js      # cognitive tick loop
│   └── chronicle.js      # chronicle tick, flush, Groq narration
├── db/
│   ├── schema.js         # SQLite schema init
│   └── flush.js          # world + Scintilla serialization
├── observer/
│   └── events.js         # immutable event log, EventEmitter
├── groq/
│   └── client.js         # all Groq calls in one place
├── config.js             # all tunable parameters
└── index.js              # entry point, boot sequence

06 — Phases

MVP roadmap

everything after Phase 8 waits until the survival loop is stable.

Phase 01 Foundation not started
  • Project scaffold, folder structure, config.js
  • SQLite schema init, basic flush
  • World grid init (Float32Array, 200×200, 4 channels)
  • Entity spawning (flora, fauna, terrain)
  • Season cycle
Phase 02 Scintillae not started
  • Scintilla spawn, state, needs decay
  • Aging and life stages
  • Death (all four causes)
  • Basic perception (local radius, entity detection, fog of war)
  • Heuristic policy (action selection by need urgency)
Phase 03 Substrate not started
  • Micro tick loop
  • Cognitive tick loop
  • Chronicle tick loop
  • Immutable event log via EventEmitter
  • SIGINT handler, flush on shutdown
Phase 04 Continuity not started
  • Memory layers (episodic / semantic / procedural / social)
  • Memory decay and reinforcement
  • Knowledge artifact lifecycle (spread / mutate / decay / myth)
  • Fog of war (explored set, confidence decay, location sharing)
Phase 05 Social not started
  • Primitive signals (approach / flee / follow / threat)
  • Trust and relationship tracking
  • Group formation detection and DB write
  • Reproduction and gestation
  • Genetic inheritance with mutation
Phase 06 Groq Integration not started
  • Chronicle narration (per cluster + global)
  • Memory distillation (episodic → semantic)
  • Communication utterances
  • Groq client, rate limit handling
Phase 07 Observer Dashboard not started
  • Express server with basic auth
  • Event feed (live, readable)
  • Chronicle summary view
  • Basic 2D spatial view (positions, resource overlay)
  • Scintilla inspector
  • Backup / restore / reset buttons
Phase 08 Hardening not started
  • Error handling and clean shutdown
  • Railway deploy, env vars, persistent volume
  • Smoke test full loop (spawn → survive → die → chronicle)
  • Tune config values from first runs

07 — Post-MVP

do not touch until Phase 8 is stable

  • Language emergence and token stabilization
  • Naming system activation
  • Generational cultural inheritance
  • Institutional behavior (settlements, leadership, norms, trade routes, rituals)
  • World map expansion (gated by population density)
  • Learned policy layer via RL / imitation for later generations
  • roadmap.cardinal.renzoreyn.dev public page