v-va*

VA.2026.006 · Floor 0 · service · hall 12

VA-Sim

collection Exnest VA Collection
accession VA.2026.006
classification Realtime Simulation · Cron-Driven Ticks · Deterministic Day Plans · Inventory & Social Presence · Elysia + Bun
floor Floor 0 · service
status in development
condition dev branch · cron live · 4032-tick live archive · world map live · social presence · catch-up + recovery crons
acquired 2026
revision Rev. E
drawing DWG-006
room 01 curator sheet 01 / 09 · rev Rev. E

“a life, simulated five minutes at a time — planned once, ticked all day, never teleported.”

VA-Sim simulates a single subject — identity withheld by curatorial order — living between home and a third place. Each day is a timeline from 00:00 to 24:00, cut into routine slots and executed in 288 ticks of five simulated minutes. A plan cron fires at 00:05 local time; a tick cron fires every five minutes after. One tick equals five minutes of lived time, one to one.

The architecture is three layers with a single law: the model proposes, the simulation disposes. Layer 1 plans once per day — a rule draft enriched by an external chat model that may swap micro-activities but may never move the slot hours. Layer 2 ticks deterministically with zero LLM calls: desires, micro sessions, multi-tick travel bridges, safety-net constraints. Layer 3 interprets after the fact — every feeling traceable to a chain of activity, bars, and emotion scores. Since Rev. B the engine and prompts are free of hardcoded identity: a character registry supplies the subject, and an emotion engine plus inner-state behavior (fourteen labels, urgency and relief, soft-max desire) turn inner pressure into outward routine.

Phase 09 gave the subject things to own. A handful of everyday objects are seeded — tools that drain, consumables that replenish, and a rotating favourite — each carrying its own state: charge, place, fullness, affection. Tools with a dead battery are excluded from the micro-activities that need them, and the exclusion is remembered in the narrative rather than raised as an error. Charge drains while the subject works, and a companion's needs rise when the subject tends to it, feeding a new desire. Phase 09b then removed the kindness the simulation had been granting for free: no more charging merely because the subject is home. Charging became a micro-activity with a place, a duration, and a cost in the day. Phase 09c gave the subject foresight — below thirty percent, plugging in starts pulling at the subject's attention, and a dead-end latch makes sure a dying device sends the subject home once rather than twice.

Phase 10 brought other people into the room without letting them become state. A roster of five relations — family, friend, colleague, acquaintance, client — is seeded in code, each with a closeness score, traits, and the hours they tend to be free. Presence is probabilistic and deterministic: closeness times habit match times a day-variant roll, capped at three, with one micro reserved for reaching out to someone. A per-day ledger blocks double-booking — if the subject is already out with someone, the subject cannot also be elsewhere with someone else, though reaching out costs nothing in location. Nothing new was persisted: a social beat is a line folded into the tick's own narrative, and the AI may only schedule people who are actually on the roster.

The evidence lives in the archive. An accelerated simulator replays fourteen days at ten ticks a second — 4,032 ticks, nine days planned by the model and five by fallback, twenty enrichment attempts vetoed, not one behavioural loop surviving to the end. Those runs are what exposed the last three repairs: one routine could interrupt another, a tired subject would rather linger than travel home, and after two visits a place closed for the rest of the day. The subject's identity is redacted everywhere — profiles, tables, session ids — because the simulation is about the shape of a day, not who lives it.

From Phase 11 the simulation has somewhere to go. A relationship layer turns first contact into a roster entry; a standalone world map routes the subject over a seeded road network, with travel cost shaped by daylight, weather, and landmarks; Phase 13 lets people actually be met there — at a landmark, on the way home, or remotely. The tick still owns the truth: a meet is a commitment, not a conversation, and the map only lengthens a day in the places it can afford.

VA.2026.006

VA-Sim

Realtime Simulation · Cron-Driven Ticks · Deterministic Day Plans · Inventory & Social Presence · Elysia + Bun


