feat: introduce identity-backed goat
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
## Current contract
|
||||
|
||||
`SimulationStateRecord` is the versioned JSON boundary for the current
|
||||
simulation. The current world schema is v9 and captures:
|
||||
simulation. The current world schema is v10 and captures:
|
||||
|
||||
- simulation seed, tick interval, tick count, clock remainder, and elapsed
|
||||
clock ticks;
|
||||
@@ -13,6 +13,8 @@ simulation. The current world schema is v9 and captures:
|
||||
- controlled per-NPC wander RNG streams;
|
||||
- scene-independent resource state plus the definition facts needed while its
|
||||
ResourceNode is unloaded;
|
||||
- scene-independent animal identity, position, hunger, feeding history,
|
||||
reservation, and availability state;
|
||||
- pantry contents, carried NPC inventory, the ordered economic event stream,
|
||||
and its next stable event ID;
|
||||
- directed relationship records with familiarity, trust, and the stable event
|
||||
@@ -29,7 +31,7 @@ The top-level identity is:
|
||||
```json
|
||||
{
|
||||
"schema": "the_steward.simulation",
|
||||
"schema_version": 9
|
||||
"schema_version": 10
|
||||
}
|
||||
```
|
||||
|
||||
@@ -170,6 +172,21 @@ nested v1/v2 events receive empty/zero defaults, while a new `task_blocked`
|
||||
event requires its stable action, source storage, resource, and positive
|
||||
requirement contract.
|
||||
|
||||
SimulationStateRecord v10 adds the top-level `animals` array and the first
|
||||
`AnimalStateRecord` schema. Each animal record stores its stable animal and
|
||||
species IDs, display name, authoritative world position, hunger,
|
||||
`last_fed_tick`, reservation owner, and enabled/player/NPC feeding flags.
|
||||
World schema v9 preserves opportunity history while migrating to an empty
|
||||
animal list.
|
||||
|
||||
Current-schema parsing requires unique animal IDs that do not collide with
|
||||
resource or storage IDs. An animal reservation must belong to an existing NPC
|
||||
whose active feed task targets that exact animal. Every `animal_fed` event
|
||||
must name the pantry as its source, an existing animal as its destination,
|
||||
food as its item, the exact feed action cost, and a valid NPC actor or the
|
||||
player sentinel. The latest matching feed event tick must agree with the
|
||||
animal's `last_fed_tick`.
|
||||
|
||||
The bounded opportunity family accepts at most one open record globally.
|
||||
Opportunity, trigger-event, and resolution-event IDs are unique and the next
|
||||
ID must remain above restored history. Referenced NPCs, storage, resources, and
|
||||
@@ -235,6 +252,24 @@ explicitly. Current-schema parsing also canonicalizes numeric, boolean, and ID
|
||||
variants so a freshly registered finite source retains a byte-stable checksum
|
||||
after a JSON round trip.
|
||||
|
||||
## Animal authority
|
||||
|
||||
`AnimalCareSystem` owns `AnimalStateRecord` instances independently of the
|
||||
scene tree and advances their hunger in stable-ID order. `AnimalNode` binds a
|
||||
loaded presentation and interaction point to that authority; the simulation
|
||||
position remains canonical while the node is loaded or absent.
|
||||
|
||||
Animals are not `ResourceNode` instances and are not inserted into the
|
||||
resource discovery grid. The first bounded slice uses a deterministic linear
|
||||
loaded-animal query. NPC and player feeding resolve through the same atomic
|
||||
care operation: reserve or select the exact animal, withdraw one real food
|
||||
from `village_pantry`, reduce that animal's hunger, and append one exact
|
||||
`animal_fed` fact. Failed withdrawal changes neither animal nor history.
|
||||
|
||||
The persistent hungry/content presentation derives from authoritative hunger.
|
||||
The short feed response is transient and is reset rather than serialized or
|
||||
replayed after restore.
|
||||
|
||||
## Local quicksave boundary
|
||||
|
||||
`SaveSlotStore` writes the existing versioned JSON record to
|
||||
@@ -253,7 +288,7 @@ This phase does not yet provide:
|
||||
|
||||
- a save-slot menu, metadata, thumbnails, autosaves, or multiple profiles;
|
||||
- migrations from any historical world schema other than the explicitly
|
||||
supported v1–v8 layouts;
|
||||
supported v1–v9 layouts;
|
||||
- player inventory or player relationship records;
|
||||
- broader relationship dimensions, line-of-sight/hearing evidence,
|
||||
continuous or personalized memory decay, reinforcement, false beliefs, or
|
||||
|
||||
Reference in New Issue
Block a user