artist / curator
v-va
date
2026 — present (v0.0.1 · 140 commits · Phases 01–13 shipped · 14–50 planned · 14-day live runs archived)
status
in development
condition
dev branch · cron live · 4032-tick live archive · world map live · social presence · catch-up + recovery crons
medium
Bun runtime · Elysia HTTP · VA-ORM persistence · PostgreSQL / Neon · cron-job.org triggers · local business clock · static Bearer auth · OData envelope · character registry · emotion engine · inner-state behavior · inventory with drained batteries · social roster + presence ledger · internal world map · social life on the map · multi-store persistence
ticks per day
288
tick length
5 min sim
day coverage
0–1440, no gaps
cron jobs
2
LLM per tick
0
phases shipped
01–13 (+08b–08e, 09b, 09c, 12b, 12c)
live archive
4032 ticks · 14 days
roadmap
14–50 planned
acquired
2026
revision
Rev. E
origin
duplicated from a larger engine, kept only the foundation, 2026
room 02 evolution of this work sheet 02 / 09
2026

Phase 01 — Domain

Frozen profile, four routine templates (weekday, weekend, deadline, idle), micro taxonomy with per-tick bar deltas, deterministic seeded PRNG.

2026

Phase 02–03 — Plan & Stepper

Day-plan draft plus guarded enrichment, then the tick stepper: planned micro or desire fallback, travel bridges, constraints, idempotent tickIndex.

2026

Phase 04 — Cron & Read API

Two cron jobs (plan 00:05, tick every 5 min) behind a separate cron secret; read APIs for plan, session state, and history. No websockets — polling only.

2026

Phase 05–06 — Postgres & Human-likeness

VA-ORM persistence for sessions, ticks, day plans, tasks; seven-day offline replay verifying zero teleports, real meals, sleep at night, stamina above zero.

2026

Phase 07–08 — Variant & Task

Auto day-variant selection (deadline over idle over weekend over weekday) and a task module with live estimates, auto-pull, drift, and forgetfulness — work with meaning.

2026

Phase 08b–08e — Context, Emotion, Inner

Task prompt context, fourteen-label emotion engine, and inner-state to behavior mapping — urgency, relief, and soft-max desire stop the flat-day repetition. Shipped on dev.

2026

Phase 09 — Inventory

A few seeded objects with their own state: tools drain, consumables fill, a companion's needs and a favourite-of-the-day rotation. A micro-activity that needs a dead battery is excluded, and the story remembers why.

2026

Phase 09b–09c — Charging, taken seriously

Auto-charge deleted — being home is not the same as plugging in. Charging became a micro-activity with its own place and duration; then foresight: below thirty percent, plugging in starts to pull at the subject's attention, and a dying device latches the day shut instead of trapping the subject there.

2026

Phase 10 — Social presence

Five rostered people, deterministic presence drawn from closeness and habit, capped at three, with a daily ledger preventing double-booking. Zero new tables: a beat is a sentence in the tick's own narrative, and the model may not invent strangers.

2026

Repetition tame & loop fix

Per-micro caps, meal variety, scroll winddown limits, ping-pong excludes retired, force-sleep removed — plus a live accelerated simulator for multi-day verification.

2026

14-day live runs

4,032 ticks replayed at ten per second — nine model-planned days, five fallbacks, twenty vetoes, no surviving loop. The evidence that turned three more bugs into rules: no meal before grooming is finished, a tired subject lingers rather than travels, and a second visit closes the slot.

2026

Operational hardening

A migration script moved persistence from a direct connection to the HTTP gateway, and a reconcile script now replays ticks across two separate databases after a failover — the simulation can be interrupted without losing the day.

2026

Catch-up & recovery

The tick cron learnt to fill slots it missed instead of quietly moving five minutes backwards, and a half-hourly recovery cron re-plans a day whose enrichment failed — with the token ceiling raised after the draft fallback was traced to a truncated reply.

2026

Phase 11 — Relationships

A relationship layer: family is default, while friends and clients enter an internal roster after first contact instead of being invented ad hoc.

2026

Phase 12 — The World Map

A standalone internal graph — multi-modal shortest paths over a seeded road network, travel cost scaled by daylight, weather, and landmarks, with tick clamping so nobody teleports. Deliberately not wired to the shared graph library yet.

2026

Phase 12-B–C — Real Roads, Weekday Third Place

The synthetic map is replaced by a real road-network seed with a dynamic place-mapping fallback; a weekday third-place slot is injected probabilistically, with transit micro-activities excluded and a daily cap.

2026

Phase 13 — Social Life

People are met on the map rather than merely scheduled: meetings at landmarks, remote contact with family, and an explicit meet commitment that survives ticks.

2026

Phase 13b — Task Direction

The task module learns direction — what a task is for, not only that it exists.

2026

Module Split & Store Rename

The single module divides into domain folders, the step store becomes a general simulation store, and an HTTP database driver joins the direct one — with the tick path optimised and a fourteen-day harness kept as evidence.

2026

Phase 14–40 — Roadmap (planned)

Collective items, a task economy from pricebook to wallet, then the memory era: general memory, maps, social memory, economic memory, cross-memory, and its closing guardrails.

2026

Phase 41–50 — Identity & no-login (planned)

Persona seeds migrate to an external identity registry, chat wires live definitions, aliases resolve with typo tolerance, warm caches refresh every minute. Then no accounts, no passwords: memory itself is the identity, and unfinished topics resurface weeks later like a person would.

concepts — kept & discarded

kept — 288 idempotent ticks per day, deterministic on the stored plan

kept — constraints that tell a story; a refusal the subject can narrate beats an error

rejected — per-tick LLM and websockets; cost and fragility with no human gain

rejected — auto-charging; convenience quietly deletes the behaviour you built the system to model

held — withheld identity; the exhibit studies days, not the person living them

archive ref — VA.2026.006/CON

cross ref — timeline fig. 01

room 03 original sketches sheet 03 / 09

curator annotations

on proposals

the model may suggest the day, but only the simulation may live it.

on travel

no teleporting between home and the third place — every move crosses transit, tick by tick.

on e2e

never run end-to-end against prod — memory for tests, or the archive fills with ghosts.

on convenience

auto-charging was kinder and worse. deleting it made the battery a decision instead of a background process.

on guests

other people are drawn, not stored. a roster in code, a ledger for one day, and nothing to migrate when the subject changes.

fig. 01 — VA.2026.006.a the day plan document· 1 day : 288 ticks · guarded slots locked to the clock; enrichment may only swap what happens inside them.
fig. 02 — VA.2026.006.b the tick mechanism· 5 min sim · idempotent desire, travel, constraint, bars, narrative, social beat — retried safely by tickIndex.
fig. 03 — VA.2026.006.c the two crons schedule· 00:05 · */5 · live plan once at dawn, local time, tick all day — separate secret from the read API.
fig. 04 — VA.2026.006.d the pocket state· 7 items · battery · bars · draining tools, consumables, a companion, a favourite — each with a state that changes whether the next five minutes are even possible.
room 04 interface reviews sheet 04 / 09
fig. 05 — VA.2026.006.e dawn plan render POST /internal/cron/plan — draft or enriched day plan stored per local date
fig. 06 — VA.2026.006.f midday tick render POST /internal/cron/tick — one micro-activity, one bar snapshot, one narrative line
fig. 07 — VA.2026.006.g who is around render GET /api/v1/subject/roster — five people, closeness and habits; whoever the tick draws folds into the narrative
room 05 catalog record sheet 05 / 09
materialsBun runtime · Elysia HTTP · VA-ORM persistence · PostgreSQL / Neon · cron-job.org triggers · local business clock · static Bearer auth · OData envelope · character registry · emotion engine · inner-state behavior · inventory with drained batteries · social roster + presence ledger · internal world map · social life on the map · multi-store persistencedimensionsticks per day — 288 · tick length — 5 min sim · day coverage — 0–1440, no gaps · cron jobs — 2 · LLM per tick — 0 · phases shipped — 01–13 (+08b–08e, 09b, 09c, 12b, 12c) · live archive — 4032 ticks · 14 days · roadmap — 14–50 planned
conditiondev branch · cron live · 4032-tick live archive · world map live · social presence · catch-up + recovery cronsacquired2026
revisionRev. Earchive locationDWG-006 · floor Floor 0 · service
internal referenceVA.2026.006/Moriginduplicated from a larger engine, kept only the foundation, 2026
room 06 the archive sheet 06 / 09

failed experiments

✕ 2026

the prod e2e incident

e2e ran without the memory override and wrote synthetic sessions and far-future tasks to prod. rule since: STEP_STORE=memory for every e2e run.

✕ 2026

the websocket plan

realtime sockets designed, then deleted — polling covers the viewer with none of the serverless pain.

✕ 2026

the flat day

early stepper repeated one micro for hours. fixed with session holds, anti-mono guards, and deliberate short-micro alternation as texture.

✕ 2026

the travel ping-pong

the subject bounced between two places tick after tick. fixed with location-group resolution, multi-tick travel bridges, and a visit latch.

✕ 2026

the language leak

enrichment returned free-form prose the guards could not veto. fixed with sanitized structured swaps and per-swap stamina vetoes.

✕ 2026

the battery that never died

charging happened automatically whenever the subject was home, including asleep — so the constraint the whole inventory phase existed to create never actually bit. phase 09b deleted it: a full session at the socket, or no charge at all.

✕ 2026

the place that ate the day

a dead device sent the subject home to charge, and the return trip was judged affordable — so the subject went back and died again. two hours of ping-pong per visit. the charge session is now uninterruptible and a second visit closes the slot.

draft concepts

  • routine template sketch
  • micro taxonomy catalog
  • travel bridge diagram
  • variant selection order
  • inventory gating sketch
  • economy pricebook outline
  • roster weighting table
  • social ledger rules
  • identity-fondasi plan
  • identity era outline (41–50)
  • va-series architecture map

research notes

— locking slot hours while freeing micro-activities is what keeps enrichment creative but honest.

— a local-date helper beats timezone discipline — business dates must never come from raw UTC strings.

— async polling outlives websockets on serverless; the viewer waits, the simulation never blocks.

— a character registry beats hardcoded identity — the engine stays the same while the subject changes.

— a flat battery turns an abstract constraint into a story: the simulation explains itself instead of throwing.

— behavioural loops are only visible at speed — 4,032 ticks found three faults that a single day never could.

— model vetoes are a feature: twenty rejected enrichments in fourteen days is evidence the guardrails are load-bearing.

room 07 architecture · technical drawing DWG-006 · rev Rev. E
DWG-006 · Rev. E · floor plan — VA-Sim curator annotation — zones 03–05 are load-bearing; the presence layer must remain unshaded.
room 08 design statement sheet 08 / 09

I. Propose, then verify

Enrichment may rewrite the texture of the day but never its skeleton. Every swap passes stamina vetoes, location groups, roster membership, and slot guards — or the draft stands.

II. Determinism is care

Seeded randomness, minute-absolute time, idempotent ticks. The same seed and plan must replay the same day — otherwise the archive cannot testify, and nothing in fourteen days of runs would be evidence of anything.

III. Redact the who, keep the how

The subject's name is withheld from every label, table, and route in this hall. What remains — hunger at noon, a flat battery away from home, a friend free on Saturday afternoon — belongs to anyone.

room 09 related works & future vision sheet 09 / 09

future vision

Phases 14 through 20 give the world its economy — collective items, a pricebook, income, a wallet, rent, and the first real scarcity. Then the memory era runs to fifty, ending with no accounts and no passwords, where the subject recognizes a visitor by what the subject remembers of them. Until then VA-Sim ticks on: a plan at dawn, 288 small lives per day, and a viewer polling quietly to watch the subject — whoever they are — live another five minutes.