Technical Manual

Open-World RTS/RPG Settlement Sim

Not your average city builder. You are shaping a world.

You are not controlling pawns. You are choosing when ordinary lives become stories.

Simulation Roadmap
Sections
49
Subsections
260

Contents

  1. 1TaglineNot your average city builder. You are shaping a world.
  2. 2PurposeThis document captures the current design vision, technical framing, and scope boundaries for a game concept discussed in direct planning conversation. It is me
  3. 3High-Level PitchThe game is a fusion of:
  4. 4Core Design StatementThis is not "Age of Empires, but infinite."
  5. 5Player FantasyThe target emotional fantasy is:
  6. 6Player RoleThe player operates at two scales that must remain part of the same game rather than separate modes.
  7. 7Core LoopThe expected gameplay loop is:
  8. 8Genre Fusion TargetsBorrow from traditional RTS:
  9. 9RTS Interaction and Order SemanticsRTS interaction is the player's standard way to select people, inspect their current intent, and issue immediate or queued orders without creating a second simu
  10. 10World StructureThe long-term target is a broad persistent world delivered through streaming chunks. The world should feel continuous across its approved production breadth, bu
  11. 11World Streaming and Chunk/Region SchemaThis section defines how the world should be partitioned, streamed, and persisted.
  12. 12Ambient World Without Rival AIThe early game world should feel alive even before classic RTS opponents exist.
  13. 13Direct Control PhilosophyDirect control exists so the player can step into the simulation when they want precision, ownership, or drama. It begins only after an explicit take-control ac
  14. 14Direct Control SemanticsThis section defines what direct control means in systemic terms.
  15. 15Autonomous Life PhilosophyEveryone in the settlement should have some systemic personhood. The world should be capable of producing meaningful developments without the player initiating
  16. 16Simulation PrincipleThe key simulation principle is:
  17. 17Simulation TiersThe game requires selective simulation fidelity. A uniform full-resolution world sim will not scale.
  18. 18Promotion and DemotionDemotion between tiers is not deletion. It is state compression.
  19. 19Intent-Driven Actor ModelDo not model behavior primarily as huge brittle event queues.
  20. 20AI and Decision FramingThe concept has roots in hierarchical task networks and Dijkstra maps. Those ideas remain useful if they are treated as interpretable decision tools rather than
  21. 21Needs, Affect, and Thought ModelIf villagers are meant to feel like real lives rather than animated job slots, they need a layered internal-state model that can produce understandable motivati
  22. 22Personhood ModelEvery person should have at least a minimal systemic identity, but that identity should be composed from distinct layers rather than one overloaded trait bucket
  23. 23Villager SchemaThis section translates the personhood model into a more concrete logical schema for a villager or other human actor.
  24. 24DNA and InheritanceThe original concept uses "DNA" as a way to express what defines a person and how experience alters them. The implementation separates this into:
  25. 25Relationship and Life ProgressionThe world allows unscripted developments between people, represented as stateful systems rather than infinitely bespoke stories.
  26. 26Event and Narrative StructureNarrative should emerge from the combination of simulation and structured event templates.
  27. 27Quest and Event ArchitectureThis section defines how quests, incidents, discoveries, and social scenes should plug into the living simulation.
  28. 28Ambient Story vs Playable StoryThis distinction is central.
  29. 29User Experience RequirementsBecause the sim may create many events, the UI must filter and surface information intelligently.
  30. 30UI and Observability ArchitectureThis section defines how the player should read the world, issue intent, and understand consequences.
  31. 31Encounter and Intersection ArchitectureThis section defines how meaningful offscreen and onscreen incidents arise from intersecting world activity.
  32. 32Memory and Reputation PropagationThis section defines how events continue to matter after they are over.
  33. 33Danger and Risk ModelingOffscreen danger must be real, or the world feels fake. But danger should not require full detailed simulation everywhere.
  34. 34Infrastructure as StrategyBecause travel and risk matter, infrastructure should become meaningful gameplay rather than decoration.
  35. 35Application and Session Flow State MachineWorldforge should use a small finite-state machine for application and session lifecycle. Its job is to make startup, session loading, active play, session exit
  36. 36Simulation ArchitectureThis section defines the practical architecture target for the world simulation. It is not engine-specific code design yet, but it should constrain future imple
  37. 37Settlement Task and Job ArchitectureThis section defines how settlement needs become actual villager work.
  38. 38Resource and Economy ArchitectureThis section defines how material flow should work across the settlement, world, and event systems.
  39. 39Autonomous Settlement DevelopmentWorldforge should be able to run as a living settlement simulation without continuous player orders. Villagers establish households, recognize shared problems,
  40. 40Technical Architecture DirectionThe technical model implied by the current design discussion includes:
  41. 41Design Review and Production ScaffoldingThis section reviews the current design as a buildable game rather than only a concept. Its purpose is to identify:
  42. 42Data Model NotesLikely persistent data categories per person:
  43. 43Completed Engine Scope BaselineThe completed Phase 0A-13 engine sequence deliberately did not attempt all dimensions at once.
  44. 44Completed Vertical Slice ShapeThe engine vertical slice was bounded around:
  45. 45Vertical Slice and Expansion ContractThe first vertical slice is intentionally small. It should prove one honest example of each core relationship before the project adds breadth:
  46. 46Major RisksThe concept contains the seeds of multiple full games:
  47. 47Guiding PrinciplesWhen future decisions arise, prefer the option that best protects these principles:
  48. 48Remaining Product DecisionsThe engine contracts, selective-fidelity model, representative 20,000-person proof, ownership boundaries, and baseline player lenses are settled. The following
  49. 49Working SummaryThis project aims to create a game where:
1

#Tagline

Not your average city builder. You are shaping a world.

You are not controlling pawns. You are choosing when ordinary lives become stories.

2

#Purpose

This document captures the current design vision, technical framing, and scope boundaries for a game concept discussed in direct planning conversation. It is meant to preserve the core idea before implementation work begins, and to act as a reference when future design or engineering decisions threaten to drift from the original intent.

This document is the design authority for what Worldforge is meant to become. It is not the implementation sequence. The Development track owns implementation order, phase gates, proof, and the extension contracts that connect the first vertical slice to the complete design.

3

#High-Level Pitch

The game is a fusion of:

  • real-time strategy style direct unit control
  • cozy citybuilder and settlement growth
  • open-world RPG exploration and events
  • colony/life simulation with autonomous people
  • emergent narrative driven by traits, memory, relationships, and consequences

Villagers build and grow settlements through autonomous labor, resource use, household decisions, and civic projects. The player observes those lives, shapes priorities and policy, and may assign specific work when they want stronger direction. At any moment, the player can explicitly take control of individuals or small groups and steer them through journeys, hunts, quests, diplomacy, exploration, or crisis response.

The world continues living even when the player is not looking. Villagers work, travel, form bonds, suffer losses, develop habits, and react to danger. The player's role is not to manufacture all meaning from above, but to step into an already-living simulation and bend key moments into memorable stories.

4

#Core Design Statement

This is not "Age of Empires, but infinite."

It is closer to:

  • an RTS camera and unit interaction model
  • layered on top of a selective simulation world
  • where autonomous lives produce ambient story
  • and player intervention turns ambient story into playable story

The project should be evaluated by whether it delivers this fantasy:

  • build a settlement that feels inhabited
  • care about the people inside it
  • zoom into specific people or groups
  • personally guide decisive moments in their lives
  • watch those moments permanently change the settlement and the world
5

#Player Fantasy

The target emotional fantasy is:

  • rule and grow a living frontier settlement
  • become attached to the people who live there
  • step into important moments instead of only issuing abstract orders
  • feel that logistics, politics, danger, romance, loss, and ambition all belong to the same world

The intended player sensation is not pure efficiency optimization and not pure hero-centric RPG adventuring. It is the feeling of governing a settlement whose inhabitants are people, not anonymous worker tokens.

6

#Player Role

The player operates at two scales that must remain part of the same game rather than separate modes.

#6.1Macro Role

At the settlement level, the player:

  • inspects settlement needs, throughput, projects, and failure pressure
  • shapes labor priorities and may assign specific work
  • permits, sponsors, reserves land for, or places buildings when their authority allows it
  • sets up production and storage chains
  • manages growth, expansion, and infrastructure
  • responds to threats and shortages
  • shapes the strategic development of the settlement

#6.2Micro Role

At the human or party scale, the player:

  • selects people to observe without changing their behavior
  • explicitly takes or releases direct control
  • steers small groups through the world
  • hunts, scouts, escorts, trades, and rescues
  • handles tactical encounters
  • responds personally to world events
  • participates in quests, diplomacy, and high-stakes journeys

This micro control is not decorative. It is how the player authors turning points in the lives of individuals who otherwise live autonomously.

7

#Core Loop

The expected gameplay loop is:

  1. Grow and sustain a settlement through labor, building, and logistics.
  2. Let villagers autonomously carry out work and life routines.
  3. Notice risks, opportunities, shortages, and emerging stories.
  4. Intervene directly by explicitly taking control of people or parties for important actions.
  5. Resolve those actions through real-time movement, combat, travel, and event participation.
  6. Feed the consequences back into the settlement simulation.
  7. Watch people and institutions change as a result.

The loop should support both:

  • ambient life the player can observe
  • decisive episodes the player can personally shape
8

#Genre Fusion Targets

Borrow from traditional RTS:

#8.1RTS Layer

  • direct unit selection
  • immediate move/attack/gather/build orders
  • visible workers and logistics
  • tactical response to danger
  • real-time pacing

#8.2Colony/Citybuilder Layer

Borrow from cozy builder and colony sim design:

  • autonomous workers
  • storage and job chains
  • homes, families, routines, and infrastructure
  • gradual settlement identity
  • planning rather than constant micromanagement

#8.3RPG Layer

Borrow from RPG design:

  • open-world travel
  • quests and narrative events
  • stats and traits
  • personal progression
  • story consequences tied to who was involved

#8.4Life Sim / Emergent Narrative Layer

Borrow from life sim and systemic narrative design:

  • relationships
  • memory of past events
  • habits acquired through experience
  • social consequences
  • household and lineage development
9

#RTS Interaction and Order Semantics

RTS interaction is the player's standard way to select people, inspect their current intent, and issue immediate or queued orders without creating a second simulation path. Selection is observation and recipient-candidate state; it does not enter direct control. An order records player intent. An explicit Take Control action requests moment-to-moment authority. The owning gameplay system validates and applies each request through the same movement, job, combat, inventory, and event rules used by autonomous actors.

#9.1Selection Contract

The first playable control set should support:

  • click to replace the current selection with one selectable actor
  • drag to replace the current selection with actors inside a marquee
  • Shift-click to add one actor or remove it when already selected
  • Shift-drag to add every actor inside a marquee once without discarding the rest of the selection
  • click on empty ground to clear selection unless an order-targeting mode is active
  • Escape to cancel an order-targeting mode before it clears the selection
  • a visible selected state in the world and a compact list of selected actors in the player UI
  • double-click and control groups only after the basic selection and order path is stable

Selection is presentation and UI focus state. It does not own actor behavior, persist a second copy of actor identity, or mutate simulation components directly.

Selection must remain causally inert to the Actor. Clicking, inspecting, following with the camera, or leaving a statistics panel open cannot supersede a plan, alter need or danger pressure, change IAUS or HTN decisions, or make the Actor react to being observed. Selection may keep detached presentation data or a visible proxy available, but simulation heat and decision truth remain under their existing owners.

Direct control requires a separate explicit Take Control button, hotkey, or command-mode action. Release Control is also explicit. A normal selection may receive assignments while remaining autonomous, and the player may inspect one Actor while directly controlling another Actor or Party.

#9.2Order Input Contract

The baseline interaction uses contextual orders:

  • in the Phase 4 vertical slice, right-click on an authored Site or ground within its bounded target radius issues a Site move order; other ground is rejected and does not imply exact local pathfinding
  • after Phase 7 adds local embodied navigation, right-click on exact traversable ground may issue a local world-position move order through the same durable movement-order path
  • right-click on a hostile target issues an attack order
  • by the Phase 6 vertical-slice exit, right-click on the authored finite food source or its available Job requests assignment of one selected Actor to that existing food chain
  • by the Phase 6 vertical-slice exit, right-click on the authored construction site or its available Job requests assignment of one selected Actor to that existing construction chain; an eligible controlled Party may request the existing bounded construction-assist operation
  • an explicit command button may enter a targeting mode when context alone would be ambiguous
  • invalid targets do not create partial orders and must produce visible rejection feedback

The first slice does not need a second gather, haul, or build mutation path. The target adapter resolves stable Actor, Job, initial WorkTask, Site, Construction, and retained revision facts, then calls the existing player-assignment or Party-assist operation. Hauling and building remain task steps inside the assigned Work lifecycle. Exact assignment cancellation uses the retained AssignmentOrder ID and its current revision.

A normal order replaces incompatible immediate player intent. Holding Shift appends an order to the actor's player-order queue. Emergency orders such as retreat may interrupt the current action, but the command definition must say that explicitly. Order application uses a stable recipient order and stable target IDs so replay does not depend on selection order, pointer values, or container iteration.

Move, gather, build, attack, and priority orders use assignment authority unless the player has explicitly taken direct control. Assignment may strongly redirect immediate intent, but it does not silently change the Actor's control-state band.

#9.3Order Ownership and Data Flow

The required ownership path is:

  1. Controls translate physical input into backend-neutral selection or order requests.
  2. App composition resolves screen-space targeting and submits one gameplay command.
  3. Game command handling validates authority, recipients, target type, reachability prerequisites,

and queue policy against simulation truth.

  1. The owning gameplay system converts an accepted command into actor intent, a route request, a

job claim, a combat target, or another domain-specific state change.

  1. Simulation systems execute that state through their normal fixed-tick passes.
  2. Events and presentation report acceptance, rejection, progress, interruption, and completion

after the authoritative mutation occurs.

The durable order record should contain an order kind, stable order ID, stable actor IDs, a typed target, queue or interruption policy, issuing simulation tick, and any domain parameters required to validate replay. It must not contain raw ownership pointers or renderer objects. Rendering reads selection and order results; it does not repair routes, job claims, combat state, or actor intent.

#9.4Autonomy and Player Authority

Player orders temporarily override the actor's immediate autonomous intent; they do not erase needs, traits, injuries, jobs, relationships, or memory. When an order completes, is cancelled, or becomes invalid, the actor returns to normal planning with the resulting position and condition. The UI must distinguish at least these states:

  • accepted and pending
  • executing
  • blocked or waiting
  • interrupted
  • completed
  • rejected or invalidated

The player must be able to tell which order is active, where it is targeted, whether additional orders are queued, and why an actor cannot comply. Feedback may be visually compact, but it cannot rely only on logs or developer tools.

#9.5Implementation Ownership

Implementation ownership is divided as follows:

  • Phase 1 owns stable route and destination requests, target positions, reachability results, and movement continuity across world heat transitions. It does not open the full player order UI.
  • Phase 2 owns the player-order source marker, actor-intent override rules, cancellation, queue policy, and the transition back to autonomous planning. It proves the data contract with a narrow command-driven scenario before general RTS interaction opens.
  • Phase 3 owns gather, haul, build, and assignment orders because those commands mutate jobs, reservations, stockpiles, and construction state.
  • Phase 4 owns the bounded player interaction path for selection, contextual Site movement and Actor attack, retreat, bounded Party orders, incident response, assist behavior, and command feedback. It also provides the durable selected-Actor assignment issue and cancellation operations. These are the reusable foundations for later escort and work-targeting play; they do not constitute a multi-step escort, rescue, or broad construction lifecycle.
  • Phase 6 promotes the existing diagnostics Party formation, control, release, and response actions into a discoverable player-facing surface. It also owns the minimum graphical adapters for assigning one selected Actor to the existing food or construction Job, cancelling the exact assignment, requesting existing Party construction assist, and displaying accepted, queued, deferred, executing, blocked, interrupted, completed, cancelled, or rejected results with their owner-supplied reason.
  • Phase 7 first adds World-owned local embodied navigation: exact world-position targets, nav-cell traversability, deterministic local paths, dynamic-obstruction invalidation, and explicit arrival tolerance. Inter-Site travel remains on the Phase 1 route graph, and movement orders remain under the Phase 4 command contract.
  • Phase 14 exposes selection, assignment, take-control, release, order feedback, and owner-built

snapshots through the scriptable standard interface without changing their gameplay owners.

  • Phase 15 corrects the bounded proof interaction so observation selection, assignment authority,

and direct control are distinct in the normal player experience. It adds explicit take-control and release actions before connected movement broadens the playable space.

  • Phases 7-12 add broader target kinds only when their domain state exists: Phase 7 adds building placement, upgrade, repair, and infrastructure commands; Phase 8 adds ecology and discovery targets; Phase 9 adds processing, crafting, provisioning, trade, and broader transfer commands; Phase 11 adds quest, escort, rescue, and institutional responses; Phase 12 adds tactical, formation, defense, and warfare commands.
  • Phase 11 owns multi-step escort and rescue requests, including acceptance, deadlines, travel interruption, completion, abandonment, autonomous continuation, and quest or institutional consequences. It composes the existing Party, movement, incident, and consequence owners rather than creating escort-only versions of their state.

Large-scale army control, advanced formation warfare, broad remapping UI, and networked command replication are not part of the first vertical slice. They remain tracked in the development indices until a later scope explicitly promotes them.

The completed Phase 4 proof may enter control as part of selected-Actor command handling. That was acceptable for proving the shared control owner, but it is not the final player contract. Phase 15 must remove that coupling before later settlement play builds on it.

10

#World Structure

The long-term target is a broad persistent world delivered through streaming chunks. The world should feel continuous across its approved production breadth, but the simulation cannot be fully high-fidelity everywhere at once. Procedurally unbounded terrain is not a core product promise.

Key principles:

  • the world should be streamable
  • the world should remain persistent
  • the world should not simulate every entity at full detail at all times
  • different areas should consume different simulation budgets

The world is expected to contain:

  • player settlement(s)
  • towns and cities later
  • wilderness and hunting grounds
  • wildlife and monsters
  • resource sites
  • roads and trade routes
  • events, quests, and discovery locations

AI-controlled rival factions are intentionally out of scope for the first vertical slice. Phase 12 owns the first bounded rival faction after diplomacy, institutions, combat, and world-scale pressure have stable owners.

11

#World Streaming and Chunk/Region Schema

This section defines how the world should be partitioned, streamed, and persisted.

The project needs a world model that supports:

  • large continuous space
  • selective simulation fidelity
  • actor persistence across distance
  • route and region logic that spans local map tiles

The key idea is:

  • chunks exist for local spatial detail
  • regions exist for broader simulation meaning

The architecture should not confuse those two jobs.

#11.1Architectural Goal

The world partition system should:

  • let the player move through a broad continuous world
  • load only the local detail that matters right now
  • preserve offscreen causality across long distances
  • give the simulation stable containers for routes, danger, resources, and settlement influence

It should be possible for the player to:

  • leave a work site
  • travel elsewhere
  • return later
  • find a believable evolved state

without requiring every local object in the entire world to stay fully active in memory.

#11.2Core Spatial Layers

The world is represented through several nested layers.

#11.2.11. Tile or Nav Cell Layer

Use for:

  • walkable space
  • obstacles
  • terrain cost
  • local pathfinding
  • local placement and collision

This layer matters most when a scene is fully embodied and nearby.

Phase 7 activates this layer for gameplay before expanded construction requires local access. World owns traversability, local path results, obstruction invalidation, position, and arrival tolerance. Game movement orders request a typed Site or world-position target; App, Controls, Render, and Tools do not author or repair navigation state. Phase 8 ecology, Phase 11 rescue, and Phase 12 tactical movement consume this path only after the Phase 7 proof is complete.

#11.2.22. Chunk Layer

Use for:

  • local streaming unit
  • local scene ownership
  • terrain and static object batching
  • nearby actor embodiment
  • local resource nodes
  • local creature spawning anchors

Chunks should be small enough to stream comfortably and large enough to avoid pathological churn when the camera or player moves.

A chunk is a local detail container, not a narrative or economic unit.

#11.2.33. Region Layer

Use for:

  • route and corridor identity
  • risk fields
  • ecological pressure
  • settlement influence
  • broad resource patterning
  • event relevance
  • low-fidelity offscreen simulation

Regions should group multiple chunks into spaces that matter to human-scale reasoning.

Examples:

  • north forest outskirts
  • river crossing corridor
  • settlement hinterland east
  • quarry ridge district
  • old shrine valley

A region is a simulation and meaning container, not just a geometry bucket.

#11.2.44. World Layer

Use for:

  • global seed and generation rules
  • climate or biome belts
  • known settlements
  • travel networks
  • faction territories later
  • long-range discovery and event routing

#11.3Chunk Schema

Each chunk should carry data that is primarily local and spatial.

Likely chunk contents:

  • chunk_id
  • world bounds
  • terrain and elevation references
  • biome mix
  • local nav data
  • static props and obstacles
  • resource node instances
  • building instances within bounds
  • embodied actor references currently loaded
  • local creature presence state
  • local scene flags

Chunk records should prefer references to stable world objects rather than duplicating the full truth of those objects.

#11.4Region Schema

Each region should carry data that is primarily systemic and durable.

Likely region contents:

  • region_id
  • member chunk ids
  • region type
  • travel corridors and route references
  • threat fields
  • ecological profile
  • settlement influence values
  • known sites of interest
  • active regional incidents
  • ambient traffic intensity
  • depletion and recovery state
  • visibility or familiarity state for the player

This is where the world can remember that:

  • wolves have become more active along a corridor
  • quarry traffic is heavy this month
  • a shrine rumor belongs to this valley
  • a road is becoming safer due to watchtower coverage

#11.5World Objects Versus Partition Containers

Important rule:

Chunks and regions should not "own" all gameplay truth inside them.

Instead:

  • actors are their own persistent records
  • buildings are their own persistent records
  • routes are their own persistent records
  • events are their own persistent records

Chunks and regions should index, host, or contextualize those records.

This prevents world state from becoming impossible to reconcile when an object spans boundaries or changes scale.

#11.6Streaming Responsibilities

Streaming should primarily decide:

  • what local geometry is loaded
  • what actors are embodied
  • what nearby AI runs at full fidelity
  • what VFX, animation, and scene props exist

Streaming should not decide whether the broader world exists.

A good mental split is:

  • streaming controls presence in local memory and scene detail
  • simulation layers control continued world truth

#11.7Focus and Simulation Heat Model

The project needs something more explicit than a vague loaded versus unloaded split.

The world uses a heat model:

  • focused
  • hot
  • warm
  • cool
  • cold background

This heat should not be purely visual. It should drive:

  • streaming persistence
  • actor representation tier
  • update cadence
  • AI reconsideration frequency
  • interruption sampling depth
  • UI surfacing priority

This is how the game can preserve parity where the player cares without pretending the whole world runs at the same granularity.

#11.8Focused Zone

The focused zone is the space of immediate player agency.

Typical focus anchors:

  • camera center
  • currently selected villagers
  • directly controlled parties
  • opened inspectors that pin a person, household, job chain, or site
  • active dialogue, combat, hunt, or rescue scenes

Inside the focused zone:

  • chunks stay loaded
  • actors stay fully embodied
  • local nav and collision are exact
  • combat, conversation, and manipulation resolve in immediate detail
  • needs and affect can update at short cadence
  • fine-grained interruptions are allowed to emerge

This is where the player should be able to trust what they are seeing at a moment-to-moment level.

#11.9Hot Zone

Hot zones are not necessarily on screen, but they are still under strong scrutiny or near-term consequence.

Typical hot-zone causes:

  • recently focused area
  • selected actor traveling just offscreen
  • dangerous encounter chain in progress
  • settlement core logistics area
  • expedition route the player is actively monitoring
  • aftermath of direct control or crisis

Inside a hot zone:

  • chunks may remain partially loaded or be cheap to rehydrate
  • actors remain individual and highly inspectable
  • travel advances by short route segments
  • task progress advances by local milestones
  • interruptions are still sampled specifically rather than only statistically
  • relationship and household reactions may still update on short cadence

Hot is the tier that should make "I just looked away for a minute" still feel honest.

#11.10Warm Zone

Warm zones are offscreen spaces with elevated narrative or economic relevance, but not immediate hand-on control.

Typical reasons to stay warm:

  • the player was there recently
  • a named villager is active there
  • a quest thread is unresolved there
  • a route bottleneck or shortage is centered there
  • infrastructure, trade, or defense significance is high
  • repeated incidents have made the area notable

Inside a warm zone:

  • local chunks do not need to remain fully loaded
  • actors may use compressed active representation
  • plans advance by milestones and decision checkpoints
  • route checks happen at segment or transition boundaries
  • incidents resolve with participant-specific logic
  • memory, reputation, and household effects still propagate with identity intact

Warm is where the world should still feel personal, even when it is not being watched second by second.

#11.11Cool Zone

Cool zones are part of the living world, but they are not presently important enough for dense individualized updates.

Typical cool-zone characteristics:

  • no immediate player attention
  • no selected actors
  • no urgent incident chain
  • no core settlement bottleneck
  • stable ambient conditions

Inside a cool zone:

  • actors are mostly regional participants
  • travel advances in coarse steps
  • encounter checks draw from regional opportunity fields
  • household and social life advance on scheduled summaries or thresholds
  • ecology, depletion, traffic, and route safety update in aggregate

Cool should preserve causality and trend direction, not every gesture.

#11.12Cold Background

Cold background space still exists, but it should be handled by the cheapest durable model the game can trust.

Use cold background for:

  • remote wilderness with no active relevance
  • long-stable regions far from settlement influence
  • low-interest travel corridors with no named participants
  • dormant ecological recovery or seasonal drift

At cold background:

  • no embodied chunk state needs to remain live
  • actor state may rest until the next meaningful checkpoint
  • systems update through event-driven triggers, coarse pulses, or time-skip math
  • only durable consequences and broad pressure fields are preserved

The cold tier is not fake world deletion. It is deliberate non-obsessive bookkeeping.

#11.13Heat Promotion and Demotion Rules

Heat should change through explicit causes, not constant noisy reevaluation.

Promotion causes:

  • camera or player movement
  • unit selection
  • direct control
  • severe danger
  • quest activation
  • player pinning a person or site in the UI
  • shortage, attack, or blockage crossing an importance threshold
  • multiple meaningful actors converging on the same route or site

Demotion causes:

  • time since last attention grows
  • active danger resolves
  • no selected or story-important actor remains
  • local logistics return to normal
  • no unresolved incident chain persists

Important rule:

Demotion should usually be delayed and hysteretic.

The system should avoid:

  • hot to cool snap-downs the moment the camera moves away
  • actors flipping tiers every few seconds at a boundary
  • quest or aftermath scenes losing coherence because interest briefly dropped

#11.14Heat Is More Than Distance

Distance should matter, but it should not be the only input.

A better heat score should combine:

  • distance to camera or control anchor
  • player selection and pin state
  • actor importance
  • recent direct control
  • current danger
  • quest relevance
  • settlement economic centrality
  • infrastructure criticality
  • intersection density

This matters because:

  • a merchant convoy one region away may need to stay hot
  • an empty nearby hillside may be safe to cool
  • a grieving spouse in town may matter more than a random deer on screen edge

#11.15Granularity Rules by Heat Tier

The design should explicitly define what each heat tier is allowed to do.

focused

  • exact local movement
  • immediate sensing and reactions
  • granular need drift
  • tactical interruption handling
  • fine animation and action state

hot

  • short-segment travel
  • milestone-based task progress
  • identity-specific interruption resolution
  • short-window emotional and social aftermath
  • rapid but not frame-bound reconsideration

warm

  • checkpoint-based plan advancement
  • route transition checks
  • named participant incident resolution
  • summarized household and relationship propagation
  • compressed but actor-specific consequence writes

cool

  • region-level traffic and labor flow
  • aggregate opportunity and danger updates
  • periodic social and household summaries
  • broad stock and pressure propagation

cold background

  • sparse checkpoint math
  • season, depletion, and recovery drift
  • dormant state retention until new relevance appears

If a system cannot say what changes at each heat tier, it is not ready to scale.

#11.16Route Schema

Routes are important enough to deserve explicit representation rather than existing only as temporary paths.

Likely route fields:

  • route_id
  • source and destination refs
  • traversed region ids
  • segment list
  • road quality
  • terrain class
  • safety rating
  • traffic volume
  • escort expectation
  • seasonal modifiers

Routes are where:

  • hauling lives
  • escorts matter
  • predator pressure becomes gameplay
  • missing people become plausible

#11.17Site Schema

Important sites should also have persistent identity.

Examples:

  • quarry clusters
  • hunting grounds
  • ruins
  • shrines
  • bridges
  • camps
  • dens
  • watchtowers

Likely site fields:

  • site_id
  • site type
  • chunk or region placement
  • ownership or influence
  • resource profile
  • danger profile
  • discovery state
  • event hooks
  • depletion state

Sites are the anchors that connect terrain to labor, risk, and story.

#11.18Visibility and Knowledge Model

The player's knowledge of the world should be partially separate from the world's actual state.

Useful knowledge layers:

  • unseen
  • discovered
  • currently visible
  • stale knowledge
  • freshly reported knowledge

This allows:

  • uncertainty
  • scouting value
  • rumors and delayed information
  • routes that have changed since last visit

The world may know a bridge is damaged before the player does.

#11.19Generation Versus Persistence

The world architecture should separate:

  • generated baseline content
  • persistent modified state

Generated baseline includes:

  • terrain
  • base biome layout
  • initial site placement
  • broad ecological assumptions

Persistent modified state includes:

  • harvested resources
  • built structures
  • cleared dens
  • changed roads
  • discovered ruins
  • new settlements or outposts
  • event consequences

This lets the world stay large without requiring every untouched detail to be explicitly stored forever.

#11.20Region-Level Simulation Responsibilities

Regions should be the natural home for many offscreen systems, including:

  • predator density
  • weather pressure
  • ambient traffic
  • road safety drift
  • forage abundance
  • rumor propagation
  • low-fidelity encounter chance
  • background task continuity

This is why region design matters so much. A region is the bridge between the map and the simulation.

#11.21Boundary Crossing Rules

Actors, jobs, and events will constantly cross chunk and region boundaries.

The system should therefore treat boundaries as administrative, not magical.

Crossing a boundary should not:

  • reset a task
  • break a route
  • lose a reservation
  • detach an event from its participants

Instead, crossing should update references while preserving continuity.

#11.22Save/Load Requirements

The partition model must serialize cleanly.

At minimum, save state should preserve:

  • chunk modification state
  • region systemic state
  • route state
  • site state
  • embodied actor locations
  • compressed actor location abstractions
  • active events and jobs tied to partition references

This is especially important if the world later grows into a long-running campaign save.

#11.23Anti-Goals

Avoid these partition mistakes:

  • making chunks too semantically important
  • making regions so large they lose specificity
  • tying actor identity to loaded chunk presence
  • storing the same truth redundantly in too many layers
  • assuming greater world breadth means equal simulation everywhere
  • making route logic depend on full offscreen pathfinding every second

#11.24Game Development Expansion

The engine already owns the bounded chunk, region, route, Site, residency, heat, promotion, demotion, persistence, and selective-fidelity model. Phase 15 makes that model visibly connected through hierarchical inter-chunk traversal and resident-chunk terrain. Phase 18 expands regional knowledge, climate, ecology, and discovery. Phases 19-22 add settlements, institutions, narrative opportunities, factions, logistics, and conflict without changing chunk or region ownership. Phase 23 closes production-world budgets and content breadth.

12

#Ambient World Without Rival AI

The early game world should feel alive even before classic RTS opponents exist.

Sources of pressure and texture:

  • wildlife hunting and predation
  • dangerous monsters
  • weather and travel hardship
  • distance and logistics
  • disease, poisoning, injury, and scarcity
  • diplomacy and institutional requests
  • household needs and social consequences
  • exploration and event discovery

This allows the project to focus on systemic life and settlement drama before adding enemy civilizations.

13

#Direct Control Philosophy

Direct control exists so the player can step into the simulation when they want precision, ownership, or drama. It begins only after an explicit take-control action. Selecting or inspecting a person is observation and must not affect their behavior.

Good uses of direct control:

  • a hunt for food or rare reagents
  • escorting a merchant
  • answering a diplomatic summons
  • investigating danger on a route
  • scouting unknown territory
  • defending against predators or monsters
  • participating in key quest moments

Direct control should not be mandatory for every ordinary task. If manual play is always strictly optimal, the autonomous life-sim layer collapses into a micromanagement burden.

Target balance:

  • autonomy should handle daily life competently
  • player control should matter most in risky, emotional, rare, or high-stakes situations
14

#Direct Control Semantics

This section defines what direct control means in systemic terms.

It is not enough for the game to merely allow the player to click on a villager and move them around. The simulation needs a consistent rule for how player intent, villager identity, and world consequences interact.

#14.1Core Rule

Direct control should be treated as authoritative tactical guidance layered on top of an existing person, not as possession by a totally different game system.

That means:

  • the player can override immediate action
  • the villager keeps their identity, stats, traits, condition, and memories
  • outcomes are still filtered through who the villager actually is
  • once direct control ends, the villager returns to autonomous life carrying the consequences

The villager is not replaced by a puppet. They are being forcefully or cooperatively steered through a decisive period of life.

#14.2Entry and Exit Contract

Direct control has an explicit boundary:

  • clicking selects for observation
  • ordinary orders use assignment authority
  • Take Control requests direct authority through the normal command owner
  • the request may be rejected because of authority, state, distance, incapacity, or scenario rules
  • Release Control reconciles retained plans, jobs, needs, position, condition, and consequences

Camera focus, UI inspection, and selection markers are not gameplay pressure. They cannot alter motivation, emotion, work, or risk merely because the player is watching.

#14.3What Direct Control Should Change

When a villager is directly controlled, the game should allow the player to control:

  • movement and path choice
  • target priority
  • combat engagement
  • interaction timing
  • party composition for expeditions
  • whether to investigate, flee, press forward, or retreat
  • who responds to a situation

In practical terms, direct control should alter:

  • short-term action selection
  • short-term route choice
  • tactical risk tolerance
  • task sequencing in the immediate scene

#14.4What Direct Control Should Not Change

Direct control should not erase or bypass the villager's underlying personhood.

It should not directly change:

  • base stats
  • innate traits
  • learned tendencies already earned
  • relationship history
  • physical limitations
  • reputation already established
  • emotional condition already in effect

If a weak villager is player-controlled, they do not become secretly strong.

If a talkative fool is player-controlled, they may still embarrass the player in court.

If a cautious forager is player-controlled, they may still be slow to enter obvious danger.

The control model is:

Strong player override on action, soft persistence on interpretation and outcome.

In other words:

  • the player can tell the villager what to attempt
  • the villager's identity determines how well they do it, how they emotionally process it, and what consequences stick

This protects both sides of the game:

  • the RTS fantasy of meaningful command
  • the living-world fantasy of people remaining themselves

#14.6Command Authority Levels

It may help to think of control as several authority bands rather than one binary switch.

#14.6.11. Assignment Authority

The player sets a task or destination, but the villager executes autonomously.

Examples:

  • gather from this forest
  • deliver goods to that town
  • patrol this route

This is normal RTS/citybuilder control.

#14.6.22. Guided Control

The player directly steers moment-to-moment behavior, but the villager still expresses soft resistance through performance and outcome.

Examples:

  • lead three villagers on a boar hunt
  • escort a merchant through dangerous terrain
  • investigate a cave entrance

This is the project's default "micro adventure" mode.

#14.6.33. Hard Crisis Override

In emergencies, the player can issue immediate must-follow commands that suppress hesitation long enough to survive the scene.

Examples:

  • run now
  • fall back
  • attack this predator
  • carry this wounded person home

Even here, the villager's identity should still affect:

  • execution speed
  • morale aftermath
  • injury chance
  • memory formation

#14.7Control State Transitions

Villagers should have an explicit control-state transition model.

Useful states:

  • autonomous
  • assigned
  • directly_controlled
  • crisis_override
  • released_from_control

The transition out of direct control matters as much as the transition in.

When released, the villager should:

  • re-evaluate needs
  • re-evaluate safety
  • update memory and stress state
  • decide whether to resume prior duty, recover, report, or change behavior

This is how direct control episodes become biography instead of disconnected mini-games.

#14.8Direct Control and Plan State

A directly controlled villager should still retain a plan record, but the plan should be marked as temporarily superseded.

Suggested behavior:

  • store the prior autonomous plan
  • attach a temporary player-led plan or objective
  • allow interruptions and local tactical decisions during control
  • on release, reconcile old plan with new reality

Possible outcomes on release:

  • resume prior plan
  • abort prior plan
  • switch to recovery plan
  • switch to new opportunity plan
  • trigger settlement report or alert

#14.9Party Control

The design should assume that direct control often applies to small groups, not just single people.

A party should have:

  • a leader or player focal unit
  • member roles
  • cohesion rules
  • follow distance or formation behavior
  • shared travel intent
  • local assist logic

This matters because "select 3 villagers and go hunting" is a core use case, not an edge case.

Party members should still remain individual people with:

  • separate inventory
  • separate fear and injury
  • separate memory formation
  • separate relationship reactions to what happened

The party is a temporary coordination structure, not a merged unit.

#14.10Dialogue, Diplomacy, and Social Events

Direct control should not guarantee social success.

The player chooses:

  • who is present
  • what broad action to attempt
  • whether to push, flatter, threaten, apologize, or withdraw

The villager determines:

  • how well they express the intent
  • whether the other side is persuaded
  • whether an awkward trait creates a surprise outcome
  • what reputation consequences follow

This is important for preserving the "send the wrong villager to the king" fantasy.

Direct control lets the player pick the emissary and steer the scene. It should not erase the social risk of picking a fool, coward, brute, or motormouth.

#14.11Combat and Hunt Semantics

In combat or hunting, direct control should improve tactical precision but not guarantee clean execution.

Player control should help with:

  • positioning
  • target focus
  • retreat timing
  • formation spacing
  • use of terrain

Villager identity should still affect:

  • aim quality
  • reaction speed
  • panic under pressure
  • stamina burn
  • willingness to commit to danger

This creates a satisfying split:

  • player skill matters
  • villager capability still matters

#14.12Resistance, Obedience, and Tone

The game avoids heavy-handed refusal for ordinary direct control because constant "no" from villagers would feel terrible in an RTS-like interface.

A better approach is:

  • villagers usually obey
  • villagers differ in how effectively they obey
  • villagers may accumulate stress, fear, resentment, or admiration based on what the player puts them through

So the friction is mostly:

  • consequence friction
  • performance friction
  • aftermath friction

Not:

  • UI refusal spam

#14.13Memory Formation Under Control

Events that happen during direct control should be especially likely to become durable memories.

Examples:

  • first successful hunt
  • near-death escape
  • diplomatic humiliation
  • heroic rescue
  • witnessing a friend's death
  • carrying home the food that saved winter

This matters because direct control is where the player most strongly authors identity-shaping moments.

#14.14Direct Control and Story Priority

Recent direct control should produce two separate derived inputs rather than one durable story score: narrative presentation may treat the episode as recently relevant, and World may accept a time-bounded recent-control reason when deciding heat. The Actor does not own player interest or assign its own simulation tier.

Reasons:

  • the player is more likely to care what happens next
  • immediate aftermath is often narratively rich
  • relationships and memory updates are more likely to fire soon after

This supports the desired feeling of:

  • lead someone through an important episode
  • release them back into the world
  • later see how that episode changed their life

#14.15Offscreen Continuity After Control

Once the player stops controlling a villager, the simulation should continue with elevated fidelity for a while rather than instantly demoting them to generic abstraction.

That window should preserve:

  • short-term emotional aftermath
  • injury and exhaustion consequences
  • reporting or return behavior
  • household and relationship reactions
  • any newly altered route or danger preference

This is how the world avoids feeling hand-wavey after dramatic player action.

#14.16Failure and Fairness

Direct control must not become a trap where the player feels cheated because systemic identity overrides obvious tactical decisions too often.

Good fairness rules:

  • player input should matter immediately
  • trait and stat influence should be legible
  • bad outcomes should usually be explainable in hindsight
  • villagers should fail in-character, not arbitrarily

The player should be able to say:

  • I chose a risky plan
  • I sent the wrong person
  • they were exhausted
  • we entered predator territory unprepared

Not:

  • the game just decided no

Valid ordinary orders should therefore remain reliable. Actor identity affects execution speed, capability, morale, risk, consequences, and later interpretation. It must not create arbitrary ordinary-order refusal. Domain invalidity, incapacitation, or an explicitly declared critical safety rule may block or interrupt an order, but the owning system must return a visible reason.

Phase 6 must prove this with two Actors who have different owned capability, condition, or temperament facts. They execute the same valid command through the same command owner and produce different, explained performance or outcomes without either Actor receiving hidden command rules.

#14.17First Proof and Expansion Targets

Phase 4 proves direct control with:

  • leading one villager or a small Party to an authored Site
  • simple direct combat against wildlife
  • one noncombat traveler dispute where capability or trait facts affect an eligible outcome
  • one scouting or investigation order through observer knowledge

Phase 11 expands this command, Party, incident, and consequence foundation into multi-step escort, rescue, social, diplomatic, and institutional requests. Escort is not part of the first direct-control proof.

If these feel good, the rest of the system can expand from there.

15

#Autonomous Life Philosophy

Everyone in the settlement should have some systemic personhood. The world should be capable of producing meaningful developments without the player initiating every one of them.

Examples:

  • two villagers meet and grow close
  • a trader is delayed by danger on the road
  • a worker becomes more cautious after injury
  • a household struggles after losing a provider
  • a diplomatic mistake damages a political relationship

However, not every event deserves equal screen time. The game should distinguish between:

  • ambient story
  • playable story

#15.1Ambient Story

Things the world does on its own:

  • bonding
  • conflict
  • daily routines
  • small acts of aid
  • learned habits
  • household formation

#15.2Playable Story

Moments that become foreground because the player intervenes or consequences become important:

  • selected units are taken on a hunt
  • a named villager is sent to court
  • a dangerous trip becomes a rescue
  • a missing person matters to a family and supply chain

The player does not create all story. The player chooses where to place attention and force of will.

16

#Simulation Principle

The key simulation principle is:

Offscreen continuity should preserve causality, not necessarily every footstep.

The player should be able to leave a villager on a task, return later, and find a consistent, inspectable situation:

  • resources have been moved
  • travel took time
  • interruptions could have happened
  • danger could have changed the outcome
  • the person remains where their actions say they should be

The player does not need a frame-perfect replay of everything that happened offscreen. They need a world state that is believable, persistent, and derived from real rules.

17

#Simulation Tiers

The game requires selective simulation fidelity. A uniform full-resolution world sim will not scale.

#17.1Tier 1: High-Fidelity Simulation

Use for:

  • on-screen units
  • nearby chunks
  • selected units
  • recently observed or emotionally important entities
  • active combat or crisis

Tracked at rich detail:

  • exact position
  • pathing
  • animation or action state
  • inventory
  • current task step
  • nearby interactions
  • line-of-sight or local awareness
  • immediate combat and interruption behavior

#17.2Tier 2: Mid-Fidelity Simulation

Use for:

  • offscreen but still relevant individuals
  • recently interacted entities
  • units carrying out player-relevant work
  • routes and missions likely to be revisited soon

Tracked as individual actors, but not frame by frame:

  • destination and route intent
  • estimated travel progress
  • current task state
  • carried inventory
  • local risk exposure
  • interruptible milestones

These entities still exist as individuals. They can still be interrupted by meaningful events. They are compressed, not discarded.

#17.3Tier 3: Low-Fidelity Regional Simulation

Use for:

  • deep offscreen areas
  • low-importance wildlife and traffic
  • broad route and risk modeling
  • large world persistence beyond the active area

Simulate:

  • regional traffic and labor flow
  • predator or threat density
  • depletion and replenishment
  • weather and travel pressure
  • abstracted route use
  • background outcomes that can promote upward if they become meaningful

This tier should operate on regions of chunks rather than single chunks when necessary, because meaningful activity such as "village to quarry route" spans multiple local spaces.

18

#Promotion and Demotion

Demotion between tiers is not deletion. It is state compression.

Entities and events should move between tiers based on importance, not just a blunt timer.

Possible weighting factors:

  • recently seen by player
  • currently selected or recently controlled
  • belongs to the player settlement
  • in danger
  • carrying important cargo
  • involved in a social or political event
  • part of a household the player knows
  • connected to a quest, crisis, or unusual event
  • near active frontier or infrastructure

This keeps meaningful people and actions "warm" longer than irrelevant background motion.

19

#Intent-Driven Actor Model

Do not model behavior primarily as huge brittle event queues.

Prefer:

  • role
  • current goal
  • current plan
  • current state
  • constraints
  • memory
  • interruptibility

Example:

Instead of a long hard-coded event queue like:

  • walk to rock
  • arrive
  • mine
  • fill inventory
  • return
  • unload
  • repeat

Represent:

  • role: laborer
  • goal: maintain stone supply
  • plan: harvest at quarry A and return to stockpile B
  • state: traveling / harvesting / returning / fleeing / idle
  • constraints: hunger, safety, load, daylight, orders

This allows replanning when:

  • the rock is exhausted
  • danger appears
  • inventory priorities change
  • the villager becomes injured or distracted
20

#AI and Decision Framing

The concept has roots in hierarchical task networks and Dijkstra maps. Those ideas remain useful if they are treated as interpretable decision tools rather than magic intelligence.

#20.1HTN Value

HTN-style decomposition gives legible intent:

  • I am hungry
  • I need food
  • nearest known safe source
  • inspect if needed
  • eat

This matters because the player should be able to understand behavior, infer motives, and trust that the world runs on readable rules.

In this project, HTN decomposition should usually begin from active needs, obligations, or emotionally charged motivations rather than abstract job labels alone.

Examples:

  • I am hungry -> acquire food -> choose safe nearby source -> inspect -> eat
  • I am exhausted -> find bed or shelter -> return home if practical -> sleep
  • I am lonely and off duty -> seek bonded person -> visit household or tavern -> socialize
  • I am angry and recently insulted -> confront target if safe -> vent, escalate, or withdraw depending on temperament
  • I am curious and near an unknown site -> investigate if risk is tolerable -> mark discovery or retreat

#20.2Pressure Curves, Root Choice, and Method Choice

Needs and emotional pressures must not use one global reaction threshold. Worldforge uses one shared pressure-response evaluator with actor- or source-owned curve data. The evaluator accepts a bounded pressure, a reviewed response curve, an action score, a critical pressure, and a clear pressure. It returns the raw pressure, curved score, and action, critical, and clear crossings in a detached trace. Hunger, rest, safety, warmth, and companionship use this contract. Later fear, grief, anger, duty, and relationship pressures should use the same evaluator without moving their authoritative facts into a global AI owner.

The layers have separate jobs:

  • needs, affect, memories, relationships, rumors, and events own the facts that create pressure
  • the shared curve evaluator turns those facts into comparable, inspectable response values
  • IAUS ranks eligible root concerns, such as work, hunger, safety, or companionship
  • shallow HTN decomposition selects an interpretable method for the chosen root
  • the actor retains the selected commitment and current safe interruption point
  • Work, Resource, World, and other domain owners execute and validate the method's steps

This separation allows two people to react differently to the same raw fact. A fearful actor may cross the action score quickly after a credible wolf rumor. A brave actor may retain work until the threat becomes critical. A recent breakup may add a strong companionship or grief pressure for one actor while another actor's traits, relationships, and coping tendencies produce a slower curve. The event or relationship system owns the causal shock and its decay. The curve system does not store a second copy of the breakup, rumor, or relationship.

#20.3Inherited Baselines and Individual Temperament

Pressure responses should be authored as reusable population templates, not hand-tuned for every person. A template defines the baseline curves and the maximum permitted variation for each drive. When a person is created, the actor system deterministically generates compact hunger, rest, safety, warmth, and companionship sensitivity coefficients from the population seed, stable actor ID, template ID, and reviewed generator version. Two people may therefore inherit the same baseline_adult template while crossing action or critical pressure at different times.

The generated coefficients are bounded. They adjust the pressure supplied to the shared curve evaluator but do not create separate behavior branches or allow unlimited modifier stacking. The inspector must show the raw pressure, sensitivity coefficient, adjusted pressure, template ID, generator version, and generation key so the difference remains explainable.

Templates are immutable authoring data after roster creation. The actor owns the materialized baseline, generated temperament, and provenance in runtime and save state. Saving an existing person stores those values rather than only a random seed; later template balancing or generator changes therefore cannot silently rewrite that person's behavior. Newcomers can use the current template version. Phase 10 lineage proved bounded parental variation through the same actor-owned coefficient record rather than introducing another response system; Phase 17 may tune the population-facing balance without changing that owner.

This variation changes tendencies, not destiny. Skills, relationships, memories, location, opportunities, possessions, health, and incidents provide the experiences that make lives diverge. Temperament changes how a person responds to those experiences.

#20.4Commitments and Safe Interruption Points

Crossing an action score does not automatically abandon the current task. Every executable method declares its interruption policy:

  • immediate safety override for critical danger, incapacitation, or other hard failures
  • finish the current atomic Work step, then reconsider
  • continue until a named checkpoint, such as delivery, tool return, or shift boundary
  • use an on-person solution, such as eating an unreserved carried meal

For example, ordinary hunger during work may select finish current Work step -> eat carried meal -> resume retained job. The actor keeps the Job and Work-task checkpoint identity while the method is pending. Resource validates that the meal is real, belongs to the actor, and is not cargo in transit for active Work. Consumption and hunger relief commit as one coordinated transaction. Only critical hunger uses the interruption safety override. An idle actor with the same meal may select eat carried meal immediately without manufacturing a Work checkpoint. This prevents actors from dropping tools at the first threshold while preserving urgent failure behavior.

#20.5Dijkstra / Influence Field Value

Use field-based pressures as decision context rather than a single totalizing AI system.

Examples of useful fields:

  • food attractiveness
  • safety
  • shelter
  • social pull
  • authority pull
  • profit opportunity
  • fear
  • curiosity
  • comfort or home pull

Different people weight the same world differently based on who they are.

These fields should not only represent external resources or threats. They should also serve as the spatial expression of internal need.

Examples:

  • high hunger increases attraction to known food sources, kitchens, and households with meals
  • high fatigue increases shelter pull, home pull, and avoidance of long exposed travel
  • loneliness increases social pull toward bonded actors and populated safe spaces
  • irritability lowers tolerance for crowding, delays, and hostile social presence
  • curiosity raises attraction to unknown sites, rumors, tracks, and recent disturbances

The important design rule is:

internal state creates pressure, world fields provide options, and HTN chooses interpretable plans from their overlap.

21

#Needs, Affect, and Thought Model

If villagers are meant to feel like real lives rather than animated job slots, they need a layered internal-state model that can produce understandable motivation.

The project should avoid treating "thoughts" as freeform hidden text or magical black-box cognition.

Instead, model internal life as:

  • needs
  • affect
  • appraisals
  • focus

This gives enough depth to drive behavior while remaining inspectable and CPU-safe.

#21.11. Needs

Needs are ongoing pressures tied to body, comfort, social life, and meaning.

Candidate baseline needs:

  • hunger
  • thirst later if the survival model wants it
  • warmth
  • cooling or heat relief
  • rest
  • sleep
  • safety
  • social contact or loneliness relief
  • autonomy or frustration tolerance
  • comfort
  • curiosity
  • duty or obligation fulfillment

Important rule:

not every need must be equally simulation-critical.

For example:

  • hunger, temperature, sleep, health, and safety directly affect survival and work
  • loneliness, curiosity, comfort, and frustration shape behavior tone and story texture

#21.22. Affect

Affect is the villager's short- to medium-term emotional state.

Useful affect channels:

  • happiness
  • sadness
  • anger
  • fear
  • irritability
  • shame
  • confidence
  • grief
  • hope

Affect should be influenced by:

  • unmet or fulfilled needs
  • recent events
  • memories
  • bonds
  • traits
  • current success or failure

Affect is not the same thing as trait.

Examples:

  • a humble villager can still become angry
  • a timid villager can still become hopeful
  • a talkative villager can still become withdrawn during grief

#21.33. Appraisals

Appraisals are the lightweight "thought-like" interpretation layer.

They are not full natural language thoughts. They are structured judgments such as:

  • this place is unsafe
  • that person is comforting
  • this task is urgent
  • I am too tired for this
  • this unknown site is tempting
  • the player is forcing a risky decision

Appraisals should be generated from:

  • current needs
  • affect
  • memory
  • role obligations
  • nearby world conditions
  • relationship state

This is the layer that makes villagers feel understandable instead of random.

#21.44. Focus

Focus is what currently dominates attention.

At any moment, a villager should usually have one or a few top active concerns, such as:

  • satisfy hunger
  • return to household
  • finish assigned hauling job
  • avoid predator corridor
  • find company
  • cool down before collapse
  • investigate suspicious tracks

Focus helps:

  • choose between competing HTN roots
  • explain visible priorities to the player
  • compress offscreen decisions without storing every mental step

#21.5Practical Decision Flow

A useful actor loop is:

  1. update needs and affect
  2. generate appraisals from internal state + world state
  3. rank current focus candidates
  4. pick or revise HTN root goal
  5. use influence fields and local context to choose a concrete plan
  6. execute until interrupted, fulfilled, or reprioritized

This gives "thoughtful" behavior without pretending every villager is running a giant cognition simulator.

#21.6Need Categories

Needs are grouped by behavioral role.

#21.6.1Survival Needs

  • hunger
  • warmth
  • cooling
  • sleep
  • rest
  • health preservation
  • immediate safety

These needs deserve the strongest behavioral authority.

#21.6.2Social Needs

  • loneliness relief
  • belonging
  • affection
  • status sensitivity later if class/politics deepen

These needs make people feel alive and help relationships matter offscreen.

#21.6.3Psychological Needs

  • curiosity
  • comfort
  • autonomy
  • emotional regulation

These should add variation and story rather than constantly overriding settlement function.

#21.6.4Duty Needs

  • obey command
  • fulfill household duty
  • maintain role identity
  • answer urgent institutional demands

These needs are important because villagers are not solitary animals. They live inside social structures.

#21.7Behavior Authority Rules

Not every need should be allowed to break plans equally.

A useful authority hierarchy is:

  1. acute survival crisis
  2. severe safety or health danger
  3. hard player or institutional override
  4. urgent body maintenance
  5. active assigned duty
  6. social and emotional needs
  7. curiosity and ambient preference

This lets villagers feel alive without making them impossible to rely on.

Example:

  • mild loneliness should not cancel a hauling task
  • severe exhaustion may absolutely cancel it
  • curiosity may reroute a scout near ruins, but not a starving laborer carrying winter food

#21.8Need Thresholds and Curves

Needs should not behave as flat bars with simple linear importance.

Prefer threshold bands such as:

  • nominal
  • elevated
  • urgent
  • critical

This makes behavior easier to tune and explain.

Example hunger effects:

  • nominal: no major plan disruption
  • elevated: food sources gain more attraction
  • urgent: villager seeks food soon unless under strong duty pressure
  • critical: villager may abandon nonessential work

The same principle applies to sleep, heat, cold, fear, and grief.

#21.9Affect and Memory Feedback

The point of the model is not only to satisfy needs. It is to let life experiences alter future inner state.

Examples:

  • repeated hunger increases food anxiety and hoarding tendencies
  • repeated cold exposure increases shelter-seeking and firewood sensitivity
  • repeated loneliness may deepen sadness or attachment-seeking
  • successful hunts may increase confidence and reduce fear on future expeditions
  • public humiliation may increase shame, irritability, or noble avoidance

This is where memories, learned tendencies, and current affect lock together.

#21.10UI and Explainability Requirement

The player should never need to guess blindly why someone did something strange.

Inspectors should be able to surface:

  • dominant needs
  • current mood or affect
  • active focus
  • top appraisals
  • why a plan changed

Example readable explanations:

  • Hungry and tired. Returning home before resuming quarry work.
  • Avoiding the north road because of prior wolf attack.
  • Curious about nearby ruins, but staying on route due to escort duty.

#21.11CPU Safety Rule

This inner-life model must remain cheap.

Do not run full expensive reevaluation every frame for every villager across the world.

Instead:

  • embodied actors update frequently
  • compressed actors update at decision checkpoints
  • regional actors update only when meaningful thresholds, route milestones, or intersections occur

The game should preserve motivational continuity, not perpetual brain simulation.

22

#Personhood Model

Every person should have at least a minimal systemic identity, but that identity should be composed from distinct layers rather than one overloaded trait bucket.

#22.11. Core Stats

Slow-changing capability values:

  • strength
  • dexterity
  • intelligence
  • charisma or social grace
  • endurance
  • perception

These should affect:

  • labor speed
  • combat performance
  • survival odds
  • crafting quality
  • social event outcomes
  • task suitability

#22.22. Innate Traits

Stable or semi-stable personality tendencies:

  • brave
  • timid
  • gluttonous
  • humble
  • talkative
  • stubborn
  • sharp-eyed
  • frail

These shape preferences, interpretations, and event modifiers.

#22.33. Learned Tendencies

Habits or heuristics gained from experience:

  • checks fruit for rot
  • avoids wolf territory
  • prefers roads
  • distrusts nobles
  • keeps distance in combat

This is the "life changed me" layer. It should emerge from real events rather than arbitrary level-up menus alone.

#22.44. Needs and Drives

Ongoing motivational pressures:

  • hunger
  • warmth
  • cooling
  • rest
  • sleep
  • safety
  • loneliness
  • curiosity
  • comfort
  • duty

These should act as the main root inputs for plan selection and replanning.

#22.55. Affect

Short- to medium-term emotional condition:

  • happiness
  • sadness
  • anger
  • irritability
  • fear
  • shame
  • confidence
  • grief

Affect should alter judgment, not replace personality.

#22.66. Memories

Concrete remembered experiences:

  • was poisoned by rotten fruit
  • survived a boar hunt
  • fled from a tiger
  • impressed the king
  • lost a spouse in winter

Memories should influence future behavior and support narrative surfacing.

#22.77. Bonds

Relationship state with people, families, groups, and institutions:

  • affinity
  • trust
  • fear
  • duty
  • resentment
  • attraction
  • loyalty

#22.88. Role

Settlement or social role:

  • laborer
  • hunter
  • merchant
  • envoy
  • parent
  • commander

Role shapes what the settlement expects from a person, even when their personal inclinations differ.

#22.99. Reputation

How broader groups perceive someone:

  • court reputation
  • household reputation
  • village reputation
  • trade reputation

#22.1010. Condition

Current physical and emotional state:

  • hungry
  • sick
  • injured
  • grieving
  • confident
  • exhausted

Condition should be treated as the live operational layer produced by needs, affect, health, and temporary circumstance.

23

#Villager Schema

This section translates the personhood model into a more concrete logical schema for a villager or other human actor.

The goal is not to lock in an exact save-file format yet. The goal is to define the data domains that must exist if villagers are to behave like persistent people rather than disposable worker units.

#23.1Schema Design Goals

The villager schema should:

  • preserve identity across simulation tiers
  • support both autonomous and directly controlled behavior
  • distinguish stable personality from temporary state
  • support causality, biography, and story surfacing
  • remain compact enough to scale beyond a tiny population

#23.2Schema Categories

The schema is easiest to reason about if grouped into stable categories rather than one giant flat object.

#23.2.11. Identity

Defines who this villager is at the most basic level.

Suggested fields:

  • villager_id
  • display_name
  • sex or gender presentation if the game needs it
  • birth_time or age band
  • origin_settlement_id
  • culture_id or social background later, if relevant
  • family_line_id if heredity matters
  • is_named or story-surfaced flag

Purpose:

  • supports uniqueness
  • supports biography
  • supports relationship references
  • supports inheritance or household lineage later

#23.2.22. World Affiliation

Defines where the villager belongs socially and politically.

Suggested fields:

  • current_settlement_id
  • household_id
  • faction_id
  • residence_building_id
  • work_group_id
  • command_group_id
  • formal_role
  • informal_role_tags

Purpose:

  • tells the sim who claims the villager
  • supports job assignment and lodging
  • supports diplomacy and loyalty

#23.2.33. Capability Stats

Defines baseline capability rather than mood or personality.

Suggested fields:

  • strength
  • dexterity
  • intelligence
  • charisma
  • endurance
  • perception

Optional derived stats:

  • move_speed
  • carry_capacity
  • gather_efficiency
  • combat_rating
  • craft_quality
  • social_confidence

Purpose:

  • supports task performance
  • supports combat and survival
  • supports event resolution and role fit

#23.2.44. Stable Traits

Defines relatively persistent personality or temperament.

Suggested fields:

  • innate_traits
  • temperament_flags
  • quirk_tags

Example values:

  • brave
  • timid
  • humble
  • talkative
  • stubborn
  • gluttonous
  • sharp-eyed
  • frail

Purpose:

  • modifies decision weighting
  • influences social outcomes
  • creates personality distinction

#23.2.55. Learned Tendencies

Defines habits and heuristics acquired through life experience.

Suggested fields:

  • learned_tendencies
  • learned_risk_biases
  • learned_preferences
  • learned_avoidances

Example values:

  • checks fruit for rot
  • avoids north forest road
  • prefers guarded routes
  • distrusts nobles
  • keeps distance in combat

Purpose:

  • lets life reshape future choices
  • creates legible adaptive behavior without requiring opaque machine learning

#23.2.66. Needs and Current Condition

Defines the villager's present body and emotional condition.

Suggested fields:

  • needs_state
  • affect_state
  • health
  • injuries
  • illnesses
  • active_conditions
  • recent_shocks
  • dominant_focus
  • recent_appraisals

Example needs_state values:

  • hunger
  • warmth
  • cooling
  • rest
  • sleep_pressure
  • safety_urge
  • social_need
  • comfort_need
  • curiosity_drive
  • duty_pressure

Example affect_state values:

  • happiness
  • sadness
  • anger
  • fear
  • irritability
  • confidence
  • grief

Purpose:

  • drives moment-to-moment priorities
  • constrains task suitability
  • explains replanning and strange-looking behavior
  • affects direct control and autonomy alike

#23.2.77. Relationships and Social Bonds

Defines the villager's connection to other people and institutions.

Suggested fields:

  • bond_map
  • household_relations
  • romantic_interest_ids
  • dependents
  • guardians
  • institution_reputation

A bond record might include:

  • target actor or group id
  • affinity
  • trust
  • fear
  • resentment
  • attraction
  • duty
  • recent interaction markers

Purpose:

  • makes loss and favor meaningful
  • allows unscripted household formation
  • affects diplomacy, loyalty, and social event outcomes

#23.2.88. Memory and Biography

Defines what the villager has lived through and what the game may later surface.

Suggested fields:

  • memory_entries
  • biography_flags
  • notable_firsts
  • trauma_markers
  • reputation_moments

A memory entry might include:

  • memory_id
  • type
  • timestamp
  • location_ref
  • other_actor_refs
  • intensity
  • effects
  • visibility

Purpose:

  • explains why behavior changed
  • supports narrative surfacing
  • supports player inspection of who someone has become

#23.2.99. Role and Duty State

Defines what the settlement expects from the villager right now.

Suggested fields:

  • primary_role
  • secondary_roles
  • assigned_job
  • priority_overrides
  • restricted_duties
  • mobilization_status
  • current_order_source

Purpose:

  • separates personal inclination from social obligation
  • supports chain-of-command and reassignment
  • lets the player understand why a villager is doing what they are doing

#23.2.1010. Task and Plan State

Defines what the villager is actively trying to do.

Suggested fields:

  • goal
  • plan_id
  • plan_summary
  • current_state
  • next_milestone
  • fallback_plan
  • interruptibility
  • last_replan_time

Purpose:

  • supports the intent-driven actor model
  • survives simulation tier changes
  • allows offscreen continuity without storing every tiny action

#23.2.1111. Spatial and Travel State

Defines where the villager is and how location should be interpreted.

Suggested fields:

  • location_mode
  • chunk_id
  • region_id
  • local_position when fully embodied
  • route_id
  • route_progress
  • destination_ref
  • travel_state

Purpose:

  • supports tier promotion and demotion
  • lets offscreen travelers remain locatable without exact constant pathing

#23.2.1212. Inventory and Equipment

Defines what the villager carries and uses.

Suggested fields:

  • inventory_slots
  • equipped_items
  • carried_resources
  • currency
  • food_on_person
  • tools
  • weapons
  • armor
  • quest_items

Purpose:

  • affects work, travel, combat, trade, and survival
  • creates continuity between player-led missions and autonomous routines

#23.2.1313. Control and Narrative References

The Actor record stores only stable references needed to preserve its current control and causal state. It does not own a combined story-importance or player-interest score.

Relevant facts may include:

  • current control authority and order source
  • retained incident, memory, relationship, obligation, and consequence references
  • the tick and reason for the most recent accepted control transition

Player favorite and pin state belongs to player-profile presentation data. Narrative salience is derived from owned incidents, memories, relationships, obligations, and recent control. UI may rank detached facts for presentation. World validates explicit promotion reasons and remains the only owner of heat and residency state.

#23.3Minimal Required Record

The leanest villager record includes at least:

  • unique identity
  • affiliation
  • stats
  • stable traits
  • current condition
  • current role
  • current plan state
  • spatial abstraction
  • inventory summary
  • relationship references
  • at least a lightweight memory log

Without those fields, the villager stops being a person and starts collapsing back into a generic worker token.

#23.4Example Logical Shape

This is not final serialization, just a reference shape for discussion:

{
  "villager_id": "villager_00182",
  "display_name": "Joren",
  "current_settlement_id": "settlement_riverbend",
  "household_id": "household_fen_03",
  "primary_role": "laborer",
  "stats": {
    "strength": 6,
    "dexterity": 4,
    "intelligence": 3,
    "charisma": 5,
    "endurance": 7,
    "perception": 4
  },
  "innate_traits": ["humble", "talkative"],
  "learned_tendencies": ["checks_fruit_for_rot", "avoids_north_road_at_night"],
  "condition": {
    "health": 0.91,
    "needs_state": {
      "hunger": 0.34,
      "warmth": 0.12,
      "cooling": 0.08,
      "rest": 0.42,
      "sleep_pressure": 0.37,
      "safety_urge": 0.21,
      "social_need": 0.29,
      "comfort_need": 0.24,
      "curiosity_drive": 0.18,
      "duty_pressure": 0.63
    },
    "affect_state": {
      "happiness": 0.41,
      "sadness": 0.12,
      "anger": 0.06,
      "fear": 0.19,
      "irritability": 0.14,
      "confidence": 0.38
    },
    "dominant_focus": "return_stone_before_resting",
    "recent_appraisals": [
      "work_is_important",
      "getting_tired",
      "north_road_feels_unsafe_after_dark"
    ],
    "active_conditions": ["minor_limp"]
  },
  "relationships": {
    "bond_map": [
      {
        "target_id": "villager_00077",
        "affinity": 0.72,
        "trust": 0.66,
        "attraction": 0.41
      }
    ]
  },
  "task_state": {
    "goal": "maintain_stone_supply",
    "plan_id": "plan_quarry_cluster_north",
    "current_state": "returning",
    "next_milestone": "unload_at_stockpile_02",
    "interruptibility": "high"
  },
  "spatial_state": {
    "location_mode": "compressed_active",
    "region_id": "region_riverbend_north",
    "route_id": "route_village_to_quarry_n1",
    "route_progress": 0.63,
    "destination_ref": "stockpile_02"
  },
  "inventory": {
    "carried_resources": [
      { "resource": "stone", "amount": 14 }
    ],
    "tools": ["iron_pick"],
    "food_on_person": 1
  },
  "memory_entries": [
    {
      "memory_id": "mem_18822",
      "type": "wolf_attack_survived",
      "intensity": 0.62,
      "effects": ["risk_bias_north_road_up"]
    }
  ]
}

#23.5Design Notes

Important schema rules:

  • do not store everything as a trait
  • do not store every tiny past action forever
  • keep temporary condition separate from personality
  • keep needs and affect separate from stable traits
  • keep appraisals and focus lightweight rather than trying to store full prose thoughts
  • keep memory separate from reputation
  • keep plan state separate from role
  • keep direct-control metadata separate from diegetic identity

This separation is what makes the schema scalable and interpretable.

24

#DNA and Inheritance

The original concept uses "DNA" as a way to express what defines a person and how experience alters them. The implementation separates this into:

  • inherited or generated baseline tendencies
  • life-acquired tendencies and memories
  • numeric capability and progression

Inherited variation includes:

  • stat tendencies
  • some stable temperament traits
  • family resemblance markers

Non-heritable components include:

  • specific memories
  • learned situational heuristics
  • current relationships
  • temporary conditions

This separation keeps the system legible and prevents "everything is DNA" from becoming an unusable category.

25

#Relationship and Life Progression

The world allows unscripted developments between people, represented as stateful systems rather than infinitely bespoke stories.

Example relationship stages:

  • strangers
  • acquaintance
  • favorable impression
  • recurring contact
  • attachment
  • courtship
  • partnership
  • shared household
  • children

These states should be influenced by:

  • proximity and repeated encounters
  • compatible traits
  • mutual aid
  • shared adversity
  • household needs
  • player intervention

This is not intended to be a dating sim. It is meant to make households, families, and emotional stakes feel real.

26

#Event and Narrative Structure

Narrative should emerge from the combination of simulation and structured event templates.

Avoid:

  • infinite bespoke branching authored for every possible person

Prefer:

  • structured event templates
  • parameterized by who is involved
  • filtered through traits, memories, stats, reputation, and current politics

Example:

The king summons the player's settlement.

Relevant evaluated inputs:

  • who is sent
  • what force accompanies them
  • prior reputation
  • envoy intelligence and charisma
  • traits such as humble or motormouth
  • current mood of the court
  • chance or fate modifiers

Possible outcomes:

  • court intimidation
  • offense
  • amusement
  • respect
  • unexpected trust
  • political suspicion

The narrative layer should present the result clearly, but the underlying logic should remain systemic rather than fully hand-authored.

27

#Quest and Event Architecture

This section defines how quests, incidents, discoveries, and social scenes should plug into the living simulation.

The project should not treat quests as a separate disconnected content track pasted on top of the world. Quests and events should arise from, react to, and permanently alter the same systems that govern villagers, routes, resources, danger, and relationships.

#27.1Architectural Goal

The quest/event system should:

  • generate meaningful story from simulation state
  • allow authored content to enter the world without breaking systemic continuity
  • support both ambient incidents and player-centered adventures
  • preserve consequences after the "event scene" ends

The system should feel like:

  • the world is producing events
  • the player is stepping into some of them
  • authored beats are shaping possibilities, not suspending reality

#27.2Three Narrative Sources

The game supports three main sources of quest and event content.

#27.2.11. Pure Systemic Events

These are generated directly from world state and simulation intersections.

Examples:

  • a villager is attacked on a road
  • a household runs short on food
  • two people form a bond after mutual aid
  • predators begin stalking a trade corridor
  • a worker goes missing

These require little or no authored narrative framing to exist.

#27.2.22. Structured World Events

These use templates triggered by conditions in the simulation.

Examples:

  • the king sends a summons
  • a merchant requests escort
  • a shrine is discovered in the woods
  • a traveler arrives with a rumor
  • a nearby town asks for aid

These are partially authored but still parameterized by:

  • who is involved
  • where it happens
  • what the current political and economic context is
  • what traits or memories the actors bring into the scene

#27.2.33. Handcrafted Quest Arcs

These are rarer authored sequences with stronger bespoke structure.

Examples:

  • slay the dragon
  • investigate a cursed ruin
  • recover a lost banner tied to a local lineage
  • negotiate a treaty with a nearby power later

Even these should still read and write to the same world state rather than operating in a sealed narrative bubble.

#27.3Event Model

An event should not simply be a pop-up. It should be a stateful world object or record with:

  • trigger conditions
  • participant rules
  • location or region relevance
  • urgency
  • visibility rules
  • possible resolutions
  • world consequences

At minimum, an event record should answer:

  • what is happening
  • why it is happening
  • who can respond
  • how long it remains relevant
  • what changes if ignored
  • what changes if completed, failed, or diverted

#27.4Quest Model

A quest should be understood as a durable chain of related event states rather than a single scripted mission blob.

A quest may contain:

  • one or more event nodes
  • one or more travel segments
  • optional combat or social scenes
  • branching consequences
  • persistent state across pauses and interruptions

This matters because the player may:

  • leave mid-quest
  • send different people than originally intended
  • allow autonomous continuation or neglect
  • return later to an evolved situation

#27.5Event Lifecycle

A useful event lifecycle is:

  1. dormant
  2. triggered
  3. surfaced or hidden
  4. engaged
  5. resolved
  6. persisted as aftermath

#27.5.1Dormant

The template exists as a possibility but is inactive.

#27.5.2Triggered

World conditions satisfy the activation rules.

#27.5.3Surfaced or Hidden

The event may become:

  • player-visible
  • locally visible only
  • background-only for now

Not every triggered event should immediately interrupt the player.

#27.5.4Engaged

The event becomes actively processed by:

  • direct player response
  • autonomous villager response
  • timed world escalation

#27.5.5Resolved

The event reaches an outcome state.

#27.5.6Persisted as Aftermath

Its consequences remain in:

  • memory
  • reputation
  • resources
  • relationships
  • geography
  • future event eligibility

#27.6Trigger Types

Events and quests should be able to trigger from multiple classes of conditions.

Useful trigger classes:

  • location discovery
  • actor state thresholds
  • relationship thresholds
  • settlement need thresholds
  • time or season
  • route danger
  • prior event completion
  • institutional request
  • rumor propagation
  • rare chance under specific conditions

Examples:

  • entering a ruin region with a perceptive scout
  • food stores falling below winter reserve
  • a villager surviving repeated predator attacks
  • the court hearing of your settlement's rise
  • repeated merchant traffic making a road a bandit target later

#27.7Participant Selection

Events should not assume a fixed hero.

They should define who may participate through selection rules such as:

  • any villager
  • any envoy-capable villager
  • party with hunting tools
  • adult household member
  • settlement leader or designated delegate later
  • anyone physically present when the event fires

This is essential to the project's promise that:

  • who you send matters
  • who happened to be there matters
  • ordinary people can become story people

#27.8Event Input Domains

When evaluating an event, the system should read from real simulation domains.

Useful inputs:

  • actor stats
  • traits
  • learned tendencies
  • memories
  • relationships
  • reputation
  • current condition
  • inventory and tools
  • travel route and region danger
  • settlement status
  • season or weather
  • prior event history

This prevents event outcomes from feeling detached from the rest of the game.

#27.9Resolution Modes

Events should support more than one type of resolution.

Useful resolution modes:

  • direct control scene
  • tactical combat
  • social choice or diplomacy scene
  • autonomous resolution
  • timer-based world outcome
  • deferred follow-up event

Examples:

  • a boar hunt becomes a direct control encounter
  • a court summons becomes a social resolution scene
  • a missing person alert may resolve autonomously if not personally followed
  • a discovered ruin may sit dormant until someone chooses to explore it

#27.10Ambient Versus Foreground Events

The event architecture should strongly distinguish between:

  • ambient events
  • surfaced events
  • foreground quests

#27.10.1Ambient Events

These shape the world but may never get a full UI moment.

Examples:

  • two villagers become closer
  • a worker starts avoiding a road
  • a household falls into mild stress

#27.10.2Surfaced Events

These deserve player awareness but not necessarily immediate manual intervention.

Examples:

  • merchant asks for escort
  • route becomes unsafe
  • local shrine rumor spreads

#27.10.3Foreground Quests

These are events the player actively takes ownership of.

Examples:

  • take three villagers to hunt the boar
  • send an emissary to answer the king
  • follow the trail to the missing worker
  • investigate a dragon threat

This layering keeps the world story-rich without spamming the player.

#27.11Escalation and De-Escalation

Events should be able to move up and down in dramatic intensity.

Examples of escalation:

  • rumor becomes request
  • request becomes crisis
  • crisis becomes quest
  • offscreen danger becomes on-screen encounter

Examples of de-escalation:

  • ignored event expires quietly
  • resolved danger becomes reputation or memory only
  • unfinished expedition returns to ambient state

This allows the narrative system to breathe instead of only ever increasing drama.

#27.12Event Consequence Model

Every meaningful event should be able to write consequences into at least one simulation domain.

Possible consequence domains:

  • actor memory
  • relationship change
  • reputation change
  • injury or death
  • inventory and resources
  • settlement need or pressure
  • route risk
  • institutional stance
  • unlocked future events
  • biome or site state

This is the heart of the whole system.

If an event does not alter the ongoing world in some meaningful way, it is probably flavor text rather than a quest/event worth simulating deeply.

#27.13Rumors, Discovery, and Information Spread

The player should not necessarily know every event the moment it triggers.

Information should sometimes arrive through:

  • direct witnessing
  • returning participants
  • household gossip
  • merchants or travelers
  • scouts
  • formal messages

This supports a world that feels larger than the player's immediate camera.

It also gives room for:

  • partial information
  • false confidence
  • delayed response
  • mystery and discovery

#27.14Failure, Neglect, and Divergence

Quests and events should support meaningful non-completion.

Possible non-success states:

  • ignored
  • expired
  • failed
  • partially completed
  • redirected into a new event

Examples:

  • you ignore the summons and court opinion worsens
  • you fail to escort the merchant and trade trust drops
  • you arrive late and find only evidence of what happened
  • the dragon kills livestock before the hunt begins

The system should not assume the player must or can do everything.

#27.15Direct Control Integration

The event architecture should explicitly support handoff into direct control.

A foreground event may:

  • nominate preferred participants
  • suggest a party composition
  • reserve travel goals
  • warm nearby simulation
  • create encounter nodes along a route

When direct control ends, the event should:

  • re-read participant state
  • update consequences
  • continue, branch, or resolve

This is how the quest system and villager biography stay welded together.

#27.16Job System Integration

Events and quests should be able to create, suppress, or reprioritize jobs.

Examples:

  • a summons creates an envoy preparation job
  • a missing person event creates a search job
  • a dragon threat increases livestock protection jobs
  • a trade request creates gather and hauling jobs

This prevents the narrative layer from floating above settlement life.

#27.17Persistence Requirements

Quest and event state must persist cleanly across:

  • save/load
  • simulation tier changes
  • camera departure
  • participant reassignment
  • partial completion

An unresolved event should not forget:

  • who was involved
  • what has already happened
  • what deadlines still matter
  • what world facts have changed so far

#27.18Anti-Goals

Avoid these traps:

  • quests that ignore who the participants actually are
  • event popups detached from simulation state
  • endless urgency spam
  • authored arcs that reset world consequences when complete
  • events that require a chosen hero and break if normal villagers are used
  • flavor events that produce no lasting effect

#27.19Game Development Expansion

The engine already owns bounded Incidents, Quests, participants, consequences, memory, reputation, knowledge, Parties, travel interruption, rescue, diplomacy, and persistence. Game Development expands that foundation in dependency order:

  • Phase 18 composes travel, discovery, danger, uncertainty, and return into expedition incidents.
  • Phase 20 proves civic requests, evidence, obligations, diplomacy, and institutional consequence.
  • Phase 21 owns the complete narrative loop: systemic events, structured templates, dialogue,

interruptible quests, autonomous and neglected outcomes, personal adventures, handcrafted arcs, repetition control, and durable aftermath.

  • Phase 22 applies the same narrative and consequence contracts to conflict, occupation, loss, and

recovery.

  • Phase 23 broadens validated narrative content and builds only the authoring tools justified by

repeated production work.

28

#Ambient Story vs Playable Story

This distinction is central.

#28.1Ambient Story

Generated without direct player action:

  • friendships
  • route habits
  • background romances
  • family struggles
  • work injuries
  • quiet social changes

These should mostly surface through summaries, notifications, and world-state changes rather than constant interruption.

#28.2Playable Story

Generated when the player steps in or when stakes cross a threshold:

  • taking three villagers on a boar hunt
  • escorting a merchant
  • saving someone from danger
  • personally resolving a diplomatic visit
  • choosing who answers a summons

These should feel interactive, memorable, and identity-shaping.

29

#User Experience Requirements

Because the sim may create many events, the UI must filter and surface information intelligently.

The player should not need to read an endless feed of trivial life updates.

Needed categories:

  • ambient digest
  • important settlement alerts
  • relationship or household changes
  • route danger or disappearance
  • quest and event prompts
  • selected-character biography and history

Examples of acceptable surfacing:

  • Tomas and Elira have grown close.
  • Mira now avoids the north road after a wolf attack.
  • Bren returned injured from the boar hunt.
  • The court remembers Joss as insolent.
  • The Weaver household is struggling since Coren has not returned.

The system should help the player notice consequences without drowning them.

30

#UI and Observability Architecture

This section defines how the player should read the world, issue intent, and understand consequences.

This project is not only a simulation design problem. It is also a legibility problem.

If the UI fails, the player will experience the game as:

  • random
  • noisy
  • overcomplicated
  • emotionally flat
  • harder than it actually is

The interface must therefore do more than present commands. It must act as the translation layer between:

  • simulation truth
  • player intention
  • emotional attachment

#30.1Architectural Goal

The UI should make a deep simulation feel:

  • readable
  • governable
  • personal
  • actionable

without flattening villagers into abstract icons or drowning the player in internal state.

The player should almost always be able to answer:

  • what is happening
  • why it is happening
  • why it matters
  • what I can do about it

#30.2Core UI Philosophy

The UI should be built around three simultaneous lenses:

#30.2.11. Settlement Lens

Use for:

  • stockpiles
  • jobs
  • shortages
  • building and upgrades
  • route safety
  • broad labor pressure

This is the macro governance layer.

#30.2.22. Person Lens

Use for:

  • villager biography
  • current plan
  • traits and condition
  • memories
  • bonds
  • recent notable events

This is the attachment layer.

#30.2.33. Episode Lens

Use for:

  • direct control
  • hunts
  • escorts
  • crises
  • tactical incidents
  • quests and negotiations

This is the intervention layer.

The player should be able to move between these lenses fluidly, without feeling like they entered separate games.

#30.3Required Player Questions

Every important system should be surfaced so the player can answer a few recurring questions quickly.

#30.3.1Settlement Questions

  • what does the settlement need right now
  • what is blocked
  • what is dangerous
  • what is falling behind
  • which people or households are under strain

#30.3.2Person Questions

  • what is this villager doing
  • why did they choose that
  • what are they like
  • what happened to them recently
  • why are they refusing, failing, or struggling

#30.3.3World Questions

  • what changed while I was away
  • which route is unsafe and why
  • what event happened here
  • who knows about this
  • what opportunity is emerging nearby

If the interface cannot answer those well, the design will feel much more opaque than it really is.

#30.4Primary Information Layers

The game surfaces information in layered bands rather than one universal feed.

#30.4.11. Constant HUD Layer

Should include only the most important persistent information, such as:

  • current stockpile pressure
  • selected entity or group summary
  • active alerts count
  • current direct-control state
  • time, season, and perhaps weather context

This layer should stay calm. It is not the place for life-story spam.

#30.4.22. Notification Layer

Used for:

  • urgent threats
  • major completions
  • significant injuries or deaths
  • missing-person alerts
  • diplomatic summons
  • surfaced event opportunities

Notifications should be priority-ranked and style-coded so the player can tell:

  • urgent now
  • important soon
  • notable but not interrupting

#30.4.33. Digest Layer

Used for ambient life updates that matter but do not require interruption.

Examples:

  • two villagers formed a bond
  • a household is under strain
  • a route is becoming feared
  • someone learned a new tendency

This should feel like a town chronicle, not a chat log flood.

#30.4.44. Inspector Layer

Used when the player clicks a villager, route, site, building, or event.

This is where the game earns trust. Inspectors should explain:

  • state
  • cause
  • blockers
  • history
  • likely next step

#30.4.55. Map Overlay Layer

Used for:

  • route danger
  • work zones
  • regional warmth
  • settlement influence
  • known incidents
  • search areas
  • infrastructure value

The map should help the player reason spatially, not just aesthetically.

#30.5Selection and Control UX

The player should be able to select:

  • one villager
  • a small party
  • a building
  • a route
  • a site
  • a household

Each selection type should expose a different but consistent inspector.

#30.5.1Villager Selection Should Reveal

  • current action
  • current plan
  • role
  • condition
  • key traits
  • important memories
  • social ties
  • current obligations
  • recent events

The goal is not to dump every stat. The goal is to help the player understand who this person is and why they are behaving as they are.

#30.5.2Party Selection Should Reveal

  • members
  • readiness
  • supplies
  • current goal
  • route risk
  • morale or confidence summary later if used

This inspector should support hunts, escorts, and expeditions without becoming a full RPG hotbar mess unless the eventual combat design truly needs that depth.

#30.5.3Building and Site Selection Should Reveal

  • current function
  • supply needs
  • labor assigned or claimed
  • blockages
  • connected routes
  • recent throughput or inactivity

This keeps the builder side explainable.

#30.6Explainability Rules

Whenever possible, the UI should explain outcomes in plain causal language.

Good examples:

  • Quarry work slowed: north road unsafe after wolf attack.
  • Joren refused escort job: exhaustion severe and confidence low.
  • Oven idle: no grain delivered from west field.
  • Court distrust persists: steward insult remembered and repeated by rumor.

Bad explanations:

  • efficiency -14%
  • task failed
  • AI reprioritized
  • route invalid

Numbers can support understanding, but plain-language causality should lead.

#30.7Event Surfacing Model

The UI should not present every event at the moment it happens.

Instead, events should pass through surfacing tiers:

#30.7.1Ambient

Logged quietly into digest or biography surfaces.

Use for:

  • low-stakes relationship shifts
  • repeated route routines
  • minor learned tendencies
  • household texture changes

#30.7.2Surfaced

Shown as a player-readable update or option, but not hard-pausing attention.

Use for:

  • a route becoming unsafe
  • a worker failing to return
  • a merchant request
  • a household entering visible stress

#30.7.3Foreground

Presented as an active, emotionally or strategically significant moment.

Use for:

  • death or disappearance
  • hunt or rescue opportunity
  • diplomatic summons
  • major construction blockage tied to world conditions
  • direct-control crises

This lets the world feel alive without forcing the player to babysit every heartbeat.

#30.8Biography and History Presentation

The project needs a strong biography surface for important villagers.

A villager profile contains:

  • identity and household
  • role and current duty
  • short trait summary
  • important memories
  • major life events
  • notable bonds
  • reputation notes
  • player-led episode history

This should read less like a spreadsheet and more like a compact living record.

Possible presentation style:

  • short descriptor line
  • recent life events
  • current concerns
  • known relationships
  • notable past turning points

This is one of the main places where "ordinary lives become stories" becomes tangible.

#30.9Route and Region Observability

Routes and regions need their own inspectability because so much of the game's world logic lives there.

Selecting a route or corridor should reveal:

  • safety level
  • known recent incidents
  • travel volume
  • infrastructure condition
  • weather or environmental pressure
  • current active users if locally relevant

Selecting a region should reveal:

  • nearby sites
  • settlement influence
  • known threats
  • notable recent intersections
  • warmth or simulation attention level if the player is allowed to reason about it indirectly

The UI does not need to expose raw simulation tier names, but it should expose the consequences of those tiers.

#30.10Household and Social Readability

Households are one of the main bridges between abstract settlement management and personal life.

The UI should make it possible to inspect:

  • who belongs to a household
  • who is absent
  • whether the household is stable, strained, grieving, or thriving
  • what shortages affect it
  • what recent events shaped it

This is important because many of the game's most memorable consequences are not just resource losses. They are social absences.

#30.11Temporal Readability

The game should help the player understand change over time, not only current state.

Useful temporal surfaces:

  • recent event timeline for selected villager, household, or settlement
  • "since you were away" summaries after camera shifts or time compression
  • route incident history
  • building throughput changes

The player should be able to tell not just:

  • what is true now

but also:

  • what changed
  • what caused it
  • whether the trend is getting better or worse

#30.12Alert Discipline

Alerts should be treated as a precious resource.

Strong alert rules:

  • interrupt only when player action may reasonably matter
  • downgrade repeated similar alerts into grouped summaries
  • avoid re-alerting the same blocked condition every few seconds
  • prefer escalation when a condition worsens, not when it merely persists

Examples:

  • good: North route now unsafe after second wolf incident.
  • good: Three households now short on firewood.
  • bad: Joren still walking.
  • bad: Quarry still blocked.

Poor alert discipline will destroy the cozy side of the game faster than almost anything else.

#30.13CPU-Aware UX Strategy

The UI can help preserve performance by not demanding pointless precision from the simulation.

For example:

  • route risk can be shown as a band or story-backed status rather than exact hidden dice math
  • offscreen progress can be shown as believable state milestones rather than literal frame replay
  • social drift can be surfaced as notable changes rather than constant percentage churn

In other words, the UI should ask the simulation for:

  • meaningful summaries
  • recent causes
  • actionable blockers

not full raw telemetry for every actor all the time.

This is one of the quiet ways UX and performance reinforce each other.

#30.14Developer Observability Requirements

The game will likely need robust internal debug surfaces during development.

Useful debug overlays and inspectors:

  • actor simulation tier
  • actor heat score
  • current plan and milestone
  • job claim ownership
  • route segment timing
  • interruption trigger reason
  • event surfacing tier
  • memory write-back log
  • rumor propagation path
  • settlement pressure sources

The shipping game may hide most of this, but the team will need it constantly.

#30.15Anti-Goals

Avoid these UI failures:

  • turning the game into a scrolling event inbox
  • hiding simulation reasons behind vague flavor text
  • exposing so much raw state that the player feels they need a spreadsheet
  • making direct control feel detached from the same inspectors used in normal play
  • burying personhood under macro-only resource panels
  • requiring constant menu-diving to understand blocked labor

#30.16Game Development Expansion

The engine already provides the bounded settlement, person, and episode lenses plus developer inspection. Phase 14 exposes owner-built facts, actions, widgets, surfaces, slots, themes, input, reload, and recovery through the documented Lua standard interface and external API Reference. Every later phase must extend that interface with its own minimum facts, causes, choices, progress, failure, uncertainty, accessibility, and normal-play live proof. Phase 23 broadens presentation and end-user customization only after those phase-local interfaces are proven.

The ordinary graphical launch loads only first-party standard packages. Development packages are an explicit --development-addons opt-in. The standard village view remains useful with no current selection: it reads one bounded Settlement page, the active Construction page, and its Work-owned priority, then shows residents, households, buildings, project progress, and assigned labor. Its priority control submits the registered revision-checked Work command. Selecting a resident adds their authored profession and the existing routine, need, Household, destination, and work facts. The same normal view now shows a newest-first village chronicle of completed conversations, support, and disagreements. Selecting a resident pages their retained named relationships and current stage. Incident, Relationship, Memory, and Actor remain authoritative; the interface keeps no parallel social history.

31

#Encounter and Intersection Architecture

This section defines how meaningful offscreen and onscreen incidents arise from intersecting world activity.

The key idea is:

the world should not only produce danger. it should produce intersections.

An intersection happens when actors, routes, sites, needs, timing, and conditions overlap in a way that could plausibly generate a meaningful outcome.

That outcome might be:

  • hostile
  • social
  • economic
  • environmental
  • exploratory
  • institutional

This is a broader and more accurate framing than "combat and danger," because the same underlying architecture should support:

  • a tiger attack
  • a merchant asking for escort
  • two villagers falling in love on a repeated route
  • a lost child being discovered
  • a shrine being found by accident
  • a desperate traveler pleading for help
  • a worker finding a richer vein of ore

#31.1Architectural Goal

The encounter/intersection system should:

  • detect meaningful overlaps in world activity
  • convert those overlaps into plausible incidents
  • decide whether they stay ambient or escalate
  • preserve consequences afterward

It should feel like:

  • the world is constantly full of possibility
  • only some possibilities become incidents
  • only some incidents become surfaced events
  • only some surfaced events become direct-control scenes

#31.2Core Model

An intersection should emerge from the meeting of several domains:

  • actor state
  • route state
  • site state
  • region state
  • timing
  • social context
  • chance

You do not need a fully bespoke rule for every story beat.

Instead, you want a system that can answer:

  • who was where
  • why they were there
  • what else was active nearby
  • what conditions were favorable to an incident
  • whether that incident mattered enough to escalate

#31.3Intersection Inputs

Intersection evaluation reads:

  • actor plans
  • actor traits and condition
  • relationship state
  • route usage
  • site properties
  • region danger and opportunity fields
  • time of day
  • season and weather
  • current quests or incidents
  • settlement pressures

Examples:

  • an exhausted laborer on a night route through predator-heavy woods
  • a talkative merchant arriving in a politically tense town
  • two unmarried villagers repeatedly assigned to the same gathering loop
  • a perceptive scout moving through shrine-rich wilderness
  • a hungry child near an unsafe forest edge

#31.4Incident Family Definition Ownership

Phase 4 uses two compiled incident-family definitions, wildlife.predator and traveler.dispute, plus two compiled display labels. This is bounded proof data for the reusable selector, lifecycle, scheduling, presentation, and outcome boundaries. It is not the production content-authoring path.

Phase 11 must convert these defaults before adding a third broad content family. A validated, versioned incident-family catalog should provide:

  • one stable family ID and content version
  • selector gates, capability requirements, consideration weights, and tuning version
  • display name and summary keys plus any category, urgency, or response metadata needed by detached presentation
  • one registered outcome-resolver ID when the family has distinct resolution behavior

The selector consumes immutable catalog definitions and remains mutation-free. Tools receives display metadata through detached incident inspection instead of comparing family strings. App submits one family-agnostic resolution request. A narrow Game registry maps the retained resolver ID to a focused outcome module; that module validates the family-specific result and coordinates requests to existing Actor, World, Work, Resource, relationship, memory, or consequence owners.

The catalog does not become a universal event bus or a second owner of incident outcomes. A family that reuses an existing outcome contract may be added as validated data. A family with genuinely different rules adds one focused Game outcome module and one registry entry, but it must not require new family branches in selection, generic App composition, or Tools presentation. Scripting remains closed until repeated Phase 11 content proves a specific need that validated data and focused C++ owners cannot meet.

#31.5Intersection Categories

The system should classify intersections by type so they can share logic without all becoming combat.

#31.5.11. Hostile Intersections

Examples:

  • predator attack
  • monster ambush
  • territorial confrontation
  • pursuit
  • road harassment later

Typical consequence domains:

  • injury
  • death
  • fear
  • route avoidance
  • reputation for bravery or failure

#31.5.22. Social Intersections

Examples:

  • chance conversation
  • plea for help
  • romance seed
  • argument
  • reconciliation
  • awkward court impression

Typical consequence domains:

  • affinity
  • resentment
  • attraction
  • trust
  • future invitations or exclusions

#31.5.33. Economic Intersections

Examples:

  • trade opportunity
  • blocked delivery
  • shared hauling opportunity
  • found surplus
  • missing cargo

Typical consequence domains:

  • resources
  • job creation
  • stockpile pressure
  • market access
  • trust in routes or partners

#31.5.44. Discovery Intersections

Examples:

  • shrine found
  • tracks discovered
  • cave entrance noticed
  • herb patch revealed
  • hidden shortcut identified

Typical consequence domains:

  • map knowledge
  • quest availability
  • region familiarity
  • new jobs or expeditions

#31.5.55. Environmental Intersections

Examples:

  • storm exposure
  • fire spread
  • spoiled food discovery
  • sickness exposure
  • flood crossing failure

Typical consequence domains:

  • health
  • travel time
  • household stress
  • infrastructure damage

#31.5.66. Institutional Intersections

Examples:

  • royal summons delivered
  • tax collector arrives
  • town request for aid
  • messenger spreads warning
  • ritual obligation is invoked

Typical consequence domains:

  • diplomacy
  • deadlines
  • settlement obligations
  • future event chains

#31.6Intersection Pipeline

A useful high-level pipeline is:

  1. background opportunity scan
  2. candidate intersection generation
  3. plausibility filtering
  4. intensity evaluation
  5. resolution mode selection
  6. aftermath write-back

#31.6.11. Background Opportunity Scan

The world identifies where overlapping conditions exist.

This should usually happen at:

  • route level
  • site level
  • region level
  • active actor cluster level

#31.6.22. Candidate Intersection Generation

The system proposes a small set of possible incidents.

Examples:

  • wolf attack candidate
  • romance interaction candidate
  • found object candidate
  • rumor arrival candidate

#31.6.33. Plausibility Filtering

The system rejects candidates that do not make sense.

Filters may include:

  • wrong time
  • wrong participants
  • incompatible current conditions
  • event cooldowns
  • repetition control
  • insufficient narrative value

#31.6.44. Intensity Evaluation

The system asks how meaningful this incident is.

Factors may include:

  • danger
  • rarity
  • participant importance
  • player relevance
  • consequence potential
  • current quest entanglement

#31.6.55. Resolution Mode Selection

The incident becomes:

  • ambient background change
  • surfaced notification
  • autonomous resolution
  • event record
  • direct-control scene

#31.6.66. Aftermath Write-Back

The incident updates the world through memory, jobs, routes, relationships, resources, or event state.

#31.7Ambient, Surfaced, and Embodied Intersections

Not every intersection should produce an encounter scene.

There should be at least three outcome bands:

#31.7.1Ambient

The incident resolves quietly and only alters simulation state.

Example:

  • two villagers become friendlier after repeated work overlap

#31.7.2Surfaced

The incident becomes visible to the player but may still resolve without direct control.

Example:

  • north route increasingly unsafe due to predator activity

#31.7.3Embodied

The incident becomes a richer local scene.

Example:

  • the player-controlled hunting party is actually attacked by the boar

This helps keep the world lively without overwhelming the player with constant scene changes.

#31.8Repetition and Novelty Control

Intersection systems can become noisy if they fire too often.

The architecture should therefore track:

  • local repetition
  • participant repetition
  • recent similar outcomes
  • incident fatigue
  • novelty weight

This prevents:

  • endless wolf attacks on the same road every day
  • every repeated route producing identical conversations
  • all discovery moments feeling interchangeable

#31.9Opportunity Fields

Just as regions can have risk fields, they can also have opportunity fields.

Useful opportunity fields:

  • social density
  • trade activity
  • mystery density
  • forage opportunity
  • institutional attention
  • romance opportunity
  • discovery richness

These do not guarantee incidents. They simply make certain types of intersections more plausible in certain places.

#31.10Path Intersections

One of the most important sub-systems is path intersection.

Any time actors or parties share:

  • a route
  • a site
  • a checkpoint
  • a travel window

the system should have a chance to ask whether something happens.

Examples:

  • merchant meets villager in distress
  • two couriers exchange rumor
  • hunter crosses predator track
  • search party finds evidence left by missing laborer

This is likely one of the strongest sources of emergent story in the whole project.

#31.11Site Intersections

Sites should also act as opportunity magnets.

A shrine, quarry, bridge, market, den, ruin, or river crossing should each bias toward different incident types.

Examples:

  • bridge: blockage, toll demand, rescue, accident
  • ruin: discovery, danger, omen, artifact
  • market: trade, rumor, insult, recruitment
  • den: attack, tracks, cub discovery, territorial shift

This makes geography feel meaningful rather than decorative.

#31.12Timed Intersections

Some intersections should only become possible at certain times.

Examples:

  • wolves hunt more boldly at dusk
  • a court only receives envoys during formal hours
  • certain flowers bloom after rain
  • travelers camp at night and share stories

This helps the world feel patterned rather than random.

#31.13Multi-Step Intersections

Some incidents should chain into follow-up intersections.

Examples:

  • tracks found -> search begins -> body or survivor found
  • flirtation begins -> repeated meetings -> courtship
  • unsafe route report -> escort request -> ambush or safe passage

The system should support this without requiring every chain to be a fully handcrafted quest line.

#31.14Intersections and Direct Control

Direct control should strongly bias the system toward embodied resolution, because the player is explicitly saying:

  • this moment matters to me

So when directly controlling a party, the architecture should be more willing to:

  • instantiate local encounters
  • preserve exact route context
  • surface intermediate discoveries
  • make consequences immediate and legible

This is one of the major rewards for zooming into people.

#31.15Intersections and Offscreen Continuity

Offscreen intersections should still be capable of changing lives.

The system should support offscreen outcomes such as:

  • someone is injured
  • someone falls in love
  • someone discovers a clue
  • someone never returns
  • a route becomes more feared
  • a household gains or loses hope

This is where the world starts to feel alive rather than paused when unseen.

#31.16Anti-Goals

Avoid these traps:

  • treating every intersection as combat
  • resolving all offscreen life through pure dice without context
  • surfacing every small interaction to the player
  • making incidents feel random instead of situated
  • allowing no peaceful or surprising intersections in dangerous places

#31.17First Proof and Expansion Targets

Phase 4 proves the reusable core with:

  • one hostile route encounter
  • one noncombat traveler dispute through the same lifecycle
  • one scouting or investigation result through the observer-knowledge owner

Phase 8 expands discovery and environmental intersections. Phase 11 expands social and institutional intersections and proves that a third data-only family does not require generic App, selection, or Tools branches. These families share the incident lifecycle, but they do not need to exist in the first implementation.

32

#Memory and Reputation Propagation

This section defines how events continue to matter after they are over.

The game should not stop at:

  • something happened
  • outcome resolved
  • scene ended

It should continue into:

  • who remembers it
  • how strongly they remember it
  • what they tell others
  • what institutions record or infer from it
  • how future behavior and social standing change

This is the system that turns incidents into history.

#32.1Architectural Goal

The memory and reputation layer should:

  • preserve the personal meaning of lived events
  • spread socially relevant knowledge outward when appropriate
  • let institutions react without omniscience
  • create delayed consequences that feel earned

The world should feel like it has a social afterlife, not just immediate outcomes.

#32.2Three Main Consequence Layers

A useful framing is three linked layers:

  1. personal memory
  2. social propagation
  3. reputation state

#32.2.11. Personal Memory

What an actor privately carries forward from experience.

Examples:

  • fear of a route
  • affection for a rescuer
  • shame from a public insult
  • confidence after a successful hunt
  • grief after a family death

#32.2.22. Social Propagation

What travels from one actor to others.

Examples:

  • gossip
  • rumor
  • household report
  • survivor testimony
  • merchant retelling
  • formal message

#32.2.33. Reputation State

What groups, settlements, and institutions come to believe about a person, party, or settlement.

Examples:

  • this villager is brave
  • this household is unreliable
  • this settlement ignores obligations
  • this envoy is charming but foolish
  • this road is unsafe

#32.3Core Principle

Memory should not automatically equal reputation.

Just because one villager knows something happened does not mean:

  • everyone knows
  • the story is accurate
  • the court believes it
  • the settlement records it formally

The architecture should separate:

  • lived experience
  • transmitted account
  • accepted social truth

That separation is where a lot of interesting story comes from.

#32.4Memory Formation

Not every action deserves a durable memory.

The system should form or strengthen memory based on factors such as:

  • emotional intensity
  • danger
  • novelty
  • repetition
  • social significance
  • player involvement
  • life-stage importance

Examples of memory-worthy incidents:

  • first hunt
  • first kill
  • near-death escape
  • diplomatic humiliation
  • birth of a child
  • loss of a spouse
  • being saved by another villager
  • discovering a sacred site

Examples of low-memory incidents:

  • carrying one more stack of wood
  • taking a routine walk
  • everyday idle chatter with no consequence

#32.5Memory Structure

Memory records stay lightweight but meaningful.

A memory entry includes:

  • a stable typed memory ID and holder Actor ID
  • a registered, versioned memory-kind ID
  • witnessed or reported provenance with a source incident; reports also name the reporting Actor and source memory
  • source, creation, and expiry ticks
  • a typed Site ID and optional route-segment ID
  • sorted stable participant Actor IDs
  • initial intensity in fixed-point basis points
  • valence
  • tags
  • behavior effects
  • a registered disclosure-policy ID
  • a registered decay profile

The memory owner retains initial intensity and derives current intensity from age and the registered decay curve. It does not rewrite every memory every tick. The initial implementation keeps at most 64 active memories per holder. Capacity cleanup removes expired records first, then uses effective intensity, creation tick, and stable memory ID as deterministic eviction keys.

Useful categories:

  • danger
  • achievement
  • loss
  • relationship
  • discovery
  • institution
  • survival
  • humiliation

Valence can help express whether the memory is:

  • positive
  • negative
  • mixed
  • unresolved

#32.6Memory Effects

Personal memories should be able to affect several downstream systems.

Examples:

  • route avoidance
  • courage gain or loss
  • attraction or resentment
  • food caution
  • trust in a leader
  • willingness to accept future assignments
  • social confidence
  • superstition or sacred behavior

This is how "life changed me" becomes systemic rather than purely cosmetic.

#32.7Memory Decay and Persistence

Not all memories should last forever at equal strength.

The architecture should support:

  • fading intensity
  • persistent scars
  • reinforcement through repetition
  • reactivation through reminders

Examples:

  • a trivial embarrassment fades
  • repeated wolf attacks harden into a strong route fear
  • a spouse's death remains important for years
  • seeing the same shrine again refreshes an old discovery memory

This keeps memory meaningful without storing every detail forever as equally live.

#32.8Disclosure Rules

Memories should use explicit disclosure policies rather than a Boolean shareable flag. Propagation is a later command/result path between memory owners; it does not directly mutate an Actor.

Useful shareability dimensions:

  • private
  • household
  • social
  • public
  • institutional

Examples:

  • private: secret attraction, shame, grief
  • household: illness, missing provider, home shortage
  • social: rescue story, insult, romance rumor
  • public: public duel, official envoy behavior, market incident
  • institutional: failed tribute, honored service, treaty insult

This is a critical distinction. Some things are remembered but not widely known.

#32.9Propagation Channels

Information should move through concrete channels, not universal instant knowledge.

Useful channels:

  • direct witness
  • participant retelling
  • household conversation
  • workplace spread
  • traveler gossip
  • merchant networks
  • official messenger
  • written or formal record later

Each channel can differ in:

  • speed
  • reach
  • distortion
  • credibility

#32.10Propagation Rules

When an incident happens, the system should ask:

  • who directly knows
  • who is likely to be told
  • how quickly it travels
  • how much detail survives
  • who believes it

This can depend on:

  • relationship strength
  • trait tendencies like talkative or secretive
  • institutional importance
  • remoteness
  • communication routes
  • elapsed time

#32.11Rumor Versus Report

The architecture should distinguish between:

  • rumor
  • witness account
  • accepted report
  • official record

#32.11.1Rumor

Low-certainty socially spread information.

Can:

  • be incomplete
  • be distorted
  • spread widely

#32.11.2Witness Account

High-certainty from someone directly involved or present.

Can still be biased, frightened, confused, or self-serving.

#32.11.3Accepted Report

Information a community more or less believes.

This is often what matters for practical social consequences.

#32.11.4Official Record

Information recognized by a formal institution.

This may matter for:

  • diplomacy
  • law
  • taxation
  • honors
  • punishment

#32.12Reputation Domains

Reputation should not be one universal score.

It should exist in domains.

Useful domains:

  • personal reputation
  • household reputation
  • settlement reputation
  • trade reputation
  • court or institutional reputation
  • route reputation
  • military or bravery reputation later

Examples:

  • loved at home, distrusted by court
  • known as brave locally, unknown abroad
  • excellent trader, poor diplomat
  • settlement respected for aid, feared for strength

This supports more interesting outcomes than a single fame meter.

#32.13Reputation Carriers

Reputation can attach to different entities:

  • individual villager
  • household
  • party
  • settlement
  • route
  • site

Examples:

  • Joren is brave
  • the Fen household is unlucky
  • the north road is cursed
  • Riverbend keeps its promises

This lets social meaning exist at multiple scales.

#32.14Reputation Update Triggers

Reputation should usually change on notable actions, not routine noise.

Examples:

  • public success or failure
  • visible bravery or cowardice
  • betrayal or loyalty
  • trade fulfillment or default
  • insulting a court
  • rescuing someone important
  • neglecting an obligation

Routine labor should mostly influence reputation only through accumulated pattern, not every single act.

#32.15Distortion and Bias

Propagation should not always preserve truth perfectly.

Distortion sources may include:

  • fear
  • pride
  • faulty memory
  • gossip exaggeration
  • political framing
  • incomplete witness perspective

This gives room for:

  • misunderstood heroism
  • unfair suspicion
  • local myths
  • conflicting stories about the same event

That said, distortion should be used carefully. Too much uncertainty becomes noise.

#32.16Household Propagation

Households should act as a special propagation unit.

Within a household, important information should spread quickly:

  • injury
  • death
  • absence
  • food shortage
  • affection
  • grief
  • conflict

This matters because households are where many emotional and logistical consequences become real first.

#32.17Settlement Propagation

Settlements should have slower, broader social spread.

Likely drivers:

  • shared workplaces
  • market spaces
  • guard posts
  • taverns later
  • formal notices
  • returning expeditions

Not every villager needs to know every story, but the settlement should gradually accumulate a sense of:

  • who is reliable
  • what routes are feared
  • which families are thriving or struggling
  • what external powers are asking of them

#32.18Institutional Propagation

Courts, towns, trade partners, and other institutions should have their own information filters.

Institutions may learn through:

  • envoys
  • written records
  • official witnesses
  • repeated trade behavior
  • public incidents

Institutional reputation should generally change slower than household gossip, but hit harder when it does.

#32.19Memory and Reputation Feedback

Memory and reputation should reinforce one another without collapsing into one thing.

Examples:

  • a villager remembers humiliation and becomes cautious
  • others hear about it and trust them less as envoy
  • future poor performance then reinforces both memory and reputation

or:

  • a hunter rescues a child
  • the child remembers the rescue
  • household spreads gratitude
  • village views the hunter as dependable
  • hunter gains confidence and future opportunities

This feedback loop is where lives begin to feel storied.

#32.20UI and Explainability Requirements

The player should be able to inspect why a belief or reputation exists.

Useful outputs:

  • recent notable memories for a villager
  • known rumors affecting a route or place
  • why a settlement distrusts an envoy
  • which event changed a household's standing

Examples:

  • Joren avoids the north road after surviving a wolf attack.
  • Court distrust increased after Mara insulted the king's steward.
  • The Fen household is grieving after Coren failed to return.

If reputation changes feel unexplained, they will feel arbitrary.

#32.21Anti-Goals

Avoid these traps:

  • turning memory into an infinite event scrapbook
  • making reputation update instantly everywhere
  • collapsing private feeling and public belief into one value
  • making all rumors true
  • making all rumors false
  • forgetting that some stories never leave a household

#32.22First Proof and Expansion Targets

Phase 5 proves one bounded consequence family from the retained dangerous trip:

  • dangerous trip -> witness memory -> route fear or learned avoidance
  • direct witness -> bounded household and settlement propagation
  • retained consequence -> one reputation, relationship, or household reaction -> later decision

Phase 10 expands missing-person, grief, caregiving, and life-progression consequences. Phase 11 expands diplomatic mistakes into official distrust and later institutional response. Those later chains reuse the Phase 5 owners and propagation contracts rather than expanding the first proof.

33

#Danger and Risk Modeling

Offscreen danger must be real, or the world feels fake. But danger should not require full detailed simulation everywhere.

Regional or route-level risk can model:

  • predator density
  • territorial hostility
  • monster presence
  • patrol pressure later
  • travel safety
  • weather danger
  • road quality

When an actor crosses a risky route:

  • low-stakes outcomes may resolve abstractly
  • meaningful threats may promote into richer simulation

This preserves both believability and performance.

34

#Infrastructure as Strategy

Because travel and risk matter, infrastructure should become meaningful gameplay rather than decoration.

Examples:

  • roads reduce travel time and danger
  • watchtowers improve route safety
  • escorts protect valuable trips
  • outposts keep regions warm and visible
  • cleared predator dens make trade routes viable

This is one of the cleanest bridges between the cozy-builder and the systemic-world layers.

35

#Application and Session Flow State Machine

Worldforge should use a small finite-state machine for application and session lifecycle. Its job is to make startup, session loading, active play, session exit, failure recovery, and process shutdown explicit. It must not become a global owner for simulation, actors, jobs, streaming, encounters, input bindings, or UI overlays.

#35.1Why This State Machine Exists

The current runtime has one direct path: load project data, construct a session, run it, and shut down. That direct path is adequate for completed Phase 0 behavior, but Phase 1 will introduce world and session-loading responsibilities that need an explicit coordination owner. The lifecycle foundation therefore belongs in a Phase 0 Addendum before Phase 1. The addendum formalizes the existing direct path without implementing a title screen, empty front end, session replacement, or asynchronous loading.

An explicit application flow should provide:

  • one owner for legal lifecycle transitions
  • one observable current lifecycle state and transition reason
  • identical lifecycle rules for graphical and headless composition where their flows overlap
  • transactional session creation, so a failed load cannot partially replace the active session
  • explicit input reset, worker cancellation, resource release, and shutdown boundaries
  • failure states that retain useful diagnostics without leaving half-owned services alive

#35.2State Model

The target application states are:

#35.2.1`bootstrapping`

The app validates configuration and required project data and constructs process-level services. No mutable gameplay session exists. Partial startup failure must unwind already-created services in reverse ownership order.

#35.2.2`front_end`

The process is ready but no gameplay session exists. This state may later host a title screen, scenario selection, load-game selection, settings, and recoverable error messages. It is a Phase 6 player-interface responsibility and should not be implemented as an empty placeholder during Phase 1.

#35.2.3`loading_session`

The app validates the requested scenario or save and constructs a complete candidate session. The current session, if any, is not mutated in place. A successful candidate becomes authoritative in one commit; a failed candidate is discarded with an explicit diagnostic.

#35.2.4`active_session`

A valid RuntimeSession and its required services exist. Simulation may be running, paused, or performing an authorized single step, but those are Simulation-owned run-policy states rather than application-flow states.

#35.2.5`leaving_session`

The app stops accepting new gameplay requests, resolves the chosen save or discard policy, cancels session-scoped work, clears held input, and destroys session-scoped resources in defined reverse order. The next state is front_end or shutting_down.

#35.2.6`faulted`

A process-level or session-transition failure is retained with its operation, source, and reason. If the front end and its required services remain healthy, the player may return there. Otherwise the only legal destination is shutting_down. A fault does not authorize partial session state.

#35.2.7`shutting_down`

The terminal application state. No new session, simulation, asset, or UI work may begin. Remaining process-level services are released in reverse ownership order before exit.

The controller should accept only these transition families:

  • bootstrapping -> front_end after process services and front-end prerequisites validate
  • bootstrapping -> loading_session for direct scenario launch and headless runs
  • bootstrapping -> faulted or shutting_down after unrecoverable startup failure
  • front_end -> loading_session after a validated new-session or load-session request
  • front_end -> shutting_down after a quit request
  • loading_session -> active_session after complete candidate-session construction succeeds
  • loading_session -> front_end after a recoverable load failure or cancellation
  • loading_session -> faulted after a failure that leaves the front end unusable
  • active_session -> leaving_session after return-to-front-end, replace-session, or quit intent
  • leaving_session -> front_end after session cleanup completes
  • leaving_session -> loading_session only for an explicitly validated replace-session request
  • leaving_session -> shutting_down after quit intent and complete session cleanup
  • faulted -> front_end only when process-level services required by the front end still validate
  • faulted -> shutting_down for every unrecoverable failure

There is no legal direct transition from front_end to active_session, from active_session to front_end, or from active_session directly to shutting_down. Loading and cleanup must remain observable owners rather than hidden work performed by an enum assignment.

#35.4Separate Simulation Run Policy

Application flow and simulation run policy are orthogonal:

  • App owns whether a valid session exists and whether it is loading, active, or leaving.
  • Simulation owns running, paused, and authorized single-step behavior for an active session.
  • Controls may request pause or lifecycle behavior but cannot write either state directly.
  • Player UI and developer tools read both states and explain them; they do not own transitions.
  • A pause menu is a UI overlay plus a Simulation-owned pause request. It is not a replacement for the active_session application state.

This separation prevents state multiplication such as active_paused_inventory, active_paused_settings, or active_running_debug. UI panels and overlays should use their own small presentation state where needed.

#35.5Ownership and Data Contract

The intended implementation is a narrow App-owned controller, not a general state-machine framework. A concrete design should contain:

  • ApplicationFlowState, containing only the lifecycle enum
  • ApplicationFlowRequest, containing a requested transition, stable request sequence, session descriptor where required, and reason
  • ApplicationFlowResult, reporting accepted, rejected, completed, cancelled, or failed outcomes
  • ApplicationFlowController, validating legal transitions and owning the current lifecycle state
  • explicit composition operations that construct or destroy services and sessions after validation
  • an inspector snapshot containing current state, pending request, last transition, and last failure

Commands request transitions. App validates and performs them. Results report facts after mutation. The transition controller must not load files, mutate ECS state, call renderer backends, or hide resource ownership inside callbacks. The composition root performs those operations through the existing owners and commits the state transition only at the documented boundary.

Application flow is transient process state. It is not serialized as world truth. Saves contain the durable session data owned by Game and Simulation. Replay may record lifecycle requests needed to reproduce a test, but it must not make a captured loading_session or leaving_session value a second restore path.

#35.6Implementation Plan

#35.6.1Stage 1: Pure Transition Contract

Add the enum, request/result types, a table-driven legality function, transition reasons, and unit tests. Do not move startup or shutdown code yet. Prove every legal edge and representative illegal edges without SDL, assets, ECS, or threads.

#35.6.2Stage 2: Current Direct-Launch Path

Route the existing graphical and headless direct-scenario flow through bootstrapping -> loading_session -> active_session -> leaving_session -> shutting_down. Keep all current services and mutation owners. This stage changes coordination only and must preserve output, replay hashes, reset behavior, and destruction order.

#35.6.3Stage 3: Transactional Session Loading

Construct a candidate session and its session-scoped resources outside the authoritative active session. Commit only after configuration, scenario, scene, world state, presentation assets, and cross-owner validation succeed. Add cancellation and failure injection before considering workers.

#35.6.4Stage 4: Front End and Recoverable Flow

Phase 6 may add front_end, return-to-front-end, load selection, save/discard confirmation, and recoverable error UI. This stage must reuse the same controller in graphical and headless tests, while headless execution may continue using the direct-launch subset.

#35.6.5Stage 5: Asynchronous Loading Only After Measurement

If Phase 1 measurements justify background loading, keep worker completion outside lifecycle authority. Workers produce bounded results tagged with request sequence and cancellation generation; App accepts them in a defined order and ignores stale results. Asynchrony does not add new lifecycle states merely to describe implementation details.

#35.7High-Risk Changes

The following changes require isolated slices and failure-injection proof:

#35.7.1Resource Lifetime and Destruction Order

Moving startup and shutdown coordination can cause double destruction, use-after-release, leaked SDL resources, workers that outlive their owners, or a renderer referencing session assets after the session is gone. Every session-scoped and process-scoped resource needs an explicit owner and release order before Stage 2 begins.

#35.7.2Pause and Single-Step Semantics

Treating pause as an application state would compete with the fixed-step scheduler, change replay behavior, and create invalid combinations during loading or shutdown. Pause must remain a Simulation run policy that is valid only while the application state is active_session.

#35.7.3Save, Restore, Reset, and Replay Authority

Serializing transient lifecycle state can turn loading or leaving into a second mutation path. Save and replay must continue restoring through RuntimeSession and domain owners. Scenario reset must not recreate the process lifecycle controller or bypass session cleanup.

#35.7.4Transactional Loading and Failure Recovery

A load may fail after some assets, ECS data, presentation resources, or workers exist. Candidate state must remain detached until all required owners validate. Failure cleanup must preserve the old active session or return to a known session-free state.

#35.7.5Input Routing Across Transitions

Pressed or held input can leak from a menu, loading screen, or old session into a new session. Every transition that removes or replaces an active session must inject one backend-neutral input reset and discard stale session-targeted commands.

#35.7.6Graphical and Headless Divergence

The graphical path has SDL, presentation, and UI resources that headless execution omits. A controller implemented only inside the graphical loop would produce two lifecycle contracts. The transition logic must remain backend-neutral even though composition operations differ.

#35.7.7Asynchronous Completion Order

Worker completion depends on timing and must not decide authoritative transition order. Stale load results, cancellation races, quit-during-load, and request replacement are mandatory tests before background work can participate.

#35.7.8State Explosion and Hidden Global Ownership

Adding states for menus, overlays, actor behavior, network status, streaming heat, or every error subtype would create a monolith. The application FSM must reject facts owned by Simulation, Game, Controls, Render, Assets, or UI rather than absorbing them for convenience.

#35.8Benefits

  • Startup, loading, session replacement, return-to-front-end, and shutdown become explicit and testable.
  • Invalid lifecycle requests fail at one boundary with a useful reason.
  • Partial load failures can recover without corrupting the current session.
  • Graphical and headless execution share a lifecycle contract.
  • Tools can explain the current state, pending request, and last failure.
  • Future title, loading, save-selection, and results screens gain a stable behavior owner.
  • Input reset, worker cancellation, replay, and resource release receive named transition points.

#35.9Potential Drawbacks

  • The controller adds coordination types and tests before it adds visible gameplay.
  • Migrating the current direct loop creates regression risk in already-proven startup and shutdown.
  • More legal states increase the failure matrix and require systematic transition tests.
  • Transactional loading may temporarily hold both old and candidate session resources.
  • A poorly scoped controller can become a service locator or central event bus.
  • Developers may incorrectly add new global states instead of fixing ownership in a domain system.
  • Front-end recovery and async cancellation can substantially increase code paths if introduced before a real product requirement exists.

#35.10Verification Gates

Implementation is not complete until it proves:

  • exhaustive legal-transition tests and representative illegal-transition rejection
  • identical transition results for repeated request sequences
  • unchanged graphical and headless direct-launch outcomes after Stage 2
  • clean shutdown from every nonterminal state, including failure and cancellation points
  • sanitizer-clean construction, replacement, cancellation, and destruction paths
  • input reset and stale-command rejection when leaving or replacing a session
  • transactional failure at each loading boundary without partial authoritative mutation
  • pause, single-step, reset, save/restore, and replay behavior remain under their existing owners
  • an inspector can show current state, last transition reason, pending request, and failure details
  • no application lifecycle value is treated as durable world or save authority

#35.11Phase Ownership

  • D.6 owns the permanent architecture boundary and the rule against a monolithic global FSM.
  • Phase 0 Addendum owns Stages 1-2: the pure transition contract, the existing graphical and headless direct-launch route, failure reporting, input cleanup, inspection, and shutdown proof.
  • Phase 1 owns Stage 3 for transactional candidate world/session loading. Synchronous streaming remains the first proof path. Phase 1 may add Stage 5 only after measurement justifies bounded background work.
  • Phases 2-5 extend their own actor, job, control, encounter, and consequence state machines without adding application lifecycle states.
  • Phase 6 owns Stage 4, player-facing front-end flow, save/discard confirmation, recoverable errors, lifecycle explainability, and the final interaction audit.
36

#Simulation Architecture

This section defines the practical architecture target for the world simulation. It is not engine-specific code design yet, but it should constrain future implementation choices.

The architecture should answer four questions:

  • what data exists persistently
  • what systems advance that data over time
  • when an actor is simulated in detail versus abstractly
  • how offscreen outcomes stay believable without full-time micro simulation

#36.1Architectural Goal

The simulation should behave like a persistent causal world with selective fidelity.

That means:

  • the world state keeps moving when the player looks away
  • not every entity is updated at the same resolution
  • actors can move between detailed and compressed forms without losing identity
  • the system can explain how outcomes happened, even when they happened offscreen

The architecture should favor legibility over theoretical perfect realism.

#36.2Core Runtime Layers

The runtime is divided into cooperating layers rather than one monolithic update loop.

#36.2.11. World Partition Layer

Responsible for:

  • chunk streaming
  • region grouping
  • terrain, biome, and site ownership
  • loading and unloading local detail
  • visibility and proximity relevance

Chunks are for local spatial detail.

Regions are for broader simulation control, such as:

  • route safety
  • predator pressure
  • depletion and recovery
  • settlement influence
  • travel corridor relevance

The architecture should not treat chunk boundaries as meaningful simulation boundaries for long-form tasks. A villager gathering from multiple nearby rock sites is performing one regional labor pattern, not several unrelated chunk actions.

#36.2.22. Actor Simulation Layer

Responsible for:

  • person and creature identity
  • current goals and plans
  • state transitions
  • local movement and interaction
  • task execution
  • interruptions and replanning

This is where villagers, wildlife, monsters, and later faction agents actually "do things."

#36.2.33. Regional Simulation Layer

Responsible for:

  • low-fidelity offscreen persistence
  • route and traffic modeling
  • environmental pressure
  • abstract resource flow
  • encounter opportunity generation
  • escalation triggers

This layer should be capable of saying:

  • how risky a road is
  • whether quarry traffic is active
  • whether predator activity is increasing
  • whether a missing worker is plausible and why

#36.2.44. Event and Narrative Layer

Responsible for:

  • turning simulation changes into surfaced events
  • maintaining notable event records
  • deciding what becomes ambient story versus alert-worthy story
  • supplying structured event templates with simulation inputs

This layer should not own truth. It should present and interpret truth produced by the sim.

#36.2.55. Persistence Layer

Responsible for:

  • saving actor state
  • saving settlement state
  • saving region state
  • preserving unresolved events
  • restoring the world without contradictions

The persistence layer must preserve causal continuity, not just position snapshots.

#36.3Simulation Cadence Bands

The simulation should not use one universal tick rate.

Cadence should be tied directly to heat tier and activity type.

Useful cadence bands:

  • frame or sub-frame updates for focused embodied actors
  • short fixed steps for hot actors and hot-zone incidents
  • checkpoint or milestone updates for warm actors
  • coarse regional pulses for cool zones
  • event-driven or time-skip pulses for cold background space

This matters because CPU cost grows less from actor count alone and more from how often each actor is reconsidered in full.

The ideal shape is:

  • nearby combatants think often
  • selected travelers update often enough to stay legible
  • offscreen workers advance at decision milestones
  • remote quiet regions mostly advance when thresholds or timers matter

The engine should think in terms of:

  • how much granularity does this situation deserve

not:

  • how many equal ticks can we afford to burn

#36.4Actor Lifecycle Across Heat Tiers

Each actor should move through a lifecycle of representation rather than a binary loaded/unloaded state.

Possible lifecycle:

  1. focused embodied actor
  2. hot embodied or near-embodied actor
  3. warm compressed active actor
  4. cool regional participant
  5. re-materialized actor

#36.4.1Focused Embodied Actor

The actor exists with:

  • exact coordinates
  • path state
  • local targets
  • animation or action phase
  • immediate sensory context
  • collision or combat context

Use this when the player can see or meaningfully affect the actor directly.

#36.4.2Hot Embodied or Near-Embodied Actor

The actor still exists individually and can still be inspected as a person in motion, but does not need full frame-rate cognition all the time.

Useful properties:

  • persistent exact or near-exact route position
  • short-horizon next action
  • high-priority interruption watch
  • recent emotional and physical aftermath
  • strong continuity with last focused state

This tier is important for:

  • just-offscreen escorts
  • monitored expeditions
  • dangerous return trips
  • aftermath scenes after direct control

#36.4.3Warm Compressed Active Actor

The actor still exists individually, but their behavior is advanced through:

  • route segments
  • task milestones
  • next-decision checkpoints
  • estimated arrival and completion windows

This is the correct representation for a worker still "really doing the job" without paying full simulation cost every frame.

#36.4.4Cool Regional Participant

The actor is represented primarily by:

  • identity
  • purpose
  • affiliation
  • route membership
  • risk exposure
  • expected next meaningful state

At this level, not every second matters. What matters is whether the actor:

  • progresses
  • gets delayed
  • suffers interruption
  • causes downstream consequences

#36.4.5Re-Materialized Actor

When an actor becomes important again, the sim should recreate a local representation from persistent state rather than inventing a fake teleport-style result.

The actor should come back with:

  • a plausible location
  • a consistent inventory
  • a meaningful condition
  • the correct consequences of what happened while offscreen

Re-materialization should preferentially restore from:

  • last known route segment
  • most recent valid local anchor
  • current task milestone
  • current companions or escorts
  • current local danger or event context

The system should not spawn actors from nowhere just because attention returned.

#36.5Task Execution Model

Tasks should be represented as plans with milestones, not giant fragile command tapes.

A good task record should include:

  • task type
  • intent
  • assigned actor or actors
  • target site or person
  • source and destination when relevant
  • progress state
  • next milestone
  • interruption rules
  • fallback or replanning rules

Example gathering chain:

  • maintain stone supply
  • use quarry cluster north of village
  • walk to available node
  • extract until full, exhausted, threatened, or interrupted
  • return to valid stockpile
  • repeat until order is replaced or constraints fail

This lets the system resume, compress, or re-evaluate the task at any fidelity tier.

#36.6Travel Model

Travel is one of the most important architectural systems because it connects:

  • logistics
  • exploration
  • danger
  • infrastructure
  • disappearance and return

Travel is modeled as route segments with contextual metadata rather than continuous offscreen pathfinding.

Useful segment properties:

  • distance
  • terrain cost
  • road quality
  • visibility
  • threat exposure
  • weather exposure
  • escort status
  • region transitions

At high fidelity, an actor walks the route.

At medium fidelity, the actor advances through segments with timing and interruption checks.

At low fidelity, the route contributes to regional traffic, danger, and timing outcomes.

#36.7Encounter and Interruption Model

Offscreen life only feels real if plans can be interrupted.

Interruptions should be produced by intersections between:

  • actor intent
  • route risk
  • local region state
  • nearby event candidates
  • personal traits and conditions

Common interruption classes:

  • attack or chase
  • resource exhaustion
  • injury or sickness
  • weather delay
  • social encounter
  • discovery event
  • task reprioritization from settlement need

Important rule:

The system should not roll random chaos every update just because it can. Interruption frequency should feel explainable and tied to world conditions.

#36.8Escalation Rules

Not every interruption deserves full simulation.

The architecture needs explicit escalation rules for when a low- or mid-fidelity event becomes a high-fidelity scene.

Likely escalation triggers:

  • player camera approaches
  • selected actor is involved
  • severe danger occurs
  • named or important actor is affected
  • unusual event chain begins
  • combat starts near a player-interest route
  • a quest or diplomatic event activates

Escalation should instantiate richer detail from already-existing state, not overwrite that state.

#36.9Settlement-Level Simulation

The settlement itself should not just be a pile of buildings plus independent villagers. It needs a layer of aggregate simulation that produces pressure on individuals.

Settlement-level concerns include:

  • stockpile demand and surplus
  • job priority
  • housing pressure
  • household stress
  • defense readiness
  • route dependency
  • diplomatic obligations

This layer should create demand signals that individual actors respond to.

Example:

  • stone is low
  • quarry work priority rises
  • laborers with suitable role and availability re-evaluate
  • a worker adopts or resumes quarry plan
  • route danger may then reshape the specific execution
37

#Settlement Task and Job Architecture

This section defines how settlement needs become actual villager work.

This is one of the most important architectural bridges in the project, because it connects:

  • citybuilder-style planning
  • RTS-style assignment
  • villager autonomy
  • logistics and infrastructure
  • offscreen continuity

If this layer is weak, the settlement will either feel like:

  • a spreadsheet that resolves magically
  • or a click-heavy RTS where villagers have no real inner life

The target is something in between:

  • the player sets intent, priorities, and structure
  • the settlement generates real labor demand
  • villagers pick up or are assigned work through understandable rules
  • those rules produce observable, persistent behavior in the world

#37.1Core Model

The settlement should not directly issue tiny commands like:

  • move here
  • swing hammer
  • walk back
  • unload now

for every ordinary task.

Instead, the settlement should produce:

  • needs
  • jobs
  • task chains
  • role pressure
  • priority signals

Villagers then bind themselves to those opportunities based on:

  • role
  • skill
  • availability
  • location
  • condition
  • dominant needs and active focus
  • current orders
  • personality and learned behavior

#37.2Four-Layer Labor Stack

A useful mental model is a four-layer labor stack:

  1. settlement needs
  2. jobs
  3. actor plans
  4. local actions

#37.2.11. Settlement Needs

These are high-level demands or shortages such as:

  • food is low
  • stone stockpile is below target
  • a building site needs logs
  • a household has no firewood
  • a road needs repair
  • a watch post is unmanned

Needs should come from real world state, not arbitrary timers.

Need sources include:

  • stockpile thresholds
  • building construction queues
  • household deficits
  • infrastructure decay
  • seasonal preparation
  • defense alerts
  • diplomacy and trade obligations

#37.2.22. Jobs

Jobs are concrete units of labor created in response to needs.

Examples:

  • harvest berries from patch east_04
  • transport 18 stone to stockpile_02
  • repair bridge segment south_crossing
  • cook grain at kitchen_01
  • escort merchant caravan route_north
  • stand guard at tower_03 until relief

Jobs should be:

  • specific enough to execute
  • abstract enough to survive simulation tier changes

They are not animation scripts. They are actionable labor opportunities.

#37.2.33. Actor Plans

When a villager commits to a job, they generate or adopt a plan.

Examples:

  • travel to berry patch, harvest until full, return to pantry
  • collect stone from quarry node B, deliver to storage
  • bring repair tools to bridge, perform repairs until interrupted or complete

The plan belongs to the actor, not the settlement.

This distinction matters because:

  • the villager may get interrupted
  • the villager may reprioritize due to hunger or danger
  • the villager may reprioritize due to sleep pressure, loneliness, heat, grief, or irritability if the job is not urgent
  • the villager may fail, flee, or die
  • the settlement may still continue to need the job done

#37.2.44. Local Actions

These are immediate embodied behaviors:

  • walking
  • gathering
  • dropping inventory
  • swinging weapon
  • entering shelter
  • speaking to another actor

The lower layers should be able to change without invalidating the upper layers.

#37.3Jobs Versus Roles

Roles and jobs should not be the same thing.

Roles answer:

  • what kind of work this person is generally expected or allowed to do

Jobs answer:

  • what specific piece of work needs doing right now

Example:

  • role: laborer
  • available jobs: haul wood, mine stone, repair road, collect reeds

Example:

  • role: hunter
  • available jobs: hunt boar, scout predator den, escort forage group

This separation allows:

  • flexible labor allocation
  • role-based filtering
  • personality and skill differences inside the same broad role

#37.4Job Lifecycle

A settlement job moves through a predictable lifecycle.

Suggested lifecycle:

  1. created
  2. visible to eligible actors
  3. claimed or assigned
  4. in progress
  5. blocked or interrupted
  6. resumed, abandoned, or replaced
  7. completed

#37.4.1Created

The world state generates the job from a need.

#37.4.2Visible to Eligible Actors

The job enters the local or settlement labor market.

#37.4.3Claimed or Assigned

Either:

  • a villager autonomously claims it
  • the player explicitly assigns someone
  • a supervisor later could assign it

#37.4.4In Progress

The actor is executing the plan generated from the job.

#37.4.5Blocked or Interrupted

Causes might include:

  • target resource exhausted
  • route danger
  • no valid storage destination
  • hunger or exhaustion
  • weather
  • attack

#37.4.6Resumed, Abandoned, or Replaced

The job may:

  • stay attached to the same villager
  • return to the settlement pool
  • split into follow-up jobs
  • escalate into a player-facing issue

#37.4.7Completed

The underlying need is reduced or fulfilled, and downstream systems update accordingly.

#37.5Push Versus Pull

The labor architecture should combine both push and pull, not rely purely on one.

#37.5.1Pull

Villagers look for jobs they can do.

Good for:

  • organic autonomy
  • believable daily routines
  • reducing player micromanagement

#37.5.2Push

The player or settlement explicitly assigns work.

Good for:

  • urgent priorities
  • strategic intention
  • scarce specialists
  • defense and crisis response

The model is:

  • pull by default
  • push when the player cares

This fits both the cozy-builder and RTS layers.

#37.6Job Visibility and Eligibility

Not every villager should evaluate every job globally all the time.

Eligibility should be filtered first by:

  • settlement affiliation
  • role compatibility
  • skill or equipment requirement
  • current availability
  • current control state
  • distance or region relevance
  • social restrictions later if needed

Then ranked by:

  • priority
  • proximity
  • efficiency
  • safety
  • urgency
  • villager preference or habit

This avoids expensive global reevaluation and keeps choices interpretable.

#37.7Priority Architecture

Job priority is a composite score rather than one arbitrary integer.

Useful priority dimensions:

  • survival criticality
  • settlement urgency
  • spoilage sensitivity
  • travel cost
  • danger exposure
  • player override weight
  • social obligation
  • downstream dependency

Example:

  • food hauling before winter may outrank cosmetic road repair
  • emergency medical carry may outrank routine gathering
  • a player-pinned construction project may outrank ordinary hauling

This allows the player to influence outcomes without manually issuing every step.

#37.8Labor Markets by Scope

The settlement may need more than one job pool.

Useful scopes:

  • household scope
  • building scope
  • settlement scope
  • expedition scope
  • regional infrastructure scope

Examples:

  • household scope: fetch water for home, care for child, cook meal
  • building scope: bring logs to sawpit, operate kiln
  • settlement scope: haul stone, repair palisade
  • expedition scope: escort caravan, carry camp supplies
  • regional infrastructure scope: clear road obstacle, rebuild bridge

This keeps the labor model from flattening everything into one giant undifferentiated queue.

#37.9Reservation and Claiming

The system needs reservation logic so multiple villagers do not repeatedly choose the same work in silly ways.

Reservations apply to:

  • resource nodes
  • transport loads
  • build slots
  • workstations
  • destination capacity
  • escort or party positions

A claim includes:

  • actor id
  • job id
  • target ref
  • claim time
  • expiry or heartbeat

Claims should expire cleanly if:

  • the villager dies
  • the villager flees
  • the plan becomes invalid
  • the actor is manually reassigned

#37.10Transport and Hauling Architecture

Hauling should be treated as a first-class system, not an afterthought.

Many believable settlement problems come from transport friction, not resource absence.

The system should distinguish between:

  • resource existence
  • resource accessibility
  • resource reservation
  • resource movement
  • destination acceptance

This allows important gameplay consequences such as:

  • wood exists but is stranded far away
  • grain was harvested but not delivered before spoilage
  • stone output is high but construction stalls due to hauling shortage

#37.11Construction Jobs

Construction decomposes into phases rather than one all-purpose "build house" action.

Example phases:

  • designate site
  • clear site
  • deliver materials
  • perform build labor
  • finish and claim building

This allows:

  • visible progress
  • partial completion
  • interruptions
  • different workers contributing different kinds of labor

#37.12Household and Personal Labor

Not all meaningful work should belong to the public settlement queue.

Private or semi-private labor matters too:

  • eating
  • resting
  • child care
  • mourning
  • caring for sick family
  • maintaining household stores

These tasks should compete with settlement labor in believable ways.

This is crucial for making villagers feel like people with lives instead of infinitely obedient civic drones.

#37.13Duty Conflicts

Villagers should sometimes face real conflict between:

  • settlement duty
  • household duty
  • self-preservation
  • player assignment
  • direct control aftermath

A good architecture should allow those conflicts to surface through rule weighting rather than bespoke scripting every time.

Examples:

  • an exhausted parent delays quarry work to return home
  • a hungry laborer stops hauling and eats first
  • a frightened trader refuses the unsafe shortcut unless directly pushed

This is where personality and condition begin to matter economically, not just narratively.

#37.14Crisis Jobs

Certain jobs should exist in a special crisis class.

Examples:

  • extinguish fire
  • drag wounded villager to safety
  • defend gate
  • flee settlement center
  • retrieve child from danger

Crisis jobs should:

  • override many ordinary priorities
  • spread quickly through local relevance
  • support player intervention naturally
  • generate strong memories and social consequences

#37.15Player Overrides

The player needs levers stronger than passive priority shaping, but weaker than micromanaging every chore.

Useful override tools:

  • assign specific villager to job
  • pin a job or project
  • forbid certain jobs to certain people
  • set regional work bans
  • set risk tolerance
  • create expedition party
  • suspend nonessential labor in crisis

These should modify the labor architecture, not bypass it completely.

For example:

  • the player assigns Joren to quarry work
  • Joren still chooses exact pathing and may still react to danger
  • the settlement now treats that assignment as strongly reserved

#37.16Job Persistence Across Simulation Tiers

Jobs must survive actor promotion and demotion.

That means:

  • a claimed quarry job stays meaningful offscreen
  • a hauling job can remain in progress while compressed
  • a blocked job can return to the pool without losing cause
  • a dangerous route can change job desirability over time

The job system should preserve:

  • what needs doing
  • who was doing it
  • why it stalled or succeeded
  • what changed in settlement state as a result

#37.17Failure Modes the Architecture Should Support

The labor model should naturally allow believable failure, not only success.

Examples:

  • no one can do the job
  • someone can do it but never reaches it safely
  • someone starts it but collapses from exhaustion
  • the resource disappears first
  • the destination fills up
  • a family emergency pulls the worker away

These are not bugs in concept. They are part of what makes the world feel alive.

#37.18UI and Explainability Requirements

The player must be able to understand labor flow without reading hidden simulation internals.

Useful explainability outputs:

  • why a job exists
  • who has claimed it
  • why it is blocked
  • what the villager is currently doing
  • what resource or route is constraining progress

Examples:

  • Bridge repair blocked: no planks available.
  • Quarry hauling delayed: north road unsafe.
  • Oven idle: no grain delivered.
  • Joren returned home: exhaustion critical.

If the player cannot understand why labor is failing, the system will feel random.

#37.19Game Development Expansion

The engine already owns demand, Job, WorkTask, reservation, assignment, interruption, cancellation, construction, hauling, household duty, crisis work, persistence, and deterministic contention. Phase 16 composes those owners into normal visible settlement life. Phase 17 adds care and household commitments. Phase 19 expands production, autonomous projects, businesses, trade, and specialization. Phases 20-22 add institutional, narrative, and conflict work without adding a second labor market.

#37.20Social Simulation Boundaries

Social life should be systemic, but it should not be simulated at maximum depth for every person every tick.

A sensible boundary is:

  • relationships update when people meaningfully interact
  • households update on daily or event milestones
  • reputation updates on notable public actions
  • memory updates when thresholds of experience are crossed

This avoids constant expensive reevaluation while still allowing believable long-form life changes.

#37.21Event Ledger

The simulation uses an internal event ledger or world history log, even if the player never sees most of it.

The ledger should capture:

  • important transitions
  • unresolved incidents
  • cause-and-effect breadcrumbs
  • who was involved
  • when and where it happened

Examples:

  • Coren failed to return from north road route
  • Mira was injured by wolf attack
  • Tomas and Elira formed a bond after mutual aid
  • court reputation with Joss decreased after diplomatic insult

This ledger supports:

  • narrative surfacing
  • debugging
  • save/load integrity
  • biography generation
  • player-facing "what happened here" inspection

#37.22Save/Load and Time Continuity

The architecture should be designed assuming long-running worlds and repeated saves.

That implies:

  • actor plans must serialize cleanly
  • unresolved tasks and incidents must survive reload
  • regional pressures must survive reload
  • the world should not reset invisible systems on load

If the game later supports accelerated time, pause, or background advancement during load boundaries, the same architecture should still hold.

#37.23Architectural Anti-Goals

Avoid these traps:

  • simulating every offscreen footstep forever
  • storing giant brittle event queues per actor
  • making regional simulation so abstract that people lose identity
  • making personal simulation so expensive that population size must stay trivial
  • mixing narrative presentation logic directly into core simulation state
  • making direct control a totally separate ruleset from autonomous behavior

#37.24Early Implementation Target

For a first pass, the architecture only needs to prove a small, coherent loop:

  • one settlement
  • a few nearby work sites
  • one or two risk-bearing travel routes
  • a modest population
  • a small wildlife and monster ecology
  • actor promotion and demotion across tiers
  • event logging of meaningful outcomes

If this small architecture cannot produce believable labor, travel, danger, and return behavior, the larger world design should be reconsidered before scaling up.

38

#Resource and Economy Architecture

This section defines how material flow should work across the settlement, world, and event systems.

The economy in this project should not behave like an abstract score engine. It should behave like lived material reality.

That means:

  • resources exist somewhere specific
  • someone has to get them
  • someone has to move them
  • someone has to use them
  • interruptions and losses should matter

If this layer is weak, the rest of the game loses credibility fast. Quests, households, building, and danger all depend on whether the world's material logic feels real.

#38.1Architectural Goal

The resource economy should:

  • support RTS-style gathering clarity
  • support citybuilder-style logistics chains
  • support offscreen persistence without magical resolution
  • produce meaningful pressure on routes, labor, and infrastructure
  • remain explainable to the player

The economy should create stories through friction, not through arbitrary scarcity alone.

Examples of interesting friction:

  • food exists but is too far away
  • stone is mined but hauling is unsafe
  • a household is cold because firewood was diverted elsewhere
  • a building is half-finished because planks never arrived
  • a trade promise fails because escorts were unavailable

#38.2Core Economic Principle

The game should distinguish between:

  • existence
  • access
  • transport
  • conversion
  • consumption

Those are not the same thing.

For example:

  • deer exist in the world
  • that does not mean meat exists in storage
  • logs exist in a forest
  • that does not mean the watchtower can be built
  • grain exists in a field
  • that does not mean bread exists in a house

This distinction is one of the best ways to make the world feel grounded.

#38.3Core Material Layers

The economy consists of several linked layers.

#38.3.11. Raw World Resources

These are naturally occurring or spatially embedded materials.

Examples:

  • trees
  • berry patches
  • stone nodes
  • clay deposits
  • reeds
  • wild game
  • monster reagents later

These resources should have location, yield profile, depletion behavior, and often route implications.

#38.3.22. Carried Resources

These are resources currently in motion through the world.

Examples:

  • a laborer hauling stone
  • a cart later carrying grain
  • hunters returning with meat and hides

Carried resources are crucial because they are where risk, interruption, theft, injury, and player rescue become meaningful.

#38.3.33. Stored Resources

These are resources resting in recognized containers or places.

Examples:

  • central stockpiles
  • household stores
  • building input buffers
  • expedition packs
  • regional caches later

Stored resources should have location, ownership or access rules, and capacity constraints.

#38.3.44. Processed Goods

These are transformed outputs created by labor and tools.

Examples:

  • logs into planks
  • grain into food
  • hides into leather later
  • ore into metal much later if the game reaches that depth

Processing should be a chain with labor, delay, and input dependency, not an instant number conversion.

#38.3.55. Consumed or Committed Resources

These are materials that have already been spoken for.

Examples:

  • planks reserved for a house
  • food allocated to a feast or expedition
  • medicine committed to the injured
  • stone promised to a repair task

The economy must track commitment, not just stockpile totals, or the settlement will feel like it is lying.

#38.4Resource Categories

The first implementation does not need many resource types, but the categories should be meaningful.

Useful early categories:

  • food
  • wood
  • stone
  • basic fuel or firewood
  • simple building supplies
  • hides or hunting byproducts
  • one or two special reagents for event flavor

These are enough to create:

  • gathering loops
  • hauling pressure
  • housing and warmth pressure
  • hunting expeditions
  • simple trade
  • local route importance

The early economy should favor expressive categories over quantity bloat.

#38.5Economic Chain Model

Most materials should move through a chain like:

  1. locate source
  2. harvest or acquire
  3. carry to destination
  4. store or reserve
  5. transform if needed
  6. deliver to final use
  7. consume, equip, build with, or trade

This model creates natural interruption points and natural player intervention points.

Examples:

  • tree -> logs -> hauled -> stored -> delivered to build site -> consumed by construction
  • boar -> carcass or meat/hide -> hauled home -> stored -> eaten or processed
  • stone node -> mined stone -> hauled -> stockpile -> construction or repair

The architecture should preserve where along this chain something currently is.

#38.6Stockpile Model

Stockpiles should not just be global magic inventory pools.

The economy supports several storage scopes:

  • household storage
  • building-local input storage
  • shared settlement stockpiles
  • carried inventories
  • expedition storage

This matters because:

  • proximity affects labor efficiency
  • household stress becomes material rather than abstract
  • hauling remains strategically meaningful
  • settlement layout matters

The player can still be given summarized totals for convenience, but the simulation should remember where things actually are.

#38.7Reservation and Allocation

Resources should support reservation and allocation states.

Important distinctions:

  • available
  • claimed
  • in transit
  • buffered
  • committed
  • consumed

Example:

  • 40 wood exists in stockpile
  • 18 wood is already reserved for a house
  • 10 wood is being carried to a kiln
  • only 12 wood is truly available for a new project

Without this distinction, players will constantly feel that the simulation is cheating or inconsistent.

#38.8Throughput Over Totals

The economy should care about flow rates, not just pile size.

The player should be able to feel the difference between:

  • a settlement with large stockpiles but awful delivery speed
  • a settlement with modest stockpiles but smooth throughput

This makes:

  • roads
  • nearby storage
  • job priority
  • hauling capacity
  • staging areas

actually matter.

A believable economy is often bottlenecked by movement, not abundance.

#38.9Distance and Friction

Distance should be one of the most important economic variables in the game.

Distance creates:

  • time cost
  • labor opportunity cost
  • route danger exposure
  • household absence
  • spoilage or delay pressure later if used

The player should feel that settling near a resource, building a road, or placing a forward cache changes the economy in concrete ways.

That is a major part of what makes the world cohesive.

#38.10Food Economy

Food is the first fully convincing economic loop because it naturally connects:

  • gathering
  • hunting
  • storage
  • households
  • shortages
  • expeditions
  • winter pressure later if included

The food system should ideally distinguish between:

  • food in the wild
  • food on the body of a hunter or gatherer
  • food in storage
  • food in household use

That allows memorable situations such as:

  • hunters succeed but one dies on the road home
  • the settlement is "rich" in nearby berries but still hungry because labor is diverted
  • food exists, but a grieving household fails to manage its stores well

#38.11Building and Construction Economy

Construction should be a visible material sink.

Buildings should not simply complete because a build timer ended. They should depend on:

  • materials gathered
  • materials hauled
  • labor delivered
  • sometimes tool or specialist access later

Construction should therefore expose:

  • what is missing
  • what is reserved
  • what is already on site
  • what labor remains

This creates satisfying strategy around:

  • staging materials
  • securing routes
  • prioritizing structures
  • expanding in manageable steps

#38.12Household Economy

Households should have lightweight but meaningful private economies.

They may need:

  • food
  • warmth or fuel
  • rest and shelter access
  • child or dependent care support

The game does not need to simulate every spoonful, but households should be able to experience:

  • scarcity
  • comfort
  • imbalance
  • grief-driven disruption
  • resilience

This is important because a "cozy" settlement without household material life will feel emotionally fake.

#38.13Hunting, Reagents, and Special Materials

The game's expedition side becomes stronger if not all resources are passive gatherables.

Some resources should require:

  • hunting
  • dangerous travel
  • timing
  • direct player attention
  • unusual actors or tools

Examples:

  • boar meat and hides
  • bird reagents
  • monster parts
  • rare herbs in risky terrain

These materials are useful because they bridge:

  • economy
  • exploration
  • danger
  • story

They turn the world into more than a labor spreadsheet.

#38.14Trade and External Exchange

Trade should eventually sit on top of the same material logic, not bypass it.

That means traded goods should:

  • exist materially
  • be moved along routes
  • be exposed to delay and danger
  • affect trust and reputation when promised or lost

Early trade can be very simple:

  • send goods
  • receive goods
  • succeed or fail based on route and fulfillment

Even a simple version can already support:

  • diplomatic tone
  • merchant relationships
  • escort missions
  • seasonal pressure

#38.15Economic Pressure Sources

The economy should create pressure from multiple directions at once.

Useful pressure sources:

  • seasonal preparation
  • hunger
  • construction demand
  • household needs
  • infrastructure maintenance
  • expedition provisioning
  • trade obligation
  • danger-induced route inefficiency

This helps the settlement feel alive because priorities genuinely compete.

#38.16Bottleneck Architecture

Interesting economy games are often really bottleneck games.

Common bottleneck types:

  • extraction bottleneck
  • hauling bottleneck
  • storage bottleneck
  • route safety bottleneck
  • labor bottleneck
  • processing bottleneck
  • commitment bottleneck

The player should be able to diagnose which one is occurring.

Examples:

  • quarry output high, but no one can haul it
  • food harvested, but no household receives it
  • planks exist, but all are reserved elsewhere
  • trade goods ready, but north road too dangerous

This supports both strategy and story clarity.

#38.17Economy and Offscreen Parity

The economy must remain believable offscreen without simulating every sack by hand.

Good compression targets:

  • aggregate repeated hauling on stable routes
  • compress harvest cycles into milestone updates
  • update storage deltas at believable intervals
  • represent remote trade or supply movement as route-state plus cargo-state

Bad compression targets:

  • deleting carried resources because they are inconvenient
  • skipping reservation logic offscreen
  • instantly merging all storage into one number
  • resolving dangerous supply trips with no chance of disruption

The rule should be:

  • compress motion
  • preserve ownership, commitment, and consequence

#38.18Explainability Requirements

The player should be able to inspect not just resource totals, but resource truth.

Useful outputs:

  • where this resource is coming from
  • what is consuming it
  • what is reserved already
  • why a building is waiting
  • why a household is short
  • which route is slowing delivery

Examples:

  • Watchtower stalled: 12 planks reserved, 4 delivered, north road delaying remaining shipment.
  • Household cold: no firewood delivered after labor shifted to quarry haul.
  • Granary low: west berry work interrupted by predator activity.

If the player cannot understand economic failure, the whole simulation will feel arbitrary.

#38.19CPU Strategy for the Economy

The economy can become a hidden CPU monster if every actor constantly reevaluates every resource relationship.

To stay sane:

  • use scoped job markets instead of global scans
  • treat stable supply routes as compressible patterns
  • update aggregate shortages on coarser cadence than embodied actions
  • recompute throughput summaries periodically, not every frame
  • let buildings and households emit need signals instead of polling everything constantly

The economy should feel rich because of causal structure, not because of brute-force simulation.

#38.20Anti-Goals

Avoid these traps:

  • magical global inventory with no spatial truth
  • too many resource types before the core loops are fun
  • construction that ignores hauling and reservation
  • trade that teleports goods and still claims danger matters
  • household needs so deep they bury the strategy game
  • economy tuned purely around scarcity instead of friction

#38.21Game Development Expansion

The engine already owns registered resources, finite and renewable sources, physical custody, carrying, storage, reservations, conversion, consumption, trade obligations, conserved money, and throughput diagnostics. Phase 16 proves a readable starter economy. Phase 18 adds environmental limits and discovered sources. Phase 19 expands production, markets, wages, trade, specialization, decline, and recovery. Phase 20 adds public and trusted finance. Phase 22 applies destruction, displacement, supply, and recovery pressure. Phase 23 expands validated content breadth without adding another economy owner.

39

#Autonomous Settlement Development

Worldforge should be able to run as a living settlement simulation without continuous player orders. Villagers establish households, recognize shared problems, propose work, gather materials, construct buildings, operate services, exchange wealth, maintain what they built, and respond to failure through the same systems available to the player.

The player is primarily a watcher and arbiter. They can inspect, prioritize, permit, prohibit, fund, assign, or explicitly take direct control, but ordinary settlement life must not wait for them.

#39.1Product Contract

The settlement game must support all of these outcomes:

  • a small group establishes shelter, water access, food, and storage
  • additional households join, form, divide, inherit, migrate, or disappear
  • public and private projects compete for land, labor, materials, and money
  • different settlements make different civic, cultural, economic, and defensive choices
  • production and infrastructure create real advantages and maintenance obligations
  • shortages, injury, disease, death, debt, conflict, bad leadership, or unsafe geography can stop growth or cause decline
  • successful settlements may specialize, establish outposts, influence neighbors, and become part of a regional polity
  • failure remains a valid simulation outcome; settlement labels and capabilities may regress

Growth is not a guaranteed ladder. The same starting conditions should not always produce the same town.

#39.2Observation, Orders, and Direct Control

Clicking a villager selects them for observation. It must not change their control state, current plan, pressure curves, job claim, risk tolerance, or decision scoring.

Selection may:

  • show identity, household, traits, needs, condition, wealth, equipment, current intent, job, destination, relationships, memories, and recent decision reasons
  • make the villager easier to follow with the camera
  • mark the villager as a possible recipient for an assignment or command
  • keep presentation data available while the inspection surface is open

Selection must not:

  • enter direct control
  • cancel or supersede autonomous work
  • make the villager aware that the player is watching
  • change IAUS inputs or HTN planning
  • create simulation pressure merely because the camera or cursor is nearby

Direct control requires a separate explicit action such as Take Control, a dedicated hotkey, or an unambiguous command-mode action. The action uses normal command validation and may be rejected. Release Control is equally explicit. Selection and control may therefore refer to different sets: the player can inspect one villager while controlling another person or Party.

An ordinary move, gather, build, or priority order uses assignment authority unless the player has explicitly taken direct control. Direct control is reserved for moment-to-moment steering, dangerous expeditions, tactical encounters, and other deliberate interventions.

#39.3Settlement Identity Is a Capability Profile

village, town, city, and kingdom should be readable descriptions derived from actual state, not authoritative upgrade levels or one linear technology tree.

A settlement profile is derived from independently owned facts such as:

  • resident and dependent population
  • safe housing and household capacity
  • water, food, fuel, health, and sanitation reliability
  • storage, transport, and route access
  • production breadth, tool quality, and specialist labor
  • public safety, maintenance, and defensive capability
  • market reach, trade obligations, and financial institutions
  • civic, cultural, religious, educational, and governing institutions
  • influence over outposts, settlements, territory, and external obligations

The profile can describe both scale and character. Examples include:

  • small agricultural village
  • fishing and river-trade town
  • fortified mining town
  • pilgrimage center
  • market city
  • declining former capital

No building should directly set is_city = true. A city that loses population, water reliability, trade, or institutional continuity may remain physically large while becoming functionally weak. A kingdom is not a very large city; it is a governed network of settlements, institutions, territory, obligations, and external relationships.

#39.4Capability Domains and Hierarchical Needs

Settlement needs are hierarchical in pressure, but not a rigid unlock tree. Critical deficits produce urgent work. Stable foundations allow households and institutions to pursue higher-order goals. Several domains may develop at once, and culture or geography may change their relative weight.

#39.4.1Survival

  • potable water access and delivery
  • calories, nutrition variety, preservation, and seasonal reserves
  • shelter, warmth, sleep, and household capacity
  • sanitation, waste handling, burial, and disease control
  • basic treatment, care, and recovery

#39.4.2Stability

  • safe storage and stock rotation
  • reliable routes and hauling capacity
  • fire prevention and emergency response
  • tool availability and routine maintenance
  • protection from animals, crime, raids, and environmental exposure

#39.4.3Production

  • extraction and renewable resource stewardship
  • processing, workshops, tools, fuel, and skilled labor
  • construction capacity and material staging
  • transport equipment, roads, bridges, docks, and depots
  • surplus creation without exhausting households or local ecology

#39.4.4Social and Civic Life

  • gathering, hospitality, leisure, ritual, worship, and mourning
  • education, apprenticeship, records, and knowledge transmission
  • dispute resolution, leadership, public work, and trusted institutions
  • care for children, elders, injured people, and dependents
  • settlement identity, customs, celebrations, and public memory

#39.4.5Regional and Sovereign Capacity

  • markets, trade routes, tariffs, contracts, and reserve policy
  • migration, diplomacy, aid, and inter-settlement obligations
  • outposts, roads, messengers, defense, and emergency mobilization
  • durable offices, law, treasury, succession, and institutional continuity
  • shared authority across multiple settlements without erasing local identity

Higher-order projects do not become impossible whenever one household is hungry. Their scores, funding, labor access, and political support should respond to the severity and duration of lower deficits.

#39.5Settlement Scale Descriptors

These descriptors communicate typical capability, not mandatory population thresholds or fixed building checklists.

#39.5.1Household, Stead, or Camp

  • one or a few households
  • direct access to shelter, fire, food, and water
  • personal storage and mostly manual production
  • little redundancy when a worker, route, or source fails

#39.5.2Hamlet

  • several households sharing nearby sources and labor
  • communal storage or a barn, shed, or cache
  • one or two repeated work roles
  • informal shared decisions and limited emergency capacity

#39.5.3Village

  • dependable water, food, housing, and seasonal storage
  • several material sources and basic processing
  • public meeting space and some shared infrastructure
  • enough labor diversity for construction, maintenance, care, and defense

#39.5.4Town

  • specialist workshops and multi-step production
  • market, inn or tavern, religious or civic institutions, and formal storage
  • maintained regional routes and trade obligations
  • durable leadership, records, public services, and meaningful specialization

#39.5.5City

  • multiple districts, markets, services, and infrastructure networks
  • deep production, finance, education, health, administration, and culture
  • large import requirements and consequences when regional logistics fail
  • several overlapping institutions rather than one universal civic owner

#39.5.6Regional Polity or Kingdom

  • multiple settlements and outposts under negotiated or imposed authority
  • treasury, law, succession, diplomacy, defense, and regional infrastructure
  • local settlements retain distinct economies, cultures, leaders, and failure risks
  • collapse may fragment the polity without deleting its people, buildings, debts, or history

#39.6Autonomous Project Lifecycle

Villagers and institutions should be able to create and complete projects without a player placing every building.

The lifecycle is:

  1. owner facts emit a need, opportunity, ambition, or obligation
  2. households, occupations, leaders, or institutions generate bounded project proposals
  3. hard gates reject impossible land, knowledge, authority, safety, or material conditions
  4. eligible proposals are scored from pressure, benefit, cost, risk, culture, relationships, sponsor wealth, public policy, and downstream needs
  5. a sponsor chooses land, funding, material reservations, and labor policy
  6. the normal Construction and Work owners execute site preparation, delivery, building, and commissioning
  7. the completed building registers capabilities, work demand, operating inputs, capacity, maintenance, and side effects through existing owners
  8. continued value is evaluated; a building may be upgraded, repurposed, sold, abandoned, damaged, demolished, or inherited

This is not a universal settlement AI manager. Need owners emit facts, proposal definitions remain data, IAUS ranks eligible alternatives, and existing domain systems execute the accepted project.

This boundary still requires a coordination plane. Avoiding a universal mutation owner must not leave food, farming, construction, infrastructure, trade, demography, and routine schedulers with no shared strategy. Settlement owns a retained development plan made of needs, forecasts, goals, commitments, dependencies, reconsideration conditions, and causal history. A pure Game reasoner proposes changes to that plan from immutable owner snapshots. App submits the accepted plan's revision-checked requests to the existing domain owners.

The development planner may decide that a settlement should restore a seasonal food reserve, add housing, repair an access road, or establish a workshop. It may not create food, claim a worker, change land, place a completed building, move money, or advance a route. Resource, Work, Actor, World, Construction, Household, Production, Trade, and Route retain those mutations.

Player direction changes priorities, permissions, sponsorship, land reservations, or explicit assignments through the same planning and owner command paths. Releasing control returns authority to the retained settlement plan rather than restarting a separate autonomous scenario.

The player may change priorities, reserve land, contribute funds, forbid a category, approve a public project when their authority requires it, or explicitly sponsor an alternative. Those actions influence the same proposal and construction path used by autonomous sponsors.

#39.7Distinct Settlement Choices

Alternative projects should satisfy overlapping needs in different ways.

For example:

  • a tavern improves hospitality, leisure, information exchange, food service, and trade traffic, but consumes food, drink, fuel, labor, and public order capacity
  • a church, shrine, or temple supports ritual, care, burial, legitimacy, community cohesion, and charitable reserves, but consumes construction wealth, staff time, and institutional support
  • a market improves exchange and specialization but increases traffic, theft exposure, price pressure, and dependence on routes
  • a fortified granary improves reserve security but costs stone, guards, maintenance, and convenient household access

Choices need not be permanently exclusive. Their opportunity cost, sponsor support, land, labor, maintenance, and cultural effects create different development paths. Content definitions supply capabilities and costs; code must not contain a tavern_or_church branch.

#39.8Building Families

Buildings are registered definitions with stable identities. Each definition states:

  • capabilities and service capacity
  • valid footprints, terrain, access, and adjacency
  • construction stages, material alternatives, tools, labor, and skill requirements
  • operating inputs, outputs, jobs, storage, and occupancy
  • maintenance, fuel, cleanliness, safety, and decay
  • ownership, access, rent, tax, or public-service policy
  • noise, fire, pollution, disease, traffic, morale, or reputation effects
  • upgrade, repurpose, damage, abandonment, and demolition rules

The content catalog should grow through families rather than unrelated special cases.

#39.8.1Shelter and Household

  • temporary camp, hut, cottage, longhouse
  • farmhouse, urban home, tenement, estate
  • guesthouse, dormitory, barracks

#39.8.2Water, Sanitation, and Health

  • water access point, well, cistern, pump
  • bath, latrine, drain, sewer, waste site
  • healer's room, clinic, infirmary, hospital
  • cemetery, burial ground, crematory where culturally appropriate

#39.8.3Storage and Logistics

  • ground stockpile, shed, barn, granary
  • warehouse, cold store, cellar, armory
  • cart yard, depot, dock, caravan stop

#39.8.4Food and Agriculture

  • gathering camp, fishing station, hunting lodge
  • field, orchard, pasture, animal shelter
  • mill, bakery, kitchen, smokehouse, butcher, brewery

#39.8.5Material and Craft Production

  • woodcutter camp, sawpit, lumbermill
  • quarry, mason yard, clay pit, kiln
  • mine, charcoal burner, smelter, foundry, forge
  • tannery, loom, tailor, carpenter, general workshop

#39.8.6Civic, Cultural, and Commercial

  • village green, meeting hall, town hall, courthouse
  • tavern, inn, market, shop, guild hall
  • shrine, church, temple, monastery
  • school, archive, library, theater, festival ground
  • counting house, bank, trust, treasury, mint

#39.8.7Safety, Defense, and Regional Infrastructure

  • watch post, fire station, wall, gate, tower
  • guard house, barracks, refuge
  • road, bridge, ferry, dock, lighthouse
  • waystation, outpost, customs house

Specific cultures, biomes, eras, and technologies may supply different buildings for the same capability.

#39.9Resource Definition Contract

Resource breadth must be data-driven. A new tree species, ore, crop, recipe, coin, or gemstone should normally require content definitions and validated relationships, not a new C++ branch.

Each material definition should include only relevant fields from this contract:

  • stable resource ID and display metadata
  • material family, physical form, and property tags
  • mass, volume, stack, unit, and transport characteristics
  • quality, condition, freshness, contamination, and decay policy
  • fuel, nutrition, warmth, hardness, value, or other domain properties
  • storage, temperature, handling, hazard, and spoilage requirements
  • substitution group and conversion compatibility
  • source, renewal, depletion, and stewardship policy
  • recipe, construction, equipment, consumption, and trade references
  • owner, location, provenance, reservation, and legal-access rules

Species and grades should matter only where they create decisions. Oak and pine may differ in growth, mass, strength, fuel value, appearance, or preferred uses. If they do not yet create a decision, both may use a broader construction timber substitution group while retaining source provenance for later content expansion.

#39.10Material Families and Growth Bands

The list below is a content framework, not a requirement to simulate every item immediately.

#39.10.1Foundation Food and Water

  • forage: berries, mushrooms, roots, nuts, wild greens
  • aquatic: freshwater fish, shellfish where the biome supports them
  • game: small game, venison, boar, meat, fat, bone, hide
  • crops: wheat or another regional grain, vegetables, legumes, fruit
  • water: raw freshwater, potable water, contaminated water
  • prepared food: meal, flour, bread, stew
  • preserved food: dried berries, smoked fish, smoked meat, grain reserve

Wells, rivers, springs, cisterns, and aqueducts are sources or infrastructure. They are not interchangeable resource items. Their output may share the potable water material contract after quality and contamination checks.

#39.10.2Foundation Structural and Household Materials

  • timber by useful species or property group
  • logs, fuelwood, charcoal, planks, beams
  • fieldstone, cut stone, gravel, sand
  • clay, brick, ceramic
  • reeds, plant fiber, rope
  • hides, leather, wool, cloth
  • salt, herbs, simple medicine

#39.10.3Metal and Mineral Families

  • copper, tin, iron, silver, gold, and other approved ore families
  • ore, concentrate, ingot, alloy, component, tool, and finished-good forms
  • coal or other fuel where required by the production model
  • common stone, building stone, decorative stone, and useful mineral deposits
  • gemstones in rough, cut, set, and heirloom forms

Stone types are minerals or rock families. Tree species remain timber sources.

#39.10.4Mid-Development Goods

  • preserved foods, drink, feed, seed, and breeding stock
  • flour, bread, dairy, oil, leather, textiles, ceramics, glass
  • bronze, iron, steel, tools, fittings, weapons, armor
  • carts, barrels, furniture, construction components
  • medicine, paper, records, books, instruments, and specialist supplies

#39.10.5Late and Generational Goods

  • precision tools and complex production equipment
  • architectural components and regional infrastructure supplies
  • luxury food, cloth, jewelry, art, ceremonial goods, and diplomatic gifts
  • archives, charters, deeds, account records, and authenticated claims
  • heirlooms and named crafted objects with provenance, ownership, memory, and inheritance
  • seed strains, breeding lines, recipes, and craft knowledge preserved through their proper biological, knowledge, or institution owners rather than treated as generic inventory

Knowledge, legitimacy, reputation, influence, and faith are not material resources. They retain their own owners and may affect access, decisions, and value without becoming stackable inventory.

#39.11Money, Wealth, and Financial Custody

Villagers can own money. Wealth always has an owner, custody location, and transfer history.

Supported custody scopes should include:

  • coins carried in an Actor wallet or inventory
  • household money stored at home
  • business or workshop operating funds
  • institutional reserves
  • settlement treasury
  • deposits held in trust by a bank-like institution

Gold, silver, and copper may exist both as commodities and as minted denominations. Ore, ingots, jewelry, and coins are different forms with different uses. Currency definitions state issuer, metal or backing, denomination, mass, validity, and acceptance. Prices use an exact value unit and cannot rely on floating-point comparison.

A deposit is not a teleported pile of coins. It is a claim recorded by a financial institution and a corresponding liability backed by reserves, loans, property, or other approved assets. Deposits, withdrawals, transfers, credit, interest, default, theft, bank failure, inheritance, taxation, and currency distrust must preserve ownership and conservation through explicit transactions.

Early settlements may use sharing, barter, favors, commodity exchange, or coin side by side. Household provisioning must not require wages unless the settlement's actual policy and ownership model make that true.

At scale, stable balances and periodic account summaries may replace embodied movement of every coin inside a trusted institution. Cash withdrawal, caravan payment, robbery, institutional failure, and audit still reconcile against real reserves and transaction records.

#39.12Prosperity, Failure, Decline, and Recovery

The simulation must not optimize every settlement toward success.

Valid failure pressures include:

  • exhausted or seasonally unavailable resources
  • crop failure, contaminated water, fire, weather, disease, or injury
  • insufficient hauling, tools, skills, housing, care, or maintenance
  • dangerous or severed routes
  • badly chosen projects and unsustainable operating costs
  • unequal ownership, debt, theft, corruption, or loss of institutional trust
  • death or departure of key workers, leaders, caregivers, or knowledge holders
  • conflict between households, institutions, cultures, or settlements
  • war, migration, succession crisis, trade collapse, or ecological damage

Failure should remain causal and inspectable. It may produce stalled construction, abandoned buildings, rationing, household collapse, emigration, population decline, institutional failure, fragmentation, or settlement abandonment.

Recovery may come from adaptation, migration, changed policy, aid, trade, new leadership, repurposed buildings, ecological recovery, or player intervention. Recovery uses the same systems; it is not a free reset.

#39.13Scale and Content Expansion Contract

Settlement breadth must scale by content and bounded schedules, not global reevaluation.

  • buildings emit scoped service, input, maintenance, and labor needs
  • households emit bounded private needs and proposals
  • settlements maintain periodic capability, shortage, throughput, and project summaries
  • proposal generation is event- or cadence-driven and evaluates a bounded eligible set
  • regional polities aggregate obligations and capabilities without polling every resident
  • cold settlements retain causal summaries, active obligations, project milestones, balances, and significant events
  • promotion restores embodied detail from authoritative owner state rather than regenerating a generic town

Adding a resource, building, recipe, culture, institution, or settlement profile should extend validated catalogs and narrow resolver registries. It must not add a parallel economy, settlement manager, save path, or simulation tier.

#39.14Player-Facing Proof of Life

The normal interface should let the player observe:

  • people choosing, claiming, performing, interrupting, and completing work
  • visible extraction, hauling, storage, processing, construction, and consumption
  • household and public shortages
  • why a project was proposed, selected, funded, stalled, changed, or abandoned
  • who owns money, where it is held, and why it moved
  • how a building changes services, work, costs, risks, and settlement capability
  • which pressures support or threaten the current settlement profile

The first proof should favor a small number of complete visible loops. Later content breadth must reuse those loops and preserve their explanations at larger scale.

#39.15Phase Routing

  • Phase 14 exposes versioned detached settlement, resource, building, wealth, and proposal facts plus typed development commands through the same authoritative owners, then composes the standard replaceable interface through documented surfaces and slots.
  • Phase 15 separates observation selection from explicit direct control while proving connected movement.
  • Phase 16 proves an autonomous starter settlement with visible food, water, materials, storage, construction, several building families, personal and household money, one autonomous project choice, and one recoverable or terminal failure.
  • Phase 17 adds household wealth transitions, care, death, inheritance, migration, and generational continuity.
  • Phase 18 adds ecological production limits, seasonal sources, field risk, environmental disruption, and regional resource discovery.
  • Phase 19 expands autonomous projects, specialization, production, markets, wages, trade, settlement capability profiles, outposts, decline, and recovery.
  • Phase 20 adds public finance, taxation, banks or trusts, institutional projects, civic choice, leadership, and regional-polity formation.
  • Phase 21 composes systemic incidents, dialogue, quests, personal adventures, and authored arcs from real people, settlements, institutions, travel, and durable aftermath.
  • Phase 22 applies defense, war, loss, occupation, and supply pressure to the same settlements and material economy.
  • Phase 23 expands validated resource, building, culture, interface, audio, art, and scenario content after the systemic families are proven.
40

#Technical Architecture Direction

The technical model implied by the current design discussion includes:

  • an App-owned application and session flow state machine that remains separate from simulation run policy and gameplay state
  • chunk-based streaming for world breadth
  • region-level simulation for low-fidelity persistence
  • actor state machines or HTN-like planning for interpretable behavior
  • event promotion and demotion across fidelity tiers
  • stateful per-person identity data
  • route, risk, and logistics modeling that spans multiple chunks

Important technical principle:

Do not design the architecture around "simulate every entity equally forever."

Design around:

  • selective fidelity
  • compressible actor state
  • recoverable causality
  • importance-driven simulation budgets
41

#Design Review and Production Scaffolding

This section reviews the current design as a buildable game rather than only a concept. Its purpose is to identify:

  • what the game actually has to prove to be fun
  • how the systems are ordered
  • where the design is strongest
  • where it is currently fragile
  • how to push for maximum perceived world parity without unsustainable CPU cost
  • what rules preserve a cohesive player experience

The central discipline of the whole project should be:

  • simulate what creates meaning
  • compress what creates cost
  • surface what creates attachment

If the project follows that rule consistently, it can feel much larger and richer than its actual runtime expense.

#41.1What the Game Must Actually Deliver

The full design document contains many exciting systems, but the project will stand or fall on a smaller set of promises.

The game must make these things feel true:

  • villagers are people, not faceless workers
  • the settlement works even when the player is not hand-holding it
  • direct control is exciting because it changes real lives and real outcomes
  • offscreen life stays causally believable
  • infrastructure, travel, and risk matter
  • events feel like part of the same world as hauling, hunger, and building

If those six promises land, the game can survive with modest content breadth for a long time.

If those promises fail, no amount of open-world scale or event quantity will save it.

#41.2Canonical Build Order

The project is built around dependency truth rather than isolated features. Phase 0A-13 completed the runtime, world, Actor, work, control, consequence, persistence, scale, content, and release owners. The remaining canonical order is the gated Game Development track:

  1. expose the existing engine through the scriptable standard interface, typed commands, safe

reload, recovery, and the external API Reference

  1. connect embodied chunks while preserving observation, control, route, navigation, residency,

heat, save, replay, and order continuity

  1. compose one inhabited settlement with autonomous food, water, materials, construction, money,

project choice, failure, and visible explanation

  1. deepen daily life, health, care, households, time, death, migration, and generations
  2. compose expeditions, ecology, climate, discovery, uncertainty, return, and aftermath
  3. expand autonomous settlement growth, production, trade, wealth, specialization, progression,

decline, and recovery

  1. add governance, institutions, public and trusted finance, diplomacy, and regional polities
  2. compose systemic incidents, dialogue, quests, personal adventures, authored arcs, and durable

narrative aftermath

  1. expand rival factions, supplied warfare, defense, remote conflict, loss, and recovery
  2. close measured content production, modding policy, atmosphere, accessibility, long-session

balance, supported platforms, compatibility, and release expansion

This sequence does not authorize an unbounded or content-heavy world before the nearby simulation is compelling. Every phase begins with a narrow vertical proof, extends the existing authoritative owners, closes continuity and player readability, and proves scale before the next phase opens.

In practical terms, the first real question is not "can the game stream a vast world?"

It is:

  • can one villager take one believable job
  • get interrupted
  • remain understandable
  • and come back changed in a way the player cares about

If that loop works, the rest can scale outward.

#41.3Gameplay Proof Ladder

These are cross-phase product proofs, not a second implementation order. Their engine foundations exist; Game Development must now prove them as readable normal play at increasing breadth.

#41.3.1Prototype 1: Honest Worker Loop

Prove:

  • villager claims job
  • villager walks to site
  • villager gathers
  • villager returns
  • stockpile changes
  • interruption can occur
  • player can inspect why

If this does not feel good, stop and fix it before adding narrative ambition.

#41.3.2Prototype 2: Offscreen Continuity

Prove:

  • actor compresses cleanly offscreen
  • task still progresses
  • route danger can alter outcome
  • actor rematerializes plausibly
  • no obvious teleport or fake-resolution feeling appears

This is the foundation of the "living world" claim.

#41.3.3Prototype 3: Direct-Control Story Episode

Prove:

  • player selects two or three villagers
  • leads a hunt, escort, or rescue
  • traits and condition matter during the episode
  • aftermath changes memory, injuries, stockpiles, and relationships
  • villagers return to autonomous life without feeling disconnected

This validates the core fantasy line between ambient story and playable story.

#41.3.4Prototype 4: Social and Institutional Consequence

Prove:

  • event affects relationship or reputation
  • information spreads imperfectly
  • later event outcome reads prior history

This is where the world begins to feel authored by memory rather than isolated incidents.

#41.4Strongest Parts of the Concept

The current design is strongest where multiple layers reinforce each other instead of competing.

Current strengths:

  • direct control is justified by consequence, not just action flavor
  • autonomy has mechanical purpose instead of being decorative AI
  • infrastructure matters because travel and risk matter
  • events are grounded in simulation state instead of floating above it
  • traits and memory are intended to change actual outcomes, not just dialogue
  • offscreen continuity is treated as a first-class design problem

This gives the project a genuine identity. It is not just "RTS plus RPG." It is a world where governance, travel, personhood, and intervention feed each other.

#41.5Weak Spots and Failure Modes

The design also has several dangerous weak spots that need active containment.

#41.5.11. The Everything-Matters Trap

If every villager can participate in every life system at equal depth all the time, the project becomes unreadable and too expensive.

The solution is not to abandon personhood.

The solution is:

  • universal systemic eligibility
  • selective intensity
  • strong surfacing filters

Everyone can matter. Not everyone can be equally hot at all times.

#41.5.22. The Spreadsheet Trap

If the player mostly watches jobs, shortages, route statuses, and alerts without enough embodied intervention, the game stops feeling like a world and starts feeling like a management dashboard.

The cure is to make sure that:

  • direct control episodes happen often enough
  • they are worth doing
  • they permanently matter afterward

#41.5.33. The Puppet Trap

If direct control overrides too much, villagers stop feeling like people.

If it overrides too little, direct control feels ornamental.

The current doc points the right way already:

  • strong control over immediate action
  • identity persistence in performance and consequence

That principle should not be softened later for convenience.

#41.5.44. The Noise Trap

A living world can easily become a world that never shuts up.

If every romance seed, injury, rumor, route hazard, and shortage is surfaced similarly, the player will stop reading the world.

The game needs:

  • ambient events
  • surfaced events
  • urgent events

with clear filtering logic and strong prioritization.

#41.5.55. The Infinite-World Trap

Infinite worlds are seductive and often poison early development.

The risk is not only technical. It is design dilution.

An endless world can hide the fact that:

  • the local loop is weak
  • personhood is shallow
  • jobs are opaque
  • events are repetitive

The world should expand only after the nearby world is compelling.

#41.6Cohesion Rules

To stay cohesive, the game should protect a few non-negotiable design rules.

#41.6.1One World, Not Layered Minigames

The builder loop, RTS loop, and RPG/event loop should all read and write the same core state.

That means:

  • hunting affects food and memory
  • diplomacy affects reputation and trade
  • injury affects labor reliability
  • road building affects event probability and logistics

If any major activity becomes detached from the settlement sim, the project will start to feel like stitched modes instead of one world.

#41.6.2People Before Content Volume

It is better to have:

  • fewer villagers
  • fewer event templates
  • fewer map regions

if the people inside them feel legible and changed by life.

This project is not a content-count fantasy first. It is an attachment fantasy first.

#41.6.3Consequence Before Spectacle

Big events matter only if their aftermath matters.

A boar hunt is compelling because:

  • someone may be injured
  • food returns home
  • confidence rises
  • fear spreads
  • relationships change

not because a boar has cool attack animation alone.

#41.6.4Explainability Over Black-Box Cleverness

Any system that cannot be explained in plain language to the player is a likely trust problem.

Prefer:

  • visible causes
  • inspectable statuses
  • named blockers
  • understandable priority rules

over hidden "smart" behavior.

#41.7Maximum Parity Without Frying the CPU

The project should chase perceived parity, not literal parity.

The player does not need every square meter of world and every villager to run at identical fidelity.

The player needs confidence that:

  • things continue
  • outcomes follow causes
  • important people stay coherent
  • returning to a place makes sense

That means maximum parity should be pursued through architectural illusion backed by real state.

#41.7.1Spend CPU on the Following

  • currently visible embodied actors
  • selected or recently selected actors
  • active combat and hunts
  • settlement core logistics
  • route intersections near player interest
  • actors involved in dangerous or story-hot chains

These are the places where fake behavior is easiest for the player to notice.

#41.7.2Save CPU on the Following

  • idle remote wilderness
  • repeated offscreen footstep simulation
  • full social reevaluation every tick
  • exact remote creature pathing
  • universal job scoring against all jobs by all villagers
  • perfect replayability of offscreen time

These are expensive and give poor return if simulated literally.

#41.7.3Techniques That Preserve Believability Cheaply

  • route-segment travel instead of constant offscreen pathing
  • milestone-based task progress instead of giant action tapes
  • regional opportunity fields instead of fully embodied remote encounters
  • actor heat scoring instead of simple distance-only fidelity rules
  • event aftermath records instead of full historical replay
  • household and social updates at milestones rather than continuous polling

The right question for every expensive system is:

  • what player-facing lie becomes visible if this is compressed?

If the answer is "not much," compress it.

If the answer is "the player will feel cheated," keep it hot.

#41.8Observability Requirements

For this design to survive contact with players and developers, the simulation needs to be easy to inspect.

Developer-facing observability should eventually include:

  • actor current heat tier
  • why the actor or region is at that heat tier
  • pending promotion or demotion reason
  • current plan and next milestone
  • claim and reservation state
  • route risk summary
  • last interruption cause
  • event ledger entry chain
  • memory and reputation deltas after major incidents

Player-facing observability should include:

  • what a villager is doing
  • why they are doing it
  • why they stopped
  • whether they are focused, hot, warm, or backgrounded when relevant
  • what changed because of a recent event
  • what risks a route or action implies

Without this, both debugging and player trust will collapse.

#41.9Content Strategy Notes

This game does not need a huge number of event templates at first.

It needs a small number of event families with strong systemic reuse.

Good early families:

  • hunt
  • escort
  • injury or sickness
  • missing person
  • trade visit
  • diplomatic summons
  • discovery on route
  • household stress event

Each family should be able to read:

  • who is involved
  • what they are like
  • where they are
  • what the settlement needs
  • what the region is like

That will produce more variety than dozens of shallow custom scenes.

#41.10Warning Signs During Development

The project is drifting in a bad direction if:

  • the settlement only works under heavy player micromanagement
  • villagers feel interchangeable in outcome terms
  • offscreen resolution feels like teleporting or hand-waving
  • direct control becomes optimal for routine chores
  • event volume increases but story recall does not
  • the world grows larger while local life grows less legible
  • the player cannot explain why labor or social outcomes occurred

These should be treated as design alarms, not polishing issues.

#41.11Practical Definition of Success

The design is succeeding if a player can naturally tell a story like:

"I sent three villagers to hunt because food was low. One of them was already nervous after a wolf scare, and he broke first when the boar charged. The other two brought the meat back, but one was injured. That injury slowed our quarry output, which delayed the watchtower, which made the north road feel unsafe for a week. Later, when I needed someone to escort a trade run, I chose the one who held his nerve."

That anecdote contains:

  • resource pressure
  • personality
  • direct control
  • injury
  • logistics consequence
  • infrastructure consequence
  • future decision impact

That is the game's promise in one chain.

If the game reliably produces stories like that, the concept is working.

42

#Data Model Notes

Likely persistent data categories per person:

  • unique identity
  • settlement and household membership
  • stats
  • traits
  • learned tendencies
  • memories
  • bonds
  • role
  • inventory
  • current task or mission
  • current location abstraction
  • active conditions
  • notable biography flags

Likely persistent data categories per region:

  • chunk membership
  • travel routes
  • threat fields
  • resource sites
  • weather or biome state
  • settlement influence
  • traffic intensity
  • recent incidents

Likely persistent data categories per settlement:

  • population
  • building state
  • stockpiles
  • infrastructure
  • household graph
  • diplomatic status
  • current requests, missions, and shortages
43

#Completed Engine Scope Baseline

The completed Phase 0A-13 engine sequence deliberately did not attempt all dimensions at once.

It excluded:

  • rival AI civilizations
  • full dynasty simulation depth
  • endless authored quest chains
  • ultra-deep genetics
  • world-scale perfect persistence of every micro action

It proved reusable foundations for:

  • direct RTS-style control
  • autonomous worker behavior
  • a small settlement loop
  • a living-person model with traits and memories
  • meaningful offscreen continuity
  • one or two player-led expedition or event types
44

#Completed Vertical Slice Shape

The engine vertical slice was bounded around:

  • one settlement
  • a bounded but streamed map
  • resource gathering and stockpiling
  • one authored construction or upgrade project with visible material and labor flow
  • wildlife hunting and simple monster danger
  • several named villagers with traits and memories
  • direct control for one dangerous Party trip, incident response, and scouting; multi-step escort and rescue requests expand this foundation in Phase 11
  • one noncombat narrative event; diplomacy expands this path in Phase 11
  • offscreen risk and return behavior

The Phase 3 and Phase 6 construction proof begins from an existing authored construction site and lets the player assign Actors through the normal Work lifecycle. It does not include building placement. Phase 7 owns the first player placement, upgrade, repair, and settlement-expansion path.

If this slice is not compelling, larger world breadth should not be attempted yet.

45

#Vertical Slice and Expansion Contract

The first vertical slice is intentionally small. It should prove one honest example of each core relationship before the project adds breadth:

  • one bounded streamed world and one meaningful route
  • several persistent people with different capabilities, traits, needs, and memories
  • one food loop and one construction or upgrade loop using the same job and reservation owners
  • one dangerous player-led trip and one noncombat discovery, social, or institutional event
  • one household consequence that changes a later decision
  • player-facing explanations for what happened, why it happened, and what can be done next

Small content count does not authorize narrow architecture. The first food source, route, building, incident, memory, and household must use stable IDs, explicit owners, versioned state, deterministic ordering, bounded work, and data contracts that allow a second instance without replacing the first implementation. This does not require a universal framework or speculative behavior. It requires that domain code describe food as registered resource data rather than a special FoodLoop, that an incident use the same lifecycle intended for later incident families, and that save/load follow the same owner that mutates runtime state.

The implementation roadmap has three bands:

  1. Phases 1-6 build and prove the bounded vertical slice.
  2. Phases 7-13 expand the proven contracts into a production-capable engine, systemic gameplay foundation, content pipeline, and reproducible release checkpoint.
  3. Game Development Phases 14-23 compose those systems into the connected, inhabited, long-form game. Their sequence is approved, but each phase remains planned until the previous phase proof passes and the next gate is explicitly activated.

The expansion sequence is:

  • Phase 7: settlement growth, buildings, housing, and infrastructure
  • Phase 8: exploration, knowledge, ecology, and environment
  • Phase 9: production, crafting, trade, and the regional economy
  • Phase 10: personhood, social life, progression, households, and lineage
  • Phase 11: structured events, quests, diplomacy, and institutions
  • Phase 12: combat, warfare, factions, and world-scale pressure
  • Phase 13: content production, world breadth, accessibility, and release

These later phases are planned owners, not permission to implement their systems early. Each opens only after the vertical slice passes and its direct prerequisites remain proven. Every Phase 1-6 section states which later phase extends it, which authority must remain stable, and which shortcut would force replacement. The generated Vision Coverage section maps the major Current systems to both their first proof and their expansion owner.

Completing Phase 13 proved that the architecture, systemic owners, representative scale, content validation, accessibility baseline, packaging, and release recovery work together. It does not mean the complete game design has reached final breadth or balance. The Game Development guide owns that post-engine sequence: live UI iteration, connected world traversal, an inhabited settlement, daily life, expeditions, regional economy, governance, personal narrative, factions, content production, and release expansion. The Phase 0A-13 engine sequence is sealed at its checkpoint. Engine Development remains the current implemented-engine reference and changes only after a proved engine-facing change.

Deferred does not mean forgotten. A deferred item must name its future phase and activation condition. If a Current-design promise has no owner, it is a roadmap defect that must be resolved before dependent implementation begins.

46

#Major Risks

The concept contains the seeds of multiple full games:

#46.1Scope Explosion

  • RTS
  • citybuilder
  • colony sim
  • open-world RPG
  • emergent social sim
  • narrative event system

This is the primary project risk.

#46.2Simulation Opacity

If villagers behave richly but opaquely, the player may stop trusting the game. Interpretable decision logic and good surfacing are mandatory.

#46.3Micromanagement Trap

If direct control is too strong, the player must control everything. If it is too weak, the RPG/intervention fantasy collapses.

#46.4Story Noise

If every background event is surfaced equally, no event feels important.

#46.5Open-World Complexity

Broad streamed-world requirements increase:

  • persistence burden
  • streaming burden
  • debugging burden
  • pathfinding complexity
  • save and load complexity

This should be earned by a smaller successful sim, not assumed from the start.

47

#Guiding Principles

When future decisions arise, prefer the option that best protects these principles:

  • people should feel like people, not worker counters
  • the world should remain alive offscreen
  • offscreen life should preserve causality rather than fake instant resolution
  • direct control should create memorable turning points
  • autonomy should remain useful and trustworthy
  • infrastructure and travel should matter
  • systems should be interpretable by the player
  • selective fidelity is necessary, not a compromise failure
48

#Remaining Product Decisions

The engine contracts, selective-fidelity model, representative 20,000-person proof, ownership boundaries, and baseline player lenses are settled. The following balance and production decisions remain evidence-gated because their correct values depend on the complete player-facing loop:

  • Phase 14: which query, event, command, widget, package, and reload budgets keep the scripted standard interface responsive without waking or copying cold simulation state?
  • Phase 15: which connected-region size, border density, residency budget, and travel feedback make the world feel continuous without hiding weak local play?
  • Phase 16: how much building placement, housing pressure, maintenance, and settlement breadth creates strategy without burying personhood under construction management?
  • Phase 17: how punishing should sickness, death, household collapse, aging, migration, and lineage be within the intended cozy frontier tone?
  • Phase 18: how quickly should knowledge become stale, how harsh should weather and ecology be, and how much regional breadth remains readable and performant?
  • Phase 19: how deep can production, trade, wealth, and autonomous growth become before material causality and individual lives become opaque?
  • Phase 20: how much civic authority, finance, law, and polity complexity creates meaningful governance without replacing people with abstract institutions?
  • Phase 21: what systemic-to-authored balance produces memorable dialogue and quests without allowing narrative content to bypass the living simulation?
  • Phase 22: what faction and warfare pressure creates meaningful stakes without turning Worldforge into a conventional army-first RTS?
  • Phase 23: which supported platforms, content breadth, addon permissions, authoring tools, audio scope, accessibility commitments, and release services are justified by measured production and player evidence?
49

#Working Summary

This project aims to create a game where:

  • settlement growth feels strategic
  • people feel individually shaped by life
  • the world stays active when the player looks away
  • direct control lets the player personally author decisive moments
  • stories arise from systems, not only scripts

The clearest current identity for the project is:

A cozy frontier settlement sim with RTS control, RPG intervention, and emergent local drama.

Implemented engine Back to tabs

#Worldforge Engine and Runtime Reference

The current implemented architecture, execution paths, ownership rules, persistence contracts, proof, limits, and extension boundaries of Worldforge.

Worldforge provides deterministic simulation, persistent identity, streamed world state, autonomous game systems, explicit control boundaries, inspectable decisions, and platform-independent runtime services. This reference describes implemented behavior only.

Current status: The Phase 13 engine baseline is sealed. This page describes implemented behavior; Game Development owns future sequencing.
How to use this page: Open one E-section for architectural behavior, then follow its Systems evidence for exact owners, source files, functions, and tests. Completed roadmap nodes remain available through exact retrieval but are not rendered here.
Changes

Engine Patch Notes

Implemented engine-facing changes recorded newest first. Game content, balance, and roadmap edits do not belong here.

Autonomous household health care added

One available household member at the same site can now treat a scheduled injury or illness with a field dressing through normal Work. Actor owns treatment and the caregiver plan, Resource owns material consumption, Household retains the typed care result, and bounded selection, atomic rollback, save, replay, API 1.8, and standard-interface evidence preserve the behavior.

Updated areas: Actors, Needs, IAUS, HTN, and Autonomy, Work, Resources, Construction, Economy, and Settlements, Persistence, Migration, Replay, and Recovery, Observability, Diagnostics, and Developer Tools, Engine Extension Contract

Proven revision: 56eba2f2fb59

Resource markers and ground feedback corrected

The resource lens now shows all eight physical sources at their actual locations, including sources without current work. Each label is centered over its source. Selection rings and move feedback stay on the ground plane instead of drawing over people and buildings, and the obsolete floating Site marker is gone.

Updated areas: Rendering, Camera, Selection, and Player Interaction, Observability, Diagnostics, and Developer Tools, Engine Extension Contract

Proven revision: 4cfcd268707a

Resource activity markers added

The Tuning Bench can now show a compact marker above each physical resource source. Markers report remaining and reserved supply and distinguish available, blocked, and depleted work. They start hidden and can be dismissed without changing the simulation. Money contributions now remain valid during multi-tick frames, and old command feedback clears instead of lingering.

Updated areas: Architecture and Ownership, Rendering, Camera, Selection, and Player Interaction, Observability, Diagnostics, and Developer Tools, Engine Extension Contract

Proven revision: db6bd93cda68

Calendar and Actor routine state added

World now derives a player-readable 24-hour clock, day, season, and ordinary, rest-day, or festival classification from fixed ticks. Actor retains one compact routine expectation, actual choice, reason, deterministic schedule offset, and bounded compressed-day evidence. Scheduled evaluation composes current needs, condition, recovery, and active work without creating a global life manager. Actor schema 19, replay, the 20,000-Actor benchmark, runtime API 1.6, and the standard Lua interface preserve or expose the same owner-aligned facts.

Updated areas: World Topology, Heat, Travel, and Environment, Actors, Needs, IAUS, HTN, and Autonomy, Persistence, Migration, Replay, and Recovery, Observability, Diagnostics, and Developer Tools, Determinism, Performance, and Scale, Engine Extension Contract

Proven revision: 255fa6f90412

Starter settlement checkpoint completed

The packaged starter settlement now contains ten residents, four housed households, two longhouses, a well, granary, ration kitchen, meeting shelter, and workshop project. Settlement stores report only owned stockpiles, building information is readable, housing benefits come from validated content and World placement, and the complete save, replay, scale, sanitizer, Release, package, and live-play matrix passes.

Updated areas: Assets, Authored Data, and Content Validation, Work, Resources, Construction, Economy, and Settlements, Intersections, Incidents, Memory, and Consequences, Rendering, Camera, Selection, and Player Interaction, Persistence, Migration, Replay, and Recovery, Observability, Diagnostics, and Developer Tools, Determinism, Performance, and Scale, Build, Packaging, and Supported Runtime, Known Engine Limitations

Proven revision: 14ce63044534

Construction worker interruption and recovery added

A critical Actor need can now interrupt an autonomous builder after material delivery without resetting Construction progress. Work releases the claim, the bounded construction scheduler completes a settlement-scoped replacement pass before timeout, Construction retains handoff or causal failure evidence, and Settlement records the terminal project outcome before reopening its decision cadence. Direct-control pauses remain deferred and cannot enter the autonomous failure path.

Updated areas: Actors, Needs, IAUS, HTN, and Autonomy, Work, Resources, Construction, Economy, and Settlements, Persistence, Migration, Replay, and Recovery, Observability, Diagnostics, and Developer Tools, Determinism, Performance, and Scale, Known Engine Limitations

Proven revision: ea436840fe8f

One-shot autonomous settlement development added

An active settlement can now evaluate authored house and storehouse projects from current housing, stockpile, material, labor, footprint, reachability, and duplicate-building facts. A pure bounded fixed-point reasoner retains every score or rejection in Settlement, and one selected candidate uses the same Construction, Work, Resource, Settlement, and World transaction as player designation. Save, replay, the standard Lua interface, and the bounded world.project.proposals query preserve and expose the accepted decision.

Updated areas: Assets, Authored Data, and Content Validation, Work, Resources, Construction, Economy, and Settlements, Persistence, Migration, Replay, and Recovery, Observability, Diagnostics, and Developer Tools, Determinism, Performance, and Scale, Known Engine Limitations

Proven revision: 2eb61d03785c

Player direction and nearby settlement cues completed

Work assignment, durable Job priority, cancellation, Construction designation, and Construction cancellation now pass through the typed script command boundary into the existing domain owners. Completed building footprints form a derived navigation-blocker view, and retained movement replans when that view changes. Six catalog-declared semantic audio cues are derived from bounded post-commit settlement facts and remain safe through the Null backend.

Updated areas: World Topology, Heat, Travel, and Environment, Assets, Authored Data, and Content Validation, Work, Resources, Construction, Economy, and Settlements, Engine Extension Contract, Known Engine Limitations

Proven revision: e9c828578431

Local movement gained safe diagonal routes

Embodied local navigation now chooses deterministic diagonal as well as cardinal steps, measures diagonal distance without floating-point route ordering, and refuses to squeeze through a blocked corner. Dense adjacent route cells, physical in-segment position, Party movement, cross-chunk corridors, saves, and replay retain the same ownership and recovery contracts.

Updated areas: World Topology, Heat, Travel, and Environment, Persistence, Migration, Replay, and Recovery, Known Engine Limitations

Proven revision: 46c6ed733e7d

Personal and household money custody added

Copper pennies now use Resource-owned personal-wallet and household-money containers that remain separate from work cargo. One direct-control contribution validates current authority, Household membership, currency identity, and both custody revisions before committing a conserved transfer. Detached queries, post-commit events, the standard Lua interface, save, migration, and replay expose the same result without adding a second money owner.

Updated areas: Assets, Authored Data, and Content Validation, Work, Resources, Construction, Economy, and Settlements, Persistence, Migration, Replay, and Recovery, Engine Extension Contract

Proven revision: 970c26786bc0

Villager activity is now visible in the standard interface

Selecting a villager now shows their needs, current plan, work progress, destination, carried resources, and household without interrupting their routine. The settlement view also lists its available building choices, direct control remains an explicit action, and rejected control requests return a readable result.

Updated areas: Actors, Needs, IAUS, HTN, and Autonomy, Work, Resources, Construction, Economy, and Settlements, Observability, Diagnostics, and Developer Tools, Engine Extension Contract

Proven revision: 1246f97f266a

Settlement supply work gained food, water, and bounded movement

The settlement supply contract now supports food and water through the same Work, Resource, Actor, and World owners. Hydration is a first-class Actor pressure, accepted work uses exact source, storage, and consumer positions, settlement-scoped indexes bound candidate work, and restore-time arrival hydration resumes only active travelers instead of scanning terminal movement history.

Updated areas: Actors, Needs, IAUS, HTN, and Autonomy, World Topology, Heat, Travel, and Environment, Work, Resources, Construction, Economy, and Settlements, Persistence, Migration, Replay, and Recovery, Determinism, Performance, and Scale

Proven revision: a52066ae9798

Starter settlement content and world props added

A separate starter-settlement scenario now composes ten named villagers, four households, eight physical sources, shared storage, building alternatives, and transparent placeholder world art through the existing runtime owners. Static props use validated keyed atlases with procedural fallback, and the complete settlement survives save, replay, headless validation, and asset reset.

Updated areas: Assets, Authored Data, and Content Validation, Work, Resources, Construction, Economy, and Settlements, Rendering, Camera, Selection, and Player Interaction, Persistence, Migration, Replay, and Recovery, Build, Packaging, and Supported Runtime

Proven revision: 66676140de9f

Route travel now uses physical distance

Compressed inter-Site travel now uses authored segment distance, the live movement base rate, Actor and transport capability, infrastructure modifiers, and retained fractional progress. World schema 11 migrates active legacy journeys, replay schema 20 reproduces supported development commands, and reproducible package plus 20,000-Actor route-planning proof closes the tuning foundation.

Updated areas: World Topology, Heat, Travel, and Environment, Persistence, Migration, Replay, and Recovery, Determinism, Performance, and Scale, Build, Packaging, and Supported Runtime, Known Engine Limitations

Proven revision: d59cc08473d7

Runtime content catalog added

Assets now owns one required immutable catalog for resources, source types, professions, job archetypes, recipes, and buildings. Stable cross-references drive Resource, Construction, Production, player building actions, save, replay, queries, and headless validation; an invalid catalog rejects the complete session candidate.

Updated areas: Architecture and Ownership, Application and Session Lifecycle, Assets, Authored Data, and Content Validation, Work, Resources, Construction, Economy, and Settlements, Persistence, Migration, Replay, and Recovery, Observability, Diagnostics, and Developer Tools, Build, Packaging, and Supported Runtime, Known Engine Limitations

Proven revision: 184be4601f13

Scenario capacity policy added

Scenarios now define versioned limits for live population, total resource units, individual inventory containers, and aggregate inventory capacity below fixed engine safety ceilings. Actor and Resource enforce their own limits, reductions below current use reject atomically, save and replay retain the policy, and the development Tuning Bench exposes detached use plus revision-checked headroom controls.

Updated areas: Architecture and Ownership, Assets, Authored Data, and Content Validation, Actors, Needs, IAUS, HTN, and Autonomy, Work, Resources, Construction, Economy, and Settlements, Persistence, Migration, Replay, and Recovery, Observability, Diagnostics, and Developer Tools, Determinism, Performance, and Scale, Build, Packaging, and Supported Runtime, Known Engine Limitations

Proven revision: 7b817525f162

Construction now uses physical work rates

Construction projects now retain authored work units and deterministic fractional progress. The assigned Actor's construction capability modifies a live App-owned base throughput, detached inspection reports the effective rate and duration estimate, and the development Tuning Bench can change the base rate without recompilation. Save, Party assist, and replay schemas migrate the previous whole-tick records explicitly.

Updated areas: Work, Resources, Construction, Economy, and Settlements, Persistence, Migration, Replay, and Recovery, Build, Packaging, and Supported Runtime, Known Engine Limitations

Proven revision: cd90532919d7

Embodied movement now uses physical rates

Local and multi-chunk embodied movement now converts a live-tunable millimeter-per-second base rate, durable Actor capability, and optional transport modifier into deterministic fixed-tick distance with persisted fractional progress. The development Tuning Bench can slow or accelerate that movement without recompilation, while World retains path, position, progress, and arrival authority.

Updated areas: Identity, ECS, Commands, and Scheduling, World Topology, Heat, Travel, and Environment, Persistence, Migration, Replay, and Recovery, Build, Packaging, and Supported Runtime, Known Engine Limitations

Proven revision: cff8e14a758e

Runtime tuning authority and development controls added

App now owns a versioned revision-checked tuning registry. Debug builds expose a movable Lua Tuning Bench for live simulation pace and presentation frame-target presets through restricted commands and post-commit events. Fixed tick duration remains unchanged, foundation schema 22 persists the new state, and Release builds filter development packages before Lua creation.

Updated areas: Identity, ECS, Commands, and Scheduling, Persistence, Migration, Replay, and Recovery, Build, Packaging, and Supported Runtime, Engine Extension Contract, Known Engine Limitations

Proven revision: 219a813cc436

Connected-region traversal and runtime performance measurement completed

The default player scenario now uses a data-authored 3 by 3 region with explicit terrain variation, continuous multi-border movement, save and replay continuity, concurrent embodied travelers, and compressed distant Actors. The Release runtime adds bounded VSync or uncapped frame benchmarking, while the package API exposes rolling FPS, process CPU, resident memory, owned bounded logging, constant-time summaries, and paged samples without simulation authority.

Updated areas: World Topology, Heat, Travel, and Environment, Rendering, Camera, Selection, and Player Interaction, Observability, Diagnostics, and Developer Tools, Determinism, Performance, and Scale, Known Engine Limitations

Proven revision: 7e052095444a

Chunk residency gained deterministic interest and cooling

World now reconciles a bounded active chunk set from detached camera and selected-Actor interest plus retained movement and route-travel requirements. Required chunks activate, unrequested chunks cool and unload on later fixed ticks, cold Actors remain compressed, and World schema 9 preserves transition timing.

Updated areas: World Topology, Heat, Travel, and Environment, Rendering, Camera, Selection, and Player Interaction, Persistence, Migration, Replay, and Recovery, Determinism, Performance, and Scale, Known Engine Limitations

Proven revision: 8ecba03a1368

Local movement gained bounded multi-chunk corridors

World local navigation now composes one deterministic active-chunk corridor from bounded per-chunk paths and explicit border cells. One accepted order, retained path, position, logical Site, save state, and replay continue through every handoff without a world-sized cell search.

Updated areas: World Topology, Heat, Travel, and Environment, Rendering, Camera, Selection, and Player Interaction, Persistence, Migration, Replay, and Recovery

Proven revision: f65da93337fa

Embodied movement crossed its first active chunk border

World local navigation now continues one exact-ground order across one orthogonally adjacent active-chunk border through a deterministic aligned portal. The retained path, logical Site, save and replay state, and detached inspection all preserve the same movement owner and order.

Updated areas: World Topology, Heat, Travel, and Environment, Rendering, Camera, Selection, and Player Interaction, Persistence, Migration, Replay, and Recovery

Proven revision: 6314468fe508

Resident World terrain replaced the fixed ground patch

World now owns validated terrain for every topology chunk and persists it with residency. App composes active chunks into detached ordered terrain, Camera culls visible cells, and SDL draws one geometry batch without gaining World authority. The supported graphical default is now 1600 by 900.

Updated areas: World Topology, Heat, Travel, and Environment, Rendering, Camera, Selection, and Player Interaction, Persistence, Migration, Replay, and Recovery, Known Engine Limitations

Proven revision: b7937c86f52a

World spatial ownership and restore validation hardened

World topology now resolves stable chunk identities through explicit grid coordinates, rejects Sites outside their referenced chunks, and transactionally validates restored local-movement geometry, cursors, and residency. The authored adjacent Site now occupies its actual 64-meter chunk.

Updated areas: World Topology, Heat, Travel, and Environment, Persistence, Migration, Replay, and Recovery

Proven revision: 20e0c424b669

Observation and direct-control authority separated

Selecting an Actor now remains observational. Contextual movement and attack reject until Take Control has explicitly changed every recipient's retained authority. Control transitions are ordered replay inputs, while release continues to reconcile through the existing Actor and control owners.

Updated areas: Rendering, Camera, Selection, and Player Interaction, Persistence, Migration, Replay, and Recovery, Actors, Needs, IAUS, HTN, and Autonomy

Proven revision: 9ef193e2b41c

Active addon event delivery and Lua containment completed

App now delivers typed post-commit events to generation-scoped Lua subscriptions in deterministic bounded order. Protected callbacks, memory and instruction limits, reload cleanup, command deferral, overflow diagnostics, and repeated-fault isolation keep broken addons from stopping the game.

Updated areas: Architecture and Ownership, Observability, Diagnostics, and Developer Tools, Build, Packaging, and Supported Runtime, Known Engine Limitations

Proven revision: 3446fcf9bfc4

Runtime API reference and package closure completed

The packaged runtime now exports one complete 110-symbol scripting catalog used by the external API Reference. Package verification checks exact documentation coverage and all installed reference hashes. Script panels use package-qualified presentation identities.

Updated areas: Architecture and Ownership, Observability, Diagnostics, and Developer Tools, Build, Packaging, and Supported Runtime, Known Engine Limitations

Proven revision: 6950454a91eb

Script package diagnostics and recovery activated

The host now measures bounded package and surface work, rejects stale actions, suppresses hidden callbacks, and disables only repeated offenders. Compiled controls can reload packages, restore the standard interface, or enter Safe Mode without changing gameplay state.

Updated areas: Architecture and Ownership, Observability, Diagnostics, and Developer Tools, Build, Packaging, and Supported Runtime, Known Engine Limitations

Proven revision: 081836a3503c

Transactional script package reload activated

F10 now rebuilds and proof-composes the complete package graph before an atomic generation swap. Compatible host-owned settings, provider selection, visibility, layout keys, and current selection survive; a failed candidate leaves the last valid interface active.

Updated areas: Architecture and Ownership, Observability, Diagnostics, and Developer Tools, Build, Packaging, and Supported Runtime, Known Engine Limitations

Proven revision: ee31769c2eea

Package UI replacement and extension activated

Package manifests now declare providers, extensions, decorators, and replacement selection. A development package can switch the player HUD between standard and alternate providers while its toolbar and resource extension remain composed.

Updated areas: Architecture and Ownership, Rendering, Camera, Selection, and Player Interaction, Observability, Diagnostics, and Developer Tools, Build, Packaging, and Supported Runtime

Proven revision: d7ab6c2df702

First-party standard Lua interface activated

The ordinary villager and settlement interface now runs through the documented Lua query, semantic UI, logical action, event, and typed command contracts. Compiled startup, session, hotkey, F3 diagnostic, and recovery controls remain independent.

Updated areas: Architecture and Ownership, Rendering, Camera, Selection, and Player Interaction, Observability, Diagnostics, and Developer Tools, Build, Packaging, and Supported Runtime

Proven revision: d282500cf0aa

Backend-neutral script UI and first live addon added

Lua packages can now record bounded semantic panels, widgets, typed theme constraints, and anchored layouts for native rendering. The development resource-count addon displays live detached totals in a movable panel.

Updated areas: Architecture and Ownership, Rendering, Camera, Selection, and Player Interaction, Observability, Diagnostics, and Developer Tools, Build, Packaging, and Supported Runtime

Proven revision: 8f5b2a2810c1

Script API registry and runtime-local plugin root added

App now validates and deterministically exports versioned script API metadata, distinguishes compiled recovery from first-party and development package origins, and packages a user-visible plugins directory without loading or executing addon code.

Updated areas: Architecture and Ownership, Observability, Diagnostics, and Developer Tools, Build, Packaging, and Supported Runtime, Known Engine Limitations

Proven revision: 99f21df47cb5

Phase 13 engine baseline sealed

The supported Linux runtime, validated content path, sprite and ground presentation, accessibility settings, save recovery, representative budgets, reproducible package, and rollback revision were proven as one release baseline.

Updated areas: Assets, Authored Data, and Content Validation, Rendering, Camera, Selection, and Player Interaction, Persistence, Migration, Replay, and Recovery, Determinism, Performance, and Scale, Build, Packaging, and Supported Runtime

Proven revision: 8402b2477d87

E.1Architecture and Ownership The dependency direction, composition boundary, durable-state rules, and mutation contracts that keep the engine modular. Current reference

Systems evidence: systems.module.app, systems.module.assets, systems.module.core, systems.module.platform, systems.module.controls, systems.module.sim, systems.module.game, systems.module.render, systems.module.tools

Implemented through: Phase 0A, Phase 0B, Phase 0C, Phase 0D, Phase 0E, Phase 0 Addendum

#1Responsibility

The engine separates process composition, platform access, low-level contracts, authored data, input, simulation, Worldforge rules, rendering, and developer inspection. Each durable fact has one owner. The App layer connects owners for a session but does not absorb their validation or mutation rules.

The dependency direction is app toward assets, core, controls, sim, game, render, tools, and the selected platform backends. platform/sdl and the SDL render backend keep SDL types private. sim does not depend on presentation or Worldforge-specific rules. game consumes simulation and asset contracts without opening files or owning platform state.

#2Current Execution

  • Executable entry points construct process-local platform, audio, asset, render, tool, and session services in explicit lifetime order.
  • App loads validated immutable definitions, constructs the ECS and gameplay owners, and advances them through one RuntimeSession.
  • Assets loads and owns one shared immutable runtime content catalog. App resolves its bounded

classifications and stable IDs into existing Game owner requests without copying definition authority into session state.

  • Core commands, typed owner requests, and explicit result values cross module boundaries. Events and snapshots report facts after mutation; they are not hidden control flow.
  • Rendering and developer tools consume detached or derived views. They do not repair, infer, or author simulation truth.
  • App owns a versioned script API registry for interface metadata. It validates stable symbol, schema, owner, authority, timing, version, error, deprecation, and source contracts and exports them in deterministic ID order. The registry contains no simulation values and does not load or execute scripts.
  • Offline tooling combines normalized registry output with one-to-one structured usage documentation

and generates the versioned external API Reference, machine index, search index, and deterministic file manifest. Generated reference files do not define runtime authority.

  • App owns a bounded detached query service. It validates registered query IDs, filters, pagination,

result limits, owner-visit budgets, and exact output fields before routing reads to current owners. Results are ordinary values without owner handles or mutation authority.

  • RuntimeSession owns separate bounded typed command and event services. Host-created origins, exact arguments,

submission budgets, and fixed-tick order are validated before existing owner transactions run. The command service owns requests, receipts, and transcripts. The event service owns the typed post-commit stream; events are emitted only after a successful owner commit.

  • App owns one revisioned scenario-capacity policy service. It retains the validated live policy,

compares requested reductions with detached Actor and Resource usage, and composes accepted limits into those owners. Actor still validates live population, and Resource still validates quantities and inventory-container capacity.

  • App discovers exact package manifests in deterministic dependency order and creates one bounded

Lua 5.4.8 state per package. Packages receive host-created identity and only the registered detached query, typed command, event, and presentation functions.

  • Packages register generation-scoped event callbacks by stable event ID. App copies each immutable

source fact into a fresh detached callback-local table and delivers it in event, dependency, and subscription order at a safe frame boundary. Editing that Lua table cannot change the source fact or another callback's copy, and a callback command cannot execute before a later fixed tick.

  • App owns stable UI surface and slot contracts. Package manifests declare providers and typed

contributions; the registry resolves extensions and decorators deterministically and changes a replaceable surface only through an explicit valid provider selection.

#3Ownership and Invariants

  • Commands request behavior. The named system or service validates and mutates its own state. Events and inspection values report the result.
  • Stable IDs cross persistence and owner boundaries. Raw registries, ownership pointers, SDL handles, and mutable containers do not.
  • Optional modules declare their availability and fallback policy. Missing optional presentation art can fall back; present but invalid required data fails explicitly.
  • Cross-owner work stages candidate state, validates every referenced revision, and commits only after the complete operation is valid.
  • App may order and coordinate owners, but it cannot become the second owner of Actor, World, economy, social, event, or rendering state.
  • Compile-time technical ceilings protect engine allocation and arithmetic bounds. Versioned

scenario capacity policy controls authored population, resource, and storage limits below those ceilings. Neither kind of limit transfers ownership of the bounded state to App.

  • Catalog definitions and versions remain immutable Asset-owned source truth. Resource,

Construction, Production, and Work retain only mutable runtime records and stable definition references.

  • Registering a script-facing symbol documents an interface contract; it does not grant implementation, mutation, or package authority. Later queries and commands must still route through their named owners.

#4Persistence and Recovery

Each owner exposes detached state that can be validated without changing the live instance. Foundation restore validates the full cross-owner candidate before replacement, including the installed content catalog, stable definition references, scenario-capacity revision, and its relationship to current Actor and Resource use. Save/load follows the same owner boundaries as runtime mutation rather than introducing a second implementation of game rules.

Dependency lifetime is explicit and RAII-backed. Partial startup, failed composition, session leaving, reset, and shutdown release resources through their owning scopes.

#5Inspection and Proof

The Systems tab is the exact code inventory behind this chapter. It identifies current module state, source files, contract functions, phase history, and named tests. Engine chapters explain behavior; Systems supplies implementation-level evidence.

Architecture proof includes graphical and headless composition through the same session owners, deterministic replay, transactional restore, focused owner tests, complete phase proof records, and the extracted Phase 13 package.

#6Current Limits and Extension Points

The architecture is modular but not a generic engine product. Worldforge-specific simulation owners live in game, and runtime composition remains explicit. Phase 14 provides complete runtime registry metadata, the actual-registry external reference, bounded queries, typed commands and events, sandboxed packages, stable UI composition, backend-neutral intent, the first-party standard interface, development replacement and extension proof, transactional reload, retained host state, fault isolation, and compiled recovery. Package code has no operating-system, raw-owner, renderer, input-device, or save authority. Every reference symbol derives from the same complete registry exported by the packaged runtime.

Future engine changes must extend the existing owner or introduce one narrowly named owner with a declared dependency direction, state policy, save policy, inspection surface, work budget, and failure behavior. A compatibility bridge or parallel mutation path is not an acceptable extension.

E.2Application and Session Lifecycle How Worldforge starts, enters and leaves sessions, contains failures, resets state, and shuts down. Current reference

Systems evidence: systems.module.app, systems.module.platform, systems.module.assets, systems.module.render, systems.module.tools

Implemented through: Phase 0A, Phase 0 Addendum, Phase 6, Phase 13

#1Responsibility

App owns lifecycle coordination and session composition. ApplicationFlowController retains only the current lifecycle state, ordered requests, one pending transition, and result diagnostics. It does not own platform resources or gameplay state. RuntimeSession retains the loaded session owners for one run while their individual rules remain in their modules.

#2Current Execution

  • Startup parses typed options, opens the manifest, loads configuration and presentation data, initializes SDL, audio, rendering, and tools, then presents the front end.
  • A start intent requests session loading. The composition root loads the required immutable

content catalog, validates authored economy references against it, builds the complete candidate session, and commits the transition only after every owner succeeds.

  • Graphical direct launch exists for automated and developer runs. Headless launch requires an explicit scenario and uses the same manifest, loaders, session, scheduler, and result path without SDL presentation.
  • Leaving a session cleans input and queued commands, releases session resources, and returns to the front end. Shutdown follows the same legality table and ordered request model.
  • Five typed failure-injection seams exercise startup, load, leave, and shutdown containment without changing normal behavior.

#3Ownership and Invariants

  • The lifecycle legality table is complete: unlisted state and reason pairs are rejected.
  • Only one transition may be pending. Request sequence numbers are stable and monotonic.
  • A failed pending operation normally preserves the last committed lifecycle state. An explicitly contained composition failure enters faulted.
  • The front end returns intent only. It cannot request or commit a lifecycle transition directly.
  • Graphical and headless roots share session composition rather than maintaining separate game runtimes.
  • Missing, malformed, duplicate, out-of-bound, or unresolved catalog definitions fail candidate

construction before any live session or lifecycle state is replaced.

#4Persistence and Recovery

Session state is captured from the owners only after composition. Reset restores validated initial owner state and camera state through their public APIs. Session exit does not serialize transient UI panels or platform handles.

Save recovery is separate from lifecycle recovery. A missing or invalid primary save can load a retained valid backup, while the lifecycle controller reports the result and preserves explicit failure text.

Both new-session and saved-session candidates resolve the installed catalog before dependent runtime state. A failed catalog or cross-reference check leaves the prior lifecycle and session unchanged.

#5Inspection and Proof

Detached lifecycle snapshots show current state, pending sequence, last result, and contained failure without exposing transition authority. The front-end and Runtime panels render those snapshots.

Tests cover every legal transition, illegal requests, sequence handling, each failure seam, repeated sessions, reset, headless composition, and shutdown. The packaged graphical and headless executables exercise the same lifecycle owners outside the source checkout.

#6Current Limits and Extension Points

The current product enters one loaded session at a time. There is no background multi-session host, hot-swapped game module, or asynchronous streaming composition service.

New lifecycle states require a complete legality-table update, failure containment, detached presentation, graphical and headless behavior, resource lifetime proof, and save/session boundary review.

E.3Identity, ECS, Commands, and Scheduling Persistent entity identity, EnTT storage, fixed ticks, ordered commands, deterministic system execution, and state capture. Current reference

Systems evidence: systems.module.core, systems.module.controls, systems.module.sim, systems.module.app

Implemented through: Phase 0A, Phase 0B, Phase 0E, Phase 1, Phase 6

#1Responsibility

Simulation owns the EnTT registry, persistent-ID index, cold debug-name storage, entity high-water mark, fixed-step scheduler, and ordered ECS execution. Core owns backend-neutral platform events, runtime commands, and the command queue. Controls owns physical bindings and per-frame action state.

#2Current Execution

  • Entity creation assigns or restores a never-reused PersistentId, writes plain components, and updates the validated ID lookup.
  • Platform events become backend-neutral Core values. Controls resolves immutable bindings and emits pressed, released, and held action state.
  • Runtime-owned actions enqueue tick-stamped commands with stable sequence numbers. The scheduler drains them in order before advancing the appropriate fixed ticks.
  • Frame deltas are clamped. Ordinary frame advancement applies the validated session time scale

before accumulating fixed-step work. Integer remainder retention makes equivalent frame partitions produce the same number of ticks. Pause, single-step, and bounded fast-forward still pass through the same fixed-tick path without changing the authored 50-millisecond tick.

  • RunEcsTick executes the fixed EcsSystemOrder exactly once per committed tick.

#3Ownership and Invariants

  • PersistentId is durable identity. EntityHandle is a validated runtime handle. Raw EnTT entity values do not cross the ECS boundary.
  • Simulation results cannot depend on render delta, wall time, pointer values, unstable iteration, locale, or unrelated random-number consumption.
  • Queue sequence numbers are monotonic. Restore rejects duplicate, unordered, invalid, or future sequence values.
  • Multiple physical inputs can hold one action. Reference counts prevent one release from cancelling another still-held binding.
  • Debug names and verbose metadata stay outside hot components.

#4Persistence and Recovery

ECS capture orders records by persistent ID. Serialization writes plain versioned state rather than EnTT internals. Restore builds and validates a temporary world before replacing the live registry.

Scheduler state preserves the exact tick, accumulator, time-scale remainder, pause and step state, quit and diagnostics flags, timing counters, and pending command position. The App-owned tuning state preserves its validated values and revision. Older supported foundation schemas restore the default 1x time scale and 60-frame presentation target. Controls keeps transient physical state out of saves and resets it at session boundaries.

#5Inspection and Proof

Scheduler snapshots report tick position, pause state, pending work, command results, frame metrics, and bounded work counters. ECS inspection exposes stable identity and plain state without registry access.

Proof includes deterministic state hashes, command-order tests, focus-reset tests, save/load continuation, replay from fixed inputs, headless results, sanitizer runs, and representative long-tick scenarios.

#6Current Limits and Extension Points

The ECS has a deliberately small generic component set. Most Worldforge domain state lives in focused runtimes rather than one enormous registry.

New recurring work must declare its cadence, eligible population, visit count, mutation budget, tie-breaking, persistence position, and degradation strategy. Parallel execution is not justified until measured single-threaded work misses an approved budget and an ordered reduction preserves determinism.

Runtime time scale changes how quickly fixed ticks accrue from wall time; it does not change tick duration or any per-tick gameplay formula. Embodied movement separately converts its base physical rate and capability modifiers through the fixed-step duration. Construction, capacities, authored catalogs, spawn policy, and world generation remain separate owned conversions rather than aliases for the global pace control.

E.4World Topology, Heat, Travel, and Environment The authoritative spatial model for cells, chunks, regions, sites, routes, heat, travel, environment, ecology, resources, and settlements. Current reference

Systems evidence: systems.module.sim, systems.module.game, systems.module.app

Implemented through: Phase 1, Phase 2, Phase 7, Phase 8, Phase 17

#1Responsibility

WorldRuntime owns topology, chunk terrain, residency and heat, Site and Region records, routes, route progress, local navigation, infrastructure, stable irregular land areas and crop lifecycle, settlement identity, calendar, environment, ecology, and renewable world sources. Observer Knowledge separately owns what has been learned about those facts.

#2Current Execution

  • Stable chunk, region, site, route, and settlement IDs connect the spatial hierarchy without transferring ownership.
  • Chunk IDs are durable references, not locations. ChunkCoordinate locates a chunk on the signed grid; the default authored grid uses 1-meter cells and 64 cells per side, so coordinate (x, y) covers the half-open 64 by 64 meter interval anchored at (64x, 64y).
  • Sites retain a stable chunk ID and an explicit meter position. Topology construction rejects a Site when that position maps to a different chunk coordinate, including at exact positive borders and in negative coordinates.
  • Every topology chunk has one validated terrain record. Active residency selects which terrain

records App may copy into the detached presentation path.

  • World reconciles at most 64 detached camera or selected-Actor interests with chunks required by

retained local movement and route travel. Required chunks activate in stable coordinate order. Unrequested active chunks cool to loaded and then unloaded on later fixed ticks; repeated reconciliation during one tick cannot advance cooling.

  • Heat transitions select focused, warm, cool, or cold work. Detailed embodied state is retained where required; distant activity advances through bounded compressed records.
  • Route travel advances against authored segment distance, the same physical movement policy used

by local navigation, retained Actor and transport capability, and an optional infrastructure rate modifier for each segment. Local embodied navigation composes a stable corridor over active orthogonally adjacent chunks, resolves bounded eight-direction cell paths inside each chunk, and crosses each shared border through one explicit orthogonal cell step. Cardinal route cost uses a fixed scale of 1,000 and diagonal cost uses 1,414; a diagonal is legal only when both side-adjacent cells remain traversable, so movement cannot cut through a blocked corner.

  • Embodied movement converts a validated base rate in millimeters per second, an Actor capability

modifier, an optional transport modifier, and the fixed 50-millisecond step into integer distance. It retains the sub-millimeter numerator remainder, so equivalent tick partitions produce the same position and arrival tick. Path traversal ticks remain pathfinding cost; physical distance and the current effective rate produce the duration estimate.

  • App reads the current global movement base rate at each fixed tick. A Tuning Bench change

therefore affects in-flight embodied and inter-Site movement on the next tick without replacing its path, Actor capability, transport capability, route modifiers, or accumulated fractional distance.

  • The readable calendar derives a 24-hour clock, numbered day, season, and ordinary, rest-day, or

festival classification from the authoritative fixed World tick. The snapshot is detached and stores no second time authority.

  • Environment and ecology update canonical Region or Site records at explicit intervals with visit and mutation budgets.
  • Land areas use stable identities and connected non-overlapping World cells. World retains cover,

preparation, fertility, moisture, depletion, optional crop identity, lifecycle stage, revision, causal ticks, and an optional controlling Site independently from physical use or dedication. Revision-checked previews validate the complete resulting condition and every Site reference before one owner mutation applies.

  • Bounded parcel derivation accepts detached eligible land-use IDs, pre-rotated footprint variants,

and Construction-owned occupied cells. World canonicalizes those inputs, visits land areas and origins in stable order, and rejects foreign control, dedication, footprint escape, invalid topology, occupancy, standing landscape, and unreachable perimeter access. Area, origin, footprint-cell, path-query, and candidate budgets fail closed with no usable partial candidate set. Successful candidates retain their composite area, origin, and footprint-variant key plus the exact land and navigation revisions; the query selects and persists nothing.

  • Renewable resources preserve generated baseline capacity separately from persistent harvest and renewal modifications.
  • Scouting and direct observation create source-aware knowledge records with acquisition ticks and freshness.

#3Ownership and Invariants

  • World positions use explicit world, cell, chunk, route, and region units. Containers do not become world objects.
  • World owns current truth. Observer Knowledge owns discovered or reported truth. UI and Game reasoners cannot read an unknown current value and present it as learned.
  • Heat changes fidelity, not identity or causal outcome. Promotion and demotion preserve intent, travel, and durable relationships.
  • Travel, environment, ecology, and settlement updates use stable ordering and bounded visits.
  • Rendering may request presentation interest but cannot author terrain, position, residency, or heat.

#4Persistence and Recovery

World state stores stable identities, topology, terrain, residency, route segment distances and modifiers, physical route progress, heat, local movement, physical segment origin and progress, sub-millimeter remainders, movement modifiers, environment, ecology, renewable modifications, infrastructure, land areas, land control and crop lifecycle, and settlements. Restore validates references and stages focused owner state before committing the World candidate. A retained local move may follow one simple bounded corridor through active chunks. Its saved cell path and physical progress are the durable truth; restore derives the corridor, validates every adjacent cardinal or diagonal cell, validates every orthogonal chunk transition, rejects chunk re-entry, and requires cursor, physical segment, position, endpoint, progress, and status to agree. Each chunk also retains the fixed tick of its last residency transition so cooling continues identically after load.

Knowledge records persist their source, acquisition, freshness, and learned value. Older knowledge schemas migrate with empty new fact families rather than inferred discoveries.

#5Inspection and Proof

World inspection exposes topology counts, coordinate-first chunk identity, terrain kind, residency, heat transitions, route state, land areas and retained condition, calendar day, clock, season, day kind, environment, ecology, renewable sources, settlements, and bounded work evidence. Known World inspection presents learned facts separately and marks expired facts stale.

Proof covers ID-to-coordinate lookup, positive and negative chunk boundaries, Site geometry, terrain persistence and detached presentation, bounded four-chunk local traversal, physical distance and duration estimates, diagonal distance and blocked-corner rejection, fractional-progress partition equivalence across local and route travel, Actor and transport rate modifiers, road modifiers, legacy route migration, border invalidation, local- and route-movement restoration, chunk and route identity, heat transitions, travel interruption, bounded camera and selection residency, travel-safe cooling, same-tick reconciliation, save/load continuation, knowledge boundaries, environment and ecology budgets, finite renewable harvesting, settlements, deterministic replay, and representative cold-world breadth. Parcel proof additionally covers input-order equivalence, every physical hard gate, explicit work budget exhaustion, stable composite identity, path evidence, invalid requests, and unchanged World state after complete, rejected, and exhausted searches.

#6Current Limits and Extension Points

Abstract inter-Site and route travel uses authored topology distance and the same physical, live-tunable rate policy as embodied movement without replacing the route hierarchy with a world-sized cell search. Embodied local navigation continues through active authored chunks; compressed route travel retains exact segment progress while distant Actors remain compressed. The local Actor render composition treats every non-arrived synthetic route traveler as in transit. It omits that Actor from local proxies, sprites, and selection while World continues to own exact route progress and Heat position. Tools reports the detached in-transit count, so regional travel does not appear as unbounded local pedestrian movement. World activates and cools chunks from bounded observation interest and authoritative travel requirements.

The default player scenario now proves a centered data-authored 3 by 3 region with nine Sites, twelve route links, three terrain presentations, retained multi-border orders, mid-journey save and load, replay, concurrent embodied travelers, and compressed distant Actors. The 3 by 3 layout is content, not an engine-size assumption; other valid topology layouts use the same owners.

E.5Assets, Authored Data, and Content Validation Manifest discovery, immutable bytes, schema validation, content composition, caching, presentation assets, and headless validation. Current reference

Systems evidence: systems.module.assets, systems.module.game, systems.module.app, systems.module.render

Implemented through: Phase 0D, Phase 3, Phase 8, Phase 9, Phase 13, Phase 16

#1Responsibility

AssetService owns the validated manifest and immutable byte cache. Game loaders own Worldforge schema validation and typed immutable definitions. Render owns decoded presentation resources. App composes those owners but does not duplicate their file, schema, or lifetime rules.

#2Current Execution

  • Manifest opening validates schema, stable IDs, asset types, duplicate entries, safe relative paths, and root containment.
  • Loading validates the requested ID and type, returns shared cached bytes when resident, or opens and caches the immutable source once.
  • The required schema-2 runtime content catalog validates a catalog version plus nine bounded

families: resources, source types, professions, job archetypes, recipes, buildings, land uses, crops, and semantic audio cues. Land-use definitions declare a closed classification and whether that class permits crops. The closed classes include settlement expansion land without granting the catalog parcel-selection or World mutation authority. Crop definitions reference one harvest Resource and at least one compatible crop-permitting land use. Schema 1 catalogs migrate with empty land-use and crop families. Building definitions include their canonical footprint and may declare residence shelter, rest, and comfort benefits. Reused footprint keys must resolve to identical canonical cells. Each definition has a stable ID and content version. Successful families are sorted canonically and retained through one shared immutable catalog instance.

  • Game loaders convert scenario, scene, world, actor roster, economy, settlement definition, incident, and other authored

bytes into typed definitions with explicit result diagnostics. Scenario schema 2 contains a versioned population, resource-unit, per-container, and aggregate-storage capacity policy. Scenario schema 1 migrates by applying the documented default policy.

  • Sprite-atlas schema version 2 validates two to eight appearance variants, immutable image references, shared dimensions, frame bounds, feet anchors, modulation, scale, and walk cadence before Render creates textures.
  • Static-sprite-atlas schema version 1 validates keyed source rectangles, ground anchors, render

dimensions, and immutable image references for structures and world props. The starter settlement uses two transparent atlases and twelve keyed frames; missing optional art retains procedural geometry.

  • Settlement-definition schema version 3 validates ten named profiles, four explicitly identified

households, physical inventory anchors, eight source anchors, shared storage, personal and household money custody, three building alternatives, and two bounded autonomous project candidates before the session candidate is committed. Each project candidate has a stable project ID, a unique catalog building-definition ID, the settlement anchor Site, and an authored WorldGrid origin. Its complete building footprint must remain inside the Site chunk and settlement boundary. Schema version 1 migrates household identities from canonical authored order; schema version 2 has no autonomous project candidates.

  • Headless --validate-content constructs the normal session, reports exact accepted owner counts, and exits before ticking.

#3Ownership and Invariants

  • Assets owns discovery and bytes, not the meaning of a scenario, recipe, Actor, building, image, or font.
  • Assets owns catalog parsing, cross-reference validation, stable lookup, and shared immutable

lifetime. Resolver classifications are closed enumerations; they select an existing behavior family but cannot inject executable behavior.

  • Authored definitions are immutable after successful composition. Mutable runtime state belongs to its domain owner.
  • Required missing or invalid data fails with an actionable diagnostic. Optional missing presentation art may preserve a declared fallback; present but invalid art is rejected.
  • Decoding is transactional. A candidate image family or presentation set replaces the live set only after the complete set succeeds.
  • Content validators reject unresolved IDs, duplicate identities, invalid footprints, unsafe paths,

incompatible dimensions, overcommitted finite sources, capacity values outside immutable technical ceilings, capacity policy below authored initial use, unknown classifications, duplicate or order-derived identities, missing catalog references, invalid bundles and footprints, duplicate project building definitions, and cross-owner conflicts.

#4Persistence and Recovery

Simulation saves retain the catalog asset ID and stable definition identities where needed; they do not copy immutable source files or decoded textures. The current scenario policy and live policy revision are saved because a development session may change the policy after composition. Restore resolves and validates the installed content set, then validates the saved policy against retained owner use before accepting dependent runtime state.

Asset reset releases cache authority and transactionally replaces decoded presentation resources. A failed replacement leaves the previous valid presentation set intact or fails session composition before mutation.

#5Inspection and Proof

Asset inspection reports stable manifest order, source policy, resolved paths, cache residency, byte counts, requests, hits, optional misses, failures, and releases without performing IO.

Headless content validation reports the accepted definitions through both the legacy and starter settlement scenarios. Focused proof covers deterministic ordering, immutable lookup, duplicate and malformed IDs, missing cross-references, invalid bounds, normal session composition, settlement identity, static presentation lookup, persistence, replay, catalog-driven construction, land-use and crop reference integrity, identical footprint reuse, and rejection of conflicting footprint shapes, duplicate project identities, building definitions, or invalid authored placements.

#6Current Limits and Extension Points

The runtime supports validated manifests, schemas, and one immutable settlement-content catalog, not a general live editor or arbitrary mod loader. Content packages do not execute native code or gain mutation authority. The catalog does not yet provide live editing, arbitrary behavior, settlement breadth, spawning, or world-generation distribution.

New authored families must use stable identities, explicit schema versions, deterministic ordering, cross-reference validation, normal owner composition, headless validation, persistence review, and negative fixtures before content breadth depends on them.

E.6Actors, Needs, IAUS, HTN, and Autonomy How persistent people evaluate pressure, choose goals and methods, retain commitments, interrupt work, travel, and continue across simulation tiers. Current reference

Systems evidence: systems.module.game, systems.module.sim, systems.module.app, systems.module.tools

Implemented through: Phase 2, Phase 3, Phase 4, Phase 5, Phase 10, Phase 17

#1Responsibility

ActorRuntime owns stable Actor state, needs, condition, affect, motivation, focus, schedules, plans, task bindings, learned tendencies, and actor-local transition history. IAUS reasoners evaluate immutable candidates. HTN-style methods shape the bounded plan used to pursue the selected focus.

#2Current Execution

  • Actor definitions establish baseline pressure curves and inherited variation without requiring manual per-ID tuning.
  • Scheduled focus evaluation reads current Actor facts plus sorted, revisioned social and world inputs for only the Actors due that tick.
  • IAUS applies hard eligibility gates, scores the remaining focus candidates, uses stable tie-breaking, and retains the exact scheduled trace.
  • The selected focus enters a shallow method or plan. HTN structure decides how to satisfy the drive; IAUS decides which drive currently deserves attention.
  • A ready job step may replace its exact local target when the same Work task remains valid but a

moving recipient has changed position. Actor retains the same Job and task identities, advances its plan revision, and asks World to replace local movement without opening another claim.

  • Commitments identify safe interruption points. Ordinary hunger or companionship pressure can wait for a bounded work boundary, use carried provisions, or interrupt only when its policy crosses the relevant urgency threshold.
  • Each scheduled Actor visit also evaluates one compact daily routine. Stable identity supplies a

bounded schedule offset. The expected window covers sleep, meals, work, care, community, and personal time, while current condition, recovery, urgent needs, deferred meals, and active Work determine the retained actual choice and reason.

  • After the normal scheduled Actor visit, App may inspect at most 64 scheduled residents for one

health-care action. It chooses one available same-household caregiver at the recipient's current Site, opens a normal Work claim and Actor job plan, consumes one field dressing, and completes one retained wound or illness recovery. At most one care action commits per fixed tick.

  • A critical hunger, rest, or hydration threshold can interrupt the Actor's own active construction plan. Construction observes that authoritative plan loss on its bounded scheduler cadence, releases the autonomous build claim through Work, and preserves site progress for replacement. A plan paused because direct-control authority changed is not worker loss and remains deferred until authority releases it.
  • Learned-tendency evidence can adjust later pressure without rewriting personality or replaying an incident.
  • Actor candidate composition counts living records and rejects a roster above the current

scenario population limit. The same check applies during restore. Dead Actors remain persistent history and do not count as live population.

#3Ownership and Invariants

  • Evaluation is read-only. A reasoner cannot claim a Job, reserve goods, start travel, change condition, or mutate another owner.
  • Actor owns its adopted focus, plan, task binding, and learned tendency. Work owns Jobs, World owns routes, Resource owns inventory, and social owners retain their own facts.
  • Pressure values use bounded fixed-point units. Curves and coefficients are data, and actor variation is stable for the saved identity.
  • Candidate ordering and random streams are explicit. Adding an unrelated Actor or reasoner cannot silently consume another decision's randomness.
  • Direct control suppresses or redirects autonomy only through ControlAuthorityRuntime; selecting or inspecting an Actor is causally inert.
  • Control-authority suppression and critical-need interruption remain distinct facts. The construction scheduler checks the Actor plan reason before it may open an autonomous worker handoff.
  • Actor owns life status and therefore the authoritative live-population count. App supplies the

detached scenario limit. A separate compile-time Actor-record ceiling protects storage bounds and cannot be raised through scenario data or Lua.

  • Health-care selection is deterministic and bounded. Actor owns the recipient condition and the

caregiver plan; Work owns the demand, task, claim, and reservation. App stages the owner transaction and retains no care state.

#4Persistence and Recovery

Actor state persists schedules, focus, plan, task binding, routine expectation, actual choice, choice reason, schedule offset, bounded compressed-day evidence, condition, affect, motivation, learned values, and bounded evidence. Restore validates stable references, revisions, the technical Actor record ceiling, and the current scenario live-population limit before replacing the owner. The prior Actor schema migrates with an empty routine rather than invented historical choices.

Derived social inputs are rebuilt after load from their authoritative owners. They are not saved as a second copy. Replay records the exact IAUS inputs and selected result needed to diagnose divergence.

Autonomous health care is derived from the normal scheduled-Actor cohort and current owner facts. It adds no scheduler save state or replay input. Actor wound, illness, and plan state persist through the existing Actor schema.

#5Inspection and Proof

Actor inspection shows current need pressures, selected focus, alternative candidates, hard gates, coefficients, source facts, plan, task, route, routine expectation, actual choice, choice reason, interruption state, and latest transition reason. Personhood inspection adds health, progression, household, relationships, care, lineage, and biography.

Proof includes deterministic focus choice, temperament variation, commitment boundaries, food and rest behavior, social-pressure input, incident learning, travel interruption, critical construction interruption, direct-control deferral, exact and one-above population boundaries, rejected below-use policy changes, save/load, replay, sparse 20,000-Actor evaluation, and embodied selected-Actor diagnostics.

Phase 17A proof covers calendar boundaries, stable routine offsets, two residents choosing differently during the same expected window, hot and compressed schedule continuation, schema migration, save/load, replay, detached queries, standard-interface presentation, and the registered 20,000-Actor budget.

Phase 17B proof covers autonomous same-household caregiver selection, one injury and one illness, material consumption, Work and Actor-plan closure, atomic rollback, deterministic replay, and condition persistence.

#6Current Limits and Extension Points

The current Actor runtime proves bounded decision structure and several real domains; it does not contain the final breadth of occupations, beliefs, emotional conditions, culture, education, or lifetime methods.

New drives should normally add data-defined pressure input and a bounded method under the existing Actor owner. New domains must not create competing global brain managers or let reasoners mutate Jobs, World, inventory, relationships, or UI state.

E.7Work, Resources, Construction, Economy, and Settlements The current transactional labor and material flow from demand through jobs, claims, hauling, construction, production, trade, and settlement state. Current reference

Systems evidence: systems.module.game, systems.module.sim, systems.module.app, systems.module.tools

Implemented through: Phase 3, Phase 7, Phase 8, Phase 9, Phase 13, Phase 16

#1Responsibility

Work, Resource, Supply, Construction, Production, Trade, Regional Economy, Building, and Settlement retain separate durable state. Focused schedulers coordinate those public owners but own only cadence, budgets, cursors, and work evidence.

#2Current Execution

  • Demand or a project creates separately identified Jobs. Eligible Actors evaluate bounded candidate sets, then claims commit in stable order after revalidation.
  • Authored economy schema 11 names its required content catalog. Resource definitions, finite

source stock, construction instances, production instances, bundles, and consumers resolve stable catalog IDs before runtime owner construction.

  • Resource reservations protect exact quantities and owners. Gathering, pickup, carrying, delivery, consumption, cancellation, and release transfer or reconcile goods exactly once.
  • Currency uses the same Resource registry and quantity conservation as other goods, but

actor_wallet, household_money, and business_funds are dedicated custody containers rather than hauling inventories. Contributions and wages move one exact bundle between two current custodians. Purchases atomically exchange an exact money bundle for an exact goods bundle between household_money, business_funds, business_inventory, and household_goods. Each operation validates all participating revisions, availability, and capacity before committing every container and one stable transfer-history record together.

  • Food supply advances through gather, haul, storage, and consumption rather than changing Actor hunger directly. If a beneficiary moves after the final handoff begins, the bounded supply scheduler asks Actor to refresh the same task's local target and accounts for that visit and mutation within its existing execution budgets.
  • Health care uses the same finite Resource and Work owners. A scheduled resident with one eligible

wound or illness may receive one field dressing from a Settlement-owned stockpile. Work retains the care demand, Job, task, claim, and recipient reservation; Resource consumes the dressing; Actor completes the condition and caregiver plan; Household records the typed care result.

  • Resource computes exact total inventory units, largest inventory-container capacity, aggregate

inventory capacity, and container count from its retained records. Container creation rejects per-container, aggregate-storage, or total-resource limits before assigning an ID or changing state. Net-positive production transforms apply the total-resource limit before consuming input or producing output.

  • Construction reserves a grid footprint, materials, and labor. Each project retains authored work

units and a deterministic fractional-work remainder. The scheduler converts the App-owned base throughput and the assigned Actor's construction capability into progress at fixed ticks. Building state changes only after the owning lifecycle validates every requirement.

  • When an autonomous builder's Actor plan is interrupted after material delivery, Construction

releases the active build claim through Work and records worker_interrupted. Delivered material, completed work, and the fractional remainder remain unchanged. The scheduler gives interrupted work priority over an unrelated claim continuation and searches only the supplied settlement worker index under its existing Actor-evaluation and candidate-visit budgets.

  • A replacement builder reclaims the released Job, build task, and reservation through Work before

Actor starts a normal job plan. If no replacement is found, the scheduler retains proof of one complete bounded pass. It may record worker_interruption_timeout only after both that pass and the configured grace period complete. A direct-control pause remains deferred and cannot enter this autonomous failure path.

  • Production instances retain stable recipe-definition IDs and use the catalog's immutable input,

output, step, and resolver definitions with Resource inputs, Work labor, progress, bottleneck explanations, and output placement.

  • Recipe economics remain immutable catalog data: required Building function, bounded service use,

minimum condition, physical maintenance inputs, output value, and a named alternative use. Production reserves service capacity only for live orders and retains the accepted Building condition and revision. Resource moves and consumes maintenance with normal inputs, Work owns the labor graph, and Building capacity and condition remain authoritative.

  • Player designation chooses a catalog building definition. App resolves its bounded function,

footprint, material bundle, work requirement, and capacity into the existing Construction and Settlement transaction. Upgrade and repair resolve the retained building definition rather than copying the first project or switching on a source-specific building name.

  • When an active settlement has no active Construction and its project cadence is due, App reads

only that settlement's members, buildings, and stockpiles. It derives housing shortage, stockpile use, material availability, labor duration, authored placement, footprint occupancy, reachability, and duplicate-building facts for the settlement's authored project candidates.

  • The pure settlement-project reasoner applies hard eligibility gates, then combines capacity

pressure, material readiness, and inverse labor cost as fixed-point contributions capped at 50, 30, and 20 percent of the final score. A score of 4,000 is the minimum useful-project threshold. Ties resolve by stable building-definition ID. The reasoner mutates no owner.

  • Settlement retains the complete accepted candidate trace, source revision, decision tick, tuning

version, threshold, visit counts, cadence, and optional selected Construction ID. A no-selection result schedules another evaluation after 100 fixed ticks. A selected result suspends the cadence while that Construction remains active. Settlement then retains its completed, failed, or abandoned terminal outcome and cause and schedules the next evaluation after the same cadence.

  • The starter settlement composes ten residents in four households. Two completed longhouses

provide content-authored shelter, rest, and comfort benefits scaled by current condition; residence access distance is derived from each home and resident's World placement. A well, granary, ration kitchen, and meeting shelter are operational while the workshop remains an active Construction.

  • Settlement inventory presentation traverses only the selected Settlement's retained stockpile

IDs, then reads those Resource-owned containers. World-wide sources, carried goods, personal and household money, and Construction buffers remain available to their own queries and cannot be mislabeled as settlement stores.

  • Autonomous and player designation resolve the same immutable construction template and use the

same Settlement, Construction, Work, Resource, and World transaction. The autonomous path does not create a second project, inventory, labor, or occupancy owner.

  • Trade uses explicit shipment purpose, stable source and destination Settlement identities,

retained price evidence, Party revision, Resource cargo, Route identity and risk, deadline, progress, and outcome.

  • Regional Economy retains observations and incrementally maintained summaries. It derives a

bounded unit and total price from source and destination scarcity plus Route exposure, retaining the exact summary revisions used. A quote cannot transfer inventory, money, or assign work.

  • Settlement retains earned capability evidence by stable capability ID, typed craft, knowledge,

infrastructure, or institution source, source revision, and earned tick. Capability eligibility is a deterministic query over current active evidence; regressing evidence blocks the option but preserves why and when the capability was originally earned.

  • Settlement derives a specialization profile from currently active capability evidence. Its

foundational, craft, knowledge, infrastructure, or institution label is explanatory only and grants no gameplay authority.

  • A parent Settlement may retain one bounded relationship to another Settlement as an outpost at a

distinct World-owned Site and Region over one current Route. The relationship retains topology revision, physical maintenance Resource and quantity, period, last Resource evidence, active or lapsed state, and complete establishment history.

  • Settlement prosperity is a derived view over one current Settlement record and detached

Household wealth, business funds, active production, completed or failed trade, and overdue maintenance facts. It reports flourishing, stable, stagnating, declining, or abandoned state with its support and pressure inputs but retains no new durable economic truth.

  • Regional prosperity evaluation accepts canonically ordered Settlement and fact spans, visits

only one cursor window under an explicit budget, reports deferred work, and returns the exact continuation cursor. It does not scan unvisited settlements.

  • Settlement retains one bounded enterprise portfolio over the authored production and trade

opportunities. App composes current Resource surplus and inputs, Actor labor, capability support, Building condition, World route cost, Regional Economy price, sponsor wealth, Household cost, complementary support, and active owner commitments. The pure reasoner retains every visited alternative, one direct rejection reason, score, selection, source revision, and evaluation tick. The portfolio does not create Production orders, Trade shipments, Work, cargo, or money.

#3Ownership and Invariants

  • One Job has one claimant and one Actor has at most one live claim. A larger source or project can expose several Jobs for concurrent workers.
  • Evaluation does not reserve or mutate. The winning claim revalidates immediately before Work changes state.
  • Resource quantities are conserved across inventories, reservations, carried cargo, transforms,

delivery, cancellation, and money-custody transfers.

  • Resource owns quantities and inventory-container capacity. App supplies detached scenario limits

and cannot edit those records. BuildingRecord.capacity describes building or service capability; it is not inventory storage and is not included in Resource capacity totals.

  • Buildings use strict authored cell footprints. World owns positions and topology; Construction

owns project work requirements, progress, fractional remainder, and retained building-definition ID; Actor owns capability; App owns the live global construction-rate policy; Building owns completed lifecycle; Settlement owns membership and accepted capability evidence. Building, Production, Knowledge, Institution, Resource, and World remain authoritative for the causal source facts and option execution.

  • Settlement owns the accepted parent-outpost relationship and maintenance status. World owns

Site, Region, Route, and reachability facts. Resource and Work own maintenance fulfillment. A profile or outpost record cannot change topology, move materials, or complete work.

  • A prosperity snapshot cannot grant capability, change outpost status, move money or goods,

advance Production or Trade, or mutate Settlement. Every support and pressure fact remains owned by the system that produced it.

  • Content owns each housing definition's baseline residence benefits. Construction condition

scales those immutable benefits, and World owns access distance. Household and Actor retain only the resulting durable residence relationship and accepted benefit facts.

  • Settlement owns autonomous decision cadence and the retained decision record. Content owns the

immutable candidate definitions, Resource owns stockpile quantities, Construction owns projects and buildings plus worker interruption and failure cause, and World owns placement and reachability. Settlement owns only the accepted terminal outcome and next cadence. App may join those current facts for evaluation and reconcile one exact terminal Construction, but cannot retain a second copy.

  • Candidate evaluation does not reserve materials, occupy a footprint, create Work, or change the

settlement. The selected candidate revalidates through the complete construction transaction before any owner commits.

  • Each candidate retains one stable household, business, civic, or institution sponsor identity.

The reasoner combines sponsor support with current capacity pressure, material readiness, and Construction labor cost. The sponsor contribution is evidence for the accepted choice, not mutable Household, business, civic, or Institution authority.

  • Summaries are derived from revisioned observations and never become exact inventory, obligation, or topology authority.
  • Household care history records whether a retained action was a meal, injury treatment, or illness

treatment. It does not own the consumed Resource, Actor condition, or Work completion.

#4Persistence and Recovery

Every owner exposes versioned detached state with stable cross-owner IDs. Restore validates Resource, Work, Construction, Party, route, Building, Household, and Settlement references before committing candidates. The installed immutable catalog is validated first; retained building and recipe IDs must resolve against it. Resource restore validates stable custody-transfer identities and their currency, container, purpose, revision, and optional exchanged-goods facts. Resource schema 8 persists wage and purchase purposes, business and household custody kinds, all four purchase legs, and both exact bundles. Schemas 6 and 7 migrate with no invented exchange leg. Restore also rejects a total quantity, individual inventory container, or aggregate inventory capacity above the saved scenario policy.

Settlement schema 21 additionally persists the latest enterprise portfolio and bounded history. Schema 20 reopens with no invented enterprise assessment. Restore validates canonical option order, kind and key agreement, selection and rejection agreement, evidence bounds, counts, source revisions, and timing before accepting the Settlement owner.

Settlement schema 8 persists the project cadence, next decision tick, complete latest candidate trace, sponsor kind and stable identity, sponsor-support contribution, score threshold, owner-visit counts, source Settlement revision, optional selected Construction ID, and optional terminal project status, cause, Construction revision, and record tick. It also persists stable capability identity, typed evidence identity and revision, active or regressed state, earned tick, and last update tick. Restore rejects contradictory status, sponsor evidence, eligibility, contribution totals, threshold, selection, Construction identity, stage, timing, outcome, or cadence facts. Schema 3 migrates with no invented terminal outcome; selected projects remain active until their Construction reaches a terminal stage. Schema 5 migrates prior project traces with a clearly marked legacy civic sponsor and no invented support contribution. It persists each bounded outpost's Settlement, Site, Region, Route, topology revision, maintenance requirement and evidence, active state, and timing. Schema 7 migrates with no invented outpost relationship. Schema 6 migrates with no invented capability evidence. Schema 2 migrates to the default cadence with no invented prior decision.

Construction schema 8 persists blockage timing, interruption and reassignment ticks, handoff count, and failure cause. Construction-work scheduler schema 7 persists the interruption grace policy, replacement continuation, and sorted completed-scan evidence. Phase 3 economy schema 18 embeds both current states.

Household schema 5 persists the typed care kind with caregiver, recipient, material, source, and completion tick. Schemas 3 and 4 migrate their existing care records as meals rather than inventing prior health treatment.

Trade schema 2 persists each priced obligation's Settlement endpoints, Route, cargo Resource and quantity, scarcity observations, source summary revisions, unit and total price, exposure, and quote tick. Schema 1 migration marks prior trade obligations as legacy unpriced records instead of inventing historical prices or endpoints. New priced obligations require exactly one quote that matches their one physical cargo line and accepted risk exposure.

Cancellation, invalidation, death, interruption, or failed restore releases claims, reservations, allocations, cargo, and footprint occupancy through the owning lifecycles. Partial economic mutations are rejected.

#5Inspection and Proof

Economy inspection reports Jobs, claims, reservations, inventory, supplies, project work units, assigned-Actor rate modifiers, effective construction throughput, estimated remaining ticks, production orders, shipments, deadlines, bottlenecks, throughput windows, stalls, regional summaries, route flows, current resource and storage capacity use, configured limits, visit counts, deferred counts, latest mutations, and the retained autonomous project status, candidate gates, score contributions, threshold, selected Construction, worker-interruption blockage, grace remaining, interruption and reassignment ticks, handoff count, failure cause, terminal project outcome, next cadence, and owner visits.

The standard interface shows readable building display names and functions, condition as a percentage and quality band, lifecycle status, and settlement-owned stockpile totals. The detached query surfaces do not gain inventory, Building, Construction, Household, or Settlement authority.

Proof covers finite food and successor jobs, several Actors competing for several Jobs, conserved transfers, building footprints, capability-sensitive construction duration, equivalent fractional progress partitions, live construction tuning, Party assistance without caller-authored work magnitude, housing and infrastructure, maintenance, recipes, scarcity-derived trade prices, physical trade obligations, Route risk, deadline failure with retained carried cargo, earned infrastructure capability, capability-gated production eligibility, causal regression, derived two-settlement profile divergence, World-backed outpost identity, maintenance lapse, cancellation, exact capacity accounting, atomic boundary rejection, stable content identity, catalog-driven player designation, personal, household, and business money conservation, idempotent wages, atomic priced purchases, household saving, retained goods exchange, and insufficient-funds rollback, derived flourishing, causal decline after capability regression and maintenance lapse, recovery through normal Resource and Settlement operations, exact save-and-restore rederivation, and cursor-bounded regional prosperity continuation, autonomous household- or business-sponsored house or storehouse selection, two-settlement choice divergence from different owned facts, explained no-selection, critical builder interruption, direct-control deferral, bounded late-candidate replacement, causal timeout failure, terminal Settlement outcome, reopened cadence, save/load, replay, content breadth, and a 20,000-person scale gate.

Phase 16 closure proof includes ten residents, four households, six completed service or housing buildings, one active workshop, two eligible autonomous project candidates, content-authored residence benefits, spatial access distance, settlement-scoped resource reporting, direct presentation bindings, save/load, replay, and packaged live play.

Phase 17B proof covers conserved field-dressing consumption, terminal care Work, typed Household history, complete owner rollback after an invalid quantity, and one autonomous injury and illness recovery.

#6Current Limits and Extension Points

The implemented economy proves several resource, food, building, recipe, trade, capability, outpost, wealth, prosperity, and settlement families plus sequential autonomous choices between two authored settlement projects, with at most one selected project active at a time. Sponsor-aware reasoner proof covers household, business, civic, and institution identities and two settlements selecting different valid projects from different inputs. The live starter scenario currently composes household and business sponsors. It does not yet implement broad recurring settlement expansion, more project families, civic planning, or the village-to-polity economy described in Current and Game Development.

New resources, buildings, recipes, currencies, custody locations, institutions, and settlement capabilities should extend data-defined families and the existing transaction owners. Capability evidence may gate an option but cannot execute it or replace its causal owner. These extensions must not introduce settlement-specific inventory, instant construction, unowned money totals, profile-driven unlocks, or summary-driven transfers.

E.8Intersections, Incidents, Memory, and Consequences The deterministic event pipeline and the separate owners that retain outcomes, knowledge, memory, reputation, relationships, households, institutions, and factions. Current reference

Systems evidence: systems.module.game, systems.module.app, systems.module.tools

Implemented through: Phase 4, Phase 5, Phase 8, Phase 10, Phase 11, Phase 12, Phase 16

#1Responsibility

Intersection scheduling, occurrence evaluation, incident selection, incident lifecycle, and presentation are separate deterministic stages. Outcome owners apply domain changes. Memory, Reputation, Relationship, Household, Institution, structured-event, quest, faction, and conflict runtimes retain their own facts.

#2Current Execution

  • Bounded reasoners scan eligible route, site, timed, social, economic, environmental, hostile, discovery, and institutional opportunities.
  • Hard plausibility gates run before weighted selection. Activation retains the exact participants, place, context, definition, sequence, and source revisions.
  • Intersection activation projects each living Actor into one bounded incident fact containing only

the capabilities, needs, affect, traits, condition values, and Heat tier retained by the Intersection schema. Candidate evaluation rejects dead Actors, and lifecycle validation rejects noncanonical omitted Actor history before state can enter persistence.

  • An outcome owner validates an active incident, stages affected owner changes, and resolves or fails the incident atomically.
  • Completed outcomes can be reconstructed from retained activation context so later consequences do not infer history from current Actor condition.
  • Focused App adapters turn a proven outcome into candidate Memory, Reputation, Relationship, Household, learned-tendency, institutional, or event-consequence requests.
  • During the starter settlement's social window, App composes at most one witnessed encounter per resident per day from current Actor routine and World Site facts. Existing non-estranged relationships guide later partner choice. Conversation, support, and disagreement complete through IncidentLifecycle, Relationship, Memory, and Actor owners rather than a presentation-only marker.
  • Prompt and quest presentation read bounded retained facts and apply urgency, suppression, delegation, neglect, and de-escalation policies without becoming outcome authority.

#3Ownership and Invariants

  • Intersection reasoners are read-only. IntersectionLifecycleRuntime owns the incident record.
  • Actor owns complete work progression, hydration, illness, birth, lineage, life, death, and wound

history. Intersection retains no second copy of those unrelated fields.

  • Actor, World, Party, Resource, Work, social, institution, and faction owners validate and mutate only their facts.
  • Memory records provenance and bounded knowledge receipts. Relationship is canonical Actor-pair truth. Household owns unique membership and strain. Reputation owns Household-subject assessments.
  • Source Incident evidence and revision checks make consequence application idempotent across retries, save/load, and active Memory expiry.
  • Events report facts after mutation. They do not replace explicit commands or hide core control flow.

#4Persistence and Recovery

Incident activation and resolution context, bounded histories, monotonic IDs, knowledge receipts, social evidence, structured-event state, obligations, quest state, factions, and remote conflicts persist through their owners.

Restore rejects missing participants, invalid definitions, stale revisions, duplicate evidence, capacity exhaustion, and broken cross-owner relationships before live replacement.

#5Inspection and Proof

Developer panels expose candidate counts, filters, selected definitions, activation context, incident stage, outcome, memories, evidence, propagation, reputation, relationships, households, biography, institutions, quests, factions, alarms, and conflict work.

Proof includes wildlife, traveler disputes, environmental hazards, renewable discovery, witness memory, household reporting, social consequences, learned tendencies, personhood, structured quests, institutional obligations, diplomacy, guard work, parties, raids, remote conflicts, canonical participant projection, dead-participant rejection, persistence, replay, idempotence, and bounded population work.

#6Current Limits and Extension Points

Implemented catalogs prove the shared pipeline but do not represent final narrative, cultural, religious, political, quest, or warfare breadth.

New event families should add immutable definitions, bounded candidate production, explicit outcome ownership, retained activation evidence, consequence requests, suppression rules, persistence, inspection, and deterministic proof. They must not create bespoke minigame state that bypasses World, Actor, economy, or social owners.

E.9Rendering, Camera, Selection, and Player Interaction Isometric projection, scene extraction, culling, depth order, sprites, ground presentation, selection, feedback, and the boundary between observation and authority. Current reference

Systems evidence: systems.module.render, systems.module.controls, systems.module.app, systems.module.assets, systems.module.tools

Implemented through: Phase 0C, Phase 4, Phase 6, Phase 7, Phase 13, Phase 16

#1Responsibility

Render owns camera, selection, render-debug state, decoded presentation resources, scene ordering, sprite frame selection, ground drawing, and presentation-only preferences. App builds bounded render inputs from authoritative owner state. Controls owns the physical action state. Game owners retain player orders and control authority.

#2Current Execution

  • Projection converts explicit world ground coordinates to 2:1 isometric screen space and reverses the mapping for picking.
  • Pointer-centered zoom preserves the ground point under the cursor. Camera capture and restore validate viewport, center, zoom, and bounds.
  • App joins ECS proxies with authoritative focused and warm Actor positions, culls inputs, and submits disposable render and selection records.
  • Scene extraction validates footprints, resolves Actor overrides, culls offscreen candidates, and sorts by projected ground depth with persistent ID as the tie-breaker.
  • Selection candidate footprints, selected and hovered ground markers, and contextual move

feedback are inserted immediately before the matching scene depth. They remain ground-plane presentation and cannot paint over entities drawn later in the scene.

  • Selection supports point and marquee replacement plus additive toggle or addition. Selected stable IDs remain only while their Actor is valid.
  • Selection changes observation only. Contextual move and attack requests reject until every

recipient has entered direct control through the explicit Take Control action.

  • The sprite atlas selects appearance, facing, idle or walking frame, feet anchor, scale, and reduced-motion behavior without changing Actor state.
  • Scene entities may name one validated static atlas and frame key. App derives a disposable

presentation record and SDL draws the keyed prop or structure at its authoritative ground transform. Actor sprites take precedence; unavailable optional art preserves the procedural proxy.

  • App submits detached terrain for active World chunks in stable coordinate order. Camera

visibility culls cells before the SDL backend draws one geometry batch. The fixed procedural patch is used only when resident terrain or its optional texture is unavailable.

  • App submits a bounded 3-by-3 camera-neighborhood interest and selected-Actor interests to World.

Those detached requests may affect presentation residency but cannot change Actor control, planning, work, needs, or heat.

  • Healthy Lua packages record bounded semantic panel, widget, theme, and layout intent. Tools

translates only the completed detached intent to ImGui; packages receive no SDL, ImGui, renderer, texture, font, or input-device handles.

  • The player HUD is a replaceable registered surface. The standard and development replacement

providers share the same stable panel contract, while the compiled recovery shell cannot be replaced or hidden.

#3Ownership and Invariants

  • Render reads simulation truth. It cannot move an Actor, activate a Job, change heat, repair a route, or create a gameplay selection side effect.
  • Selection is observation state. Assignment and direct control require explicit Game-owner actions.
  • Appearance variation is disposable and stable for presentation. It has no save, Actor, culture, or genealogy authority.
  • SDL textures and handles remain inside the SDL render backend. Platform-neutral contracts expose plain values.
  • Missing optional presentation art preserves the declared procedural fallback; invalid present art fails validation.

#4Persistence and Recovery

Camera and render-debug state have validated detached replay values. Selected IDs and transient panel state are disposable unless an explicitly persisted owner names them.

Simulation saves do not store textures, geometry, sprite frames, presentation variation, or Lua/UI state. Scenario reset reloads immutable bytes and transactionally replaces decoded resources.

#5Inspection and Proof

Render inspection reports camera state, selection candidates and work, scene input and culling counts, build time, asset status, decoded dimensions, resident and visible terrain chunks, tile counts, and geometry submissions.

Live Phase 13 proof selected Actor 42, issued a normal contextual move, displayed directional walking, kept sprite feet and selection aligned, reached the marked destination, and reported textual completion. Phase 15A automated proof separates observation from direct authority, rejects movement and attack without explicit control, and replays Take Control as a first-class ordered input. Phase 15C live isolated proof opened the default 1600-by-900 window, rendered resident World terrain, and retained camera-culled terrain while panning. Phase 15D live isolated proof continued one exact-ground order across the first adjacent active-chunk border and completed at the stable Site in the destination chunk. Phase 15E automated proof continues one order through four active chunks, while isolated graphical proof confirms the 1600-by-900 default and stable F3 diagnostics without host input. Phase 15F automated proof activates, cools, and restores chunks from camera, selection, and travel requirements while preserving compressed distant Actors; isolated proof confirms the same 1600-by-900 default and stable diagnostic panels. Phase 15G live proof renders the complete authored region through the supported 1600-by-900 path; VSync and uncapped benchmark runs report camera- visible resident terrain and scene-load counts from the same normal presentation path. Automated proof also covers projection inversion, picking, marquee behavior, culling, ordering, assets, fallback, reduced motion, corridor invalidation, save and load, replay, and representative visible-proxy budgets.

Phase 16 closure proof gives every established starter-settlement Building exactly one completed static-sprite presentation and verifies the applied frame after construction-stage updates. Live packaged play displays ten villagers, two longhouses, a well, granary, ration kitchen, meeting shelter, workshop project, resource props, and grass terrain.

Phase 17A correction proof removed the obsolete always-visible topology Site targets retained from the earlier movement demonstration. Live isolated proof shows selection and contextual ground markers participating in scene depth order instead of drawing as final overlays.

#6Current Limits and Extension Points

Resident active-chunk terrain now replaces the fixed ground patch. Embodied local movement can cross a bounded corridor of orthogonally adjacent active chunks under one retained order. Selection, assignment, direct control, and release have separate authority paths. Bounded camera, selection, and travel interests now activate and cool presentation residency through World.

Broader terrain art and effects must continue to consume owner-built detached state. Scripted UI already follows that rule through bounded queries, typed commands, semantic intent, and explicit provider selection. Camera interest, selection, composition, and drawing callbacks cannot become gameplay mutation paths.

E.10Persistence, Migration, Replay, and Recovery Owner-aligned save capture, transactional restore, schema migration, replay input, canonical checkpoints, divergence reporting, and backup recovery. Current reference

Systems evidence: systems.module.app, systems.module.sim, systems.module.game, systems.module.core, systems.module.render, systems.module.tools

Implemented through: Phase 0B, Phase 0E, Phase 1, Phase 2, Phase 3, Phase 4, Phase 5, Phase 6, Phase 13, Phase 16, Phase 17

#1Responsibility

Each mutable owner defines its complete detached state and validates replacement. App coordinates the full foundation document and cross-owner restore. Tools owns replay recording, transcript serialization, checkpoint hashing, deterministic reapplication, and first-divergence diagnostics.

#2Current Execution

  • Capture requests plain state from the command queue, scheduler, runtime tuning, scenario-capacity

policy, ECS, World, Actor, economy, control, event, social, institution, faction, camera, and other participating owners.

  • Serialization writes one versioned foundation document with stable IDs and explicit owner schemas.
  • Deserialization creates detached candidates. Each owner validates structure, bounds, identities, revisions, and cross-references before App replaces any live state.
  • World schema 12 adds stable irregular land areas with complete condition, crop lifecycle,

revision, and causal ticks. Supported schemas 4 through 11 migrate with no invented land area. Nested land schema 3 adds optional controlling Site identity independently of dedication. Land schema 2 migrates with no invented control. World schema 11 stores physical local- and route-movement segment progress, deterministic fractional remainders, authored segment distances, infrastructure rate modifiers, and Actor and transport rate modifiers in addition to terrain, residency transition ticks, topology, and residency. Supported older World schemas migrate existing topology chunks to the baseline meadow kind without changing their identities, coordinates, or residency; schemas without transition timing initialize it from the saved World tick. Schema 9 local moves retain their authoritative current position and path, start a physical segment from that position with neutral modifiers, and do not invent fractional progress that the old model never stored.

  • Retained local movement stores one authoritative cell path plus its physical segment origin,

integer millimeter progress, fractional numerator remainder, and capability modifiers. Restore derives its chunk corridor, validates every adjacent cardinal or diagonal cell and each orthogonal border transition under fixed bounds, reconstructs the exact in-progress physical segment position, and rejects inactive, repeated, or contradictory corridor or progress state before replacing World.

  • Completed-building blockers are a disposable view rebuilt from restored Construction truth.

Restore hydrates that view before active movement continues, and any invalidated local route replans from the retained physical position rather than its original order origin.

  • Replay captures an initial checkpoint, ordered runtime, camera, selection, run-control, and player-order inputs, then one canonical tick and state hash after each step.
  • Replay restores through public owner APIs, reapplies inputs in order, and reports the first expected-versus-actual tick or hash mismatch.
  • Settlement project evaluation is deterministic fixed-tick work rather than a replay input. A

checkpoint before evaluation reproduces the same decision from the same owner facts. A checkpoint after evaluation persists Settlement's accepted trace and selected Construction reference. Construction worker interruption, replacement traversal, handoff, timeout failure, and terminal Settlement reconciliation continue from their persisted owner state rather than becoming replay inputs.

  • The World clock and day classification remain derived from the retained fixed tick. Actor schema

19 stores each accepted routine expectation, actual choice, reason, stable schedule offset, and compressed-day counters. Schema 18 migrates with no invented routine history. Replay advances the normal Actor schedule and reproduces the same routine state rather than recording routine choices as external inputs.

  • Autonomous health care is derived from the scheduled Actor cohort and current Household,

Settlement, Work, Resource, Actor, and World facts. Replay does not record a separate care input. Actor retains the wound or illness outcome, Work retains terminal graph state, Resource retains the consumed quantity, and Household retains the typed care record.

  • Intersection activation persists only its explicit incident-relevant Actor projection.

Unrelated Actor progression, hydration, illness, lineage, death, and wound history remain Actor-owned and cannot change an accepted Incident record across save/load.

  • Successful save replacement retains the previous valid foundation as a backup. Recovery can load that backup without rewriting a damaged primary.

#3Ownership and Invariants

  • Save/load is not a second mutation path. Restore uses the same owner validation and invariants as runtime composition.
  • Every durable relationship uses a stable ID and validates its target. Pointer values, registry handles, textures, callbacks, and UI containers are never saved.
  • Derived snapshots, transient reasoner inputs, social input joins, regional presentation, and

render scenes are rebuilt rather than persisted as authority. Settlement persists only its owner-accepted project decision and evidence, not the mutable owner facts used to compose it.

  • Migrations may preserve, transform, or initialize explicitly absent fields. They cannot infer player knowledge or invent historical evidence.
  • Replay inputs and canonical ordering are versioned and size bounded.

#4Persistence and Recovery

Foundation schema 28 is the current App serialization contract described by Systems. It retains the schema-3 App tuning registry, the scheduler's integer time-scale remainder, and the schema-1 scenario-capacity policy state with its revision, the installed content-catalog identity, and the bounded script-command service state. It embeds Settlement schema 4, which retains autonomous project cadence, the complete latest accepted decision trace, and an optional terminal project outcome with exact Construction identity, definition, revision, cause, and tick. Settlement schema 3 migrates with no invented outcome; a selected project keeps cadence suspended until its referenced Construction is terminal. Settlement schema 2 migrates with the default cadence, a next evaluation at the retained update tick, and no invented prior decision. Supported foundation schema 27 documents initialize an empty project decision through that Settlement migration. Supported schema 26 documents initialize an empty script-command service. Supported schema 25 documents add the installed content-catalog asset identity without copying immutable catalog definitions. Supported schema 24 documents add the scenario's default capacity policy without inventing a prior live change. Supported schema 23 documents add the default construction rate while preserving their existing tuning revision. Construction schema 8 retains stable building-definition IDs, blockage timing, worker interruption and reassignment ticks, handoff count, and failure cause. Construction schema 7 migrates with zero interruption history and an unspecified cause only for an already failed legacy site. Construction-work scheduler schema 7 adds the default 200-tick interruption grace and an empty completed replacement scan. Phase 3 economy schema 18 embeds those current values and retains Resource schema 6 money-custody containers and bounded transfer history. Resource schema 5 migrates with no transfer history, and older authored economies migrate without inventing wallets or money. Phase 3 schema 13 retains the catalog asset identity plus stable resource, building, and recipe references; schema 12 and Party schema 5 migrate the associated owner and assist records. Phase 3 economy replay schema 4 treats legacy whole build ticks as whole work units and initializes the new remainder to zero. Actor schema 16 adds the movement capability modifier; schemas 12-15 restore it to the neutral value. Phase 0 replay schema 20 records normal and development-restricted script commands, including money contributions, tuning, and capacity changes, through their stable command ID, detached arguments, host-created origin, submission tick, and target tick. Schema 19 retains stable building-definition IDs for settlement commands and rejects the prior ambiguous command schema. World replay schema 3 retains movement tuning and capability inputs; schema 2 migrates to explicit defaults. Older supported schemas continue through their existing owner-aware migrations.

Household schema 5 adds meal, injury_treatment, and illness_treatment care kinds. Household schemas 3 and 4 migrate existing untyped care history as meals. The migration does not invent prior treatment.

Capacity-policy restore stages the saved revision, Actor live count, Resource-unit total, largest inventory container, and aggregate inventory capacity. A policy below retained use rejects before any live owner or command queue is replaced.

Recovery distinguishes invalid primary data, valid backup data, migration failure, composition failure, and success. The player receives direct feedback, and the damaged source is not silently overwritten.

#5Inspection and Proof

Replay inspection exposes schema, input steps, checkpoints, result, and the first divergence. Save diagnostics identify the owner, field, stable reference, schema, or bound that failed.

Proof includes owner round trips, invalid-document fixtures, migration boundaries, deterministic continuation through a four-chunk local corridor, deterministic movement and construction fractional-remainder restoration, non-default capacity-policy revision round trips, schema-24 capacity migration, catalog identity and definition-reference validation, building-definition replay round trips, below-use restore rejection, construction replay migration, replay equivalence, explicit tuning and capacity command replay, conserved money-contribution replay, physical route progress and legacy migration, autonomous project no-selection and selection continuation, critical builder interruption, replacement and timeout continuation, terminal project outcome, reopened cadence, pre-decision save/load replay equivalence, canonical Intersection participant projection and rejected noncanonical retained facts, restored completed-building blocker hydration, retained-position replanning, future-border invalidation, residency cooling and reactivation timing, corruption and backup recovery, large representative saves, extracted-package saves, and the final release matrix.

#6Current Limits and Extension Points

The representative 20,000-person JSON foundation is intentionally large. It proves ownership and correctness, not final save compactness or background streaming.

The replay input schema records supported live tuning and capacity-policy commands through the same typed script-command submission path used by the running development package. Adding a new restricted command still requires an explicit replay schema decision; command transcript evidence alone does not make an unsupported input replayable.

Any engine change that adds durable state must add owner capture, detached validation, schema and migration behavior, replay hashing, inspection, negative fixtures, recovery review, and representative size and timing evidence in the same slice.

E.11Observability, Diagnostics, and Developer Tools Detached inspection, ImGui presentation, run controls, causal traces, hotkeys, failure diagnostics, and the rule that tools never become gameplay owners. Current reference

Systems evidence: systems.module.tools, systems.module.app, systems.module.controls, systems.module.render, systems.module.tests

Implemented through: Phase 0E, Phase 2, Phase 3, Phase 4, Phase 5, Phase 6, Phase 9, Phase 10, Phase 13, Phase 16, Phase 17

#1Responsibility

Tools owns developer inspection models, ImGui panel state, replay orchestration, run-control adapters, hotkey presentation, and diagnostics formatting. Domain owners build or expose detached snapshots. Render owns the narrow SDL overlay contract used by the optional graphical tools backend.

#2Current Execution

  • F3 toggles developer diagnostics while a normal launch begins on the production player path.
  • Runtime, World, Known World, Actor, economy, control, orders, Intersections, incidents, social consequence, personhood, assets, render, and replay panels consume detached data.
  • Hidden diagnostics skip expensive selected-entity or owner-join capture. Visible panels request bounded snapshots with explicit counts and work evidence.
  • Pause and single-step buttons produce narrow actions that become the same Core commands used by keyboard controls.
  • ImGui input capture filters keyboard and pointer events before Controls, preserves quit, F3, and the F10 package-reload action, and injects a reset when capture could leave a held action stuck.
  • The hover Hotkeys panel derives physical labels from the Controls catalog and validates complete action coverage.
  • The ordinary villager and settlement interface is composed by the first-party standard Lua

package from detached queries and typed commands. A development package can extend, decorate, or replace its registered surface without changing engine callbacks.

  • world.calendar.current exposes the detached world day, clock, season, and day kind.

world.actor.routine exposes one selected Actor's expected routine, actual choice, reason, schedule offset, evaluation tick, and bounded continuation evidence. The standard package shows those values without gaining calendar, Actor, Work, or schedule authority.

  • world.actor.status exposes injury, illness, impairment, and recovery readiness from Actor.

world.household.for-actor exposes the latest retained care kind, caregiver, recipient, material, and completion tick from Household. The standard package formats these detached facts without receiving condition, Work, Resource, or Household mutation authority.

  • world.actor.relationships pages one Actor's retained social connections. The newest-first

world.settlement.social-chronicle pages completed village conversations, support, and disagreements. Both join detached owner facts and authored names without opening an Incident or mutating Actor, Relationship, or Memory.

  • Widget activations retain the owning package ID. Normal and development-restricted actions reach

their existing command owners through the same validated fixed-tick service.

  • The compiled Scripts tab reports host generation, normal or safe mode, last reload result,

package memory and callback work, faults, surface providers, hidden skips, and a bounded event history.

  • Compiled controls can reload packages, restore the standard interface, or enter Safe Mode. Safe

Mode disables development packages and restores standard providers and layout without issuing a gameplay command.

  • The graphical runtime always retains a bounded rolling frame, process CPU, and optional

resident-memory window. Lua packages can read the current detached snapshot, start and stop one owned bounded log, read constant-time min/average/max aggregates, and page through retained samples. An invalid or faulting package cannot crash the runtime or take another package's active logging session.

  • The development Tuning Bench reads one detached scenario-capacity snapshot containing policy

revision, live population, total resource units, largest inventory container, and aggregate inventory capacity. Its four headroom actions submit revision-checked restricted commands; they do not edit Actor or Resource records directly.

  • world.building.info and world.construction.progress expose the retained authored

definition_id as a detached string. Building information also includes the authored display name and function label plus runtime condition percent, quality band, and lifecycle status. Headless content validation reports the accepted catalog definition count. Neither surface grants catalog or gameplay mutation authority.

  • world.settlement.resources requires one selected Settlement and pages only the contents of its

retained stockpile IDs. world.resource.counts remains an explicitly world-wide development query. Both return detached Resource facts and cannot transfer, reserve, or consume inventory.

  • world.construction.active and world.construction.progress expose Construction-owned blockage,

failure cause, interruption deadline and grace remaining, last interruption and reassignment ticks, and handoff count. Deadline fields are derived from the retained interruption tick and scheduler grace policy; the query cannot release, replace, fail, or resume a worker.

  • world.project.proposals pages one Settlement's latest retained autonomous decision. Every row

reports one candidate's stable identity, building definition, eligibility or rejection, three score contributions, total score, and selected state. Repeated decision fields report status, explanation, source and current Settlement revisions, decision tick, tuning version, minimum score, candidate and consideration counts, owner visits, optional selected Construction, optional terminal outcome and cause, exact outcome Construction and Building identities, retained Construction revision, outcome tick, and next project-decision tick.

  • The standard Lua settlement panel uses that query to show the autonomous decision, threshold,

bounded planning work, selected Construction, and why each candidate was selected, passed over, or rejected. It also reports interrupted construction recovery time, successful handoff, timeout failure, retained terminal project outcome, and the next evaluation tick. The panel cannot request evaluation, replace a worker, or edit the retained trace.

#3Ownership and Invariants

  • Tools can request existing commands or owner actions through narrow adapters; it cannot mutate scheduler, Actor, World, economy, social, or event state directly.
  • Inspection values are detached, bounded, and read-only. They have no save authority and cannot extend owner retention.
  • Project-proposal query pages visit one Settlement plus only the returned candidate rows. Pagination

does not recompute the decision or retain a second candidate list.

  • Construction recovery queries visit the existing Construction and scheduler records only. They

derive display timing without adding a timer, deadline, or failure owner.

  • Player-facing Quick Start, Commands, Lenses, and feedback read the same retained results as diagnostics. They do not execute or repair orders.
  • Tools may format causal joins, but every fact retains its original owner and revision.
  • Backend-specific ImGui and SDL types remain in the optional graphical tools implementation.

#4Persistence and Recovery

Developer panel layout and transient selections are not simulation truth. The scheduler persists only the explicit diagnostics-visible flag. Replay artifacts are separately versioned developer data.

Performance samples and log sessions are process-local diagnostics. They are deliberately excluded from simulation saves, replay checkpoints, deterministic hashes, and gameplay decisions.

When tool input capture or a panel fails, normal controls and simulation state remain recoverable through filtered events, input reset, the compiled recovery shell, standard restoration, Safe Mode, and the ordinary lifecycle. The recovery controls do not depend on Lua composition.

#5Inspection and Proof

The tools themselves expose snapshot sizes, bounds, latest reasons, owner revisions, source evidence, work visits, deferred work, failures, package budgets, disabled state, and replay divergence. Named tests verify capture filtering, command ordering, hidden-work suppression, stale generation rejection, fault isolation, safe-mode recovery, hotkey catalog coverage, detached ownership, bounded panel inputs, detached capacity accounting, stale and below-use rejection, and exact causal chains. Project-decision and construction-continuity proof covers complete query fields, pagination, unavailable state, retained candidate ordering, interruption timing, handoff and failure evidence, terminal outcome, standard-package rendering, and detached ownership.

Starter-settlement closure proof verifies that the standard interface labels world-wide resource counts honestly, reports only Settlement-owned stores in the settlement view, and formats established buildings without exposing raw content keys or basis-point values as player text.

Phase 17A live proof verifies that the normal interface displays the changing world clock and that a selected autonomous resident reports a routine, expected activity, and choice reason.

Phase 17B proof verifies that the normal and compiled resident panels report injury, illness, and impairment, and that the household panel reports the latest retained care participants and kind.

Live proof covers Pause, Step, F3, selection, movement feedback, Commands, Lenses, UI scaling, reduced motion, hotkey hover, and long-running sessions.

#6Current Limits and Extension Points

Compiled F3 diagnostics and recovery remain intentionally native. The ordinary interface, resource addon, extension toolbar, decoration, and alternate player-HUD provider are Lua packages rendered through backend-neutral intent. F10 transactionally reloads the complete package graph and preserves compatible host-owned state without restarting. Invalid candidates leave the previous interface active and report the exact package error. Repeated runtime faults isolate the offending package, hidden surfaces do no callback work, stale actions reject by generation, and the compiled recovery shell can enter Safe Mode or restore the standard interface. The packaged runtime exports the complete registry used to build the external API Reference, and package verification compares that export with every installed reference symbol and manifest entry.

Active event delivery records bounded callback and failure work per package. A runtime error, instruction overrun, memory exhaustion, invalid callback reference, or repeated handler failure is reported through the same compiled diagnostics and package-isolation path. Source retention and per-dispatch delivery are bounded; expired source events produce an explicit overflow diagnostic.

The external API Reference documents developer.performance.current, developer.performance.log, developer.performance.log-samples, performance.start_logging, and performance.stop_logging from the same runtime registry used by the package host. It also documents developer.capacity-policy.current, restricted.capacity-policy.set-limit, and events.capacity-policy.changed. The capacity event is published only after a successful policy commit and before command completion.

Building and construction queries document their stable authored definition identity from the same runtime registry used by the package host and external API Reference.

Runtime API 1.6 documents world.calendar.current and world.actor.routine from the same registry used by the package host. Both queries return detached bounded facts and expose no mutation path.

Runtime API 1.7 adds world_indicators.channels, world_indicators.is_visible, and world_indicators.set_visible. ScriptPackageHost owns per-session visibility. App composes the development resource-activity channel from bounded authored source-anchor, Resource, Supply, Work, and World reads only while visible. Authored physical sources remain present without an active Supply chain, and their exact World cells provide presentation positions. Render receives detached stable-ID, position, label, value, and state records, centers the complete pill over the source, and cannot repair or mutate its inputs. Development channels default hidden and Safe Mode hides them.

Runtime API 1.8 adds health fields to world.actor.status and latest-care fields to world.household.for-actor. Both queries remain bounded, detached, and read-only.

Runtime API 1.10 adds world.actor.relationships and world.settlement.social-chronicle. The standard package uses them for the selected villager's social connections and the unselected village chronicle. Both remain paged, detached, and read-only.

Runtime API 1.14 adds world.settlement.environment. It returns the current settlement-region weather, environmental pressure, wildlife populations, renewable availability, and Actor routine adaptation as bounded detached facts. The standard package reports those facts without owning Environment, Ecology, Actor, or Work state.

Runtime API 1.15 extends world.settlement.environment with the current stable, disrupted, or recovering Household condition, bounded affected-Household counts, and total retained environmental strain. The standard package reports those facts without owning Environment or Household state.

Runtime API 1.18 adds schedule_offset_minutes to world.actor.routine. The value is detached Actor-owned evidence of the resident's stable personal timing relative to the authored routine.

Runtime API 1.19 adds world.settlement.housing-pressure. It pages the Settlement-owned current Household pressure ledger in stable Household order and can filter one Household. Rows expose the current and forecast capacity, occupancy, sharing, condition, privacy, access, wealth, component pressures, severity, trend, confidence, direct cause, assessment tick, and exact source revisions. The query is detached and read-only; it cannot select a housing method or parcel or mutate any Household, Actor, Building, Resource, World, or Settlement fact.

Runtime API 1.19 also adds world.settlement.housing-methods. It pages the current stable option ledger and can filter one Household. Rows retain repair, extension, shared-residence, and new-construction identity; target Building or definition; current capacity, condition, compatibility, material, labor, access, wealth, cost, risk, score, selection, rejection, direct detail, and exact source revisions. The query is detached and read-only. It cannot select a parcel, start work, reserve materials, change a Building, or assign a Household residence.

Runtime API 1.19 also adds world.settlement.housing-parcels. It pages the current stable composite parcel option ledger and can filter one Household. Rows expose the selected source method, building definition, land area, exact origin, pre-rotated footprint identity and size, reachable access cell, pressure, method, service, neighboring-use, material, labor, control, travel, risk, score, selection, rejection, direct detail, and exact source revisions. The query is detached and read-only. It cannot claim land, create Construction or Work, move Resource, or assign a Household residence.

Runtime API 1.19 also adds world.settlement.housing-executions. It pages the bounded stable Settlement ledger and can filter one Household. Rows expose the selected method and optional parcel, Household, target Building, Construction, resulting Building, lifecycle, source evaluation ticks, source Household revision, latest owner revision, direct explanation, and creation and update ticks. The query is detached and read-only; existing owners remain the only mutation path.

The first-party standard interface combines these four housing queries without retaining a second summary. It reports assessed Household demand, the selected or blocked method, an exact selected parcel when required, the latest execution explanation, and current Household, Building, and Construction bindings. Missing assessments remain absent instead of being presented as simulation facts.

Runtime API 1.19 extends world.land.areas with controlling_site_id. The nullable Site identity reports current World-owned control separately from the area's land use, crop dedication, and responsible dedicated Site. Paging remains stable and detached; the query cannot claim land or select a construction parcel.

The same registry documents world.project.proposals as a bounded read-only query. It exposes the retained Settlement decision and terminal outcome and does not grant project designation or decision authority. Construction query schemas expose the current recovery state through the same read-only boundary.

E.12Determinism, Performance, and Scale The measured fixed-tick, population, rendering, save, replay, memory, and workload-budget baseline used to judge future engine changes. Current reference

Systems evidence: systems.module.sim, systems.module.game, systems.module.app, systems.module.render, systems.module.tools, systems.module.tests

Implemented through: Phase 1, Phase 2, Phase 3, Phase 5, Phase 6, Phase 7, Phase 9, Phase 10, Phase 12, Phase 13, Phase 16, Phase 17

#1Responsibility

Each recurring owner retains its cadence, cursor, visit count, mutation count, budget, and deferred work where applicable. The release benchmark composes representative simulation, embodied presentation, save, load, replay, and memory measurements without creating a separate runtime.

#2Current Execution

  • Fixed-tick work uses stable ordering and explicit update intervals.
  • Heat tiers keep focused and warm Actors detailed while cool and cold Actors retain identity and bounded compressed continuation.
  • Residency accepts at most 64 external interests and at most 64 active chunks. Stable reconciliation

protects retained travel without promoting unrelated cold Actors or allocating local paths for them.

  • Candidate generation uses narrow indexes and bounded sets rather than all-pairs population scans.
  • Render composition emits only focused and warm Actor proxies and camera-relevant scene data.
  • Graphical benchmarking uses the normal Release runtime and presentation path. It excludes a fixed

120-frame warmup, measures a caller-bounded interval, and terminates after printing percentile frame latency and peak detached scene-load counts.

  • The package host always retains at most 120 current performance samples. One explicit logging

session retains at most 36,000 samples, updates its summary incrementally, and pages no more than 64 raw samples per query.

  • Regional Economy, ecology, remote conflict, social propagation, personhood, and other broad work retain explicit visit budgets and deferred counts.
  • Daily routine evaluation runs only for Actors already due in the existing schedule. It retains

one compact state per Actor, performs constant bounded choice work per visit, and records compressed day boundaries without allocating per-day histories.

  • Settlement project evaluation visits at most 16 authored candidates and evaluates exactly

three fixed-point considerations for each eligible candidate. App visits only the active settlement's retained building and stockpile IDs. The accepted decision records all three visit counts.

  • Interrupted construction replacement traverses the supplied settlement worker index through the

existing Actor-evaluation and candidate-visit budgets and retains a stable continuation between updates. An interrupted site takes claim-continuation priority over unrelated new work. Timeout requires both the configured grace period and retained evidence that one complete eligible-worker pass found no replacement.

  • The Release suite runs the registered representative budget as a normal test gate.
  • Compile-time population and Resource ceilings bound record counts and arithmetic regardless of

scenario content. Each scenario can set lower live-population, resource-unit, per-container, and aggregate-storage limits. These authored limits are balance and workload policy; they are not a claim that the engine performs acceptably at every permitted value.

#3Ownership and Invariants

  • Optimization cannot weaken deterministic results, stable identity, owner validation, save continuity, or explainability.
  • A summary may accelerate reads but cannot gain transfer, assignment, topology, or save authority.
  • Hidden UI does no expensive recurring capture. Compressed Actors allocate no sprite or local-path resources.
  • Work budgets state eligible population, frequency, visit count, mutation count, and degradation behavior.
  • Parallel work is conditional on measurement and must commit through a deterministic ordered reduction.
  • Raising a scenario capacity limit cannot raise an immutable technical ceiling or bypass Actor and

Resource validation. Lowering a limit cannot discard, truncate, or silently compress retained state; it rejects atomically when current use is higher.

#4Persistence and Recovery

Performance state that affects deterministic continuation, such as cadence, cursors, scheduled ticks, deferred work, and random-stream position, persists with its owner. Settlement persists its next project-decision tick and the accepted candidate, consideration, building, and stockpile visit counts. The construction scheduler persists replacement continuation and sorted completed-scan evidence; Construction persists interruption timing and handoff count. Pure timing measurements and render scratch storage do not.

Large saves are validated against explicit size, load, replay, and memory budgets. Recovery and migration use the same representative data rather than a reduced special case.

#5Inspection and Proof

The Phase 16 closure run retained 20,000 Actors, composed 576 embodied records, and left 19,424 compressed. One measured gate completed 101 simulation ticks in 518,472 microseconds, Actor render composition in 75 microseconds, and scene construction in 19 microseconds. Saving took 3,770,473 microseconds, loading took 3,586,041 microseconds, and replay took 28,702,738 microseconds. The save contained 140,179,367 bytes and peak resident memory was 1,664,925,696 bytes.

Those values are a recorded supported-host baseline, not universal frame targets. The Release suite passed 776 checks including the registered budget; development, headless, and sanitizer matrices passed 775, 759, and 775 checks against the same owners.

Phase 16E proof evaluates two authored project candidates by visiting one retained building and one retained stockpile in the starter settlement. Separate reasoner proof rejects insufficient candidate or consideration budgets, and runtime proof retains the exact counts through save and replay.

Phase 16F proof places the only valid replacement at the end of a 1,000-Actor settlement worker index with a 32-Actor evaluation budget. The scheduler keeps the project blocked across updates, reaches the late candidate through deterministic continuation, and reassigns it without scanning the world population or timing out before the complete pass.

Phase 16G proof keeps both authored project candidates eligible using bounded retained building and stockpile indexes. Focused Phase 16 proof passed 50,624 assertions across 106 cases, including settlement-only resource reporting and persistence of every established building.

Phase 17A's registered Release benchmark retained 20,000 Actors with 576 embodied and 19,424 compressed. Routine evaluations matched the existing Actor-visit count, all established simulation, render, save, load, replay, and memory budgets passed, and no all-population per-tick pass was added.

The Phase 15 connected-region live run used the supported 1600 by 900 Release path and 600 measured frames after warmup. VSync reported 60.07 average FPS. Uncapped presentation reported 253.89 average FPS, 4.258-millisecond p95, 6.393-millisecond p99, 6.844-millisecond worst frame, and no frame over 16.67 milliseconds. Both runs presented nine resident chunks, four camera-visible chunks, 900 visible ground tiles, two Actor submissions, and seven visible scene entities. These values describe that isolated supported-host run, not a universal target.

#6Current Limits and Extension Points

The existing proof establishes architecture at 20,000 persistent people, not final performance for every future city, ecology, institution, event, and war workload simultaneously. The default scenario population limit matches that representative proof, but the equality is policy rather than a measured universal maximum. The JSON foundation remains expensive, and the current renderer proves hundreds of embodied records rather than a final dense-city presentation.

Every Game Development phase must extend representative workloads as it introduces new recurring systems. Optimization begins with measurement, indexes, cadence, data layout, and bounded work before job systems, exotic allocators, or broad parallelism.

The current settlement can reopen its project cadence after one selected Construction reaches a terminal outcome. It still permits only one selected project at a time and has not proved broad recurring development across many settlements. That expansion requires an explicit degradation strategy and representative multi-settlement workload.

E.13Build, Packaging, and Supported Runtime The reproducible build contract, supported Linux package, immutable payload, dependency boundary, validation path, and rollback checkpoint. Current reference

Systems evidence: systems.module.app, systems.module.assets, systems.module.platform, systems.module.render, systems.module.tests

Implemented through: Phase 0A, Phase 0D, Phase 13, Phase 16

#1Responsibility

CMake owns target composition, dependency acquisition, installation, and package assembly rules. The supported package contains the graphical and headless executables, package-relative launchers, required SDL libraries, immutable runtime content, release metadata, provenance, and license texts.

#2Current Execution

  • The public build contract is CMake presets with CMake 3.28+, C++20, and Ninja as the preferred backend.
  • Dependencies are pinned through the project build rather than assumed from system SDL development packages.
  • Installation places internal executables and shared libraries behind launchers that resolve the package root.
  • Installation creates a user-visible plugins/ directory at that package root. Package lookup is rooted there rather than beside the internal libexec binary or at a machine-wide filesystem path.
  • The plugin root contains the first-party standard interface plus development packages.

Exact manifests declare API ranges, lifecycle callbacks, dependencies, UI providers, contributions, settings schemas, assets, and localization.

  • Debug executables permit development-origin packages. Release executables filter every

development-origin manifest before composition or Lua creation, so a package cannot obtain restricted command authority merely by declaring itself as a development addon in a shipped release.

  • Release automation configures, builds, installs into a clean staging root, validates both the

engine scenario and starter-settlement scenario outside the repository, starts the graphical package through dummy platform drivers, verifies dynamic-library resolution, and hashes every payload.

  • The runtime catalog is a required manifest asset. Installed headless validation uses the same

AssetService loader, immutable catalog parser, and cross-reference checks as normal session composition; a missing or invalid catalog prevents startup.

  • The archive is extracted and retested. Two normalized assemblies must produce the same archive hash.

#3Ownership and Invariants

  • Packaging assembles and verifies existing owners; it does not implement a second loader, save path, content validator, or runtime.
  • Runtime files use package-relative lookup and immutable manifests.
  • The runtime-local plugin directory is a declared extension root, not a second asset loader. Package manifests and declared files must pass the Phase 14E scripting host's identity, API-range, dependency, path, size, settings, and lifecycle validation before use.
  • Dependency license and asset provenance records travel with the supported artifact.
  • A release revision, payload manifest, archive hash, and rollback tag identify the same tested source.
  • Unsupported platforms and distribution channels are not implied by a successful Linux package.

#4Persistence and Recovery

The packaged runtime uses the same save, migration, backup, and recovery owners as development builds. Launchers do not rewrite user state or hide contained runtime failures.

The rollback checkpoint is the annotated worldforge-phase13-v0.1.0 tag. It identifies revision 8402b2477d87c2f5997b5142d2693914f7741a55 and the matching reproducible artifact.

#5Inspection and Proof

The Phase 16 checkpoint package contains 345 payload files. Two normalized assemblies produced SHA-256 514d94280ae4cace913057b41769569209d36101d752b5bc70fd6952a14296ff from revision 0c1b00b7439a116067180163806bb365ab09373d.

Clean development, headless, sanitizer, and Release configurations passed 775, 759, 775, and 776 checks. The extracted graphical package loaded the starter settlement with normal terrain, ten villagers, established buildings, resource props, and interface, then continued beyond tick 4,600 without a runtime error. Selecting a longhouse reported its readable purpose, condition, quality, and operational state. Package verification explicitly rejects a missing settlement definition.

#6Current Limits and Extension Points

The supported artifact is Linux x86-64. Installers, signing, automatic updating, telemetry, storefront integration, and additional operating systems are outside the current contract.

New platform or distribution support must prove dependency resolution, content and plugin-root lookup, controls, save location, recovery, accessibility, performance, licenses, payload integrity, extracted operation, reproducibility, and a rollback revision before it is listed as supported.

Phase 14E through Phase 14K make the runtime-local directory an executable package and UI composition source through the sandboxed host. It installs only declared JSON, Lua, Markdown, and package asset files. Lua cannot enumerate or read the directory; App validates and loads package entry bytes before execution. F10 reloads that complete graph transactionally and retains the last valid packaged interface on candidate failure. Repeated runtime faults isolate the offending package, and compiled Safe Mode and standard-restoration controls remain available outside Lua. The package installs the runtime registry exporter, normalized registry, complete external API Reference, machine and search indexes, guides, and hashed manifest. Package validation runs the installed exporter, byte-compares its output with the installed registry, checks exact symbol coverage, and verifies every installed reference file hash.

The first-party standard interface registers its command-completion listener through the same documented event API as development packages. Event subscriptions remain inside each disposable Lua generation and require no package-local files, native modules, or persisted callback objects.

Packaged content must include the catalog and every scenario reference must resolve against it. Packaging does not maintain a second catalog, migration, or validation path.

The development build includes a movable Tuning Bench package. It queries detached tuning definitions and submits revision-checked restricted preset requests for simulation time scale and presentation frame target. It also exposes physical embodied-movement presets, allowing a development session to slow movement for inspection or accelerate a bounded population test without recompilation. Construction presets change the global base work-unit throughput; the assigned Actor's capability still determines the effective rate and the next fixed construction update consumes the committed value. Capacity rows show current population, Resource, and inventory storage use against the scenario limits. Headroom actions submit revision-checked policy changes and surface stale, invalid, or below-use rejection without changing current owner state. Release package policy omits that development package and every other development-origin package from the active graph.

E.14Engine Extension Contract The required documentation, ownership, persistence, determinism, inspection, performance, and proof work when Game Development changes the engine. Current reference

Systems evidence: systems.module.app, systems.module.sim, systems.module.game, systems.module.render, systems.module.tools, systems.module.tests

Implemented through: Phase 0E, Phase 6, Phase 13, Phase 17

#1Responsibility

Game Development owns future sequencing. The Engine Reference owns the description of implemented engine truth. Systems owns the exact code inventory. A Game Development slice that changes an engine contract must update all three views through their canonical sources.

#2Current Execution

An engine-facing slice begins from the relevant Engine chapter, Systems owner and contract nodes, current source, tests, and active Game Development gate. It names the existing owner to extend or justifies one new narrow owner before implementation.

At completion, the slice updates the current Engine chapter, Systems evidence, a dated Patch Notes entry, persistence and replay behavior, inspection, tests, budgets, and the historical slice record. The page describes the new truth only after the implementation and proof pass.

Phase 17A applied this contract by extending the existing World calendar and Actor schedule owners, advancing the Actor schema, adding detached runtime API symbols, measuring the representative population, and proving the player-facing result before the slice boundary was recorded.

The Phase 17A world-indicator addendum applies the same contract to presentation. Resource, Supply, Work, and World remain authoritative. App creates a bounded detached frame view, ScriptPackageHost owns visibility and package authority, and Render draws that view without a saved marker owner. Runtime API 1.7 documents the channel controls from the registry used by the host. The corrected composition begins from bounded authored physical source anchors, so absence of a current Supply chain cannot erase a source from the view. Selection and contextual ground markers enter the existing scene-depth order instead of becoming a post-scene overlay.

Phase 17B extends existing owners rather than adding a health manager. Actor retains condition and the caregiver plan, Work retains care execution, Resource retains the field dressing, Household retains typed care history, World retains location and time, and App stages one bounded atomic transaction. Runtime API 1.8 exposes only detached health and care facts.

#3Ownership and Invariants

  • One durable fact has one authoritative representation.
  • Commands request behavior; owners mutate; events report facts.
  • Stable IDs or validated handles cross pools, saves, Jobs, routes, and events.
  • Rendering, UI, tools, caches, and summaries do not gain game-state authority.
  • Optional modules declare required, optional-with-null-fallback, or disabled behavior.
  • No temporary bridge, compatibility shim, or parallel owner may remain when the slice closes.
  • A package manifest may describe requested origin, but executable-owned load policy decides

whether development packages may enter the graph. Restricted authority is never inferred from a panel, callback name, or user-authored value.

  • Script queries expose detached money balances, normal commands request owner-routed transfers,

and events report post-commit facts. A package cannot edit custody containers or manufacture money by composing a panel or callback.

  • World-indicator controls change host-owned visibility only. Indicator composition reads bounded

committed owner facts, and neither Lua nor Render may create resources, change Work or Supply state, move an entity, or retain a second gameplay fact.

#4Persistence and Recovery

Any new durable field requires an owner state update, schema version decision, migration behavior, detached validation, cross-reference validation, replay hashing, save-size review, failure diagnostics, and backup-recovery proof where relevant.

Derived caches must name their authoritative source, invalidation rule, rebuild path, and lack of independent save authority.

#5Inspection and Proof

The minimum engine-facing proof is formatting, focused lint, build, targeted deterministic tests, broader regression tests proportional to risk, headless behavior where applicable, sanitizer behavior where relevant, runtime observation for visible behavior, and one preserved evidence artifact.

The final review checks dependency direction, ownership, duplicate state, stable references, failure containment, persistence, replay, inspection, bounded work, public documentation, and generated-output drift.

#6Current Limits and Extension Points

This contract does not authorize a future capability before its Game Development phase. It only defines how an approved capability integrates without weakening the engine.

If a requested feature cannot fit the current owner without an oversized change, reduce the slice or revise the Game Development gate. Do not solve the mismatch by hiding a second architecture behind adapters.

E.15Known Engine Limitations Confirmed present boundaries and their owned return gates, without treating proposals as implemented behavior. Current reference

Systems evidence: systems.module.app, systems.module.sim, systems.module.game, systems.module.render, systems.module.tools

Implemented through: Phase 13, Phase 16

#1Responsibility

This chapter records only verified current engine boundaries. It does not own future scope. Game Development owns each return gate and may revise its plan before implementation.

#2Current Execution

  • Abstract route travel, bounded multi-chunk embodied navigation, and one complete data-authored

3 by 3 regional scenario are implemented. The renderer draws resident camera-visible terrain, and World schedules bounded residency from camera, selected-Actor, and retained-travel interest.

  • The standard interface separates observation from explicit Take Control and Release Control.

Regional traversal, save, replay, concurrent movement, failure, Release budgets, and live 1600-by-900 presentation are proven through Phase 15.

  • The ordinary player interface is Lua-scripted, replaceable, and transactionally reloadable.

Compiled diagnostics, Safe Mode, and standard restoration remain intentionally native. The external API Reference is generated from the complete packaged runtime registry. Addons can actively receive registered post-commit events. Debug builds can load development packages and expose restricted controls; Release builds omit those packages from the active graph.

  • App owns a versioned runtime tuning registry with live global simulation pace, presentation

frame target, embodied movement base rate, and construction base throughput. The Tuning Bench exposes validated movement and construction presets. Actor capability plus an optional transport modifier shape movement; Actor construction capability shapes building work.

  • App separately owns versioned scenario capacity policy for live population, total Resource units,

one inventory container, and aggregate inventory storage. Actor and Resource enforce those limits, and the development Tuning Bench exposes detached use plus restricted headroom actions.

  • Assets owns one required immutable catalog for resources, source types, professions, job

archetypes, recipes, and buildings. Stable definitions and cross-references are implemented. Live catalog editing, arbitrary content behavior, broad settlement content, spawning, and world generation are not yet implemented and must not be presented as live controls.

  • Physical rate accumulation owns local, multi-chunk embodied, and compressed inter-Site route

movement. Route distance, Actor and transport capability, infrastructure modifiers, fractional progress, save migration, and replay now use one movement policy. Routes still follow authored topology; this does not imply freeform distant pathfinding through unloaded terrain.

  • Local embodied paths support deterministic diagonal steps and reject blocked-corner cuts. Actors

remain soft obstacles and may briefly overlap. Construction owns exact footprint occupancy; completed building footprints are projected into World as a derived navigation blocker view, while active sites remain reachable to assigned workers. The projection is rebuilt from Construction truth and has no independent save authority.

  • One active settlement can now compare an authored house and compact storehouse from current

housing, stockpile, material, labor, footprint, and reachability facts; retain the complete decision; and designate one normal Construction. A critical builder interruption can release the work, preserve delivered material and progress, search the settlement's eligible workers under a bounded continuation, recover through a replacement, or fail after its grace period and one complete replacement pass. Direct-control pauses remain deferred instead of being treated as worker loss. Settlement retains the terminal outcome and reopens its normal decision cadence. Only one selected project may be active at a time, only two authored alternatives are currently available, and broad recurring development, civic planning, and simultaneous settlement decisions are not implemented.

  • Phase 16 proves one ten-person settlement with food, water, material hauling, construction,

money custody, player direction, autonomous project choice, interruption, possible recovery, save, replay, scale, and packaged live play. It is not final settlement, culture, institution, ecology, narrative, warfare, or art breadth.

  • The representative foundation save is large, and the renderer and local path proof cover a bounded embodied population.
  • The supported packaged platform is Linux x86-64.

#3Ownership and Invariants

Known limitations must not be bypassed in presentation, content, tests, or one-off scenarios. A limitation is removed only when its owning phase changes the real owner path and completes persistence, replay, inspection, budget, and live proof.

The absence of a feature is not permission for a temporary alternate owner. Broader traversal, large-scale recurring autonomous settlement growth, ecology, governance, warfare, and content expansion remain Game Development scope.

#4Persistence and Recovery

Future work must preserve supported schemas or provide owner-aware migrations. A new world, UI, platform, or performance path cannot silently discard saves, replay behavior, stable identities, or backup recovery.

Until a limitation is closed, saves continue to represent only implemented state. Planned data must not be preallocated or serialized speculatively.

#5Inspection and Proof

Each limitation links through the retrieval graph or Game Development index to a planned return gate. Phase 14 established complete runtime registry metadata and reference publication, bounded queries, typed commands and events, sandboxed packages, stable UI composition, backend-neutral widgets, the first-party standard interface, replacement and extension proof, transactional reload, compatible host-state restoration, bounded diagnostics, fault isolation, accessibility, Safe Mode, standard restoration, and packaged closure. Phase 15 completed observation and authority proof plus connected traversal. Phase 16 completed the first inhabited settlement. Phases 17-23 own life continuity, ecology and expeditions, production and trade, governance, narrative and quests, warfare, content, atmosphere, modding, and release expansion.

Regression review should verify that the limitation remains explicit rather than being partially or accidentally implemented through the wrong layer.

#6Current Limits and Extension Points

The list is intentionally shorter than the Future or Deferred indexes it replaced. It records engine boundaries, not every desired game feature.

When a gate closes, remove or narrow the corresponding limitation, update the affected Engine chapters, add a dated engine Patch Notes entry when an engine contract changed, and preserve the completed proof in the historical record.

Game Roadmap Back to tabs

#Worldforge Game Development Guide

The approved implementation guide for turning the completed engine into the full autonomous settlement game.

Current status:Engine Development Phase 0-13 is complete. Game Development Phase 20 is the current active gate.
Roadmap ownership:G.1-G.7 govern post-engine game work. Phase 20 is active; later phases remain closed until their gates open.
Click to expand Game Development NotesGame Development NotesRequired product, slice, content, ownership, scale, player-proof, and roadmap-governance rules.Priority reference
G.1Game Roadmap Authority and Product ContractDefines which documents control game development, what the player experience must become, and which completed engine boundaries cannot be bypassed.Priority reference

Phase: G.1

Depends on: The Current design manual, the indexed Phase 0A-13 engine record, the current Engine Reference, and the Phase 13 release checkpoint.

Global Execution Principles

  • The Phase 0A-13 engine sequence is sealed. Engine Development describes current implemented behavior, and this guide owns gameplay expansion from Phase 14 onward.
  • Every phase is divided into small vertical slices with ownership, persistence, visibility, scale, and live-player proof.
  • The Current manual remains product-design authority. This guide controls implementation order and cannot silently weaken that design.
  • Planned optional, deferred, and formerly Future work remains indexed here until a phase explicitly proves or rejects it.

Required Work

  • Route every approved design promise to one first game proof, one expansion point when needed, one owner, one visible result, and one scale gate.
  • Keep Phase 14-23 order aligned with the development interface, connected space, inhabited settlement proof, life continuity, expedition pressure, economy, governance, personal narrative, warfare, and production breadth.
  • Record any design correction against the completed engine checkpoint without rewriting historical proof.
  • Reject work that is attractive but does not yet have a player action, owned state, consumer, or verification path.
  • Keep RPG quests and authored story breadth behind the systemic settlement, life, expedition, economy, and institution foundations that make their consequences real, but give them a dedicated phase before warfare and final production breadth.

How To Build It

  • Start each task from ACTIVE_SLICE.md and the bounded game-phase context pack.
  • Read the Current nodes directly implemented by the slice, then inspect the completed engine owner contracts they depend on.
  • Reduce a large phase into the smallest vertical slice that changes one owned fact and proves one useful player-visible outcome.
  • Treat design changes as canonical source edits followed by impact review, not conversational assumptions.
  • Preserve stable IDs and correction records when ownership or phase placement changes.

Practical Guidance

  • Prefer one complete autonomous loop over several partially connected content families.
  • Keep a short explicit statement of what the player can newly observe or do after every slice.
  • Use the representative settlement scenario as the behavioral spine and synthetic scale fixtures as supplements.

Must Have

  • One authoritative product design, one game implementation sequence, and one historical engine record.
  • Explicit separation between observation, player commands, direct control, and autonomous simulation.
  • No phase completion based only on domain tests when the intended result is player-visible.

Exit Criteria

  • A contributor can identify the governing design, phase, owner, mutation path, proof, and next gate without reading the complete manual.
  • Every Game Development phase names a distinct player experience and extends rather than replaces completed engine ownership.
G.2Game Slice Workflow and Completion StandardDefines the repeatable cadence for implementing, proving, reviewing, committing, and publishing every gameplay slice.Priority reference

Phase: G.2

Depends on: G.1 fixes roadmap authority and the completed engine provides stable build, test, replay, save, inspection, and packaging paths.

Global Execution Principles

  • One slice owns one coherent vertical result.
  • A slice starts with a bounded contract and ends with evidence, not a claim.
  • Domain behavior, integration, persistence, visibility, scale, and live play are separate proof categories.
  • The visible game report must say whether normal play changed and exactly what the player can observe or do.
  • A failed gate remains active until fixed, deliberately reduced, or explicitly re-scoped.

Required Work

  • Record Slice, Goal, In scope, Out of scope, Done when, Owners, and Proof in ACTIVE_SLICE.md.
  • Run the nearest useful baseline before substantial mutation when practical.
  • Establish or extend authoritative state and stable identity through the existing owner.
  • Prove owner-local rules with focused deterministic tests.
  • Compose one end-to-end path through normal commands, services, scheduling, and events.
  • Add save, load, migration when required, replay or restore-and-reapply proof, and invalid-state rejection at the owning slice.
  • Add player-facing inspection and feedback before calling a visible capability complete.
  • Record eligible population, cadence, work counter, budget, and degradation strategy for recurring work.
  • Run focused checks first, then full development and sanitizer proof in proportion to risk.
  • Observe the live game through the supported runtime path when the slice changes visible behavior.
  • Review the final diff for ownership, dead paths, hardcoded proof data, generated drift, and unrelated changes.
  • Before activating a planned phase, verify its activation contract still names the correct entering proof, first vertical result, non-goals, authoritative owners, persistence boundary, visible result, scale gate, failure proof, and closure criteria. Correct the roadmap before implementation when any of those are missing or depend on later work.
  • Commit and push the verified topic branch before opening the next slice.

Internal Slice Order

  1. A - Contract and baseline: fix scope, owners, inputs, outputs, non-goals, and existing proof.
  2. B - Owner-local state: add the smallest stable data and validated mutation operation.
  3. C - Vertical composition: connect command or autonomous cause through execution to a durable result.
  4. D - Continuity: close interruption, cancellation, failure, save, load, replay, and simulation-tier transitions.
  5. E - Player proof: expose state, reasons, progress, outcomes, and supported controls in the normal interface.
  6. F - Scale and closure: run representative budgets, live verification, audit, documentation, commit, and push.

How To Build It

  • Use typed commands for requested behavior, services and systems for mutation, and events for facts after mutation.
  • Keep proof fixtures explicit and identified as fixtures. Production startup must not depend on fixed Actor IDs, routes, buildings, resources, or scripted decisions.
  • Preserve seeds, state hashes, transcripts, saves, and failure reasons that make a regression reproducible.
  • If live behavior disagrees with automated proof, the live gate remains open.

Practical Guidance

  • Add a focused scenario for each new causal loop and keep one integrated settlement scenario that composes them.
  • Prefer readable deterministic fixtures before randomized breadth.
  • Record the first divergence rather than logging every state when replay fails.

Must Have

  • A concrete mutation path and a concrete player-visible or headless acceptance result.
  • Explicit failure and recovery behavior.
  • Generated documentation and retrieval products synchronized with canonical sources.

Exit Criteria

  • Every completed slice can be reproduced from its committed revision using established commands.
  • The after-action record identifies change, ownership, proof, observed result, limitation, and next gate.
G.3Content Families and Scalable ExpansionDefines how resources, buildings, recipes, cultures, incidents, and settlement alternatives grow through validated data instead of executable special cases.Priority reference

Phase: G.3

Depends on: G.1 preserves the product contract and the Phase 13 content pipeline validates immutable definitions and owner references.

Global Execution Principles

  • New content normally extends a validated catalog and a narrow resolver registry.
  • Content definitions describe facts, relationships, costs, capabilities, and policies. They do not own mutable runtime state.
  • A resource, building, job, recipe, incident, or institution family earns code only when its rules differ in behavior rather than name or presentation.
  • The first member of a family proves the contract; later members prove breadth without duplicating owners.
  • Content breadth is valuable only when it creates distinct decisions, consequences, geography, labor, risk, or identity.

Required Work

  • Give every definition a stable ID, schema version, validation, provenance, and referenced-owner contract.
  • Model resource family, form, properties, quality, storage, decay, substitution, source policy, and conversion through reusable fields.
  • Model buildings through footprint, stages, materials, labor, capability, capacity, operating inputs, outputs, jobs, maintenance, ownership, access, risks, upgrades, and repurposing.
  • Model autonomous project alternatives through data-defined needs, hard gates, sponsors, costs, effects, and bounded scoring inputs.
  • Keep cultures, biomes, technologies, and settlement identities as content and policy variation over shared owners.
  • Reject unresolved references, duplicate IDs, impossible conversions, conservation violations, invalid footprints, circular prerequisites, and incompatible capability declarations transactionally.
  • Define compatibility and migration rules before shipped content changes an existing schema.

How To Build It

  • Start with one family and two behaviorally distinct definitions before authoring broad lists.
  • Put shared physical properties in material definitions and situational rules in the owning domain system.
  • Use property and substitution tags where exact identity is not required; retain provenance when later content may care.
  • Keep display metadata detached from simulation data and allow procedural fallback where presentation assets are optional.
  • Measure repeated authoring work before building editors or generators.

Practical Guidance

  • Use tables or generated catalogs to audit resource and building coverage, but keep canonical definitions human-readable.
  • Add fixture content that deliberately differs in route, storage, labor, maintenance, and failure behavior.
  • Track unused fields and delete speculative schema before it becomes compatibility burden.

Must Have

  • Adding ordinary content does not require changing App composition or creating another mutation owner.
  • Content validation works in headless and packaged builds.
  • Save data references stable content identity and reports missing or incompatible definitions directly.

Exit Criteria

  • Each expanded family proves at least two distinct player decisions through the same runtime owner.
  • Representative content breadth remains validated, saved, replayed, inspectable, and within budget.
G.4Gameplay Ownership, Commands, and PersistenceDefines how new gameplay mutates existing state, preserves identity and conservation, and survives interruption, save, replay, and simulation-tier changes.Priority reference

Phase: G.4

Depends on: The completed Engine Development ownership boundaries, deterministic scheduler, ECS contracts, command paths, and persistence framework.

Global Execution Principles

  • Every durable fact has one authoritative owner.
  • Commands request behavior, systems and services own behavior, and events report facts after mutation.
  • Rendering and UI read detached facts and never repair gameplay.
  • Save and load restore existing owner state and do not become a second way to author it.
  • Physical resources and money remain conserved through explicit ownership, custody, reservation, and transfer.
  • Stable IDs or validated handles cross pools, saves, routes, jobs, projects, accounts, and institutions.

Required Work

  • Name the owner of every new component, registry, ledger, catalog, cache, and derived view.
  • Define creation, validation, legal transitions, cancellation, terminal states, cleanup, and idempotency before broad integration.
  • Keep selection, assignment, direct control, settlement policy, project sponsorship, and institutional authority distinct.
  • Preserve Actor identity, household membership, property, money, claims, work, routes, projects, relationships, memory, and condition across promotion and demotion.
  • Version schema changes and provide migration or explicit incompatibility handling at the slice that introduces them.
  • Prove deterministic command transcripts for player actions and restore-and-reapply results for autonomous choices that depend on saved context.
  • Reconcile reservations, claims, queues, cargo, accounts, and project state exactly once after cancellation, death, departure, destruction, or owner failure.

How To Build It

  • Prefer plain components, focused registries, explicit system passes, and narrow APIs.
  • Derive summaries and forecasts from owned facts and state their invalidation rules.
  • Use exact integer value units for money and deterministic ordering for competing claims or proposals.
  • Keep optional modules behind required, optional-with-null-fallback, or optional-disabled policy.
  • Reject partial mutation transactionally when cross-owner validation fails.

Practical Guidance

  • Add invariants that count total resource and monetary value before and after transfers.
  • Test death, load, cancellation, and failed activation because they expose ownership errors earlier than happy paths.
  • Keep owner diagrams and Systems notes synchronized when a new registry or service becomes real.

Must Have

  • No raw ownership pointers across durable boundaries.
  • No hidden core control flow in event chains.
  • No gameplay state stored only in Lua, ImGui, Render, debug tools, or generated summaries.

Exit Criteria

  • Every new game fact has one mutation path, one save path, one cleanup path, and one inspection path.
  • Failed or interrupted operations leave owner invariants and deterministic continuation intact.
G.5Selective Fidelity, Determinism, and ScaleDefines how rich visible settlements coexist with a persistent world of many cold Actors, settlements, routes, institutions, and conflicts.Priority reference

Phase: G.5

Depends on: The Phase 1 heat model, Phase 6 integrated benchmark, Phase 10 demographic proof, and Phase 13 release budgets.

Global Execution Principles

  • Rich simulation comes from causal structure and selective fidelity, not per-frame global polling.
  • Focus, warmth, embodiment, and presentation are independent dimensions.
  • Cold simulation compresses motion and repeated detail while preserving identity, ownership, commitments, milestones, and consequences.
  • Determinism cannot depend on render delta, wall time, pointer values, unstable iteration, locale, or unrelated random draws.
  • Optimize measured bottlenecks after owner and data-flow correctness.

Required Work

  • State eligible population, cadence, work counter, budget, and degradation strategy for each recurring system.
  • Use spatial, household, building, settlement, route, institution, and faction scopes before scoring or planning.
  • Schedule stable summaries and milestone updates more coarsely than embodied actions.
  • Keep proposal generation, social propagation, economy summaries, ecology, weather, and diplomacy bounded by changed facts or explicit cadence.
  • Preserve significant death, birth, migration, ownership, project, institution, route, and conflict transitions at every heat tier.
  • Prove promotion and demotion without duplicated Actors, resources, jobs, accounts, projects, or events.
  • Maintain a representative 20,000-person world proof and add dense visible-settlement budgets as gameplay breadth grows.
  • Separate simulation, render composition, scene construction, UI scripting, save, load, replay, and memory measurements.

How To Build It

  • Prefer indexed queries, dirty sets, scheduled queues, bounded candidate sets, and ordered reductions.
  • Keep hot ECS components small and verbose explanation data in cold storage or derived traces.
  • Use dedicated deterministic random streams for domain decisions and record meaningful draws.
  • Let distant settlements advance capability summaries, obligations, balances, and milestones without simulating every footstep or coin.
  • Promote only the participants and nearby facts required by a visible episode.

Practical Guidance

  • Add worst-case fixtures for dense work markets, many stalled projects, route disruption, migration, and institutional failure.
  • Record both total work and deferred work so degraded fidelity remains observable.
  • Profile long sessions and save growth, not only short tick loops.

Must Have

  • Representative budgets fail loudly when exceeded.
  • Distant outcomes remain causally compatible with what would happen when promoted.
  • Scale optimizations never create independent authority.

Exit Criteria

  • The active settlement remains responsive and readable while distant populations, settlements, ecology, trade, institutions, and conflicts continue within recorded budgets.
  • Save, load, replay, and promotion preserve the same authoritative outcome at every supported scale tier.
G.6Player Readability, Balance, and Live ProofDefines how autonomous causes, choices, failures, and player authority become understandable and testable through the normal game interface.Priority reference

Phase: G.6

Depends on: The Phase 6 player lenses, Phase 13 production UX, the Current UI contract, and the Phase 14 scriptable development interface and command plan.

Global Execution Principles

  • The player should see proof of life without opening developer tools.
  • Selection is observation and cannot pressure the selected person.
  • Important outcomes need causal explanations, not only color, animation, logs, or aggregate counters.
  • Balance must preserve viable autonomy, meaningful player influence, distinct settlement choices, and real failure risk.
  • Live supported-runtime observation closes visible gates.

Required Work

  • Show who is acting, what they intend, what they need, what they own, where they are going, and why their plan changed.
  • Show material existence, location, reservation, movement, storage, processing, commitment, consumption, and loss.
  • Show project origin, sponsors, alternatives, score reasons, funding, land, materials, labor, maintenance, completion, abandonment, and effects.
  • Show household, business, institution, treasury, and bank custody without exposing hidden omniscient truth.
  • Show settlement capability, bottlenecks, risks, decline, and recovery as derived explanations rather than arbitrary tier progress.
  • Give every order, take-control request, policy, funding action, and project decision accepted, executing, blocked, interrupted, completed, cancelled, or rejected feedback.
  • Support keyboard, mouse, remapping, interface scaling, labels beyond color, reduced motion, scrolling, and recovery UI as relevant to each slice.
  • Compare autonomous behavior with and without player intervention using the same world state and owners.
  • Run live failure cases, not only successful demonstrations.

How To Build It

  • Compose detached snapshots from owner facts and keep presentation state disposable.
  • Use the compiled recovery interface when Lua presentation fails.
  • Keep uncertainty explicit: world truth, observed facts, reports, forecasts, beliefs, and legal findings are separate.
  • Tune with recorded scenarios and decision traces before changing core scoring or pressure curves.
  • Record visible-game changes in every after-action report.

Practical Guidance

  • Let the player follow one villager through a complete workday and one project through its complete lifecycle.
  • Include a settlement that fails in a known way as a recurring regression fixture.
  • Prefer concise reason summaries with drill-down details over permanently open diagnostic walls.

Must Have

  • Normal play exposes the minimum facts required to understand autonomy and intervene deliberately.
  • Observation never mutates the observed subject.
  • Accessibility and fallback behavior remain available in packaged builds.

Exit Criteria

  • A player can explain why a villager, household, project, settlement, or institution succeeded or failed without reading developer logs.
  • The live game proves both autonomous continuation and explicit player authority through supported controls.
G.7Coverage, Deferred Work, and Release GovernanceDefines how the game roadmap absorbs Future topics, tracks deferred scope, seals completed work, and expands release breadth without losing design coverage.Priority reference

Phase: G.7

Depends on: G.1-G.6 establish authority, workflow, content, ownership, scale, and player proof.

Global Execution Principles

  • Every approved game promise has a phase destination or an explicit evidence-gated unassigned record.
  • Deferred does not mean forgotten. Each assigned record names a return phase and activation condition.
  • The Phase 0A-13 implementation record remains sealed. Engine Development changes only to describe proved current behavior after a factual correction, security fix, build repair, or game slice changes an engine contract.
  • A correction to completed engine behavior records the old proof, reason, affected game phases, migration need, and replacement proof.
  • New content and platform breadth cannot weaken save compatibility, deterministic continuation, accessibility, ownership, or supported release proof.

Required Work

  • Render Phase 14-23, routed design coverage, optional work, and deferred work in Game Development.
  • Keep planned and deferred scope out of Engine Development so its guide remains a current implemented-engine reference.
  • Route scripting, UI composition, and the API Reference to Phase 14; connected traversal to Phase 15; settlement proof to Phase 16; health and time to Phase 17; weather, ecology, and expeditions to Phase 18; construction and progression to Phases 16 and 19; governance to Phase 20; narrative, quests, and dialogue to Phase 21; warfare to Phase 22; and production audio, content authoring, modding, and release expansion to Phase 23.
  • Keep the Current-to-roadmap traceability below synchronized whenever a Current design node or phase destination changes.
  • Keep unassigned technology choices closed until a measured game requirement justifies them.
  • Review the design-to-development coverage matrix at every phase close.
  • Run a complete cross-phase ownership, persistence, scale, UI, content, and scope audit before activating the next phase.
  • Preserve a pushed rollback checkpoint for each completed game phase.

How To Build It

  • Promote a deferred record only through a named slice with dependencies, owner, proof, and non-goals.
  • Move a record rather than copying it when its implementation phase changes; keep stable IDs and backlinks.
  • Remove obsolete ideas only with a recorded reason and impact review.
  • Merge verified game slices through the established topic, develop, and main workflow.
  • Publish and hash-verify the manual when roadmap or public progress changes.

Expansion Contract

  • current.foundation: Phase 16 first proves an inhabited autonomous settlement; Phases 18 and 21 prove player-led field and story episodes; Phases 19-22 expand settlement, polity, and world consequence; Phase 23 closes production breadth.
  • current.rts-interaction and current.direct-control: Phase 14 exposes typed interface actions and feedback; Phase 15 separates observation from control in normal play and broadens movement; Phases 16, 18, 21, and 22 expand work, expedition, story, and warfare orders.
  • current.world-structure and current.simulation-architecture: Phase 15 proves connected chunk traversal; Phases 18-22 expand regional ecology, settlements, institutions, narrative opportunities, and conflict under selective fidelity; Phase 23 closes world-scale budgets.
  • current.autonomous-simulation and current.personhood-life: Phase 16 proves visible autonomous life; Phase 17 deepens daily, health, household, and generational continuity; Phases 18-22 apply the same people to field, economy, civic, story, and conflict outcomes.
  • current.narrative-ux and current.encounters-memory-reputation: Phase 18 proves expedition incidents and return; Phase 20 proves civic and diplomatic consequence; Phase 21 owns systemic events, dialogue, quests, personal adventure, authored arcs, and durable aftermath; Phase 22 applies consequence under war.
  • current.ui-observability: Phase 14 owns the scriptable standard interface and API Reference; every later phase must add its player-facing facts, reasons, actions, failure, and accessibility through that contract.
  • current.danger-infrastructure-session: Phase 15 expands travel infrastructure; Phases 18-22 deepen environmental, economic, civic, narrative, and military danger; existing App session ownership remains authoritative throughout.
  • current.settlement-work, current.resources-economy, and current.settlement-development: Phase 16 proves the starter settlement; Phase 17 adds household continuity; Phase 18 adds environmental limits; Phase 19 owns production, trade, progression, specialization, decline, and recovery; Phase 20 adds public and trusted finance; Phase 22 applies wartime loss.
  • current.technical-production and current.scope-delivery: every phase follows the activation and slice proof contract; Phase 23 owns only measured production tooling, governed end-user extension, final breadth, atmosphere, balance, platforms, and release closure.

Practical Guidance

  • Keep a compact phase-close coverage report beside detailed proof.
  • Compare player-visible capability against Current before expanding content breadth.
  • Revisit the unassigned backlog only when a real blocker, measured bottleneck, or approved platform target activates it.

Must Have

  • No orphaned game promise and no planned work hidden in the current Engine Development reference or indexed engine history.
  • No Future topic duplicated as a competing roadmap authority.
  • No phase activation through generated output or informal status text alone.

Exit Criteria

  • Game Development is the complete implementation authority for post-Phase-13 gameplay.
  • Engine Development remains stable and readable as the current implemented foundation.
  • Every remaining planned or deferred item is visible, routed, and governed.
PHASE 14Scriptable Development Interface, Commands, and API ReferenceAdd a versioned Lua development platform that can inspect and command the engine, reproduce or replace the standard interface through stable composition contracts, reload safely, and publish a separate wiki-style reference for every exposed API.Complete

Phase: Phase 14

Gate status: Complete

Depends on: The Phase 13 release checkpoint remains reproducible; existing App, Tools, Controls, and domain snapshots remain the only path from simulation truth to player presentation.

Activation Contract

  • Enters with: a reproducible Phase 13 build, detached owner-built snapshots, typed gameplay requests, backend-neutral Controls, and a compiled interface that remains the recovery baseline.
  • First vertical proof: one registered query, one typed normal command, one typed restricted development command, one event, and one small standard Lua surface work through the same registry and survive a failed reload.
  • Does not open: gameplay rules in Lua, raw ECS or backend access, arbitrary filesystem or network access, native binary plugins, end-user addon permissions, or a speculative widget set beyond the standard interface.
  • Closes with: the normal interface, package lifecycle, composition, reload, recovery, budgets, accessibility, and external API Reference proven from the packaged runtime registry.

Required Work

  • Embed a pinned Lua runtime behind an App-composed scripting service with explicit startup, candidate validation, activation, suspension, reload, failure, memory, and shutdown behavior. Lua may request behavior and compose presentation but never owns simulation state.
  • Register every exposed namespace, type, field, enumeration, query, event, widget, UI surface, extension slot, theme token, logical action, function, command, receipt, and error through one versioned runtime API registry. Descriptors include a stable symbol ID, signature or schema, units, owner, authority, timing, availability, errors, introduction version, deprecation state, replacement, and source location.
  • Define detached query APIs for selected target identity, target information, resources, jobs, buildings, orders, needs, build progress, household wealth, money custody, settlement capability, project proposals, shortages, failure pressure, and developer diagnostics without exposing ECS registries, C++ pointers, mutable domain objects, SDL objects, ImGui objects, or renderer handles.
  • Provide stable script-facing namespaces such as world.actor, world.settlement, world.resource, world.selection, events, ui, command, and restricted, with documented missing-value, iteration-order, units, lifetime, compatibility, cadence, cost, and error rules.
  • Route script-requested mutations through typed command descriptors and the existing authoritative domain owners. A script never receives a general setter, raw component write, registry access, owner bypass, or second mutation path.
  • Enable restricted.command globally for development addon packages during this phase. Restricted calls still use schema validation, owner validation, fixed-tick application, result reporting, replay rules, submission budgets, and diagnostics; development access does not grant raw state access.
  • Keep the development privilege explicit in build, package, and runtime diagnostics. A later end-user addon policy may narrow restricted command authority, but Phase 14 does not pre-build that permission system or pretend development packages are untrusted player addons.
  • Do not implement dynamic taint propagation, secret values, or opaque display wrappers. Exposed development data uses ordinary typed values. Information unavailable to a future package is omitted or scoped at the query boundary rather than passed through an unreadable wrapper.
  • Divide interface authority into three layers: a compiled recovery shell, the first-party standard Worldforge Lua interface package, and development addon packages. The layers share the public UI and command APIs where applicable but do not share mutable implementation objects.
  • Keep the compiled recovery shell non-replaceable and independent of Lua. It owns startup failure, scripting diagnostics, package enable and disable, safe mode, restore-standard-interface, reload control, essential settings, and clean exit.
  • Implement the normal Worldforge interface as a first-party Lua package using the same documented UI composition, query, event, input, and command APIs offered to development packages. The standard package may have first-party defaults but no private path to simulation truth.
  • Require the standard package to cover the ordinary player interface, target and settlement inspection, status and alerts, command controls, menus, tooltips, layout, and styling. Low-level crash and scripting recovery remains compiled; native renderer and engine diagnostics may remain compiled only when the public API cannot safely represent them and the limitation is documented.
  • Add a UI composition registry with stable IDs and typed contracts for screens, dock regions, panels, toolbars, menus, menu groups, context actions, tooltips, row renderers, overlays, notifications, settings pages, hotkey actions, themes, and layout profiles.
  • Support explicit contribution operations such as provide, extend, replace, decorate, and hide. Packages declare intent against a stable surface or slot ID; they cannot replace Lua globals, engine functions, domain owners, or arbitrary callbacks.
  • Give each surface and slot a versioned context schema, allowed contribution kinds, cardinality, lifecycle, accessibility obligations, input behavior, and fallback. A replacement validates against the same contract as the standard implementation before activation.
  • Resolve extension order from validated dependency order and stable package ID. Do not use uncontrolled numeric-priority contests. If multiple packages replace a single-owner surface without an explicit selected winner, reject the candidate composition, report the exact conflict, and keep the last valid interface.
  • Permit a user or developer profile to select the active replacement for a replaceable surface and to restore the standard provider. Packages cannot hide or replace the recovery shell.
  • Expose typed theme tokens, typography roles, spacing, colors, borders, icon roles, animation and reduced-motion behavior, density, scaling, and layout primitives rather than the raw ImGui style stack. Validate token type, contrast metadata, fallback, and inheritance cycles.
  • Expose scale-aware layout primitives for docking, anchoring, minimum and maximum sizes, scrolling, safe areas, and responsive density. Avoid treating physical pixels or the current backend window arrangement as persistent truth.
  • Provide a narrow backend-neutral widget surface for text, images, buttons, toggles, lists, tables, trees, tabs, progress, tooltips, menus, forms, selection, focus, navigation, and command feedback. Do not expose the complete ImGui API or build a speculative general UI framework beyond widgets required by the standard interface.
  • Require semantic labels, roles, states, focus order, keyboard access, non-color cues, text scaling, reduced motion, and screen-reader-ready metadata in the widget and surface contracts. Accessibility metadata must survive replacement and theme changes.
  • Route package assets through declared, validated asset manifests and immutable asset handles. Lua receives no arbitrary file access and cannot create backend textures, fonts, or renderer resources directly.
  • Register hotkeys and interface actions through backend-neutral Controls action IDs with collision diagnostics, rebinding metadata, context, and ownership. Packages do not consume raw SDL events or assume a keyboard layout.
  • Define package lifecycle callbacks for validation, initialization, composition, event delivery, suspension, reload preparation, state restoration, and shutdown. Callbacks receive bounded contexts and generation-checked handles that expire at the documented boundary.
  • Give every package a stable manifest identity, compatible API range, deterministic dependencies, declared entry point, exported and consumed surfaces, saved-setting schema, assets, localization catalogs, and development-authority declaration.
  • Use <package-root>/plugins as the explicit runtime-local package directory in source and installed builds. It is user-visible, carries the standard package and development addons, and is resolved from the package root rather than the process executable or a machine-wide /plugins path.
  • Store durable interface settings through host-owned versioned package profiles. Do not serialize Lua closures, stacks, arbitrary globals, widget handles, or interface objects into simulation saves.
  • Add a configurable reload hotkey at a safe main-thread boundary. Build a complete candidate runtime and candidate UI composition, validate dependencies, APIs, surface contracts, settings migrations, replacements, hotkeys, and budgets, then swap atomically. Any failure keeps the old runtime and interface alive.
  • Preserve stable selection, focus, window visibility, scroll, and user settings across a compatible reload through explicit host-owned state keys. Do not retain Lua object identity or stale widget references.
  • Report package load state, active providers and decorators, replacement conflicts, reload result, execution time, allocation use, event and command volume, API mismatch, stale handle use, command result, disabled state, and source location in a developer-readable diagnostics surface.
  • Budget instructions, wall time, memory, widget count, table rows, retained host state, event subscriptions, event deliveries, query result volume, command submissions, and diagnostic history per package and per visible surface. Hidden or closed surfaces perform no recurring composition work.
  • Isolate package faults. Repeated budget or runtime failures disable the offending package or contribution, restore the nearest valid standard provider, and leave the recovery shell available.
  • Generate and publish a separate wiki-style API Reference website from the normalized runtime registry plus structured symbol documentation. It is not a tab containing general manual prose.
  • Give the API website stable permalinks and navigation for namespaces, types, fields, enumerations, queries, events, widgets, surfaces, slots, theme tokens, lifecycle callbacks, logical actions, functions, commands, receipts, and errors. Each symbol page documents signature, parameters, returns, units, owner, authority, side effects, timing, determinism, cost, errors, examples, API history, deprecation or replacement, and related symbols.
  • Document complete recipes for adding a panel, extending a toolbar, replacing a standard surface, adding a theme, binding a logical action, preserving reload state, invoking a command, handling a receipt, and recovering from a faulty package.
  • Provide full-text search, namespace and kind filters, ownership and authority filters, backlinks to Engine Reference and Game Development, copyable examples, package and lifecycle guides, and a visible reference-version/build marker.
  • Publish a normalized machine-readable API index beside the website so Codex, editors, validators, and future tooling can perform exact lookup without scraping HTML.
  • Make undocumented exposure and stale documentation build failures. Fail when the runtime exports an undocumented symbol, documentation names a missing symbol, a signature or schema differs, a stable ID is duplicated, a surface lacks fallback and accessibility contracts, or a restricted command lacks its authority and side-effect contract.

Internal Slice Order

  1. Phase 14A — Authority, vocabulary, and registry: define the three interface layers, stable API and UI symbol descriptors, package origins, versioning, schemas, receipts, errors, and deterministic normalized registry export.
  2. Phase 14B — External reference foundation: generate the separate searchable wiki shell, namespace and kind indexes, symbol pages, stable URLs, machine index, source and roadmap backlinks, and drift failures from fixture descriptors.
  3. Phase 14C — Detached queries: expose ordinary typed snapshots with units, cadence, cost, pagination, filtering, lifetime, and missing-value rules; prove they cannot mutate, retain, or wake authoritative state accidentally.
  4. Phase 14D — Commands and post-commit events: adapt existing typed requests into a bounded command queue with owner routing, fixed-tick application, receipts, replay policy, and ordered immutable events after committed mutation.
  5. Phase 14E — Sandboxed runtime and packages: embed the pinned Lua runtime without operating-system libraries or native modules; validate manifests, dependencies, API ranges, assets, localization, settings schemas, lifecycle, and globally enabled development restricted.command.
  6. Phase 14F — UI composition registry: implement stable surfaces and slots, typed contribution contracts, deterministic provider and extension order, explicit replacement selection, fallbacks, and conflict rejection without raw function patching.
  7. Phase 14G — Backend-neutral widgets, themes, layouts, and input: implement the minimum widget family needed by the standard UI, typed theme and responsive layout contracts, semantic accessibility metadata, declared assets, and Controls-owned logical actions; prove the first runnable development addon as a movable resource-count panel backed only by the detached resource query.
  8. Phase 14H — First-party standard interface: reproduce the normal Worldforge interface as the standard Lua package, including target and settlement inspection, alerts, commands, tooltips, menus, layout, styling, and command feedback while retaining only the compiled recovery shell.
  9. Phase 14I — Replacement and extension proof: add a development package that extends one toolbar, decorates one panel, replaces one standard surface, supplies one theme, binds one logical action, invokes normal and restricted commands, and restores the standard provider.
  10. Phase 14J — Transactional reload and host state: build and validate a complete candidate runtime and composition, migrate versioned package settings, retain compatible host-owned UI state, swap atomically, and preserve the last valid interface on every failure.
  11. Phase 14K — Diagnostics, budgets, accessibility, and recovery: prove fault isolation, package disable, conflict reporting, safe mode, standard restoration, keyboard and scale behavior, reduced motion, semantic metadata, hidden-work suppression, stale-handle rejection, and repeated reload stability.
  12. Phase 14L — Reference publication and closure: replace fixture descriptors with the actual registry export; prove complete API and composition documentation, stable links, search and machine index integrity, packaged behavior, deterministic simulation and replay, memory stability, publication hashes, and scope ownership.
  13. Phase 14M — Active event delivery and containment: replace composition-time polling with registered generation-scoped addon callbacks over typed post-commit events; prove deterministic delivery, lifecycle cleanup, command deferral, hostile-addon containment, recovery, complete reference publication, and no regression to simulation authority.

Population and Scale Goals

  • Keep Lua queries detached, paginated, filtered, and budgeted so a panel cannot accidentally copy the complete world or wake cold Actors. Development commands may request owner behavior but do not bypass work budgets.
  • Measure script CPU time, allocation, query volume, event volume, command volume, widget count, composition time, reload time, retained host state, and failure count separately from simulation and rendering.
  • Prove that hidden surfaces, inactive replacements, and disabled packages do no recurring work.
  • Prove the standard interface plus representative extensions against a dense visible settlement within explicit frame, allocation, memory, and input-latency budgets.
  • Keep package lookup, surface resolution, provider selection, and extension order indexed by stable IDs. UI cost may scale with visible information but not total world population or total installed package count when packages are inactive.

How To Build It

  • Convert owner-built detached snapshots into fresh Lua values or generation-checked handles. Never bind direct references to ECS components, registries, containers, SDL objects, or ImGui internals.
  • Keep immediate-mode drawing calls behind a narrow Worldforge UI context that records semantic widget intent and delegates to the active backend. Do not expose the complete backend binding or build a second simulation-facing UI owner.
  • Model standard surfaces and extension points as registered contracts, not mutable Lua globals. A package contributes a provider or callback through its manifest and receives only the typed context declared by that surface.
  • Use explicit composition verbs. provide supplies a new named surface, extend adds ordered content to a declared slot, replace supplies a contract-compatible provider, decorate wraps presentation before or after a named provider without changing its result contract, and hide changes presentation visibility only where the surface permits it.
  • Keep package lookup roots explicit and ordered. The runtime-local plugins directory is the Phase 14 development root; package identity comes from validated manifests, never directory traversal order. A later distribution may add a separate per-user root only through the same declared search-root contract.
  • Treat replacement as provider selection, not mutation. The registry retains the standard provider, validates candidate alternatives, selects exactly one active provider, and can restore the standard implementation without reconstructing engine state.
  • Do not allow packages to intercept or alter another package's function return, command receipt, event payload, package table, or widget handle. Cross-package communication uses documented events, host-owned shared settings, or explicitly registered APIs.
  • Resolve dependencies before composition. Extension order uses topological package order and stable IDs; replaceable single-provider surfaces require an explicit winner. Cycles, missing dependencies, duplicate surfaces, incompatible schemas, and unresolved replacements reject the candidate.
  • Keep the recovery shell outside the package graph. It can start when every Lua package is invalid and can disable all optional packages, restore the standard package and layout, display exact failures, and exit cleanly.
  • Use the standard package as the acceptance test for API sufficiency. When it needs a missing capability, add the smallest general API or surface contract and document it; do not give the standard package an undocumented privileged binding.
  • Use one native command service for compiled controls, Lua commands, developer tools, and future engine callers. Each call carries an engine-created origin; development packages receive restricted command authority from the host, not from a Lua table they can forge.
  • Let command owners validate and mutate their own state. The scripting service validates the public schema, queues the request, and returns an accepted, rejected, completed, or failed receipt without duplicating domain rules.
  • Deliver events only after committed mutation. Event handlers may submit another typed command, but they cannot write through event payloads or intercept owner control flow.
  • Route logical actions through Controls and provide the executing package with a bounded UI action context. Focus, hover, keyboard capture, and pointer capture remain UI facts; raw SDL events remain inside Platform and the UI backend.
  • Make theme and layout values typed and validated. Resolve inheritance deterministically, reject cycles, preserve accessibility overrides, and keep reduced motion and scaling as host-enforced constraints a theme cannot disable.
  • Treat localization as package data with stable keys and fallback catalogs. The standard interface and reference examples must not depend on source-language strings as stable IDs.
  • Export the actual registered runtime surface as deterministic normalized data. Combine it with required structured explanations and examples keyed by stable symbol ID; do not scrape C++ declarations or maintain an unrelated handwritten function list.
  • Keep long-form reference prose beside the API documentation source rather than inside generated HTML. Runtime export is authoritative for what exists; documentation is authoritative for how to use it; the verifier requires exact one-to-one coverage.
  • Generate the external static reference under a dedicated api/ publication root with a versioned path and a current-version alias. The Forgejo publication proof must verify its revision marker, search index, page inventory, and hashes alongside the manual.
  • Treat script state as disposable interface state. Durable UI settings use a versioned profile owner; simulation saves do not serialize Lua stacks, closures, or package globals.
  • Reload at a defined frame boundary after input collection and before UI composition. Validate the whole candidate graph and compose one non-visible proof frame before replacing the working runtime. A failed candidate must not tear down the active interface.
  • Preserve only explicitly registered host state across reload: stable selection, surface visibility, focus target when still valid, scroll keys, layout profile, theme choice, and versioned package settings. Drop unknown state safely and never preserve raw Lua references.
  • Budget script instructions, wall time, memory, surfaces, widgets, table rows, event subscriptions, query results, command submissions, host state, and retained diagnostics. Disable only the offending package or contribution after repeated violations, then select the nearest valid fallback.
  • Test semantic composition separately from pixel output. Use deterministic UI-tree or command-buffer assertions for structure, roles, actions, and ownership; retain a small set of supported-resolution visual checks for clipping, scale, fallback, and style regressions.
  • Preserve keyboard navigation, interface scaling, reduced motion, labels beyond color, focus visibility, and fallback controls in every scripted widget and replacement contract.

Benefits

  • Text, panel layout, styling, tooltips, and progress displays can be iterated without rebuilding or restarting Worldforge.
  • Development packages can inspect and exercise typed engine behavior without wiring a temporary compiled panel or hotkey for every proof.
  • The standard interface can be moved, restyled, extended, or replaced without modifying C++ or granting packages access to engine internals.
  • First-party and development UI use the same documented composition contracts, preventing the addon API from becoming a weaker parallel interface.
  • Packages can grow independently while simulation ownership, command validation, input translation, assets, persistence, and rendering resources remain with their existing owners.
  • Explicit slots and providers allow extensive customization without taint propagation, global monkey-patching, or unexplained cross-package side effects.
  • Atomic reload, deterministic conflicts, standard fallbacks, and a compiled recovery shell make aggressive interface iteration recoverable.
  • The external reference makes the complete callable surface searchable by people and tools and prevents undocumented APIs from becoming permanent.
  • A versioned registry creates a stable foundation for later community interface customization without forcing an end-user permission model into the development phase.

Potential Drawbacks

  • A second language and runtime increase packaging, debugging, documentation, and compatibility work.
  • Poor snapshot or command design can cause per-frame allocation spikes or accidentally turn scripting into a second state owner.
  • Globally enabled restricted development commands make faulty scripts capable of requesting destructive in-world behavior. Typed validation, explicit development labeling, command receipts, and recoverable saves are required even before end-user restrictions exist.
  • Converting the normal interface into a first-party package is broader than adding optional panels and can expose missing widget, layout, input, localization, accessibility, or lifecycle contracts.
  • Stable surface and slot IDs become compatibility promises. Careless naming or overly broad contexts create long-term maintenance cost.
  • Replacement and decoration APIs can produce confusing package conflicts unless provider selection and ordering remain explicit.
  • A backend-neutral widget layer can become an oversized general framework if implementation expands beyond the standard interface and near-term development needs.
  • The external reference adds a generated website, search index, version policy, publication surface, and strict documentation maintenance cost.
  • Unbounded script APIs can make interfaces inconsistent, inaccessible, or dependent on implementation details.

High-Risk Changes

  • Exposing mutable ECS or domain objects to Lua.
  • Replacing the last working UI before a candidate reload validates successfully.
  • Enabling unrestricted Lua libraries, native modules, filesystem access, or network access.
  • Letting script callbacks become hidden gameplay control flow or save authority.
  • Implementing restricted.command as a generic state setter or as a parallel mutation path instead of routing named typed requests to their owners.
  • Giving the first-party standard package private engine bindings that development packages cannot inspect in the API Reference.
  • Treating UI replacement as overwriting Lua globals, engine functions, raw ImGui callbacks, or another package's tables.
  • Allowing multiple replacement providers to resolve through load accident or arbitrary numeric priority.
  • Letting themes disable host accessibility constraints, logical actions bypass Controls, or package assets bypass Assets validation.
  • Persisting Lua objects, closures, widget handles, or package globals across reload or into simulation saves.
  • Making the package graph or standard interface necessary for the recovery shell to load.
  • Shipping a production addon build with development-wide restricted command authority without an explicit later policy decision.
  • Hand-authoring the API website independently of the runtime registry and allowing exposed behavior, signatures, or errors to drift.

Practical Guidance

  • Start with one small standard-package surface, one extension package, one complete replacement package, one theme package, and deliberately faulty dependency, conflict, stale-handle, budget, and syntax fixtures.
  • The API Reference generator began from fixture descriptors before Lua existed. Phase 14L removed that input and made the complete packaged runtime registry the required source for every generated reference page and index.
  • Give every symbol a short runnable example and every restricted command a failed-validation example.
  • Provide a machine-readable normalized API index beside the human website so Codex, editors, and future tooling can perform exact lookup without scraping HTML.
  • Provide an in-game composition inspector that shows each visible surface, active provider, extensions, decorators, owning package, context version, frame cost, and fallback.
  • Include one-click restore-standard-interface and start-with-safe-mode paths in both development and packaged builds.
  • Add a package validation command that can check manifests, API ranges, docs, surfaces, accessibility metadata, assets, localization, and examples without launching the graphical game.
  • Keep reload feedback visible even when the candidate package fails before drawing its first panel.

Must Have

  • Phase 14 closure proof: the runtime exports 112 validated symbols from one App-owned catalog, and all 112 have structured documentation and stable pages. Eleven practical guides, 175 hashed manifest entries, and complete search, namespace, kind, owner, authority, and machine indexes derive from that same export. Package-local panel IDs resolve to package-qualified backend identities, so independent packages may reuse a local ID without sharing retained window state. Repeated composition and reload proof completed 128 compositions and 16 reloads without simulation mutation, contribution duplication, stale state, or unbounded memory growth. Typed post-commit events now use generation-scoped active subscriptions with bounded deterministic delivery, command deferral, overflow evidence, and hostile-Lua isolation. The complete Release suite passed 581 tests, the sanitizer suite passed 580 tests, and two byte-identical release archives verified 234 installed files plus exact runtime-reference agreement.
  • Versioned Lua queries, events, UI functions, typed commands, and globally enabled development restricted commands with no direct simulation write path.
  • Three explicit interface layers: non-replaceable compiled recovery, replaceable first-party standard Lua interface, and development packages.
  • Stable versioned surface and slot contracts with explicit provide, extend, replace, decorate, hide, fallback, provider-selection, and deterministic conflict behavior.
  • The normal Worldforge interface must prove the documented public composition API; no undocumented standard-package path to simulation, input, assets, or renderer state.
  • Backend-neutral widgets, typed themes and layouts, Controls-owned logical actions, Assets-owned resources, localization, semantic accessibility, and host-owned reload state.
  • Atomic full-graph reload, standard restoration, safe mode, fault isolation, package budgets, and a recovery shell that works when Lua does not.
  • A separate wiki-style API Reference website generated from the actual runtime registry and complete structured documentation.
  • Build failures for undocumented runtime symbols, stale documentation, schema drift, duplicate IDs, invalid surface fallbacks, incomplete accessibility metadata, and incomplete restricted-command contracts.
  • Ordinary typed values and explicit package origins only; no dynamic taint, secret-value, or opaque-display-value system.
  • Transactional hot reload that retains the last valid interface on error.
  • A compiled recovery and diagnostics interface that does not depend on Lua.
  • Explicit compatibility, sandbox, accessibility, performance, and packaging contracts.

Scheduled Deferred Work

  • Lua-backed development scripting with detached typed queries, events, UI functions, typed and restricted commands, transactional hot reload, package governance, recovery, and an external API Reference. Tracking record

Exit Criteria

  • A developer can edit Lua to move and restyle the standard interface, add a tooltip and progress display, extend a toolbar, decorate a panel, replace a complete standard surface, add a theme, bind a logical action, and invoke documented normal and restricted commands, then reload without restarting the game.
  • The standard package uses only documented query, event, UI, input, asset, localization, and command APIs for ordinary interface behavior. Any retained compiled panel is identified as recovery or documented low-level diagnostic scope.
  • An extension and a replacement compose in deterministic order. Two unresolved replacements, a dependency cycle, invalid slot schema, hotkey collision, inaccessible replacement, syntax error, missing API, stale handle, or budget violation reject or isolate only the candidate and leave the previous valid interface usable with exact diagnostics.
  • Safe mode starts with all optional packages disabled. Restore-standard-interface reselects the first-party providers and default layout without changing simulation state or requiring a restart.
  • Repeated reloads do not leak memory, duplicate contributions, retain stale target or widget references, lose compatible host-owned settings, bypass authoritative owners, alter deterministic replay, or add Lua data to a simulation save.
  • Hidden surfaces and inactive providers perform no recurring work. The standard package and representative extensions remain within explicit dense-settlement frame, allocation, memory, and input-latency budgets.
  • Keyboard navigation, focus, scaling, text enlargement, reduced motion, non-color cues, semantic labels, and fallback controls remain valid under the standard interface, replacement surface, and alternate theme.
  • Every exported namespace, type, field, enumeration, query, event, widget, surface, slot, theme token, logical action, lifecycle callback, function, command, receipt, and error has a reachable reference page whose signature and schema match the runtime export.
  • Searching the external reference finds symbols by name, namespace, kind, owner, authority, and related concept; stable symbol links survive compatible rebuilds; recipes successfully validate against the packaged development runtime.
  • The packaged development build contains the Lua runtime, first-party standard package, fixture extension and replacement packages, normalized API index, complete external reference, compiled recovery shell, safe mode, and the same reload, conflict, restoration, and recovery behavior as the source build.
PHASE 15Connected World TraversalTurn the bounded presentation area into a small connected world where embodied Actors can cross chunk boundaries without teleporting or losing their orders.Complete

Phase: Phase 15

Gate status: Complete

Depends on: Phase 14 provides the scriptable development interface, typed command surface, standard player interface, and live inspection path; the Phase 13 release checkpoint remains reproducible; Phase 1 and Phase 7 retain world, route, residency, heat, and local-navigation authority.

Activation Contract

  • Enters with: the Phase 14 standard interface and command surface, one authoritative meter/cell/chunk model, existing route travel, same-chunk local navigation, residency, heat, save, and replay owners.
  • First vertical proof: one selected Actor crosses one validated chunk border under one retained movement order while the scriptable interface reports destination, progress, and failure.
  • Does not open: world-sized cell searches, elevation, bridges, multiple floors, procedurally unbounded terrain, broad ecology, settlement breadth, or Render-owned streaming state.
  • Closes with: a validated 3 by 3 connected region, hierarchical traversal, resident-chunk terrain, continuity through interruption and save, bounded work, and normal-player live proof.

Required Work

  • Separate observation selection, assignment authority, and direct control in the normal player path. Clicking an Actor selects them for inspection without changing control state or simulation decisions; explicit take-control and release actions use the existing control owner and provide accepted or rejected feedback.
  • Validate that every authored Site, building anchor, resource source, and embodied position maps to its declared chunk; reject mismatches transactionally instead of accepting a logically connected but geometrically false world.
  • Replace the fixed presentation patch with terrain submitted from resident chunk data, culled against the camera, while Render remains a reader of World-owned coordinates and residency.
  • Author one small connected starter region containing a 3 by 3 chunk layout, meaningful Sites, traversable borders, and enough variation to make movement through the region readable.
  • Extend embodied navigation with hierarchical traversal: World selects a stable route or chunk corridor, local navigation resolves bounded paths within resident chunks, and explicit border transitions preserve one movement order.
  • Activate, retain, cool, and compress chunks through the existing residency and heat owners as the camera, selected Actors, or valid arrivals require them.
  • Preserve Actor identity, position, intent, route progress, local move progress, interruption state, and command feedback across chunk transitions, save and load, replay, and promotion or demotion.
  • Add player-facing destination, reachability, progress, and failure explanations for long local journeys without exposing residency implementation details as gameplay.

Internal Slice Order

  1. Phase 15A — Observation and authority: separate selection, assignment, take-control, and release with save, replay, command, feedback, and live proof.
  2. Phase 15B — Spatial validation: reject mismatched Site, building, source, Actor, cell, and chunk facts at exact positive and negative boundaries.
  3. Phase 15C — Chunk terrain: submit resident camera-visible terrain without a fixed presentation patch or Render-authored world state.
  4. Phase 15D — First border crossing: continue one accepted local movement order into an adjacent active chunk.
  5. Phase 15E — Hierarchical traversal: compose stable route or chunk corridors with bounded local paths and deterministic border handoff.
  6. Phase 15F — Residency and continuity: activate and cool chunks around camera interest, selected Actors, arrivals, and travel while preserving compressed distant state.
  7. Phase 15G — Connected-region closure: prove the authored 3 by 3 region through interruption, save, load, replay, budgets, live controls, and final audit.

Population and Scale Goals

  • Keep cell-level path work bounded to resident chunks and use the route or chunk graph for broad travel so path cost does not grow with total world area.
  • Cull terrain and embodied presentation by camera-visible resident chunks rather than constructing geometry for every authored chunk.
  • Prove several concurrent inter-chunk travelers while distant Actors retain compressed route progress and allocate no local path or presentation resources.

How To Build It

  • Keep the existing split between broad route travel and embodied local navigation. Do not replace it with one world-sized cell search.
  • Use explicit border portals or deterministic edge crossings between adjacent traversable chunks. A border handoff advances the same order; it does not issue a replacement order.
  • Make chunk activation a validated World request with a reason and budget. Camera interest, selected-Actor movement, and scheduled arrival may request residency but cannot silently load data from Render or Game rules.
  • Treat the 3 by 3 region as a product proof, not a new hardcoded world size. The topology, renderer, saves, and path owners must accept other valid layouts.
  • Treat selection and camera following as causally inert observation. They may request presentation residency but cannot alter Actor needs, planning, job claims, risk, or control authority.
  • Retain flat terrain for this gate. Elevation, bridges, multiple floors, and procedurally unbounded generation remain separate evidence-gated work.

Benefits

  • The visible game becomes a connected place rather than a bounded diagnostic quadrant.
  • Settlement, expedition, ecology, trade, and warfare content can share one scalable movement contract.
  • The work closes the current gap between already-proven abstract inter-Site travel and embodied exact-ground movement.

Potential Drawbacks

  • More resident terrain and path work can increase frame time, memory, and save complexity if camera culling and heat budgets are not enforced.
  • Incorrect border ownership can duplicate positions, cancel orders, or create replay divergence.
  • A larger map can hide weak local gameplay if content expansion starts before the traversal proof is readable.

High-Risk Changes

  • Changing local navigation from same-chunk rejection to multi-chunk continuation without preserving deterministic tie-breaking and bounded visits.
  • Coupling camera movement directly to authoritative residency mutation.
  • Treating Site-to-chunk validation as a migration rewrite without a transactional failure path for older saves or authored content.

Practical Guidance

  • Keep the first crossing visually obvious with contrasting border terrain and continuous destination feedback.
  • Test negative chunk coordinates and exact border positions before adding regional content.
  • Preserve the same order ID through every border so debugging can distinguish continuation from replacement.

Must Have

  • Phase 15 closure proof: the authored isometric-lab world contains a centered 3 by 3 region with nine Sites, twelve bidirectional route links, nine active terrain chunks, and three explicit meadow presentations. One retained exact-ground order crosses four chunk borders through a five-chunk corridor and reaches the same state through mid-journey save/load and replay. Three embodied Actors traverse independent regional corridors while a cold Actor remains compressed. Unavailable destination residency rejects before partial mutation. The complete development and sanitizer matrices passed 609 tests, and the Release matrix passed 610 tests including the 20,000-Actor representative budget. Implementation revision: 3675d2c2295a5db93ba3f01d13bc051a313016d1.
  • The Release runtime has a repeatable graphical benchmark mode with a 120-frame warmup and bounded measured interval. A 1600 by 900 isolated run over 600 measured frames reported 60.07 average FPS with VSync and 253.89 average FPS uncapped. The uncapped p95 was 4.258 milliseconds and no measured frame exceeded 16.67 milliseconds. These are supported-host observations, not universal performance guarantees.
  • The Lua development API always exposes a rolling 120-frame FPS, frame-time, process CPU, and process resident-memory snapshot. A package may start one bounded logging session, stop its own session, read constant-time min/average/max aggregates, or page through retained samples. Timing values are nondeterministic diagnostics with no simulation or save authority.
  • One authoritative meter, cell, chunk, route, residency, heat, and Actor-position model.
  • Explicit observation, assignment, take-control, and release states with no click-to-possess coupling.
  • Hierarchical movement that remains bounded and deterministic as total world breadth grows.
  • Chunk-driven terrain rendering with camera culling and no presentation-owned world facts.
  • Explicit save, replay, interruption, failure, and promotion or demotion continuity.

Scheduled Optional Work

  • Basic interpolation for smoother motion between fixed sim ticks. Tracking record
  • Simple package or manifest builder for map assets. Tracking record
  • A world-state diff viewer for before-demotion and after-promotion comparisons. Tracking record

Exit Criteria

  • In a live supported build, the player can order a selected Actor across at least three chunk boundaries in the authored 3 by 3 region, follow the journey with the camera, and receive continuous progress and completion feedback without teleportation or order replacement.
  • In the same live build, selecting and inspecting a working Actor leaves their plan and control state unchanged. Taking control requires the dedicated action, and release returns the Actor to reconciled autonomy.
  • Saving during an inter-chunk journey and loading the save preserves the Actor, destination, path corridor, current position, residency state, and final deterministic outcome.
  • An obstructed border, unavailable destination chunk, stale navigation revision, or failed activation rejects or interrupts through the owning systems without partial movement or duplicated state.
  • The representative world and population proof keeps distant Actors compressed, bounds active path work and rendered terrain, and remains within an approved frame, tick, memory, and save budget.
PHASE 16First Inhabited SettlementCompose the completed engine systems into one small settlement that visibly works, struggles, and responds to player direction.Complete

Phase: Phase 16

Gate status: Complete

Depends on: Phase 14 provides the scriptable development interface, typed command surface, and live UI iteration path; Phase 15 provides connected embodied space; Phase 3, Phase 6, Phase 7, and Phase 13 owners remain intact.

Activation Contract

  • Enters with: the Phase 14 interface, Phase 15 connected region, and completed Actor, Work, Resource, Household, Building, Construction, movement, save, and replay owners.
  • First vertical proof: several named villagers autonomously move one food resource into storage and consume it while the player can inspect every cause without changing their behavior.
  • Does not open: a broad market, banking, generational depth, regional trade, full agriculture, civic institutions, large building catalogs, or scripted settlement decisions.
  • Closes with: one readable 8-12-person settlement, food and water, material hauling, construction, money custody, autonomous project choice, failure, recovery when causally possible, persistence, and scale proof.

Required Work

  • Author one recognizable starter settlement with 8 to 12 named visible villagers and enough complete content to prove berries, fish, wild game, one grain field, freshwater, timber, stone, fuelwood, shared storage, household storage, and physical hauling through the registered Resource and Supply contracts.
  • Provide several building families through the existing Building and Construction owners: homes, a well or equivalent water service, a shed or barn, a shared stockpile or granary, one food processor, one material workshop, and one public or communal structure. The scenario need not construct all of them.
  • Start villagers through the existing Actor, Work, Resource, Household, Building, Construction, and movement owners rather than scripted routes or direct resource changes.
  • Present villager needs, current intent, work claim, carried resources, destination, household, personal money, household money, and relevant interruption reasons through the player interface.
  • Add the minimum settlement, work, need, completion, failure, and urgent-alert audio cues required to understand nearby life without reading every panel; use the existing audio boundary and declared assets.
  • Seed physical personal and household money custody with one conserved payment, purchase, gift, or contribution path. Banking, credit, taxation, and a complete market remain later phases.
  • Let the player select villagers and issue valid movement, gathering, construction, cancellation, priority, and settlement commands against visible world targets.
  • Prove selection as observation: the player can follow and inspect any villager without changing their plan. Direct control requires the explicit Phase 15 action.
  • Let real settlement pressure generate at least two eligible autonomous project proposals and choose one through hard gates and explainable scoring rather than a scripted startup sequence.
  • Include one bounded shortage or work interruption that autonomy can address and one serious failure that may cause death, departure, project abandonment, or settlement contraction.
  • Preserve the complete settlement through save, load, replay, UI reload, and Actors moving between neighboring chunks.

Internal Slice Order

  1. Complete — Phase 16 tuning addendum A, Runtime tuning authority: load versioned pace defaults, own validated live revisions in App, apply simulation time scale and presentation frame targets, and expose only restricted development-addon mutations with detached queries and post-commit events.
  2. Complete — Phase 16 tuning addendum B, Physical movement tuning: replaced one-cell-per-tick local traversal with physical base rates, Actor and transport modifiers, deterministic residual progress, and duration estimates. Addendum F later applied the same policy to compressed inter-Site travel.
  3. Complete — Phase 16 tuning addendum C, Construction tuning: replaced build-tick constants with authored work units, a live global throughput policy, Actor capability contribution, deterministic fractional progress, duration estimates, and owner-aligned save and replay migrations.
  4. Complete — Phase 16 tuning addendum D, Capacity policy: classified technical safety ceilings separately from versioned scenario population, resource, per-container, and aggregate-storage limits; each limit is enforced through its existing domain owner and can be inspected or changed through revision-checked development controls. Spawn rates remain Phase 18 world-generation scope.
  5. Complete — Phase 16 tuning addendum E, Content catalog contracts: added one required immutable catalog with stable, versioned resources, source types, professions, job archetypes, recipes, and buildings. Scenario instances, runtime owners, save, replay, player construction, queries, and headless validation now retain or resolve those identities without source-specific executable branches.
  6. Complete — Phase 16 tuning addendum F, Persistence and closure: replaced authored inter-Site travel ticks with physical route distance, shared movement policy, Actor and transport capability, infrastructure modifiers, and retained fractional progress. Save migration, replayed development commands, API and package checks, reproducible release packaging, and representative scale proof close the tuning foundation. Spawn distribution and world-seed controls remain owned by Phase 18 world generation.
  7. Complete — Phase 16A, Settlement content: authored and validated a separate starter settlement with ten named villagers, four households, eight physical sources, shared storage, building alternatives, and keyed placeholder graphics without adding a gameplay owner.
  8. Complete — Phase 16B, Food and water life: added six authored berry, fish, game, grain, and freshwater chains; hydration as a first-class Actor need; settlement-scoped worker and spatial indexes; exact source, storage, and consumer movement; conserved carrying and consumption; deterministic competition; invalid-worker cleanup; save and replay continuity; and live ten-villager Party proof. Actor-aware marquee selection now excludes props while direct clicks retain inspection.
  9. Complete — Phase 16C, Material and construction life: added bounded timber and stone supply work, exact shared-stockpile storage, exact material pickup and project delivery, capability-sensitive labor, staged construction presentation, active-loop save and replay continuity, and one completed workshop. Route travel now retires earlier local-move ownership before changing an Actor's spatial state.
  10. Complete — Phase 16D1, Worker observation and command feedback: the standard interface now reports a selected villager's name, needs, plan, task, work stage, progress, destination, carried resources, household, and authored settlement alternatives. Taking and releasing control remain explicit actions, and fixed-tick command rejection now returns owner-reported feedback through the script event service.
  11. Complete — Phase 16D2, Money custody: added one authored copper-penny currency, separate personal-wallet and household-money containers, conserved revision-checked contributions, detached personal and household balances, post-commit events, standard-interface controls, and exact save and replay continuity. Money does not consume hauling capacity, and markets, banking, credit, taxation, wages, prices, and autonomous spending remain closed.
  12. Complete — Phase 16D movement-quality addendum: local embodied routes now use deterministic cardinal and diagonal cell steps while retaining the one-meter building and collision grid. Diagonals use fixed-point distance cost, require both side-adjacent cells to remain traversable, and retain dense adjacent paths through save, restore, replay, Party movement, and cross-chunk travel. Arbitrary-angle string pulling, dynamic Actor avoidance, and navigation meshes remain separate work.
  13. Complete — Phase 16D3, Player work direction: the standard interface can browse valid work, assign a selected villager, set a durable normal or high priority, cancel the assignment, browse authored building alternatives, move a bounded placement cursor, designate construction, and cancel an active project. The typed commands validate current owner revisions and return visible rejection details. Active construction remains reachable to its worker; completed building footprints become derived World navigation blockers and force retained movement to replan without creating a second saved occupancy owner.
  14. Complete — Phase 16D4, Understanding closure: six catalog-declared nearby cues report settlement presence, work starting, urgent needs, completion, failure, and urgent alerts. App derives bounded presentation facts after owner mutation, the audio boundary resolves declared cue definitions, and the SDL or Null backend handles playback without simulation or save authority.
  15. Complete — Phase 16E, Autonomous development: the starter settlement now evaluates authored house and compact-storehouse candidates from current housing, storage, material, labor, footprint, reachability, duplicate, and active-project facts. A pure bounded fixed-point reasoner retains every score or rejection, uses stable building-definition ties, records the decision in Settlement, and designates at most one normal Construction through the existing owners. The standard interface and world.project.proposals expose the retained decision without mutation.
  16. Complete — Phase 16F, Failure and continuity: a critical Actor need can interrupt real construction without erasing delivered material or completed work. Construction releases the interrupted worker, prioritizes bounded replacement search, resumes through another eligible resident when possible, and fails once after its grace deadline only after a complete eligible-worker scan. Settlement retains the exact terminal outcome and reopens its decision cadence. Direct player control pauses autonomous building work without being misclassified as a needs crisis.
  17. Complete — Phase 16G addendum, Starter Settlement Readability: ten authored residents now occupy four durable households across two operational longhouses. A stone well, raised granary, ration kitchen, meeting shelter, and workshop project use normal Building, Construction, Resource, Household, World, and presentation owners. Housing benefits come from validated content and current building condition, while access distance comes from World placement. Both autonomous project candidates are eligible under current facts. The standard interface shows settlement-owned stockpile totals and readable building names, purposes, conditions, and lifecycle state. Development, headless, sanitizer, Release, representative-scale, save, replay, API, reproducible-package, and live packaged-play proof all pass.

Population and Scale Goals

  • Prove 8-12 embodied villagers in the starter settlement while the representative 20,000-person world remains within the established heat and scheduling budgets.
  • Index local Jobs, sources, stockpiles, homes, and projects by settlement and spatial anchor; no settlement loop may scan the world population.
  • Measure active-settlement pathing, job contention, inventory transfers, project evaluation, visible proxies, save size, and cold-world continuation separately.

How To Build It

  • Use authored content and existing registered schemas instead of a settlement-specific bootstrap system.
  • Keep debug scenarios available, but make the starter settlement a player scenario with no required developer panels.
  • Prefer a few behaviorally distinct villagers and complete loops over large population or asset count.
  • Treat every scripted UI panel as a reader of owner-built facts and every player action as a typed command.
  • Treat resource species, forms, building alternatives, costs, outputs, capabilities, and maintenance as validated content. Do not add source-specific or building-specific branches to the executable root.

Practical Guidance

  • Give each starting villager a distinct household, job preference, need profile, and visible reason for their first useful action.
  • Place sources far enough apart for hauling and storage choices to matter without turning the proof into an expedition.
  • Include one settlement fixture that fails without intervention and one that can recover autonomously.

Must Have

  • An inhabited settlement that performs useful work without player micromanagement.
  • Visible observation, explicit control, orders, job progress, needs, money, material movement, autonomous project choice, interruption, failure, and possible recovery.
  • No hardcoded Actor IDs, fixed job routes, direct inventory mutation, or presentation-authored gameplay state.
  • Save, replay, scale, and live player proof across the connected chunk world.

Scheduled Optional Work

  • Construction ghost previews tied directly to that proven job creation path. Tracking record
  • Priority tuning presets for different settlement policies. Tracking record

Exit Criteria

  • A new player can identify the settlement's water, food sources, raw materials, storage, housing, current construction, money custody, and immediate problem without opening developer tools.
  • Villagers autonomously gather and store food, complete one real construction project, meet basic needs, and return to useful work through the same owners used by player commands.
  • The settlement chooses one of at least two valid development projects from real pressure and explains why it chose, rejected, stalled, completed, or abandoned each proposal.
  • The player can intervene successfully, receive a visible rejection when an order is invalid, save during the loop, reload, and continue without duplicated jobs, resources, buildings, or people.
  • Selection alone never changes Actor control or decision state. One serious shortage or loss can produce death, departure, abandonment, or contraction, and recovery occurs only when causal resources and labor actually become available.
  • The scenario remains understandable and responsive with the target visible population while the representative distant population stays compressed and bounded.
PHASE 17Daily Life, Health, Time, and GenerationsMake settlement inhabitants live through understandable daily rhythms, health changes, relationships, households, aging, and family continuity.Complete

Phase: Phase 17

Gate status: Complete

Depends on: Phase 16 proves an inhabited settlement and the completed Actor, motivation, memory, relationship, household, health, progression, and lineage owners remain authoritative.

Activation Contract

  • Enters with: a functioning inhabited settlement whose people already have stable identity, needs, plans, condition, memory, relationships, households, work, property, and money custody.
  • First vertical proof: one difficult settlement day shows two people with different histories making different, explainable choices about work, food, rest, care, and obligation.
  • Does not open: universal per-tick cognition, all-pairs social simulation, deep genetics, broad medicine content, guaranteed population replacement, or abstract wealth creation.
  • Closes with: daily and seasonal rhythm, health and care, commitment boundaries, household change, birth or aging, death or departure, inheritance, migration, long-duration continuation, and bounded demographic work.

Required Work

  • Define player-readable day, sleep, work, meal, care, recovery, seasonal, and life-stage rhythms over the existing fixed-tick and calendar owners.
  • Expand health into wounds, illness, exhaustion collapse, treatment, caretaking, disability, recovery time, and effects on labor, mood, households, and memory.
  • Let work commitments, urgency, packed food, local breaks, danger, and personal pressure determine whether a villager finishes, pauses, or abandons a task.
  • Expand relationships and households through partnership, separation, caregiving, births, childhood, adulthood, aging, death, inheritance, immigration, and emigration without all-pairs social processing.
  • Preserve personal wallets, household reserves, property claims, debts if enabled, and inheritance through household formation, separation, death, migration, and succession without inventing or deleting value.
  • Surface why two villagers experience and respond to the same event differently through owned traits, learned tendencies, condition, relationships, and history.

Internal Slice Order

  1. Phase 17A — Calendar and routine: complete. The World calendar now exposes hour, day, season, and ordinary, rest-day, or festival semantics. Actor-owned routines retain sleep, meal, work, care, community, and personal-time expectations plus the actual choice and reason.
  2. Phase 17A addendum — World indicators: complete. A development-only resource-activity lens enumerates every authored physical source under a bounded visit budget, places each marker at its exact World cell, and explains remaining, reserved, blocked, and depleted state through detached owner facts. The complete indicator is centered over its source. Selection and move ground markers participate in scene depth order. This reusable presentation path can later host separate gameplay and reaction channels without making markers simulation state.
  3. Phase 17B — Health and care: complete. An available household member at the same site can use one field dressing through normal Work to treat one scheduled injury or illness, with bounded autonomous selection and retained care evidence.
  4. Phase 17C — Commitment and interruption: complete. Scheduled residents evaluate carried meals through Actor motivation, retain active Work until the exact checkpoint changes, consume only unreserved actor-carried food through Resource, and leave critical needs and danger to the existing interruption policy.
  5. Phase 17D — Relationships and households: complete. A resolved supportive relationship forms one persistent Household, which makes the same retained injury eligible for later autonomous partner care.
  6. Phase 17E — Life transitions: complete. Actor-derived life stages culminate in one atomic death that fails active Work, releases reserved Resource ownership, transfers the complete personal wallet to Household custody, removes the deceased member, and raises survivor strain without losing lineage or biography facts.
  7. Phase 17F — Generational closure: complete. One living resident can leave current Work, Household, and Settlement membership atomically while retaining identity, lineage, condition, and personal wallet; representative multi-year population capture remains deterministic and bounded at 20,000 Actors.

Implemented at Gate Close

  • World time derives a 24-hour clock, numbered days, seasons, and ordinary, rest-day, or festival classification from fixed simulation ticks without storing a second calendar.
  • Each Actor retains a compact routine state. Stable identity creates a bounded schedule offset, while current condition, needs, recovery, active work, and deferred meals determine the actual choice.
  • Routine evaluation uses the existing Actor schedule. Hot and compressed Actors continue through the same bounded visit path, and compressed day-boundary work retains an exact count.
  • Saves migrate the prior Actor schema with no invented routine history. Current saves and deterministic replay preserve the accepted routine state.
  • world.calendar.current and world.actor.routine expose detached facts. The standard interface shows the current world time and a selected resident's routine, expected activity, and choice reason.
  • App composes bounded resource-source indicators from authored settlement anchors and Resource, Supply, Work, and World facts only while the development channel is visible. Every physical source remains visible even when it has no current Supply chain. ScriptPackageHost owns per-session visibility, SDL centers the detached world-space result over the exact source cell, and Safe Mode hides development-only channels.
  • Selection footprints, selected or hovered ground markers, and contextual move feedback are inserted into the sorted scene at their ground depth. Exact-ground movement no longer renders the obsolete always-visible topology Site targets.
  • Runtime API 1.7 exposes channel discovery and visibility controls to authorized packages. The development Tuning Bench can show or hide resource activity without changing quantities, reservations, jobs, routes, or positions.
  • Money contribution commands now validate against the World tick currently being processed during multi-tick frames. Standard-interface command feedback expires after a bounded interval instead of retaining obsolete success or failure text.
  • Focused tests proved two residents choosing differently during the same routine window. The world-indicator correction passed 101 focused assertions, all 14 registered SDL and graphical checks, and all 785 development tests. The registered Release benchmark retained 20,000 Actors within all budgets. Live inspection showed the clock, selected-resident explanation, all eight authored resource sources, centered indicator pills, and depth-correct ground markers.
  • App scans at most 64 scheduled recipients and 64 settlement stockpiles per fixed tick, selects at most one same-household caregiver at the same site with stable tie-breaking, and opens one normal Work demand, job, task, claim, and reservation.
  • Actor owns the caregiver plan and the recipient's wound or illness treatment. Resource owns the consumed field dressing. Household schema 5 retains the typed care kind, caregiver, recipient, material, and completion tick.
  • The care transaction previews owner changes and commits atomically. Failed injury or illness care leaves Work, Actor, Resource, and Household unchanged. Current saves, schema 4 migration, and deterministic replay retain valid care state.
  • Runtime API 1.8 and the standard interface expose injury, illness, impairment, recovery readiness, and latest household care as detached facts.
  • Phase 17B passed 184 focused assertions in 3 cases, all 788 development tests, all 187 manual tests, generated API validation, and focused clang-tidy. The corrected 296-unit DocForge refresh published 7,741 nodes, 30,408 relationships, and 2,539 Logic projections; direct inspection found the health-care implementation and 184 owned Logic nodes, independent equivalence matched, and adapter worldforge-readonly-worldforge@9 synchronized as current.
  • RuntimeSession visits at most 64 due residents in stable identity order and skips actors whose automatic plans are suppressed. A supported meal is eligible only when Resource confirms it is actor-carried and not reserved cargo.
  • Actor keeps the selected motivational root, method, Work job, and Work-task checkpoint. Working residents wait for the exact checkpoint to change; idle residents can eat locally without manufacturing Work. Completion consumes one physical meal and relieves hunger atomically through the existing owners.
  • Critical hunger does not queue a normal carried-meal commitment. Existing interruption policy retains critical condition, hunger, hydration, rest, invalid-destination, and route-pressure decisions. The selected resident's retained motivation, routine reason, and latest interruption remain visible through existing inspection and standard-interface facts.
  • Phase 17C passed 2,069 focused assertions in 15 cases, all 790 development tests, all 187 manual tests, focused clang-tidy, build, and registered headless and graphical smoke checks. The 297-unit DocForge refresh performed 79 AST invocations and published 7,751 nodes, 30,453 relationships, and 2,542 Logic projections; adapter worldforge-readonly-worldforge@9 synchronized and bootstrapped current.
  • The existing relationship transaction advances a trusted pair to partnered only from one resolved supportive incident with retained witness evidence. Household formation then creates one indexed membership record without changing Actor identity or inventing a parallel social owner.
  • Autonomous care continues to use Household membership as its eligibility boundary. Before formation the injured resident has no eligible caregiver. After formation the same scheduled resident selects the partner, consumes one Resource-owned field dressing through normal Work, clears the Actor-owned wound, and records typed Household care history.
  • The integration remains bounded by the existing scheduled-recipient, household-member, and settlement-stockpile visit budgets. Repeated owner inputs produce the same Actor, Work, Resource, Relationship, and Household states, and current Relationship and Household serializers preserve the result.
  • Phase 17D passed 2,142 focused assertions in 16 cases, all 791 development tests, all 187 manual tests, focused clang-tidy, build, and registered headless and graphical smoke checks. The 297-unit DocForge refresh reused the unchanged C++ graph and published 7,752 nodes, 30,454 relationships, and 2,542 Logic projections; adapter worldforge-readonly-worldforge@9 synchronized and bootstrapped current.
  • Actor continues to derive child, adult, and elder stages from retained birth time. Death now terminally fails a live Actor plan and task and removes the Actor from scheduled updates while preserving identity, parents, condition, and death evidence.
  • App validates one revision-checked life-transition request against Actor, Work, Resource, and Household facts. It applies the change to owner candidates and commits only when every owner accepts it.
  • Work fails the deceased Actor's claimed or active job and its child tasks, orders, and reservations. Resource reconciles every matching live allocation before transferring every item in the Actor wallet to the surviving Household's custody with conserved quantities.
  • Household schema 6 removes the deceased member from its current membership index, retains earlier care history as historical evidence, and raises survivor strain. Resource schema 7 distinguishes inheritance from ordinary household contributions; both previous schemas migrate without inventing transfers.
  • Focused proof covers life stages, death, Work and allocation cleanup, multi-resource inheritance, conservation, survivor membership and strain, lineage, biography, persistence, migration, stale-input rollback, and deterministic replay.
  • Phase 17E passed 2,271 focused assertions in 18 cases, all 793 development tests, all 187 manual tests, focused clang-tidy, build, and registered headless and graphical smoke checks. The 298-unit DocForge refresh performed 162 AST invocations and published 7,764 nodes, 30,512 relationships, and 2,545 Logic projections; adapter worldforge-readonly-worldforge@9 synchronized and bootstrapped current.
  • Phase 17F passed 22,396 focused assertions in 20 cases, all 795 development tests, all 187 manual tests, focused clang-tidy, build, schema migration, and registered headless and graphical smoke checks. The 299-unit complete DocForge refresh performed 108 AST invocations and published 7,776 nodes, 30,572 relationships, and 2,548 Logic projections; adapter worldforge-readonly-worldforge@9 synchronized and bootstrapped current.
  • App validates one living emigration against current Actor, Work, Resource, Household, Settlement, and World facts, applies every change to owner candidates, and commits only after every owner accepts it.
  • Work fails the departing resident's active job and releases its child records and reservations. Resource reconciles live allocations without changing total quantities or the resident's personal wallet.
  • Actor retains identity, lineage, affiliation, role, condition, and life-stage derivation while its active plan and task terminate. Household schema 7 removes the member with a retained emigration reason and added strain. Settlement removes only the Actor membership and its index entry.
  • Repeated population capture at three multi-year boundaries visits exactly 20,000 Actors, rejects an undersized budget, preserves stable IDs and lineage references, produces deterministic demographic counts, and projects bounded serialized growth.
  • The normal starter-village runtime now exercises these sealed owners together. A partnered pair forms a housed Household, one child retains both parents and grows from child to adult, one adult immigrant joins normal work and routine, one living resident emigrates, and one elder completes the existing conserved death and inheritance transition.
  • Parentless authored residents use the retained zero birth tick as an adult-at-start marker and become elders at the existing elder boundary. Actors created by birth retain a nonzero birth tick and parent identities, so their child and adult stages remain derived from actual elapsed time.

Population and Scale Goals

  • Advance births, aging, health, schedules, relationships, inheritance, and migration through bounded cohorts and indexed relationships rather than all-pairs population work.
  • Keep detailed daily embodiment limited to hot populations while cold households advance through deterministic milestones and compact summaries.
  • Prove multi-year continuation at representative population scale with bounded save growth, valid references, and stable demographic accounting.

How To Build It

  • Add facts and methods to existing owners; do not create a universal life-simulation manager.
  • Evaluate social and household changes from bounded adjacency, milestones, and scheduled work rather than global pair scans.
  • Keep individual curve variation template-derived and deterministic from stable identity.
  • Compress remote daily detail into causal summaries while preserving significant health, household, and life-stage transitions.

Practical Guidance

  • Follow several villagers through the same difficult day to prove different pressure curves and histories produce different choices.
  • Include a household that loses a key earner and must adapt through kin, savings, public aid, migration, or failure.
  • Keep child and elder simulation milestone-driven until embodied interactions justify additional fidelity.

Must Have

  • Understandable time, health, care, relationship, and household consequences in the normal player interface.
  • Continued autonomy without requiring the player to schedule every meal, rest period, treatment, or relationship.
  • Deterministic long-duration evolution with bounded work and save growth.

Scheduled Optional Work

  • Trait tuning curves editable through debug UI. Tracking record
  • Long-retention export and replay UI for actor decision traces beyond the required deterministic decision proof. Tracking record
  • Timeline/history UI with scrub-friendly event summaries. Tracking record

Scheduled Deferred Work

Exit Criteria

  • Several settlement days show villagers working, eating, resting, caring, recovering, and changing plans for explainable personal reasons.
  • One household formation or separation and one health event produce persistent effects on labor, mood, memory, and later decisions.
  • Death, inheritance, migration, and household change preserve ownership and may cause sustained growth, recovery, or decline rather than an automatic replacement villager.
  • A long-duration representative population run preserves identity and causal continuity without per-tick all-person or all-pair work.
PHASE 18Expeditions, Ecology, Climate, and DiscoveryTurn travel beyond the settlement into a prepared, risky, and consequential field loop shaped by knowledge, weather, ecology, and return.Complete

Phase: Phase 18

Gate status: Complete

Depends on: Phase 15 proves connected traversal, Phase 16 proves the settlement loop, Phase 17 proves health and time, and the completed knowledge, ecology, weather, Party, incident, and consequence owners remain intact.

Activation Contract

  • Enters with: connected traversal, an inhabited settlement that can supply a Party, player-readable health and time, and existing knowledge, ecology, weather, incident, inventory, and consequence owners.
  • First vertical proof: a prepared scouting Party leaves home, consumes supplies, encounters one environmental complication, returns with incomplete but useful knowledge, and changes a settlement decision.
  • Does not open: broad quest arcs, diplomacy, world-scale warfare, many biomes, world-sized creature simulation, or a separate expedition minigame.
  • Closes with: preparation, field travel, camps, weather, ecology, discovery, retreat or success, return, aftermath, uncertainty, remote continuation, and regional scale proof.

Required Work

  • Add player-facing expedition preparation through Party membership, provisions, equipment, known routes, expected duration, weather, reported danger, and explicit purpose.
  • Compose scouting, field camps, line of sight, pursuit, retreat, extraction, field treatment, and return through existing movement, knowledge, inventory, health, combat, and incident owners.
  • Expand ecology with territories, migration, dens, prey pressure, breeding, depletion, renewal, and rare creatures that change route and settlement decisions.
  • Expand weather and seasons with regional drift, storms, mud, snow, crop timing, heat or cold exposure, visibility, travel cost, and infrastructure interaction.
  • Add bounded weather, ecology, camp, discovery, danger, and return audio cues that improve field awareness without exposing authoritative facts the Party has not observed.
  • Give forage, fisheries, game, forests, fields, water, clay, stone, and ore distinct renewal, depletion, contamination, stewardship, seasonal, and discovery policies through shared source definitions rather than source-specific simulation paths.
  • Preserve uncertainty: authoritative danger, ecology, and weather may differ from what the player currently knows.

Internal Slice Order

  1. Phase 18A — Preparation and purpose: complete. One revision-checked app transaction composes Party membership and intent, Resource-owned physical provisions and equipment, World-owned route duration, observer-reported weather and danger, and one ScoutingOrder objective. The detached inspection exposes the report without disclosing divergent authoritative weather. Stale supply and knowledge inputs roll back both mutable candidates. Party schema 6 and ScoutingOrder schema 3 preserve the accepted facts.
  2. Phase 18B — Departure and field travel: complete. A prepared Party consumes one physical provision, starts the normal coordinated move, crosses the connected route through World traveler ownership, establishes one World-owned field camp, and updates only direct destination and route observations. ScoutingOrder schema 4 retains departure, consumed provisions, and camp lifecycle facts.
  3. Phase 18C — Weather and ecology: complete. One bounded tick transaction advances the normal World environment and ecology owners, refreshes direct camp observations, derives one predator hazard through the existing Intersection reasoners, retains one proposed wildlife Incident, and emits weather and wildlife cue facts from known facts only.
  4. Phase 18D — Field decisions: complete. One revision-checked composition accepts pursuit, retreat, treatment, extraction, or failed-objective intent against the proposed camp hazard. Incident retains lifecycle, Party and World retain movement, ScoutingOrder schema 5 retains the selected branch, Resource retains ration or dressing consumption, and Actor retains wound treatment. Repeated and rejected requests preserve every owner.
  5. Phase 18E — Discovery breadth: complete. One scouting Party surveys a renewable source, gathers physical timber through Work and Resource ownership, returns through four Sites and two environmental identities, reports bounded direct observations, delivers its cargo, and changes the Settlement expedition posture while the source fact becomes stale independently of current World truth.
  6. Phase 18F — Expedition closure: complete. The standard player interface now prepares and advances a controlled Party through departure, camp, discovery, return, and aftermath. The same action resumes a wildlife-interrupted expedition through the existing recovery owner. Remote checkpoints, failed-objective return, three concurrent expeditions, stale knowledge, deterministic replay, and the existing wide-world climate, ecology, and cold-tier budgets are proven.

Implemented at Gate Close

  • Phase 18A passed 98 focused assertions in 3 cases. The transaction retained distinct provision and equipment bundles, required current Resource custody and observer knowledge, derived route duration from World topology, and left Resource, World, and knowledge owners unchanged during preparation.
  • Party and ScoutingOrder serialization, RuntimeSession restore, stale-input rollback, command idempotency, and exact member and resource visit counts passed. All 798 development tests, all 187 manual tests, focused production clang-tidy, build, schema migration, and registered headless and graphical smoke checks passed. The 300-unit complete DocForge refresh performed 109 AST invocations, reparsed 116 changed or dependent sources, and published 7,811 nodes, 30,723 relationships, and 2,561 Logic projections; adapter worldforge-readonly-worldforge@9 synchronized current.
  • Phase 18B passed 206 focused assertions in 6 Phase 18 cases and all 801 development tests. Departure and camp persistence, stale-input rollback, command idempotency, direct observation, exact member, provision, site, and route visits, and registered headless and graphical smoke checks passed. All 187 manual tests and focused production clang-tidy passed. The 300-unit complete DocForge refresh performed 187 AST invocations, reparsed 193 changed or dependent sources, and published 7,853 nodes, 30,924 relationships, 43,677 Logic nodes, 53,463 Logic relationships, and 2,575 Logic projections; adapter worldforge-readonly-worldforge@9 synchronized current.
  • Phase 18C passed 311 focused assertions in 8 Phase 18 cases and all 803 development tests. Weather and ecology observation, wildlife selection and lifecycle, knowledge-safe visual and audio facts, persistence, stale-input rollback, deep-failure rollback, deterministic target selection, and exact regional, population, and participant visits passed. All 187 manual tests and focused production clang-tidy passed. The 300-unit complete DocForge refresh performed 84 AST invocations, reparsed 88 changed or dependent sources, and published 7,873 nodes, 31,045 relationships, 43,699 Logic nodes, 53,489 Logic relationships, and 2,577 Logic projections; adapter worldforge-readonly-worldforge@9 synchronized current.
  • Phase 18D passed 567 focused assertions in 10 Phase 18 cases and all 805 development tests. All five field choices, lifecycle transitions, Party movement, physical ration and dressing costs, wound treatment, ScoutingOrder schema 5 persistence, current restore, idempotency, stale-input rollback, unavailable-cost rollback, and exact member and resource visits passed. All 187 manual tests and focused production clang-tidy passed. The 303-unit complete DocForge refresh performed 89 AST invocations, reparsed 94 changed or dependent sources, and published 7,899 nodes, 31,163 relationships, 43,760 Logic nodes, 53,554 Logic relationships, and 2,585 Logic projections; adapter worldforge-readonly-worldforge@9 synchronized current.
  • Phase 18E passed 740 focused assertions in 12 Phase 18 cases and all 807 development tests. Multi-Site return, two environmental identities, renewable-source depletion and renewal, physical Work and Resource transfer, bounded direct observations, stale source knowledge, settlement posture change, rollback, persistence, deterministic replay, and exact member, source, Site, route, region, and RegionalEconomy visits passed. All 187 manual tests, focused production clang-tidy, and the development build passed. The 304-unit complete DocForge refresh performed 99 AST invocations, reparsed 106 changed or dependent sources, and published 7,937 nodes, 31,378 relationships, 43,852 Logic nodes, 53,658 Logic relationships, and 2,592 Logic projections.
  • Phase 18F passed 1,033 focused assertions in 15 Phase 18 cases, including 190 closure assertions in 3 cases, and all 809 development tests. The live player action, detached Party status, full success loop, failed-objective return, camp cleanup, wildlife interruption recovery, remote save/load, deterministic replay, three concurrent expeditions, and the 32-region, 64-entity climate, ecology, and cold-tier budget proof passed. All 187 manual tests, focused production clang-tidy, the development build, and registered headless and graphical smoke checks passed. The 304-unit complete DocForge refresh performed 87 AST invocations, reparsed 90 changed or dependent sources, and published 7,945 nodes, 31,470 relationships, 44,050 Logic nodes, 53,915 Logic relationships, and 2,597 Logic projections.

Population and Scale Goals

  • Partition weather, ecology, knowledge, routes, and resource renewal by region with explicit cadence and visit budgets.
  • Embody only expedition participants and nearby ecology; distant migrations and environmental change use stable regional summaries.
  • Prove many cold regions, several concurrent expeditions, and a small active ecology set without global creature, route, or resource scans.

How To Build It

  • Make an expedition a composition of Party, orders, routes, provisions, conditions, incidents, knowledge, and consequences rather than a separate minigame state.
  • Keep flat-terrain traversal as the baseline. Promote elevation, bridges, cliffs, or multiple floors only through a separately measured navigation and presentation slice.
  • Schedule remote ecology and climate by region and heat tier. Promote only participants and nearby facts needed for the active episode.

Practical Guidance

  • Make the first expedition useful even without combat so preparation, knowledge, weather, and return carry the loop.
  • Let an expedition return with incomplete or incorrect reports when observation conditions justify uncertainty.
  • Reuse one route under different seasons to prove climate changes decisions without replacing topology.

Must Have

  • A complete prepare, travel, act, retreat or succeed, return, and aftermath loop.
  • Knowledge that can be incomplete or stale without becoming misleading debug-only opacity.
  • Ecology and climate that change real travel, resource, health, infrastructure, and settlement decisions.

Scheduled Deferred Work

  • Many biomes, large settlements, distant factions, and broad ecology simulation. Tracking record

Exit Criteria

  • The player can prepare and lead a small Party across multiple chunks, respond to changing weather or ecology, return with a useful result or loss, and see the settlement absorb the consequence.
  • The same expedition continues causally through offscreen travel, save and load, interruption, injury, and failed objectives.
  • A representative broad world updates ecology and climate within heat-tier budgets without simulating every creature or weather cell at embodied fidelity.
PHASE 19Autonomous Settlement Growth, Production, Trade, and ProgressionLet settlements choose distinct development paths through construction, production, wealth, trade, specialization, capability, prosperity, decline, and recovery.Complete

Phase: Phase 19

Gate status: Complete

Depends on: Phase 16 proves the starter settlement and Phase 18 proves connected regional travel; completed Building, Construction, Resource, Production, Work, Trade, Route, Settlement, and progression owners remain authoritative.

Activation Contract

  • Enters with: a functioning starter settlement, discovered regional resources, physical travel and hauling, conserved money, and validated building, resource, recipe, project, and trade definitions.
  • First vertical proof: one production building converts physically delivered inputs into a useful output while maintenance, labor, storage, price, and opportunity cost remain visible.
  • Does not open: governance, taxation, banks, kingdom authority, unbounded crafting catalogs, abstract global markets, or settlement tiers used as mutation authority.
  • Closes with: multiple autonomous project sponsors, production, trade, wages and markets, earned capability, specialization, outposts, distinct settlements, regression, recovery, conservation, and regional scale proof.

Required Work

  • Expand buildings through foundations, staged construction, upgrades, maintenance, decay, warmth, light, safety, occupancy, and functions that materially change work and household life.
  • Expand the validated material catalog across food, water, timber species, stone families, fibers, hides, clay, fuel, ore, metal, tools, household goods, and valuables. Species, forms, grades, substitutions, decay, storage, and conversion remain data rather than hardcoded branches.
  • Add a bounded set of production chains with distinct inputs, tools, labor, storage, by-products, quality, and settlement uses.
  • Add physical regional trade obligations, transport risk, prices or exchange terms derived from owned scarcity and policy facts, and visible delivery outcomes.
  • Expand money from Phase 16 custody into wages, purchases, household saving, business funds, pricing, contracts, gifts, rent where applicable, and conserved coin or commodity exchange.
  • Define progression through craft maturity, knowledge, institutions, exploration, infrastructure, and social capability rather than a disconnected generic technology tree.
  • Support settlement specialization and multiple outposts without global inventory, global job scans, or duplicated building authority.
  • Derive household, hamlet, village, town, and city descriptions from actual capability profiles. Labels may advance or regress and never act as authoritative unlock flags.
  • Let households, businesses, leaders, and institutions propose, fund, construct, operate, maintain, repurpose, or abandon projects through one bounded lifecycle. Alternative projects such as a tavern, market, church, shrine, granary, workshop, or defensive structure compete through real need, culture, sponsor support, land, labor, material, wealth, and operating costs.
  • Prove prosperity and failure as systemic outcomes: a settlement may specialize and flourish, stagnate, shrink, lose capabilities, or be abandoned without a scripted result.

Internal Slice Order

  1. Phase 19A — Building capability: complete. A workshop requires current condition, service capacity, labor, storage, and maintenance material before a multi-step tool recipe can run.
  2. Phase 19B — Autonomous projects: complete. Household, business, civic, and institutional sponsors contribute explicit evidence, and two settlements select different valid projects from different owned facts.
  3. Phase 19C — Trade and logistics: complete. A priced physical shipment retains its settlements, Route, scarcity evidence, cargo, deadline, and successful or failed delivery outcome.
  4. Phase 19D — Earned capability: complete. Typed craft, knowledge, infrastructure, and institution evidence can open an option, regress without deleting history, and later recover.
  5. Phase 19E — Specialization and outposts: complete. Settlements derive distinct explanatory profiles, and one spatially real outpost retains its Route and physical maintenance pressure.
  6. Phase 19F — Wealth and markets: complete. Conserved currency moves through business wages, personal and Household saving, and an atomic priced purchase with insufficient-funds rollback.
  7. Phase 19G — Growth and decline closure: complete. Prosperity is derived from current owned facts; capability and maintenance loss cause decline, normal recovery owners restore growth, and a cursor-bounded batch proves deferred regional evaluation.
  8. Village Life addendum A — Visible work and home routine: complete. The starter settlement is the normal launch, residents accept autonomous work only during their actual work activity, and completed workers walk to deterministic reachable positions at their Household residence for sleep.
  9. Village Life addendum B — Lived settlement day: complete. Clustered trees and bushes fill several surrounding chunks, while residents work at physical destinations, take breaks, gather socially, eat, return to their assigned homes, and go inside at night.
  10. Village Life addendum C — Readable village focus and priority: complete. The normal interface shows the village population, current project, progress, assigned resident, and real Work priority before the player selects anyone. Selected residents show their authored profession and routine reason.
  11. Village Life addendum D — Social encounters and memory: complete. Residents taking a social outing complete bounded conversations, support, or disagreements through Incident, Relationship, Memory, and Actor owners. Retained connections guide later company, while the standard interface shows the village chronicle and each selected resident's relationships.
  12. Village Life addendum E — Family and life-course continuity: complete. Eligible partners form a housed Household, have one bounded child who grows through Actor life stages, and participate in retained immigration, living emigration, age death, and conserved inheritance during ordinary starter-village play.
  13. Village Life addendum F — Household meals, domestic work, reserves, care, and strain: complete. Each authored Household has a physical pantry at its residence. Residents haul conserved food home through normal Work and movement, share retained meals there, gain strain when reserves fail, and recover after care resumes.
  14. Village Life addendum G — Productive work, pay, markets, and trade: complete. A resident physically supplies and operates the completed workshop, receives conserved pay, contributes to Household funds, sells the produced tool to a Household, and a merchant carries conserved timber to a regional destination.
  15. Village Life addendum H — Weather and ecology in settlement life: complete. Region weather and renewable-source condition now change resident routine choices, pause new outdoor work during hazards or conservation, send available residents home, and appear in the normal village interface.
  16. Village Life addendum I — Environmental disruption and recovery: complete. Hazardous regional weather adds one bounded retained strain contribution to each Household, the next safe weather epoch removes that contribution, and the normal village interface distinguishes stable, disrupted, and recovering households.
  17. Village Life addendum J — Autonomous vocation and recurring economy: complete. Validated recurring production and trade opportunities select current eligible residents through bounded Actor and Work preference facts. Production, Trade, and Resource issue their own durable identities, and worker loss releases the current chain so another eligible resident can continue without compiled performer or transaction identities.
  18. Village Life addendum K — Household viability and recurring demography: complete. A validated settlement policy drives rotating bounded partnership, separation, birth, immigration, emigration, aging, death, inheritance, and Household continuity from current relationship, housing, food, health, wealth, labor, and population facts. Repeated transitions support growth, stability, and decline without one-event flags, compiled Actor identities, or guaranteed replacement.
  19. Village Life correction C1 — Individual cadence and recurring travel: complete. Authored personal schedule variation, rotating recurring workers, complete merchant return travel, and detached cadence inspection prevent identical village-wide routine timing and one-way regional work.
  20. Village Life addendum L1 — Authored land areas and crop contracts: complete. Assets validates reusable crop and land-use definitions, while World retains irregular cell areas, their condition, crop lifecycle, persistence, inspection, queries, and derived ground presentation.
  21. Village Life correction C2 — Inter-site traveler presentation: complete. Non-arrived regional travelers leave the local render and selection snapshot while their World route and Actor plan continue normally.
  22. Village Life correction C3 — Moving-beneficiary supply handoff: complete. A retained food or water worker refreshes the same Actor job target when the beneficiary has moved and completes the existing conserved Work and Resource transaction within the supply scheduler's normal budgets.
  23. Village Life addendum L — Land use and farming: complete. Current settlement food need repeatedly selects eligible prepared land, a forecasted crop opportunity, and an available resident through bounded owner visits. Harvest returns to settlement storage, shortage can reopen the same conserved cycle, and every choice or blockage remains inspectable.
  24. Village Life addendum M — Roads, fences, and maintained local infrastructure: complete. M1 through M4 are complete and proven.
  25. Village Life addendum N — Landscape lifecycle and visual breadth: complete. N1 through N4 are complete and proven. The graphical game derives fields, road condition, fences, gates, standing plants, rocks, stumps, clearings, and regrowth from current World facts and validated Assets, then submits only resident camera-visible landscape through bounded presentation metrics.
  26. Village Life addendum O — Generational appearance: complete. O1 through O4 are complete and proven. Actor retains inherited appearance; Assets validates four life stages, compatible current-fact layers, three distinct runtime atlases, and authored variation policy; a reproducible manifest pipeline and automated breadth proof cover related families, readable ages, deterministic fallback, bounded batches, save and replay, and post-start births and arrivals without presentation becoming simulation authority.
  27. Village Life addendum P — Unattended continuity and balance closure: complete. P1 through P5 are complete and proven. The accelerated, adverse-condition, representative-scale, multi-hour graphical, and one-candidate release proofs retain recurring food, housing, labor, households, population, production, trade, infrastructure, ecology, recovery, save growth, replay, bounded work, and generated-reference continuity.
  28. Village Life addendum Q — Civilization autonomy reset: complete. Q1 through Q10 replace prebound strategic demand and fixed project menus with a retained, explainable settlement planning loop. The normal simulation generates its own needs, goals, dependencies, work, spatial expansion, specialization, population response, and decline or recovery without fixed resident, source, project, or coordinate bindings.
  29. Q1 - dynamic settlement needs and forecasts: complete. Settlement retains typed food, water, fuel, housing, storage, labor, maintenance, and development needs derived from current owner facts. Each row names its current quantity, target, unit, severity, trend, horizon, confidence, source revisions, and causal explanation. No goal or work is created in this slice.
  30. Q2 - concurrent goal portfolio and commitments: complete. A pure bounded reasoner turns current needs, opportunities, obligations, and ambitions into several competing Settlement-owned goals. Stable goals retain typed source and domain, sponsor class, priority, expected benefit, cost, risk, opportunity cost, dependency references, reconsideration threshold, status, revision, and causal history. Settlement retains every bounded candidate with its score and direct selection, incompatibility, cap, source, or threshold reason. Re-evaluation preserves stable identities, pauses still-valid deferred commitments, retires commitments whose source fell below policy, and can admit a replacement without mutating an execution owner.
  31. Q3 - dependency planning and execution requests: complete. Data-defined planning methods decompose accepted goals into a validated acyclic network of land, resource, production, hauling, road, construction, and operating requirements. Settlement owns stable plan and requirement identities, prerequisites, alternatives, state, revisions, bounded causal history, and exact owner bindings. App observes current owner facts and submits ready construction through the existing atomic Settlement, Construction, Work, and Resource transaction. Completion, cancellation, invalidation, and prerequisite release advance only from revision-checked owner outcomes.
  32. Settlement definition schema 10 owns the Q2 cadence, rotating settlement and candidate budgets, concurrent cap, history bound, fixed-point weights, minimum score, candidates, source references, sponsors, costs, risks, dependencies, incompatibilities, and reconsideration thresholds. Settlement schema 11 owns the goal IDs, current statuses, latest complete portfolio, bounded portfolio history, cadence, and ID high-water mark. Supported schema 10 saves migrate with no invented goals.
  33. Runtime API 1.19 adds world.settlement.goals. The query returns the complete latest candidate page, including committed goal identity where one exists and every rejected alternative's source, sponsor, score inputs, dependency and incompatibility counts, eligibility, status, and direct decision detail. It is read-only and cannot create Work, reserve Resource, designate Construction, select land, or assign an Actor.
  34. Q2 proof passed all 905 development and registered smoke tests, 137 focused goal assertions, strict analysis of every changed production unit, the real starter-settlement headless validator, all 188 manual tests, and all seven API Reference tests. The complete DocForge graph validates the final source, ownership, and API projection before commit.
  35. Settlement definition schema 11 owns nine bounded planning methods, cadence, owner visits, requirement and dependency visits, mutation budget, and history limits. Settlement schema 12 owns plan and requirement IDs, status, prerequisite and alternative edges, target references, authoritative bindings, causal events, and high-water marks. Supported schema 11 saves migrate with no invented plans.
  36. Runtime API 1.19 adds world.settlement.plans. It returns stable plan, goal, method, and requirement identities; states; prerequisite and alternative metadata; targets; direct reasons; and exact current owner bindings without mutation authority.
  37. Q3 proof covers deterministic input permutations, cycle and forged-graph rejection, stale transitions, prerequisite release, construction request atomicity, live owner binding, schema-11 migration, save and restore, Lua inspection, authored-target validation, and bounded histories. The development build, focused owner and integration packages, strict analysis of every changed production unit, the starter-settlement content validator, generated API Reference, manual suite, full development suite, and complete DocForge refresh pass before commit.
  38. Q4 - dynamic supply work and actor choice: complete. Physical supply and production demand discover and compare current alternatives instead of opening prebound work. Each eligible Actor independently compares current supply, construction, and production work through personal condition, capability, route danger and proximity, routine, household obligation, learned preference, and existing commitments.
  39. Q4A - dynamic physical supply portfolios: complete. Settlement-owned demand policy discovers bounded source, beneficiary, Resource, stockpile, local or regional route, danger, quantity, capacity, stock-gap, and duplicate-chain facts. A pure reasoner retains every alternative and direct rejection reason, preserves purpose breadth before filling remaining capacity, and preserves stable option identity across loss and re-entry. Food and water work opens only when current Actor pressure reaches its authored re-entry threshold; the strategy does not create preventive errands for every resident. App submits one atomic transaction: Settlement retains the portfolio, Supply creates the selected chains, Work creates their jobs, Settlement retains job membership, and exact Supply IDs and revisions bind back to the selected options. The starter economy loads no authored Supply chains.
  40. Settlement definition schema 12 owns Q4A cadence, settlement, source, candidate, and mutation budgets, selection and history limits, resource alternatives, destination, transfer and consumption quantities, need relief and re-entry, job urgency, alert timing, and route limits. Settlement schema 13 owns stable option IDs, complete evidence and rejection traces, selection state, Supply bindings, cadence, history, and high-water marks. Supported schema 12 saves migrate with no invented strategy or work.
  41. Runtime API 1.19 adds world.settlement.supply-options. It returns the complete latest option page with demand policy, domain, purpose, beneficiary, Resource and container identities, source and capacity quantities, route cost and danger, need severity, stock gap, score, rejection, selection, explanation, and exact Supply binding. It is detached and read-only.
  42. Q4A proof covers deterministic input permutations, physical-source and route rejection, purpose breadth, need-threshold re-entry, exact transaction binding, schema-12 migration, save and replay, Lua inspection, and bounded histories. The focused package passed 312 assertions in seven cases. All 916 development and registered smoke tests, all 188 manual tests, all seven API Reference tests, strict analysis, the starter-settlement content validator, generated references, manual-index validation, complete DocForge refresh, and interactive synchronization passed before commit.
  43. Q4B1 - dynamic production alternatives: complete. Settlement compares each authored production opportunity against current demand, goal and plan support, recipe inputs, operational building condition and service capacity, material custody, local route cost, eligible adult labor, duplicate orders, repeat cadence, and direct Supply commitments for the same need. A pure bounded reasoner retains every option, direct rejection, fixed-point score, selection, and exact Production binding. Direct household food delivery takes precedence over ration transformation, preventing the strategy from consuming labor already needed to provision homes.
  44. Settlement definition schema 13 owns production visit and selection limits plus optional need-domain activation. Settlement schema 14 owns the latest bounded decision, complete physical evidence, cross-portfolio coordination count, exact Production order binding, and cadence. Supported schema 13 saves migrate with no invented production decision or order.
  45. App applies a selected option through one atomic candidate transaction: Settlement records the decision, Production creates the normal order, Work creates its job and tasks, and Settlement binds the exact Production identity and revision. Existing Village Economy scheduling claims and advances the order through current Actor, Resource, Building, Work, and Production owners. Dependency-plan production requirements bind only to their selected option and complete only when that exact Production order reports completion.
  46. Runtime API 1.19 adds world.settlement.production-options. It returns detached recipe, building, material, output, quantity, condition, service-capacity, route, goal-support, direct-supply, score, rejection, selection, and exact Production-binding evidence. It cannot create or advance work.
  47. Q4B2 - independent Actor job choice: complete. Actor owns the latest bounded set of eligible alternatives, the selected job and source, complete personal scoring evidence, rejection or selection result, tuning version, revision, and causal history. Settlement supply, construction, and production schedulers use one data-authored fixed-point policy and the same personal fact derivation path. They score every visited eligible Actor before claiming work, preserve deterministic ties, and record the outcome only after the normal owner transaction succeeds.
  48. Settlement definition schema 14 owns the job-choice policy and twelve weights totaling 10,000 basis points. Actor schema 23 owns the retained choice ledger. Supported settlement schema 13 and Actor schema 22 saves migrate with the current default policy or an empty choice ledger without inventing past decisions.
  49. Runtime API 1.19 adds read-only world.actor.job-choices. It returns each retained alternative's work and source identity, eligibility, direct result, tuning version, score, selection, and raw urgency, capability, route proximity, resources, player priority, condition, danger, routine, household, learned preference, commitment, and recent-work facts.
  50. Q4B2 proof includes same-board residents making different choices, complete trace and policy retention, stale-result rejection, save and replay, schema migration, generational reset, Lua inspection, and a deterministic 3,000-tick unattended starter village with multiple Actors selecting different jobs from multiple demand sources at different times.
  51. Q4B2 passes all 926 development and registered smoke tests in 346.41 seconds, including the complete physical production, wage, purchase, surplus-custody, trade, crop-recurrence, household-pantry, expedition, headless, and graphical scenarios. The focused job-preference package passes 274 assertions in 11 cases, the pantry integration passes 1,252 assertions, the conserved crop integration passes 8,093 assertions, the complete market integration passes 5,570 assertions, and the two-run unattended choice proof passes. Strict analysis passes every changed production translation unit with diagnostics treated as errors. All 188 manual tests and 125 subtests pass. All seven API tests pass, and the generated Runtime API contains 232 symbols across 320 outputs. The retrieval index builds, checks, and validates at 849 nodes and 2,733 relationships.
  52. Q5 - household housing and parcel choice: complete. Household formation, crowding, condition, privacy, wealth, access, and expected dependents generate housing demand. The planner compares repair, extension, shared housing, and new construction, then selects a reachable parcel from current terrain, access, services, neighboring use, land ownership, material, and labor facts without an authored final coordinate.
  53. Q5A - household housing-pressure assessment: complete. A bounded rotating assessment combines each Household's current and forecast members, residence capacity and occupancy, building condition, privacy, access, wealth reserve, and expected dependants. Settlement retains a current per-Household ledger, latest visited batch, bounded batch history, severity, trend, confidence, strongest weighted cause, and exact source revisions without choosing a method or parcel.
  54. Settlement definition schema 15 owns the assessment cadence, visit and history bounds, private-capacity reserve, expected-dependant forecast, condition, privacy, access and wealth targets, six fixed-point weights, severity thresholds, and complete or partial evidence confidence. Settlement schema 15 owns the rolling current ledger and batch history. Supported schema 14 saves migrate without invented housing history and reopen the assessment cadence.
  55. Runtime API 1.19 adds world.settlement.housing-pressure. It pages the current Household ledger in stable identity order and optionally filters one Household. Every detached row reports current and forecast capacity, occupancy and sharing, condition, privacy, access, wealth, the six pressure components, status, severity, trend, confidence, direct reason, assessment tick, and owner revisions. It cannot choose a housing method, parcel, project, worker, or resident assignment.
  56. Q5A proof covers different current Household facts, bounded rotation with a retained complete ledger, formation forecast, residence loss and re-entry, worsening and improving trends, schema-14 migration, save and restore, deterministic replay, Lua paging and filtering, normal unattended assessment, and the absence of Work, Resource, Construction, Land, route, assignment, or parcel mutation.
  57. Q5B - housing method portfolio: complete. A bounded rotating comparison evaluates repair, capacity extension, compatible shared residence, and new construction for each visited Household. Current pressure, capacity deficit and gain, Building condition, cross-Household Relationship compatibility, exact material availability, uncommitted adult labor, route access, Household wealth, authored risk, and exact source revisions determine feasibility and a fixed-point score. Settlement retains every current option, its direct rejection or selection reason, the latest batch, and bounded history without choosing a parcel or starting physical work.
  58. Settlement definition schema 16 owns the Household and candidate visit budgets, history limit, eight fixed-point score weights, and data-authored method definitions. Each definition owns its pressure and compatibility thresholds, material and work scale, capacity or condition effect, fixed coordination work, wealth cost, risk, and optional new-building definition. Settlement schema 16 owns stable option identities, complete method evidence, current selection, latest assessment, and bounded history. Supported schema 15 saves reopen the need cadence and add no invented method assessment.
  59. Runtime API 1.19 adds read-only world.settlement.housing-methods. It pages the current option ledger in stable identity order and optionally filters one Household. Each detached row reports method and policy identity, target Building or definition, pressure, capacity, condition recovery, compatibility, materials, labor, access, wealth, benefit, cost, risk, score, result, explanation, and source revisions. It cannot select a parcel, create Work, move Resource, mutate a Building, or assign a residence.
  60. Q5C1 - land control and expansion substrate: complete. World land schema 3 retains an optional controlling Site independently of land dedication and use. Supported schema-2 land migrates with no invented control. The starter World contains two connected irregular settlement-expansion areas with different physical condition and control, but no selected building origin. The immutable content catalog supplies the reusable settlement land-use class. Runtime API 1.19 exposes control through world.land.areas without mutation authority.
  61. Q5C2A - bounded parcel candidate derivation: complete. World canonicalizes caller-supplied eligible land-use IDs, pre-rotated footprint variants, and current occupied cells, then derives stable composite area, origin, and variant candidates from current land, control, dedication, topology, landscape, and exact-local access facts. Independent area, origin, footprint-cell, path-query, and candidate budgets fail closed without a usable partial set. The result is detached, selects nothing, and adds no save state.
  62. Q5C2B - parcel comparison and selection: complete. App combines every complete World candidate for each currently selected new-construction method with current housing pressure, method score, road-service proximity, neighboring compatible land, material and labor readiness, Site control, access travel, and authored risk. A pure bounded Game reasoner retains one settlement-wide winner after direct service, neighboring-use, and travel gates; stable composite identities and source ordering provide deterministic ties.
  63. Settlement definition schema 17 owns candidate, World-search, proximity-cell, and history budgets; eligible land-use identities; service and neighboring-use thresholds and radii; maximum access travel; and nine fixed-point weights totaling 10,000 basis points. Settlement schema 17 owns the current exact footprint alternatives, selected composite key, direct rejection evidence, complete source revisions, latest assessment, and bounded history. Supported schema 16 saves reopen housing assessment without inventing a parcel choice.
  64. Runtime API 1.19 adds read-only world.settlement.housing-parcels. It pages the current option ledger in stable composite-key order and optionally filters one Household. Each detached row reports the source method, building definition, land area, exact origin and pre-rotated footprint identity, footprint size, access cell, housing and parcel score evidence, result, explanation, and owner revisions. It cannot claim land, start Construction or Work, move Resource, or assign a residence.
  65. Q5D - authoritative housing execution: complete. Settlement binds each current selected method once to one durable execution. Shared residence assigns the destination only through Household. Repair and extension enter the existing Construction renewal lifecycle for their target Building. New construction revalidates the exact selected World parcel, creates the normal Construction, Work, and Resource records atomically, and assigns the completed Building as the Household residence. Stale owner evidence becomes a retained blocker without partial physical mutation, while cancellation, failure, save, restore, and deterministic continuation retain one explained outcome.
  66. Settlement schema 18 owns the bounded housing-execution ledger, stable IDs, selected method and parcel provenance, exact Household, target Building, Construction and resulting Building bindings, current lifecycle, owner revision, explanation, timestamps, and high-water mark. Supported schema-17 saves migrate with no invented execution.
  67. Runtime API 1.19 adds read-only world.settlement.housing-executions. It pages stable execution records and optionally filters one Household. Rows expose every strategic source key, authoritative binding, lifecycle, source and owner revision, timestamps, and direct blocker or outcome. The query cannot start, cancel, or advance Construction, move Resource, create Work, mutate a Building, or assign a residence.
  68. Q5D proof covers exact selected-parcel binding, duplicate rejection, retained blockers, shared residence without Construction, extension through the existing target Building, completed new construction and residence assignment, cancellation, schema-17 migration, save and restore, deterministic continuation, and read-only Lua inspection. The focused package passes 3,190 assertions in five cases, and all 952 development and registered smoke tests pass in 1,542.78 seconds. Strict analysis passes the six changed production translation units with diagnostics treated as errors. All 188 manual tests and seven API Reference tests pass; Runtime API 1.19 contains 236 symbols across 324 outputs, and the manual index validates 852 nodes and 2,737 relationships.
  69. Q5E - visible and unattended housing closure: complete. The standard village panel uses the read-only Settlement housing queries to show assessed demand, the selected or blocked response, exact new-build parcel, durable execution status, direct explanation, and Household, target Building, Construction, or resulting Building bindings. It retains no simulation state and uses no separate housing path.
  70. Q5E proof starts repair, shared residence, extension, and new construction for four distinct Household identities solely through normal fixed-tick advancement. Repair and extension bind their existing target Buildings, sharing completes without Construction, and new construction binds the selected World parcel. The active new build saves, restores, and continues deterministically. A changed Household revision produces one retained blocker that the same standard interface explains. The focused Q5D and Q5E package passes 3,308 assertions in six cases, including 118 Q5E assertions in one multi-scenario case. Shared residence also revalidates current capacity immediately before assignment. All 953 development and registered smoke tests pass in 1,564.85 seconds, and strict analysis passes the changed production translation unit with diagnostics treated as errors. All 188 manual tests and seven API Reference tests pass; Runtime API 1.19 retains 236 symbols across 324 outputs; and the manual index validates 852 nodes and 2,737 relationships. The final complete DocForge graph validates 9,406 primary nodes, 38,542 primary relationships, 55,889 Logic nodes, 69,546 Logic relationships, and 3,003 Logic projections. The exact interactive binding is current at 842 nodes and 2,712 relationships.
  71. Q6 - spatial service, road, and district growth: complete. New parcels and facilities create access and service dependencies. World supplies bounded parcel and connection candidates; the planner coordinates roads, gates, wells, storage, fields, workshops, and public space while existing World, Infrastructure, Land, Construction, Resource, and Work owners execute every physical change.
  72. Q6A - bounded spatial connection candidates: complete. World derives deterministic road and access alternatives between typed current anchors from topology, navigation, occupied cells, landscape, and infrastructure facts. Every anchor, pair, path query, path cell, and accepted candidate is budgeted; incomplete work fails closed. Equivalent input order produces the same stable keys, existing exact roads and physical conflicts retain direct rejection evidence, and the result mutates no owner.
  73. Q6A proof passes 36 focused assertions in three cases and the existing 209-assertion infrastructure package. It covers canonical ordering, typed endpoints, path and navigation evidence, existing connections, occupied-path conflicts, every configured work budget, fail-closed results, and unchanged World state. The development build, all 188 manual tests, seven API Reference tests, 324 generated API outputs, manual-index validation, and strict analysis of the changed production translation unit pass. The complete DocForge graph validates 9,441 primary nodes, 38,667 primary relationships, 55,967 Logic nodes, 69,644 Logic relationships, and 3,010 Logic projections. The interactive binding is current at 842 nodes and 2,712 relationships.
  74. Q6B - spatial service and district portfolio: complete. Settlement compares missing access, water, storage, field access, workshop, and public-space coverage against current population, buildings, land, roads, materials, labor, travel, risk, and competing active work. It retains a bounded option ledger, one selection, direct rejection evidence, source revisions, reconsideration, and inferred district descriptions without using a district label as mutation authority.
  75. Settlement schema 19 retains the latest bounded spatial portfolio, bounded history, stable option keys, all owner-source revisions, coverage and readiness evidence, one deterministic choice, direct rejection reasons, and descriptive districts inferred from current anchors and services. Schema-18 saves reopen with no invented spatial decision. Focused Q6B proof passes 37 assertions in two cases; the broader Settlement package passes 1,159 assertions in 29 cases, including persistence, restore, migration, deterministic ordering, direct blockers, and unchanged physical membership.
  76. Q6C - authoritative spatial execution: complete. App revalidates the selected current alternative once. Roads, fences, and gates enter World and the existing Infrastructure Construction lifecycle; facilities use World parcel candidates and the existing Building Construction lifecycle; fields use existing Land conversion. Resource and Work retain all physical inputs and jobs. Settlement retains only the strategic binding and outcome.
  77. Settlement schema 20 owns a bounded spatial-execution ledger with stable IDs, exact option and service provenance, one authoritative physical owner binding, source portfolio tick, lifecycle, explanation, timestamps, and high-water mark. Schema-19 saves reopen without invented execution. App commits each cross-owner designation transaction only after every candidate owner accepts; duplicate or stale selection attempts leave all owners unchanged. Focused Q6C proof passes 54 assertions in two cases, and the broader Settlement package passes 1,181 assertions in 30 cases.
  78. Q6D - chained district and facility growth: complete. Normal settlement ticks derive current physical anchors and proximity-connected district descriptions, evaluate authored road, well, storage, field, workshop, and public-space methods, retain the complete current portfolio, and start at most one feasible owner-backed execution. Active work is reconciled before reconsideration; completion, cancellation, failure, or a retained physical blocker releases the next authored cadence without bypassing Construction capacity.
  79. Settlement definition schema 19 owns the Q6 cadence, settlement, execution, mutation, candidate, parcel, connection, and district budgets; service thresholds; score weights; eligible land uses; and physical method inputs. App derives only current cross-owner evidence and coordinates Q6C transactions. World, Building Construction, Infrastructure Construction, Land conversion, Resource, Work, Actor, and Building retain physical authority. Focused Q6D proof passes 63 assertions, and the broader Settlement package passes 1,181 assertions in 30 cases. It covers normal-tick selection, exact physical membership, competing-work deferral, cancellation and reconsideration, bounded active reconciliation with retained history, save, restore, and deterministic continuation.
  80. Formatting, the development build, strict production analysis, all 188 manual tests, seven API Reference tests, and the 852-node, 2,737-relationship manual index pass. The complete DocForge graph validates 9,551 primary nodes, 39,187 primary relationships, 56,516 Logic nodes, 70,399 Logic relationships, and 3,034 Logic projections after 135 AST invocations and 140 reparsed sources. The interactive binding is current at 842 nodes and 2,712 relationships for the exact checkout, project worldforge-docs, and adapter worldforge-readonly-worldforge@9.
  81. Q6E - visible unattended spatial closure: complete. Runtime API 1.19 exposes bounded read-only world.settlement.spatial-options, world.settlement.spatial-executions, and world.settlement.spatial-districts queries. The standard village panel reports current coverage, alternatives, selected service and location evidence, physical bindings, blockers, outcomes, and inferred districts without retaining simulation state.
  82. Q6E proof advances a settlement with four Household identities solely through normal fixed ticks. It completes two public-space facilities through their authoritative Building Construction owners in two distinct dynamically derived districts, without fixed final coordinates, player commands, or direct execution calls. The run saves, restores, and continues deterministically. The complete focused Q6 package passes 4,519 assertions in nine cases, and the script API, query, and standard-package package passes 3,212 assertions in 56 cases. All 962 development and registered smoke tests pass in 2,005.12 seconds. Strict analysis passes all four changed production translation units with diagnostics treated as errors. All 188 manual tests and seven API Reference tests pass; Runtime API 1.19 contains 239 symbols across 327 generated outputs; and the manual index validates 852 nodes and 2,737 relationships. The complete DocForge graph validates 9,553 primary nodes, 39,201 primary relationships, 56,517 Logic nodes, 70,400 Logic relationships, and 3,034 Logic projections after four AST invocations and five reparsed sources. The exact interactive binding is current at 842 nodes and 2,712 relationships for this checkout, project worldforge-docs, and adapter worldforge-readonly-worldforge@9.
  83. Q7 - specialization, enterprise, and trade feedback: complete. Sustained surplus, skills, tools, demand, route access, prices, and sponsor wealth open real production or trade commitments. Complementary support reinforces useful specialization; maintenance, depleted inputs, route loss, bad prices, and household costs close unsupported work through its authoritative owner.
  84. Q7A - retained enterprise and trade strategy: complete. Settlement schema 21 retains a bounded current portfolio and history across authored production and trade opportunities. Each option records current supply, demand, labor, skills and tools, maintenance, route cost, regional price, sponsor wealth, household cost, complementary support, owner revision, score, direct rejection, and selection. The pure reasoner is deterministic and App composes only detached evidence from the existing owners.
  85. Q7A proof passes 11 focused assertions in two cases and the complete Settlement and Village Life tagged packages. It covers simultaneous viable production and trade selection, deterministic ordering, route-loss rejection, maintenance rejection, owner revision retention, schema-20 migration without invented strategy, and normal fixed-tick evaluation.
  86. Q7B - authoritative enterprise execution and reconsideration: complete. The normal village economy visits only opportunities selected by the current Settlement portfolio. Started work remains owned by Production or Trade, and Settlement retains the exact owner kind, stable identity, revision, active or terminal status, and direct explanation. Reassessment preserves supported active commitments and transactionally cancels unsupported orders or shipments through their existing owner, Work, and Resource paths before another opportunity can replace them.
  87. Q7C - visible enterprise closure: complete. Runtime API 1.19 adds read-only world.settlement.enterprise-options. It pages current production and trade choices with supply, demand, score, rejection, selection, domain binding, and lifecycle evidence. The standard village panel reports active commitments and current blockers without retaining gameplay state. Settlement schema 22 persists binding lifecycle, and schema-21 saves reopen with no invented owner.
  88. Q7 proof passes 71 focused assertions in five cases. It covers simultaneous selection, retained active bindings, changed route and maintenance viability, revision-checked owner reconciliation, schema-21 migration, normal fixed-tick assessment, read-only Lua inspection, and unchanged session state after queries.
  89. Q8 - population attraction, stagnation, decline, and recovery: complete. Birth, household division, immigration, emigration, health, mortality, safety, housing, food reliability, work opportunity, wealth, and services respond to current settlement conditions. Growth is never guaranteed. The same systems support stable villages, expanding towns, stalled settlements, contraction, abandonment, and recovery.
  90. Settlement schema 23 retains a bounded population strategy and history with current source revisions; population and housing; food, wealth, labor, health, safety, service, enterprise, and prosperity evidence; recent natural and migration change; one named trajectory; and direct birth, immigration, and emigration decisions and reasons. Schema-22 saves reopen with no invented strategy.
  91. Normal generation advancement records the current Settlement strategy before applying demographic cadence. Births require an eligible adult household and viable settlement conditions. Immigration responds to recovery and labor opportunity only when the settlement can support arrivals. Emigration pressure responds to sustained shortfalls and decline while respecting the authored minimum population. Death remains an Actor health and life-event outcome rather than a strategic decision.
  92. Focused Q8 proof passes 63 assertions in three cases across growing, stable, stagnating, declining, recovering, and abandoned trajectories, deterministic ordering, persistence, migration, and bounded history. The broader Settlement package passes 1,181 assertions in 30 cases. The normal physical demography case and read-only Lua query case pass with strategy gating active. Runtime API 1.19 expands world.settlement.demography, and the standard village panel reports the retained trajectory and each current population decision and reason. Strict analysis passes the six changed production translation units. All 188 manual tests, seven API Reference tests, and the 852-node, 2,737-relationship manual index pass. The complete DocForge graph validates 9,623 primary nodes, 39,560 primary relationships, 57,165 Logic nodes, 71,265 Logic relationships, and 3,053 Logic projections after 138 AST invocations and 143 reparsed sources. The exact interactive binding is current at 842 nodes and 2,712 relationships for this checkout, project worldforge-docs, and adapter worldforge-readonly-worldforge@9.
  93. Q9 - visible strategy, player direction, and Lua control: The normal game shows active needs, forecasts, goals, sponsors, dependencies, job demand, parcel reasons, blockers, reconsiderations, outcomes, and recent causal history in the world and settlement interface. Player priorities, permissions, sponsorship, cancellation, and direct assignments enter the same command paths. Lua receives complete detached queries and authorized commands.
  94. Q9A - anchored player HUD frame: complete. A fixed top status strip and bottom command deck reserve a stable world viewport. Movable detail panels remain available but are constrained to the world area. World selection and contextual orders ignore docked interface space and retain correct viewport coordinates. Lua can declare bounded docks, row groups, spacers, separators, and compact statistics through detached presentation intent.
  95. Focused Q9A proof passes the script-package, viewport input, and SDL rendering packages. Runtime API 1.19 contains 250 symbols across 338 generated outputs, all seven API Reference tests pass, and the standard package composes four bounded panels from existing read-only queries. A 1,600 by 900 graphical run confirms that the fixed rails do not cover the world, movable panels remain inside it, and the simulation continues normally. All 188 manual tests and the 852-node, 2,737-relationship manual index pass. The complete DocForge graph validates 9,650 primary nodes, 39,657 primary relationships, 57,248 Logic nodes, 71,362 Logic relationships, and 3,062 Logic projections after 51 AST invocations and 58 reparsed sources. Interactive synchronization is current at 842 nodes and 2,712 relationships for this checkout, project worldforge-docs, and adapter worldforge-readonly-worldforge@9. The complete 973-test parallel run exposed two unchanged Phase 16 starter-village scenario failures outside the Q9A ownership path; both reproduce in isolation and remain recorded rather than being hidden by this UI slice.
  96. Q9B - interactive lists and direct explanations: complete. Lua packages can compose bounded selectable lists with unique stable row identities, optional detached values, semantic colors, selected state, progress, and visible-row limits. Activations return the exact row ID to handle_action(action_id, row_id?), while existing single-argument button handlers remain compatible. Full-width explanation paragraphs preserve complete decision and blocker text.
  97. The standard interface adds a movable village-alert list and replaces selected-villager previous and next work navigation with a direct jobs list. Both keep transient selection in the package, use existing read-only query records, and mutate gameplay only through existing commands. Focused proof passes 2,120 assertions in 28 script-package cases, 50 assertions in the standard village interface case, 194 assertions in 10 money and standard-interface cases, and 187 assertions in 15 SDL cases. Runtime API 1.19 contains 255 symbols across 343 generated outputs, all seven API Reference tests pass, all 188 manual tests pass, and the manual index validates 852 nodes and 2,737 relationships. A 1,600 by 900 graphical run confirms that the alert view and wrapped explanation remain inside the Q9A world frame. The complete 973-test run passes 971 tests in 610.73 seconds and reproduces only the two unchanged Phase 16 starter-village failures already recorded by Q9A. The complete DocForge graph validates 9,655 primary nodes, 39,684 primary relationships, 57,264 Logic nodes, 71,381 Logic relationships, and 3,063 Logic projections after 17 AST invocations and 20 reparsed sources. Interactive synchronization is current at 842 nodes and 2,712 relationships for this checkout, project worldforge-docs, and adapter worldforge-readonly-worldforge@9.
  98. Q9C - selection-panel states: complete. The standard interface gives empty, single-Actor, multiple-Actor, and Building selections distinct contextual states inside the anchored frame. Multiple selected Actors use stable selectable row identities and retain one transient focused row without mutating simulation state. Actor routine, needs, health, household, work, control, and direct command facts remain detached from their gameplay owners; Building identity, function, condition, lifecycle, and upgrade level come from the existing Building query.
  99. Q9C proof passes 2,141 assertions in 29 script-package cases and six direct standard-interface checks. Runtime API 1.19 contains 257 symbols across 346 generated outputs, all seven API Reference tests pass, all 188 manual tests pass, and the manual index validates 852 nodes and 2,737 relationships. Strict analysis passes both changed production translation units. The complete DocForge graph validates 9,655 primary nodes, 39,684 primary relationships, 57,264 Logic nodes, 71,381 Logic relationships, and 3,063 Logic projections after two AST invocations and three reparsed sources. Interactive synchronization is current at 842 nodes and 2,712 relationships for this checkout, project worldforge-docs, and adapter worldforge-readonly-worldforge@9.
  100. Q9D - settlement tabs and sheet: complete. The oversized settlement inspector has been removed from the selection panel. A centered settlement sheet opens and closes without gameplay mutation, leaves the fixed status and command docks live, and presents Production, Buildings, Jobs, Housing, Growth, and Trade as six directly selectable tabs. Each tab composes only its current detached owner facts and complete decision or blocker reasons. Lua packages can declare bounded tab strips and sheet geometry through documented Runtime API 1.19 contracts.
  101. Q9D proof passes 2,202 assertions in 30 script-package cases, including 54 direct open, six-tab switch, close, and mutation-isolation assertions. Seven focused CTest cases and the SDL sheet and reserved-viewport case pass. Runtime API 1.19 contains 263 symbols across 352 generated outputs. All seven API Reference tests, all 188 manual tests, and the 852-node, 2,737-relationship manual index pass. Strict analysis passes both changed production translation units. The complete DocForge graph validates 9,658 primary nodes, 39,696 primary relationships, 57,264 Logic nodes, 71,381 Logic relationships, and 3,063 Logic projections after 17 AST invocations and 19 reparsed sources. Interactive synchronization is current at 842 nodes and 2,712 relationships for this checkout, project worldforge-docs, and adapter worldforge-readonly-worldforge@9.
  102. Q9E - spatial surfaces, camera intent, and placement ghost: complete. The fixed command deck contains a bounded minimap that maps clicks to stable World cells and recenters the Render-owned camera without changing simulation state. Building selection enters package-owned placement mode with movement, rotation, cancellation, and a visible valid or blocked footprint. A read-only Construction placement query checks the authored oriented footprint against the current World grid and Construction occupancy. Final designation still uses the existing revision-checked Construction command.
  103. Runtime API 1.19 exposes bounded minimap, region-map, world-thumbnail, camera, ghost, placement-action, and placement-preview contracts. Invalid surface, camera, ghost, coordinate, footprint, and duplicate-intent declarations fail composition atomically. Q9E proof passes 2,254 assertions in 31 script-package cases and 187 assertions in 15 SDL cases. All 188 manual tests and all seven API Reference tests pass. Runtime API 1.19 contains 277 symbols across 368 generated outputs. Strict analysis passes all eight changed production translation units. The manual index validates 852 nodes and 2,737 relationships. The complete DocForge graph validates 9,670 primary nodes, 39,751 primary relationships, 57,309 Logic nodes, 71,434 Logic relationships, and 3,066 Logic projections. Interactive synchronization is current at 842 nodes and 2,712 relationships for this checkout, project worldforge-docs, and adapter worldforge-readonly-worldforge@9.
  104. Q9F - Empire view, event feed, and session flow: complete. The M shortcut opens a full-world regional map with movable region, route, resource, Faction, lens, and expedition inspectors. The V shortcut opens a movable five-tab event feed grouped by day; selecting an event with a retained site recenters the camera and displays its causal explanation. S, V, M, and escape use one interface shortcut owner, while active construction placement takes precedence for W, A, S, D, R, and escape. Title and exit choices render as modal dialogs, and exit confirmation reports the current day and time, resident count, previous save day, and unsaved days.
  105. Runtime API 1.19 adds bounded detached known-route, known-region, known-resource, Faction-standing, and expedition-record queries plus canvas and regional/event action contracts. ObserverKnowledge, World, Faction, ScoutingOrder, Party, Settlement, Actor, Work, Construction, ApplicationFlow, SessionSaveStore, and Render retain their existing facts and mutation authority. The standard Lua package retains only view, tab, lens, selection, and pending camera presentation state. Integrated graphical acceptance also corrected the original settlement atlas presentation dimensions so cottages, storehouses, workshops, and stockpiles retain their source proportions; the content test rejects another severe vertical compression of those frames. Q9 is complete; Q10 remains unopened until its separate unattended-divergence gate begins.
  106. Q9F proof passes 2,290 assertions in 32 script-package cases, 197 assertions in 16 SDL cases, the 760-assertion settlement-atlas content case, all seven API Reference tests, all 188 manual tests, strict analysis of all eight changed production translation units, and headless and graphical smoke. Runtime API 1.19 contains 300 documented symbols across 397 generated outputs. The complete sequential CTest run passes 979 of 981 cases; its only failures are the two retained Phase 16 starter-settlement cases already recorded before Q9. The required complete-graph refresh validates 9,682 primary nodes, 39,812 primary relationships, 57,310 Logic nodes, 71,435 Logic relationships, and 3,066 Logic projections. Interactive synchronization and bootstrap report current at 842 nodes and 2,712 relationships for this checkout, project worldforge-docs, and adapter worldforge-readonly-worldforge@9.
  107. Q10 - unattended divergence and live closure: A minimally authored camp with no resident-bound supply chain and no fixed project coordinate runs across multiple seeds into causally different stable, growing, stalled, declining, or failed settlements. Retained evidence proves conservation, bounded work, save, load, replay, cold continuity, scale, graphical watchability, API completeness, and explanation fidelity before Phase 20 can resume.
  108. Q10A - minimally authored autonomous camp: complete. Settlement schema 21 selects derived project placement for the starter village, which now starts without authored project candidates or a pre-opened workshop. Committed settlement goals authorize Spatial Growth methods; unsupported methods retain a direct rejection reason. The planner visits every committed goal without recreating an already completed plan for the same goal revision, and dynamic facility construction binds the matching ready plan in the same revision-checked transaction. World derives parcels while Construction, Work, Resource, Settlement, and World retain their existing mutation authority. The legacy authored-candidate path remains available to historical fixtures. Focused content, planning, spatial, save, restore, and deterministic continuation proof passed. Q10 outcome classification remains open.
  109. Q10B - retained multi-seed outcome classification: complete. Settlement schema 22 gives the starter settlement an authored maximum founder-priority variation. Scenario seed, Settlement identity, and goal identity deterministically adjust sponsor support inside that bound without consuming another random stream or changing physical mutation ownership. Continuity evidence schema 2 retains resident population, buildings, enterprise count, goals, plans, executions, needs, population strategy, and an authored building-growth threshold. It classifies stable, growing, stalled, declining, and failed outcomes from checkpoint facts and publishes one immutable campaign summary. Two consecutive three-seed, two-year runs repeated the same final hashes. Seeds 18,457 and 27,183 stalled after one additional building; seed 39,217 grew from six to eight buildings. The campaign retained two outcome classes and three final states. A long-run construction-observation fault found by the campaign was corrected so active owner revisions always retain a valid causal detail.
  110. Q10C1 - authored household provisioning and recovery: complete. Settlement schema 23 owns pantry restock thresholds and quantities, work urgency, stable work-marker allocation, meal relief, shortage strain, and recovery amounts. App no longer checks the starter scenario name to schedule provisioning, routine-aware work, infrastructure work eligibility, travel, meals, or social life. Definitions that provide the required routine and demography policies use the same composition. Resource retains food custody, Supply retains transfers, Work retains jobs, Actor and World retain movement, and Household retains meals and strain. The starter settlement begins with no resident Supply chain; normal ticks create and complete pantry deliveries, record conserved meals, reduce strain, and preserve the exact owner state through save and restore.
  111. Q10C2 - long-run conservation and selective-fidelity resilience: complete. Continuity schema 3 retains aggregate resource origin, one actual canonical save/restore replay interval, full checkpoint trajectories, macro outcomes, and final state hashes. Every checkpoint in two byte-identical three-seed, two-year campaigns retained 941 origin units. Each seed restored tick 0, replayed through tick 480, and reproduced the complete expected foundation and hash. Seed 18,457 remained stable at seven buildings; seeds 27,183 and 39,217 grew to eight through different plan histories. Household policy now uses smaller urgent restock lots and recovery that can overcome intermittent missed meals. All seeds ended with 160 food units, maximum household strain of 2,950 basis points, zero failed Supply chains, and ten active workers. Supply reconciliation retains every current pickup worker until the physical checkpoint completes instead of canceling all but one at routine boundaries. Focused cold-tier environment and farming packages pass. The current Release-preset 20,000-person benchmark passes all 125 assertions and its unchanged simulation, render, save, load, replay, and memory budgets.
  112. Q10D - graphical watchability, API completeness, and explanation fidelity: complete. The standard settlement sheet now uses the existing read-only need, supply, production, goal, plan, and Actor job-choice queries to state what the settlement and selected resident are choosing, why they chose it, and which owner fact blocks the next step. Autonomous construction derives input and output buffers from every compatible validated recipe, so a completed workshop can receive its full recipe and maintenance lot instead of remaining blocked at delivery. A final 1,600 by 900 Release run reached day 5 with ten residents and eight buildings while construction, production, and trade continued without player input or runtime errors. Retained village and explanation screenshots bind that run to seed 39,217. Q10 and Phase 19 are complete. Phase 20A is the next unimplemented gate.
  113. Remaining continuity slice contract: Each numbered slice below is one commit-and-proof boundary. A later slice extends retained facts through its owner; it does not add a parallel shortcut in App, a scenario branch, or a Render-owned gameplay value.
  114. Addendum L - land use and recurring farming: Five slices establish the World land owner before physical work, crop simulation, environmental response, and autonomous selection use it.
  115. L1 - authored land areas and crop contracts: Assets validates reusable crop and land-use definitions. World owns stable irregular connected cell areas, land cover, preparation, fertility, moisture, depletion, current crop, lifecycle stage, revision, and causal ticks. Validation, migration, owner mutation previews, inspection, and derived area presentation pass before any job can change the land.
  116. L2 - physical land conversion: Construction owns one revision-checked conversion proposal and its clearing and preparation stages. Work owns the demand, job, tasks, claim, and handoff. Actor and World own travel. Resource owns tool custody and every cleared by-product. Completion mutates the L1 World area; cancellation and worker loss release every commitment.
  117. L3 - conserved crop cycle: Sowing, tending, and harvest are separate physical Work stages. Resource conserves seed, tool use, crop output, and by-products in spatial containers. World advances only after the corresponding owner transaction succeeds, and Household food demand can consume the harvest through the existing provisioning path.
  118. L4 - weather, fertility, failure, and recovery: Environment and Ecology supply current season, weather, biome, and ecological pressure. Authored crop policy converts those facts plus World fertility, moisture, depletion, rotation, and fallow history into deterministic growth, yield, failure, and recovery. No global yield multiplier or crop-name branch is permitted.
  119. L5 - autonomous farming closure: Settlement food demand and Actor preferences select bounded crop and area candidates. Rotating cursors cover settlements, areas, jobs, and Actors. The normal interface explains choice, work, forecast, harvest, storage, shortage, failure, and recovery. Multi-seed, save, replay, conservation, cold-world, and unattended-cycle proof close addendum L.
  120. Addendum M - roads, fences, and maintained local infrastructure: Four slices establish persistent geometry before construction, enclosure, maintenance, and autonomous extension use it.
  121. M1 - persistent cell and edge infrastructure: World owns stable local infrastructure identity, cell or edge geometry, material, condition, access class, revision, and topology validation. Existing route infrastructure and new local geometry share one explicit boundary without converting Render collision into authority.
  122. M2 - physical road construction: Construction proposes road segments. Work performs clearing, hauling, laying, and finishing. Resource conserves aggregate, timber, tools, and by-products. World navigation reads completed condition to change traversal cost on the next legal path query.
  123. M3 - fences, gates, and enclosure: Construction and Work build edge-aligned fences and gates. World owns enclosure and traversability facts; access policy is referenced data, not a hardcoded Actor exception. Pathfinding, construction access, field access, and derived presentation agree.
  124. M4 - maintenance, decay, and autonomous extension: Environment and use change condition. Settlement demand can propose bounded repair or extension work from current travel, field, safety, labor, and material facts. Broken roads lose their modifier; broken fences lose enclosure effects; repair conserves inputs and survives save, replay, worker loss, and distant simulation.
  125. Addendum N - landscape lifecycle and visual breadth: Four slices separate immutable appearance data, retained landscape state, derived presentation, and measured streaming breadth.
  126. N1 - appearance families and deterministic placement: complete. Assets validates reusable tree, bush, rock, stump, ground, path, fence, and crop appearance families. World-authored cluster and terrain facts produce stable per-cell variation without storing pixels or random render choices as truth.
  127. N2 - harvest, stump, regrowth, and clearing: complete. World and Ecology own plant identity, maturity, harvest state, stump state, and regrowth. Resource owns timber, forage, stone, and clearing by-products. Work and Actor movement perform each physical interaction.
  128. N3 - terrain response and field presentation: complete. Cleared ground, trampling, paths, field stages, rocks, fences, and regrowth are derived from current World facts. Assets supplies validated atlases and frames; scene composition and Render select, cull, and depth-order them only. Save and replay reproduce the same visible landscape from simulation state.
  129. N4 - breadth, streaming, and performance closure: complete. Authored clusters cover nine chunks with varied density and no starter-only runtime branch. World residency excludes cold features from presentation while retaining their authoritative state. Camera culling reuses render-owned scratch, atlas status reports exact candidate, visible, and draw counts, and every derived feature carries a deterministic validated fallback frame.
  130. Addendum O - generational appearance: Four slices separate Actor-owned inherited appearance, Assets composition contracts, owned clothing and condition facts, and automated breadth proof.
  131. O1 - stable inherited appearance record: complete. Actor owns one versioned appearance record created by an authored generator policy. Birth combines parental traits through an explicit random stream; immigration uses the same population policy; legacy migration is deterministic. The record is independent of sprite names and survives life-stage changes.
  132. O2 - life-stage body composition: complete. Assets validates child, adolescent, adult, and elder body, face, hair, skin, and age-layer families with compatibility rules. Render derives a deterministic composition from Actor appearance and life stage. Growth changes presentation without replacing Actor identity or lineage.
  133. O3 - clothing, work, and condition layers: complete. Resource custody determines carried work tools and hunting spears; Actor supplies current work, injury, and illness; World supplies local weather; Assets validates compatible visual layers. App replaces one detached semantic mask each frame and Render draws only the selected asset-authored layers without new profession, wealth, health, weather, or inventory authority.
  134. O4 - automated breadth and fallback proof: complete. An immutable source manifest rebuilds and byte-checks the generated river-community atlas and its derived metadata. Asset-authored tint buckets and body and face ranges turn inherited traits into three atlas choices, bounded modulation, and readable proportions. Exhaustive combination proof measures visible breadth and finite batch keys; family, invalid-input fallback, serialization, and the unattended starter-village birth and immigration path reproduce the same derived signatures.
  135. O4 long-run closure also requires each arrival to fit its assigned residence, prevents World condition wear from invalidating a nonterminal infrastructure project, and keeps terminal construction history valid after later monotonic World condition revisions.
  136. Addendum P - unattended continuity and balance closure: Five slices separate deterministic accelerated proof, balance and recovery, scale and persistence, graphical watchability, and the release checkpoint.
  137. P1 - accelerated deterministic year harness: complete. The normal starter settlement runs for authored accelerated years without player commands. A bounded headless runner records food, housing, labor, health, Household, population, production, Trade, land, infrastructure, Ecology, recovery, owner event counters, canonical save sizes, and state hashes at each checkpoint. Two independent runs of seed 18457 and the same immutable configuration produced byte-identical evidence across 3,840 ticks. A separate forced invariant failure retained its complete bounded artifact and exited nonzero.
  138. P2 - feedback and recovery balance: complete. Four typed profiles and twelve retained unattended runs exercise surplus, shortage, weather loss, worker death, immigration and emigration, depleted land, broken infrastructure, and trade interruption. Authored starting facts and policies drive normal owners; the verifier requires causal pressure, recovery, and continued-work signals without requiring one population curve or guaranteed growth.
  139. P3 - scale, persistence, and selective-fidelity proof: complete. A Release-preset 20,000-person world partitions stable identities across three Settlement records, visits one settlement per rotating window, applies one bounded RegionalEconomy mutation per remote update, and keeps 19,424 Actors compressed. The retained run stays within authored simulation, render, resident-memory, save-size, save-time, load-time, and replay budgets. A remote Actor promotes, advances physical route work, demotes, and preserves identity, Resource state, Settlement membership, scheduled work, and route outcome through the final save, load, and replay.
  140. P4 - multi-hour watchability soak: complete. The normal Release game ran without input for 7,500,010 wall-clock milliseconds and 150,000 simulation ticks. Six distinct graphical frames, 16 canonical saves and owner summaries, and the complete recorder log retain work, home life, social contact, meals, farming, construction, landscape change, births, deaths, migration, failure, and recovery. The final frame is an explicitly labeled normal graphical restore of checkpoint 14 and is bound to that save's wall time, state hash, and SHA-256 because the final live capture completed after automatic shutdown.
  141. P5 - continuity release checkpoint: complete. Development, Release, dedicated headless, sanitizer, retained P1 through P4 evidence, API, manual, complete DocForge graph, and interactive binding proof pass from one candidate. The dedicated headless preset also owns the platform-neutral world-indicator layout helper it tests, so it no longer relies on a graphical-only source set. The continuity program is closed and Phase 20A is the sole active gameplay gate.

Implemented at Gate Close

  • Workshop operation, autonomous projects, regional pricing and trade, earned capability, specialization, outposts, wages, saving, and purchases all use the existing authoritative owners and retain explicit causal evidence.
  • The closure proof moves one settlement from flourishing to declining when capability and outpost maintenance lapse, then back to flourishing after normal Resource and Settlement recovery operations restore those facts.
  • Prosperity snapshots are derived, non-persistent views. They cannot grant capability, move resources, change topology, complete work, or become a settlement-tier mutation path.
  • Save and restore reproduce the same prosperity result from retained Settlement state and supplied economic facts. Resource accounting remains conserved across depletion and replenishment.
  • Regional evaluation visits only the requested canonical cursor window under an explicit budget, reports deferred settlements, and resumes deterministically from the returned cursor.
  • The starter settlement now runs a visible daily loop. Actor retains each planned and actual routine choice, Work retains job claims, Household retains residence assignment, Construction supplies the completed residence footprint, World owns exact local travel, and App composes the bounded work-to-home handoff.
  • Landscape lifecycle policy now supplies the required work, retained stump or cleared appearance, conserved output bundle, renewal delay, and maximum ecology pressure for trees, bushes, and rocks. One App transaction composes the existing owners: Work retains the two-stage graph and feature reservation, Actor retains exact-cell and storage travel, Resource retains physical production and custody, and World commits only after every preflight succeeds.
  • World landscape schema 2 retains feature kind, lifecycle policy identity, stage, maturity, harvested appearance, renewal deadline, ecology threshold, last harvest tick, update tick, and revision. World runtime schema 15 migrates the schema 14 standing landscape deterministically. Regional renewal visits each retained feature once per world advance and reports visits, regrowth, and ecology blockage without a second scheduler or save owner.
  • Actor appearance schema 1 retains a stable generation key and five inherited trait indexes through birth, immigration, aging, save, restore, and legacy migration. Current life stage derives child, adolescent, adult, or elder scale without replacing that record.
  • The villager atlas validates eight life-stage-compatible semantic presentation layers. App joins visible Actors to actual carried work tools and hunting spears, current work, injury, illness, and local weather on every detached capture. Render draws only the selected asset geometry; removing an item or changing an owner fact changes the next frame without saved presentation state.
  • Runtime API 1.19 extends world.actor.info with current work, carried equipment, injury, illness, and local-weather facts so Lua packages can inspect the same source-owner inputs without sprite or mutation authority.
  • Selected-resident status shows the current day and time, planned activity, actual activity, decision reason, and whether the resident is accepting new work.
  • The starter region now contains 46 oak stands and 28 berry bushes in nine authored clusters. The ordinary launch view includes the nearest woodland edge.
  • Residents travel to stable reachable positions around owned operational buildings for work, meals, breaks, care, and social gatherings. Work and cargo remain with their existing owners through every handoff.
  • Small activity markers distinguish work, break, meal, and social behavior. A resident is hidden indoors at night only after exact home arrival, and the derived presentation reports inside occupancy.
  • The ordinary debug and release launch loads only the standard player interface unless development addons are requested explicitly. Before selection, that interface reports the current village and active Construction project from bounded detached queries. Its priority action submits the existing revision-checked Work command rather than changing Construction or Actor state directly.
  • Selecting a resident now adds the authored profession to the existing identity, Household, routine, need, destination, and current-work explanation.
  • Each starter resident completes at most one retained social encounter per day. The App composer prefers an available known non-estranged partner, creates exact witnessed memories for both participants, applies a Relationship change, and relieves Actor-owned companionship pressure only after every candidate owner accepts.
  • Runtime API 1.10 exposes paged world.actor.relationships and newest-first world.settlement.social-chronicle queries. The standard package formats those detached facts as named relationships and recent encounters without owning social truth.
  • Parentless authored residents begin as adults, while a born Actor retains both parents and a nonzero birth tick, uses personal time during adult work windows, and remains outside settlement work until adulthood. The initial addendum E proof exercised one partnered Household, birth, immigrant, living emigrant, and age death before recurring demographic eligibility was added.
  • Partnership moves two residents from separate Households only after usable housing is available. Household owns the new membership and residence, Resource owns its money custody, and Settlement retains the Household membership. A birth or arrival extends World, Actor, ControlAuthority, Relationship, Household, Reputation, Resource, and Settlement candidates before any owner commits.
  • Adult immigrants enter the Settlement-derived work roster and ordinary routine. Living emigration uses the existing Work, Resource, Actor, Household, Settlement, and World transaction and retains identity and wallet state outside the active settlement. Age death uses the existing life-transition transaction, conserves the wallet into Household custody, and removes only current memberships.
  • Runtime API 1.11 exposes world.settlement.families and newest-first world.settlement.life-events. The normal village interface shows life-stage totals plus retained partnership, birth, migration, and death summaries without owning those facts.
  • Runtime API 1.12 adds physical pantry quantity, Household strain, latest care, and latest domestic Work to world.settlement.families. The normal village interface reports home reserves, strained families, and current household activity without owning those facts.
  • Four home pantry containers are spatially bound beside the two starter longhouses. Low reserves create one-shot stockpile-to-Household material jobs. Resource owns the transfer, Work owns the retained job, Actor and World own the trip, and Household owns meal care and strain history.
  • The completed starter workshop creates one retained production order. Its worker claims normal Work, hauls reserved timber, completes both recipe steps, and moves the finished tool into business inventory. Conserved currency then pays the worker, enters Household funds, and returns to the business in an atomic tool purchase.
  • A two-person merchant Party creates one priced physical timber shipment. Work retains separate pickup and travel tasks, Actor and World retain the trip, Resource retains cargo custody, and Trade completes only after arrival at the regional destination stockpile.
  • Runtime API 1.13 exposes world.settlement.economy. The normal village interface reports workshop state, wages, household goods, merchant progress, and delivered timber from detached owner facts.
  • World Environment and Ecology remain the only owners of current weather, pressure, wildlife, and renewable quantities. Actor derives a regional routine context from those facts. Existing active commitments finish their physical step, while uncommitted residents shelter from storms or conserve depleted wild resources instead of claiming new outdoor work.
  • Runtime API 1.14 exposes world.settlement.environment. The normal village interface reports weather, pressure, resident response, outdoor-work availability, wildlife, and renewable availability from detached owner facts.
  • Hazardous weather now records a bounded environmental contribution within Household strain. Meal care cannot erase that contribution, and the next safe regional weather epoch removes it through a distinct retained Household recovery reason.
  • Runtime API 1.15 extends world.settlement.environment with stable, disrupted, and recovering household condition, affected Household counts, and total retained environmental strain. The normal village interface reports Household resilience without owning weather or Household state.
  • The settlement definition now owns a validated economic policy with bounded proposal cadence, opportunity visits, Actor evaluation, and owner mutation budgets. Its production and trade entries reference registered recipes, buildings, resources, containers, Sites, Settlements, and Routes rather than starter-only performer identities.
  • App selects an eligible adult resident from current routine, capability, route, Resource, Work, and job-preference facts. Production moves physical inputs through normal Work and Actor plans, pays conserved wages, contributes to Household funds, and completes a conserved Household purchase. Trade derives a current regional quote, forms or reuses a valid two-person Party, and delivers physical conserved cargo.
  • Production schema 3, Trade schema 4, and Resource schema 9 retain owner-issued order, shipment, and custody-transfer high-water marks. Resource custody records retain their causal Work marker. Previous schemas migrate without inventing historical transactions, and retries resolve by stable cause rather than caller-selected IDs.
  • Worker death, emigration, or settlement departure cancels the affected nonterminal chain through its existing owners. Work claims, reservations, Actor plans, and Resource allocations release before a replacement is selected from the remaining residents.
  • Runtime API 1.16 exposes the configured production and trade opportunity keys, current stage and worker, completed cycle counts, Household output, delivered cargo, and current blockage as detached facts. The standard interface reports these generic facts without assuming tools, timber, or fixed Actors.
  • The development build, all 835 registered tests, all 187 manual tests, generated API validation, and focused clang-tidy across every modified production source pass. Integration proof covers multiple production cycles, physical trade, conserved wages and purchases, two seeds, departed-worker replacement, save/load, and same-seed replay. The 310-unit complete DocForge refresh performed 176 AST invocations, reparsed 185 changed or dependent sources, and published 8,170 nodes, 32,902 relationships, 46,160 Logic nodes, 56,679 Logic relationships, and 2,649 Logic projections. The interactive binding synchronized current with the exact project root, project worldforge-docs, and adapter worldforge-readonly-worldforge@9.
  • Settlement schema 7 owns a validated demographic policy with food identities, population bounds, event intervals, eligibility thresholds, owner visit budgets, mutation budget, and Resource container capacities. The starter settlement is one authored policy instance; the recurring composer has no scenario-ID or Actor-ID branch.
  • Actor owns monotonic new identities, lineage, birth, immigration, emigration, life stage, and death facts. Relationship schema 3 owns durable partnership time. Household schema 9 owns formation reason, partnership changes, separation, membership, residence, care, and strain. Existing World, ControlAuthority, Reputation, Work, Resource, and Settlement owners accept or reject each complete candidate before App swaps any state.
  • Every demographic evaluation rotates through authored Household, Relationship, and Actor visit windows and applies no more than the authored mutation budget. Births require partnered housed adults, current health, food, and Household wealth or surplus. Immigration responds to population and labor recovery bounds. Household strain, food, housing, and population pressure can cause living emigration. Elder mortality is seeded and age-dependent. Death conserves wallet contents through Resource-owned inheritance.
  • Worker death, emigration, or departure remains subject to safe Work checkpoints. Valid Household evidence survives later membership change, so death and migration do not invalidate the retained reason a Household formed.
  • An Actor in an active Party is ineligible for partnership, separation, birth-parent, emigration, and mortality selection. Expedition and Party movement retain that Actor until their active lifecycle ends; demography does not replace its plan or membership while another owner has the commitment.
  • Runtime API 1.17 adds world.settlement.demography. The normal village interface reports population and labor, Household and housing totals, accessible and required food, retained demographic events, current condition, and the exact growth blockage without owning simulation state.
  • Settlement schema 8 owns validated routine windows, personal timing bounds, daily variation, and recent-worker scoring policy. Actor derives stable personal cadence plus deterministic day variation from its own facts, while needs and retained commitments still override the planned window.
  • Repeated production applies the authored recency penalty before stable tie-breaking. A completed Trade delivery disbands its Party and starts the merchant's normal Actor and World route back to the source settlement. Remote residents are not eligible for demographic departure until they physically return.
  • Runtime API 1.18 adds each Actor's stable routine timing offset to world.actor.routine. The normal interface reports whether the selected resident tends to start earlier or later than the village baseline.
  • Individual-cadence, recurring-work rotation, complete merchant return, emigration cleanup, save, restore, and same-seed proof pass without fixed Actor identities or a starter-scenario branch in routine evaluation.
  • Non-arrived inter-Site route travelers remain owned and advanced by World but are excluded from the local Actor render and selection snapshot. The detached render work record reports them as in transit, so a regional merchant no longer appears to walk indefinitely beyond the village while completing the same outbound and return routes.
  • Focused recurring-life, pressure, and expedition-protection proofs pass 436 assertions across growth, adult transition, immigration, age death, inheritance conservation, save and restore, deterministic decline, authored population limits, Household integrity, and three remote Party lifecycles. The complete development suite passes all 836 tests in 183.03 seconds. Development and release builds, generated API validation, all 187 manual tests, and focused clang-tidy with diagnostics treated as errors pass.
  • Assets schema 2 validates reusable land-use and crop definitions, including crop permission, harvest Resource references, and compatible land-use identities. World schema 12 owns stable irregular connected cell areas, land cover, preparation, fertility, moisture, depletion, optional crop, lifecycle stage, revision, and causal ticks.
  • Revision-checked World mutation previews reject stale or contradictory land changes without partial state. Current saves retain the complete area state; older supported World schemas migrate with no invented land areas.
  • The starter settlement authors one growing barley field and one pasture as connected non-rectangular cell sets. Render colors each resident cell from detached World facts, and Tools inspection reports the retained areas without becoming a second owner.
  • Runtime API 1.19 adds paged world.land.areas rows in stable area and cell order. An optional area_id filter narrows the detached result without granting write authority.
  • Economy schema 19 authors land-conversion opportunities by stable area, container, tool, by-product, and work-policy identities. The starter village now retains one irregular wild woodland area as a conversion candidate rather than receiving a finished field from runtime code.
  • Construction owns each revision-checked conversion proposal and its clearing and preparation progress. Work owns the four-task claim and handoff graph, Actor and World own exact travel, Resource owns physical tool and by-product custody, and World alone applies the cleared and tilled land conditions.
  • The saved land-conversion scheduler visits bounded rotating conversion and resident windows, ranks residents through the existing construction capability policy, respects routine and retained commitments, and advances no more than its authored mutation and work budgets. It contains no starter-scenario or Actor-identity branch.
  • Cancellation before delivery releases every reservation without changing World land. Worker loss after delivery preserves completed stage work and physical land storage so another eligible resident can continue. Current saves retain the conversion, scheduler cursors, budgets, counters, and causal owner records; supported previous schemas migrate without inventing a conversion.
  • Runtime API 1.19 extends world.land.areas with detached conversion stage, current worker, completed work, and required work. The same ground presentation changes from woodland to cleared ground and then tilled soil only when the retained World mutations complete.
  • Economy schema 21 authors crop-cycle seed, tool, harvest, by-product, work, growth, environmental response, fallow recovery, and bounded scheduler policy without performer identities. Farming owns the cycle, deterministic forecast, and stage progress; Work owns claims and handoffs; Actor and World own travel; Resource owns physical custody; World alone advances crop and soil condition.
  • The starter barley field begins as prepared soil. Independently selected residents carry conserved grain seed and a reusable tool, sow the field, wait through retained growth intervals, tend it, and harvest exact grain and straw into the area's spatial output container.
  • Current saves retain the complete Farming state and scheduler cursors, budgets, and counters. Worker loss after input delivery reopens the same retained stage without reserving seed or tools again. Runtime API 1.19 reports crop stage, worker, stage work, and growth readiness through world.land.areas.
  • Current Environment season, regional weather, biome, environmental pressure, Ecology population pressure, and World fertility, moisture, and depletion feed one validated crop policy. The same retained facts always produce the same forecast and scaled conserved output.
  • Failed crops produce no invented grain or straw. World retains the failed crop, authored soil costs, and later fallow recovery. Runtime API 1.19 reports the latest outcome, yield, direct reason, and completed-cycle count through world.land.areas.
  • Economy schema 22 authors a settlement food target, stockpile and Resource identity, rotating settlement visit budget, and replant delay. Farming schema 3 retains completed cycles, next replant time, last worker, choice reason, blockage reason, and physical output-storage progress. Phase 3 economy schema 23 persists those facts and migrates supported earlier farming and scheduler states with recurrence disabled.
  • The bounded Farming scheduler visits settlements, crop areas, and available residents independently. Current food shortage opens only a due reusable area with available seed and tool custody. The existing Actor capability policy selects the current worker without a scenario or Actor identity branch.
  • Harvest and reusable tools move from the World area's Resource output through the selected Actor's carrier into the authored settlement stockpile before Work and Actor completion. Failed output returns its tool before fallow recovery. A later shortage can reset the same World area and create a new Work graph under the retained Farming identity.
  • Runtime API 1.19 now reports next replant time, last selected worker, current choice reason, and current blockage reason with every detached land-area row. Multi-seed unattended runs open repeated cycles within saved scheduler budgets, while a cold settlement with no eligible Actor retains a bounded shortage explanation instead of inventing work.
  • World schema 13, infrastructure schema 2, and land schema 2 retain stable local road cell paths, fence and gate edges, typed building, landmark, land-area, settlement, and regional-connection anchors, material, access policy, lifecycle, condition, revision, and causal ticks. Supported previous schemas migrate without inventing local plans or dedication.
  • Land dedication applies to complete connected irregular areas. Each food-growing or grazing area retains its responsible Site and one or more preferred road or gate access cells, so later enclosure planning starts from a useful field boundary rather than one selected tile.
  • The starter settlement owns five planned road connections between homes, the well, the granary, a dedicated growing area, and its regional connection. World validation rejects disconnected paths, invalid or overlapping edge boundaries, bad anchors, and stale revisions transactionally.
  • Runtime API 1.19 adds world.infrastructure.local with stable-identity paging and extends land rows with dedication and preferred-access facts. Focused owner, content, query, persistence, and 20,000-record paging proof passed. All 862 development tests, all 187 manual tests, focused production clang-tidy, and generated API validation passed.
  • Infrastructure construction retains revision-checked road projects through awaiting claim, pickup, hauling, clearing, laying, finishing, handoff, completion, cancellation, and worker-loss recovery. Work owns its demand, job, task graph, claim, and handoff; Actor and World own travel; Resource owns reserved, carried, delivered, returned, and consumed custody; World alone changes the retained road lifecycle and condition.
  • The bounded infrastructure scheduler rotates through authored projects and current eligible residents. It refreshes released Work capacity before selection, so work completed earlier in the same tick can supply a later infrastructure claim without a compiled resident identity or fixed quota.
  • A completed road applies its authored, condition-scaled traversal reduction on the next legal local path query. Cancellation before or after delivery restores the planned World record and returns every reserved or delivered item to the authored stockpile. Worker loss preserves completed stage work and reopens the same project for another resident.
  • Infrastructure schema 3 retains the authored travel reduction. Economy schema 23 authors project inputs, tools, output custody, stage work, and bounded scheduling; Phase 3 economy schema 24 persists the complete project and scheduler state and migrates supported schema 23 saves without inventing construction.
  • Runtime API 1.19 adds paged world.infrastructure.construction records and revision-checked command.infrastructure.cancel. Existing Work priority and assignment commands operate on the reported job identities, so scripts can inspect, direct, or cancel construction through the owning services rather than mutating detached state.
  • Focused infrastructure and Lua command proof passes 1,959 assertions in 29 cases. The 106-case settlement integration set passes 53,863 assertions, including unattended starter completion, bounded visits, saved state, condition-scaled navigation, resource conservation, cancellation, and handoff.
  • The starter village retains a complete 18-edge boundary around its dedicated growing area: one gate and the remaining fence edges. Residents build both through the M2 Construction, Work, Actor, Resource, and World path using authored per-edge material, storage, and stage-work policies.
  • World derives enclosure, field access, and blocked local edges from the current complete area boundary, operational fence and gate geometry, condition, and referenced access policy. Closed gates and fence edges prevent legal diagonal bypasses; opening a gate policy changes the next path query without a Render or Actor exception.
  • Infrastructure schema 4 retains validated access-policy records. Economy schema 24 authors fence and gate construction scale. Supported infrastructure schemas migrate with the public policy required by their retained local records and do not invent local geometry.
  • Fence and gate lines are detached presentation derived from operational World edges. Runtime API 1.19 adds world.land.enclosures, extends world.infrastructure.local with policy permissions, and adds revision-checked command.infrastructure.set-access-policy. Existing construction cancellation, Work priority, and Work assignment commands apply to fence and gate projects.
  • Focused enclosure, construction, navigation, presentation, persistence, Lua query, Lua command, and unattended starter proof passes. The generated API Reference documents 222 runtime symbols across 308 files, including complete usage and examples for enclosure inspection and gate-policy control.
  • Infrastructure condition advances from authored environmental pressure and current local use through bounded rotating World visits. Broken roads immediately lose their traversal benefit and broken fences immediately lose their enclosure effect without a Render-owned repair.
  • Settlement evaluates retained damaged, broken, and proposed infrastructure through authored material, labor, field, route, and condition policy. It records one explainable repair or extension decision and asks Construction to create the corresponding owner work without compiled infrastructure or resident identities.
  • Construction schema 2 distinguishes build and repair, retains the restored World stage and condition, and preserves progress through save, worker loss, cancellation, and reassignment. Resource eligibility uses unreserved physical stock; completion consumes only authored inputs and restores the World record through revision-checked mutation.
  • Runtime API 1.19 adds world.infrastructure.maintenance and command.infrastructure.request-work. The infrastructure-control guide documents inspection, autonomous evidence, repair or extension direction, construction tracking, priority, assignment, cancellation, and access-policy control while retaining owner validation.
  • Focused condition, repair, cancellation, conservation, autonomous starter, persistence, query, and command proof passes. The generated API Reference validates 224 runtime symbols and 311 generated artifacts. Strict clang-tidy passes every changed production translation unit with diagnostics treated as errors. Complete development, manual, DocForge, merge, and publication proof is retained in the slice history.

Population and Scale Goals

  • Index production, demand, inventories, projects, contracts, prices, and trade candidates by settlement, region, route, and resource family.
  • Keep exact local transactions while distant economies advance through conserved regional flows and bounded market summaries.
  • Prove several settlements with distinct specializations, simultaneous projects, trade pressure, and decline or recovery without global per-Actor economic evaluation.

How To Build It

  • Register content through existing resource, recipe, building, job, route, and obligation schemas.
  • Keep every material conserved and physically located. Prices, priorities, and forecasts are derived views over owned facts.
  • Require each progression gate to express what changed in the world and why the player earned access.
  • Keep capability profiles derived. Building definitions register services, inputs, outputs, capacity, work, maintenance, risks, ownership, and alternatives; they never mutate a settlement tier directly.
  • Use need facts, proposal definitions, hard gates, and bounded IAUS ranking to select projects. Existing Construction, Work, Resource, Household, Trade, and Settlement owners execute the accepted result.
  • Keep the continuity program within completed Phase 17-19 owners. It does not introduce office, law, tax, fealty, title, treasury, institutional, diplomatic, or polity authority.
  • After addendum P passes, Phase 20 may open the feudal governance path: people hold offices, households hold land or obligations, institutions retain authority, and a kingdom forms as a network of settlements and relationships rather than as a settlement label.

Practical Guidance

  • Contrast a trade-oriented river town with a resource-oriented inland settlement using the same definitions and owners.
  • Make every production chain answer which settlement or household problem its output solves.
  • Include an impressive but unsustainable project to prove ambition can create real decline.

Must Have

  • Strategic construction, production, and trade choices that change settlement life rather than only increasing counters.
  • Physical logistics and risk across the connected world.
  • A readable progression arc that extends existing owners and remains data-driven.
  • Autonomous, explainable, non-linear development with real opportunity cost, maintenance, regression, failure, and recovery.
  • Personal, household, and business wealth with explicit owner, custody, and transaction history.

Scheduled Optional Work

Scheduled Deferred Work

Exit Criteria

  • The player can grow the starter settlement through a useful production chain, a consequential building decision, and one regional trade relationship.
  • A shortage, route disruption, maintenance failure, or delivery loss changes real work and household outcomes without violating resource conservation.
  • Multiple settlements or outposts remain spatially indexed, bounded, saved, replayable, and readable.
  • At least two settlements reach different capability profiles through autonomous choices, and one settlement loses or recovers a capability through causal population, material, financial, infrastructure, or institutional change.
PHASE 20Governance, Institutions, Diplomacy, and Civic ConsequenceLet settlements form rules, leadership, institutions, and diplomatic relationships that arise from people and materially affect daily life.Current gate

Phase: Phase 20

Gate status: Current gate

Depends on: Phase 17 proves households and life continuity, Phase 19 proves mature settlement and regional economy, and completed memory, reputation, relationship, quest, diplomacy, and institution owners remain intact.

Activation Contract

  • Ready, not started: Phase 19Q1 through Q10 closed the civilization-autonomy product gate. Phase 20A is the next implementation gate. Formal authority must influence the functioning settlement planning loop; it must not substitute for one.
  • Enters with: stable households, conserved private and business wealth, multiple settlements, trade and obligations, persistent knowledge, memory, reputation, relationships, and existing institution and diplomacy owners.
  • First vertical proof: one legitimate office or council applies one bounded policy to existing work or resources and later survives an officeholder change without losing its obligations.
  • Does not open: full narrative campaigns, world war, omniscient politics, global faction scores, unconserved account money, or a kingdom represented only by a settlement label.
  • Closes with: leadership, policy, justice, evidence, durable institutions, public and trusted finance, diplomacy, a bounded polity, succession, failure, fragmentation, and cold institutional continuity.

Required Work

  • Define leadership legitimacy, offices, succession, civic roles, policies, obligations, sanctions, mercy, and institutional memory from existing people and settlement facts.
  • Add public finance through settlement treasury, taxes or contributions, budgets, reserves, authorized spending, audits, theft or corruption risk, and explicit public-project sponsorship.
  • Add bank or trust institutions only after Phase 19 physical money and transactions are stable. Deposits remain claims backed by institutional liabilities and reserves; withdrawals, transfers, loans, default, failure, and recovery preserve ownership and conservation.
  • Add theft, violence, neglect, disputes, care, ritual, and public service as incidents judged through knowledge, evidence, relationships, reputation, policy, and authority.
  • Let institutions request work, resources, investigation, diplomacy, or aid through existing job, quest, trade, and incident lifecycles.
  • Expand inter-settlement diplomacy through trust, obligation, grievance, information, trade, aid, migration, and negotiated outcomes.
  • Let regional polities form from multiple settlements, offices, law, treasury, obligations, infrastructure, diplomacy, and defense. A kingdom is a network with continuity and fracture rules, not a city-size flag.
  • Keep private belief, public report, legal finding, reputation, and authoritative event truth distinct.

Internal Slice Order

  1. Phase 20A — Leadership and policy: prove one leader or council office, legitimacy, succession rule, and bounded policy effect.
  2. Phase 20B — Justice and evidence: prove one dispute or offense from incident through reports, evidence, judgment, sanction or mercy, and later memory.
  3. Phase 20C — Durable institution: add one institution that creates useful work and survives membership or leadership change.
  4. Phase 20D — Public and trusted finance: add one treasury-funded project and one bank or trust custody flow with transparent reserves, claims, failure handling, and succession.
  5. Phase 20E — Diplomacy and polity: add one inter-settlement obligation with success and breach outcomes, then prove a bounded multi-settlement authority relationship.
  6. Phase 20F — Civic closure: close explanation, uncertainty, save, replay, bounded propagation, institutional scale, failure, fragmentation, and live proof.

Population and Scale Goals

  • Store memberships, obligations, offices, accounts, laws, and diplomatic relations as bounded indexed graphs rather than settlement-wide or world-wide pair scans.
  • Evaluate policy and civic proposals at institutional cadence from immutable summaries, then commit accepted changes through the owning ledgers and command paths.
  • Prove several settlements and one polity or kingdom network with conserved treasury and bank liabilities, bounded diplomacy work, and cold institutional continuity.

How To Build It

  • Compose governance from Actor, Settlement, Institution, Memory, Knowledge, Reputation, Relationship, Work, Resource, Quest, and diplomacy owners.
  • Do not create a universal politics score or make institutions omniscient.
  • Do not create money through account transfers, make banks immune to failure, or merge local settlement ownership into one kingdom inventory.
  • Surface decisions with the facts, authority, policy, uncertainty, and consequences that produced them.

Practical Guidance

  • Start with a council or office whose policy changes an existing work, resource, or care decision rather than adding a detached politics score.
  • Let a bank or treasury fail in a deterministic fixture to prove claims, reserves, and recovery remain conserved.
  • Keep local settlement identity visible after a polity forms.

Must Have

  • Governance and diplomacy that alter real work, resources, relationships, migration, safety, and opportunity.
  • Institutions with stable identity and continuity beyond any one officeholder.
  • Public and financial institutions with conserved money, explicit custody, bounded accounting, and understandable failure.
  • Bounded information and relationship work at representative settlement counts.

Scheduled Optional Work

Scheduled Deferred Work

Exit Criteria

  • One civic dispute and one diplomatic obligation produce understandable decisions and persistent personal, household, institutional, and economic consequences.
  • Leadership or membership change does not erase institutional obligations, memory, or saved state.
  • Distant settlements continue through bounded summaries without universal knowledge or all-pairs diplomacy processing.
  • A multi-settlement polity can form, change leadership, honor or breach obligations, and fragment without deleting local settlement state, institutional claims, debts, property, or history.
PHASE 21Emergent Narrative, Quests, Dialogue, and Personal AdventureTurn systemic lives, expeditions, settlements, and institutions into playable personal stories whose participants and aftermath remain part of the world.Planned — not active

Phase: Phase 21

Gate status: Planned — not active

Depends on: Phase 17 proves personhood and life continuity, Phase 18 proves expedition play, Phase 19 proves material and settlement consequence, Phase 20 proves institutions and diplomacy, and completed Incident, Quest, Knowledge, Memory, Reputation, Relationship, Party, and progression owners remain authoritative.

Activation Contract

  • Enters with: people who can change, field travel, economic consequence, civic institutions, diplomacy, and completed incident, quest, knowledge, memory, reputation, relationship, and Party owners.
  • First vertical proof: a live settlement fact creates one event, an eligible ordinary villager can address it through dialogue or travel, and the result changes a later autonomous decision.
  • Does not open: a fixed hero, narrative-only copies of people or places, direct script mutation, isolated mission maps, infinite branching, broad content tooling, or warfare-scale faction strategy.
  • Closes with: systemic incidents, dialogue, an interruptible quest, autonomous and neglected outcomes, a player-led personal episode, a bounded authored arc, durable aftermath, content validation, and narrative scale proof.

Required Work

  • Define three content sources through the same owners: systemic incidents generated from world state, structured event families parameterized by current facts, and bounded handcrafted quest arcs that never suspend simulation truth.
  • Extend the durable Quest lifecycle for discovery, availability, acceptance, active steps, suspension, interruption, abandonment, failure, completion, and aftermath. A Quest is a chain of owned world commitments and consequences, not a sealed mission script.
  • Select participants through capabilities, location, relationships, knowledge, obligations, and player choice. No event may require a fixed hero when an eligible ordinary villager or Party can satisfy its contract.
  • Add dialogue and negotiation as typed exchanges over what participants know, believe, remember, want, can offer, and have authority to promise. Dialogue choices request owned effects; text does not mutate reputation, relationships, resources, obligations, or policy directly.
  • Compose personal adventure episodes from existing movement, Party, inventory, combat, health, knowledge, incident, dialogue, quest, and consequence owners. Exploration and combat remain world behavior rather than narrative-only modes.
  • Let traits, learned tendencies, needs, affect, condition, equipment, skill, memory, bonds, reputation, culture, and prior events alter eligible approaches and consequences without reducing outcomes to one opaque dialogue score.
  • Support autonomous, player-assigned, and directly controlled responses. Ignored or abandoned events may escalate, resolve without the player, change participants, or become unavailable while preserving their causal aftermath.
  • Distinguish authoritative event truth, observed facts, reports, rumors, beliefs, dialogue claims, and player knowledge. Narrative presentation may conceal facts but cannot rewrite them.
  • Add journal, episode, dialogue, participant, objective, deadline, uncertainty, choice, and aftermath surfaces through the Phase 14 API and standard interface. The player must be able to understand why an event appeared, who can act, what changed, and what remains unresolved.
  • Add bounded dialogue, episode, tension, memory, and aftermath audio cues through the existing audio boundary; cues may reinforce known state but cannot reveal hidden event truth.
  • Add a bounded first content set: one household or personal incident, one travel or discovery quest, one institutional or diplomatic episode, and one multi-step handcrafted arc. Each family uses validated definitions, provenance, deterministic fixtures, and the shared content pipeline.
  • Preserve quest, dialogue, participant, deadline, evidence, obligation, and aftermath state through save, load, replay, heat transitions, participant death or departure, settlement change, and package reload.
  • Feed results back into work, health, resources, property, knowledge, memory, relationships, reputation, settlement capability, institutions, diplomacy, and later event eligibility.

Internal Slice Order

  1. Phase 21A — Narrative authority and first systemic incident: lock event truth, knowledge, participant, visibility, lifecycle, consequence, and content-definition contracts; surface one incident caused by live world state.
  2. Phase 21B — Dialogue and social resolution: prove one typed conversation or negotiation whose available approaches and durable result depend on real participants, knowledge, authority, relationships, and offers.
  3. Phase 21C — Interruptible quest chain: prove discovery, acceptance, travel, multiple objectives, suspension, save and load, resumption, failure, and aftermath without a quest-specific simulation path.
  4. Phase 21D — Autonomous and neglected outcomes: let eligible villagers or institutions respond without the player and let one ignored event evolve or resolve causally.
  5. Phase 21E — Personal adventure episode: compose Party preparation, exploration, dialogue or combat, injury or cost, return, progression, memory, and settlement consequence into one player-led episode.
  6. Phase 21F — Authored arc and variation: add one bounded handcrafted arc plus systemic participant, location, approach, and consequence variation; prove that authored structure reads and writes shared world facts.
  7. Phase 21G — Narrative closure: close journal readability, repetition control, uncertainty, accessibility, content validation, save, replay, remote continuation, scale, live play, and cross-phase scope audit.

Population and Scale Goals

  • Index event candidates by changed fact, location, participant scope, institution, relationship, route, and content eligibility. Do not scan every template against every Actor or settlement.
  • Evaluate background opportunities on explicit cadences and budgets, then promote only surfaced participants and facts needed by an active episode.
  • Keep dialogue and quest state proportional to active or historically significant episodes. Compact terminal history into durable aftermath records without retaining executable scripts or full conversation trees.
  • Prove many dormant definitions, several concurrent cold events, bounded rumor propagation, and one embodied episode without waking unrelated Actors or regions.

How To Build It

  • Keep Incident responsible for world intersections, Quest responsible for durable objective and commitment state, Knowledge responsible for what observers know, and Memory, Reputation, Relationship, Resource, Work, Institution, and other domains responsible for their own aftermath.
  • Compile authored definitions into validated immutable data. A definition may declare conditions, roles, steps, choices, consequences, and presentation keys; it cannot contain direct component writes or bypass owner validation.
  • Use stable participant roles rather than embedded Actor IDs. Bind roles transactionally when an event activates and define replacement, vacancy, death, and departure behavior for every required role.
  • Represent dialogue choices as typed proposals with requirements, disclosed information, costs, authority, and requested effects. Apply accepted effects through the same command and owner paths used outside dialogue.
  • Keep outcomes explainable through named inputs and owner results. Random streams may vary bounded outcomes but cannot replace eligibility, capability, knowledge, or consequence rules.
  • Author the first content families by hand in the validated format. Build specialized authoring tools only after repeated Phase 21 work demonstrates a concrete production bottleneck; Phase 23 owns production-scale tooling.

Benefits

  • The RPG part of Worldforge receives a complete implementation owner instead of being treated as final content polish.
  • Ordinary villagers can become important through real circumstances, and player-led episodes permanently affect autonomous settlement life.
  • Dialogue, quests, combat, logistics, institutions, and memory remain one game rather than separate narrative and simulation tracks.
  • Narrative content can expand through validated families after the lifecycle and consequence contracts are proved.

Potential Drawbacks

  • Authored structure can accidentally assume a fixed protagonist, freeze world state, or duplicate domain rules.
  • Too many surfaced events can turn the game into an inbox and reduce attachment instead of increasing it.
  • Unbounded template evaluation, dialogue branching, rumor propagation, or retained history can create large CPU, memory, and save costs.
  • Excessive random variation can make outcomes feel arbitrary even when the underlying systems are sound.

High-Risk Changes

  • Letting quest steps, dialogue scripts, or event callbacks mutate simulation state directly.
  • Treating a handcrafted arc as permission to pause, clone, or reset the living world.
  • Storing participant pointers or fixed scenario IDs instead of stable role bindings.
  • Conflating event truth, reports, beliefs, and player-visible information.
  • Adding a universal narrative score that bypasses traits, knowledge, relationships, authority, resources, and owned consequences.
  • Retaining every inactive branch, line of dialogue, or ambient event indefinitely in saves.

Practical Guidance

  • Start with an episode where a settlement problem creates the quest and the return changes a later work, household, or institutional decision.
  • Reuse the same event with different eligible villagers to prove identity changes approach and aftermath rather than only displayed text.
  • Include one valid refusal, failure, abandonment, autonomous resolution, and misleading report fixture before broad content authoring.
  • Keep journal entries concise and link them to people, places, obligations, evidence, and consequences that the player can inspect.

Must Have

  • Systemic incidents, structured events, dialogue, and handcrafted arcs use shared authoritative owners and durable consequences.
  • Any eligible person may become a participant; no fixed hero or narrative-only duplicate identity is required.
  • The player can observe, assign, or directly control an episode without selection itself changing Actor behavior.
  • Quest and dialogue state survive interruption, absence, save, replay, death, settlement change, and offscreen continuation.
  • Normal play explains participant eligibility, current stakes, uncertainty, choices, failure, and aftermath without developer tools.

Exit Criteria

  • A live supported build produces one systemic personal incident, one institutional or diplomatic episode, one travel or discovery quest, and one bounded handcrafted arc from validated content.
  • At least one episode can be ignored, handled autonomously, assigned, or directly controlled, and each path leaves a causal world state rather than resetting after presentation ends.
  • Two different eligible participants produce different available approaches or consequences from owned traits, knowledge, condition, relationships, authority, inventory, or history, with player-readable reasons.
  • Saving during dialogue, travel, suspension, or aftermath and loading preserves participants, objectives, knowledge, deadlines, obligations, resources, and the deterministic result.
  • Representative dormant and active event breadth remains within candidate, script, memory, save, UI, and remote-simulation budgets without global Actor-template scans or story spam.
PHASE 22Factions, Warfare, and World PressureExpand proven combat and diplomacy into supplied rival factions, settlement defense, remote conflict, and persistent world pressure without turning Worldforge into an army-first RTS.Planned — not active

Phase: Phase 22

Gate status: Planned — not active

Depends on: Phase 18 proves expedition play, Phase 19 proves regional logistics, Phase 20 proves institutions and diplomacy, Phase 21 proves narrative consequence and personal episodes, and completed combat, defense, faction, strategy, and remote-conflict owners remain authoritative.

Activation Contract

  • Enters with: expedition combat, regional logistics, civic authority, diplomacy, narrative consequence, and completed combat, defense, faction, strategy, health, and remote-conflict owners.
  • First vertical proof: one warned settlement mobilizes a supplied defense, protects or evacuates civilians, resolves an embodied attack, and absorbs injury, loss, memory, economic disruption, and diplomatic aftermath.
  • Does not open: army-first play, free remote battle rolls, unsupplied forces, universal faction evaluation, complex weapon breadth, advanced formations, or conflict detached from civilian life.
  • Closes with: rival strategy, embodied and remote conflict, negotiation and surrender, occupation or recovery, refugees and polity pressure, deterministic continuation, bounded faction work, and live warfare proof.

Required Work

  • Apply raids, siege, occupation, conscription, refugee movement, destroyed infrastructure, trade disruption, treasury pressure, and postwar recovery to the same settlement capability, material, household, and institution owners. Warfare may cause genuine settlement or polity collapse.
  • Add bounded rival faction identities with settlements, leaders, needs, knowledge, relations, capabilities, logistics, and strategy drawn from the same world rules as the player settlement.
  • Expand combat equipment, small-unit tactics, formation presets, settlement defense, treatment, retreat, capture, surrender, and aftermath through existing Actor, Inventory, Party, Order, Incident, and health owners.
  • Require armies, raids, patrols, and defenses to consume people, provisions, equipment, travel time, information, and institutional authority.
  • Resolve remote conflict from causal participants, logistics, terrain, knowledge, capabilities, and deterministic streams; embody named participants when heat and player interest require it.
  • Let negotiation, aid, trade, deterrence, migration, and internal pressure prevent or reshape warfare.
  • Add warning, mobilization, combat, retreat, civilian danger, loss, and aftermath audio cues that remain readable, accessible, and bounded in dense conflict.

Internal Slice Order

  1. Phase 22A — Defense preparation: prove warning, muster, supplies, fortifications, civilian safety, and one settlement-defense episode.
  2. Phase 22B — Rival strategy: add one faction strategy that evaluates territory, routes, logistics, knowledge, relationships, capability, and opportunity.
  3. Phase 22C — Embodied conflict: prove bounded formations, orders, combat, retreat, injury, death, capture if approved, and aftermath through existing owners.
  4. Phase 22D — Remote conflict: preserve named participants, force state, supply consequences, uncertainty, and later promotion.
  5. Phase 22E — Escalation and resolution: add diplomacy, surrender, retreat, truce, occupation, aid, or obligation paths.
  6. Phase 22F — War consequence: apply destruction, refugees, treasury pressure, settlement decline, recovery, or polity fragmentation.
  7. Phase 22G — Warfare closure: close faction scale, remote conflict, save, replay, UI, balance, accessibility, and live proof.

Population and Scale Goals

  • Represent distant military pressure through bounded forces, fronts, supply, and regional consequences; embody only participants inside active tactical space.
  • Keep faction evaluation, mobilization, targeting, and diplomacy on explicit cadences with candidate and command budgets.
  • Prove concurrent remote conflicts plus one embodied battle without waking unrelated populations or diverging from deterministic results.

How To Build It

  • Keep faction strategy on a slow, budgeted cadence and apply results in deterministic stable order.
  • Use the same resource, route, knowledge, institution, incident, combat, health, memory, and consequence facts as local play.
  • Preserve individual identity in casualties, injuries, courage, leadership, capture, return, and remembrance.

Practical Guidance

  • Make the first war proof materially expensive even when the player wins.
  • Preserve civilian, household, production, and diplomatic consequences so combat cannot become a separate score layer.
  • Test a negotiated resolution and a settlement collapse alongside the successful defense.

Must Have

  • Conflict grounded in logistics, knowledge, people, and institutions.
  • Reliable ordinary player commands with identity affecting execution and consequence rather than arbitrary refusal.
  • Remote warfare that is causal and bounded instead of a separate random outcome generator.

Scheduled Optional Work

Scheduled Deferred Work

Exit Criteria

  • The player can prepare for, negotiate around, fight, retreat from, or recover after one faction conflict and understand the material and personal causes of the result.
  • Named remote participants can enter and leave embodied simulation without identity loss, duplicated equipment, or contradictory outcomes.
  • Representative faction and warfare breadth remains within simulation, rendering, save, and replay budgets.
PHASE 23Content Production, Modding, Atmosphere, and Release ExpansionScale approved gameplay through governed content authoring, safe extension points, final presentation, audio, accessibility, distribution, and long-term compatibility.Planned — not active

Phase: Phase 23

Gate status: Planned — not active

Depends on: Phases 14-22 prove the connected game loops and Phase 13 retains the reproducible release, schema, migration, accessibility, packaging, and performance baseline.

Activation Contract

  • Enters with: complete connected settlement, life, expedition, economy, governance, narrative, and warfare loops plus measured repeated content-production work and the reproducible Phase 13 release baseline.
  • First vertical proof: one new validated content package and one interactive Lua addon are authored, checked, reloaded, packaged, migrated, disabled, and recovered without changing authoritative gameplay ownership. The addon proves the smallest approved capability expansion from the Future Plugin Enhancements plan.
  • Does not open: new core gameplay domains, a native plugin ABI by default, raw state writes, unsupported platform promises, editors without measured demand, or content count as a substitute for distinct decisions.
  • Closes with: production-scale content and addon governance, justified authoring tools, atmosphere and presentation, accessibility and controls, balance and long sessions, distribution, compatibility, recovery, and supported-release proof.

Required Work

  • Build only the content authoring, validation, asset cooking, editor, and batch tools justified by repeated production work across approved gameplay families.
  • Extend the Phase 14 development scripting registry into governed end-user addon permissions and data packages only after actual modding needs are proven; do not expose raw state writes or a native plugin ABI by default.
  • Implement the approved parts of the Future Plugin Enhancements plan through the existing package host: capability grants, one asynchronous operation model, versioned dependencies, pure and service libraries, inter-plugin communication, interactive canvas presentation, logical input, declared graphics, virtual storage, audio, networking, authoring tools, compatibility, and distribution. Do not expose blocking IO, raw backend objects, shared Lua state, or ambient global authority.
  • Define systemic and authored event, quest, dialogue, social incident, creature, building, recipe, institution, and faction content workflows with validation, provenance, tests, and compatibility versions.
  • Expand resource species, crops, foods, ores, materials, coins, gemstones, building alternatives, settlement profiles, cultures, and failure scenarios through the proven catalogs and resolver registries. Content breadth must not add parallel economy or settlement owners.
  • Add final art, animation, lighting, effects, interface, accessibility, remapping, and cinematic work only where it improves gameplay readability and supported presentation targets.
  • Define audio, silence, ambience, weather, settlement activity, danger, aftermath, memory, and UI feedback through a measured audio service and content pipeline.
  • Expand supported platforms, installers, storefront integration, signing, updates, crash reporting, migrations, and distribution automation only for approved release targets.
  • Maintain documented mod and content compatibility, deprecation, diagnostics, sandbox, recovery, and safe-mode behavior across releases.

Internal Slice Order

  1. Phase 23A — Production evidence: measure repeated content and addon work; approve only capabilities and authoring tools with a concrete user.
  2. Phase 23B — Capability and asynchronous foundation: lock end-user grants, operation identities, completion events, cancellation, timeouts, quotas, diagnostics, safe-boundary delivery, profile migrations, recovery, and safe mode before opening external IO.
  3. Phase 23C — Package cooperation: add dependency version ranges, deterministic lockfiles, pure Lua libraries, host-mediated service libraries, bounded inter-plugin messaging, asynchronous request-response, capability discovery, dependent reload, and compatibility diagnostics.
  4. Phase 23D — Interactive presentation: add clamped presentation updates, package-defined logical input, focus and capture, backend-neutral canvas commands, asynchronous declared graphics, host accessibility enforcement, and the complete Lua Pong proof addon.
  5. Phase 23E — General asynchronous IO: add virtual package storage, user-mediated imports and exports, audio, HTTPS, WebSockets, separately granted lower-level networking, secure references, privacy, offline behavior, and cancellation through the Phase 23B operation contract.
  6. Phase 23F — Authoring and content breadth: add only justified templates, validators, test harnesses, profilers, inspectors, editors, and batch tools; grow resources, buildings, cultures, ecology, institutions, factions, incidents, and scenarios through existing owners.
  7. Phase 23G — Balance, accessibility, and long sessions: tune pacing, economy, autonomy, failure, recovery, alerts, saves, addon cost, content density, input, audio, and presentation through observed player evidence.
  8. Phase 23H — Distribution and release expansion: close normalized packages, repositories, signatures, dependency resolution, permission management, safe updates, rollback, moderation policy, compatibility, recovery, licensing, provenance, supported platforms, performance, and live release proof.

Population and Scale Goals

  • Run the final world matrix across dense visible settlements, many cold regions, long sessions, production content breadth, migrations, conflicts, and remote events.
  • Set supported-platform budgets for simulation, rendering, scripts, audio, memory, allocations, IO, save size, load time, and recovery.
  • Prove that adding content packages increases authored breadth without increasing baseline per-Actor, per-region, or hidden-panel work.
  • Prove many-package graphs under reload storms, dependency failures, malformed assets, slow storage, unavailable audio devices, lost networking, cancellation, queue pressure, revoked permissions, and hostile callbacks without stalling simulation or removing the compiled recovery interface.

How To Build It

  • Keep canonical gameplay state and mutation in existing C++ domain owners. Tools and scripts produce validated inputs or typed command requests.
  • Prefer data packages and bounded scripting APIs over native binary plugins. A native ABI requires a separate measured need and security decision.
  • Keep all file, graphics, audio, and networking work asynchronous. Worker threads perform host-owned IO; detached results return at safe boundaries, and no worker calls Lua directly.
  • Keep package communication typed, versioned, bounded, and host-mediated. Libraries are explicit dependencies; packages never share Lua tables, closures, userdata, or mutable globals.
  • Keep a compiled safe mode that can disable extensions, load a valid save, report incompatibilities, and restore the standard interface.
  • Treat content count as breadth only when families produce distinct decisions and consequences.

Practical Guidance

  • Build editors only for workflows repeated often enough to justify their maintenance and compatibility cost.
  • Ship a standard content package that exercises every public validation and recovery path.
  • Keep the safe-mode interface and one minimal supported scenario independent of optional content packages.
  • Use the Lua Pong addon as the first interactive-canvas proof because it exercises frame timing, held input, canvas drawing, local state, accessibility, reload, and fault containment without requiring gameplay authority.

Must Have

  • A governed production pipeline tied to stable schemas, owners, migrations, provenance, and automated validation.
  • Safe extension and recovery behavior that cannot silently corrupt saves or bypass simulation rules.
  • A permissioned, asynchronous addon capability model with bounded graphics, input, communication, libraries, storage, audio, and networking.
  • Supported addon authoring, testing, profiling, dependency, migration, installation, update, rollback, and recovery tools.
  • Final audio, visual, accessibility, control, packaging, platform, and performance evidence for every supported release target.

Scheduled Optional Work

Scheduled Deferred Work

Exit Criteria

  • A creator can add a validated content package and UI customization, reload supported presentation content safely, and receive precise diagnostics for incompatible or invalid data.
  • The shipped content breadth remains causally distinct, readable, performant, saved, migrated, replayable, licensed, and reproducible.
  • A faulty extension can be disabled through safe mode without losing the last valid interface, save, or release installation.
  • Optional packages cannot block the render or simulation loop, retain stale asynchronous work after reload, share mutable runtime objects, exceed declared capability grants, or hide their measured resource cost.
Coverage

Routed Design Coverage

The former Future topics are approved Game Development scope. Each topic is owned by the named phase and no longer forms a separate roadmap authority.

#C.1Health, Injury, Sickness, and Recovery Architecture

Define wounds, illness, exhaustion collapse, treatment, caretaking, disability, recovery time, and how physical harm feeds labor, mood, household strain, and story consequence.

Owned by: Phase 17

Routing: Phases 2, 10, and 12 proved durable condition, bounded health progression, treatment, injury, recovery, and combat aftermath. Game Development Phase 17 owns the expansion for illness, disability, caretaking, recovery time, household strain, and long-duration balance.

#C.2Weather, Seasons, and Climate Pressure

Establish regional weather, seasonal drift, storms, mud, snow, crop timing, heat and cold exposure, and travel disruption as shared systemic pressures.

Owned by: Phase 18

Routing: Phase 8 proved bounded weather, seasons, ecology, hazards, and regional updates. Game Development Phase 18 owns the broader player-facing climate design for storms, mud, snow, exposure, crop timing, visibility, travel disruption, and settlement adaptation.

#C.3Expedition and Small-Party Field Loop

Describe scouting, supply prep, field camps, pursuit, retreat, extraction, line-of-sight, field treatment, and how an outing becomes a real expedition instead of remote labor.

Owned by: Phase 18

Routing: Direct control, Parties, travel, incidents, combat, provisions, quests, and consequences now exist through the completed roadmap. Game Development Phase 18 composes them into the first complete prepare, depart, act, retreat or succeed, return, and aftermath field loop.

#C.4Construction and Building Architecture

Specify foundations, staged construction, upgrades, maintenance, decay, warmth, light, safety, occupancy, and what makes a structure socially or economically complete.

Owned by: Phase 16, Phase 19

Routing: Phases 7 and 9 proved a robust building lifecycle, housing, infrastructure, production functions, maintenance, and player commands. Game Development Phases 16 and 19 own a readable starter settlement and later strategic building breadth, decay, comfort, specialization, and progression.

#C.5Creature and Ecology Architecture

Model territories, migration, dens, prey pressure, breeding, recovery, monster uniqueness, and how ecology changes route risk and settlement behavior over time.

Owned by: Phase 18

Routing: Phase 8 proved bounded populations, renewable sources, weather, hazards, and ecology updates. Game Development Phase 18 owns the deeper creature and ecology design for territory, migration, dens, breeding, recovery, rare creatures, and player-visible effects on travel and settlement life.

#C.6Governance, Law, Norms, and Internal Justice

Define leadership legitimacy, sanctions, theft, violence, neglect, ritual authority, mercy, punishment, and how settlements judge or tolerate behavior.

Owned by: Phase 20

Routing: Phase 11 proved institutions, diplomacy, quests, obligations, and persistent consequence over memory and reputation. Game Development Phase 20 owns the full civic design for leadership, evidence, policy, judgment, sanctions, mercy, institutional continuity, and inter-settlement diplomacy.

#C.7Progression and Unlock Philosophy

Explain how capability growth emerges through research, craft maturity, institutions, social knowledge, exploration, and infrastructure without feeling like generic tech gating.

Owned by: Phase 19

Routing: Phase 10 proved capability growth and Phase 13 proved data-driven content breadth. Game Development Phase 19 owns the long player progression arc through craft maturity, knowledge, institutions, exploration, infrastructure, trade, and settlement specialization.

#C.8Time Model and Calendar Semantics

Set rules for hour, day, season, work shift, travel compression, festivals, sleep rhythm, and how events bind themselves to time.

Owned by: Phase 17

Routing: Phases 1, 8, and 10 proved deterministic world time, seasons, schedules, aging, and long-duration continuation. Game Development Phase 17 owns player-facing daily rhythm, meals, sleep, work commitments, care, festivals, life stages, and the balance between embodied and compressed time.

#C.9Emergent Narrative, Quests, Dialogue, and Personal Adventure

Compose systemic events, structured quests, dialogue, ordinary participants, direct intervention, and persistent aftermath into the RPG layer promised by Current.

Owned by: Phase 21

Routing: The completed engine owns Incidents, Quests, Parties, knowledge, memory, reputation, relationships, travel interruption, rescue, diplomacy, and consequence records, but Current promises a larger RPG loop in which ordinary villagers become story participants. Phase 21 composes those owners after life, expeditions, economy, and institutions exist, then proves systemic incidents, dialogue, interruptible quests, autonomous or neglected outcomes, personal adventures, handcrafted arcs, and durable aftermath before warfare or production breadth.

#C.10Audio, Atmosphere, and Intimacy Strategy

Define how sound, silence, ambience, tension, aftermath, and UI audio help the player feel households, danger, weather, and memory instead of just reading them.

Owned by: Phase 16, Phase 18, Phase 21, Phase 22, Phase 23

Routing: The completed engine roadmap retains a thin audio boundary. Phase 16 adds the minimum settlement, work, need, and alert feedback required for readable life. Phase 18 adds weather, ecology, expedition, and danger cues. Phase 21 adds dialogue, episode, memory, and aftermath cues. Phase 22 adds defense and warfare pressure. Phase 23 owns production atmosphere, broad content, mixing, accessibility, platform validation, and final audio closure. Each earlier phase extends the same audio service and content path rather than waiting for a final retrofit.

#C.11Content Authoring Pipeline

Describe how systemic event families, quest scaffolds, social incidents, authored variants, and data hooks are actually created, tested, and extended without collapsing into content sludge.

Owned by: Phase 23

Routing: Phase 13 proved validated content schemas, broader authored families, provenance, packaging, and release checks. Every Game Development phase authors its minimum definitions through that pipeline, adds validation with the owning behavior, and records repeated production cost. Phase 23 owns only the authoring tools, content packages, compatibility, safe extension points, diagnostics, and production-scale validation justified by that accumulated evidence.

#C.12Future Plugin Enhancements

Extend the proven Lua package host into a complete, bounded addon ecosystem with interactive graphics, logical input, shared libraries, inter-plugin services, asynchronous IO, authoring tools, compatibility, and distribution.

Owned by: Phase 23

Routing: Phase 14 proved a safe Lua package host, versioned API registry, detached queries, typed commands, post-commit events, semantic interface composition, transactional reload, fault isolation, recovery, and an external API Reference. That is enough for development panels and interface replacement. It is not yet a complete end-user addon ecosystem. Phase 23 owns this expansion after Phases 16-22 prove which gameplay, presentation, content, and authoring capabilities require stable extension points. The work must extend the existing package host and API registry. It must not introduce a second scripting runtime, expose direct domain ownership, or let optional packages control the game loop.

Open detailed enhancement plan

#Proven baseline

The current platform already provides:

  • pinned sandboxed Lua with one bounded state per package;
  • validated manifests, stable package identities, API compatibility ranges, declared dependencies, assets, localization files, settings schemas, and UI contributions;
  • detached paginated queries, typed normal and development-restricted commands, immutable post-commit events, and package-local event subscriptions;
  • movable semantic panels using text, rows, buttons, progress bars, tooltips, and menus;
  • first-party, development, and compiled-recovery interface layers;
  • transactional full-graph reload, standard-interface restoration, safe mode, generation-scoped callbacks, command deferral, diagnostics, and repeated-fault isolation;
  • bounded script memory, instructions, queries, records, owner visits, commands, events, panels, widgets, and text;
  • current and logged performance diagnostics; and
  • a generated, versioned, wiki-style API Reference built from the runtime registry.

#Capabilities not available today

The roadmap must not imply that the following features already exist:

  • no canvas, line, rectangle, circle, sprite, image, animation, clipping, transform, or freely positioned drawing API;
  • no package-facing graphics decode, upload, lifetime, atlas, font, shader, or immutable asset-handle API;
  • no host-dispatched presentation update callback with a clamped delta time;
  • no package timer, delayed callback, scheduled coroutine, or asynchronous task-completion contract;
  • no package-defined user-rebindable input actions;
  • no keyboard, mouse, controller, pointer, text-input, focus, capture, pressed, held, or released state API;
  • no inter-plugin message bus, request-response call, shared event topic, capability discovery, or service registry;
  • no library-package export/import contract and no safe shared module namespace;
  • no Lua-accessible general file, graphics, audio, network, process, clipboard, or operating-system IO;
  • no asynchronous file, audio, or network operation handles, cancellation, timeout, backpressure, or completion events;
  • no addon-owned durable profile store beyond the host-managed settings and layout state already exposed;
  • no end-user permission prompt, per-capability grant, trust tier, signing policy, repository, or package installer;
  • no package dependency version ranges, lockfile, migration entry point, or compatibility resolver;
  • no dedicated addon test harness, simulated input/time/IO fixtures, linter, debugger, profiler, or package-level performance report; and
  • no supported native binary plugin ABI.

A text or progress-bar imitation of Pong could be written with the current widgets. A proper Pong panel cannot be written yet because it needs canvas drawing, a frame update, and logical held input.

#Capability and permission model

Every new external capability must be declared in the package manifest and granted by the host. Lua code must not gain authority by finding a global table or constructing an identifier.

Capability families should include:

  • presentation.canvas and narrower graphics features;
  • input.actions, input.pointer, input.text, and controller features;
  • assets.read and declared package-asset access;
  • storage.private, storage.shared, and user-selected document access;
  • audio.playback, audio.buses, and optional spatial-audio requests;
  • network.http, network.websocket, and separately reviewed lower-level networking;
  • plugins.messages, plugins.services, and plugins.library;
  • clipboard, URL opening, notifications, and other operating-system integrations as separate capabilities; and
  • development-only diagnostics and restricted commands, kept distinct from end-user grants.

Development builds may use explicit broad grants for local testing. Supported player builds require visible permissions, deny-by-default sensitive capabilities, per-package revocation, safe-mode startup, and precise diagnostics. Permission checks occur in the host service, not only in Lua.

#Presentation updates and scheduling

Add a host-dispatched presentation callback for interface animation and other non-simulation work. It must:

  • receive monotonic presentation time and a clamped delta_seconds;
  • remain separate from fixed simulation ticks and authoritative gameplay mutation;
  • support a declared maximum update rate so hidden or slow panels do not run at display refresh without need;
  • suspend when the package, surface, or relevant contribution is disabled;
  • preserve per-callback memory, instruction, query, command, and output budgets;
  • prevent re-entry and recursive event or update dispatch;
  • expose bounded timers and delayed callbacks through host-owned operation IDs;
  • allow cancellation during reload, shutdown, safe mode, and dependency failure; and
  • report skipped, throttled, over-budget, and failed updates through package diagnostics.

Lua coroutines may express local control flow, but the host owns scheduling. A coroutine cannot sleep the application thread or continue after its package generation is invalid.

#Input

Packages should declare stable logical actions rather than read raw SDL events. The host maps those actions to keyboard, mouse, controller, touch, or accessibility devices through the normal Controls owner.

The input API should provide:

  • user-rebindable action declarations with stable package-scoped IDs;
  • pressed, held, released, analog value, and repeat state;
  • focus and capture rules for panels, canvas regions, text fields, menus, and modal surfaces;
  • pointer position and buttons relative to a declared surface or canvas;
  • text input and composition separate from physical key identity;
  • controller axes, buttons, dead zones, and device-change events;
  • conflict detection, reserved engine actions, accessibility alternatives, and reset-to-default;
  • synthetic input only inside the addon test harness, never as a player-build authority path; and
  • deterministic activation order for actions observed in the same frame.

Packages must not globally steal input, block the recovery shell, replace emergency controls, or observe sensitive text outside their focused field.

#Canvas and interactive graphics

Add a backend-neutral canvas intent buffer rather than exposing ImGui, SDL, GPU objects, or renderer pointers. The initial canvas should support:

  • rectangles, rounded rectangles, lines, circles, simple paths, text, images, and sprites;
  • package-local coordinates, clipping, layers, transforms, color tokens, alpha, and scale-aware sizing;
  • accessible semantic labels and alternate text for interactive regions;
  • pointer hit regions and logical-action activation;
  • immutable asset handles rather than filesystem paths or backend textures;
  • bounded draw commands, vertices, text bytes, image references, clip regions, and off-screen work;
  • validation of finite values, coordinate ranges, layer order, asset ownership, and texture size;
  • reduced-motion and high-contrast behavior controlled by host accessibility settings; and
  • renderer-side batching and inspection without making the canvas an authoritative simulation path.

The first complete proof should be a small Lua Pong addon. It must create a movable canvas window, move a player paddle through rebindable Up and Down actions, run a bounded computer opponent, animate with clamped presentation time, handle collision and score in disposable Lua state, provide clickable accessible controls, reload safely, and fault without stopping Worldforge.

#Graphics and asset loading

Manifest asset paths are currently validated but are not a complete package-facing asset service. The future asset API should:

  • discover only manifest-declared assets or explicitly granted user-selected files;
  • decode and prepare images, fonts, sprite sheets, animations, and other supported presentation assets asynchronously;
  • return generation-checked immutable handles with explicit pending, ready, failed, and released states;
  • provide completion events, cancellation, timeout, memory cost, dimensions, format, and diagnostic information;
  • enforce file-size, decoded-size, dimension, count, upload, memory, and per-frame submission quotas;
  • deduplicate immutable content by validated content identity where safe;
  • retain provenance and licensing metadata for distributed packages;
  • invalidate handles cleanly on reload, uninstall, renderer reset, or incompatible asset changes; and
  • provide standard placeholders and recovery behavior when optional assets fail.

Lua must not create backend textures, map GPU memory, supply arbitrary shaders, or retain renderer objects. Advanced effects require separately versioned, validated presentation contracts.

#Inter-plugin communication

Packages need cooperation without sharing Lua states, tables, closures, raw pointers, or mutable implementation objects. Add a host-owned typed communication service with:

  • package-scoped and public versioned topic identities;
  • bounded publish-subscribe messages;
  • asynchronous request-response operations with timeout and cancellation;
  • schema-declared scalar, list, map, and immutable-record payloads;
  • deterministic delivery order and generation-scoped subscriptions;
  • explicit target, broadcast, capability, and permission rules;
  • queue depth, payload size, rate, fan-out, and retained-message limits;
  • sender identity supplied by the host and impossible for Lua to forge;
  • failure, unavailable-service, version-mismatch, overflow, and revoked-permission results; and
  • diagnostics that identify both endpoints without exposing private package state.

Messages report addon facts or request addon services. They do not replace authoritative gameplay commands and cannot become a hidden mutation path into Worldforge domains.

#Library plugins and shared services

Library packages should make reusable code available without creating ambient mutable globals. Consumers should declare the library package and compatible version in their manifests.

Support two explicit forms:

  1. Pure Lua libraries: validated modules are loaded into each dependent package's isolated Lua state. Code and immutable assets may be shared by content identity, but globals and mutable state are not shared across packages.
  2. Service libraries: one package exposes a versioned host-mediated asynchronous interface through the plugin service registry. Consumers receive detached values and operation IDs, never Lua references from the provider's state.

The dependency resolver should support semantic version ranges, a deterministic lockfile, cycle rejection, optional dependencies, feature discovery, load order, transactional reload of affected dependents, migration diagnostics, and an explanation of why a package could not activate.

Libraries may be discoverable to every package, but use must remain an explicit dependency or capability request. This prevents name collisions, surprise authority, and update breakage.

#Asynchronous IO contract

File, graphics, audio, and networking support must use one common asynchronous operation model. Blocking Lua callbacks must never wait for disk, decoding, DNS, sockets, audio devices, subprocesses, or user interaction.

Every asynchronous operation should have:

  • a host-created operation ID, package identity, capability, generation, and creation time;
  • pending, completed, failed, cancelled, timed-out, and rate-limited states;
  • bounded polling plus typed completion events;
  • explicit cancellation and automatic cancellation on reload, disable, safe mode, or shutdown;
  • deadline, response-size, memory, bandwidth, concurrency, and queue limits;
  • backpressure instead of unbounded buffering;
  • detached immutable results or generation-checked handles;
  • exact error identities suitable for UI and automated tests;
  • per-package usage and latency diagnostics; and
  • no callback on a stale Lua generation.

Worker threads may perform host-owned IO and decoding. Results enter Lua only at a safe frame or fixed-tick boundary in deterministic host order. No worker thread calls Lua directly.

#File and durable-data IO

Provide virtual roots instead of unrestricted process filesystem access:

  • read-only package assets;
  • private versioned per-package data and cache roots;
  • optional shared data roots with explicit grants;
  • user-selected import and export paths through the recovery or platform interface;
  • asynchronous read, write, enumerate, metadata, watch, and atomic-replace operations;
  • storage quotas, file-count limits, path normalization, traversal rejection, and symlink policy;
  • schema versioning, migrations, backup, corruption recovery, and uninstall retention choices; and
  • clear separation between disposable cache, addon profile data, authored content, and Worldforge simulation saves.

Packages do not write arbitrary engine files or silently add Lua objects to gameplay saves.

#Audio IO

Expose a host-owned asynchronous audio service with:

  • manifest-declared clips, streams, playlists, and supported generated tones;
  • load, play, pause, resume, stop, fade, completion, and cancellation operations;
  • UI, ambience, music, voice, effects, and accessibility buses controlled by host policy;
  • volume, pan, loop, priority, ducking, and bounded concurrent-voice controls;
  • optional world-position requests resolved by the Audio and World owners rather than Lua-held pointers;
  • device-change, unavailable-format, underrun, and permission diagnostics;
  • streaming and decode budgets that cannot block rendering or simulation; and
  • global mute, accessibility, parental, and safe-mode controls that plugins cannot bypass.

Lua receives audio handles and facts, never the audio device, mixer buffers, or backend callbacks.

#Network IO

Networking should begin with high-level asynchronous HTTPS and WebSocket services. Lower-level stream or datagram access requires a separate measured use case and a visibly stronger permission.

The host must provide:

  • TLS validation, redirect policy, domain and port grants, request headers, bounded bodies, timeouts, cancellation, retry policy, and offline behavior;
  • bounded WebSocket connection, message, rate, reconnection, and queue contracts;
  • optional lower-level network capabilities only for trusted packages and supported platforms;
  • per-package bandwidth, connection, DNS, response, and concurrency limits;
  • secret and credential storage through host-owned secure references rather than readable globals;
  • user-agent, privacy, telemetry, and consent policy;
  • deterministic delivery at safe boundaries without claiming network responses are deterministic; and
  • clear multiplayer and authoritative-server boundaries before any addon can affect shared game state.

Network responses are external facts. They cannot directly mutate simulation state, participate in deterministic replay, or silently wake cold world regions.

#Package state, compatibility, and reload

Expand host-owned package profiles to support typed durable addon state with:

  • declared schemas, defaults, versions, migrations, size limits, and atomic replacement;
  • package-private namespaces and explicit shared-state contracts;
  • transactional migration before package activation;
  • rollback to the last valid profile and package graph;
  • export, reset, uninstall, and retention controls;
  • stable API deprecation windows and machine-readable replacement symbols;
  • dependency lock and compatibility reports; and
  • no serialized Lua closures, stacks, threads, userdata, pointers, canvas objects, or operation handles.

Reload preserves only declared compatible host state. Runtime animation, pending IO, callbacks, coroutines, and backend handles are cancelled and recreated.

#Authoring, testing, and debugging

A healthy ecosystem requires more than runtime APIs. Provide:

  • a package template and manifest generator;
  • schema validation, formatting, linting, API completion metadata, and compatibility checks;
  • a headless addon harness with simulated time, input, assets, messages, IO completion, and faults;
  • deterministic UI-intent snapshots and visual regression capture;
  • package unit tests and integration fixtures runnable without launching a full gameplay session;
  • per-package CPU time, instructions, memory, allocations, callbacks, queries, messages, draw commands, asset cost, IO, network, and audio diagnostics;
  • a developer console that identifies package, callback, generation, operation, and API symbol;
  • dependency-graph, permission, event, message, and operation inspectors;
  • recording and replay of host-provided addon inputs where external nondeterminism is captured as fixtures;
  • source-linked API errors and migration guidance; and
  • maintained example addons covering panels, Pong, libraries, inter-plugin services, assets, audio, networking, accessibility, and recovery.

Tooling must use the same public contracts as packages. Test-only authority is explicit and absent from supported player builds.

#Discovery, installation, and distribution

Production addon distribution should include:

  • normalized package archives, content hashes, provenance, licenses, and reproducible validation;
  • repository metadata, search, version channels, dependency resolution, download verification, and offline installation;
  • optional signatures and trust levels without implying that a signature makes code harmless;
  • staged updates, rollback, pinning, compatibility preview, and last-known-good package graphs;
  • enable, disable, uninstall, retained-data, and permission management through the compiled recovery interface;
  • duplicate identity, dependency-confusion, abandoned-library, and malicious-update protections;
  • moderation and reporting policy if a public repository is operated;
  • clear boundaries between interface addons, data packages, authored content, development tools, and any future native extensions; and
  • support diagnostics that can reproduce the exact API, package, dependency, permission, and asset graph.

#Accessibility, localization, and user control

Every new widget, canvas interaction, input action, sound, and notification contract should include:

  • semantic roles, labels, focus order, keyboard and controller alternatives;
  • high-contrast, text-scale, reduced-motion, photosensitivity, subtitle, caption, and audio-cue support where relevant;
  • localization keys, fallback language, pluralization, number formatting, and right-to-left layout;
  • host-enforced master volume, input remapping, privacy, network, and notification preferences; and
  • a way to identify which package created visible, audible, interactive, or networked behavior.

#Performance and containment

The ecosystem remains optional and bounded:

  • hidden or cold packages perform no presentation work unless they have a declared background capability;
  • background packages have lower update, IO, event, and message budgets;
  • the host measures cost per package and can throttle, suspend, or disable repeat offenders;
  • canvas batching, asset deduplication, audio mixing, and IO workers remain host-owned;
  • queues and retained data are finite and expose backpressure;
  • package failure cannot remove the compiled recovery interface or the last valid standard interface;
  • safe mode starts without optional packages, pending IO, networking, or migrated addon state; and
  • representative proof includes many installed packages, dependency depth, reload storms, malformed assets, unavailable devices, slow storage, lost networking, cancellation, and hostile callbacks.
  1. Measure and classify: collect real package requests and approve stable capability families.
  2. Permissions and async foundation: add manifest grants, operation IDs, completion events, cancellation, timeouts, quotas, diagnostics, and safe-boundary delivery.
  3. Dependency and cooperation layer: add version ranges, lockfiles, pure libraries, service libraries, inter-plugin messages, request-response calls, and transactional dependent reload.
  4. Interactive presentation: add update callbacks, logical input, focus, pointer handling, canvas intent, graphics assets, accessibility, and the Pong proof addon.
  5. Durable data and general IO: add virtual storage, graphics loading, audio, networking, secure references, privacy, and offline behavior through the common asynchronous contract.
  6. Authoring and validation: add templates, linting, test harnesses, inspectors, profiling, compatibility checks, migration tools, and maintained examples.
  7. Distribution and governance: add normalized packages, repositories, signatures, dependency resolution, permissions UI, safe updates, rollback, moderation policy, and release proof.

Each step must be useful independently. Later IO and distribution work must reuse the permission, operation, error, diagnostic, dependency, and recovery contracts proven by earlier steps.

#Exit criteria

  • A Lua addon can build an accessible animated canvas interface with rebindable input and declared assets without direct backend access.
  • The Pong proof runs at stable speed across frame rates, survives reload, and cannot stop the game when it faults or exceeds a budget.
  • Packages can exchange bounded typed messages and use versioned pure or service libraries without sharing Lua state.
  • File, graphics, audio, and network operations are asynchronous, cancellable, quota-bound, permission-checked, observable, and safe across reload and shutdown.
  • Addon profile data migrates and rolls back without entering simulation saves.
  • Creators can validate, test, profile, package, install, update, disable, and recover addons through documented supported tools.
  • A many-package stress matrix proves bounded CPU, memory, rendering, event, message, asset, audio, storage, and network behavior while the compiled recovery interface remains available.

#Explicit non-goals

  • Direct access to EnTT registries, components, domain-owner containers, SDL, ImGui, render backends, audio devices, worker threads, or operating-system handles.
  • Blocking IO or sleeping inside a Lua callback.
  • Shared mutable Lua globals between packages.
  • Treating messages, files, or network responses as authoritative gameplay mutation.
  • Loading arbitrary native modules into the game process.
  • Guaranteeing a native binary plugin ABI without a separately approved need, security model, platform policy, and compatibility plan.

#IndexPlanned Optional Work

Optional additions remain closed until their phase and activation evidence justify them.

Assigned Roadmap Gates

  1. A dependency cache for CI and repeat local configuration without weakening version pins.Origin: D.1 in Engine Development. Return gate: D.4 in Engine Development. Activation: Add when CI or repeated local configuration time becomes a measured cost.
  2. A small machine-readable slice manifest consumed by local verification tools.Origin: D.2 in Engine Development. Return gate: D.3 in Engine Development. Activation: Add when verification tools need machine-readable slice scope.
  3. A gate dashboard generated from build, test, replay, and benchmark results.Origin: D.2 in Engine Development. Return gate: D.5 in Engine Development. Activation: Add after gate results have one stable machine-readable source.
  4. A one-command local verification wrapper.Origin: D.3 in Engine Development. Return gate: D.3 in Engine Development. Activation: Add when the wrapper remains a thin caller of the documented commands.
  5. Automatic capture of seed, tick, command stream, timings, and assertion failures.Origin: D.3 in Engine Development. Return gate: D.3 in Engine Development. Activation: Add when a failing scenario needs automatic reproduction evidence.
  6. Continuous sanitizer, static-analysis, deterministic replay, and benchmark jobs.Origin: D.4 in Engine Development. Return gate: D.4 in Engine Development. Activation: Add to continuous verification after the local commands remain stable.
  7. A per-system timing table with rolling percentiles and work counts.Origin: D.4 in Engine Development. Return gate: D.4 in Engine Development. Activation: Add when per-system counters exist beyond the Phase 0 scheduler.
  8. Sprint-level estimates per module and dependency graph visualization.Origin: D.5 in Engine Development. Return gate: D.5 in Engine Development. Activation: Use only when estimates help sequence a concrete multi-slice gate.
  9. Automated milestone dashboard pulling status from tests/build scripts.Origin: D.5 in Engine Development. Return gate: D.5 in Engine Development. Activation: Add after build and test results expose stable status data.
  10. Gamepad abstraction even if keyboard/mouse is primary.Origin: Phase 0A in Engine Development. Return gate: Phase 23. Activation: Add when the approved release control and accessibility matrix requires gamepad support.
  11. Live frame graph overlay for timing spikes.Origin: Phase 0A in Engine Development. Return gate: Phase 23. Activation: Add when later systems provide useful per-frame and per-system timing data.
  12. Basic interpolation for smoother motion between fixed sim ticks.Origin: Phase 0C in Engine Development. Return gate: Phase 15. Activation: Add when production presentation measures a need for interpolation over authoritative movement.
  13. Simple package or manifest builder for map assets.Origin: Phase 0D in Engine Development. Return gate: Phase 15. Activation: Add when repeated map-asset production justifies a package or manifest authoring tool.
  14. Hot-reload for non-destructive data tables.Origin: Phase 0D in Engine Development. Return gate: Phase 23. Activation: Add for non-destructive authored tables after save and reset invalidation rules are explicit.
  15. Transcript diff tools between two runs.Origin: Phase 0E in Engine Development. Return gate: Phase 23. Activation: Add after later phases extend the transcript with world and gameplay commands.
  16. Inline graph panels for sim timings and system counts.Origin: Phase 0E in Engine Development. Return gate: Phase 23. Activation: Add when the expanded scheduler exposes meaningful timing and work counters.
  17. Debug bookmarks for jumping to important events.Origin: Phase 0E in Engine Development. Return gate: Phase 23. Activation: Add when event history is large enough that named navigation points help diagnosis.
  18. A world-state diff viewer for before-demotion and after-promotion comparisons.Origin: Phase 1 in Engine Development. Return gate: Phase 15. Activation: Add when integrated heat inspection needs direct before-demotion and after-promotion comparison.
  19. Trait tuning curves editable through debug UI.Origin: Phase 2 in Engine Development. Return gate: Phase 17. Activation: Add through the IAUS inspector after trait inputs and planner results remain deterministic.
  20. Long-retention export and replay UI for actor decision traces beyond the required deterministic decision proof.Origin: Phase 2 in Engine Development. Return gate: Phase 17. Activation: Add when the integrated causal-history tools need decision traces beyond normal retention.
  21. Construction ghost previews tied directly to that proven job creation path.Origin: Phase 3 in Engine Development. Return gate: Phase 16. Activation: Add production placement previews during Phase 16 settlement composition; Phase 7 already proves the authoritative placement command and rejection path.
  22. Economic telemetry graphs for throughput and idle labor.Origin: Phase 3 in Engine Development. Return gate: Phase 19. Activation: Re-evaluate during Phase 19 balancing when settlement lenses need history beyond the proven bounded throughput and bottleneck views.
  23. Priority tuning presets for different settlement policies.Origin: Phase 3 in Engine Development. Return gate: Phase 16. Activation: Re-evaluate during Phase 16 after the inhabited settlement proves which reusable policy presets are needed.
  24. Formation presets.Origin: Phase 4 in Engine Development. Return gate: Phase 22. Activation: Phase 12 proved one deterministic line formation through the stable Party command path. Add broader presets in Phase 22 only when faction encounters require distinct spacing or shape policy.
  25. Bias/distortion rules for rumors.Origin: Phase 5 in Engine Development. Return gate: Phase 20. Activation: Expand the proven lossless witness and household-report path in Phase 20 when governance and diplomacy require bounded bias or distortion.
  26. Timeline/history UI with scrub-friendly event summaries.Origin: Phase 6 in Engine Development. Return gate: Phase 17. Activation: Add after the event history schema and bounded retention policy are stable.
  27. Automated diffing of scenario transcripts between builds.Origin: Phase 6 in Engine Development. Return gate: Phase 23. Activation: Add after the locked scenario produces stable transcripts across builds.

Evidence-Gated Unassigned Backlog

  1. Hot restart after normal startup, failure, and shutdown paths are already proven.Origin: Phase 0A in Engine Development. Return gate: Unassigned. Activation: Add only after reset, save continuity, and shutdown remain proven.
  2. Compile-time registration helpers for component reflection/debug dumps.Origin: Phase 0B in Engine Development. Return gate: Unassigned. Activation: Add only where inspection or save diagnostics prove repeated registration work.
  3. Load and decode timing counters that can justify Phase 1 workers.Origin: Phase 0D in Engine Development. Return gate: Unassigned. Activation: Add only if a measured asset or chunk-load stall requires finer timing evidence before worker design.
  4. Asynchronous asset and chunk IO behind bounded queues.Origin: Phase 1 in Engine Development. Return gate: Unassigned. Activation: Add only behind bounded queues when measured world-breadth IO stalls justify workers. Phase 8 synchronous breadth stayed inside its proof budget.

#IndexDeferred Work

Deferred scope remains visible with its origin, return phase when assigned, and activation condition.

Assigned Roadmap Gates

  1. SDL3_mixer until the audio slice needs features beyond the thin SDL3 audio service.Origin: D.1 in Engine Development. Return gate: Phase 23. Activation: Consider when production audio requires features the SDL3 service cannot provide.
  2. Console packaging, mobile packaging, Steam integration, installers, and cross-platform release automation.Origin: D.1 in Engine Development. Return gate: Phase 23. Activation: Implement in Phase 23 only for explicitly approved release and distribution targets while retaining the Phase 13 reproducible baseline.
  3. Exotic allocators, job systems, data-oriented frameworks, or metaprogramming introduced before profiling shows a concrete need.Origin: D.4 in Engine Development. Return gate: D.4 in Engine Development. Activation: Consider only after profiling identifies a concrete allocation, scheduling, or data-layout limit.
  4. Premature platform-specific tuning that obscures the reference implementation.Origin: D.4 in Engine Development. Return gate: D.4 in Engine Development. Activation: Consider only after the portable reference path passes and platform measurements justify divergence.
  5. Reflection-heavy automatic ownership or serialization magic before concrete repetition proves the need.Origin: D.6 in Engine Development. Return gate: D.6 in Engine Development. Activation: Consider only after repeated ownership or serialization code proves a bounded tool would help.
  6. Cross-platform packaging niceties.Origin: Phase 0A in Engine Development. Return gate: Phase 23. Activation: Add through the Phase 23 release-expansion path while retaining the approved Phase 13 packaging baseline.
  7. Advanced input remapping UI.Origin: Phase 0A in Engine Development. Return gate: Phase 23. Activation: Phase 23 owns broad remapping after the existing accessibility and control path remains stable across the expanded game.
  8. Platform-specific polish beyond the dev environment.Origin: Phase 0A in Engine Development. Return gate: Phase 23. Activation: Add only for supported targets after the reference development path and production requirements are stable.
  9. Exotic multithreaded ECS partitioning before the slice proves the need.Origin: Phase 0B in Engine Development. Return gate: D.4 in Engine Development. Activation: Consider only after profiling proves the single-threaded deterministic schedule misses budget.
  10. Final art pipeline.Origin: Phase 0C in Engine Development. Return gate: Phase 23. Activation: Open during Phase 23 final presentation work through the proven asset and render boundaries.
  11. Complex material or shader systems.Origin: Phase 0C in Engine Development. Return gate: Phase 23. Activation: Open only when production art has a measured material requirement.
  12. High-end lighting or post-processing work.Origin: Phase 0C in Engine Development. Return gate: Phase 23. Activation: Open only when production presentation has a measured lighting or post-processing requirement.
  13. Full asset cooker pipeline.Origin: Phase 0D in Engine Development. Return gate: Phase 23. Activation: Add when production content volume justifies a cooker behind the existing manifest and validation owner.
  14. Full editor suite.Origin: Phase 0E in Engine Development. Return gate: Phase 23. Activation: Add only after repeated production workflows define the required editor scope.
  15. Team-facing polished tooling UX beyond what active engineering needs.Origin: Phase 0E in Engine Development. Return gate: Phase 23. Activation: Polish only the tooling paths used by active engineering and slice verification.
  16. Many biomes, large settlements, distant factions, and broad ecology simulation.Origin: Phase 1 in Engine Development. Return gate: Phase 18. Activation: Phase 8 proved bounded biome and ecology contracts. Re-evaluate broad biome and ecology content during the Phase 18 expedition and world-breadth proof.
  17. Very deep personality simulation.Origin: Phase 2 in Engine Development. Return gate: Phase 17. Activation: Expand only after the first actor-needs and planning slice proves its value and population budgets.
  18. Dozens of nuanced social motives beyond the first slice.Origin: Phase 2 in Engine Development. Return gate: Phase 17. Activation: Expand only after the first motives produce clear, explainable play.
  19. Wide crafting tree.Origin: Phase 3 in Engine Development. Return gate: Phase 19. Activation: Re-evaluate during Phase 19 production breadth. Phase 9 proved the owner path; breadth must use it without changing authority.
  20. Advanced trade simulation.Origin: Phase 3 in Engine Development. Return gate: Phase 19. Activation: Re-evaluate during Phase 19 content and balance work. Phase 9 proved one physical obligation; broader offers and markets must retain that path.
  21. Luxury goods and deep specialization economy layers.Origin: Phase 3 in Engine Development. Return gate: Phase 19. Activation: Re-evaluate during Phase 19 after representative settlement and regional throughput remain readable.
  22. Complex weapon variety.Origin: Phase 4 in Engine Development. Return gate: Phase 22. Activation: Phase 12 proved the combat and equipment contract. Add weapon breadth in Phase 22 as validated content without adding weapon-specific combat owners.
  23. Advanced formation warfare.Origin: Phase 4 in Engine Development. Return gate: Phase 22. Activation: Phase 12 proved one formation through selection, Party, movement, and feedback. Add advanced formations in Phase 22 only through that same path and after faction encounters justify them.
  24. Large-scale RTS combat outside the vertical slice.Origin: Phase 4 in Engine Development. Return gate: Phase 22. Activation: Phase 12 proved settlement defense, faction AI, supply consequences, and bounded remote conflict. Increase force scale in Phase 22 only against representative performance and readability budgets.
  25. Generational lineage history depth.Origin: Phase 5 in Engine Development. Return gate: Phase 17. Activation: Open after Phase 10 household, life-stage, birth, death, and lineage contracts are proven.
  26. Large-scale politics or faction propaganda systems.Origin: Phase 5 in Engine Development. Return gate: Phase 20. Activation: Phase 11 and Phase 12 proved institution, faction, and pressure records. Add politics or propaganda in Phase 20 only through those owners and measured information-disclosure rules.
  27. Rich judicial/social institution response layers.Origin: Phase 5 in Engine Development. Return gate: Phase 20. Activation: Add governance, law, and institutional responses after the first institutional request and consequence chain pass.
  28. Final UX polish pass.Origin: Phase 6 in Engine Development. Return gate: Phase 23. Activation: Perform only after the complete slice is functional and its feedback problems are measured.
  29. Cinematic presentation systems.Origin: Phase 6 in Engine Development. Return gate: Phase 23. Activation: Add cinematic presentation only for production events that demonstrate a concrete need.
  30. Broad accessibility and control remapping work beyond what the slice needs immediately.Origin: Phase 6 in Engine Development. Return gate: Phase 23. Activation: Complete broad remapping and accessibility in Phase 23 while retaining the Phase 13 production and release baseline.
  31. Lua-backed development scripting with detached typed queries, events, UI functions, typed and restricted commands, transactional hot reload, package governance, recovery, and an external API Reference.Origin: Phase 14. Return gate: Phase 14. Activation: Implement through the Phase 14 registry and authoritative command-owner contract; raw state writes, native plugins, operating-system access, and save authority remain excluded.

Evidence-Gated Unassigned Backlog

  1. OpenGL, Vulkan, Metal, or Direct3D renderer work before SDL_Renderer fails a measured slice requirement.Origin: D.1 in Engine Development. Return gate: Unassigned. Activation: Open only when SDL_Renderer fails a measured requirement and a renderer phase is approved.
  2. A native plugin ABI, broad reflection, or a general editor framework beyond the Phase 14 scripting registry.Origin: D.1 in Engine Development. Return gate: Unassigned. Activation: Keep unassigned until repeated production work proves a specific native-extension, reflection, or editor contract that typed Lua queries, events, UI functions, and commands cannot satisfy.
  3. A custom ECS implementation. EnTT is the baseline unless profiling or a concrete missing capability proves replacement is worth the migration.Origin: D.1 in Engine Development. Return gate: Unassigned. Activation: Open only when profiling or a missing capability justifies replacing EnTT.
  4. Multi-team process, release-train ceremony, and heavyweight project management.Origin: D.2 in Engine Development. Return gate: Unassigned. Activation: Open only when team size and release cadence require this process.
  5. Speculative systems that are not exercised by the regression spine.Origin: D.2 in Engine Development. Return gate: Unassigned. Activation: Promote only when a regression-spine scenario exercises the system.
  6. Perfect test coverage percentages without regard to risk.Origin: D.3 in Engine Development. Return gate: Unassigned. Activation: No activation target; coverage remains risk-based rather than percentage-driven.
  7. Process ceremony that does not improve correctness or recovery.Origin: D.3 in Engine Development. Return gate: Unassigned. Activation: No activation target until a concrete recovery or correctness problem requires process.
  8. A service locator or dependency framework that exists only to make architecture look generalized.Origin: D.6 in Engine Development. Return gate: Unassigned. Activation: Open only if composition repetition proves a narrower explicit pattern is insufficient.
  9. Full in-engine editor reflection layer.Origin: Phase 0B in Engine Development. Return gate: Unassigned. Activation: Add only where repeated production authoring requires an in-engine reflection surface.
  10. Network replication concerns.Origin: Phase 0B in Engine Development. Return gate: Unassigned. Activation: No current owner: multiplayer is outside the Current product vision. Add a replication phase only if product direction changes.
  11. Terrain elevation, cliffs, slopes, multiple floors, bridges, height-aware picking, and height-aware simulation or navigation.Origin: Phase 0C in Engine Development. Return gate: Unassigned. Activation: Open only when an approved terrain design requires vertical navigation and height-aware simulation. Phase 8 did not require it.
  12. Large-scale procedural world authoring tools.Origin: Phase 0D in Engine Development. Return gate: Unassigned. Activation: Add only when repeated world-authoring work proves the required tool contract. Phase 8 breadth did not require it.
  13. Aggressive streaming optimization before the slice needs it.Origin: Phase 0D in Engine Development. Return gate: Unassigned. Activation: Consider only when measured world-breadth streaming exceeds the proven synchronous path. Phase 8 remained inside its budget.
  14. Visual scripting tools.Origin: Phase 0E in Engine Development. Return gate: Unassigned. Activation: Add only after repeated authored content defines a specific visual-scripting contract.
  15. Procedurally unbounded terrain generation.Origin: Phase 1 in Engine Development. Return gate: Unassigned. Activation: Open only if bounded authored world breadth stops meeting an approved gameplay requirement. Phase 8 did not require unbounded generation.
  16. Perfect embodied replay of every remote footstep or animation frame.Origin: Phase 1 in Engine Development. Return gate: Unassigned. Activation: Promote only if remote presentation fidelity becomes a proven gameplay requirement.
  17. Natural-language flavored thought text generation.Origin: Phase 2 in Engine Development. Return gate: Unassigned. Activation: Consider only when structured thoughts are stable and production-authored text cannot meet the presentation need.

Systems Contents

  1. S.0Codebase MapArchitecture layers, evidence rules, current boundaries, and coverage limits.
  2. S.POwnership and Slice Provenance39 proven owners, 75 historical slices, and 43 attributed contract functions in preview coverage.
  3. S.1App and Composition1061 indexed definitions. Process startup, dependency composition, application/session flow coordination, runtime configuration and front-end entry, the shared runtime session, bounded settlement-work, autonomous-project choice and terminal-outcome composition, the current foundation document, and script API metadata, detached queries, typed commands, events, and sandboxed Lua packages.
  4. S.2Assets97 indexed definitions. Manifest validation, stable asset lookup, path safety, immutable byte caching, the required runtime content catalog, release, reset, and load statistics.
  5. S.3Core27 indexed definitions. Backend-neutral low-level contracts for audio, platform input events, runtime commands, and ordered command storage.
  6. S.4Platform SDL10 indexed definitions. SDL lifecycle, OS event translation and observation, monotonic timing, short delays, process-memory sampling, and SDL audio startup/fallback.
  7. S.5Controls30 indexed definitions. Backend-neutral bindings, per-frame action transitions, held-action reference counts, pointer state, and runtime command mapping.
  8. S.6Simulation519 indexed definitions. Stable entity identity, ECS storage, deterministic tick order, fixed-step scheduling, versioned ECS state, and authoritative World grid, topology, exact-local and route travel, environment, ecology, renewable resources, infrastructure, and Settlements.
  9. S.7Game2050 indexed definitions. Worldforge-specific authored schemas and gameplay rules for actors, work, resources, food and water supply, construction, settlements and autonomous project choice, production, trade, regional economy, control, parties, player orders, Intersections, incident outcomes, observer knowledge, scouting, memory, reputation, relationships, and households.
  10. S.8Render and Selection212 indexed definitions. Isometric projection, camera state, render-scene extraction and ordering, world-space selection, render debug state, SDL asset decoding, and SDL presentation.
  11. S.9Developer Tools370 indexed definitions. Developer inspection and presentation for the current runtime plus reset/fast-forward coordination, versioned recording, replay, checkpoint hashing, first-divergence reporting, and bounded graphical frame benchmarking.
  12. S.10Test Support647 indexed definitions. Authored test fixtures and helper functions used to express deterministic contracts without duplicating production ownership paths.
  13. S.11Runtime DataManifest, runtime configuration, scenarios, schema versions, IDs, and ownership.
  14. S.12Build and VerificationCMake targets, executable compositions, test files, smoke scenarios, and sanitizer coverage.
Code referenceBack to tabs

#Worldforge Systems Reference

This page separates code modules, current runtime owners, historical implementation slices, attributed contract functions, and raw source inventory. Only current production evidence appears as a system. Planned work remains in Development or Future.

Audited commit0f033a657085
C++ files790
Production definitions4360
Test helpers647
Interface contracts16
Modules10
Coverage rule Universal Ctags inventories definitions only from C++ sources declared by CMake and production headers reachable from those sources. Owner records must resolve compiled source files and qualified function evidence. Contract records must resolve one exact qualified current function. Slice records must resolve their Git revision and historical heading. Test records must resolve named Catch2 or CTest cases. Unattributed functions remain collapsed source inventory and make no ownership or historical claim.
Authored coverage 327 of 5023 indexed function entries have current authored notes; 43 of 4360 production definitions have owner-and-slice contract attribution; 88 of 137 registered test sources have authored proof summaries. The raw inventory is complete for declared targets. Owner, slice, contract, and proof attribution remains representative until roadmap S2-S8 complete.

Target and ownership direction

worldforge / worldforge_headless→app→assets + game→sim + core
SDL platform→core events→controls→runtime / camera / debug / selection adapters
sim truth→render scene + selection candidates→SDL renderer
F8 / F9→validated reset or tick budget→existing state owners
foundation + camera→recorded inputs + checkpoints→first replay divergence

Current implementation boundary

Phases 0A-0E, the Phase 0 Addendum, Phases 1-4, the post-roadmap correction gate, Systems provenance S1-S1A, and Phase 5A-5D are complete. Phase 5E witnessed incident reputation composition is the current gameplay gate.

Phase 4 proves Actor and Party control, contextual Site movement, bounded attack execution, Intersection scheduling and lifecycle, wildlife and traveler-dispute outcomes, scouting, release reconciliation, persistence, replay, inspection, and visible-proxy scale through existing owners. A right-click on ground resolves an eligible authored Site within a bounded radius. Exact-ground pathfinding, multi-step escort or rescue, formations, and deeper warfare do not exist in the current game and therefore have no system entry on this page.

Game owns durable move and attack order identity and lifecycle. Actor, Party, and World own plans, conditions, Party intents, routes, and positions. App composes requests, and Controls, Render, selection, and Tools translate or display state without becoming gameplay owners.

Systems provenance preview

#Ownership and Slice Provenance

A two-way index from current runtime owners to the historical slices and contract functions that introduced or extended them.

Reference statusThis is representative Phase 3 construction coverage, not a complete architecture authority and not an input to contributor context packs. Only records with current source symbols, exact function definitions, and existing proof files are accepted. Planned systems have no entry here.
Current owners39
Historical slices75
Contract functions43
CoverageRepresentative

Current runtime owners

Current owner · App and Composition

#Runtime session composition

Schedules the ordered running-session path, retains composed domain owners plus one shared immutable content-catalog lifetime, supplies bounded derived settlement-work indexes and calendar context, and reconciles terminal settlement-project facts without taking domain mutation authority.

Authoritative state
RuntimeSession owns session composition, the shared immutable content-catalog lifetime, ECS world, scheduler access, optional retained domain-owner lifetimes, and the current bounded derived settlement-work composition.
Boundary
It orders calls, resolves closed catalog classifications into owner requests, validates cross-owner composition, rebuilds derived eligible-worker and spatial indexes from current owner facts, reconciles a terminal selected Construction into Settlement through a revision-checked transaction, and hydrates World-owned pending-arrival queues once during candidate load or restore. Catalog definitions remain with Assets; gameplay rules and domain state remain with Game and Simulation owners.
12 current source files
67 attributed slices
6 attributed contract functions
Current owner · Simulation

#World runtime

Owns topology, signed chunk coordinates, chunk terrain, residency, Sites, routes, physical local and inter-Site movement, local road and boundary infrastructure, retained land areas and their optional controlling Sites, heat positions, world time and calendar derivation, deterministic travel, environment, regional ecology, and renewable Site resources.

Authoritative state
WorldRuntime and its focused state owners retain authoritative spatial, terrain, residency, route, local-navigation, physical route-segment, local road cell paths, fence and gate edges, typed connection anchors, land use, optional controlling Site, dedication and access cells, deterministic residual, heat, time, environment, ecology-population, renewable-resource, and infrastructure facts. Stable Chunk IDs resolve through one derived signed-coordinate index. Ordered active-movement indexes and pending-arrival queues are derived from retained movement records and have no independent save authority.
Boundary
Game supplies Actor and transport capability modifiers and App supplies validated global movement policy and content references. World alone owns embodied position, compressed route progress, arrival, retained land geometry and condition, and persistent local infrastructure geometry, lifecycle, condition, access, and revision. Render collision and presentation cannot author or repair those facts. Normal ticks visit only active movers; pending-arrival queues bound cross-owner reconciliation. Other systems do not retain a second position, land, road, fence, gate, topology, navigation, environment, ecology, or renewable-resource authority.
20 current source files
48 attributed slices
4 attributed contract functions
Current owner · Game

#Actor runtime

Owns persistent actor condition, life status, lineage references, capabilities, hunger and hydration needs, focus, exact-destination plans, task bindings, schedules, daily routine state, actor-local transition history, and enforcement of the supplied live-population bound during candidate construction.

Authoritative state
ActorRuntime retains actor records and applies validated actor-local progression, plan, task, condition, life-course, hunger and hydration relief, schedule, daily routine, and movement-capability transitions. Job plans may retain one exact target position while World owns its path and arrival. Candidate construction separates the supplied scenario live-population limit from the immutable technical Actor-record ceiling. Dead Actors remain persistent but leave active scheduling and cannot start work, movement, combat, focus plans, or routine evaluation.
Boundary
Actor owns the durable movement capability modifier, need pressure, and plan intent and enforces a detached population limit, but does not own current position, local path progress, route progress, global movement policy, resource consumption, or scenario capacity policy. Actor records may reference stable Work, Site, Route, Party, or target IDs. Those references do not transfer authority from their owning systems.
8 current source files
42 attributed slices
2 attributed contract functions
Current owner · Game

#Work lifecycle

Owns demand, job, task, reservation, and assignment-order identity, legal lifecycle transitions, autonomous worker release and replacement claims, and the derived live-claim index used by bounded schedulers.

Authoritative state
WorkLifecycleRuntime retains every Work record, stable ID high-water mark, transition counter, and legal state history. It maintains a derived canonical Actor-to-live-Job index from claimed and active Job records. An autonomous handoff consumes the delivered build reservation, returns the build task to pending, and makes the Job available before one validated replacement claim can reactivate both.
Boundary
Other systems request exact Work transitions. They may retain stable Work IDs and read bounded lookup results but cannot duplicate or infer Work state. A live player assignment cannot be released through the autonomous handoff path. The live-claim index is rebuilt from and invalidated by authoritative Job transitions.
3 current source files
37 attributed slices
1 attributed contract functions
Current owner · Game

#Resource economy

Owns runtime resource records, inventory containers, allocations, transfers, quantities, accounted consumed sinks, exact live-capacity use, and capacity enforcement for Resource mutations.

Authoritative state
ResourceEconomyRuntime retains registered runtime resource IDs keyed by stable catalog resource identity, inventory containers, transfer records, totals, and conservation evidence. It derives exact live resource units, largest container capacity, aggregate inventory capacity, and container count from retained state.
Boundary
Assets owns immutable resource definition metadata. Work, Construction, Party, and App provide validated stable references and request transactions under detached scenario limits. They do not edit quantities or container capacity directly, and Resource does not own the scenario policy or content catalog.
3 current source files
44 attributed slices
2 attributed contract functions
Current owner · Game

#Construction runtime

Owns building construction and land-conversion proposal identity, stage progress, blockage, worker handoff, material references, and terminal outcome.

Authoritative state
ConstructionRuntime retains building construction and completed-building records. LandConversionRuntime is the Construction-owned land proposal and stage-progress component. Both retain stable identity, required and completed work, worker handoff, revision, and terminal cause.
Boundary
Assets owns immutable building and land-use metadata. Construction coordinates exact Work, Resource, Actor, and World transactions through their APIs. World alone mutates final land condition. Construction does not own inventories, Work lifecycles, Actor capability, routes, or content definitions.
5 current source files
24 attributed slices
3 attributed contract functions
Current owner · Game

#Construction work scheduler

Owns bounded autonomous construction claim, material delivery, labor, worker-replacement traversal, interruption timeout reconciliation, cadence, budgets, cursors, counters, and last-update evidence while coordinating existing owners.

Authoritative state
ConstructionWorkSchedulerState retains cadence, explicit visit and mutation budgets, stable claim, execution, reconciliation, and interrupted-worker replacement continuation, completed replacement-scan evidence, counters, and the last bounded result. It derives each due work contribution from detached construction requirements, runtime tuning, Actor capability, and fixed-step duration.
Boundary
The scheduler reads supplied settlement-scoped worker and spatial indexes, ranks eligible work, moves one exact material bundle through Resource, calculates fixed-point labor, and orders prevalidated owner API calls. It distinguishes a direct-control pause from an autonomous critical-need interruption. It may fail an interrupted site only after the grace period and one complete bounded pass over eligible replacements. It does not own Construction, Actor, RuntimeTuning, Work, Resource, World, or settlement truth and does not scan the world Actor population.
2 current source files
5 attributed slices
2 attributed contract functions
Current owner · Game

#Control authority

Owns whether autonomous, assigned, direct, or party authority currently governs each actor.

Authoritative state
ControlAuthorityRuntime retains the autonomous, assigned, directly controlled, crisis, or released authority record and revision for every Actor.
Boundary
Selection is observational and cannot change authority. Contextual orders require an already directly controlled recipient. App coordinates explicit Take Control and Release Control with Actor reconciliation; ControlAuthorityRuntime does not mutate Actor plans, Work, Construction, or scheduler state directly.
2 current source files
15 attributed slices
0 attributed contract functions
  • No contract-function attribution yet.
Current owner · Game

#Observer Knowledge

Owns what one observer has discovered or learned about Sites, routes, environment, ecology, and renewable resources, including source and freshness.

Authoritative state
ObserverKnowledgeSnapshot retains canonical discovery and reported facts, acquisition source, observed tick, expiry, and current or stale state. Schema migration never invents learned facts.
Boundary
World remains authoritative for current truth. Observation and report operations copy only facts that their validated discovery scope permits. Player reads and tools consume detached projections and cannot query hidden World facts through this owner.
4 current source files
1 attributed slices
0 attributed contract functions
  • No contract-function attribution yet.
Current owner · Game

#Production runtime

Owns stable recipe-definition references, production-order progress, accepted Building service use and context, and bottleneck and economic explanation.

Authoritative state
ProductionRuntime retains catalog-resolved recipes with stable definition IDs, stable order identity, accepted Building and inventory references, reserved service capacity, accepted Building condition, active recipe step, progress, terminal stage, revision, and last operation.
Boundary
Assets owns immutable recipe and economic metadata. Construction owns Building state, Work owns labor graphs and reservations, Resource owns normal and maintenance quantities and transfers, and World owns routes. Production requests those owner operations and never copies their authoritative state or the catalog.
3 current source files
8 attributed slices
0 attributed contract functions
  • No contract-function attribution yet.
Current owner · Game

#Trade runtime

Owns party-provisioning and trade-obligation shipment terms, stable settlement and Route endpoints, scarcity-derived price evidence, progress, deadlines, accepted risk context, outcomes, and bottleneck explanation.

Authoritative state
TradeRuntime retains stable shipment identity, purpose, accepted Party revision, source and destination Settlement and inventory references, cargo and exchange terms, scarcity summary revisions, unit and total price, deadline, Route identity, risk context, lifecycle stage, revision, and last operation.
Boundary
Party owns membership and leadership, Work owns labor and reservations, Resource owns cargo and transfers, RegionalEconomy owns scarcity summaries, Settlement owns endpoints, and World owns routes and exposure facts. Trade retains accepted terms and outcomes but cannot create or repair those owner facts.
3 current source files
8 attributed slices
0 attributed contract functions
  • No contract-function attribution yet.
Current owner · Game

#Regional economy runtime

Owns bounded revisioned regional supply, demand, and route-flow observations, their incremental summaries, and deterministic scarcity-derived trade quotes.

Authoritative state
RegionalEconomyRuntime retains canonical source facts, per-Region Resource summaries, route-flow summaries, and exact last-update visit, mutation, and deferred-work evidence.
Boundary
Resource remains exact inventory authority, Trade remains obligation and accepted-term authority, Settlement remains endpoint authority, and World remains spatial and Route authority. Regional summaries and quotes are deterministic observations for decisions and presentation only; they move no goods or money.
3 current source files
3 attributed slices
0 attributed contract functions
  • No contract-function attribution yet.
Current owner · Game

#Memory runtime

Owns bounded retained memories, provenance, participants, disclosure, intensity inputs, expiry, and idempotence receipts.

Authoritative state
MemoryRuntime retains canonical Memory records and witness or report receipts. Effective intensity and inspection views are derived.
Boundary
Incidents and reporting Actors provide validated causal inputs. Relationship, Household, Reputation, Actor, and Tools consumers cannot rewrite Memory truth.
3 current source files
4 attributed slices
0 attributed contract functions
  • No contract-function attribution yet.
Current owner · Game

#Relationship runtime

Owns one bounded canonical record for each retained Actor pair, including affinity, trust, strain, causal evidence, and revision.

Authoritative state
RelationshipRuntime retains stable pair identity and indexed Actor adjacency. Relationship stage is derived from its retained values.
Boundary
Incidents and Memories provide evidence. Household formation reads a qualified Relationship but does not take pair-value authority.
3 current source files
6 attributed slices
0 attributed contract functions
  • No contract-function attribution yet.
Current owner · Game

#Household runtime

Owns stable Household identity, unique membership, strain, formation evidence, residence references, and bounded care history.

Authoritative state
HouseholdRuntime retains canonical members, residence benefits, causal evidence, and material care records with one indexed Household per Actor.
Boundary
Actor owns needs and life state, Resource owns quantities, Construction owns Buildings, and Incident owns causal episode facts. Household records stable references only.
3 current source files
16 attributed slices
0 attributed contract functions
  • No contract-function attribution yet.
Current owner · Game

#Reputation runtime

Owns bounded reputation records for Actors and Households with revisioned causal evidence.

Authoritative state
ReputationRuntime retains canonical subject and observer scopes, domain values, evidence, and update reasons.
Boundary
Memory, Incident, Relationship, and Household facts may support reputation changes but remain authoritative in their own owners.
3 current source files
5 attributed slices
0 attributed contract functions
  • No contract-function attribution yet.
Current owner · Game

#Incident content catalog

Owns immutable validated incident families, event templates, quest templates, institutions, request templates, focused resolver bindings, content versions, and authoring budgets.

Authoritative state
RuntimeIncidentCatalog retains canonical immutable authored definitions loaded through AssetService for one session.
Boundary
The catalog defines policy and references focused resolvers. It does not own incidents, quests, actors, obligations, jobs, inventory, relationships, memory, reputation, or world state.
4 current source files
1 attributed slices
1 attributed contract functions
Current owner · Game

#Intersection incident lifecycle

Owns stable Intersection and Incident identities, legal incident transitions, terminal reasons, source bindings, and retained authored repetition cooldowns.

Authoritative state
IntersectionLifecycleRuntime retains durable Intersection and Incident records, operation high-water marks, source indexes, and cooldown indexes.
Boundary
The lifecycle records an episode and its source context. Actor, World, Work, Resource, Relationship, Memory, Reputation, Household, and consequence owners retain their own state.
3 current source files
4 attributed slices
0 attributed contract functions
  • No contract-function attribution yet.
Current owner · Game

#Structured quest lifecycle

Owns stable multi-step quest identity, current step, control mode, participants, deadlines, legal transitions, and bounded history.

Authoritative state
StructuredQuestRuntime retains durable quest records and operation high-water marks against immutable quest templates.
Boundary
Quest state references real Incident, Party, Actor, Site, and route facts. It cannot invent or repair those owners or retain quest-only copies of their truth.
4 current source files
1 attributed slices
1 attributed contract functions
Current owner · Game

#Institutional request lifecycle

Owns institutions, formal messages, requests, obligations, response deadlines, resolution evidence, standing, and legal terminal state.

Authoritative state
InstitutionalRequestRuntime retains canonical institutions, messages, requests, obligations, and stable identity high-water marks.
Boundary
Resolution reads revisioned Actor, Relationship, Reputation, and Memory evidence. Trade, Work, Resource, and World remain authoritative for material consequences.
4 current source files
3 attributed slices
1 attributed contract functions
Current owner · Game

#Structured event consequence ledger

Owns bounded idempotence and causal references for committed quest and institutional consequences.

Authoritative state
StructuredEventConsequenceRuntime retains one stable record per source quest or obligation and references the exact downstream owner facts created by App composition.
Boundary
The ledger proves what committed and prevents duplicate application. It cannot mutate, replace, or reconstruct Work, Trade, World, Relationship, Memory, Resource, or Actor state.
4 current source files
1 attributed slices
1 attributed contract functions
Current owner · Game

#Structured event presentation policy

Derives a bounded deterministic prompt list from retained incident, quest, request, and obligation state.

Authoritative state
This policy retains no durable state. Each snapshot is rebuilt from validated owner state and the current simulation tick.
Boundary
Presentation can prioritize, suppress related chains, and omit expired terminal notices. It cannot mutate gameplay, acknowledge prompts, or become save authority.
3 current source files
1 attributed slices
1 attributed contract functions
Current owner · Game

#Party runtime

Owns stable Party identity, canonical membership, formation policy, movement intent, assistance, provisioning references, and lifecycle.

Authoritative state
PartyRuntime retains canonical member IDs, leader, formation type and spacing, active intent, exact-ground slots, and bounded lifecycle evidence.
Boundary
Actor owns people and condition, World owns position and paths, Resource owns inventory, and Work owns jobs. Party coordinates stable references and cannot copy or repair those facts. App may expand one selected Actor into the complete canonical active Party for command recipients, but inspection selection remains a separate detached value.
5 current source files
8 attributed slices
1 attributed contract functions
Current owner · Game

#Settlement runtime

Owns stable Settlement identity, site and stockpile references, housing and infrastructure references, defense state, alarm evidence, retained autonomous strategy evidence, housing-pressure, housing-method, and housing-parcel assessments, decisions and terminal outcomes, cadences, and bounded local indexes.

Authoritative state
SettlementRuntime retains canonical settlement records, defense and alarm evidence, autonomous need, goal, plan, supply, production, housing-pressure, housing-method, and exact-footprint housing-parcel evidence, exact execution bindings, bounded histories, cadences, and validated references to existing domain owners.
Boundary
Household owns membership and residence, Actor owns life stage, Relationship owns partnership, Construction owns buildings, Resource owns custody, World owns access, Work owns jobs, and every execution owner retains its mutation path. Pure settlement reasoners evaluate detached facts. Settlement alone retains strategic evidence and accepted bindings; it does not copy or repair the authoritative owner facts.
11 current source files
21 attributed slices
2 attributed contract functions
Current owner · Game

#Faction runtime

Owns stable Faction identity, canonical references, bilateral stance, bounded strategic intent, pressure evidence, and remote-conflict summaries.

Authoritative state
FactionRuntime retains faction and relation revisions, strategic cadence and traces, causal pressure references, and bounded remote summaries with deterministic cursor evidence.
Boundary
World, Actor, Party, Resource, Settlement, Institution, Relationship, Reputation, Incident, and Memory owners retain their facts. Faction stores validated stable references and strategic evidence only.
3 current source files
1 attributed slices
1 attributed contract functions
Current owner · App and Composition

#Script API registry

Owns versioned metadata for script-facing symbols, interface layers, package origins, and deterministic normalized export.

Authoritative state
ScriptApiRegistry retains validated descriptors indexed by stable symbol ID plus one registry API version. It stores no simulation values, script state, packages, callbacks, or backend handles.
Boundary
The registry describes interfaces but cannot implement a query, grant command authority, load a package, execute Lua, mutate a domain owner, or become documentation-independent truth.
5 current source files
42 attributed slices
5 attributed contract functions
Current owner · App and Composition

#Script event service

Owns stable sequence assignment and bounded retention for immutable post-commit facts exposed to script packages.

Authoritative state
ScriptEventService retains at most 256 detached ScriptEvent records in monotonic publication order. It owns no simulation fact, publisher decision, Lua callback, package generation, or saved state.
Boundary
Authoritative domain owners decide when mutation committed. ScriptPackageHost owns package subscriptions and protected delivery. The event service only validates registered identities, assigns sequence, retains bounded detached values, and provides ordered catch-up.
2 current source files
6 attributed slices
1 attributed contract functions
Current owner · App and Composition

#Runtime performance monitor

Owns bounded process-local current and explicitly logged frame, process CPU, and resident-memory diagnostics.

Authoritative state
RuntimePerformanceMonitor retains at most 120 rolling current samples and one package-owned log of at most 36,000 samples. It updates min, average, and max aggregates incrementally and retains no gameplay, save, replay, or render authority.
Boundary
The graphical root supplies presented-frame samples. Platform supplies optional process memory. Lua receives detached current, summary, or paged sample values and may only start or stop the bounded host log.
4 current source files
1 attributed slices
0 attributed contract functions
  • No contract-function attribution yet.
Current owner · Developer Tools

#Frame performance benchmark

Owns one bounded process-local graphical benchmark interval and its detached percentile and scene-load summary.

Authoritative state
FramePerformanceBenchmark discards the configured warmup, retains only the requested measured samples, and derives one FPS, frame-latency, slow-frame, and peak scene-load summary.
Boundary
App supplies normal presented-frame timing and detached scene counts. The benchmark cannot drive simulation, change VSync after startup, retain renderer handles, or enter saves and replay.
3 current source files
1 attributed slices
0 attributed contract functions
  • No contract-function attribution yet.
Current owner · App and Composition

#Runtime tuning service

Owns versioned definitions, current values, revision validation, and atomic live mutation for supported runtime tuning.

Authoritative state
RuntimeTuningService retains one validated sorted value map and monotonic revision. The registry contains simulation time scale in basis points, presentation frame target in hertz, embodied movement base rate in millimeters per second, and construction base throughput in work units per second.
Boundary
The scheduler, graphical root, World movement composition, and construction-work composition consume detached values. Script commands request changes, events report committed changes, and Lua reads snapshots. The service owns global movement and construction-rate policy but not Actor or transport capability, construction requirements, pathfinding, position, progress, or arrival. It does not own capacities, content catalogs, spawning, world generation, or render state.
4 current source files
4 attributed slices
1 attributed contract functions
Current owner · App and Composition

#Scenario capacity policy

Owns versioned scenario limits for live population, live resource units, individual inventory-container capacity, and aggregate inventory capacity.

Authoritative state
ScenarioCapacityPolicyService retains one validated policy and monotonic revision. The authored scenario supplies the initial limits; saved session state retains later committed development changes.
Boundary
Technical ceilings are fixed engine safety bounds. Actor and Resource owners enforce detached scenario limits when they build or mutate their own state. This owner validates revisioned policy changes against observed use but does not own Actors, resources, inventories, Buildings, spawning, or content definitions.
6 current source files
2 attributed slices
2 attributed contract functions
Current owner · Assets

#Runtime content catalog

Owns validation, canonical ordering, stable lookup, and shared immutable lifetime for settlement content definitions.

Authoritative state
RuntimeContentCatalog retains one schema and catalog version plus immutable resource, source-type, profession, job-archetype, recipe, and building definition families in canonical stable-ID order.
Boundary
The catalog owns source definition metadata and cross-family references. Game owners retain mutable runtime records and stable definition IDs. App retains shared lifetime and resolves only closed classifications into existing owner requests; no caller can mutate the catalog.
2 current source files
8 attributed slices
2 attributed contract functions
Current owner · App and Composition

#Settlement work composition

Builds bounded canonical eligible-worker and exact spatial-anchor indexes from authored settlement, Actor, Resource, and World facts.

Authoritative state
SettlementWorkCompositionCache retains one disposable sorted resident Actor list and one disposable owner-keyed spatial binding list plus the source topology revision, local-navigation revision, and refresh tick. RuntimeSession reuses it between consuming scheduler cadences and across consumers due on the same tick. The legacy economy path derives only resident Actors that already own carried-inventory containers.
Boundary
Settlement definitions identify authored participants and anchors, Actor owns eligibility, Resource owns containers, and World owns topology, local navigation, and position. Supply, construction, land conversion, farming, local infrastructure, and recurring village-economy cadences plus topology or navigation revision changes, explicit heat transitions, and restore are the complete rebuild or invalidation seams. The cache is derived-only, is not serialized, and cannot create work, move Actors, or change resources.
2 current source files
3 attributed slices
1 attributed contract functions
Current owner · Game

#Settlement supply runtime

Owns bounded food and water supply-chain identity, purpose, stage, lineage, retained cross-owner references, and shortage or route alerts.

Authoritative state
SettlementSupplyRuntime retains each supply chain's beneficiary, optional worker, source and destination, exact transfer and consumption bundles, need-relief policy, four WorkTask references, lifecycle stage, predecessor or successor, revision, and bounded alerts. It also maintains one derived canonical Supply-ID ordering for deterministic bounded windows without independent save authority.
Boundary
Work owns demand, Job, task, reservation, and assignment state. Resource owns source, carried, stored, consumed, and conserved quantities. Actor owns hunger and hydration pressure. World owns paths and arrival. Supply prevalidates and coordinates those owner operations but does not copy their authoritative state.
5 current source files
6 attributed slices
1 attributed contract functions
Current owner · Game

#Settlement supply scheduler

Owns bounded autonomous food, water, and material-supply scheduling cadence, budgets, cursors, counters, and last-update evidence while coordinating existing owners.

Authoritative state
SettlementSupplySchedulerState retains cadence, evaluation and mutation budgets, stable traversal cursors, monotonic counters, and one detached last-update result. Each due update reads the supplied canonical worker and spatial indexes and uses bounded rotating claim-candidate, execution, reentry, and alert windows without retaining a candidate matrix. Execution evidence includes same-task target-refresh visits, commits, rejects, and deferrals for moving need beneficiaries.
Boundary
The scheduler spends visit and Actor-evaluation budgets before candidate construction and never builds the complete awaiting-Supply by eligible-Actor matrix. It ranks the bounded candidate set and orders prevalidated Actor, Work, Resource, Supply, and World calls. It may request Actor to refresh the same retained Work task's local target, but it does not own worker eligibility, plans, paths, Jobs, quantities, needs, supply-chain state, or spatial anchors. Worker reconciliation cancels invalid retained ownership through those same owner APIs.
2 current source files
4 attributed slices
1 attributed contract functions
Current owner · App and Composition

#World indicator composition

Builds bounded detached world-space presentation records from current owner facts for registered indicator channels.

Authoritative state
WorldIndicatorComposition returns one disposable stable-ID-sorted frame view with channel, audience, state, World position, label, value, detail, priority, source visits, and truncation evidence. ScriptPackageHost retains only per-session channel visibility.
Boundary
Resource owns quantities and reservations, Supply owns chains and alerts, Work owns Job state, and World owns positions. Composition reads bounded windows and retains no gameplay, save, replay, package, renderer, or backend authority. Lua may change authorized visibility but cannot author indicator facts.
5 current source files
2 attributed slices
0 attributed contract functions
  • No contract-function attribution yet.
Current owner · Render and Selection

#World indicator rendering

Draws detached indicator records at projected World positions without retaining or repairing their source facts.

Authoritative state
RuntimePresentation carries a disposable indicator list. The SDL backend projects each visible record, selects a semantic state color, and draws a compact orb and bounded label.
Boundary
Render owns drawing and culling only. It cannot enumerate gameplay owners, decide visibility authority, mutate a resource or job, or persist an indicator.
5 current source files
2 attributed slices
0 attributed contract functions
  • No contract-function attribution yet.
Current owner · Game

#Farming runtime

Owns crop-cycle identity, physical stage progress, environmental forecast, recurring opportunity state, and current selection or blockage evidence.

Authoritative state
FarmingRuntime retains each stable cycle, World area reference and expected revision, Work graph, physical Resource containers and bundles, current worker and reservation, completed stage work, environmental forecast, completed-cycle count, replant time, last worker, choice reason, and blockage reason. FarmingSchedulerState retains authored cadence, visit and mutation budgets, rotating Settlement, area, and Actor cursors, monotonic counters, and the latest decision.
Boundary
Settlement owns food demand policy. World owns land, crop, soil, Environment, and Ecology facts. Work owns demands, Jobs, tasks, and reservations. Actor owns preference, plans, and travel. Resource owns all input, carried, output, and stored quantities. Farming validates and orders those owner operations but does not copy their authoritative state or name scenario and Actor identities.
2 current source files
2 attributed slices
0 attributed contract functions
  • No contract-function attribution yet.
Current owner · Simulation

#World parcel candidate derivation

Derives bounded physically feasible construction parcels from current World facts without selection or persistence authority.

Authoritative state
WorldParcelSearchResult contains a disposable canonical candidate list, composite area-origin-variant keys, exact land and navigation revisions, perimeter access facts, bounded work counters, rejection counters, status, and detail. Exhausted searches clear partial candidates. No result is serialized.
Boundary
World owns land, topology, landscape, and local path feasibility. Construction supplies a detached occupied-cell snapshot, and Assets or App supplies detached pre-rotated footprint variants and eligible land-use IDs. Derivation cannot score, select, retain, claim, clear, designate Construction, create Work, move Resource, or assign an Actor or Household.
3 current source files
0 attributed slices
  • No representative slice attribution yet.
0 attributed contract functions
  • No contract-function attribution yet.

Phase and slice history

phase.3 · historical implementation slice

#Phase 3 grid-aligned construction loop

Introduced Construction-owned footprints, sites, stages, blockage, bounded progress, and completion through existing Work and Resource owners.

Slice record at f6343149f655

Proof sources
  • tests/construction_tests.cppNamed cases: construction consumes delivered material only after bounded build progress, interrupted construction releases its worker and resumes without losing material or work, interrupted construction times out with its delivered material and cause retained, construction rejects tick-zero blockage evidence without creating invalid state
  • tests/resource_economy_tests.cppNamed cases: resource pickup and delivery conserve every registered quantity, resource consumption preserves an explicit accounted sink total, resource capacity usage is exact and limits reject container growth atomically, resource transforms enforce net-positive aggregate limits without partial mutation
  • tests/work_lifecycle_tests.cppNamed cases: work lifecycle completes one explicit demand job task reservation and order chain, live job claims stay indexed across lifecycle transitions and restoration

Cross-owner flow

  1. Construction validates the footprint and WorldGrid placement before retaining a site.
  2. The site retains stable Work and Resource references while those systems remain authoritative for their own records.
  3. Material delivery opens bounded build progress through Construction.
  4. Completion consumes the exact delivered bundle through Resource and closes the exact graph through Work.
2 attributed contract changes
phase.3 · historical implementation slice

#Phase 3 autonomous construction execution

Added the saved bounded scheduler that selects eligible construction work and advances the existing Actor, Work, Resource, Construction, and World path.

Slice record at f6343149f655

Proof sources
  • tests/runtime_phase3_tests.cppNamed cases: authored Phase 3 runtime completes construction and produces reproducible rate evidence, autonomous construction stages survive detached save-load checkpoints
  • tests/phase3_economy_state_tests.cppNamed cases: construction scheduler rejects overflowing retained counter sums, Phase 3 replay reproduces claim transfer delivery and construction completion, Phase 3 schema 11 migrates construction work ticks to fixed-point work units, Phase 3 schema 12 maps every legacy building function to a stable definition, Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary, construction scheduler schema six initializes replacement scan evidence, construction schema seven migrates an unknown failure without inventing a cause, construction work rate preserves fractional progress across scheduler partitions, construction capability fit handles signed habit bias without unsigned wrap, Phase 3 schema 18 initializes moving-beneficiary handoff evidence
  • tests/phase3_economy_throughput_tests.cppNamed cases: Phase 3 throughput derives exact rates and signed gauge deltas from detached samples

Cross-owner flow

  1. RuntimeSession invokes the scheduler after World and Actor advancement on an exact simulation tick.
  2. The scheduler visits construction IDs in stable order under explicit visit and mutation budgets.
  3. It ranks eligible claims, then prevalidates the exact Actor, Work, Resource, Construction, and World operations.
  4. Existing owners commit claim, pickup, route arrival, delivery, build progress, and completion without transferring authority to the scheduler.
  5. The scheduler retains cadence, counters, and last-result evidence only.
3 attributed contract changes
phase.4 · historical implementation slice

#Phase 4 direct-control suppression extension

Extended the construction scheduler so direct or assigned authority prevents autonomous plan replacement without discarding valid Work.

Slice record at f0f4329ab821

Proof sources
  • tests/runtime_player_attack_tests.cppNamed cases: contextual attack requires an explicit Take Control transition, contextual attack advances on a fixed cadence and applies one bounded injury, direct control defers retained construction work and release resumes it

Cross-owner flow

  1. ControlAuthority derives the stable list of actors whose autonomous Work must be suppressed.
  2. RuntimeSession passes that list to construction scheduling in the existing tick order.
  3. The scheduler defers suppressed workers without changing retained Construction, Work, or Actor truth.
2 attributed contract changes
phase.9 · historical implementation slice

#Phase 9 production and physical trade closure

Added one useful production chain, a real consumer, party provisioning, physical trade obligations, bounded regional summaries, persistence, and detached diagnostics through existing owners.

Slice record at f736c79a4468

Proof sources
  • tests/production_tests.cppNamed cases: production completes a multi-step accounted transform through Work and inventory, production reserves building service and consumes visible maintenance, production schema one migrates without inventing economic costs, production rejects completion atomically when output capacity is unavailable, production cancellation releases Work and retains carried inputs exactly once
  • tests/trade_tests.cppNamed cases: party provisioning and trade obligation move physical conserved cargo, regional scarcity quote becomes a physical trade obligation with failure, expired trade obligation fails and retains already carried cargo, cancelled provisioning releases source cargo without partial transfer, trade state round trips in transit and resumes deterministically
  • tests/regional_economy_tests.cppNamed cases: regional economy applies bounded facts in canonical identity order, regional economy replaces a revisioned source fact without double counting, regional economy rejects over-budget and conflicting updates atomically, regional economy summaries serialize and continue deterministically, regional economy quotes one route from owned scarcity and risk facts
  • tests/phase9_closure_tests.cppNamed cases: Phase 9 owners compose persist and continue through the live session, Phase 9 restoration rejects unknown recipe resources transactionally, Phase 9 foundation migration preserves an older save without inventing owners, Phase 9 inspection rejects partial owner composition

Cross-owner flow

  1. Authored recipe keys resolve to Resource identities during RuntimeSession composition.
  2. Production creates and advances one multi-step Work graph through a workshop while Resource moves and transforms exact bundles.
  3. The produced work tool is consumed through Resource ownership before Construction completes its existing project.
  4. Trade provisions a Party and carries one obligation through Work reservation, Resource transfer, explicit route arrival, deadline, and terminal reconciliation.
  5. Regional Economy accepts bounded revisioned observations and maintains summaries without becoming inventory or obligation authority.
  6. Foundation schema 17 persists all three owners, validates their cross-owner bindings, and reproduces deterministic continuation.
  7. The Economy diagnostic reads bounded detached stages, bottlenecks, risks, flows, and budget evidence.
1 attributed contract changes
phase.10 · historical implementation slice

#Phase 10 personhood and social-life closure

Expanded existing Actor and Phase 5 owners with attributable progression, relationship stages, Household formation and care, health, life stages, death, bounded lineage, population proof, and detached biography.

Slice record at 0fcef33a5524

Proof sources
  • tests/phase10_progression_tests.cppNamed cases: completed Work produces Actor-owned progression and changes a later IAUS choice, resolved support progresses one Relationship and forms one Household transactionally, one household meal records care consumes food and relieves one member atomically, Actor life course retains lineage illness treatment and one terminal death
  • tests/phase10_closure_tests.cppNamed cases: detached personhood biography orders bounded facts from their existing owners, twenty thousand life courses advance across years within one linear visit budget, Phase 10 life-course facts persist and continue through the live foundation

Cross-owner flow

  1. Completed Work contributes bounded causal evidence to Actor-owned capability and habit progression, which later IAUS job evaluation can read.
  2. A resolved social incident progresses one Relationship and forms one Household through candidate copies and an atomic App composition.
  3. Household care consumes exact Resource quantity, relieves one Actor need, and records one bounded material care fact transactionally.
  4. Actor owns illness, treatment, life stage inputs, death, and at most two validated parent references. Death removes the Actor from active scheduling and plan eligibility without deleting identity.
  5. Foundation persistence retains Phase 10 facts and rejects invalid cross-owner or lineage references without partial restore.
  6. Tools joins detached Actor and Phase 5 snapshots into a bounded ordered biography and holds no gameplay authority.
0 attributed contract changes
  • No contract-function attribution yet.
phase.11 · historical implementation slice

#Phase 11 structured events and institutions closure

Converted incident policy to validated authored content, added focused event resolution, durable quests and institutions, real domain consequences, bounded presentation, persistence, replay, and causal explanation.

Slice record at 42744ad93e8e

Proof sources
  • tests/phase11_content_tests.cppNamed cases: authored incident catalog loads stable metadata and focused resolver IDs, event templates reject unregistered focused outcome resolvers, malformed authored incident catalogs reject before session construction
  • tests/structured_quest_tests.cppNamed cases: structured rescue lifecycle branches without owning domain state, runtime rescue steps require World knowledge movement and Incident evidence
  • tests/institutional_request_tests.cppNamed cases: institutional request lifecycle retains formal evidence and obligations, runtime institutional resolution uses Actor and retained social facts
  • tests/structured_event_consequence_tests.cppNamed cases: completed quest applies retained Relationship Memory and World aftermath exactly once, resolved institutional obligation creates normal Trade and Work exactly once, structured event consequence ledger is bounded idempotent and serializable
  • tests/phase11_closure_tests.cppNamed cases: Phase 11 authored catalogs reject before content volume can bypass fixed budgets, Phase 11 surfacing is bounded urgent deterministic and suppresses related chains, Phase 11 neglect failure delegation and success de-escalate through one prompt policy, Phase 11 prompt composition stops at each owner's fixed visit budget, Phase 11 persisted owners regenerate the same bounded presentation after restore

Cross-owner flow

  1. AssetService loads one immutable validated catalog of incident families, event templates, quest templates, institutions, and request templates before session construction.
  2. The existing Intersection selector and lifecycle consume authored family and event policy, including focused resolver registration and retained authored cooldowns.
  3. Structured Quest and Institutional Request owners retain their own legal lifecycles while referencing real Actor, Party, Incident, Site, route, Relationship, Reputation, and Memory evidence.
  4. App applies completed quest and institutional obligation consequences through existing World, Work, Trade, Relationship, Memory, Resource, and Actor APIs and records one idempotent causal ledger entry.
  5. The derived presentation policy visits fixed prefixes, suppresses related chains, escalates deadlines, de-escalates recent terminal results, and returns at most eight deterministic prompts.
  6. Foundation persistence and replay retain lifecycle and causal owners. Presentation regenerates from those owners and has no save authority.
5 attributed contract changes
phase.12 · historical implementation slice

#Phase 12 combat, defense, factions, and remote pressure closure

Expanded the existing attack and command path with equipment, wounds, treatment, formation movement, settlement defense, bounded faction strategy, material pressure outcomes, and compressed remote conflict.

Slice record at 36d480c05af6

Proof sources
  • tests/runtime_player_attack_tests.cppNamed cases: contextual attack requires an explicit Take Control transition, contextual attack advances on a fixed cadence and applies one bounded injury, direct control defers retained construction work and release resumes it
  • tests/phase12_defense_tests.cppNamed cases: settlement alarm creates one normal guard job and clears it atomically, selected Party uses deterministic line slots through normal exact-ground movement
  • tests/phase12_faction_tests.cppNamed cases: bounded rival strategy applies hard gates before fixed point preference, faction state persists its references cadence and complete strategic trace, faction raid composes authoritative loss defense alarm and social aftermath, remote conflicts advance in stable bounded batches and persist their cursor

Cross-owner flow

  1. Contextual attack uses Actor condition and equipment capability, advances on fixed ticks, and retains wounds, fear, retreat, and treatment evidence without a separate combat entity model.
  2. Party formation policy derives deterministic exact-ground slots and sends them through the existing movement and World navigation path.
  3. Settlement defense raises an alarm and creates normal guard Work rather than maintaining a defense-only labor system.
  4. Faction strategy applies hard validity gates before fixed-point preference and retains every candidate contribution at a bounded cadence.
  5. Negotiation and raid pressure compose through Institution, Resource, Settlement, Work, Relationship, Reputation, Incident, and Memory owners and retain stable causal references.
  6. Remote conflicts advance summaries in stable cursor order under an explicit visit budget while named Actors and every authoritative gameplay fact remain in their original owners.
  7. Foundation persistence migrates Faction schemas, validates all cross-owner references, and continues strategic and remote cadences exactly.
3 attributed contract changes
phase.14 · historical implementation slice

#Phase 14A script API authority and registry

Added one App-owned versioned metadata registry, explicit interface layers and package origins, deterministic normalized export, and a package-root-relative plugins directory without opening script execution.

Slice record at 99f21df47cb5

Proof sources
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. App receives a complete script-facing symbol descriptor and validates stable identity, namespace, schema, owner, authority, timing, versions, errors, and project-relative source evidence.
  2. A valid descriptor enters the registry exactly once; an invalid, future-version, or duplicate descriptor leaves the registry unchanged with an exact diagnostic.
  3. Normalized export sorts symbols, fields, and error references and includes the three interface layers plus the two actual package origins.
  4. Package layout resolves the visible plugins directory from the explicit runtime package root. CMake installs that directory but no Phase 14A code scans or executes it.
3 attributed contract changes
phase.14 · historical implementation slice

#Phase 14C detached script queries

Added fourteen bounded detached query contracts that route current facts through existing owners, enforce exact schemas and budgets, and report unavailable capabilities without inventing state.

Slice record at 78b55def8640

Proof sources
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World

Cross-owner flow

  1. App validates the registered query ID, exact filters, page bounds, and remaining package budget before owner access.
  2. The query service reads only existing RuntimeSession and domain-owner accessors and shapes ordinary detached records.
  3. Every result is validated against the registered field schema before publication.
  4. Missing gameplay capabilities return an explicit unavailable error and cold state is not activated.
0 attributed contract changes
  • No contract-function attribution yet.
phase.14 · historical implementation slice

#Phase 14D typed script commands and events

Added bounded normal and development-restricted command submission, fixed-tick ControlAuthority dispatch, ordered receipts and transcripts, and immutable events after successful owner commits.

Slice record at ba0fe07e4b9b

Proof sources
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation

Cross-owner flow

  1. The host creates an origin for compiled controls, tools, first-party packages, development packages, or engine callers.
  2. App validates exact arguments, origin authority, target timing, queue capacity, and the caller submission budget.
  3. RuntimeSession dispatches due work at the fixed tick through its existing ControlAuthority transaction.
  4. The service records ordered bounded receipts and transcripts and publishes a detached completion event only after the owner commits.
0 attributed contract changes
  • No contract-function attribution yet.
phase.14 · historical implementation slice

#Phase 14E sandboxed Lua package host

Added deterministic manifests, one bounded Lua state per package, dependency-ordered lifecycle, host-created query and command contexts, and no operating-system or save authority.

Slice record at 860127b4a607

Proof sources
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads

Cross-owner flow

  1. App validates package manifests, declared files, API ranges, dependencies, settings, and lifecycle names before creating any active runtime.
  2. Each package receives one Lua 5.4.8 state with explicit memory and instruction limits and without operating-system, I/O, native-module, debug, or dynamic-loading libraries.
  3. Lifecycle validation and initialization run in dependency order without command authority; suspension and shutdown run in reverse order.
  4. Active callbacks use host-created package identity to call the existing detached query, typed command, restricted development command, and post-commit event services.
0 attributed contract changes
  • No contract-function attribution yet.
phase.14 · historical implementation slice

#Phase 14F UI composition registry

Added stable surfaces and slots, typed contribution operations, deterministic provider order, explicit replacement selection, standard fallbacks, and conflict rejection.

Slice record at caa978a1967b

Proof sources
  • tests/ui_composition_registry_tests.cppNamed cases: UI composition resolves dependency order and explicit replacement selection, UI composition rejects conflicts and preserves compiled recovery authority, UI composition validates slots semantics cardinality and registered metadata

Cross-owner flow

  1. App validates complete surface, slot, fallback, accessibility, and contribution contracts before composition.
  2. Provide, extend, replace, decorate, and hide contributions resolve in dependency and stable package order.
  3. Single-provider replacement requires an explicit selected winner; unresolved conflicts reject the candidate without changing the active composition.
  4. The compiled recovery surface cannot be hidden or replaced.
0 attributed contract changes
  • No contract-function attribution yet.
phase.14 · historical implementation slice

#Phase 14G backend-neutral script UI

Added bounded semantic UI intent, typed themes and anchored layouts, native backend consumption, and one movable Lua resource-count panel backed by the detached resource query.

Slice record at 8f5b2a2810c1

Proof sources
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads

Cross-owner flow

  1. A package callback reads bounded detached owner facts and records semantic panel, widget, theme, and layout intent under per-callback budgets.
  2. App rejects invalid layout, inaccessible metadata, nested or unclosed panels, and panel, widget, or text budget overflow without replacing the prior output.
  3. The graphical composition root passes only the completed detached command buffer to the native UI backend.
  4. The resource-count development package composes one movable live panel without renderer, input-device, gameplay, or save authority.
0 attributed contract changes
  • No contract-function attribution yet.
phase.14 · historical implementation slice

#Phase 14H first-party standard Lua interface

Moved ordinary villager and settlement inspection, need pressure, alerts, control actions, and command feedback into the first-party standard package while retaining independent compiled recovery and diagnostics.

Slice record at d282500cf0aa

Proof sources
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World

Cross-owner flow

  1. The first-party package reads selected Actor, need, and Settlement facts through bounded detached queries.
  2. Semantic UI intent composes the ordinary observation and control surface without renderer or input-device access.
  3. Controls-owned logical actions dispatch package callbacks, which submit revision-checked typed commands to existing gameplay owners.
  4. Package failure restores the compiled ordinary interface; compiled startup, application flow, hotkeys, F3 diagnostics, command diagnostics, and recovery remain independent.
0 attributed contract changes
  • No contract-function attribution yet.
phase.14 · historical implementation slice

#Phase 14I replacement and extension proof

Added manifest-declared providers and contributions, deterministic composed surfaces, package-owned actions, an alternate theme and player-HUD provider, and atomic restoration of the standard provider.

Slice record at d7ab6c2df702

Proof sources
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/ui_composition_registry_tests.cppNamed cases: UI composition resolves dependency order and explicit replacement selection, UI composition rejects conflicts and preserves compiled recovery authority, UI composition validates slots semantics cardinality and registered metadata

Cross-owner flow

  1. App validates declared providers, contributions, callbacks, target surfaces, and explicit replacement selections before package activation.
  2. The composition registry resolves the active provider, extensions, and decorators in dependency and stable contribution order.
  3. Tools renders one detached composed intent buffer; each actionable widget retains its owning package identity.
  4. Provider changes rebuild a complete candidate composition and commit only after validation. Normal and restricted proof actions still route through existing command owners.
0 attributed contract changes
  • No contract-function attribution yet.
phase.14 · historical implementation slice

#Phase 14J transactional reload and host state

Added a Controls-owned F10 reload action, versioned host-owned package state, full candidate construction and proof composition, atomic generation replacement, and last-valid interface retention on failure.

Slice record at ee31769c2eea

Proof sources
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/control_tests.cppNamed cases: controls expose one unique authoritative physical binding catalog
  • tests/runtime_inspection_tests.cppNamed cases: hotkey reference derives every displayed input from control bindings

Cross-owner flow

  1. F10 enters App through the backend-neutral Controls catalog at a safe frame boundary.
  2. App captures only compatible versioned settings, provider selection, visibility, bounded layout keys, and selected stable IDs before constructing a complete candidate graph.
  3. The candidate validates manifests, dependencies, settings migration, lifecycle, and composition, then proof-composes every non-recovery surface without displaying it.
  4. A successful candidate replaces the previous package generation atomically. Any failure records the exact error and retains the previous Lua states, composition, and interface.
0 attributed contract changes
  • No contract-function attribution yet.
phase.14 · historical implementation slice

#Phase 14K script diagnostics and recovery

Added bounded package and surface diagnostics, generation-checked actions, hidden-work suppression, repeated-fault isolation, compiled recovery controls, safe mode, standard restoration, and accessibility proof.

Slice record at 081836a3503c

Proof sources
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/runtime_inspection_tests.cppNamed cases: hotkey reference derives every displayed input from control bindings
  • tests/sdl_asset_tests.cppNamed cases: SDL translates run-control and additive-selection keys

Cross-owner flow

  1. App measures bounded package callback, memory, query, command, event, composition, widget, text, and failure work and publishes only detached diagnostics.
  2. Hidden surfaces skip recurring callbacks. Script actions carry the package generation and reject before dispatch when retained across reload.
  3. Three repeated failures disable only the offending package or contribution. App rebuilds the nearest valid provider and retains unaffected composition.
  4. Compiled Tools controls request package reload, standard restoration, or Safe Mode. App applies the request at the frame boundary without issuing gameplay commands.
  5. Safe Mode disables development packages and restores standard providers, visibility, and layout while the fixed-tick simulation continues unchanged.
0 attributed contract changes
  • No contract-function attribution yet.
phase.14 · historical implementation slice

#Phase 14L runtime reference and package closure

Replaced fixture reference input with the complete runtime catalog, enforced exact structured documentation and installed-file coverage, qualified package-local panel identities, and closed deterministic reload, memory, package, and publication proof.

Slice record at 6950454a91eb

Proof sources
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads

Cross-owner flow

  1. App builds the complete validated runtime registry from focused query, command, composition, and package-host catalogs, then exports it deterministically.
  2. The reference builder joins every runtime symbol to exactly one structured documentation record and generates stable pages, guides, search and machine indexes, and a complete hashed manifest.
  3. Packaging runs the installed registry exporter, compares it byte-for-byte with the installed registry, validates exact symbol coverage, and verifies every reference asset hash.
  4. Script package composition qualifies each package-local panel ID before native rendering and rejects duplicate local IDs without granting backend or gameplay authority.
  5. Repeated composition and reload proof retains deterministic intent and compatible host state under bounded memory without changing simulation state.
2 attributed contract changes
phase.14 · historical implementation slice

#Phase 14M active event delivery and containment

Added a focused post-commit event service, generation-scoped Lua subscriptions, deterministic bounded dispatch, command deferral, overflow evidence, host-call exception containment, and hostile-handler isolation.

Slice record at 3446fcf9bfc4

Proof sources
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads

Cross-owner flow

  1. A gameplay owner commits through its existing fixed-tick transaction, then asks ScriptEventService to publish one immutable typed fact.
  2. The package host drains a bounded sequence batch at a safe frame boundary and visits packages in dependency order and subscriptions in creation order.
  3. Each handler receives one detached event table under protected-call, instruction, memory, query, command, and delivery budgets. A submitted follow-up command cannot execute until a later fixed tick.
  4. Subscription IDs remain local to one package generation. Ignore defers callback release until the current protected delivery returns, and reload destroys every old Lua registry reference.
  5. Source overflow is diagnosed, runtime and budget faults remain inside the offending package, three repeated faults disable only that package, and the fixed-tick session continues.
2 attributed contract changes
phase.15 · historical implementation slice

#Phase 15A observation and authority

Separated selection from possession, required explicit direct control before contextual movement or attack, retained owner-based release reconciliation, and added first-class control-transition replay input.

Slice record at 9ef193e2b41c

Proof sources
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity
  • tests/runtime_player_move_tests.cppNamed cases: contextual movement requires an explicit Take Control transition, contextual move requires direct control and advances one Actor through World positions, contextual move rejects empty or partial Party recipients without partial mutation
  • tests/runtime_player_attack_tests.cppNamed cases: contextual attack requires an explicit Take Control transition, contextual attack advances on a fixed cadence and applies one bounded injury, direct control defers retained construction work and release resumes it

Cross-owner flow

  1. Selection retains stable IDs for observation and does not request or mutate gameplay authority.
  2. Take Control explicitly transitions each recipient through ControlAuthorityRuntime and reconciles any replaceable autonomous plan through Actor ownership.
  3. Contextual move and attack validation require every recipient to already be directly controlled and reject without partial mutation otherwise.
  4. Movement and attack execution consume retained authority without changing it. Release Control returns through the existing reconciliation path.
  5. Replay schema 18 records control transitions in ordered player actions before dependent orders and reapplies them through the public RuntimeSession owner path.
0 attributed contract changes
  • No contract-function attribution yet.
phase.15 · historical implementation slice

#Phase 15B spatial validation

Separated durable Chunk identity from signed grid location, validated Site geometry and restored local-movement state transactionally, and corrected the authored adjacent Site to its actual chunk.

Slice record at 20e0c424b669

Proof sources
  • tests/world_topology_tests.cppNamed cases: world grid maps meter positions through aligned cells into half-open chunks, topology construction validates all stable spatial references transactionally, route queries use lowest cost and stable segment-id tie breaking
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites
  • tests/runtime_player_move_tests.cppNamed cases: contextual movement requires an explicit Take Control transition, contextual move requires direct control and advances one Actor through World positions, contextual move rejects empty or partial Party recipients without partial mutation
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity

Cross-owner flow

  1. Authored topology retains stable Chunk IDs and builds one derived coordinate-to-ID index from canonical Chunk records.
  2. Topology validation maps every finite Site position through the signed half-open cell and Chunk grid and rejects a mismatch with its referenced Chunk.
  3. Local path lookup resolves the owning Chunk by coordinate without scanning or treating an ID as a location.
  4. World restore stages topology, residency, heat, and navigation candidates, then validates each retained move's Site, meter positions, cells, endpoints, adjacency, cursor, and active residency before committing.
  5. Exact-ground order validation previews the position retained by route cancellation, matching the later execution path without adding a second movement owner.
0 attributed contract changes
  • No contract-function attribution yet.
phase.15 · historical implementation slice

#Phase 15C resident camera-visible terrain

Added World-owned chunk terrain, schema migration, detached active-chunk composition, camera-visible cell culling, coordinate-first inspection, and a 1600-by-900 graphical default.

Slice record at b7937c86f52a

Proof sources
  • tests/ground_terrain_tests.cppNamed cases: resident World terrain composes into detached ordered chunks, camera culling submits only visible resident terrain cells
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites

Cross-owner flow

  1. World validates exactly one terrain record for every topology Chunk and persists it beside residency.
  2. App joins topology, terrain, and active residency into detached chunks ordered by signed coordinate and stable ID.
  3. Camera calculates visible World bounds without requesting or changing residency.
  4. Render culls resident terrain cells against those bounds and submits one SDL geometry batch without retaining World state.
  5. Tools reports coordinate-first identity, terrain kind, residency, and detached resident and visible counts.
0 attributed contract changes
  • No contract-function attribution yet.
phase.15 · historical implementation slice

#Phase 15D first adjacent border crossing

Continued one exact-ground movement order across one orthogonally adjacent active-chunk border through a deterministic portal and bounded World-owned local path.

Slice record at 6314468fe508

Proof sources
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites
  • tests/runtime_player_move_tests.cppNamed cases: contextual movement requires an explicit Take Control transition, contextual move requires direct control and advances one Actor through World positions, contextual move rejects empty or partial Party recipients without partial mutation
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity

Cross-owner flow

  1. World resolves the origin and destination chunk from authoritative meter positions and permits only the same chunk or one orthogonally adjacent active chunk.
  2. World chooses one deterministic aligned border portal, resolves bounded local paths on both sides, and joins them with exactly one explicit crossing step.
  3. The accepted player order and one LocalMoveProgress record continue through the border without replacement, teleportation, or Render-owned position.
  4. World updates the Actor logical Site from the stable first Site in the destination chunk when the physical position crosses the border.
  5. Restore, replay, and inspection retain and validate position, chunk coordinates, path cursor, terminal progress, and the single-border invariant.
0 attributed contract changes
  • No contract-function attribution yet.
phase.15 · historical implementation slice

#Phase 15E hierarchical traversal

Composed one deterministic active-chunk corridor from bounded per-chunk local paths while retaining one exact-ground order, path, position, save state, and replay.

Slice record at f65da93337fa

Proof sources
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites
  • tests/runtime_player_move_tests.cppNamed cases: contextual movement requires an explicit Take Control transition, contextual move requires direct control and advances one Actor through World positions, contextual move rejects empty or partial Party recipients without partial mutation
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity

Cross-owner flow

  1. World searches the authored active orthogonal chunk graph with stable shortest-path and coordinate tie-breaking under a 256-visit budget.
  2. World resolves a bounded local path inside each corridor chunk, adds one explicit cell for each shared border, and caps aggregate local search at 32,768 visits.
  3. The accepted player order, one LocalMoveProgress path, one World position, and logical Site continue through every handoff without replacement or duplicated corridor authority.
  4. Restore derives and validates a simple corridor from the retained cell path, rejects chunk re-entry or inactive corridor state transactionally, and persists no second corridor record.
  5. Replay proves exact four-chunk continuation; future border invalidation cancels before crossing, and inspection derives the current corridor step and total size.
0 attributed contract changes
  • No contract-function attribution yet.
phase.15 · historical implementation slice

#Phase 15F residency and continuity

Reconciled a bounded active chunk set from detached observation interest and authoritative travel requirements while preserving cooling timing, compressed distant Actors, save, and replay continuity.

Slice record at 8ecba03a1368

Proof sources
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites
  • tests/ground_terrain_tests.cppNamed cases: resident World terrain composes into detached ordered chunks, camera culling submits only visible resident terrain cells
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity

Cross-owner flow

  1. App derives bounded camera and selected-Actor interests from authoritative World facts and submits detached reasoned requests.
  2. World validates the complete request and fixed tick, adds chunks required by retained local movement and route travel, and rejects invalid or excessive requests before mutation.
  3. Required chunks activate in stable coordinate order; unrequested active chunks cool to loaded and then unloaded on later ticks without same-tick advancement.
  4. Cold Actors without embodied movement remain compressed, and residency never becomes a second heat or Actor-fidelity owner.
  5. World schema 9 preserves per-chunk transition timing; restore, replay, inspection, and F3 diagnostics reproduce and explain the same bounded reconcile result.
0 attributed contract changes
  • No contract-function attribution yet.
phase.15 · historical implementation slice

#Phase 15G connected-region closure

Closed Phase 15 with a data-authored 3 by 3 region, continuous multi-border traversal, persistence, replay, concurrent movement, Release budgets, repeatable live frame benchmarking, and bounded package-readable performance diagnostics.

Slice record at 7e052095444a

Proof sources
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites
  • tests/runtime_player_move_tests.cppNamed cases: contextual movement requires an explicit Take Control transition, contextual move requires direct control and advances one Actor through World positions, contextual move rejects empty or partial Party recipients without partial mutation
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity

Cross-owner flow

  1. Assets loads nine chunks, nine Sites, twelve route links, and explicit terrain kinds; World validates and retains every spatial and residency fact without assuming that all worlds are 3 by 3.
  2. One retained exact-ground order crosses four borders through the existing bounded hierarchical path and restores or replays without replacement, teleportation, or duplicate authority.
  3. Several embodied travelers retain independent bounded local paths while distant Actors stay compressed and allocate no local movement or presentation state.
  4. The graphical root records bounded presented-frame samples; Platform supplies optional process resident memory, App owns rolling and explicitly logged diagnostics, and Lua reads detached current, summary, or paged sample records.
  5. Tools benchmarks the same Release presentation path after warmup and reports percentile latency plus detached scene-load counts without gaining renderer, World, or simulation authority.
0 attributed contract changes
  • No contract-function attribution yet.
phase.16 · historical implementation slice

#Phase 16 tuning addendum A runtime authority

Introduced one versioned App-owned tuning registry and proved live simulation pace and presentation frame-target changes through a restricted development package.

Slice record at 219a813cc436

Proof sources
  • tests/runtime_tests.cppNamed cases: runtime command queue preserves stamped order, fixed step time scaling preserves tick equations and frame partition equivalence, runtime tuning patches validate atomically and advance one revision, runtime scenario capacity policy loads authored v2 limits and defaults legacy v1
  • tests/foundation_serialization_tests.cppNamed cases: Phase 0 foundation state round trips and continues deterministically, foundation schema 21 restores default tuning and an empty time-scale remainder, foundation schema 22 migrates tuning schema 1 with the default movement rate, foundation schema 24 restores default scenario capacity policy, foundation preserves pending script commands and schema 26 migrates an empty service
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. Runtime configuration loads validated default time scale and presentation frame target into one versioned App-owned registry.
  2. The fixed-step scheduler applies integer wall-time scaling with retained remainder while preserving fixed tick duration, pause, single-step, and bounded explicit advancement.
  3. Development Lua reads detached definitions and submits revision-checked restricted requests; App commits atomic changes and publishes immutable post-commit tuning events.
  4. The graphical root consumes the frame target, while movement, construction, capacities, content catalogs, spawning, and world generation remain with their planned owners.
  5. Foundation schema 22 retains tuning state and scheduler remainder; supported schema 21 saves migrate to explicit defaults.
  6. Debug executables may load development-origin packages, while Release executables filter them before composition and Lua creation.
1 attributed contract changes
phase.16 · historical implementation slice

#Phase 16 tuning addendum B physical movement

Replaced cell-per-tick embodied traversal with live-tunable physical rates, durable capability modifiers, and deterministic fractional progress.

Slice record at cff8e14a758e

Proof sources
  • tests/world_runtime_tests.cppNamed cases: local movement converts physical rates into deterministic residual progress, road effects improve new route plans without rewriting active travel
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites
  • tests/runtime_player_move_tests.cppNamed cases: contextual movement requires an explicit Take Control transition, contextual move requires direct control and advances one Actor through World positions, contextual move rejects empty or partial Party recipients without partial mutation
  • tests/foundation_serialization_tests.cppNamed cases: Phase 0 foundation state round trips and continues deterministically, foundation schema 21 restores default tuning and an empty time-scale remainder, foundation schema 22 migrates tuning schema 1 with the default movement rate, foundation schema 24 restores default scenario capacity policy, foundation preserves pending script commands and schema 26 migrates an empty service
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity
  • tests/runtime_tests.cppNamed cases: runtime command queue preserves stamped order, fixed step time scaling preserves tick equations and frame partition equivalence, runtime tuning patches validate atomically and advance one revision, runtime scenario capacity policy loads authored v2 limits and defaults legacy v1
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. Runtime configuration and foundation migration load a validated embodied movement base rate into the App-owned tuning registry.
  2. Game supplies each Actor's durable capability modifier and a neutral optional transport modifier without owning position or path progress.
  3. App composes detached policy and capability values into World at the fixed-tick boundary.
  4. World converts rate, modifiers, and the fixed step into integer millimeter progress, retains the fractional numerator remainder, and advances one authoritative multi-chunk path continuously.
  5. Development Lua reads detached definitions and submits revision-checked movement presets; accepted changes affect in-flight embodied movement on the next fixed tick.
  6. World schema 10, Actor schema 16, tuning schema 2, configuration schema 3, and foundation schema 23 preserve or explicitly migrate every new durable value.
2 attributed contract changes
phase.16 · historical implementation slice

#Phase 16 tuning addendum C construction throughput

Replaced build-tick constants with authored work units, capability-sensitive live throughput, and deterministic fractional progress.

Slice record at cd90532919d7

Proof sources
  • tests/construction_tests.cppNamed cases: construction consumes delivered material only after bounded build progress, interrupted construction releases its worker and resumes without losing material or work, interrupted construction times out with its delivered material and cause retained, construction rejects tick-zero blockage evidence without creating invalid state
  • tests/runtime_phase3_tests.cppNamed cases: authored Phase 3 runtime completes construction and produces reproducible rate evidence, autonomous construction stages survive detached save-load checkpoints
  • tests/phase3_economy_state_tests.cppNamed cases: construction scheduler rejects overflowing retained counter sums, Phase 3 replay reproduces claim transfer delivery and construction completion, Phase 3 schema 11 migrates construction work ticks to fixed-point work units, Phase 3 schema 12 maps every legacy building function to a stable definition, Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary, construction scheduler schema six initializes replacement scan evidence, construction schema seven migrates an unknown failure without inventing a cause, construction work rate preserves fractional progress across scheduler partitions, construction capability fit handles signed habit bias without unsigned wrap, Phase 3 schema 18 initializes moving-beneficiary handoff evidence
  • tests/foundation_serialization_tests.cppNamed cases: Phase 0 foundation state round trips and continues deterministically, foundation schema 21 restores default tuning and an empty time-scale remainder, foundation schema 22 migrates tuning schema 1 with the default movement rate, foundation schema 24 restores default scenario capacity policy, foundation preserves pending script commands and schema 26 migrates an empty service
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity
  • tests/runtime_tests.cppNamed cases: runtime command queue preserves stamped order, fixed step time scaling preserves tick equations and frame partition equivalence, runtime tuning patches validate atomically and advance one revision, runtime scenario capacity policy loads authored v2 limits and defaults legacy v1
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. Authored economy content defines each construction project's required work units instead of a build-tick duration.
  2. Runtime configuration loads a validated construction base throughput into the App-owned tuning registry.
  3. The scheduler derives each assigned Actor's construction-rate modifier from capability and progression facts without identity branches.
  4. The scheduler combines global throughput, Actor modifier, fixed-step duration, and the retained remainder into deterministic whole work units.
  5. Construction validates and retains completed work plus the fractional remainder, then completes the existing Work, Resource, and Building transactions only when the requirement is met.
  6. Inspection and the Script API expose detached work units, effective rate, and duration estimates; development Lua submits revision-checked throughput presets.
  7. Foundation schema 24, tuning schema 3, Phase 3 schema 12, Construction schema 6, Party schema 5, and Phase 3 replay schema 4 preserve or explicitly migrate the new state.
3 attributed contract changes
phase.16 · historical implementation slice

#Phase 16 tuning addendum D scenario capacity policy

Separated fixed engine safety ceilings from versioned scenario population, resource, and inventory limits enforced by their existing state owners.

Slice record at 7b817525f162

Proof sources
  • tests/scenario_capacity_policy_tests.cppNamed cases: scenario capacity policy validates balance policy below immutable technical ceilings, scenario capacity policy patches are revisioned and detached, scenario capacity policy rejects stale and below-use changes atomically, scenario capacity policy restore rejects state below observed use
  • tests/actor_state_tests.cppNamed cases: actor candidates are canonical and join Phase 1 world state without owning it, actor candidates enforce the scenario live-population boundary exactly, actor owner applies revision-checked hydration relief, invalid actor candidates leave a retained actor runtime unchanged, actor render composition joins Actor identity to World position without changing heat
  • tests/resource_economy_tests.cppNamed cases: resource pickup and delivery conserve every registered quantity, resource consumption preserves an explicit accounted sink total, resource capacity usage is exact and limits reject container growth atomically, resource transforms enforce net-positive aggregate limits without partial mutation
  • tests/foundation_serialization_tests.cppNamed cases: Phase 0 foundation state round trips and continues deterministically, foundation schema 21 restores default tuning and an empty time-scale remainder, foundation schema 22 migrates tuning schema 1 with the default movement rate, foundation schema 24 restores default scenario capacity policy, foundation preserves pending script commands and schema 26 migrates an empty service
  • tests/runtime_tests.cppNamed cases: runtime command queue preserves stamped order, fixed step time scaling preserves tick equations and frame partition equivalence, runtime tuning patches validate atomically and advance one revision, runtime scenario capacity policy loads authored v2 limits and defaults legacy v1
  • tests/runtime_player_command_tests.cppNamed cases: player command forms a Party from the two embodied authored Actors, player command snapshot promotes explicit Party formation and control, a controlled leader forms a directly movable Party, Party control summary reports and repairs a crisis-overridden follower, Party inventory provisioning respects the scenario storage limit atomically, rejected Party formation does not retain provisioned member inventory
  • tests/phase7_closure_tests.cppNamed cases: Phase 7 player construction expansion save and replay use one ownership path, settlement construction respects the scenario storage limit atomically, Phase 7 foundation schema loads the previous save without inventing Settlement state, Phase 7 player upgrade uses Settlement Construction Work and Resource owners, Phase 7 active maintenance survives save and cancellation reconciles every owner
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. Scenario schema 2 loads one versioned capacity policy while schema 1 uses explicit defaults below immutable technical ceilings.
  2. App retains the policy revision and validates requested changes against detached Actor and Resource use without owning either state.
  3. Actor rejects a live roster above the scenario population limit, and Resource rejects total units, individual inventory capacity, aggregate inventory capacity, and net-positive transforms above their applicable limits.
  4. Party provisioning, settlement construction, restore, and replay use the same detached owner validation and leave no partial mutation after rejection.
  5. Development Lua reads detached policy and use, submits revision-checked restricted changes, and observes only post-commit events.
  6. Foundation schema 25 retains the policy revision, and schema 24 migrates to the documented scenario defaults.
5 attributed contract changes
phase.16 · historical implementation slice

#Phase 16 tuning addendum E content catalog contracts

Introduced one required immutable settlement-content catalog and replaced source-specific economy and construction references with validated stable definition IDs.

Slice record at 184be4601f13

Proof sources
  • tests/content_catalog_tests.cppNamed cases: required content catalog loads immutable canonically ordered definitions, content catalog rejects malformed and order-derived identities transactionally, content catalog rejects duplicate definitions and missing references transactionally, content catalog footprint keys retain one canonical cell definition, content catalog validates land uses and crops as immutable referenced definitions
  • tests/asset_tests.cppNamed cases: asset service loads and caches immutable project data
  • tests/runtime_economy_tests.cppNamed cases: authored economy schema 11 loads stable catalog instance references, authored economy definition rejects invalid runtime relationships, economy content validation resolves resources, buildings, recipes, and materials, legacy economy schemas reject with a catalog migration diagnostic, economy schema 17 defaults every authored construction to site preparation, economy schema 18 validates established construction stage and worker pairs
  • tests/construction_tests.cppNamed cases: construction consumes delivered material only after bounded build progress, interrupted construction releases its worker and resumes without losing material or work, interrupted construction times out with its delivered material and cause retained, construction rejects tick-zero blockage evidence without creating invalid state
  • tests/phase3_economy_state_tests.cppNamed cases: construction scheduler rejects overflowing retained counter sums, Phase 3 replay reproduces claim transfer delivery and construction completion, Phase 3 schema 11 migrates construction work ticks to fixed-point work units, Phase 3 schema 12 maps every legacy building function to a stable definition, Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary, construction scheduler schema six initializes replacement scan evidence, construction schema seven migrates an unknown failure without inventing a cause, construction work rate preserves fractional progress across scheduler partitions, construction capability fit handles signed habit bias without unsigned wrap, Phase 3 schema 18 initializes moving-beneficiary handoff evidence
  • tests/foundation_serialization_tests.cppNamed cases: Phase 0 foundation state round trips and continues deterministically, foundation schema 21 restores default tuning and an empty time-scale remainder, foundation schema 22 migrates tuning schema 1 with the default movement rate, foundation schema 24 restores default scenario capacity policy, foundation preserves pending script commands and schema 26 migrates an empty service
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity
  • tests/runtime_tests.cppNamed cases: runtime command queue preserves stamped order, fixed step time scaling preserves tick equations and frame partition equivalence, runtime tuning patches validate atomically and advance one revision, runtime scenario capacity policy loads authored v2 limits and defaults legacy v1
  • tests/runtime_session_candidate_tests.cppNamed cases: new session candidate loads every authored owner before construction, saved session candidate validates authored identity before restoring state, missing saved session fails without constructing a partial candidate, saved session candidate exposes backup recovery feedback
  • tests/phase7_closure_tests.cppNamed cases: Phase 7 player construction expansion save and replay use one ownership path, settlement construction respects the scenario storage limit atomically, Phase 7 foundation schema loads the previous save without inventing Settlement state, Phase 7 player upgrade uses Settlement Construction Work and Resource owners, Phase 7 active maintenance survives save and cancellation reconciles every owner
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. AssetService loads one required schema-1 content-catalog asset and Assets validates six bounded stable-ID families plus every cross-family reference.
  2. The session candidate loads the shared immutable catalog before authored economy data and rejects unresolved resource, building, recipe, bundle, source, material, consumer, or capacity references.
  3. Game owners retain mutable runtime records and stable definition IDs; they do not copy immutable catalog authority.
  4. App maps closed catalog classifications into existing Resource, Construction, Production, Building, and Settlement requests without adding a content-specific mutation owner.
  5. Player designation, upgrade, and repair resolve retained building definitions rather than using the first project or a source-specific capacity branch.
  6. Construction schema 7, Phase 3 schema 13, foundation schema 26, and replay schema 19 retain catalog and building-definition identity.
  7. Building and construction queries expose detached definition IDs, and headless content validation reports 31 accepted definitions through the normal session path.
4 attributed contract changes
phase.16 · historical implementation slice

#Phase 16 tuning addendum F persistence and closure

Unified compressed inter-Site travel with physical movement policy, retained exact progress through persistence and replay, and closed the tuning foundation with package and scale proof.

Slice record at d59cc08473d7

Proof sources
  • tests/world_substrate_tests.cppNamed cases: movement tick work excludes twenty thousand retained terminal records, route travel uses physical distance actor capability and live movement tuning, route advancement preserves physical rate crossings and fractional ETA, route preview evaluates only the reachable physical path, traveler overflow rejects world advancement before region mutation, arrived route progress can be atomically replaced by a later trip, invalid substrate candidates leave a retained runtime unchanged
  • tests/world_runtime_tests.cppNamed cases: local movement converts physical rates into deterministic residual progress, road effects improve new route plans without rewriting active travel
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity
  • tests/foundation_serialization_tests.cppNamed cases: Phase 0 foundation state round trips and continues deterministically, foundation schema 21 restores default tuning and an empty time-scale remainder, foundation schema 22 migrates tuning schema 1 with the default movement rate, foundation schema 24 restores default scenario capacity policy, foundation preserves pending script commands and schema 26 migrates an empty service
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads

Cross-owner flow

  1. World plans each route from authored segment distance, the live movement base rate, detached Actor and transport capability, and validated infrastructure modifiers.
  2. World carries one fixed-point distance remainder across segment boundaries and recalculates the expected arrival from exact retained progress without rounding each segment separately.
  3. World schema 11 migrates legacy tick progress proportionally, and foundation schema 27 plus replay schemas retain or explicitly initialize every movement and development-command input.
  4. Phase 0 replay records supported normal and development-restricted commands through the existing Script Command service rather than introducing a replay-only mutation path.
  5. Combined regional and traveler advancement preflights the complete candidate before committing either owner state.
  6. Release packaging verifies generated API assets, installed runtime files, exact repository revision, and deterministic archive content; representative proof bounds 20,000 route previews.
2 attributed contract changes
phase.16 · historical implementation slice

#Phase 16A starter settlement content

Authored and validated the first inhabited settlement, its existing-owner composition, and keyed static presentation without opening autonomous life loops.

Slice record at 66676140de9f

Proof sources
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/static_sprite_atlas_tests.cppNamed cases: static sprite atlas canonicalizes keyed presentation frames, static sprite atlas rejects unsafe source and presentation geometry, static sprite atlas rejects duplicate and transient frame identities
  • tests/asset_tests.cppNamed cases: asset service loads and caches immutable project data
  • tests/sdl_asset_tests.cppNamed cases: SDL translates run-control and additive-selection keys
  • tests/foundation_serialization_tests.cppNamed cases: Phase 0 foundation state round trips and continues deterministically, foundation schema 21 restores default tuning and an empty time-scale remainder, foundation schema 22 migrates tuning schema 1 with the default movement rate, foundation schema 24 restores default scenario capacity policy, foundation preserves pending script commands and schema 26 migrates an empty service
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity

Cross-owner flow

  1. Scenario schema 3 names one optional settlement-definition asset while legacy scenarios retain their existing composition path.
  2. Assets validates named profiles, household membership, inventory anchors, physical source and storage roles, and candidate building identities before session construction.
  3. App composes the complete candidate through the existing Actor, Resource, Household, Building, Construction, and World owners without retaining duplicate settlement state.
  4. Scene schema 2 optionally binds static entities to validated atlas and frame identities; App derives disposable presentation records from scene truth.
  5. SDL decodes every scene-referenced static atlas transactionally from immutable AssetService bytes and falls back to procedural geometry when optional presentation is unavailable.
  6. Foundation schema 28 retains the settlement-definition identity, and headless validation reports the same accepted content as the graphical session path.
0 attributed contract changes
  • No contract-function attribution yet.
phase.16 · historical implementation slice

#Phase 16B food and water life

Added bounded exact-local food and water work for the inhabited settlement, including hydration, deterministic competition, active-only movement reconciliation, and Actor-only group selection.

Slice record at a52066ae9798

Proof sources
  • tests/actor_focus_reasoner_tests.cppNamed cases: actor focus scoring selects a need and explains every fixed-point contribution, hydration pressure selects the water focus through the shared scorer, hard eligibility excludes candidates before considerations run
  • tests/actor_motivation_tests.cppNamed cases: one drive response evaluator handles every actor pressure curve, working actor retains its job through a checkpoint and consumes a real carried meal, carried meals cannot consume resources in transit for active Work
  • tests/actor_plan_tests.cppNamed cases: exact job targets use local navigation before work becomes ready, route arrival starts exact local navigation for a remote job, route and local arrival reconciliation visit one mover in a twenty thousand Actor world, exact job travel cancels and restarts through plan lifecycle transitions, routine home movement reaches an exact local residence position, completed routine movement replaces stale local navigation with its exact arrival, ready jobs can replace a stale local target without changing work identity
  • tests/actor_schedule_tests.cppNamed cases: scheduled IAUS evaluation starts bounded plans and replaces an arrived route, invalidated exact travel interrupts and fails through the scheduled policy, route pressure interruption pauses until the clear threshold then resumes
  • tests/actor_state_tests.cppNamed cases: actor candidates are canonical and join Phase 1 world state without owning it, actor candidates enforce the scenario live-population boundary exactly, actor owner applies revision-checked hydration relief, invalid actor candidates leave a retained actor runtime unchanged, actor render composition joins Actor identity to World position without changing heat
  • tests/work_lifecycle_tests.cppNamed cases: work lifecycle completes one explicit demand job task reservation and order chain, live job claims stay indexed across lifecycle transitions and restoration
  • tests/settlement_supply_tests.cppNamed cases: food supply moves accounted stock and relieves hunger only after consumption, food supply cancellation in transit reconciles ownership exactly once, completed food supply creates one preflighted successor with explicit lineage
  • tests/settlement_supply_scheduler_tests.cppNamed cases: bounded settlement supply scheduler selects and claims one authored supply transactionally, settlement supply scheduler gives every actor a bounded window before cycling supplies, food need re-entry completes a second owned cycle without duplicating resources, settlement supply scheduler preflight rejection preserves every gameplay owner
  • tests/settlement_work_composition_tests.cppNamed cases: settlement work composition produces bounded deterministic actor and anchor indexes, settlement work composition cache refreshes only at its authoritative seams, settlement work composition rejects missing actors and invalid local anchors, settlement work composition retains authored anchors when no resident is eligible, economy-scoped settlement work excludes unrelated large Actor populations
  • tests/settlement_spatial_supply_tests.cppNamed cases: food supply follows exact source and stockpile positions without losing resources, water supply uses the same exact movement and conservation path, lost worker eligibility cancels exact movement and releases supply ownership, a blocked exact source path raises the retained blocked-route alert
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/world_runtime_tests.cppNamed cases: local movement converts physical rates into deterministic residual progress, road effects improve new route plans without rewriting active travel
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites
  • tests/world_substrate_tests.cppNamed cases: movement tick work excludes twenty thousand retained terminal records, route travel uses physical distance actor capability and live movement tuning, route advancement preserves physical rate crossings and fractional ETA, route preview evaluates only the reachable physical path, traveler overflow rejects world advancement before region mutation, arrived route progress can be atomically replaced by a later trip, invalid substrate candidates leave a retained runtime unchanged
  • tests/selection_tests.cppNamed cases: selection controls map pointer action state without SDL details, actor-aware marquee excludes props while direct clicks can inspect them
  • tests/runtime_player_command_tests.cppNamed cases: player command forms a Party from the two embodied authored Actors, player command snapshot promotes explicit Party formation and control, a controlled leader forms a directly movable Party, Party control summary reports and repairs a crisis-overridden follower, Party inventory provisioning respects the scenario storage limit atomically, rejected Party formation does not retain provisioned member inventory
  • tests/phase3_economy_state_tests.cppNamed cases: construction scheduler rejects overflowing retained counter sums, Phase 3 replay reproduces claim transfer delivery and construction completion, Phase 3 schema 11 migrates construction work ticks to fixed-point work units, Phase 3 schema 12 maps every legacy building function to a stable definition, Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary, construction scheduler schema six initializes replacement scan evidence, construction schema seven migrates an unknown failure without inventing a cause, construction work rate preserves fractional progress across scheduler partitions, construction capability fit handles signed habit bias without unsigned wrap, Phase 3 schema 18 initializes moving-beneficiary handoff evidence
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity

Cross-owner flow

  1. Actor owns hunger and hydration pressure, focus, exact-destination plans, interruption, and revision-checked need relief.
  2. App derives one bounded resident-worker and owner-spatial composition from authored settlement and current Actor, Resource, and World facts; the non-serialized cache refreshes only at its declared cadence and invalidation seams.
  3. The supply scheduler spends declared visit and Actor-evaluation budgets across rotating Actor and Supply windows, covers non-divisible cross-pairs deterministically, and never builds the complete candidate matrix.
  4. Accepted supply work moves the assigned Actor to the exact source, stockpile, and beneficiary positions before existing Work, Resource, Supply, and Actor owners commit gather, delivery, consumption, and relief.
  5. World advances only active local movers and route travelers, queues arrivals for bounded reconciliation, excludes terminal movement history from tick work, and rebuilds derived pending queues during restore hydration.
  6. Render limits gameplay marquee hits to Actors while App keeps inspected Actors separate from complete canonical Party command recipients.
  7. Phase 3 schema 14, Actor schema 18, and the current foundation and replay formats retain distinct worker and beneficiary identity, hydration, exact movement, supply lineage, scheduler continuation, and active-loop state.
8 attributed contract changes
phase.16 · historical implementation slice

#Phase 16C material and construction life

Added bounded timber and stone supply, exact material-backed construction, visible project stages, active-loop persistence and replay, and a valid local-to-route movement ownership transition.

Slice record at 07e32500096c

Proof sources
  • tests/settlement_supply_tests.cppNamed cases: food supply moves accounted stock and relieves hunger only after consumption, food supply cancellation in transit reconciles ownership exactly once, completed food supply creates one preflighted successor with explicit lineage
  • tests/settlement_supply_scheduler_tests.cppNamed cases: bounded settlement supply scheduler selects and claims one authored supply transactionally, settlement supply scheduler gives every actor a bounded window before cycling supplies, food need re-entry completes a second owned cycle without duplicating resources, settlement supply scheduler preflight rejection preserves every gameplay owner
  • tests/construction_tests.cppNamed cases: construction consumes delivered material only after bounded build progress, interrupted construction releases its worker and resumes without losing material or work, interrupted construction times out with its delivered material and cause retained, construction rejects tick-zero blockage evidence without creating invalid state
  • tests/construction_work_scheduler_tests.cppNamed cases: construction execution uses exact stockpile and project positions, construction claim continuation bounds a twenty-thousand Actor population, invalid construction worker reconciliation fails closed without stranding resources, construction worker reconciliation waits a bounded grace period after delivery, construction worker reconciliation assigns a replacement builder before timeout, construction worker recovery completes a bounded late-candidate scan after grace, interrupted construction preempts an ordinary claim continuation
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/phase3_economy_state_tests.cppNamed cases: construction scheduler rejects overflowing retained counter sums, Phase 3 replay reproduces claim transfer delivery and construction completion, Phase 3 schema 11 migrates construction work ticks to fixed-point work units, Phase 3 schema 12 maps every legacy building function to a stable definition, Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary, construction scheduler schema six initializes replacement scan evidence, construction schema seven migrates an unknown failure without inventing a cause, construction work rate preserves fractional progress across scheduler partitions, construction capability fit handles signed habit bias without unsigned wrap, Phase 3 schema 18 initializes moving-beneficiary handoff evidence
  • tests/phase7_closure_tests.cppNamed cases: Phase 7 player construction expansion save and replay use one ownership path, settlement construction respects the scenario storage limit atomically, Phase 7 foundation schema loads the previous save without inventing Settlement state, Phase 7 player upgrade uses Settlement Construction Work and Resource owners, Phase 7 active maintenance survives save and cancellation reconciles every owner
  • tests/world_runtime_tests.cppNamed cases: local movement converts physical rates into deterministic residual progress, road effects improve new route plans without rewriting active travel
  • tests/sdl_asset_tests.cppNamed cases: SDL translates run-control and additive-selection keys

Cross-owner flow

  1. The generalized supply owner treats material as a terminal stockpile delivery with no beneficiary, consumption bundle, need relief, or successor chain.
  2. The settlement supply scheduler assigns bounded timber and stone work through the same canonical worker and spatial indexes used for food and water.
  3. The construction scheduler traverses only active projects and supplied settlement workers, moves exact material bundles from shared storage to the project, and applies capability-sensitive labor through Construction.
  4. Construction owns requirements, progress, stage, and completion; Resource owns every quantity and transfer; Work owns Jobs and claims; World owns exact movement and arrival.
  5. Scene and App map retained construction stages to validated static sprite frames without authoring gameplay state.
  6. Starting inter-Site travel retires a previous local move as terminal history before World changes the Actor's spatial position.
  7. Phase 3 schema 16, supply schema 6, construction scheduler schema 5, scene schema 3, and economy schema 15 retain or migrate the complete owner state.
2 attributed contract changes
  • extended game::AdvanceConstructionWorkScheduler — Added bounded exact material pickup and project delivery, settlement-scoped claim continuation, invalid-worker reconciliation, and active-only Construction indexes.
  • extended game::AdvanceSettlementSupplyScheduler — Added material supply as a terminal stockpile delivery with no beneficiary, consumption, or need mutation.
phase.16 · historical implementation slice

#Phase 16D1 worker observation and command feedback

Exposed detached villager work, cargo, household, and authored project facts through the standard interface, with explicit control actions and owner-reported command failure.

Slice record at 1246f97f266a

Proof sources
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. The script query service reads current owner state into detached records for one selected villager, their cargo, household, and the active scenario's authored project alternatives.
  2. The first-party standard Lua package composes those records into player-facing panels without retaining gameplay authority or mutating simulation state.
  3. Taking and releasing direct control submit the existing revision-checked commands; observation alone does not change Actor authority or planning.
  4. The fixed-tick command owner publishes a post-owner failure event only after a validated request is rejected, while immediate validation failures remain explicit receipts.
  5. Runtime API 1.3 records the five additive public contracts and the generated reference retains one page for each symbol.
0 attributed contract changes
  • No contract-function attribution yet.
phase.16 · historical implementation slice

#Phase 16D2 personal and household money custody

Added conserved personal-wallet and Household-money custody, one directly controlled contribution path, detached balances, post-commit facts, and exact persistence and replay.

Slice record at 970c26786bc0

Proof sources
  • tests/resource_economy_tests.cppNamed cases: resource pickup and delivery conserve every registered quantity, resource consumption preserves an explicit accounted sink total, resource capacity usage is exact and limits reject container growth atomically, resource transforms enforce net-positive aggregate limits without partial mutation
  • tests/runtime_economy_tests.cppNamed cases: authored economy schema 11 loads stable catalog instance references, authored economy definition rejects invalid runtime relationships, economy content validation resolves resources, buildings, recipes, and materials, legacy economy schemas reject with a catalog migration diagnostic, economy schema 17 defaults every authored construction to site preparation, economy schema 18 validates established construction stage and worker pairs
  • tests/phase3_economy_state_tests.cppNamed cases: construction scheduler rejects overflowing retained counter sums, Phase 3 replay reproduces claim transfer delivery and construction completion, Phase 3 schema 11 migrates construction work ticks to fixed-point work units, Phase 3 schema 12 maps every legacy building function to a stable definition, Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary, construction scheduler schema six initializes replacement scan evidence, construction schema seven migrates an unknown failure without inventing a cause, construction work rate preserves fractional progress across scheduler partitions, construction capability fit handles signed habit bias without unsigned wrap, Phase 3 schema 18 initializes moving-beneficiary handoff evidence
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root
  • tests/runtime_money_custody_tests.cppNamed cases: money contribution requires direct control and conserves personal and household custody, money custody survives RuntimeSession state restoration exactly
  • tests/script_money_command_tests.cppNamed cases: money command fails closed without direct control, money command publishes conserved post-commit facts deterministically, money contribution executes on its target tick inside a multi-tick frame, standard interface shows money and contributes only after direct control, standard interface clears completed command feedback after its bounded lifetime, money contribution survives the foundation replay path

Cross-owner flow

  1. Assets validates one catalog currency, explicit Household identities, and dedicated personal-wallet and Household-money authored containers before App commits the starter settlement.
  2. The normal contribution command requires direct control, current Household membership, matching currency classification, and current revisions for ControlAuthority, Household, and both custody containers.
  3. App stages one Resource candidate; Resource atomically debits the Actor wallet, credits the Household container, and retains one stable bounded transfer record or rejects without mutation.
  4. The script query service exposes detached personal and Household balances, and the event service publishes the conserved post-commit facts only after Resource commits.
  5. The first-party standard Lua package shows both balances and offers Contribute One only for a directly controlled selected villager.
  6. Resource schema 6, Phase 3 economy schema 17, settlement-definition schema 2, normal command replay, and RuntimeSession restoration preserve the exact custody state.
0 attributed contract changes
  • No contract-function attribution yet.
phase.16 · historical implementation slice

#Phase 16D movement-quality addendum

Added deterministic eight-direction local paths, blocked-corner safety, physical diagonal distance, and exact diagonal persistence and replay without changing the one-meter WorldGrid.

Slice record at 46c6ed733e7d

Participating owners
Proof sources
  • tests/world_runtime_tests.cppNamed cases: local movement converts physical rates into deterministic residual progress, road effects improve new route plans without rewriting active travel
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity
  • tests/runtime_player_move_tests.cppNamed cases: contextual movement requires an explicit Take Control transition, contextual move requires direct control and advances one Actor through World positions, contextual move rejects empty or partial Party recipients without partial mutation
  • tests/phase12_defense_tests.cppNamed cases: settlement alarm creates one normal guard job and clears it atomically, selected Party uses deterministic line slots through normal exact-ground movement

Cross-owner flow

  1. WorldLocalNavigation searches the same one-meter cells through four cardinal and four diagonal neighbors with stable integer costs.
  2. A diagonal neighbor is eligible only when its destination and both side-adjacent cells are traversable, preventing movement through blocked corners.
  3. Chunk corridors remain orthogonal; each within-chunk segment may use diagonal cells before crossing one explicit orthogonal border portal.
  4. Movement retains the dense adjacent path and advances by physical millimeter distance through the existing fixed-tick rate policy.
  5. World restore validates adjacent cardinal or diagonal cells and reconstructs an in-progress physical segment position even when its temporary floor cell is not part of the dense route.
0 attributed contract changes
  • No contract-function attribution yet.
phase.16 · historical implementation slice

#Phase 16D player understanding and direction

Completed typed work and construction direction, derived completed-building navigation blockers, and bounded catalog-declared settlement audio through the standard interface.

Slice record at e9c828578431

Proof sources
  • tests/work_lifecycle_tests.cppNamed cases: work lifecycle completes one explicit demand job task reservation and order chain, live job claims stay indexed across lifecycle transitions and restoration
  • tests/job_preference_tests.cppNamed cases: job preference ranks immutable eligible jobs with fixed-point IAUS traces, player work priority adds a bounded preference without changing the baseline score, job preference excludes hard failures and breaks ties by stable job ID, job preference population gate bounds work across twenty thousand actors, preferred job claim commits work and resource ownership as one transaction
  • tests/construction_tests.cppNamed cases: construction consumes delivered material only after bounded build progress, interrupted construction releases its worker and resumes without losing material or work, interrupted construction times out with its delivered material and cause retained, construction rejects tick-zero blockage evidence without creating invalid state
  • tests/world_runtime_tests.cppNamed cases: local movement converts physical rates into deterministic residual progress, road effects improve new route plans without rewriting active travel
  • tests/phase3_economy_state_tests.cppNamed cases: construction scheduler rejects overflowing retained counter sums, Phase 3 replay reproduces claim transfer delivery and construction completion, Phase 3 schema 11 migrates construction work ticks to fixed-point work units, Phase 3 schema 12 maps every legacy building function to a stable definition, Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary, construction scheduler schema six initializes replacement scan evidence, construction schema seven migrates an unknown failure without inventing a cause, construction work rate preserves fractional progress across scheduler partitions, construction capability fit handles signed habit bias without unsigned wrap, Phase 3 schema 18 initializes moving-beneficiary handoff evidence
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root
  • tests/content_catalog_tests.cppNamed cases: required content catalog loads immutable canonically ordered definitions, content catalog rejects malformed and order-derived identities transactionally, content catalog rejects duplicate definitions and missing references transactionally, content catalog footprint keys retain one canonical cell definition, content catalog validates land uses and crops as immutable referenced definitions
  • tests/runtime_audio_cue_tests.cppNamed cases: asset-declared audio cues configure transactionally with a null fallback, runtime audio cue definitions cover each player-facing fact class, runtime audio routing prioritizes and deduplicates observed facts, busy audio cues are retried without changing fact authority, runtime audio capture reads bounded settlement owner state

Cross-owner flow

  1. The standard package reads detached Work and Construction targets and submits typed assignment, priority, cancellation, designation, and project-cancellation requests.
  2. App validates current cross-owner identity and revision evidence, then calls existing Work, Construction, Resource, Settlement, Actor, and World mutation paths without a player-only job or project owner.
  3. Work retains a bounded player priority on each Job and the existing reasoner includes it as one contribution alongside need, capability, route, and continuity evidence.
  4. Construction derives navigation-blocking cells from completed retained buildings. World consumes that disposable view and replans active movement when it changes; the view is not serialized.
  5. The runtime content catalog validates six stable semantic audio definitions. App derives bounded post-commit settlement facts and maps them to IDs, while Core and the SDL or Null backend own presentation-only resolution and playback.
  6. Work schema 18, Phase 3 economy schema 18, save, replay, API 1.5, and transactional package reload preserve the complete behavior and interface contract.
0 attributed contract changes
  • No contract-function attribution yet.
phase.16 · historical implementation slice

#Phase 16E autonomous development

Added one bounded autonomous settlement building choice, complete decision evidence, transactional construction designation, detached inspection, and save and replay continuity.

Slice record at 2eb61d03785c

Proof sources
  • tests/settlement_project_reasoner_tests.cppNamed cases: settlement project reasoner selects housing and exposes bounded fixed-point evidence, settlement facts can make storehouse outrank housing, different settlement and sponsor facts select different valid projects, settlement project hard gates retain the first specific rejection, settlement project threshold produces an explained no-selection result, settlement project selection is stable across ties and input permutations, settlement project reasoner rejects insufficient budgets and malformed snapshots
  • tests/settlement_tests.cppNamed cases: settlement expansion uses stable topology anchors and bounded indexes, settlement retains bounded autonomous project decisions across cadence and save, settlement reconciles only its selected Construction and reopens project cadence, settlement maintenance uses normal construction work and material ownership, settlement abandonment rejects retained ownership and accepts an empty record
  • tests/runtime_settlement_development_tests.cppNamed cases: Phase 16E selects and designates exactly one bounded settlement project, Phase 16E rejects invalid selected-project Construction bindings on restore, Phase 16E retains no-selection cadence and deterministic selection replay, Phase 16F reconciles a terminal selected project and reopens decision cadence, Phase 19Q5A retains independent household housing pressure without physical mutation, Phase 19Q5B compares durable housing methods without starting physical work, Phase 19Q5C2B selects one explained housing parcel without starting construction, Phase 19Q5C2B proximity budget exhaustion preserves every runtime owner, Phase 19Q5D binds the selected parcel once and reconciles cancellation, Phase 19Q5D completes selected housing and assigns the Household residence, Phase 19Q5D assigns selected shared housing without construction, Phase 19Q5D binds selected extension to the existing Building, Phase 19Q5E starts every housing method for distinct households without player input
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/construction_tests.cppNamed cases: construction consumes delivered material only after bounded build progress, interrupted construction releases its worker and resumes without losing material or work, interrupted construction times out with its delivered material and cause retained, construction rejects tick-zero blockage evidence without creating invalid state
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity

Cross-owner flow

  1. Settlement-definition schema 3 supplies two bounded stable project alternatives with validated catalog Building identities, Site identities, WorldGrid origins, and footprints.
  2. App composes current housing or storage pressure, available materials, labor cost, placement occupancy, local reachability, and duplicate-building facts without retaining a planning owner.
  3. The pure settlement-project reasoner applies hard eligibility gates and three fixed-point considerations within exact candidate and consideration budgets. Stable Building-definition order breaks equal scores.
  4. Settlement retains the complete candidate trace, owner-visit counts, source revision, decision tick, tuning version, useful-score threshold, selected Construction reference, and next-decision cadence.
  5. A selected result creates one normal Construction project and its Work and Resource records through the existing atomic settlement-construction transaction. A no-selection result changes only Settlement decision evidence and cadence.
  6. Runtime restore validates the selected Construction, same-Settlement Building membership, and selected Building definition. Settlement schema 3, the foundation save, and replay preserve the exact decision and one-shot result.
  7. The project-proposals query returns detached paged candidate rows, and the first-party standard package renders the retained decision and complete score or rejection evidence without mutation authority.
0 attributed contract changes
  • No contract-function attribution yet.
phase.16 · historical implementation slice

#Phase 16F failure and continuity

Connected Actor-owned critical interruption to Construction worker handoff, bounded replacement search, causal timeout failure, terminal Settlement outcome, reopened cadence, detached inspection, and persistence.

Slice record at ea436840fe8f

Proof sources
  • tests/construction_tests.cppNamed cases: construction consumes delivered material only after bounded build progress, interrupted construction releases its worker and resumes without losing material or work, interrupted construction times out with its delivered material and cause retained, construction rejects tick-zero blockage evidence without creating invalid state
  • tests/construction_work_scheduler_tests.cppNamed cases: construction execution uses exact stockpile and project positions, construction claim continuation bounds a twenty-thousand Actor population, invalid construction worker reconciliation fails closed without stranding resources, construction worker reconciliation waits a bounded grace period after delivery, construction worker reconciliation assigns a replacement builder before timeout, construction worker recovery completes a bounded late-candidate scan after grace, interrupted construction preempts an ordinary claim continuation
  • tests/phase3_economy_state_tests.cppNamed cases: construction scheduler rejects overflowing retained counter sums, Phase 3 replay reproduces claim transfer delivery and construction completion, Phase 3 schema 11 migrates construction work ticks to fixed-point work units, Phase 3 schema 12 maps every legacy building function to a stable definition, Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary, construction scheduler schema six initializes replacement scan evidence, construction schema seven migrates an unknown failure without inventing a cause, construction work rate preserves fractional progress across scheduler partitions, construction capability fit handles signed habit bias without unsigned wrap, Phase 3 schema 18 initializes moving-beneficiary handoff evidence
  • tests/settlement_tests.cppNamed cases: settlement expansion uses stable topology anchors and bounded indexes, settlement retains bounded autonomous project decisions across cadence and save, settlement reconciles only its selected Construction and reopens project cadence, settlement maintenance uses normal construction work and material ownership, settlement abandonment rejects retained ownership and accepts an empty record
  • tests/runtime_settlement_development_tests.cppNamed cases: Phase 16E selects and designates exactly one bounded settlement project, Phase 16E rejects invalid selected-project Construction bindings on restore, Phase 16E retains no-selection cadence and deterministic selection replay, Phase 16F reconciles a terminal selected project and reopens decision cadence, Phase 19Q5A retains independent household housing pressure without physical mutation, Phase 19Q5B compares durable housing methods without starting physical work, Phase 19Q5C2B selects one explained housing parcel without starting construction, Phase 19Q5C2B proximity budget exhaustion preserves every runtime owner, Phase 19Q5D binds the selected parcel once and reconciles cancellation, Phase 19Q5D completes selected housing and assigns the Household residence, Phase 19Q5D assigns selected shared housing without construction, Phase 19Q5D binds selected extension to the existing Building, Phase 19Q5E starts every housing method for distinct households without player input
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads

Cross-owner flow

  1. Actor retains the critical-need interruption and pauses its own active build plan. A pause caused by direct control remains deferred and cannot be mistaken for worker loss.
  2. Construction releases an interrupted autonomous builder through Work, preserves delivered material, completed work, and fractional progress, and retains blockage timing plus handoff history.
  3. The construction scheduler traverses only the supplied settlement worker index under explicit Actor-evaluation and candidate-visit budgets. Interrupted work preempts an unrelated claim continuation, and timeout is legal only after the grace period and one complete replacement scan.
  4. A valid replacement reclaims the released build Job and task through Work, starts one normal Actor job plan, and clears the Construction blockage. With no valid replacement, Construction records worker_interruption_timeout and terminates through the existing Work and Resource cleanup path.
  5. Settlement accepts only the exact current selected Construction as terminal, retains completed, failed, or abandoned outcome and cause, and schedules the next project evaluation at its normal cadence.
  6. Construction schema 8, construction-work scheduler schema 7, Settlement schema 4, Phase 3 economy schema 18, foundation schema 28, and replay schema 20 preserve or validate the complete continuity state.
  7. Detached queries and the first-party standard package expose blockage, grace, handoff, failure, project outcome, and next cadence without receiving gameplay mutation authority.
5 attributed contract changes
phase.16 · historical implementation slice

#Phase 16G starter settlement readability

Closed the inhabited starter-settlement checkpoint with content-owned residence benefits, canonical footprints, settlement-scoped inventory, readable established buildings, restore-safe movement, bounded Intersection evidence, and reproducible packaged proof.

Slice record at 14ce63044534

Proof sources
  • tests/content_catalog_tests.cppNamed cases: required content catalog loads immutable canonically ordered definitions, content catalog rejects malformed and order-derived identities transactionally, content catalog rejects duplicate definitions and missing references transactionally, content catalog footprint keys retain one canonical cell definition, content catalog validates land uses and crops as immutable referenced definitions
  • tests/runtime_economy_tests.cppNamed cases: authored economy schema 11 loads stable catalog instance references, authored economy definition rejects invalid runtime relationships, economy content validation resolves resources, buildings, recipes, and materials, legacy economy schemas reject with a catalog migration diagnostic, economy schema 17 defaults every authored construction to site preparation, economy schema 18 validates established construction stage and worker pairs
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/world_runtime_tests.cppNamed cases: local movement converts physical rates into deterministic residual progress, road effects improve new route plans without rewriting active travel
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity

Cross-owner flow

  1. The starter settlement composes ten residents, four households, two operational longhouses, a well, granary, ration kitchen, meeting shelter, and workshop project through existing content and runtime owners.
  2. Validated housing definitions own shelter, rest, and comfort benefits. Current Building condition scales those benefits, while World placement provides residence access distance.
  3. Settlement retains a bounded list of owned stockpile identities. The scripting query joins only those Resource containers and cannot report wilderness sources, carried items, wallets, or unrelated construction buffers as settlement inventory.
  4. Building queries detach the authored display name and purpose plus runtime condition and lifecycle state. The standard package formats those facts without mutation authority.
  5. Catalog validation permits footprint-key reuse only when canonical cells match. Completed-building navigation blockers remain a disposable World view and are hydrated before restored movement replans from its retained physical position.
  6. Intersection activation retains one bounded incident projection instead of a second complete Actor record. Persistence rejects dead or noncanonical participants before accepting state.
  7. Development, headless, sanitizer, Release, focused Phase 16, representative-scale, API, reproducible-package, and live packaged-play gates pass on the same committed checkpoint.
0 attributed contract changes
  • No contract-function attribution yet.
phase.17 · historical implementation slice

#Phase 17A calendar and routine

Added World-derived calendar presentation and bounded Actor-owned daily routine choices through the existing fixed schedule, persistence, scripting, scale, and interface paths.

Slice record at 255fa6f90412

Proof sources
  • tests/actor_routine_tests.cppNamed cases: calendar snapshot exposes stable day and clock boundaries, two residents retain different explainable choices in the same routine window, a retained work checkpoint defers a hungry resident's meal, scheduled breaks and social time release an ordinary work commitment
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity

Cross-owner flow

  1. World derives one player-readable day, clock, season, and day kind from its authoritative fixed tick without retaining a second calendar.
  2. Each scheduled Actor visit evaluates one compact routine from stable identity, current calendar, condition, recovery, need, and active-Work facts.
  3. Actor retains the expected routine, actual choice, reason, schedule offset, evaluation tick, and bounded compressed-day evidence.
  4. Actor schema 19 persists the accepted routine state. Schema 18 migrates with no invented prior choice, and replay advances the normal schedule.
  5. Runtime API 1.6 exposes detached calendar and routine queries. The standard Lua interface formats those facts without calendar, Actor, Work, or schedule authority.
  6. Focused, complete-development, representative-Release, and live graphical proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.17 · historical implementation slice

#Phase 17A world indicators

Added a bounded development resource-activity overlay, package-authorized visibility controls, and cleanup for multi-tick money requests and obsolete command feedback.

Slice record at db6bd93cda68

Proof sources
  • tests/world_indicator_tests.cppNamed cases: resource activity indicators detach bounded stable facts without mutating owners, resource activity indicator composition reports its visit budget
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_money_command_tests.cppNamed cases: money command fails closed without direct control, money command publishes conserved post-commit facts deterministically, money contribution executes on its target tick inside a multi-tick frame, standard interface shows money and contributes only after direct control, standard interface clears completed command feedback after its bounded lifetime, money contribution survives the foundation replay path
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root
  • tests/sdl_asset_tests.cppNamed cases: SDL translates run-control and additive-selection keys

Cross-owner flow

  1. Resource, Supply, Work, and World retain their existing quantities, reservations, jobs, routes, and positions.
  2. App visits one bounded source window and composes detached stable indicator records only while the named channel is visible.
  3. ScriptPackageHost owns per-session visibility and rejects origins without development authority. Safe Mode hides the development channel.
  4. Render projects each detached record into world space and draws its semantic state and compact counts without gameplay mutation or save authority.
  5. The Tuning Bench exposes explicit show and hide actions through Runtime API 1.7. Transactional reload retains valid channel state and rebinds the accepted runtime host.
  6. Money contribution validation uses the World tick processing the request. Standard-interface feedback expires after a fixed presentation interval.
  7. Focused, complete-development, generated-reference, manual-index, and live isolated graphical proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.17 · historical implementation slice

#Phase 17A world-indicator correction

Completed authored resource-source coverage, exact source-cell placement, centered indicator layout, scene-depth ground markers, and removal of obsolete static Site targets.

Slice record at 4cfcd268707a

Proof sources
  • tests/world_indicator_tests.cppNamed cases: resource activity indicators detach bounded stable facts without mutating owners, resource activity indicator composition reports its visit budget
  • tests/sdl_asset_tests.cppNamed cases: SDL translates run-control and additive-selection keys

Cross-owner flow

  1. App visits bounded authored resource-source anchors first, resolves their Resource container and catalog resource identity, and uses the exact World cell center as detached presentation position.
  2. Bounded Supply and Work reads enrich matching physical sources with current reservation, worker, job, and route state. Absence of a current Supply chain cannot erase a source.
  3. Render centers each complete orb and text pill over the source anchor.
  4. Selection candidate, selected, hovered, and contextual move ground markers enter the existing sorted scene immediately before the matching ground depth.
  5. The old topology Site target presentation path is removed because exact-ground movement no longer uses fixed visible destinations.
  6. Focused, complete-development, generated-manual, retrieval-index, and live isolated graphical proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.17 · historical implementation slice

#Phase 17B health and care

Added bounded autonomous household care that treats one scheduled injury or illness through normal Work, Actor, Resource, and Household owners.

Slice record at 56eba2f2fb59

Proof sources
  • tests/phase17_health_care_tests.cppNamed cases: household care Work recovers one injury and one illness atomically, household care Work is deterministic from the same retained inputs, scheduled residents receive injury and illness care without player direction
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. App scans at most 64 scheduled recipients and 64 settlement stockpiles per fixed tick, then selects at most one same-household caregiver at the same site with stable tie-breaking.
  2. The care transaction opens one normal Work demand, job, task, claim, and reservation and binds the caregiver's Actor-owned job plan.
  3. Resource supplies exactly one authored field dressing. Actor applies the wound or illness treatment only after every owner accepts the previewed result.
  4. Household schema 5 retains the typed care kind, caregiver, recipient, material, and completion tick. Schema 4 migrates existing meal-care records without inventing health history.
  5. A rejected transaction restores every candidate owner. Current saves and deterministic replay retain accepted Work, Actor, Resource, and Household state.
  6. Runtime API 1.8 and the standard interface expose detached injury, illness, impairment, recovery, and latest-care facts.
  7. Focused health-care, query, package, API, complete-development, generated-manual, and DocForge proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Phase 19A building capability

Added data-driven production economics that require an operational Building service, physical maintenance inputs, Work labor, Resource storage, and retained opportunity-cost evidence.

Slice record at dd4f5d0ec928

Proof sources
  • tests/production_tests.cppNamed cases: production completes a multi-step accounted transform through Work and inventory, production reserves building service and consumes visible maintenance, production schema one migrates without inventing economic costs, production rejects completion atomically when output capacity is unavailable, production cancellation releases Work and retains carried inputs exactly once
  • tests/content_catalog_tests.cppNamed cases: required content catalog loads immutable canonically ordered definitions, content catalog rejects malformed and order-derived identities transactionally, content catalog rejects duplicate definitions and missing references transactionally, content catalog footprint keys retain one canonical cell definition, content catalog validates land uses and crops as immutable referenced definitions
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner

Cross-owner flow

  1. Assets validates immutable recipe economics and resolves them into the existing Production recipe registry.
  2. Production accepts an order only when the named Building is operational, provides the required function, meets the condition threshold, and has enough unreserved service capacity.
  3. Resource moves and consumes ordinary and maintenance inputs through the same bounded reservation and conservation path. Work retains each production step and its labor requirement.
  4. The accepted Production order retains the Building revision, condition, and service reservation plus a detached explanation of labor, storage, maintenance, value, and alternative use.
  5. Production schema 2 persists the economics and accepted evidence. Schema 1 migration adds no invented maintenance, service use, condition, value, or alternative use.
  6. Focused, complete-development, generated-manual, retrieval-index, and complete DocForge graph proof pass; the configured desktop MCP process remains unavailable with Transport closed.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Phase 19B autonomous projects

Added stable household, business, civic, and institution sponsor evidence to bounded settlement-project selection and proved two settlements selecting different valid projects from different owned facts.

Slice record at 97e9ccfca5ee

Proof sources
  • tests/settlement_project_reasoner_tests.cppNamed cases: settlement project reasoner selects housing and exposes bounded fixed-point evidence, settlement facts can make storehouse outrank housing, different settlement and sponsor facts select different valid projects, settlement project hard gates retain the first specific rejection, settlement project threshold produces an explained no-selection result, settlement project selection is stable across ties and input permutations, settlement project reasoner rejects insufficient budgets and malformed snapshots
  • tests/settlement_tests.cppNamed cases: settlement expansion uses stable topology anchors and bounded indexes, settlement retains bounded autonomous project decisions across cadence and save, settlement reconciles only its selected Construction and reopens project cadence, settlement maintenance uses normal construction work and material ownership, settlement abandonment rejects retained ownership and accepts an empty record
  • tests/runtime_settlement_development_tests.cppNamed cases: Phase 16E selects and designates exactly one bounded settlement project, Phase 16E rejects invalid selected-project Construction bindings on restore, Phase 16E retains no-selection cadence and deterministic selection replay, Phase 16F reconciles a terminal selected project and reopens decision cadence, Phase 19Q5A retains independent household housing pressure without physical mutation, Phase 19Q5B compares durable housing methods without starting physical work, Phase 19Q5C2B selects one explained housing parcel without starting construction, Phase 19Q5C2B proximity budget exhaustion preserves every runtime owner, Phase 19Q5D binds the selected parcel once and reconciles cancellation, Phase 19Q5D completes selected housing and assigns the Household residence, Phase 19Q5D assigns selected shared housing without construction, Phase 19Q5D binds selected extension to the existing Building, Phase 19Q5E starts every housing method for distinct households without player input
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner

Cross-owner flow

  1. App composes bounded candidate inputs from one indexed Settlement, its Building and stockpile references, authored project definitions, Resource availability, World placement, and current Construction costs.
  2. Housing candidates carry one stable Household sponsor and storage candidates carry one stable business sponsor derived from the existing settlement indexes. Civic and institution identities use the same reasoner contract.
  3. The pure reasoner evaluates sponsor support with current capacity pressure, material readiness, and inverse labor cost under a fixed candidate and consideration budget.
  4. Settlement schema 6 retains the accepted sponsor kind, stable identity, contribution, eligibility, score, selection, Construction reference, and cadence. Schema 5 migration marks legacy civic sponsorship and invents no support.
  5. The selected candidate still enters the existing Construction transaction, which revalidates every owner before mutation. Candidate evaluation itself reserves no material, land, labor, or construction identity.
  6. Focused two-settlement divergence, complete-development, generated-manual, retrieval-index, and complete DocForge graph proof pass; the configured desktop MCP process remains unavailable with Transport closed.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Phase 19C trade and logistics

Added scarcity-derived regional Route quotes and retained priced trade obligations whose physical cargo remains conserved through delivery and failure.

Slice record at 70ee4d7a1187

Proof sources
  • tests/trade_tests.cppNamed cases: party provisioning and trade obligation move physical conserved cargo, regional scarcity quote becomes a physical trade obligation with failure, expired trade obligation fails and retains already carried cargo, cancelled provisioning releases source cargo without partial transfer, trade state round trips in transit and resumes deterministically
  • tests/regional_economy_tests.cppNamed cases: regional economy applies bounded facts in canonical identity order, regional economy replaces a revisioned source fact without double counting, regional economy rejects over-budget and conflicting updates atomically, regional economy summaries serialize and continue deterministically, regional economy quotes one route from owned scarcity and risk facts
  • tests/phase9_closure_tests.cppNamed cases: Phase 9 owners compose persist and continue through the live session, Phase 9 restoration rejects unknown recipe resources transactionally, Phase 9 foundation migration preserves an older save without inventing owners, Phase 9 inspection rejects partial owner composition

Cross-owner flow

  1. RegionalEconomy derives one bounded quote from current source and destination Resource summaries plus accepted Route exposure without moving goods or money.
  2. Trade validates and retains stable source and destination Settlement identities, Route, Resource and quantity, scarcity evidence, summary revisions, unit and total price, risk, and deadline.
  3. The accepted obligation opens the existing Work graph and Resource reservation for one active Party leader and carrier. Pickup moves the exact cargo into carried inventory.
  4. World Route arrival permits Resource delivery and Work completion. An unreachable route followed by deadline expiry fails the Trade and Work records while Resource retains the physical cargo in its current carrier.
  5. Trade schema 2 persists priced terms. Schema 1 migration marks prior obligations as legacy unpriced records and invents no quote or Settlement endpoint.
  6. Focused pricing and failure, complete-development, generated-manual, retrieval-index, and complete DocForge graph proof pass; the configured desktop MCP process remains unavailable with Transport closed.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Phase 19D earned capability

Added retained craft, knowledge, infrastructure, or institution evidence that deterministically opens or closes one capability-gated gameplay option without a generic technology tier.

Slice record at 6607a69cad3a

Proof sources
  • tests/settlement_tests.cppNamed cases: settlement expansion uses stable topology anchors and bounded indexes, settlement retains bounded autonomous project decisions across cadence and save, settlement reconciles only its selected Construction and reopens project cadence, settlement maintenance uses normal construction work and material ownership, settlement abandonment rejects retained ownership and accepts an empty record
  • tests/production_tests.cppNamed cases: production completes a multi-step accounted transform through Work and inventory, production reserves building service and consumes visible maintenance, production schema one migrates without inventing economic costs, production rejects completion atomically when output capacity is unavailable, production cancellation releases Work and retains carried inputs exactly once

Cross-owner flow

  1. Settlement accepts one stable capability identity only with typed causal evidence, a stable owner fact ID, current source revision, and earning tick.
  2. The pure requirement query reports whether that retained evidence is active and returns the exact evidence used without mutating Production, Construction, Resource, Work, World, Knowledge, or Institution.
  3. An operational workshop can provide infrastructure evidence for toolmaking, making one production option eligible through the query while Production still owns execution.
  4. A revision-checked regression closes the option but preserves the capability identity, causal evidence, and original earning tick for explanation and later recovery.
  5. Settlement schema 7 persists current and historical capability evidence. Schema 6 migration adds no capability records that the prior save did not contain.
  6. Focused eligibility and regression, complete-development, generated-manual, retrieval-index, and complete DocForge graph proof pass; the configured desktop MCP process remains unavailable with Transport closed.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Phase 19E specialization and outposts

Added derived settlement capability profiles and one bounded World-backed parent-outpost relationship with physical maintenance evidence and retained lapse history.

Slice record at 9e789ce23165

Proof sources
  • tests/settlement_tests.cppNamed cases: settlement expansion uses stable topology anchors and bounded indexes, settlement retains bounded autonomous project decisions across cadence and save, settlement reconciles only its selected Construction and reopens project cadence, settlement maintenance uses normal construction work and material ownership, settlement abandonment rejects retained ownership and accepts an empty record

Cross-owner flow

  1. Settlement derives a foundational, craft, knowledge, infrastructure, or institution profile from sorted active capability evidence; the label cannot grant an option.
  2. A parent Settlement accepts another stable Settlement as an outpost only when its target Site and Region match World topology and one named Route connects the parent anchor to that Site.
  3. The relationship retains topology revision, maintenance Resource and quantity, period, last Resource revision and availability, active state, establishment tick, and next due tick.
  4. A due maintenance review uses current Resource evidence. Insufficient physical stock lapses the relationship while preserving the outpost Settlement, spatial facts, Route, and establishment history.
  5. Settlement schema 8 persists the relationship. Schema 7 migration adds no outpost that the prior save did not contain.
  6. Focused profile and outpost, complete-development, generated-manual, retrieval-index, and complete DocForge graph proof pass; the configured desktop MCP process remains unavailable with Transport closed.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Phase 19F wealth and markets

Added conserved business wages, household saving, and atomic priced purchases between personal, household, and business Resource custody.

Slice record at 808cc361c985

Proof sources
  • tests/resource_economy_tests.cppNamed cases: resource pickup and delivery conserve every registered quantity, resource consumption preserves an explicit accounted sink total, resource capacity usage is exact and limits reject container growth atomically, resource transforms enforce net-positive aggregate limits without partial mutation
  • tests/phase3_economy_state_tests.cppNamed cases: construction scheduler rejects overflowing retained counter sums, Phase 3 replay reproduces claim transfer delivery and construction completion, Phase 3 schema 11 migrates construction work ticks to fixed-point work units, Phase 3 schema 12 maps every legacy building function to a stable definition, Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary, construction scheduler schema six initializes replacement scan evidence, construction schema seven migrates an unknown failure without inventing a cause, construction work rate preserves fractional progress across scheduler partitions, construction capability fit handles signed habit bias without unsigned wrap, Phase 3 schema 18 initializes moving-beneficiary handoff evidence
  • tests/runtime_money_custody_tests.cppNamed cases: money contribution requires direct control and conserves personal and household custody, money custody survives RuntimeSession state restoration exactly

Cross-owner flow

  1. Resource retains dedicated personal, household, and business custody containers while every coin and physical good remains in the same conserved registry.
  2. A wage validates current business-fund and Actor-wallet revisions before committing one exact money bundle and stable transfer record.
  3. The existing household-contribution path moves part of the wage into Household money custody without creating a separate savings ledger.
  4. A purchase validates Household funds, business funds, business inventory, household goods, exact price, exact quantity, capacity, and all four revisions before committing both legs atomically.
  5. An unaffordable purchase rejects without changing any container or history. Stable transfer identities make accepted retries no-ops.
  6. Resource schema 8 persists both purchase legs. Schemas 6 and 7 migrate with no invented exchange evidence.
  7. Focused, complete-development, generated-manual, retrieval-index, and complete DocForge graph proof pass; the configured desktop MCP process remains unavailable with Transport closed.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Phase 19G growth and decline closure

Added non-authoritative prosperity derivation, causal decline and recovery through existing economic owners, and cursor-bounded multi-settlement evaluation.

Slice record at 810b2eeadb69

Proof sources
  • tests/settlement_tests.cppNamed cases: settlement expansion uses stable topology anchors and bounded indexes, settlement retains bounded autonomous project decisions across cadence and save, settlement reconciles only its selected Construction and reopens project cadence, settlement maintenance uses normal construction work and material ownership, settlement abandonment rejects retained ownership and accepts an empty record
  • tests/resource_economy_tests.cppNamed cases: resource pickup and delivery conserve every registered quantity, resource consumption preserves an explicit accounted sink total, resource capacity usage is exact and limits reject container growth atomically, resource transforms enforce net-positive aggregate limits without partial mutation
  • tests/production_tests.cppNamed cases: production completes a multi-step accounted transform through Work and inventory, production reserves building service and consumes visible maintenance, production schema one migrates without inventing economic costs, production rejects completion atomically when output capacity is unavailable, production cancellation releases Work and retains carried inputs exactly once
  • tests/trade_tests.cppNamed cases: party provisioning and trade obligation move physical conserved cargo, regional scarcity quote becomes a physical trade obligation with failure, expired trade obligation fails and retains already carried cargo, cancelled provisioning releases source cargo without partial transfer, trade state round trips in transit and resumes deterministically
  • tests/regional_economy_tests.cppNamed cases: regional economy applies bounded facts in canonical identity order, regional economy replaces a revisioned source fact without double counting, regional economy rejects over-budget and conflicting updates atomically, regional economy summaries serialize and continue deterministically, regional economy quotes one route from owned scarcity and risk facts
  • tests/settlement_project_reasoner_tests.cppNamed cases: settlement project reasoner selects housing and exposes bounded fixed-point evidence, settlement facts can make storehouse outrank housing, different settlement and sponsor facts select different valid projects, settlement project hard gates retain the first specific rejection, settlement project threshold produces an explained no-selection result, settlement project selection is stable across ties and input permutations, settlement project reasoner rejects insufficient budgets and malformed snapshots

Cross-owner flow

  1. Settlement derives one prosperity snapshot from its current capability and outpost records plus detached wealth, production, trade, and maintenance facts without retaining duplicate economic truth.
  2. The snapshot explains support and pressure as flourishing, stable, stagnating, declining, or abandoned state but cannot grant capability or mutate any owner.
  3. Capability regression and physical outpost-maintenance shortage produce a declining snapshot through normal Settlement and Resource operations.
  4. A Resource transform replenishes the exact maintenance material, and revision-checked Settlement operations restore capability and outpost state while preserving original earning and establishment history.
  5. Settlement save and restore reproduce the same derived prosperity snapshot without serializing the derived view.
  6. Batch evaluation visits only one canonically ordered cursor window under the caller's explicit budget, reports deferred settlements, and resumes from the exact continuation cursor.
  7. Focused, complete-development, generated-manual, retrieval-index, and complete DocForge graph proof pass; the configured desktop MCP process remains unavailable with Transport closed.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum A visible work and home routine

Made the starter settlement the normal launch and added a bounded daily loop in which residents accept work during work activity and return to exact reachable positions at their assigned residence for sleep.

Slice record at d13489654d6d

Proof sources
  • tests/actor_plan_tests.cppNamed cases: exact job targets use local navigation before work becomes ready, route arrival starts exact local navigation for a remote job, route and local arrival reconciliation visit one mover in a twenty thousand Actor world, exact job travel cancels and restarts through plan lifecycle transitions, routine home movement reaches an exact local residence position, completed routine movement replaces stale local navigation with its exact arrival, ready jobs can replace a stale local target without changing work identity
  • tests/actor_routine_tests.cppNamed cases: calendar snapshot exposes stable day and clock boundaries, two residents retain different explainable choices in the same routine window, a retained work checkpoint defers a hungry resident's meal, scheduled breaks and social time release an ordinary work commitment
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/runtime_tests.cppNamed cases: runtime command queue preserves stamped order, fixed step time scaling preserves tick equations and frame partition equivalence, runtime tuning patches validate atomically and advance one revision, runtime scenario capacity policy loads authored v2 limits and defaults legacy v1

Cross-owner flow

  1. The normal graphical session selects the ten-resident starter settlement instead of the two-Actor isometric laboratory.
  2. Actor evaluates each resident's planned and actual routine from deterministic World calendar facts and exposes whether that decision accepts new autonomous Work.
  3. RuntimeSession supplies only on-duty starter residents to the existing supply and Construction work schedulers. The schedulers and Work owner retain their existing claim and execution contracts.
  4. At the sleep window, ordinary work no longer overrides the resident's schedule. Existing reconciliation releases completed or ineligible autonomous work through its normal ownership path.
  5. Household identifies the resident's assigned operational housing Building. Construction supplies its completed footprint, and App selects one stable reachable perimeter position without retaining a second residence owner.
  6. Actor starts a revisioned exact home plan and World owns the local movement. The completed plan retains a routine-home-arrived reason and survives save, restore, and deterministic replay.
  7. Detached player status shows day, time, planned activity, actual activity, decision reason, and work availability for the selected resident.
  8. Focused and complete development tests, strict formatting, focused production clang-tidy, generated-manual validation, retrieval-index validation, complete DocForge refresh, and live graphical observation pass. The required MCP synchronization and bootstrap calls return Transport closed, so no binding synchronization is claimed.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum B lived settlement day

Filled the starter region with clustered woodland and gave residents visible destinations for work, meals, breaks, social gatherings, care, and nighttime household occupancy.

Slice record at d079fc7e2e71

Proof sources
  • tests/actor_plan_tests.cppNamed cases: exact job targets use local navigation before work becomes ready, route arrival starts exact local navigation for a remote job, route and local arrival reconciliation visit one mover in a twenty thousand Actor world, exact job travel cancels and restarts through plan lifecycle transitions, routine home movement reaches an exact local residence position, completed routine movement replaces stale local navigation with its exact arrival, ready jobs can replace a stale local target without changing work identity
  • tests/actor_routine_tests.cppNamed cases: calendar snapshot exposes stable day and clock boundaries, two residents retain different explainable choices in the same routine window, a retained work checkpoint defers a hungry resident's meal, scheduled breaks and social time release an ordinary work commitment
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/settlement_spatial_supply_tests.cppNamed cases: food supply follows exact source and stockpile positions without losing resources, water supply uses the same exact movement and conservation path, lost worker eligibility cancels exact movement and releases supply ownership, a blocked exact source path raises the retained blocked-route alert

Cross-owner flow

  1. The starter scene authors 46 oak stands and 28 berry bushes in nine deterministic clusters across several chunks, including a woodland edge visible from the normal launch camera.
  2. Actor derives work, meal, break, care, social, community, personal, recovery, and sleep activity from the fixed World calendar. Break and social windows release ordinary autonomous Work instead of being overwritten by an old commitment.
  3. RuntimeSession offers new supply and Construction claims only to residents whose current Actor decision accepts work. A resident carrying physical cargo remains with that Work claim through delivery, and at most one resident may finish a current pickup checkpoint after hours.
  4. App composes stable reachable positions around owned operational homes, the kitchen, well, meeting shelter, workshop, and social gathering points. Actor retains each exact routine plan and World retains local navigation.
  5. Social residents share several stable gathering positions so visible conversations occur without introducing dialogue or relationship authority.
  6. Render derives a small work, break, meal, or social marker from Actor and Work state. A sleeping resident disappears only after Actor reaches the exact position beside the Household residence; the presentation snapshot reports inside occupancy.
  7. A full starter-settlement day proves work, breaks, social gathering, nighttime return, inside occupancy, save, restore, and deterministic continuation. Exact completed movement replaces stale local-navigation state with a matching arrival record.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum C readable village focus and priority

Made the standard interface the normal launch view and exposed bounded village, profession, project, progress, assigned-resident, and real Work-priority facts before selection.

Slice record at a3386c22c93c

Proof sources
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/runtime_options_tests.cppNamed cases: runtime options accept every named application flow failure boundary
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. Graphical startup excludes development-origin packages unless the explicit development-addons option is present. Release policy continues to exclude them unconditionally.
  2. Settlement exposes only its count and one bounded stable-ID page. The script query service builds detached village summary rows without requiring an Actor selection.
  3. Actor status joins the authored content profile to expose profession identity and display name while Actor remains authoritative for routine, plan, task, needs, and condition.
  4. The standard package reads the first loaded Settlement, active Construction, and progress snapshots to show population, households, buildings, project stage, assigned resident, and current Work player priority before selection.
  5. The village priority actions submit command.work.set-priority with the detached Job identity and revision. Work validates and owns the durable priority; the interface has no alternate project or job state.
  6. A release-style package-host integration proves the standard interface alone shows the ten-resident starter village and changes the real active-project Work priority from zero to ten thousand basis points.
  7. An isolated normal graphical launch proves the standard HUD, village summary, Workshop focus, progress, assigned resident, woodland, buildings, and moving residents without development composition panels.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum D social encounters and memory

Turned routine social outings into bounded completed encounters with retained relationships, witnessed memories, companionship relief, and standard-interface chronicle and relationship views.

Slice record at 208900eebca3

Proof sources
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/phase17_relationship_household_tests.cppNamed cases: household formation changes a later autonomous partner care decision
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. RuntimeSession considers only alive starter residents whose Actor-owned actual routine is social and whose exact social travel is active or complete.
  2. Each resident may retain at most one social encounter per day. Stable selection prefers an available non-estranged retained Relationship before pairing residents who have no current bond.
  3. App chooses conversation, support, or disagreement deterministically, prepares both Actor updates, the Relationship mutation, a completed IntersectionLifecycle incident, and two witnessed Memory records, then commits only after every candidate owner accepts.
  4. Actor retains companionship relief. Relationship retains the bond state. Memory retains each participant's witnessed experience. IntersectionLifecycle retains the exact participants and completed outcome.
  5. Runtime API 1.10 exposes bounded actor-relationship and newest-first settlement-chronicle queries. The standard package formats detached names and outcomes without retaining social truth.
  6. Focused Village Life, complete development, strict formatting and lint, API Reference, generated manual, retrieval index, complete DocForge graph, MCP synchronization, and bootstrap proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum E family formation and life-course continuity

Added bounded partnership, housed Household formation, birth and growth, immigration, living emigration, age death, conserved inheritance, and normal-interface family history.

Slice record at 04cda38baff0

Proof sources
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/phase17_relationship_household_tests.cppNamed cases: household formation changes a later autonomous partner care decision
  • tests/phase17_life_transition_tests.cppNamed cases: life stages end in one conserved death and inheritance transition
  • tests/phase17_generational_closure_tests.cppNamed cases: living emigration releases current work and preserves identity and property, representative generations remain bounded and deterministic across multiple years
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. App evaluates only current alive adult starter residents and requires a usable Household residence before preparing one bounded partnership and Household formation.
  2. Relationship retains the partnership, Household retains new membership and residence, Resource retains Household money custody, and Settlement retains the new Household identity.
  3. A born Actor retains both parent identities, grows through Actor life stages, and remains outside adult Work eligibility until adulthood.
  4. Immigration extends World, Actor, ControlAuthority, Relationship, Household, Reputation, Resource, and Settlement candidates before any owner commits; the adult then joins ordinary routine and work.
  5. Living emigration preserves Actor identity and wallet outside the settlement while reconciling Work and current memberships through existing owners.
  6. Age death transfers personal money into Household custody through the existing life-transition transaction and removes only current memberships.
  7. Runtime API 1.11 exposes bounded family and newest-first life-event views. The standard package shows current life stages and retained partnership, birth, migration, and death events without owning them.
  8. Focused multi-year, migration, persistence, replay, API, package, complete-development, generated-manual, retrieval-index, complete DocForge graph, and interactive binding proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum F household meals and reserves

Added physical home pantries, normal stockpile-to-home provisioning Work, retained household meals and care, shortage strain and recovery, and normal-interface domestic activity.

Slice record at 321bcb2d8748

Proof sources
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/resource_economy_tests.cppNamed cases: resource pickup and delivery conserve every registered quantity, resource consumption preserves an explicit accounted sink total, resource capacity usage is exact and limits reject container growth atomically, resource transforms enforce net-positive aggregate limits without partial mutation
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. Each authored Household has one Resource-owned household-goods container spatially bound beside its assigned longhouse.
  2. Low pantry reserves create one bounded material Supply from the settlement stockpile to the home container without inventing Resource quantity.
  3. The existing Work, Supply, Actor, and World paths claim the job, walk to the stockpile, pick up conserved food, walk home, and store it in the pantry.
  4. Meal routine travel resolves to the Household residence. A meal consumes one physical pantry food, relieves one Actor's hunger, and appends bounded Household care only after every owner accepts.
  5. A missed meal raises revisioned Household strain once per meal window. A later successful meal reduces strain and retains recovery as the current Household reason.
  6. Newly formed Households use the existing physical pantry at their shared residence instead of creating an unbound or abstract reserve.
  7. Runtime API 1.12 adds pantry quantity, strain, latest care, and pantry Work facts to the bounded family query. The standard package reports reserves and domestic activity without owning them.
  8. Focused household-life, conservation, persistence, replay, query, package, complete-development, release-build, generated-manual, retrieval-index, complete DocForge graph, interactive binding, and graphical proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum G productive work and trade

Activated physical workshop production, wages, Household funding and purchase, one regional merchant shipment, and a detached normal-interface economy view.

Slice record at 7cbcc2ed2bbd

Proof sources
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/resource_economy_tests.cppNamed cases: resource pickup and delivery conserve every registered quantity, resource consumption preserves an explicit accounted sink total, resource capacity usage is exact and limits reject container growth atomically, resource transforms enforce net-positive aggregate limits without partial mutation
  • tests/trade_tests.cppNamed cases: party provisioning and trade obligation move physical conserved cargo, regional scarcity quote becomes a physical trade obligation with failure, expired trade obligation fails and retains already carried cargo, cancelled provisioning releases source cargo without partial transfer, trade state round trips in transit and resumes deterministically
  • tests/world_runtime_tests.cppNamed cases: local movement converts physical rates into deterministic residual progress, road effects improve new route plans without rewriting active travel
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. The completed starter workshop opens one retained Production order for an authored work-tool recipe.
  2. Elsie claims normal Work, walks to the stockpile, carries reserved timber to the workshop, completes both recipe steps, and places the output in business inventory.
  3. Resource moves conserved currency through a business wage, Actor wallet, Household contribution, and atomic priced purchase while retaining exact custody history.
  4. Jory and Iris form one Party. Jory claims distinct Trade pickup and travel tasks, carries two timber through World route travel, and delivers it to the Site 700 stockpile.
  5. Route travel retires obsolete local navigation at the canonical route-origin position so save and replay do not retain disposable pre-route geometry.
  6. Runtime API 1.13 exposes a detached settlement-economy row. The standard package reports workshop, wage, Household purchase, merchant, destination, and delivery facts without owning them.
  7. Focused economy, custody, trade migration, route ownership, persistence, replay, complete-development, release-build, API, generated-manual, retrieval-index, complete DocForge graph, and interactive binding proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum H weather and ecology

Connected current regional weather and renewable-source condition to resident routines, active Work retention, and the normal village interface.

Slice record at 794dd7bc3a5d

Proof sources
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/actor_routine_tests.cppNamed cases: calendar snapshot exposes stable day and clock boundaries, two residents retain different explainable choices in the same routine window, a retained work checkpoint defers a hungry resident's meal, scheduled breaks and social time release an ordinary work commitment
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. World Environment and Ecology remain authoritative for regional weather, pressure, wildlife, and renewable-source quantities.
  2. Actor derives one regional routine context from current World facts and retains a distinct sheltering or ecological-conservation reason.
  3. Uncommitted residents stop taking new outdoor work during hazardous weather or depleted renewable conditions and use normal Household routine travel to return home.
  4. Active Work claims remain protected from automatic focus replacement until their current physical cargo or route commitment reaches an existing scheduler checkpoint.
  5. Runtime API 1.14 exposes one detached settlement-environment row. The standard package reports weather, pressure, response, outdoor-work availability, wildlife, and renewable availability without owning them.
  6. Focused routine, trade, supply, social, persistence, replay, complete-development, release-build, API, generated-manual, retrieval-index, complete DocForge graph, and interactive binding proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum I environmental disruption and recovery

Added bounded weather-driven Household strain, safe-weather recovery, persistence, and a detached normal-interface Household resilience view.

Slice record at 5dffc08831c0

Proof sources
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/phase17_relationship_household_tests.cppNamed cases: household formation changes a later autonomous partner care decision
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. World Environment remains authoritative for current regional weather and its fixed update cadence.
  2. At one hazardous weather epoch, App requests one bounded environmental strain contribution from each Household that does not already retain one.
  3. Household retains total strain, the environmental contribution, revision, tick, and a distinct disruption reason. Meal care can reduce only non-environmental strain.
  4. At the next safe weather epoch, App requests removal of the exact environmental contribution through a distinct retained Household recovery reason.
  5. Household schema 8 persists the contribution. Previous supported schemas restore with a zero contribution and do not invent disruption.
  6. Runtime API 1.15 extends the detached settlement-environment row with stable, disrupted, and recovering Household condition, affected counts, and total environmental strain.
  7. The standard package reports Household resilience without owning World or Household state.
  8. Focused environment, meal, persistence, replay, complete-development, release-build, API, generated-manual, retrieval-index, complete DocForge graph, and interactive binding proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum J autonomous vocation and recurring economy

Replaced fixed starter performers and transaction identities with validated recurring production and trade opportunities, bounded resident selection, owner-issued identities, and replacement after worker loss.

Slice record at e5f4ea8c66d9

Proof sources
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/production_tests.cppNamed cases: production completes a multi-step accounted transform through Work and inventory, production reserves building service and consumes visible maintenance, production schema one migrates without inventing economic costs, production rejects completion atomically when output capacity is unavailable, production cancellation releases Work and retains carried inputs exactly once
  • tests/trade_tests.cppNamed cases: party provisioning and trade obligation move physical conserved cargo, regional scarcity quote becomes a physical trade obligation with failure, expired trade obligation fails and retains already carried cargo, cancelled provisioning releases source cargo without partial transfer, trade state round trips in transit and resumes deterministically
  • tests/resource_economy_tests.cppNamed cases: resource pickup and delivery conserve every registered quantity, resource consumption preserves an explicit accounted sink total, resource capacity usage is exact and limits reject container growth atomically, resource transforms enforce net-positive aggregate limits without partial mutation
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. The settlement definition owns validated production and trade opportunities with cadence, opportunity, Actor, and mutation budgets plus stable references to registered owner and content identities.
  2. App derives eligible current residents from Actor routine and capability, Work commitments, Resource availability, route facts, and the existing job-preference reasoner; authored opportunities never name a performer.
  3. Production, Trade, and Resource issue monotonic order, shipment, and custody-transfer identities. Durable causal markers make retries resolve through owner state instead of caller-selected numbers.
  4. Production and trade repeat while authored demand remains and retain physical input, output, cargo, wage, Household contribution, purchase, and delivery conservation through existing owners.
  5. Worker death, emigration, or settlement departure cancels the affected chain only at an existing safe checkpoint, releases its Work and Resource commitments, and permits another eligible resident to continue.
  6. Runtime API 1.16 exposes opportunity keys, recurring cycle counts, current workers and stages, generic quantities, and exact blockage. The standard package owns no economy state.
  7. Multiple cycles, two seeds, worker replacement, save and restore, same-seed replay, complete development, API, manual, DocForge graph, and interactive binding proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum K household viability and recurring demography

Added validated recurring demography policy, bounded owner-composed family and migration transitions, conserved inheritance, expedition exclusions, and detached population-pressure inspection.

Slice record at 58d64d8e5098

Proof sources
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/phase17_relationship_household_tests.cppNamed cases: household formation changes a later autonomous partner care decision
  • tests/phase17_life_transition_tests.cppNamed cases: life stages end in one conserved death and inheritance transition
  • tests/phase17_generational_closure_tests.cppNamed cases: living emigration releases current work and preserves identity and property, representative generations remain bounded and deterministic across multiple years
  • tests/phase18_expedition_preparation_tests.cppNamed cases: Phase 18A prepares one physical knowledge-safe scouting Party atomically, Phase 18A rejects stale or unavailable facts without partial mutation, Phase 18A preparation is idempotent persistent and bounded
  • tests/phase18_expedition_travel_tests.cppNamed cases: Phase 18B departs through normal Party travel and consumes one physical provision, Phase 18B establishes one field camp and retains only directly observed knowledge, Phase 18B rejects stale departure and premature or stale camp without partial mutation, Phase 18C observes one weather disruption and retains one camp predator incident, Phase 18C rolls back stale knowledge and a failed deep predator selection, Phase 18D retains pursuit, retreat, treatment, extraction, and failed objectives, Phase 18D rejects stale or unavailable field decisions without partial mutation
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. The settlement definition owns validated demography cadence, eligibility, pressure, capacity, and rotating-budget policy without naming Actor or Household identities.
  2. App evaluates deterministic named rotating windows and composes bounded Actor, Relationship, Household, Resource, Work, Settlement, World, Party, control-authority, and reputation owner transactions.
  3. Actor owns monotonic identity, life stage, lineage, migration, and death facts. Relationship owns partnerships. Household owns formation, residence, membership, separation, and retained evidence.
  4. Births, immigration, pressure emigration, ageing death, and inheritance consume current food, housing, relationship, household, custody, and settlement facts. Resource conserves every inherited quantity.
  5. Party-controlled expedition actors are ineligible for partnership, separation, birth-parent selection, emigration, and death until Party lifecycle releases them.
  6. Runtime API 1.17 exposes detached population, Household, partnership, dependant, life-event, food, housing, and blocked-growth facts. The standard package owns no demography state.
  7. Recurring-life, expedition regression, save and restore, same-seed replay, complete development, release, API, manual, DocForge graph, and interactive binding proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life correction C1 individual cadence and complete recurring travel

Added data-authored personal routine cadence, recurring-worker rotation, completed merchant return travel, and detached cadence inspection.

Slice record at 583434126b27

Proof sources
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/actor_routine_tests.cppNamed cases: calendar snapshot exposes stable day and clock boundaries, two residents retain different explainable choices in the same routine window, a retained work checkpoint defers a hungry resident's meal, scheduled breaks and social time release an ordinary work commitment
  • tests/production_tests.cppNamed cases: production completes a multi-step accounted transform through Work and inventory, production reserves building service and consumes visible maintenance, production schema one migrates without inventing economic costs, production rejects completion atomically when output capacity is unavailable, production cancellation releases Work and retains carried inputs exactly once
  • tests/trade_tests.cppNamed cases: party provisioning and trade obligation move physical conserved cargo, regional scarcity quote becomes a physical trade obligation with failure, expired trade obligation fails and retains already carried cargo, cancelled provisioning releases source cargo without partial transfer, trade state round trips in transit and resumes deterministically
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. The settlement definition owns bounded routine windows, personal timing limits, daily variation, and recent-worker scoring policy without naming Actor identities.
  2. Actor derives one stable personal cadence and deterministic daily variation while needs, current condition, and retained commitments remain authoritative overrides.
  3. Production and Trade apply authored recent-worker scoring before stable identity tie-breaking, so recurring opportunities rotate through eligible residents.
  4. A completed Trade delivery disbands its Party and starts the merchant's normal Actor and World route back to the source settlement.
  5. Remote residents remain ineligible for demographic departure until World records their physical return.
  6. Runtime API 1.18 exposes detached routine cadence. The standard package reports early or late tendency without owning Actor state.
  7. Routine, recurring economy, complete merchant return, emigration cleanup, persistence, replay, complete development, API, manual, DocForge graph, and interactive binding proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum L1 authored land areas and crop contracts

Added reusable crop and land-use definitions, revisioned irregular World land areas, persistence, detached queries, inspection, and ground presentation.

Slice record at 7dee5a5bae40

Proof sources
  • tests/content_catalog_tests.cppNamed cases: required content catalog loads immutable canonically ordered definitions, content catalog rejects malformed and order-derived identities transactionally, content catalog rejects duplicate definitions and missing references transactionally, content catalog footprint keys retain one canonical cell definition, content catalog validates land uses and crops as immutable referenced definitions
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites
  • tests/ground_terrain_tests.cppNamed cases: resident World terrain composes into detached ordered chunks, camera culling submits only visible resident terrain cells
  • tests/sdl_asset_tests.cppNamed cases: SDL translates run-control and additive-selection keys
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. The runtime content catalog validates reusable land-use and crop definitions, crop permission, compatible land-use identities, and harvest Resource references.
  2. World owns stable irregular connected non-overlapping cell areas, land cover, preparation, fertility, moisture, depletion, crop lifecycle, revision, and causal ticks.
  3. Revision-checked World mutation previews reject stale or contradictory conditions before the authoritative state changes.
  4. Current saves retain complete area state. Supported older World schemas migrate without inventing land areas.
  5. The starter settlement authors one growing barley field and one pasture as individual cells. Render and Tools consume detached World facts without retaining a second land model.
  6. Runtime API 1.19 exposes bounded paged land-cell rows in stable area and cell order with an optional exact-area filter.
  7. Land, catalog, persistence, terrain, query, complete development, API, manual, DocForge graph, and interactive binding proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life correction C2 inter-site traveler presentation

Classified active regional route travelers outside the local Actor render and selection snapshot while retaining World route progress and Actor plans.

Slice record at e438609b6de1

Proof sources
  • tests/actor_state_tests.cppNamed cases: actor candidates are canonical and join Phase 1 world state without owning it, actor candidates enforce the scenario live-population boundary exactly, actor owner applies revision-checked hydration relief, invalid actor candidates leave a retained actor runtime unchanged, actor render composition joins Actor identity to World position without changing heat
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner

Cross-owner flow

  1. World remains authoritative for exact inter-Site route progress, route status, Heat position, and arrival.
  2. Actor retains the merchant's trade and return plans without a presentation-specific transition or identity branch.
  3. App derives local render membership from detached Actor and World facts and classifies every non-arrived synthetic route traveler as in transit.
  4. Render receives no local proxy, sprite, or selectable for that regional traveler. Tools reports the detached in-transit work count.
  5. Focused composition and starter merchant regression, complete development, manual, DocForge graph, interactive binding, and live graphical proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life correction C3 moving-beneficiary supply handoff

Added bounded same-task Actor target refresh for moving food and water beneficiaries, persisted scheduler evidence, and protected remote returning residents from emigration selection.

Slice record at aa9cf03bc8d4

Proof sources
  • tests/actor_plan_tests.cppNamed cases: exact job targets use local navigation before work becomes ready, route arrival starts exact local navigation for a remote job, route and local arrival reconciliation visit one mover in a twenty thousand Actor world, exact job travel cancels and restarts through plan lifecycle transitions, routine home movement reaches an exact local residence position, completed routine movement replaces stale local navigation with its exact arrival, ready jobs can replace a stale local target without changing work identity
  • tests/phase3_economy_state_tests.cppNamed cases: construction scheduler rejects overflowing retained counter sums, Phase 3 replay reproduces claim transfer delivery and construction completion, Phase 3 schema 11 migrates construction work ticks to fixed-point work units, Phase 3 schema 12 maps every legacy building function to a stable definition, Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary, construction scheduler schema six initializes replacement scan evidence, construction schema seven migrates an unknown failure without inventing a cause, construction work rate preserves fractional progress across scheduler partitions, construction capability fit handles signed habit bias without unsigned wrap, Phase 3 schema 18 initializes moving-beneficiary handoff evidence
  • tests/settlement_supply_scheduler_tests.cppNamed cases: bounded settlement supply scheduler selects and claims one authored supply transactionally, settlement supply scheduler gives every actor a bounded window before cycling supplies, food need re-entry completes a second owned cycle without duplicating resources, settlement supply scheduler preflight rejection preserves every gameplay owner
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner

Cross-owner flow

  1. Settlement Supply detects that a retained food or water worker is ready at an outdated beneficiary position and requests one same-task target refresh inside the normal execution budget.
  2. Actor validates the same active Job and Work task, advances its plan revision, retains the task identity, and asks World to replace local movement to the current reachable position.
  3. Work and Resource retain the original claim, lifecycle, custody, quantities, and conservation while the handoff target changes.
  4. Phase 3 schema 19 and settlement-supply-scheduler schema 6 persist target-refresh visits, commits, rejects, deferrals, and last-update evidence. Supported previous schemas migrate with neutral refresh history.
  5. The starter Finn regression completes the retained delivery after Cora moves. Integrated village-economy proof also requires a regional resident to return before demographic departure can select them.
  6. Focused owner, persistence, starter, complete development, manual, DocForge graph, interactive binding, and live graphical proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum L2 physical land conversion

Added revisioned clearing and preparation through bounded Construction-owned conversion progress and existing Work, Actor, World, and Resource owners.

Slice record at 8b6f6699d2b4

Proof sources
  • tests/land_conversion_tests.cppNamed cases: residents clear and prepare retained land through physical owner transactions, cancellation releases a land conversion without mutating World land
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/phase3_economy_state_tests.cppNamed cases: construction scheduler rejects overflowing retained counter sums, Phase 3 replay reproduces claim transfer delivery and construction completion, Phase 3 schema 11 migrates construction work ticks to fixed-point work units, Phase 3 schema 12 maps every legacy building function to a stable definition, Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary, construction scheduler schema six initializes replacement scan evidence, construction schema seven migrates an unknown failure without inventing a cause, construction work rate preserves fractional progress across scheduler partitions, construction capability fit handles signed habit bias without unsigned wrap, Phase 3 schema 18 initializes moving-beneficiary handoff evidence
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. The authored economy designates one revision-checked conversion against an existing irregular World land area and physical Resource containers.
  2. Construction retains clearing and preparation stage progress while a saved bounded scheduler visits rotating conversion and Actor windows.
  3. Work retains the four-task claim and handoff graph. Actor and World retain exact pickup and land travel.
  4. Resource moves one physical tool through stockpile, carrier, land input, and land output custody and creates only the authored clearing and preparation by-products.
  5. World changes cover and preparation only after the complete owner transaction succeeds. Cancellation and worker loss use retained checkpoints without inventing progress.
  6. Runtime API 1.19 reports detached conversion stage, worker, completed work, and required work alongside World land facts.
  7. Owner, cancellation, persistence, starter, household-regression, complete-development, manual, DocForge graph, and interactive binding proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum L3 conserved crop cycle

Added separate physical sowing, tending, growth, and harvest stages with conserved seed, reusable tools, crop output, by-products, handoff, and persistence.

Slice record at 08ac4fb029a5

Proof sources
  • tests/farming_tests.cppNamed cases: residents sow tend and harvest one conserved physical crop cycle, authored environmental thresholds fail and recover a crop without invented output, authored weather changes conserved harvest quantity deterministically, settlement food need can reopen a stored conserved crop cycle, cold settlement farming retains bounded shortage evidence without an Actor
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/phase3_economy_state_tests.cppNamed cases: construction scheduler rejects overflowing retained counter sums, Phase 3 replay reproduces claim transfer delivery and construction completion, Phase 3 schema 11 migrates construction work ticks to fixed-point work units, Phase 3 schema 12 maps every legacy building function to a stable definition, Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary, construction scheduler schema six initializes replacement scan evidence, construction schema seven migrates an unknown failure without inventing a cause, construction work rate preserves fractional progress across scheduler partitions, construction capability fit handles signed habit bias without unsigned wrap, Phase 3 schema 18 initializes moving-beneficiary handoff evidence
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World

Cross-owner flow

  1. Farming designates one stable crop cycle against prepared World land and creates its Work graph through the Work owner.
  2. Available residents claim separate sowing, tending, and harvest stages through current Actor capability and routine eligibility.
  3. Resource moves physical seed and a reusable tool through stockpile, carrier, land input, and land output custody and creates only the authored crop and by-product bundles.
  4. World advances the crop lifecycle only after the matching physical owner transaction succeeds. Growth intervals and worker handoffs remain retained between stages.
  5. Current saves retain Farming state and bounded scheduler cursors, budgets, counters, and owner references. Runtime API 1.19 reports the detached cycle stage, worker, work, and growth facts.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum L4 weather fertility failure and recovery

Added deterministic crop forecasts from Environment, Ecology, and World soil facts, scaled conserved harvest, crop failure, soil cost, and fallow recovery.

Slice record at fdba6a787994

Proof sources
  • tests/farming_tests.cppNamed cases: residents sow tend and harvest one conserved physical crop cycle, authored environmental thresholds fail and recover a crop without invented output, authored weather changes conserved harvest quantity deterministically, settlement food need can reopen a stored conserved crop cycle, cold settlement farming retains bounded shortage evidence without an Actor
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/phase3_economy_state_tests.cppNamed cases: construction scheduler rejects overflowing retained counter sums, Phase 3 replay reproduces claim transfer delivery and construction completion, Phase 3 schema 11 migrates construction work ticks to fixed-point work units, Phase 3 schema 12 maps every legacy building function to a stable definition, Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary, construction scheduler schema six initializes replacement scan evidence, construction schema seven migrates an unknown failure without inventing a cause, construction work rate preserves fractional progress across scheduler partitions, construction capability fit handles signed habit bias without unsigned wrap, Phase 3 schema 18 initializes moving-beneficiary handoff evidence
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World

Cross-owner flow

  1. Environment supplies season, weather, biome, and regional pressure; Ecology supplies current population pressure; World supplies fertility, moisture, and depletion.
  2. Farming applies one validated authored policy to those current facts and retains the deterministic forecast, yield, outcome, and direct reason.
  3. Resource scales successful crop and by-product output through the forecast while preserving accounting. Failed crops produce no invented harvest.
  4. World retains harvest soil costs or failed crop condition and applies authored fallow recovery before the cycle closes.
  5. Runtime API 1.19 reports detached outcome, yield, reason, and completed-cycle facts. Environmental, failure, persistence, complete-development, manual, DocForge graph, and interactive binding proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum M1 persistent local infrastructure

Added retained local road, fence, and gate geometry, complete irregular land dedication, validation, persistence, and detached inspection.

Slice record at 1275da389cd7

Proof sources
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. World owns stable local infrastructure identity, cell and edge geometry, typed anchors, lifecycle, condition, access policy, revision, and causal ticks.
  2. World dedicates complete connected irregular land areas and retains preferred road or gate access cells without reducing a field to one tile.
  3. Runtime API 1.19 exposes bounded detached infrastructure and dedication facts. Persistence, owner validation, large paging, manual, DocForge, and interactive binding proof pass.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum M2 physical road construction

Added conserved road clearing, hauling, laying, finishing, cancellation, handoff, persistence, and condition-scaled navigation.

Slice record at 937b5a9575f5

Proof sources
  • tests/infrastructure_construction_tests.cppNamed cases: residents build retained road plans through physical owner transactions, cancelling delivered road work restores the plan and every retained input, worker loss retains delivered road progress for a replacement resident, environment and use wear remove road effects at zero condition, repair work restores retained condition and can be cancelled without erasing damage, infrastructure construction stages have stable inspection names
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World

Cross-owner flow

  1. Construction owns retained project stage progress while Work owns tasks, claims, and handoff; Actor and World own travel; Resource owns every physical input.
  2. The bounded scheduler selects current eligible residents and advances authored road work without a scenario or performer identity branch.
  3. Completed World road condition changes the next legal navigation query. Cancellation and worker loss preserve conservation and retained progress.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum M3 fences gates and enclosure

Added physical fence and gate construction around complete irregular fields, owner-derived enclosure, access policy, navigation, persistence, and presentation.

Slice record at 010e36d80ac0

Proof sources
  • tests/infrastructure_construction_tests.cppNamed cases: residents build retained road plans through physical owner transactions, cancelling delivered road work restores the plan and every retained input, worker loss retains delivered road progress for a replacement resident, environment and use wear remove road effects at zero condition, repair work restores retained condition and can be cancelled without erasing damage, infrastructure construction stages have stable inspection names
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites
  • tests/ground_terrain_tests.cppNamed cases: resident World terrain composes into detached ordered chunks, camera culling submits only visible resident terrain cells
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World

Cross-owner flow

  1. Construction and Work build the complete authored edge boundary and gate through the same physical owner path as roads.
  2. World derives enclosure, field access, and blocked edges from current operational geometry, condition, and referenced access policy.
  3. Render consumes detached lines. Runtime API 1.19 exposes enclosure and revision-checked gate-policy direction without owning either fact.
0 attributed contract changes
  • No contract-function attribution yet.
phase.19 · historical implementation slice

#Village Life addendum M4 maintenance decay and autonomous extension

Added bounded condition loss, loss of broken infrastructure effects, explainable settlement repair and extension choice, conserved physical repair, persistence, and Lua control.

Slice record at 5465f065d55a

Proof sources
  • tests/infrastructure_construction_tests.cppNamed cases: residents build retained road plans through physical owner transactions, cancelling delivered road work restores the plan and every retained input, worker loss retains delivered road progress for a replacement resident, environment and use wear remove road effects at zero condition, repair work restores retained condition and can be cancelled without erasing damage, infrastructure construction stages have stable inspection names
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
  • tests/phase3_economy_state_tests.cppNamed cases: construction scheduler rejects overflowing retained counter sums, Phase 3 replay reproduces claim transfer delivery and construction completion, Phase 3 schema 11 migrates construction work ticks to fixed-point work units, Phase 3 schema 12 maps every legacy building function to a stable definition, Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary, construction scheduler schema six initializes replacement scan evidence, construction schema seven migrates an unknown failure without inventing a cause, construction work rate preserves fractional progress across scheduler partitions, construction capability fit handles signed habit bias without unsigned wrap, Phase 3 schema 18 initializes moving-beneficiary handoff evidence
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
  • tests/script_query_service_tests.cppNamed cases: script query catalog registers complete read-only API descriptors, script queries enforce bounded pages and package budgets before owner access, script queries return detached owner facts without mutating the runtime, script queries route implemented domain facts through their authoritative owners, script queries distinguish missing filters, cold data, and unopened capabilities, script land query pages stable irregular cells without mutating World
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root

Cross-owner flow

  1. Environment and current local use supply bounded condition pressure; World owns the resulting condition and immediately removes broken navigation or enclosure effects.
  2. Settlement evaluates authored material, labor, route, field, and condition policy and retains one explainable repair or extension decision.
  3. Construction, Work, Actor, World, and Resource execute the selected build or repair through their existing physical ownership and conservation boundaries.
  4. Runtime API 1.19 exposes detached maintenance evidence and revision-checked directed work; the infrastructure-control guide documents the complete owner-routed Lua surface.
0 attributed contract changes
  • No contract-function attribution yet.

Attributed contract functions

Contract function · authoritative mutation

#game::ConstructionRuntime::ApplyBuildProgress

Applies bounded whole work units and a validated fixed-point remainder through the Construction owner, then coordinates exact Work completion and Resource consumption when the authored requirement is met.

Current owner
Construction runtime
Current source
src/game/construction.cpp:923
Development history
Proof sources
  • tests/construction_tests.cppNamed cases: construction consumes delivered material only after bounded build progress, interrupted construction releases its worker and resumes without losing material or work, interrupted construction times out with its delivered material and cause retained, construction rejects tick-zero blockage evidence without creating invalid state
Contract function · state validation

#game::ValidateConstructionWorkSchedulerState

Validates scheduler policy, cadence, retained counters, and last-update evidence without consulting or mutating domain owners.

Current owner
Construction work scheduler
Current source
src/game/construction_work_scheduler.cpp:429
Development history
Proof sources
  • tests/phase3_economy_state_tests.cppNamed cases: construction scheduler rejects overflowing retained counter sums, Phase 3 replay reproduces claim transfer delivery and construction completion, Phase 3 schema 11 migrates construction work ticks to fixed-point work units, Phase 3 schema 12 maps every legacy building function to a stable definition, Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary, construction scheduler schema six initializes replacement scan evidence, construction schema seven migrates an unknown failure without inventing a cause, construction work rate preserves fractional progress across scheduler partitions, construction capability fit handles signed habit bias without unsigned wrap, Phase 3 schema 18 initializes moving-beneficiary handoff evidence
Contract function · bounded coordination

#game::AdvanceConstructionWorkScheduler

Runs one due bounded scheduling update from supplied settlement-scoped worker and spatial indexes, claims work, moves exact project materials, derives capability-sensitive labor, distinguishes direct-control deferral from autonomous interruption, completes bounded replacement scans, reconciles timeout failure, and retains only scheduler cadence, cursors, counters, and result evidence.

Current owner
Construction work scheduler
Current source
src/game/construction_work_scheduler.cpp:494
Development history
Proof sources
  • tests/runtime_phase3_tests.cppNamed cases: authored Phase 3 runtime completes construction and produces reproducible rate evidence, autonomous construction stages survive detached save-load checkpoints
  • tests/runtime_player_attack_tests.cppNamed cases: contextual attack requires an explicit Take Control transition, contextual attack advances on a fixed cadence and applies one bounded injury, direct control defers retained construction work and release resumes it
  • tests/construction_work_scheduler_tests.cppNamed cases: construction execution uses exact stockpile and project positions, construction claim continuation bounds a twenty-thousand Actor population, invalid construction worker reconciliation fails closed without stranding resources, construction worker reconciliation waits a bounded grace period after delivery, construction worker reconciliation assigns a replacement builder before timeout, construction worker recovery completes a bounded late-candidate scan after grace, interrupted construction preempts an ordinary claim continuation
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
Contract function · execution ordering

#app::RuntimeSession::RunWorldTicks

Orders the complete committed-tick composition path while leaving each invoked system responsible for its own mutation and failure rules.

Current owner
Runtime session composition
Current source
src/app/runtime_session.cpp:4124
Development history
Proof sources
  • tests/runtime_phase3_tests.cppNamed cases: authored Phase 3 runtime completes construction and produces reproducible rate evidence, autonomous construction stages survive detached save-load checkpoints
  • tests/runtime_player_attack_tests.cppNamed cases: contextual attack requires an explicit Take Control transition, contextual attack advances on a fixed cadence and applies one bounded injury, direct control defers retained construction work and release resumes it
Contract function · authored policy validation

#game::ValidateRuntimeIncidentCatalog

Canonicalizes and validates authored incident, quest, institution, request, resolver, cross-reference, and content-budget policy before session construction.

Current owner
Incident content catalog
Current source
src/game/runtime_incident_catalog.cpp:268
Development history
Proof sources
  • tests/phase11_content_tests.cppNamed cases: authored incident catalog loads stable metadata and focused resolver IDs, event templates reject unregistered focused outcome resolvers, malformed authored incident catalogs reject before session construction
  • tests/phase11_closure_tests.cppNamed cases: Phase 11 authored catalogs reject before content volume can bypass fixed budgets, Phase 11 surfacing is bounded urgent deterministic and suppresses related chains, Phase 11 neglect failure delegation and success de-escalate through one prompt policy, Phase 11 prompt composition stops at each owner's fixed visit budget, Phase 11 persisted owners regenerate the same bounded presentation after restore
Contract function · authoritative mutation

#game::StructuredQuestRuntime::Transition

Applies one revision-checked legal quest transition, deadline rule, participant change, delegation, or terminal result and appends bounded history.

Current owner
Structured quest lifecycle
Current source
src/game/structured_quest.cpp:422
Development history
Proof sources
  • tests/structured_quest_tests.cppNamed cases: structured rescue lifecycle branches without owning domain state, runtime rescue steps require World knowledge movement and Incident evidence
Contract function · authoritative mutation

#game::InstitutionalRequestRuntime::Resolve

Resolves one accepted formal request from revisioned participant and social evidence and creates an obligation only on validated success.

Current owner
Institutional request lifecycle
Current source
src/game/institutional_request.cpp:374
Development history
Proof sources
  • tests/institutional_request_tests.cppNamed cases: institutional request lifecycle retains formal evidence and obligations, runtime institutional resolution uses Actor and retained social facts
Contract function · causal receipt

#game::StructuredEventConsequenceRuntime::Record

Retains one idempotent causal record per completed quest or institutional obligation after downstream domain owners commit.

Current owner
Structured event consequence ledger
Current source
src/game/structured_event_consequence.cpp:84
Development history
Proof sources
  • tests/structured_event_consequence_tests.cppNamed cases: completed quest applies retained Relationship Memory and World aftermath exactly once, resolved institutional obligation creates normal Trade and Work exactly once, structured event consequence ledger is bounded idempotent and serializable
Contract function · derived bounded presentation

#game::ComposeStructuredEventPresentation

Builds at most eight deterministic prompts under fixed per-owner visit budgets, deadline escalation, terminal de-escalation, and related-chain suppression.

Current owner
Structured event presentation policy
Current source
src/game/structured_event_presentation.cpp:338
Development history
Proof sources
  • tests/phase11_closure_tests.cppNamed cases: Phase 11 authored catalogs reject before content volume can bypass fixed budgets, Phase 11 surfacing is bounded urgent deterministic and suppresses related chains, Phase 11 neglect failure delegation and success de-escalate through one prompt policy, Phase 11 prompt composition stops at each owner's fixed visit budget, Phase 11 persisted owners regenerate the same bounded presentation after restore
Contract function · authoritative state capture

#game::PartyRuntime::CaptureState

Returns canonical durable Party identity, membership, formation, intent, and lifecycle state for persistence and detached validation.

Current owner
Party runtime
Current source
src/game/party.cpp:532
Development history
Proof sources
  • tests/phase12_defense_tests.cppNamed cases: settlement alarm creates one normal guard job and clears it atomically, selected Party uses deterministic line slots through normal exact-ground movement
Contract function · authoritative mutation

#game::SettlementRuntime::RaiseDefense

Applies one revision-checked settlement alarm with severity, tick, and normal guard Work reference.

Current owner
Settlement runtime
Current source
src/game/settlement.cpp:2269
Development history
Proof sources
  • tests/phase12_defense_tests.cppNamed cases: settlement alarm creates one normal guard job and clears it atomically, selected Party uses deterministic line slots through normal exact-ground movement
Contract function · bounded authoritative summary mutation

#game::FactionRuntime::AdvanceRemoteConflicts

Advances due remote-conflict summaries in stable cursor order under a fixed visit budget and records exact deferral evidence.

Current owner
Faction runtime
Current source
src/game/faction.cpp:521
Development history
Proof sources
  • tests/phase12_faction_tests.cppNamed cases: bounded rival strategy applies hard gates before fixed point preference, faction state persists its references cadence and complete strategic trace, faction raid composes authoritative loss defense alarm and social aftermath, remote conflicts advance in stable bounded batches and persist their cursor
Contract function · metadata validation and registration

#app::ScriptApiRegistry::Register

Validates one complete symbol descriptor against stable IDs, namespace, schema, ownership, version, deprecation, error, and source rules before inserting it atomically.

Current owner
Script API registry
Current source
src/app/script_api_registry.cpp:189
Development history
Proof sources
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root
Contract function · post-commit fact publication

#app::ScriptEventService::Publish

Assigns one monotonic sequence to an immutable typed fact after its authoritative owner commits and retains it under the fixed source bound.

Current owner
Script event service
Current source
src/app/script_event_service.cpp:307
Development history
Proof sources
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
Contract function · protected addon event delivery

#app::ScriptPackageHost::DispatchEvents

Drains a bounded post-commit batch and invokes matching generation-scoped callbacks in deterministic order while containing package faults.

Current owner
Runtime session composition
Current source
src/app/script_package_host.cpp:1873
Development history
Proof sources
  • tests/script_package_host_tests.cppNamed cases: script package host loads first-party and development packages in bounded sandboxes, standard settlement interface renders the retained autonomous project trace, script panels use package-qualified identities and reject local duplicates, script package host rejects instruction, memory, and lifecycle command violations, script package reload atomically preserves compatible host state and last valid graph, repeated script composition and reload remain deterministic and memory bounded, script package host disables repeated faults and bounds diagnostic history, script package recovery rejects stale actions and suppresses hidden surface work, script package safe mode restores standard composition without changing gameplay, runtime contribution faults isolate one package and retain the active provider, script events deliver in order and defer callback commands to a later fixed tick, faulting event handlers are isolated and disabled without stopping the session, event callback memory exhaustion remains a contained package fault, event subscriptions are bounded and successful reloads discard the old generation, event storms drain in deterministic bounded batches, script host API registers query, command, event, and lifecycle contracts, script package host policy excludes development packages from release-style loads
Contract function · deterministic derived export

#app::ScriptApiRegistry::ExportNormalizedJson

Exports registry version, interface layers, package origins, fields, errors, and symbols in byte-stable normalized order.

Current owner
Script API registry
Current source
src/app/script_api_registry.cpp:243
Development history
Proof sources
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root
Contract function · complete registry cross-reference validation

#app::ScriptApiRegistry::ValidateComplete

Rejects a complete candidate registry when any symbol names a missing namespace, missing error, invalid replacement, or wrong referenced kind.

Current owner
Script API registry
Current source
src/app/script_api_registry.cpp:216
Development history
Proof sources
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root
Contract function · runtime catalog composition

#app::BuildRuntimeScriptApiRegistry

Builds one complete runtime catalog from focused API families and returns no partial registry when registration or cross-reference validation fails.

Current owner
Script API registry
Current source
src/app/script_api_catalog.cpp:388
Development history
Proof sources
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root
Contract function · package-root composition

#app::ResolveScriptPackageLayout

Resolves the runtime-local plugins directory from an explicit non-root package path without scanning or mutating the filesystem.

Current owner
Script API registry
Current source
src/app/script_api_registry.cpp:390
Development history
Proof sources
  • tests/script_api_registry_tests.cppNamed cases: Script API registry defines the three interface authority layers, Script API registry rejects malformed and duplicate symbols, Script API normalized export is stable across registration order, Runtime Script API catalog is complete and matches the committed reference export, Complete Script API validation rejects missing namespaces and errors, Script package layout places plugins at the explicit package root
Contract function · atomic runtime tuning mutation

#app::RuntimeTuningService::Apply

Validates one revision-checked bounded patch completely, then commits its sorted changes and advances the owner revision once.

Current owner
Runtime tuning service
Current source
src/app/runtime_tuning_service.cpp:93
Development history
Proof sources
  • tests/runtime_tests.cppNamed cases: runtime command queue preserves stamped order, fixed step time scaling preserves tick equations and frame partition equivalence, runtime tuning patches validate atomically and advance one revision, runtime scenario capacity policy loads authored v2 limits and defaults legacy v1
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
Contract function · active-only physical movement advancement

#sim::WorldLocalNavigation::AdvanceToTick

Advances only the ordered active-mover index through integer physical distance, capability modifiers, and a persisted fractional remainder; terminal records leave active work and each newly arrived stable ID enters the bounded pending-arrival queue once.

Current owner
World runtime
Current source
src/sim/world_local_navigation.cpp:924
Development history
Proof sources
  • tests/world_runtime_tests.cppNamed cases: local movement converts physical rates into deterministic residual progress, road effects improve new route plans without rewriting active travel
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites
  • tests/runtime_player_move_tests.cppNamed cases: contextual movement requires an explicit Take Control transition, contextual move requires direct control and advances one Actor through World positions, contextual move rejects empty or partial Party recipients without partial mutation
  • tests/world_substrate_tests.cppNamed cases: movement tick work excludes twenty thousand retained terminal records, route travel uses physical distance actor capability and live movement tuning, route advancement preserves physical rate crossings and fractional ETA, route preview evaluates only the reachable physical path, traveler overflow rejects world advancement before region mutation, arrived route progress can be atomically replaced by a later trip, invalid substrate candidates leave a retained runtime unchanged
  • tests/actor_plan_tests.cppNamed cases: exact job targets use local navigation before work becomes ready, route arrival starts exact local navigation for a remote job, route and local arrival reconciliation visit one mover in a twenty thousand Actor world, exact job travel cancels and restarts through plan lifecycle transitions, routine home movement reaches an exact local residence position, completed routine movement replaces stale local navigation with its exact arrival, ready jobs can replace a stale local target without changing work identity
Contract function · atomic scenario capacity mutation

#app::ScenarioCapacityPolicyService::Apply

Validates one revision-checked policy patch against technical ceilings and observed live use, then commits all changed limits under one new revision or retains the prior state.

Current owner
Scenario capacity policy
Current source
src/app/scenario_capacity_policy_service.cpp:67
Development history
Proof sources
  • tests/scenario_capacity_policy_tests.cppNamed cases: scenario capacity policy validates balance policy below immutable technical ceilings, scenario capacity policy patches are revisioned and detached, scenario capacity policy rejects stale and below-use changes atomically, scenario capacity policy restore rejects state below observed use
  • tests/foundation_serialization_tests.cppNamed cases: Phase 0 foundation state round trips and continues deterministically, foundation schema 21 restores default tuning and an empty time-scale remainder, foundation schema 22 migrates tuning schema 1 with the default movement rate, foundation schema 24 restores default scenario capacity policy, foundation preserves pending script commands and schema 26 migrates an empty service
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
Contract function · cross-owner capacity validation

#app::RuntimeSession::ApplyCapacityPolicyPatch

Applies a detached scenario-policy candidate, validates the retained Resource owner against the candidate limits, and replaces policy state only after every check passes.

Current owner
Scenario capacity policy
Current source
src/app/runtime_session.cpp:2185
Development history
Proof sources
  • tests/foundation_serialization_tests.cppNamed cases: Phase 0 foundation state round trips and continues deterministically, foundation schema 21 restores default tuning and an empty time-scale remainder, foundation schema 22 migrates tuning schema 1 with the default movement rate, foundation schema 24 restores default scenario capacity policy, foundation preserves pending script commands and schema 26 migrates an empty service
  • tests/script_command_service_tests.cppNamed cases: script command and event catalogs register typed post-commit contracts, script event service rejects unregistered and malformed facts without partial retention, normal script commands execute at the requested fixed tick through ControlAuthority, restricted commands require an engine-created development origin, script command validation and owner rejection cannot publish completion events, script command queues, histories, and replay evidence remain bounded and ordered, development tuning commands commit through the tuning owner and publish facts, development capacity commands commit through the policy owner and publish facts, capacity commands produce identical state transcripts and event facts, capacity commands reject limits below current use without state or event mutation
  • tests/runtime_player_command_tests.cppNamed cases: player command forms a Party from the two embodied authored Actors, player command snapshot promotes explicit Party formation and control, a controlled leader forms a directly movable Party, Party control summary reports and repairs a crisis-overridden follower, Party inventory provisioning respects the scenario storage limit atomically, rejected Party formation does not retain provisioned member inventory
  • tests/phase7_closure_tests.cppNamed cases: Phase 7 player construction expansion save and replay use one ownership path, settlement construction respects the scenario storage limit atomically, Phase 7 foundation schema loads the previous save without inventing Settlement state, Phase 7 player upgrade uses Settlement Construction Work and Resource owners, Phase 7 active maintenance survives save and cancellation reconciles every owner
Contract function · authoritative bounded container creation

#game::ResourceEconomyRuntime::CreateContainer

Validates owner identity, capacity, initial quantities, and detached scenario limits before committing one inventory container and advancing its stable ID.

Current owner
Resource economy
Current source
src/game/resource_economy.cpp:251
Development history
Proof sources
  • tests/resource_economy_tests.cppNamed cases: resource pickup and delivery conserve every registered quantity, resource consumption preserves an explicit accounted sink total, resource capacity usage is exact and limits reject container growth atomically, resource transforms enforce net-positive aggregate limits without partial mutation
  • tests/runtime_player_command_tests.cppNamed cases: player command forms a Party from the two embodied authored Actors, player command snapshot promotes explicit Party formation and control, a controlled leader forms a directly movable Party, Party control summary reports and repairs a crisis-overridden follower, Party inventory provisioning respects the scenario storage limit atomically, rejected Party formation does not retain provisioned member inventory
  • tests/phase7_closure_tests.cppNamed cases: Phase 7 player construction expansion save and replay use one ownership path, settlement construction respects the scenario storage limit atomically, Phase 7 foundation schema loads the previous save without inventing Settlement state, Phase 7 player upgrade uses Settlement Construction Work and Resource owners, Phase 7 active maintenance survives save and cancellation reconciles every owner
Contract function · authoritative bounded resource transformation

#game::ResourceEconomyRuntime::Transform

Prevalidates one atomic input-to-output transformation, including net live-resource growth against the supplied scenario limit, before replacing any Resource state.

Current owner
Resource economy
Current source
src/game/resource_economy.cpp:1105
Development history
Proof sources
  • tests/resource_economy_tests.cppNamed cases: resource pickup and delivery conserve every registered quantity, resource consumption preserves an explicit accounted sink total, resource capacity usage is exact and limits reject container growth atomically, resource transforms enforce net-positive aggregate limits without partial mutation
  • tests/production_tests.cppNamed cases: production completes a multi-step accounted transform through Work and inventory, production reserves building service and consumes visible maintenance, production schema one migrates without inventing economic costs, production rejects completion atomically when output capacity is unavailable, production cancellation releases Work and retains carried inputs exactly once
Contract function · bounded actor candidate construction

#game::BuildActorRuntimeCandidate

Canonicalizes detached Actor state and rejects candidates whose live population exceeds the scenario limit or whose total record count exceeds the technical engine ceiling.

Current owner
Actor runtime
Current source
src/game/actor_state.cpp:1015
Development history
Proof sources
  • tests/actor_state_tests.cppNamed cases: actor candidates are canonical and join Phase 1 world state without owning it, actor candidates enforce the scenario live-population boundary exactly, actor owner applies revision-checked hydration relief, invalid actor candidates leave a retained actor runtime unchanged, actor render composition joins Actor identity to World position without changing heat
  • tests/foundation_serialization_tests.cppNamed cases: Phase 0 foundation state round trips and continues deterministically, foundation schema 21 restores default tuning and an empty time-scale remainder, foundation schema 22 migrates tuning schema 1 with the default movement rate, foundation schema 24 restores default scenario capacity policy, foundation preserves pending script commands and schema 26 migrates an empty service
Contract function · transactional immutable catalog construction

#assets::ParseRuntimeContentCatalog

Parses one detached schema-1 catalog candidate, canonicalizes six definition families, validates every stable identity, bound, resolver, bundle, footprint, and cross-reference, and returns one shared immutable catalog only after complete success.

Current owner
Runtime content catalog
Current source
src/assets/runtime_content_catalog.cpp:869
Development history
Proof sources
  • tests/content_catalog_tests.cppNamed cases: required content catalog loads immutable canonically ordered definitions, content catalog rejects malformed and order-derived identities transactionally, content catalog rejects duplicate definitions and missing references transactionally, content catalog footprint keys retain one canonical cell definition, content catalog validates land uses and crops as immutable referenced definitions
  • tests/asset_tests.cppNamed cases: asset service loads and caches immutable project data
Contract function · cross-catalog authored economy validation

#game::ValidateRuntimeEconomyContentReferences

Validates authored economy resource, building, recipe, bundle, source-stockpile, material, consumer, and capacity references against one immutable content catalog before runtime owner creation.

Current owner
Runtime content catalog
Current source
src/game/runtime_economy.cpp:501
Development history
Proof sources
  • tests/runtime_economy_tests.cppNamed cases: authored economy schema 11 loads stable catalog instance references, authored economy definition rejects invalid runtime relationships, economy content validation resolves resources, buildings, recipes, and materials, legacy economy schemas reject with a catalog migration diagnostic, economy schema 17 defaults every authored construction to site preparation, economy schema 18 validates established construction stage and worker pairs
  • tests/runtime_session_candidate_tests.cppNamed cases: new session candidate loads every authored owner before construction, saved session candidate validates authored identity before restoring state, missing saved session fails without constructing a partial candidate, saved session candidate exposes backup recovery feedback
Contract function · catalog-aware transactional session composition

#app::LoadRuntimeSessionCandidate

Loads the required content catalog before dependent authored and saved state, validates stable references and owner candidates, and returns a complete session candidate without mutating the active session.

Current owner
Runtime session composition
Current source
src/app/runtime_session_candidate.cpp:33
Development history
Proof sources
  • tests/runtime_tests.cppNamed cases: runtime command queue preserves stamped order, fixed step time scaling preserves tick equations and frame partition equivalence, runtime tuning patches validate atomically and advance one revision, runtime scenario capacity policy loads authored v2 limits and defaults legacy v1
  • tests/runtime_session_candidate_tests.cppNamed cases: new session candidate loads every authored owner before construction, saved session candidate validates authored identity before restoring state, missing saved session fails without constructing a partial candidate, saved session candidate exposes backup recovery feedback
  • tests/foundation_serialization_tests.cppNamed cases: Phase 0 foundation state round trips and continues deterministically, foundation schema 21 restores default tuning and an empty time-scale remainder, foundation schema 22 migrates tuning schema 1 with the default movement rate, foundation schema 24 restores default scenario capacity policy, foundation preserves pending script commands and schema 26 migrates an empty service
Contract function · catalog-driven player building composition

#app::ApplyRuntimePlayerSettlementAction

Resolves a requested or retained building-definition ID through the immutable catalog, builds one bounded Construction and Settlement request, and commits only through the existing owner transaction.

Current owner
Runtime session composition
Current source
src/app/runtime_player_settlement_action.cpp:279
Development history
Proof sources
  • tests/phase7_closure_tests.cppNamed cases: Phase 7 player construction expansion save and replay use one ownership path, settlement construction respects the scenario storage limit atomically, Phase 7 foundation schema loads the previous save without inventing Settlement state, Phase 7 player upgrade uses Settlement Construction Work and Resource owners, Phase 7 active maintenance survives save and cancellation reconciles every owner
  • tests/runtime_player_command_tests.cppNamed cases: player command forms a Party from the two embodied authored Actors, player command snapshot promotes explicit Party formation and control, a controlled leader forms a directly movable Party, Party control summary reports and repairs a crisis-overridden follower, Party inventory provisioning respects the scenario storage limit atomically, rejected Party formation does not retain provisioned member inventory
  • tests/phase0_replay_tests.cppNamed cases: phase0-foundation records serializes and replays every current command path, foundation replay records delayed tuning and capacity commands through the script owner, settlement replay commands retain stable building definition identity
Contract function · transactional physical route planning

#sim::WorldSubstrate::PreviewRouteTravel

Plans one bounded route from authored physical segment distances and validated movement and infrastructure policy, returning exact retained progress without mutating World.

Current owner
World runtime
Current source
src/sim/world_route_progress.cpp:21
Development history
Proof sources
  • tests/world_substrate_tests.cppNamed cases: movement tick work excludes twenty thousand retained terminal records, route travel uses physical distance actor capability and live movement tuning, route advancement preserves physical rate crossings and fractional ETA, route preview evaluates only the reachable physical path, traveler overflow rejects world advancement before region mutation, arrived route progress can be atomically replaced by a later trip, invalid substrate candidates leave a retained runtime unchanged
  • tests/world_runtime_tests.cppNamed cases: local movement converts physical rates into deterministic residual progress, road effects improve new route plans without rewriting active travel
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites
  • tests/world_topology_tests.cppNamed cases: world grid maps meter positions through aligned cells into half-open chunks, topology construction validates all stable spatial references transactionally, route queries use lowest cost and stable segment-id tie breaking
Contract function · atomic world substrate advancement

#sim::WorldSubstrate::AdvanceToTick

Preflights regional updates and physical traveler progress completely, then commits both candidate families atomically at one exact target tick.

Current owner
World runtime
Current source
src/sim/world_substrate_advance.cpp:253
Development history
Proof sources
  • tests/world_substrate_tests.cppNamed cases: movement tick work excludes twenty thousand retained terminal records, route travel uses physical distance actor capability and live movement tuning, route advancement preserves physical rate crossings and fractional ETA, route preview evaluates only the reachable physical path, traveler overflow rejects world advancement before region mutation, arrived route progress can be atomically replaced by a later trip, invalid substrate candidates leave a retained runtime unchanged
  • tests/world_runtime_tests.cppNamed cases: local movement converts physical rates into deterministic residual progress, road effects improve new route plans without rewriting active travel
  • tests/world_runtime_state_tests.cppNamed cases: world state is canonical across equivalent authoring order, schema ten route durations migrate to physical distance progress, schema ten road timing migrates to physical distance and proportional progress, invalid world state never mutates a retained runtime, restored local movement rejects spatial contradictions transactionally, World owns connected retained land areas with revision checked mutation, World land schema 2 migrates without inventing controlling Sites
Contract function · bounded deterministic traversal

#game::SettlementSupplyRuntime::SupplyIdWindow

Returns at most the requested number of canonical Supply IDs from one validated circular start index, together with exact continuation and wrap evidence, without copying supply state or retaining a scheduler cursor.

Current owner
Settlement supply runtime
Current source
src/game/settlement_supply.cpp:1262
Development history
  • introduced Phase 16B food and water life — Added canonical bounded Supply traversal for scheduler claim, execution, reentry, alert, and worker-reconciliation work.
Proof sources
  • tests/settlement_supply_tests.cppNamed cases: food supply moves accounted stock and relieves hunger only after consumption, food supply cancellation in transit reconciles ownership exactly once, completed food supply creates one preflighted successor with explicit lineage
  • tests/settlement_supply_scheduler_tests.cppNamed cases: bounded settlement supply scheduler selects and claims one authored supply transactionally, settlement supply scheduler gives every actor a bounded window before cycling supplies, food need re-entry completes a second owned cycle without duplicating resources, settlement supply scheduler preflight rejection preserves every gameplay owner
Contract function · bounded cross-owner coordination

#game::AdvanceSettlementSupplyScheduler

Runs one due food, water, or material-supply update from supplied canonical worker and spatial indexes, spends declared visit and Actor-evaluation budgets, rotates nested Actor and Supply windows fairly, and commits accepted actions only through existing owners.

Current owner
Settlement supply scheduler
Current source
src/game/settlement_supply_scheduler.cpp:517
Development history
  • extended Phase 16B food and water life — Generalized the bounded food loop to food and water, added exact-local execution, and proved cross-pair continuation without a complete candidate matrix.
  • extended Phase 16C material and construction life — Added material supply as a terminal stockpile delivery with no beneficiary, consumption, or need mutation.
Proof sources
  • tests/settlement_supply_scheduler_tests.cppNamed cases: bounded settlement supply scheduler selects and claims one authored supply transactionally, settlement supply scheduler gives every actor a bounded window before cycling supplies, food need re-entry completes a second owned cycle without duplicating resources, settlement supply scheduler preflight rejection preserves every gameplay owner
  • tests/settlement_spatial_supply_tests.cppNamed cases: food supply follows exact source and stockpile positions without losing resources, water supply uses the same exact movement and conservation path, lost worker eligibility cancels exact movement and releases supply ownership, a blocked exact source path raises the retained blocked-route alert
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
Contract function · derived cache validation and replacement

#app::SettlementWorkCompositionCache::Refresh

Returns the retained bounded resident-worker and spatial-anchor composition when its cadence and source revisions remain valid, otherwise rebuilds the complete derived value before replacement.

Current owner
Settlement work composition
Current source
src/app/settlement_work_composition.cpp:51
Development history
  • introduced Phase 16B food and water life — Added one non-serialized settlement-work composition refreshed only at its declared cadence and source invalidation seams.
Proof sources
  • tests/settlement_work_composition_tests.cppNamed cases: settlement work composition produces bounded deterministic actor and anchor indexes, settlement work composition cache refreshes only at its authoritative seams, settlement work composition rejects missing actors and invalid local anchors, settlement work composition retains authored anchors when no resident is eligible, economy-scoped settlement work excludes unrelated large Actor populations
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
Contract function · authoritative need mutation

#game::ActorRuntime::ApplyNeedRelief

Applies one revision-checked bounded hunger or hydration relief to the exact Actor after the supplying Resource transaction commits, without owning or inferring consumed quantities.

Current owner
Actor runtime
Current source
src/game/actor_need_relief.cpp:79
Development history
  • extended Phase 16B food and water life — Generalized need relief so retained food and water supply chains use the same revision-checked Actor mutation path.
Proof sources
  • tests/actor_state_tests.cppNamed cases: actor candidates are canonical and join Phase 1 world state without owning it, actor candidates enforce the scenario live-population boundary exactly, actor owner applies revision-checked hydration relief, invalid actor candidates leave a retained actor runtime unchanged, actor render composition joins Actor identity to World position without changing heat
  • tests/settlement_supply_tests.cppNamed cases: food supply moves accounted stock and relieves hunger only after consumption, food supply cancellation in transit reconciles ownership exactly once, completed food supply creates one preflighted successor with explicit lineage
Contract function · restore-time cross-owner composition

#app::HydratePendingActorArrivals

Performs one canonical restored-Actor pass, selects active plans whose matching World movement already arrived, and asks World to rebuild its derived ordered pending-arrival queues before session activation.

Current owner
Runtime session composition
Current source
src/app/runtime_arrival_hydration.cpp:10
Development history
  • introduced Phase 16B food and water life — Rebuilt non-serialized pending arrival queues from validated restored Actor plans and World movement records.
Proof sources
  • tests/actor_plan_tests.cppNamed cases: exact job targets use local navigation before work becomes ready, route arrival starts exact local navigation for a remote job, route and local arrival reconciliation visit one mover in a twenty thousand Actor world, exact job travel cancels and restarts through plan lifecycle transitions, routine home movement reaches an exact local residence position, completed routine movement replaces stale local navigation with its exact arrival, ready jobs can replace a stale local target without changing work identity
  • tests/phase16_settlement_content_tests.cppNamed cases: Phase 16A starter settlement content resolves every authored identity, Phase 16A starter settlement composes households, settlement, and embodied villagers, Phase 16A starter settlement survives the real save-candidate restore path, named starter villagers compete deterministically for bounded settlement supply work, Phase 16B exact-local supply survives an active save and deterministic replay, starter villagers derive and complete a needed facility through spatial growth, Phase 16C active construction survives save restore and deterministic replay, authored project placements still resolve canonical buildings and world cells, starter villagers follow a visible work-to-home day through save and restore, inter-site merchants do not render as local wandering pedestrians, moving need beneficiaries cannot strand the retained supply worker, Phase 19M starter settlement dedicates whole fields and connects meaningful anchors, Phase 19Q5C2A derives live starter housing parcels without an authored winner
Contract function · derived arrival-index hydration

#sim::WorldRuntime::HydratePendingActorArrivals

Validates sorted unique arrived route and exact-local IDs against authoritative World movement records, then queues them without acknowledging completion or changing movement history.

Current owner
World runtime
Current source
src/sim/world_runtime.cpp:727
Development history
Proof sources
  • tests/world_runtime_tests.cppNamed cases: local movement converts physical rates into deterministic residual progress, road effects improve new route plans without rewriting active travel
  • tests/actor_plan_tests.cppNamed cases: exact job targets use local navigation before work becomes ready, route arrival starts exact local navigation for a remote job, route and local arrival reconciliation visit one mover in a twenty thousand Actor world, exact job travel cancels and restarts through plan lifecycle transitions, routine home movement reaches an exact local residence position, completed routine movement replaces stale local navigation with its exact arrival, ready jobs can replace a stale local target without changing work identity
Contract function · detached command composition

#app::RuntimeSession::CapturePlayerCommandSnapshot

Filters inspected IDs through Actor ownership, retains that Actor-only inspection set, and derives a separate canonical command-recipient set that expands any active Party member to the complete Party.

Current owner
Runtime session composition
Current source
src/app/runtime_player_command_snapshot.cpp:97
Development history
Proof sources
  • tests/runtime_player_command_tests.cppNamed cases: player command forms a Party from the two embodied authored Actors, player command snapshot promotes explicit Party formation and control, a controlled leader forms a directly movable Party, Party control summary reports and repairs a crisis-overridden follower, Party inventory provisioning respects the scenario storage limit atomically, rejected Party formation does not retain provisioned member inventory
  • tests/selection_tests.cppNamed cases: selection controls map pointer action state without SDL details, actor-aware marquee excludes props while direct clicks can inspect them
Contract function · authoritative interruption mutation

#game::ConstructionRuntime::RecordWorkerInterruption

Releases one assigned autonomous build through Work, preserves delivered material and completed progress, and retains Construction-owned interruption blockage and timing.

Current owner
Construction runtime
Current source
src/game/construction.cpp:991
Development history
Proof sources
  • tests/construction_tests.cppNamed cases: construction consumes delivered material only after bounded build progress, interrupted construction releases its worker and resumes without losing material or work, interrupted construction times out with its delivered material and cause retained, construction rejects tick-zero blockage evidence without creating invalid state
  • tests/construction_work_scheduler_tests.cppNamed cases: construction execution uses exact stockpile and project positions, construction claim continuation bounds a twenty-thousand Actor population, invalid construction worker reconciliation fails closed without stranding resources, construction worker reconciliation waits a bounded grace period after delivery, construction worker reconciliation assigns a replacement builder before timeout, construction worker recovery completes a bounded late-candidate scan after grace, interrupted construction preempts an ordinary claim continuation
Contract function · authoritative Work handoff

#game::WorkLifecycleRuntime::ReleaseActiveJobForHandoff

Consumes the delivered build reservation, returns the build task to pending, and makes its Job available for replacement while rejecting live player assignments.

Current owner
Work lifecycle
Current source
src/game/work_lifecycle.cpp:1211
Development history
Proof sources
  • tests/construction_tests.cppNamed cases: construction consumes delivered material only after bounded build progress, interrupted construction releases its worker and resumes without losing material or work, interrupted construction times out with its delivered material and cause retained, construction rejects tick-zero blockage evidence without creating invalid state
  • tests/construction_work_scheduler_tests.cppNamed cases: construction execution uses exact stockpile and project positions, construction claim continuation bounds a twenty-thousand Actor population, invalid construction worker reconciliation fails closed without stranding resources, construction worker reconciliation waits a bounded grace period after delivery, construction worker reconciliation assigns a replacement builder before timeout, construction worker recovery completes a bounded late-candidate scan after grace, interrupted construction preempts an ordinary claim continuation
Contract function · authoritative replacement mutation

#game::ConstructionRuntime::ReassignInterruptedWorker

Claims one released build Job and task for an eligible replacement through Work, then clears the Construction blockage and retains reassignment history.

Current owner
Construction runtime
Current source
src/game/construction.cpp:1058
Development history
Proof sources
  • tests/construction_tests.cppNamed cases: construction consumes delivered material only after bounded build progress, interrupted construction releases its worker and resumes without losing material or work, interrupted construction times out with its delivered material and cause retained, construction rejects tick-zero blockage evidence without creating invalid state
  • tests/construction_work_scheduler_tests.cppNamed cases: construction execution uses exact stockpile and project positions, construction claim continuation bounds a twenty-thousand Actor population, invalid construction worker reconciliation fails closed without stranding resources, construction worker reconciliation waits a bounded grace period after delivery, construction worker reconciliation assigns a replacement builder before timeout, construction worker recovery completes a bounded late-candidate scan after grace, interrupted construction preempts an ordinary claim continuation
Contract function · authoritative terminal-outcome mutation

#game::SettlementRuntime::ReconcileProjectOutcome

Validates the exact selected Construction terminal state, retains completed, failed, or abandoned outcome and cause, and schedules the next settlement project evaluation.

Current owner
Settlement runtime
Current source
src/game/settlement.cpp:3807
Development history
Proof sources
  • tests/settlement_tests.cppNamed cases: settlement expansion uses stable topology anchors and bounded indexes, settlement retains bounded autonomous project decisions across cadence and save, settlement reconciles only its selected Construction and reopens project cadence, settlement maintenance uses normal construction work and material ownership, settlement abandonment rejects retained ownership and accepts an empty record
  • tests/runtime_settlement_development_tests.cppNamed cases: Phase 16E selects and designates exactly one bounded settlement project, Phase 16E rejects invalid selected-project Construction bindings on restore, Phase 16E retains no-selection cadence and deterministic selection replay, Phase 16F reconciles a terminal selected project and reopens decision cadence, Phase 19Q5A retains independent household housing pressure without physical mutation, Phase 19Q5B compares durable housing methods without starting physical work, Phase 19Q5C2B selects one explained housing parcel without starting construction, Phase 19Q5C2B proximity budget exhaustion preserves every runtime owner, Phase 19Q5D binds the selected parcel once and reconciles cancellation, Phase 19Q5D completes selected housing and assigns the Household residence, Phase 19Q5D assigns selected shared housing without construction, Phase 19Q5D binds selected extension to the existing Building, Phase 19Q5E starts every housing method for distinct households without player input
System S.1

#App and Composition

Process startup, dependency composition, application/session flow coordination, runtime configuration and front-end entry, the shared runtime session, bounded settlement-work, autonomous-project choice and terminal-outcome composition, the current foundation document, and script API metadata, detached queries, typed commands, events, and sandboxed Lua packages.

Owner

Process startup, dependency composition, application/session flow coordination, runtime configuration and front-end entry, the shared runtime session, bounded settlement-work, autonomous-project choice and terminal-outcome composition, the current foundation document, and script API metadata, detached queries, typed commands, events, and sandboxed Lua packages.

Dependencies

Assets, core, controls, game, simulation, developer tools, and the selected platform/render backends. App composes these modules but does not replace their ownership.

Authoritative state

ApplicationFlowController owns only transient lifecycle state, ordered requests, pending transition state, and result diagnostics. RuntimeSession owns session composition, the loaded scenario, one shared immutable content-catalog lifetime, ECS world, and fixed-step scheduler and retains optional domain owners for one run without taking their mutation rules. SettlementWorkCompositionCache retains only the current bounded derived eligible-worker and spatial-anchor indexes and their source revisions; it has no save authority. ScriptApiRegistry owns versioned script-facing metadata and deterministic export without owning API implementations or simulation values. ScriptQueryService validates and routes bounded read-only requests into detached results without retaining owner state. ScriptCommandService owns bounded request ordering, receipts, and transcripts while existing domain owners retain mutation authority. ScriptEventService owns the bounded immutable post-commit event stream without owning publisher behavior. ScriptPackageHost owns validated package discovery, one bounded disposable Lua state per package, lifecycle ordering, generation-scoped event subscriptions, host-created caller identity, generation checks, fault isolation, detached diagnostics, safe-mode composition, and one bounded process-local performance monitor without save or gameplay authority. Phase0FoundationState is detached state without mutation authority. Executable entry points own process-local services and the frame loop.

Execution path

  1. The application-flow legality table defines the complete state and reason pairs. The controller assigns stable request sequence numbers, accepts at most one pending transition, and changes current state only when the composition owner reports successful completion or explicitly contains a failure.
  2. A failed pending operation normally leaves the previous committed lifecycle state unchanged. Atomic containment records real and injected composition failures and enters faulted. Both direct-launch roots use the controller, clean session input and commands before release, publish a detached graphical inspection snapshot, and expose the same five deterministic developer failure seams. The controller owns no resource or callback.
  3. Graphical startup parses options, opens the manifest, loads configuration and presentation assets, initializes SDL/audio/rendering and the developer overlay, and enters the configured default scenario only after the front end returns a start intent. The App-owned graphical front-end loop observes detached lifecycle presentation and returns intent; the graphical composition root alone requests and commits the corresponding lifecycle transition.
  4. Explicit graphical direct launch bypasses the front end only for automated and developer runs. Headless startup retains its required direct scenario path.
  5. The graphical composition root captures the initial foundation and camera after viewport startup. It filters developer-UI-captured input, applies validated run control, queues keyboard and inspector requests through the existing command owner, and then performs camera, selection, and presentation work.
  6. Phase 13D composes detached Actor selection and player-action results into the production Quick Start view. Contextual move state changes become retained text feedback before rendering; the UI does not execute or repair the order.
  7. Phase 16D routes standard-interface work assignment, durable Job priority, cancellation, construction designation, and construction cancellation through typed script commands into focused App adapters. Work, Construction, Resource, Settlement, Actor, and World validate and mutate their own records; command receipts and events report only committed results or owner rejection.
  8. Phase 16E composes one bounded settlement-project snapshot from current Settlement, Construction, Resource, World, and catalog facts. The pure Game reasoner returns a detached fixed-point decision trace. App either records an explained no-selection result through Settlement or commits one selected decision, Construction project, Work graph, Resource containers, and Settlement building membership as one transaction.
  9. Phase 16F keeps interruption and recovery in the existing owners. Actor supplies the authoritative plan interruption, Construction releases the autonomous builder through Work and retains the blocked site, and the bounded construction scheduler searches the supplied settlement worker index for a replacement. App neither decides the deadline nor edits claims, progress, materials, or failure state.
  10. Phase 16G closes the starter settlement without adding an App-owned gameplay model. App composes content-owned residence benefits, Construction condition, World access distance, Settlement stockpile identities, Resource quantities, and detached Building presentation facts. Restore hydrates completed-building blockers before resuming movement, and packaged proof exercises the same owner graph.
  11. RuntimeAudioCueRouter scans bounded detached settlement, Actor, Work, and Supply facts after committed ticks, maps at most one current fact per cue kind to catalog-declared semantic IDs, and applies per-kind cooldowns. It owns only disposable presentation history; audio never changes fixed-tick decisions, saves, replay, Work, needs, or alerts.
  12. For graphical presentation, App joins the current Actor stable-ID index to World-owned heat positions. It emits only focused and warm read-only render and selection proxies. Phase 13A derives directional walking presentation from current World local-navigation or route progress. Village Life O1 supplies the Actor-owned stable appearance-generation key as the disposable variation input. The derived snapshot has no save or mutation authority.
  13. ComposeResidentWorldLandscape joins World-owned resident feature and cluster facts to Assets-owned immutable appearance families. It maps the stable World variation input through weighted validated frames and emits depth-ordered detached render positions. ComposeResidentGroundTerrain derives crop, land-preparation, road-condition, fence, and gate layers from current World facts. Neither composition has save, placement, atlas-validation, or lifecycle authority. DesignateLandscapeWork, ClaimLandscapeWork, HarvestLandscapeWork, DeliverLandscapeWork, and CancelLandscapeWork compose revision-checked Assets, World, Ecology, Work, Actor, and Resource operations without retaining a parallel transaction state. world.landscape.features exposes lifecycle policy, kind, stage, maturity, renewal, placement, revision, and variation facts as bounded detached Lua rows without exposing an atlas or selected frame as simulation truth.
  14. Every scheduler tick committed by normal frame advancement, paused single-step, or bounded fast-forward runs the ordered ECS systems exactly once through RuntimeSession.
  15. After each committed tick, RuntimeSession advances the existing World and Actor owners, drains bounded World-owned route and exact-local arrival queues, then invokes the optional food and construction schedulers. After Construction advances, App reconciles a terminal selected project into Settlement through the exact current Construction record. An authored settlement whose cadence is due may then evaluate its bounded project candidates and designate at most one normal Construction project. Normal arrival reconciliation therefore visits pending arrivals rather than retained terminal movement history. During candidate load and restore, HydratePendingActorArrivals performs one canonical Actor-state pass to reconstruct those derived, non-serialized World queues before the session becomes active. For authored settlements, App rebuilds one bounded resident-worker and owner-keyed source, storage, carrier, and consumer composition at most once when supply, construction, land conversion, farming, local infrastructure, or recurring village production and trade reaches its cadence, then shares it across that tick's consumers. Settlement, topology, local-navigation, explicit heat-transition, and restore seams also invalidate it. Invalid supply-worker reconciliation still runs only when the food-work cadence is due. The cache is never serialized. The legacy economy path derives only Actors with carried-inventory containers rather than scanning the world population. The schedulers coordinate bounded claim, exact movement, collection, hauling, delivery, consumption, build, worker replacement, and timeout failure transactions through existing owners.
  16. The same ordered tick path derives Phase 4 suppression from ControlAuthority, reconciles Party and player-move arrival, advances bounded attack execution, processes assignment orders, reconciles released authority, and evaluates the retained Intersection schedule. Focused App adapters compose cross-owner requests; the Game owners retain their own facts and transition rules.
  17. Completed wildlife and traveler-dispute transactions call the focused incident-memory adapter. It validates retained incident, Intersection, and Actor identities, converts the outcome into one request per witness, and commits the candidate Memory owner only when every request succeeds. RuntimeSession retains and orders the owners but contains no memory validation, decay, disclosure, or retention rules.
  18. RuntimeSession constructs empty Relationship and Household owners from the current Actor identity set, retains their detached state, validates their Actor bindings and ticks, and delegates rebuilds to their Game owners. It contains no relationship values, membership rules, strain rules, or update policy.
  19. RuntimeSession constructs and retains a separate Reputation owner, supplies current Actor and Household identities during rebuild, and validates evidence against resolved Incident and issued Memory history. It does not score, create, or update reputation. Accepted evidence remains valid after active Memory expiry only when durable Memory history and the never-reused identity high-water mark support it.
  20. The focused wildlife-reputation adapter recomputes one completed resolved wildlife outcome from retained Intersection activation facts, validates one active exact witness Memory and its audience Household, then creates or revision-updates a candidate Reputation owner. Its version 1 policy changes only bravery: 400 basis points for an uninjured participant or 600 for the injured participant. RuntimeSession checks the current tick and owner availability and exposes the narrow call; it does not own the policy or Reputation mutation rules.
  21. The focused traveler-dispute relationship adapter reconstructs one completed resolved dispute, requires the exact two participants and durable direct-witness receipts for both, and creates or expected-revision-updates one candidate Relationship owner. Its version 1 policy records bounded agreement or conflict deltas. Accepted source Incident evidence makes repeats no-ops after save/load or Memory expiry. RuntimeSession checks the current tick and owner availability; it does not own relationship values, evidence, bounds, or update rules.
  22. The starter settlement social composer pairs only residents taking the same current social outing, limits each resident to one retained encounter per day through Memory receipts, and prefers an available non-estranged retained relationship before a new stable pair. It completes a typed social Incident, applies one candidate Relationship change, creates exact witnessed Memory for both participants, and asks Actor to relieve companionship pressure. Candidate owners commit only after every preview succeeds. App retains no separate social history or relationship value.
  23. The focused wildlife-household adapter reconstructs one completed resolved injury, requires the exact injured Actor to be a current Household member with direct-witness history, and expected-revision-updates one candidate Household owner. Its version 1 policy adds 750 strain without inferring provider status. Source Incident evidence makes repeats no-ops. RuntimeSession checks current tick and owner availability; it does not own membership, strain, evidence, or update rules.
  24. The focused wildlife learned-tendency adapter reconstructs one completed resolved injury, validates the exact injured Actor, route segment, Actor revision, and durable direct-witness history, then asks a candidate Actor owner to reinforce safety focus by 500 basis points. Source Incident and route evidence makes repeats no-ops. RuntimeSession checks current tick and owner availability; Actor owns tendency values, bounds, revisions, evidence, and mutation.
  25. App builds bounded Memory, Reputation, Relationship, and Household snapshots only for Actors due for focus evaluation. It revalidates source revisions before passing sorted inputs to Actor; derived inputs have no save authority.
  26. The focused Household consequence ledger joins one resolved wildlife Incident and Intersection, the injured Actor's durable witness receipt and optional active Memory, the exact Household evidence, and the next scheduled IAUS trace. It rebuilds from current owners, rejects stale links, and has no save or mutation authority.
  27. Phase 5 inspection captures constant-time owner metrics, one bounded selected-Actor consequence snapshot, and the latest valid Household causal ledger only while diagnostics are visible. It does not capture complete owner state, retain a parallel history, or add a mutation path.
  28. RuntimeSession advances Phase 8 World environment and ecology through the existing World tick. A focused composition step applies scoped environment and ecology observations after renewable discovery or direct watchtower coverage, then replaces only the candidate Observer Knowledge value after complete validation.
  29. LoadRuntimeSessionCandidate loads the required content catalog before dependent economy data, validates every authored stable reference, and retains the shared immutable catalog only after the complete session candidate succeeds.
  30. HydratePendingActorArrivals reconstructs World's derived route and local arrival queues from a restored Actor candidate and matching arrived World records. It runs only during session candidate construction or restore, reports the number of Actor records visited, and does not acknowledge arrivals or mutate Actor state.
  31. BuildSettlementWorkComposition validates authored residents and inventory anchors against current Settlement membership, Actor, topology, chunk, WorldGrid, local-navigation, and heat facts, then returns sorted derived indexes. This includes adult arrivals and excludes born children until adulthood. SettlementWorkCompositionCache retains that disposable result between consuming scheduler cadences while source revisions remain current; the next due consumer or source invalidation requires one complete bounded rebuild. Neither value enters save authority.
  32. Any settlement with an authored demographic policy evaluates recurring life-course decisions after routine travel and social interaction. App rotates through the policy's Household, Relationship, and Actor visit windows, stops at its mutation budget, and composes partnership, separation, Household formation, birth, immigration, living emigration, age death, and inheritance only through candidate copies of the existing owners. Birth and immigration require capacity in the specific Household residence before any owner changes, then create the Actor-owned versioned appearance record from the same authored population policy and an explicit deterministic generation key; birth selects each retained trait from one of the two parents. An Actor in an active Party is ineligible for a demographic transition until that Party lifecycle releases the Actor. App retains no family, population, housing, or appearance authority. The family, life-event, demography, and Actor queries derive detached current facts from the owning state and immutable policy.
  33. RuntimeSession resolves catalog resource, building, and recipe definitions once during session composition and retains separate Construction, Production, Trade, and Regional Economy owners. Restore validates their complete detached candidates against the installed catalog and current Work, Resource, and Party owners before replacing any live state.
  34. ApplyRuntimePlayerSettlementAction resolves a selected building-definition ID through the retained catalog and passes its footprint, materials, work, capacity, and closed function classification into existing owner transactions. App does not retain a second definition.
  35. AdvanceRuntimeSettlementDevelopment first checks whether the selected Construction reached a terminal stage. ReconcileSettlementProjectOutcome rejects stale or forged Construction copies, then lets Settlement retain the exact completed, failed, or abandoned outcome and reopen its cadence. When due, development reads one active settlement's canonical members, buildings, stockpiles, authored candidates, current construction occupancy, local reachability, available materials, and construction tuning. It records exact owner-visit counts, gives the reasoner fixed candidate and consideration budgets, and never retains an App-owned planning state. DesignateSettlementConstruction validates the selected Construction binding and commits candidate copies of Settlement, Construction, Work, and Resource only after every owner accepts.
  36. AdvanceRuntimeSettlementNeeds composes bounded immutable current facts from Settlement membership, Actor life stage and commitments, Resource custody and capacity, Construction buildings and condition, Work claims, Relationship compatibility, and World access. Pure Game reasoners produce needs, per-Household pressure, repair, extension, shared-residence, or new-construction method alternatives, and one settlement-wide exact parcel choice when a selected new-construction method requires it. World derives complete physical candidates; App adds current service, neighboring-use, material, labor, control, travel, and policy facts under explicit budgets; Settlement alone retains the ledgers, selections, rejection reasons, histories, and source revisions. App performs no land, housing, Resource, Work, Building, World, or residence mutation. AdvanceRuntimeSettlementGoals maps the newest retained need strengths plus authored opportunity and ambition availability into the definition-owned candidate policy, asks the pure Game reasoner for a compatible bounded portfolio, and submits it through revision-checked Settlement authority. Neither App path creates execution work or retains a parallel planning state.
  37. AdvanceRuntimeSettlementHousing visits retained executions and selected methods under authored budgets. It refreshes current Settlement facts before each start, revalidates the selected Household, current shared-residence occupancy, and exact World parcel, and commits candidate copies only after Household, Construction, Work, Resource, and Settlement accept the complete transaction. Shared residence uses Household directly. Repair and extension use Construction renewal. New housing uses normal designation and assigns the completed Building through Household during terminal reconciliation. App retains no second physical housing state.
  38. AdvanceRuntimeSettlementSpatialGrowth reconciles active retained spatial executions with their authoritative physical owners before the next authored cadence. When due, it derives bounded current anchors and descriptive proximity clusters, evaluates every authored service method, retains the complete Settlement portfolio, and starts at most one selected road, gate, fence, facility, or field transaction through the existing World, Infrastructure Construction, Building Construction, Land, Resource, and Work owners. The three settlement spatial queries and standard village panel expose detached strategy and owner-binding evidence without retaining or mutating simulation state.
  39. The focused household-memory adapter reads one witnessed Memory and one indexed Household, filters recipients through Memory-owned durable knowledge receipts, checks explicit household, recipient, and mutation budgets, then commits one candidate Memory transaction. Reports retain 75% of the source's current effective intensity and record the source MemoryId and reporting Actor. RuntimeSession only checks the current request tick and owner availability.
  40. The app-owned SDL presentation composition loads logo, font, optional grass image, optional Actor atlas metadata, and every distinct image referenced by the atlas appearance family through AssetService. Present-but-invalid grass or sprite content fails validation; any absent optional sprite-family input preserves procedural Actor rendering. Scenario reset clears the asset cache and transactionally replaces decoded presentation resources through the existing render service.
  41. The graphical frame loop applies production presentation requests such as reduced motion through the render service. Interface scale and panel visibility remain transient UI state and have no gameplay or save authority.
  42. After each presented frame, App records wall duration, process CPU duration, optional platform-reported resident memory, and the process-local frame sequence. The monitor always retains at most 120 current samples. One package may own a bounded 1-36,000-sample logging session; stopping or reaching capacity retains constant-time min/average/max aggregates and paged immutable samples until the next session starts.
  43. Headless startup uses the same manifest, catalog, scenario, authored-scene, runtime session, scheduler, and result paths without SDL or rendering. Phase 13C adds a headless-only content-validation option that constructs the complete normal session, reports exact accepted owner and catalog-definition counts, and exits before ticking; it does not duplicate loaders, validators, schemas, or gameplay mutation.
  44. Configuration and option parsers return explicit result objects. Entry points map failures to stable process exit codes.
  45. The script API registry accepts only complete stable descriptors, rejects malformed, future-version, duplicate, and unresolved cross-reference contracts without partial registration, and exports interface layers, package origins, and all 239 runtime symbols in deterministic order. The App-owned catalog is the source for the packaged registry exporter and external API Reference. The explicit package layout resolves plugins/ from a supplied package root without touching the filesystem or loading code.
  46. The script query service accepts only registered query IDs and exact filters, applies pagination, result, and owner-visit budgets, routes reads through current RuntimeSession and domain-owner accessors, and validates every detached record against the registered field schema. Missing gameplay capabilities return explicit errors; the service does not invent values, activate cold state, retain owner references, or execute Lua.
  47. The script command service validates host-created origins and exact registered arguments, consumes bounded submission budgets, queues at most 128 requests, and dispatches due work at fixed simulation ticks. Take Control, Release Control, restricted Crisis Override, money contribution, Work assignment, Work cancellation, durable Job priority, Construction designation, and Construction cancellation call focused RuntimeSession transactions and their existing domain owners. The service records bounded ordered receipts and transcripts, then asks the event service to publish immutable completion facts only after an owner commits.
  48. The script event service assigns stable monotonic sequence numbers and retains at most 256 immutable events. The package host drains at most 64 events per frame boundary and delivers at most 64 matching callbacks per package in event, dependency, and subscription order. Source expiry is diagnosed. events.listen and events.ignore create only package- and generation-scoped callback identities; reload destroys the old Lua registry references.
  49. Every Lua callback runs through a protected call with instruction, memory, query, command, event, and composition bounds. Every C++ host function exposed to Lua has an exception-containment trampoline. Event handler errors do not stop later packages or the fixed-tick session; three repeated faults disable only the offender and rebuild a valid interface composition.
  50. The script package host validates exact manifests, package-local declared files, API ranges, dependency order, versioned settings, lifecycle names, and UI composition before creating one Lua state per package. Each state omits OS, I/O, package loading, debug, dynamic code loading, and native modules; memory and instruction use are bounded. Lifecycle and composition callbacks cannot submit commands. Active standard packages receive normal commands, active development packages also receive restricted commands, and every caller origin is created by the host.
  51. F10 asks App to reload at a safe frame boundary through a Controls-owned logical action. App captures only explicit host state, constructs and initializes a complete candidate graph, restores compatible settings, provider selection, visibility, layout keys, and current selection, composes every non-recovery surface as proof, then swaps generations atomically. Candidate failure records the exact error and leaves the old Lua states and completed interface active.
  52. Every completed composition and action carries the current host generation. A stale action rejects before callback dispatch or command submission. Hidden surfaces skip callbacks and record the suppressed work.
  53. App records bounded per-package and per-surface work. Three repeated failures disable only the offending package or contribution, rebuild the nearest valid composition, and retain unrelated providers and extensions.
  54. Safe Mode disables development packages and restores standard provider selection, visibility, and layout. Restore Standard Interface reapplies the same standard composition policy without changing simulation state. Reload constructs a fresh validated graph and exits Safe Mode only after the candidate succeeds.
  55. The UI composition registry validates stable surface, slot, fallback, accessibility, and contribution contracts. It resolves providers and extensions in dependency and stable package order, requires explicit replacement selection, rejects unresolved conflicts transactionally, and never permits a package to replace or hide the compiled recovery surface.
  56. Active package composition records a bounded detached ScriptUiIntentBuffer. Panels, text, value rows, buttons, progress, tooltips, menus, typed theme constraints, scale-aware anchors, semantic labels, roles, state, and focus order contain no backend objects. Panel IDs are stable within one package and become package-qualified presentation identities before native rendering, preventing independent packages from sharing retained backend window state. Duplicate local IDs in one composition reject. The graphical composition root passes only a completed buffer to the native ImGui consumer. Invalid or over-budget composition leaves the prior output unchanged.
  57. Foundation capture collects detached values from RuntimeSession and RuntimeCommandQueue. App validates cross-owner settings, embeds Simulation's existing ECS document, and coordinates restore only after the complete state validates.

Key types and contracts

  • ApplicationFlowState names bootstrapping, dormant front end, session loading, active session, session leaving, fault, and shutdown states. ApplicationFlowReason makes every legal edge explicit.
  • ApplicationFlowRequest, ApplicationFlowResult, and ApplicationFlowSnapshot are detached values that expose sequence, pending, result, and failure facts without transition authority.
  • RuntimeOptions stores scenario ID, optional seed override, audio policy, help state, explicit direct-launch policy, the headless-only content-validation request, and the optional typed developer failure-injection boundary.
  • ApplicationFlowFailurePoint names only the five migrated composition seams used by deterministic process failure proof.
  • RuntimeConfiguration stores the validated window title, pixel dimensions, and configured default scenario ID.
  • GraphicalFrontEndResult carries only start or shutdown intent back to the graphical composition root. It has no lifecycle or session mutation authority.
  • RuntimeSession is the app-level facade over scenario state, ECS world access, scheduler commands, advancement, metrics, and the final result line.
  • SettlementWorkComposition contains sorted eligible Actor IDs and owner-keyed SettlementSupplySpatialAnchor values derived from authoritative owners. SettlementWorkCompositionCache retains one composition plus its source topology revision, local-navigation revision, and refresh tick; explicit heat transitions and restore clear it, while a consuming scheduler cadence or source-revision change rebuilds it. EconomyScopedSettlementWorkActorsResult provides the bounded legacy fallback.
  • RuntimePlayerCommandSnapshot separates inspected selected_actors from canonical command_recipients; active Party membership expands commands to the complete sorted Party while non-Actor scene selections are excluded.
  • RuntimeSessionState contains the typed scenario, ECS state, fixed-step scheduler, optional World and observer knowledge, Actor state, economy, control, Party, Intersection, scouting, move-order, attack-order, Memory, Reputation, Relationship, Household, and later phase-owned state. Phase0FoundationState adds the pending command queue and its next sequence number.
  • ActorRenderCompositionSnapshot contains only derived render proxies, Actor sprite presentation, selectable footprints, and work counts for the current frame.
  • RuntimeActorConsequenceSnapshot is the bounded owner-fact view; ActorFocusSocialInput is its smaller revisioned scheduled input.
  • RuntimeHouseholdConsequenceLedger is the detached resolved-Incident, witness, Household, and selected-focus chain used for exact validation and later inspection.
  • RuntimePhase5InspectionSnapshot contains constant-time owner counts, declared retention bounds, an optional bounded Actor view, and an optional reconstructed Household ledger.
  • ScriptApiVersion, ScriptApiSymbolDescriptor, ScriptApiFieldDescriptor, ScriptInterfaceLayerDescriptor, and their enums define the normalized metadata vocabulary. ScriptApiRegistry validates and indexes those descriptors by stable ID. ScriptPackageLayout identifies the explicit package root and its plugins/ child without granting load authority.
  • ScriptQueryRequest, ScriptQueryResult, ScriptQueryRecord, and ScriptQueryValue are ordinary detached values. ScriptQueryService owns request validation, routing, stable result shaping, and budgets; queried Game and Simulation services remain authoritative for the facts.
  • RuntimeMoneyContributionRequest carries expected ControlAuthority, Household, and Resource custody revisions. RuntimeMoneyContributionResult reports only the Resource-owned transaction and post-commit balances. RuntimeSession validates the cross-owner relationship and swaps the Resource candidate only after the complete contribution succeeds.
  • RuntimePlayerWorkActionRequest and its result carry typed assignment, cancellation, or priority intent plus expected owner revisions. RuntimeAudioCueFrame and RuntimeAudioCueRouteResult are bounded detached presentation evidence.
  • RuntimePerformanceMonitor owns only rolling and explicitly logged presentation diagnostics. RuntimePerformanceCurrent, RuntimePerformanceLogSummary, and RuntimePerformanceLogPage are detached values. They never enter fixed-tick decisions, saves, replay hashes, or gameplay commands.
  • ScriptCommandOrigin is created by the host for compiled controls, tools, first-party packages, development packages, or engine callers and carries restricted authority without exposing a script-settable flag. ScriptCommandRequest, ScriptCommandReceipt, and ScriptCommandTranscriptEntry are bounded detached records. ScriptCommandService owns only validation, ordering, timing, reporting, and retention.
  • ScriptEvent, ScriptEventPayload, and ScriptEventValue are immutable detached delivery records. ScriptEventService owns sequence and bounded retention; authoritative owners decide when a committed fact exists.
  • ScriptPackageManifest and its settings and lifecycle records are validated detached package declarations. ScriptPackageHostState contains only a schema version, selected stable IDs, versioned package settings, provider selections, surface visibility, and bounded layout keys. ScriptPackageReloadReport identifies the retained generation and last result. ScriptPackageRuntimeMetrics, ScriptSurfaceRuntimeMetrics, ScriptPackageDiagnosticEvent, and ScriptPackageDiagnosticsSnapshot expose bounded detached evidence. ScriptPackageHost retains disposable package states, generations, event subscriptions, fault counters, and detached reports; none enter foundation serialization. world.query, command.submit, development-only restricted.command.submit, events.listen, events.ignore, and events.after are bounded adapters over the existing native services.
  • UiSurfaceContract, UiSlotContract, UiContribution, and UiCompositionRegistry define stable composition authority without mutable callback patching. ScriptUiIntentBuffer, ScriptUiPanel, ScriptUiWidget, ScriptUiTheme, and ScriptUiLayout are bounded detached presentation records consumed by the active native backend.
  • Foundation serialization result types return either current schema version 28 text or detached state plus an actionable error. Supported older schemas migrate only through their explicit owner-aware paths.
193 source files in this module
1061 indexed function definitions

This is source evidence, not an ownership contract. Rows without an authored note make no behavioral claim.

FunctionKindAuthored note statusSource
IsWorking(const game::ActorState & actor)internal helperInventory only; no authored contract note.src/app/actor_presentation_facts.cpp:12
app::CaptureActorPresentationFacts(const game::ActorState & actor,const sim::SiteId current_site,const sim::WorldRuntime & world,const game::ResourceEconomyRuntime * resources)free functionInventory only; no authored contract note.src/app/actor_presentation_facts.cpp:21
TintForTier(const sim::HeatTier tier)internal helperInventory only; no authored contract note.src/app/actor_render_composition.cpp:15
FacingForDelta(const double delta_x,const double delta_y)internal helperInventory only; no authored contract note.src/app/actor_render_composition.cpp:28
ActivityMarkerFor(const game::ActorState & actor)internal helperInventory only; no authored contract note.src/app/actor_render_composition.cpp:55
IsInsideResidence(const game::ActorState & actor)internal helperInventory only; no authored contract note.src/app/actor_render_composition.cpp:80
SpritePresentationFor(const game::ActorState & actor,const sim::SiteId current_site,const sim::WorldRuntime & world,const game::ResourceEconomyRuntime * resources,std::size_t & fact_visits)internal helperInventory only; no authored contract note.src/app/actor_render_composition.cpp:87
app::CaptureActorRenderComposition(const game::ActorRuntime * actors,const sim::WorldRuntime * world)free functionJoins the Actor stable-ID index to focused or warm World heat positions and emits read-only per-frame render and selection proxies without changing either owner.src/app/actor_render_composition.cpp:175
app::CaptureActorRenderComposition(const game::ActorRuntime * actors,const sim::WorldRuntime * world,const game::ResourceEconomyRuntime * resources)free functionJoins the Actor stable-ID index to focused or warm World heat positions and emits read-only per-frame render and selection proxies without changing either owner.src/app/actor_render_composition.cpp:181
app::ActorRenderCompositionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/actor_render_composition.hpp:49
app::IsLegalApplicationFlowTransition(const ApplicationFlowState from,const ApplicationFlowState to,const ApplicationFlowReason reason)free functionChecks one state, target, and reason against the fixed App-owned lifecycle table without changing controller state.src/app/application_flow.cpp:82
app::ApplicationFlowStateName(const ApplicationFlowState state)free functionReturns the stable inspection label for every application-flow state.src/app/application_flow.cpp:93
app::ApplicationFlowReasonName(const ApplicationFlowReason reason)free functionReturns the stable inspection label for every application-flow transition reason.src/app/application_flow.cpp:113
app::ApplicationFlowResultStatusName(const ApplicationFlowResultStatus status)free functionReturns the stable inspection label for accepted, completed, cancelled, rejected, and failed transition results.src/app/application_flow.cpp:142
app::ApplicationFlowController::RequestTransition(const ApplicationFlowState target,const ApplicationFlowReason reason)methodAssigns the next request sequence, rejects competing or illegal transitions without mutation, and records one valid pending request.src/app/application_flow.cpp:158
app::ApplicationFlowController::CommitPending()methodCommits the pending target only after its composition operation succeeds and records the completed result.src/app/application_flow.cpp:196
app::ApplicationFlowController::CancelPending(std::string detail)methodClears a cancelled pending request, preserves committed lifecycle state, and records the cancellation detail without creating a failure.src/app/application_flow.cpp:213
app::ApplicationFlowController::FailPending(std::string detail)methodRecords failure details, clears the pending request, and preserves the previous committed lifecycle state.src/app/application_flow.cpp:232
app::ApplicationFlowController::ContainFailure(std::string detail)methodAtomically records a pending or ambient lifecycle failure, clears any pending request, and enters the legal faulted state without taking resource ownership.src/app/application_flow.cpp:253
app::ApplicationFlowController::CaptureSnapshot() constmethodCopies current, pending, last-result, last-failure, and next-sequence facts without exposing controller mutation.src/app/application_flow.cpp:287
BuildDiagnostic(const ApplicationFlowFailurePoint point,const ApplicationFlowSnapshot & snapshot)internal helperInventory only; no authored contract note.src/app/application_flow_failure.cpp:15
app::ApplicationFlowFailurePointName(const ApplicationFlowFailurePoint point)free functionReturns the stable command-line and diagnostic name for each current composition failure seam.src/app/application_flow_failure.cpp:43
app::ParseApplicationFlowFailurePoint(const std::string_view name)free functionMaps only the five named lifecycle boundaries to the typed developer failure point.src/app/application_flow_failure.cpp:60
app::ContainApplicationFlowFailure(const ApplicationFlowFailurePoint point,std::string detail,ApplicationFlowController & flow)free functionRoutes a real composition error through atomic controller containment and returns the same stable process diagnostic used by injected failures.src/app/application_flow_failure.cpp:69
app::InjectApplicationFlowFailure(const std::optional<ApplicationFlowFailurePoint> configured_point,const ApplicationFlowFailurePoint boundary,ApplicationFlowController & flow)free functionActivates only at the configured composition seam, asks the controller to contain the deterministic failure, and returns the stable process diagnostic.src/app/application_flow_failure.cpp:83
ValidKey(const std::string_view key)internal helperInventory only; no authored contract note.src/app/construction_tool_use.cpp:10
Reject(const ConstructionToolUseDefinition & definition,const ConstructionToolUseRequest & request,const ConstructionToolUseReason reason,std::string detail)internal helperInventory only; no authored contract note.src/app/construction_tool_use.cpp:18
app::ConstructionToolUseStatusName(const ConstructionToolUseStatus status)free functionInventory only; no authored contract note.src/app/construction_tool_use.cpp:34
app::ConstructionToolUseReasonName(const ConstructionToolUseReason reason)free functionInventory only; no authored contract note.src/app/construction_tool_use.cpp:44
app::ApplyConstructionCompletionTool(const ConstructionToolUseDefinition & definition,const ConstructionToolUseRequest & request,game::ConstructionRuntime & construction,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources)free functionInventory only; no authored contract note.src/app/construction_tool_use.cpp:60
app::ConstructionToolUseResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/construction_tool_use.hpp:51
BuildSession(worldforge::app::RuntimeSessionCandidate & candidate)internal helperInventory only; no authored contract note.src/app/continuity_main.cpp:16
main(const int argc,char ** argv)entry pointInventory only; no authored contract note.src/app/continuity_main.cpp:27
app::WaitForGraphicalFrontEndIntent(const ApplicationFlowController & lifecycle,platform::sdl::SdlRuntime & platform,render::SdlRenderService & renderer,tools::SdlRuntimeInspector & overlay,const GraphicalFrontEndConfiguration configuration)free functionInventory only; no authored contract note.src/app/graphical_front_end.cpp:17
app::PresentGraphicalLoadingFeedback(const ApplicationFlowController & lifecycle,render::SdlRenderService & renderer,tools::SdlRuntimeInspector & overlay,const GraphicalFrontEndConfiguration configuration,std::string & error)free functionInventory only; no authored contract note.src/app/graphical_front_end.cpp:55
ToFeedbackState(const worldforge::tools::PlayerMoveInspectionState state)internal helperInventory only; no authored contract note.src/app/graphical_main.cpp:77
ToFeedbackState(const worldforge::app::RuntimePlayerAttackStatus status)internal helperInventory only; no authored contract note.src/app/graphical_main.cpp:99
main(const int argc,char ** argv)entry pointGraphical composition root. Routes direct loading, session activation, input and command cleanup, reverse-order session release, shutdown, every real error return, and five deterministic failure seams through ApplicationFlowController, and passes one detached lifecycle snapshot into the developer inspector each frame while retaining all existing operation owners.src/app/graphical_main.cpp:117
ContentValidationLine(const std::string_view scenario_id,const worldforge::app::RuntimeSession & session)internal helperInventory only; no authored contract note.src/app/headless_main.cpp:29
main(const int argc,char ** argv)entry pointHeadless composition root. Routes the same direct loading, session activation, queued-command cleanup, reverse-order session release, shutdown, every real error return, and five deterministic failure seams through ApplicationFlowController, with NullAudioService and fixed-tick session resources kept in the nested session scope.src/app/headless_main.cpp:81
SerializationFailure(std::string error)internal helperBuilds a failed foundation serialization result without a partial document.src/app/phase0_foundation_serialization.cpp:41
DeserializationFailure(std::string error)internal helperBuilds a failed foundation deserialization result without partial detached state.src/app/phase0_foundation_serialization.cpp:45
ActorIds(const std::vector<game::ActorState> & actors)internal helperInventory only; no authored contract note.src/app/phase0_foundation_serialization.cpp:49
HouseholdIds(const game::HouseholdRuntimeState & households)internal helperInventory only; no authored contract note.src/app/phase0_foundation_serialization.cpp:58
CommandTypeName(const core::RuntimeCommandType type)internal helperMaps each current runtime command type to its stable schema version 1 name.src/app/phase0_foundation_serialization.cpp:67
ParseCommandType(const std::string_view name)internal helperMaps a saved command name to its typed runtime command and rejects unsupported names.src/app/phase0_foundation_serialization.cpp:81
SerializeScenario(const game::RuntimeScenario & scenario)internal helperWrites the validated scenario name, optional scene reference, fixed step, tick limit, and seed to the foundation document.src/app/phase0_foundation_serialization.cpp:97
SerializeScheduler(const sim::FixedStepSchedulerState & scheduler)internal helperWrites the scheduler's fixed-step position, accumulator, counters, pause state, pending step, diagnostics state, and quit state.src/app/phase0_foundation_serialization.cpp:134
SerializeTuning(const RuntimeTuningState & tuning)internal helperInventory only; no authored contract note.src/app/phase0_foundation_serialization.cpp:152
SerializeCapacityPolicy(const ScenarioCapacityPolicyState & state)internal helperInventory only; no authored contract note.src/app/phase0_foundation_serialization.cpp:160
SerializeScriptCommandValue(const ScriptCommandValue & value)internal helperInventory only; no authored contract note.src/app/phase0_foundation_serialization.cpp:175
SerializeScriptCommandArguments(const ScriptCommandArguments & arguments)internal helperInventory only; no authored contract note.src/app/phase0_foundation_serialization.cpp:196
SerializeScriptCommandOrigin(const ScriptCommandOrigin & origin)internal helperInventory only; no authored contract note.src/app/phase0_foundation_serialization.cpp:206
SerializeScriptCommandService(const ScriptCommandServiceState & state)internal helperInventory only; no authored contract note.src/app/phase0_foundation_serialization.cpp:213
SerializeCommandQueue(const core::RuntimeCommandQueueState & queue)internal helperWrites pending runtime commands in sequence order together with the next sequence number.src/app/phase0_foundation_serialization.cpp:233
ComposePhase3EconomyState(const RuntimePhase3EconomyState & economy,const sim::WorldRuntimeState & world,const std::vector<game::ActorState> & actors,const std::vector<game::ActorFocusSiteBinding> & focus_site_bindings)internal helperInventory only; no authored contract note.src/app/phase0_foundation_serialization.cpp:249
ParseScenario(const nlohmann::json & document)internal helperParses the foundation scenario object into Game's typed runtime scenario without mutating a session.src/app/phase0_foundation_serialization.cpp:273
ParseScheduler(const nlohmann::json & document)internal helperParses the foundation scheduler object into detached Simulation-owned scheduler state.src/app/phase0_foundation_serialization.cpp:328
ParseTuning(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/app/phase0_foundation_serialization.cpp:346
ParseCapacityPolicy(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/app/phase0_foundation_serialization.cpp:362
ParseScriptCommandOrigin(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/app/phase0_foundation_serialization.cpp:382
ParseScriptCommandValue(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/app/phase0_foundation_serialization.cpp:403
ParseScriptCommandArguments(const nlohmann::json & document,ScriptCommandArguments & arguments,std::string & error)internal helperInventory only; no authored contract note.src/app/phase0_foundation_serialization.cpp:427
ParseScriptCommandService(const nlohmann::json & document,ScriptCommandServiceState & state,std::string & error)internal helperInventory only; no authored contract note.src/app/phase0_foundation_serialization.cpp:448
ParseCommandQueue(const nlohmann::json & document,core::RuntimeCommandQueueState & output,std::string & error)internal helperParses bounded pending commands, validates command names during conversion, and returns detached Core-owned queue state.src/app/phase0_foundation_serialization.cpp:489
app::CapturePhase0Foundation(const RuntimeSession & session,const core::RuntimeCommandQueue & command_queue)free functionCollects detached RuntimeSession and RuntimeCommandQueue values into one Phase 0 foundation state.src/app/phase0_foundation_serialization.cpp:524
app::ValidatePhase0FoundationState(const Phase0FoundationState & state,std::string & error)free functionRuns each owner's validator and rejects cross-owner commands that target ticks beyond the scenario limit.src/app/phase0_foundation_serialization.cpp:532
app::RestorePhase0Foundation(const Phase0FoundationState & state,RuntimeSession & session,core::RuntimeCommandQueue & command_queue,std::string & error)free functionValidates the complete foundation state, then delegates mutation to RuntimeSession and RuntimeCommandQueue restore paths.src/app/phase0_foundation_serialization.cpp:552
app::SerializePhase0Foundation(const Phase0FoundationState & state)free functionWrites deterministic schema version 27 JSON and embeds each owner's existing detached state instead of duplicating its serialization authority.src/app/phase0_foundation_serialization.cpp:569
app::DeserializePhase0Foundation(const std::string_view document_text)free functionEnforces the document-size and schema-version boundaries, parses every detached owner value, and returns no live mutation authority.src/app/phase0_foundation_serialization.cpp:895
LegacyBuildingDefinitionId(const game::BuildingFunction function)internal helperInventory only; no authored contract note.src/app/phase3_economy_serialization.cpp:295
MigrateLegacyBuildingDefinitionIds(Json & construction_document)internal helperInventory only; no authored contract note.src/app/phase3_economy_serialization.cpp:317
MigrateLegacyConstructionScheduler(Json & scheduler_document)internal helperInventory only; no authored contract note.src/app/phase3_economy_serialization.cpp:350
app::SerializePhase3Economy(const Phase3EconomyState & state)free functionInventory only; no authored contract note.src/app/phase3_economy_serialization.cpp:401
app::DeserializePhase3Economy(const std::string_view document)free functionInventory only; no authored contract note.src/app/phase3_economy_serialization.cpp:435
TakeCandidate(std::optional<Value> & candidate)internal helperInventory only; no authored contract note.src/app/phase3_economy_state.cpp:12
CaptureJobWorkEvidence(const game::JobPreferenceBatchResult & job_work)internal helperInventory only; no authored contract note.src/app/phase3_economy_state.cpp:19
ValidateJobWorkEvidence(const std::optional<Phase3JobWorkEvidence> & evidence,std::string & error)internal helperInventory only; no authored contract note.src/app/phase3_economy_state.cpp:45
FailedCandidate(std::string error)internal helperInventory only; no authored contract note.src/app/phase3_economy_state.cpp:79
ValidateActorJobBindings(const game::ActorRuntime & actors,const game::WorkLifecycleRuntime & work,const game::SettlementSupplyRuntime & supply,const game::ConstructionState & construction,const game::LandConversionState * land_conversions,const game::InfrastructureConstructionState * infrastructure,const game::FarmingState * farming,std::string & error)internal helperInventory only; no authored contract note.src/app/phase3_economy_state.cpp:97
ValidateAssignmentOrderBindings(const sim::WorldRuntime & world,const game::ActorRuntime & actors,const game::WorkLifecycleRuntime & work,const game::SettlementSupplyRuntime & supply,const game::ConstructionRuntime & construction,std::string & error)internal helperInventory only; no authored contract note.src/app/phase3_economy_state.cpp:275
app::CapturePhase3Economy(const sim::WorldRuntime & world,const game::ActorRuntime & actors,const game::WorkLifecycleRuntime & work,const game::ResourceEconomyRuntime & resources,const game::SettlementSupplyRuntime & supply,const game::ConstructionRuntime & construction,const game::SettlementSupplySchedulerState * supply_work_scheduler,const game::JobPreferenceBatchResult * job_work,const game::ConstructionWorkSchedulerState * construction_work_scheduler,const game::LandConversionRuntime * land_conversions,const game::LandConversionSchedulerState * land_conversion_scheduler,const game::InfrastructureConstructionRuntime * infrastructure_construction,const game::InfrastructureConstructionSchedulerState * infrastructure_construction_scheduler,const game::FarmingRuntime * farming,const game::FarmingSchedulerState * farming_scheduler)free functionInventory only; no authored contract note.src/app/phase3_economy_state.cpp:308
app::CapturePhase3JobWorkEvidence(const game::JobPreferenceBatchResult & job_work)free functionInventory only; no authored contract note.src/app/phase3_economy_state.cpp:356
ValidatePhase3EconomyOwners(const Phase3EconomyState & state,std::string & error)internal helperInventory only; no authored contract note.src/app/phase3_economy_state.cpp:362
app::ValidatePhase3EconomyState(const Phase3EconomyState & state,std::string & error)free functionInventory only; no authored contract note.src/app/phase3_economy_state.cpp:439
app::BuildPhase3EconomyCandidate(Phase3EconomyState state,const sim::WorldRuntime & world,const game::ResourceCapacityLimits & resource_limits,const std::size_t maximum_live_population)free functionInventory only; no authored contract note.src/app/phase3_economy_state.cpp:453
app::RestorePhase3Economy(const Phase3EconomyState & state,const sim::WorldRuntime & world,game::ActorRuntime & actors,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources,game::SettlementSupplyRuntime & supply,game::ConstructionRuntime & construction,std::string & error,std::optional<game::SettlementSupplySchedulerState> * supply_work_scheduler,std::optional<Phase3JobWorkEvidence> * job_work,std::optional<game::ConstructionWorkSchedulerState> * construction_work_scheduler)free functionInventory only; no authored contract note.src/app/phase3_economy_state.cpp:580
app::Phase3EconomyCandidate::Succeeded() constinline methodInventory only; no authored contract note.src/app/phase3_economy_state.hpp:84
Reject(RuntimeActorCommitmentResult result,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_actor_commitment.cpp:15
HasUnreservedMeal(const game::ResourceEconomyRuntime & resources,const game::InventoryContainerRecord & carrier,const game::ResourceId resource,const std::uint64_t quantity)internal helperInventory only; no authored contract note.src/app/runtime_actor_commitment.cpp:21
app::AdvanceScheduledActorCommitments(const RuntimeActorCommitmentContext context,game::ActorRuntime & actors,game::ResourceEconomyRuntime & resources)free functionInventory only; no authored contract note.src/app/runtime_actor_commitment.cpp:32
app::RuntimeSession::AdvanceScheduledActorCommitments(const std::span<const sim::PersistentId> scheduled_actors,const std::span<const sim::PersistentId> suppressed_actors,const std::uint64_t tick)methodInventory only; no authored contract note.src/app/runtime_actor_commitment.cpp:118
app::RuntimeActorCommitmentResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_actor_commitment.hpp:39
RejectSnapshot(std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_actor_consequence_snapshot.cpp:12
RejectInput(std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_actor_consequence_snapshot.cpp:16
app::BuildActorConsequenceSnapshot(const sim::PersistentId actor,const std::uint64_t at_tick,const game::ActorRuntime & actors,const game::MemoryRuntime & memories,const game::RelationshipRuntime & relationships,const game::HouseholdRuntime & households,const game::ReputationRuntime & reputations)free functionInventory only; no authored contract note.src/app/runtime_actor_consequence_snapshot.cpp:22
app::ComposeActorFocusSocialInput(const RuntimeActorConsequenceSnapshot & snapshot,const std::uint64_t at_tick,const game::ActorRuntime & actors,const game::MemoryRuntime & memories,const game::RelationshipRuntime & relationships,const game::HouseholdRuntime & households,const game::ReputationRuntime & reputations)free functionInventory only; no authored contract note.src/app/runtime_actor_consequence_snapshot.cpp:86
app::RuntimeSession::CaptureActorConsequenceSnapshot(const sim::PersistentId actor) constmethodInventory only; no authored contract note.src/app/runtime_actor_consequence_snapshot.cpp:120
app::RuntimeSession::ValidateActorConsequenceSnapshot(const RuntimeActorConsequenceSnapshot & snapshot) constmethodInventory only; no authored contract note.src/app/runtime_actor_consequence_snapshot.cpp:132
app::RuntimeActorConsequenceSnapshotResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_actor_consequence_snapshot.hpp:41
app::RuntimeActorConsequenceInputResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_actor_consequence_snapshot.hpp:48
app::ComposeCompletedWorkProgression(const RuntimeActorWorkProgressionRequest request,const game::WorkLifecycleRuntime & work,game::ActorRuntime & actors)free functionInventory only; no authored contract note.src/app/runtime_actor_work_progression.cpp:6
app::HydratePendingActorArrivals(sim::WorldRuntime & world,const game::ActorRuntime & actors)free functionInventory only; no authored contract note.src/app/runtime_arrival_hydration.cpp:10
app::RuntimeArrivalHydrationResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_arrival_hydration.hpp:22
Index(const RuntimeAudioCueKind kind)internal helperInventory only; no authored contract note.src/app/runtime_audio_cues.cpp:14
CooldownTicks(const RuntimeAudioCueKind kind)internal helperInventory only; no authored contract note.src/app/runtime_audio_cues.cpp:18
MaximumNeedPressure(const game::ActorState & actor)internal helperInventory only; no authored contract note.src/app/runtime_audio_cues.cpp:38
AddFact(RuntimeAudioCueFrame & frame,const RuntimeAudioCueKind kind,const std::uint64_t source_id,const std::uint64_t fact_revision)internal helperInventory only; no authored contract note.src/app/runtime_audio_cues.cpp:46
CaptureWorkFact(const game::WorkTransitionResult & transition,RuntimeAudioCueFrame & frame)internal helperInventory only; no authored contract note.src/app/runtime_audio_cues.cpp:56
app::CaptureRuntimeAudioCueFrame(const RuntimeSession & session)free functionInventory only; no authored contract note.src/app/runtime_audio_cues.cpp:87
app::RuntimeAudioCueId(const RuntimeAudioCueKind kind)free functionInventory only; no authored contract note.src/app/runtime_audio_cues.cpp:177
app::RuntimeAudioCueRouter::Route(const RuntimeSession & session,core::AudioService & audio)methodInventory only; no authored contract note.src/app/runtime_audio_cues.cpp:199
app::RuntimeAudioCueRouter::RouteFrame(const RuntimeAudioCueFrame & frame,core::AudioService & audio)methodInventory only; no authored contract note.src/app/runtime_audio_cues.cpp:204
Reject(RuntimeCombatTreatmentRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_combat_treatment.cpp:10
app::ComposeCombatTreatment(RuntimeCombatTreatmentRequest request,game::ResourceEconomyRuntime & resources,game::ActorRuntime & actors)free functionInventory only; no authored contract note.src/app/runtime_combat_treatment.cpp:20
app::RuntimeSession::ApplyCombatTreatment(RuntimeCombatTreatmentRequest request)methodInventory only; no authored contract note.src/app/runtime_combat_treatment.cpp:76
app::RuntimeCombatTreatmentResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_combat_treatment.hpp:31
Failure(std::string error)internal helperInventory only; no authored contract note.src/app/runtime_configuration.cpp:23
IsValidScenarioId(const std::string & scenario_id)internal helperInventory only; no authored contract note.src/app/runtime_configuration.cpp:27
app::LoadRuntimeConfiguration(assets::AssetService & asset_service)free functionLoads config.runtime, parses schema version 1, validates title and window bounds, and returns plain renderer settings.src/app/runtime_configuration.cpp:37
app::ResolveBuildingFunction(const assets::ContentBuildingFunction function)free functionInventory only; no authored contract note.src/app/runtime_content_resolution.cpp:10
app::ResolveFootprintCells(const std::span<const assets::ContentFootprintCell> cells)free functionInventory only; no authored contract note.src/app/runtime_content_resolution.cpp:35
app::ResolveResourceBundle(const std::span<const assets::ContentResourceQuantity> quantities,const game::ResourceEconomyRuntime & resources,game::ResourceBundle & bundle,std::string & error)free functionInventory only; no authored contract note.src/app/runtime_content_resolution.cpp:44
app::ValidateWorldLandContentReferences(const sim::WorldRuntime & world,const assets::RuntimeContentCatalog & catalog,std::string & error)free functionInventory only; no authored contract note.src/app/runtime_content_resolution.cpp:62
RejectControl(game::ActorControlTransitionRequest request,std::string detail,const std::optional<game::ActorControlRecord> before=std::nullopt)internal helperInventory only; no authored contract note.src/app/runtime_control_authority.cpp:10
IsTerminal(const game::AssignmentOrderState state)internal helperInventory only; no authored contract note.src/app/runtime_control_authority.cpp:20
IsTerminal(const game::ActorPlanStatus status)internal helperInventory only; no authored contract note.src/app/runtime_control_authority.cpp:26
app::RuntimeSession::ApplyActorControlTransition(game::ActorControlTransitionRequest request)methodInventory only; no authored contract note.src/app/runtime_control_authority.cpp:34
app::RuntimeSession::ApplyActorControlTransitionInTransaction(game::ActorControlTransitionRequest request)methodInventory only; no authored contract note.src/app/runtime_control_authority.cpp:52
app::RuntimeSession::EnterAssignedAuthority(const game::AssignmentOrderId order_id,const std::uint64_t tick)methodInventory only; no authored contract note.src/app/runtime_control_authority.cpp:245
app::RuntimeSession::ReconcileEndedAssignmentAuthorities(const std::uint64_t tick)methodInventory only; no authored contract note.src/app/runtime_control_authority.cpp:272
Reject(RuntimeEmigrationRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_emigration.cpp:11
IsLiveJob(const game::JobState state)internal helperInventory only; no authored contract note.src/app/runtime_emigration.cpp:22
app::ComposeEmigration(RuntimeEmigrationRequest request,sim::WorldRuntime & world,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources,game::ActorRuntime & actors,game::HouseholdRuntime & households,game::SettlementRuntime & settlements)free functionInventory only; no authored contract note.src/app/runtime_emigration.cpp:29
app::RuntimeSession::ApplyEmigration(RuntimeEmigrationRequest request)methodInventory only; no authored contract note.src/app/runtime_emigration.cpp:167
app::RuntimeEmigrationResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_emigration.hpp:42
RejectDecision(RuntimeExpeditionFieldDecisionRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_expedition_decision.cpp:11
IsMovementDecision(const game::ScoutingFieldDecisionKind decision)internal helperInventory only; no authored contract note.src/app/runtime_expedition_decision.cpp:26
RetainsMovementTarget(const game::ScoutingFieldDecisionKind decision)internal helperInventory only; no authored contract note.src/app/runtime_expedition_decision.cpp:33
HasCost(const game::ScoutingFieldDecisionKind decision)internal helperInventory only; no authored contract note.src/app/runtime_expedition_decision.cpp:39
DecisionRecord(const RuntimeExpeditionFieldDecisionRequest & request,const game::ScoutingOrderRecord & order)internal helperInventory only; no authored contract note.src/app/runtime_expedition_decision.cpp:45
Inspection(const game::ScoutingOrderRecord & order,const game::IncidentRecord & incident,const game::ScoutingFieldDecisionRecord & decision)internal helperInventory only; no authored contract note.src/app/runtime_expedition_decision.cpp:59
app::RuntimeSession::ApplyExpeditionFieldDecision(RuntimeExpeditionFieldDecisionRequest request)methodInventory only; no authored contract note.src/app/runtime_expedition_decision.cpp:79
app::RuntimeExpeditionFieldDecisionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_expedition_decision.hpp:70
RejectSurvey(RuntimeExpeditionDiscoverySurveyRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_expedition_discovery.cpp:12
RejectReturn(RuntimeExpeditionDiscoveryReturnRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_expedition_discovery.cpp:20
ActorAtSite(const sim::WorldRuntime & world,const sim::PersistentId actor,const sim::SiteId site)internal helperInventory only; no authored contract note.src/app/runtime_expedition_discovery.cpp:28
RenewableSourceKnowledgeState(const game::ObserverKnowledgeSnapshot & knowledge,const sim::RenewableSourceId source)internal helperInventory only; no authored contract note.src/app/runtime_expedition_discovery.cpp:38
RegionsForSites(const sim::WorldTopology & topology,const std::vector<sim::SiteId> & sites)internal helperInventory only; no authored contract note.src/app/runtime_expedition_discovery.cpp:51
app::RuntimeSession::SurveyExpeditionDiscovery(RuntimeExpeditionDiscoverySurveyRequest request)methodInventory only; no authored contract note.src/app/runtime_expedition_discovery.cpp:70
app::RuntimeSession::CompleteExpeditionDiscoveryReturn(RuntimeExpeditionDiscoveryReturnRequest request)methodInventory only; no authored contract note.src/app/runtime_expedition_discovery.cpp:341
app::RuntimeExpeditionDiscoverySurveyResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_expedition_discovery.hpp:82
app::RuntimeExpeditionDiscoveryReturnResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_expedition_discovery.hpp:143
RejectEnvironment(RuntimeExpeditionEnvironmentRequest request,std::string error,const sim::RegionWeather weather_before=sim::RegionWeather::clear)internal helperInventory only; no authored contract note.src/app/runtime_expedition_environment.cpp:12
VisibilityFor(const sim::RegionWeather weather)internal helperInventory only; no authored contract note.src/app/runtime_expedition_environment.cpp:31
TravelReadyFor(const sim::RegionWeather weather)internal helperInventory only; no authored contract note.src/app/runtime_expedition_environment.cpp:45
FindKnownEnvironment(const game::ObserverKnowledgeSnapshot & knowledge,const sim::RegionId region)internal helperInventory only; no authored contract note.src/app/runtime_expedition_environment.cpp:50
FindKnownPredators(const game::ObserverKnowledgeSnapshot & knowledge,const sim::RegionId region,std::size_t & population_visits)internal helperInventory only; no authored contract note.src/app/runtime_expedition_environment.cpp:60
app::RuntimeSession::ConfrontExpeditionEnvironment(RuntimeExpeditionEnvironmentRequest request)methodInventory only; no authored contract note.src/app/runtime_expedition_environment.cpp:78
app::RuntimeExpeditionEnvironmentResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_expedition_environment.hpp:72
Reject(RuntimeExpeditionPreparationRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_expedition_preparation.cpp:10
Canonicalize(game::ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/app/runtime_expedition_preparation.cpp:21
ValidBundle(const game::ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/app/runtime_expedition_preparation.cpp:25
ContainsMember(const game::PartyRecord & party,const std::uint64_t actor)internal helperInventory only; no authored contract note.src/app/runtime_expedition_preparation.cpp:36
app::RuntimeSession::PrepareExpedition(RuntimeExpeditionPreparationRequest request)methodInventory only; no authored contract note.src/app/runtime_expedition_preparation.cpp:44
app::RuntimeExpeditionPreparationResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_expedition_preparation.hpp:61
RejectedResource(std::string detail,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/runtime_expedition_travel.cpp:12
RejectedMovement(const RuntimeExpeditionDepartureRequest & request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_expedition_travel.cpp:20
RejectDeparture(RuntimeExpeditionDepartureRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_expedition_travel.cpp:36
RejectCamp(RuntimeExpeditionCampRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_expedition_travel.cpp:50
Canonicalize(game::ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/app/runtime_expedition_travel.cpp:67
IsPositiveCanonicalBundle(const game::ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/app/runtime_expedition_travel.cpp:71
IsSubset(const game::ResourceBundle & requested,const game::ResourceBundle & prepared)internal helperInventory only; no authored contract note.src/app/runtime_expedition_travel.cpp:82
ActorAtSite(const sim::WorldRuntime & world,const sim::PersistentId actor,const sim::SiteId site)internal helperInventory only; no authored contract note.src/app/runtime_expedition_travel.cpp:91
app::ExpeditionCampEffectId(const game::ScoutingOrderId order)free functionInventory only; no authored contract note.src/app/runtime_expedition_travel.cpp:102
app::RuntimeSession::DepartPreparedExpedition(RuntimeExpeditionDepartureRequest request)methodInventory only; no authored contract note.src/app/runtime_expedition_travel.cpp:110
app::RuntimeSession::EstablishExpeditionCamp(RuntimeExpeditionCampRequest request)methodInventory only; no authored contract note.src/app/runtime_expedition_travel.cpp:261
app::RuntimeExpeditionDepartureResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_expedition_travel.hpp:56
app::RuntimeExpeditionCampResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_expedition_travel.hpp:103
Reject(const game::FactionPressureKind kind,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_faction_pressure.cpp:11
AudienceHousehold(const game::HouseholdRuntime & households,const std::span<const sim::PersistentId> target_agents)internal helperInventory only; no authored contract note.src/app/runtime_faction_pressure.cpp:23
ApplyRaidRelationship(game::RelationshipRuntime & relationships,const sim::PersistentId raider,const sim::PersistentId defender,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/runtime_faction_pressure.cpp:35
ApplyRaidReputation(game::ReputationRuntime & reputations,const game::HouseholdId audience_household,const sim::PersistentId raider,const game::ReputationEvidence evidence,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/runtime_faction_pressure.cpp:58
BuildRaidEventEvidence(const game::FactionRecord & faction,const game::FactionRecord & target,const game::SettlementRecord & settlement,const sim::WorldRuntime & world,const game::ActorRuntime & actors,const game::IntersectionLifecycleRuntime & lifecycle,const game::MemoryRuntime & memories,const std::uint64_t tick,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_faction_pressure.cpp:91
app::RuntimeSession::PursueFactionNegotiation(const game::FactionId faction_id,const game::FactionId target_id)methodInventory only; no authored contract note.src/app/runtime_faction_pressure.cpp:201
app::RuntimeSession::ExecuteFactionRaid(const game::FactionId faction_id,const game::FactionId target_id)methodInventory only; no authored contract note.src/app/runtime_faction_pressure.cpp:258
InstitutionIds(const game::InstitutionalRequestRuntime * institutions)internal helperInventory only; no authored contract note.src/app/runtime_faction_strategy.cpp:16
ValidateBindings(const game::FactionRuntimeState & state,const sim::WorldRuntime & world,const game::ActorRuntime & actors,const game::ResourceEconomyRuntime & resources,const game::SettlementRuntime & settlements,const game::InstitutionalRequestRuntime * institutions,const game::ObserverKnowledgeSnapshot * knowledge,const std::uint64_t tick,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_faction_strategy.cpp:27
SupplyReadiness(const game::FactionRecord & faction,const game::ResourceEconomyRuntime & resources)internal helperInventory only; no authored contract note.src/app/runtime_faction_strategy.cpp:91
app::BuildRuntimeFactionCandidate(game::FactionRuntimeState state,const sim::WorldRuntime & world,const game::ActorRuntime & actors,const game::ResourceEconomyRuntime & resources,const game::SettlementRuntime & settlements,const game::InstitutionalRequestRuntime * institutions,const game::ObserverKnowledgeSnapshot * knowledge,const std::uint64_t tick)free functionInventory only; no authored contract note.src/app/runtime_faction_strategy.cpp:118
app::ComposeDefaultFactionRuntime(const sim::WorldRuntime & world,const game::ActorRuntime & actors,const game::ResourceEconomyRuntime & resources,const game::SettlementRuntime & settlements,const game::InstitutionalRequestRuntime * institutions,const game::ObserverKnowledgeSnapshot * knowledge,const std::uint64_t tick,std::string & error)free functionInventory only; no authored contract note.src/app/runtime_faction_strategy.cpp:133
app::ComposeFactionStrategicInput(const game::FactionRuntime & factions,const game::FactionId faction_id,const game::FactionId target_id,const sim::WorldRuntime & world,const game::ResourceEconomyRuntime & resources,const game::SettlementRuntime & settlements,const game::InstitutionalRequestRuntime * institutions,const std::uint64_t tick,std::string & error)free functionInventory only; no authored contract note.src/app/runtime_faction_strategy.cpp:278
app::RuntimeSession::EvaluateFactionStrategy(const game::FactionId faction,const game::FactionId target)methodInventory only; no authored contract note.src/app/runtime_faction_strategy.cpp:335
app::RuntimeSession::AdvanceFactionStrategies(const std::uint64_t tick)methodInventory only; no authored contract note.src/app/runtime_faction_strategy.cpp:360
RejectWork(RuntimeHealthCareWorkRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_health_care.cpp:12
RejectCompletion(RuntimeHealthCareCompletionRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_health_care.cpp:22
IsHouseholdMember(const game::HouseholdRecord & household,const sim::PersistentId actor)internal helperInventory only; no authored contract note.src/app/runtime_health_care.cpp:33
HouseholdCareKindFor(const RuntimeHealthCareKind kind)internal helperInventory only; no authored contract note.src/app/runtime_health_care.cpp:38
IsAvailableCaregiver(const game::ActorState & actor)internal helperInventory only; no authored contract note.src/app/runtime_health_care.cpp:46
app::OpenHealthCareWork(RuntimeHealthCareWorkRequest request,game::WorkLifecycleRuntime & work,game::ActorRuntime & actors,game::HouseholdRuntime & households,sim::WorldRuntime & world)free functionInventory only; no authored contract note.src/app/runtime_health_care.cpp:55
app::CompleteHealthCareWork(RuntimeHealthCareCompletionRequest request,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources,game::ActorRuntime & actors,game::HouseholdRuntime & households)free functionInventory only; no authored contract note.src/app/runtime_health_care.cpp:152
app::AdvanceAutonomousHealthCare(const RuntimeAutonomousHealthCareContext context,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources,game::ActorRuntime & actors,game::HouseholdRuntime & households,const game::SettlementRuntime & settlements,sim::WorldRuntime & world)free functionInventory only; no authored contract note.src/app/runtime_health_care.cpp:327
app::RuntimeSession::OpenHealthCareWork(RuntimeHealthCareWorkRequest request)methodInventory only; no authored contract note.src/app/runtime_health_care.cpp:491
app::RuntimeSession::CompleteHealthCareWork(RuntimeHealthCareCompletionRequest request)methodInventory only; no authored contract note.src/app/runtime_health_care.cpp:505
app::RuntimeSession::AdvanceScheduledHealthCare(const std::span<const sim::PersistentId> scheduled_recipients,const std::span<const sim::PersistentId> suppressed_caregivers,const std::uint64_t tick)methodInventory only; no authored contract note.src/app/runtime_health_care.cpp:520
app::RuntimeHealthCareWorkResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_health_care.hpp:43
app::RuntimeHealthCareCompletionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_health_care.hpp:80
app::RuntimeAutonomousHealthCareResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_health_care.hpp:106
Reject(RuntimeHouseholdCareRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_household_care.cpp:10
app::ComposeHouseholdCare(RuntimeHouseholdCareRequest request,game::ResourceEconomyRuntime & resources,game::ActorRuntime & actors,game::HouseholdRuntime & households)free functionInventory only; no authored contract note.src/app/runtime_household_care.cpp:20
app::RuntimeSession::ApplyHouseholdCare(RuntimeHouseholdCareRequest request)methodInventory only; no authored contract note.src/app/runtime_household_care.cpp:89
app::RuntimeHouseholdCareResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_household_care.hpp:33
Reject(std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_household_consequence_ledger.cpp:13
app::BuildRuntimeHouseholdConsequenceLedger(const game::IncidentId incident_id,const sim::PersistentId injured_actor,const std::uint64_t captured_at_tick,const game::IntersectionLifecycleRuntime & lifecycle,const game::MemoryRuntime & memories,const game::HouseholdRuntime & households,const game::ActorRuntime & actors)free functionInventory only; no authored contract note.src/app/runtime_household_consequence_ledger.cpp:19
app::ValidateRuntimeHouseholdConsequenceLedger(const RuntimeHouseholdConsequenceLedger & ledger,const game::IntersectionLifecycleRuntime & lifecycle,const game::MemoryRuntime & memories,const game::HouseholdRuntime & households,const game::ActorRuntime & actors)free functionInventory only; no authored contract note.src/app/runtime_household_consequence_ledger.cpp:158
app::RuntimeSession::CaptureHouseholdConsequenceLedger(const game::IncidentId incident,const sim::PersistentId injured_actor) constmethodInventory only; no authored contract note.src/app/runtime_household_consequence_ledger.cpp:172
app::RuntimeSession::ValidateHouseholdConsequenceLedger(const RuntimeHouseholdConsequenceLedger & ledger) constmethodInventory only; no authored contract note.src/app/runtime_household_consequence_ledger.cpp:184
app::RuntimeHouseholdConsequenceLedgerResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_household_consequence_ledger.hpp:34
Reject(RuntimeHouseholdFormationRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_household_formation.cpp:12
app::ComposeHouseholdFormation(RuntimeHouseholdFormationRequest request,const game::IncidentRecord & incident,const game::IntersectionRecord & intersection,const game::MemoryRuntime & memories,const std::span<const sim::PersistentId> current_actors,game::RelationshipRuntime & relationships,game::HouseholdRuntime & households)free functionInventory only; no authored contract note.src/app/runtime_household_formation.cpp:27
app::RuntimeSession::FormHousehold(RuntimeHouseholdFormationRequest request)methodInventory only; no authored contract note.src/app/runtime_household_formation.cpp:133
app::RuntimeHouseholdFormationResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_household_formation.hpp:42
IsTerminal(const game::SupplyStage stage)internal helperInventory only; no authored contract note.src/app/runtime_household_life.cpp:18
FindResidencePantry(const game::HouseholdRecord & household,const std::span<const game::HouseholdRecord> household_records,const game::ResourceEconomyRuntime & resources)internal helperInventory only; no authored contract note.src/app/runtime_household_life.cpp:24
PantryFoodQuantity(const game::ResourceEconomyRuntime & resources,const game::InventoryContainerId pantry,const std::span<const game::ResourceId> foods)internal helperInventory only; no authored contract note.src/app/runtime_household_life.cpp:50
ResolveFoodResources(const game::ResourceEconomyRuntime & resources,const std::span<const std::string> food_resource_keys)internal helperInventory only; no authored contract note.src/app/runtime_household_life.cpp:65
app::EnsureVillageHouseholdProvisions(const std::uint64_t tick,const sim::SiteId settlement_site,game::ActorRuntime & actors,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources,game::SettlementSupplyRuntime & supply,const game::HouseholdRuntime & households,const game::AuthoredSettlementDemographyPolicy & policy,const std::span<const game::ResourceAmount> stockpile_reserves)free functionInventory only; no authored contract note.src/app/runtime_household_life.cpp:84
app::AdvanceVillageHouseholdMeals(const std::uint64_t tick,const std::uint64_t ticks_per_day,game::ActorRuntime & actors,game::ResourceEconomyRuntime & resources,game::HouseholdRuntime & households,const game::AuthoredSettlementDemographyPolicy & policy)free functionInventory only; no authored contract note.src/app/runtime_household_life.cpp:216
app::AdvanceVillageEnvironmentalHouseholdEffects(const std::uint64_t tick,const sim::SiteId settlement_site,const sim::WorldRuntime & world,game::HouseholdRuntime & households)free functionInventory only; no authored contract note.src/app/runtime_household_life.cpp:380
app::RuntimeHouseholdProvisioningResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_household_life.hpp:28
app::RuntimeHouseholdMealResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_household_life.hpp:40
app::RuntimeVillageEnvironmentalHouseholdResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_household_life.hpp:49
Reject(RuntimeHouseholdMemoryPropagationRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_household_memory.cpp:10
app::ComposeHouseholdMemoryPropagation(RuntimeHouseholdMemoryPropagationRequest request,const game::HouseholdRuntime & households,game::MemoryRuntime & memories)free functionInventory only; no authored contract note.src/app/runtime_household_memory.cpp:26
app::RuntimeSession::PropagateHouseholdMemory(RuntimeHouseholdMemoryPropagationRequest request)methodInventory only; no authored contract note.src/app/runtime_household_memory.cpp:124
app::RuntimeHouseholdMemoryPropagationResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_household_memory.hpp:45
Reject(const game::IncidentId incident,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_incident_memory.cpp:33
FindPolicy(const std::string_view incident_family)internal helperInventory only; no authored contract note.src/app/runtime_incident_memory.cpp:40
app::ComposeIncidentWitnessMemories(const game::IncidentRecord & incident,const game::IntersectionRecord & intersection,const std::span<const sim::PersistentId> current_actors,game::MemoryRuntime & memories)free functionInventory only; no authored contract note.src/app/runtime_incident_memory.cpp:48
app::RuntimeSession::RecordIncidentWitnessMemories(const game::IncidentId incident_id)methodInventory only; no authored contract note.src/app/runtime_incident_memory.cpp:128
app::RuntimeIncidentMemoryCompositionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_incident_memory.hpp:27
RejectInstitutionalRequest(std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_institutional_request.cpp:13
FindActor(const std::span<const game::ActorState> actors,const sim::PersistentId actor)internal helperInventory only; no authored contract note.src/app/runtime_institutional_request.cpp:23
app::ValidateInstitutionalRequestBindings(const game::InstitutionalRequestStateData & state,const std::span<const game::ActorState> actors,const game::RelationshipRuntimeState & relationships,const game::MemoryRuntimeState & memories,const game::ReputationRuntimeState & reputations,std::string & error)free functionInventory only; no authored contract note.src/app/runtime_institutional_request.cpp:31
app::RuntimeSession::CreateInstitutionalRequest(game::InstitutionalRequestCreateRequest request)methodInventory only; no authored contract note.src/app/runtime_institutional_request.cpp:84
app::RuntimeSession::TransitionInstitutionalRequest(game::InstitutionalRequestTransitionRequest request)methodInventory only; no authored contract note.src/app/runtime_institutional_request.cpp:99
app::RuntimeSession::ResolveInstitutionalRequest(game::InstitutionalRequestResolveRequest request)methodInventory only; no authored contract note.src/app/runtime_institutional_request.cpp:114
RejectIncidentSelection(RuntimeIntersectionIncidentSelectionRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_intersection_incident_selection.cpp:9
app::RuntimeSession::EvaluateIntersectionIncidentSelection(RuntimeIntersectionIncidentSelectionRequest request)methodInventory only; no authored contract note.src/app/runtime_intersection_incident_selection.cpp:22
RejectProposal(RuntimeIntersectionProposalRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_intersection_lifecycle.cpp:10
RejectTransition(game::IncidentTransitionRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_intersection_lifecycle.cpp:20
app::RuntimeSession::ProposeIntersection(RuntimeIntersectionProposalRequest request)methodInventory only; no authored contract note.src/app/runtime_intersection_lifecycle.cpp:33
app::RuntimeSession::TransitionIncident(game::IncidentTransitionRequest request)methodInventory only; no authored contract note.src/app/runtime_intersection_lifecycle.cpp:144
RejectOccurrence(RuntimeIntersectionOccurrenceRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_intersection_occurrence.cpp:8
app::RuntimeSession::EvaluateIntersectionOccurrence(RuntimeIntersectionOccurrenceRequest request)methodInventory only; no authored contract note.src/app/runtime_intersection_occurrence.cpp:23
RejectPresentation(RuntimeIntersectionPresentationRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_intersection_presentation.cpp:9
app::RuntimeSession::EvaluateIntersectionPresentation(RuntimeIntersectionPresentationRequest request)methodInventory only; no authored contract note.src/app/runtime_intersection_presentation.cpp:23
IsPlayerFacing(const game::IntersectionPresentationBand band)internal helperInventory only; no authored contract note.src/app/runtime_intersection_schedule.cpp:11
CooldownBlockCount(const game::IntersectionCandidateEvaluationResult & evaluation)internal helperInventory only; no authored contract note.src/app/runtime_intersection_schedule.cpp:16
app::RuntimeSession::AdvanceIntersectionSchedule(const std::uint64_t tick)methodInventory only; no authored contract note.src/app/runtime_intersection_schedule.cpp:26
RejectIntersection(RuntimeIntersectionCandidateRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_intersections.cpp:9
app::RuntimeSession::EvaluateIntersectionCandidates(RuntimeIntersectionCandidateRequest request)methodInventory only; no authored contract note.src/app/runtime_intersections.cpp:25
Rejected(std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_landscape_work.cpp:12
Applied(LandscapeWorkBinding binding,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_landscape_work.cpp:16
ResolveBinding(const game::JobId job,const game::WorkLifecycleRuntime & work,const game::ResourceEconomyRuntime & resources)internal helperInventory only; no authored contract note.src/app/runtime_landscape_work.cpp:20
ResolvePolicy(const LandscapeWorkBinding & binding,const sim::WorldRuntime & world,const assets::RuntimeContentCatalog & catalog)internal helperInventory only; no authored contract note.src/app/runtime_landscape_work.cpp:63
ResolveOutputs(const assets::ContentLandscapeLifecycleDefinition & policy,const game::ResourceEconomyRuntime & resources)internal helperInventory only; no authored contract note.src/app/runtime_landscape_work.cpp:71
ActiveReservation(const game::JobId job,const sim::PersistentId actor,const game::WorkLifecycleRuntime & work)internal helperInventory only; no authored contract note.src/app/runtime_landscape_work.cpp:86
ActorReady(const game::ActorState & actor,const game::JobId job,const game::WorkTaskId task)internal helperInventory only; no authored contract note.src/app/runtime_landscape_work.cpp:101
app::DesignateLandscapeWork(const sim::WorldLandscapeFeatureId feature_id,const std::uint64_t expected_feature_revision,const std::uint64_t tick,const assets::RuntimeContentCatalog & catalog,const sim::WorldRuntime & world,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources)free functionInventory only; no authored contract note.src/app/runtime_landscape_work.cpp:111
app::ClaimLandscapeWork(const game::JobId job,const sim::PersistentId actor_id,const game::InventoryContainerId carrier_id,const sim::SiteId logical_site,const std::uint64_t tick,const assets::RuntimeContentCatalog & catalog,sim::WorldRuntime & world,game::ActorRuntime & actors,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources,const sim::LocalMovementTuning movement_tuning)free functionInventory only; no authored contract note.src/app/runtime_landscape_work.cpp:192
app::HarvestLandscapeWork(const game::JobId job,const sim::PersistentId actor_id,const sim::SiteId destination_site,const game::InventoryContainerId destination,const std::uint64_t work_units,const assets::RuntimeContentCatalog & catalog,const std::uint64_t tick,sim::WorldRuntime & world,game::ActorRuntime & actors,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources,const sim::LocalMovementTuning movement_tuning)free functionInventory only; no authored contract note.src/app/runtime_landscape_work.cpp:262
app::DeliverLandscapeWork(const game::JobId job,const sim::PersistentId actor_id,const std::uint64_t tick,sim::WorldRuntime & world,game::ActorRuntime & actors,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources)free functionInventory only; no authored contract note.src/app/runtime_landscape_work.cpp:348
app::CancelLandscapeWork(const game::JobId job,const sim::PersistentId actor_id,const std::uint64_t tick,sim::WorldRuntime & world,game::ActorRuntime & actors,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources)free functionInventory only; no authored contract note.src/app/runtime_landscape_work.cpp:385
app::LandscapeWorkOperationResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_landscape_work.hpp:32
Reject(RuntimeLifeTransitionRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_life_transition.cpp:12
IsLiveJob(const game::JobState state)internal helperInventory only; no authored contract note.src/app/runtime_life_transition.cpp:23
IsTerminalPlan(const game::ActorPlanStatus status)internal helperInventory only; no authored contract note.src/app/runtime_life_transition.cpp:27
app::ComposeLifeTransition(RuntimeLifeTransitionRequest request,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources,game::ActorRuntime & actors,game::HouseholdRuntime & households)free functionInventory only; no authored contract note.src/app/runtime_life_transition.cpp:34
app::RuntimeSession::ApplyLifeTransition(RuntimeLifeTransitionRequest request)methodInventory only; no authored contract note.src/app/runtime_life_transition.cpp:176
app::ComposeSettlementDeath(RuntimeSettlementDeathRequest request,const game::AuthoredSettlementDemographyPolicy & demography,sim::WorldRuntime & world,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources,game::ActorRuntime & actors,game::HouseholdRuntime & households,game::SettlementRuntime & settlements)free functionInventory only; no authored contract note.src/app/runtime_life_transition.cpp:188
app::RuntimeSession::ApplySettlementDeath(RuntimeSettlementDeathRequest request)methodInventory only; no authored contract note.src/app/runtime_life_transition.cpp:318
app::RuntimeLifeTransitionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_life_transition.hpp:45
app::RuntimeSettlementDeathResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_life_transition.hpp:69
Reject(RuntimeMoneyContributionRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_money_custody.cpp:10
app::RuntimeSession::ApplyMoneyContribution(RuntimeMoneyContributionRequest request)methodInventory only; no authored contract note.src/app/runtime_money_custody.cpp:24
app::RuntimeMoneyContributionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_money_custody.hpp:39
Failure(std::string error)internal helperInventory only; no authored contract note.src/app/runtime_options.cpp:12
ParseUnsigned(const std::string_view value)internal helperInventory only; no authored contract note.src/app/runtime_options.cpp:16
app::ParseRuntimeOptions(const std::span<char * > arguments,const bool allow_audio_option)free functionParses help, scenario, seed, graphical audio, and typed deterministic failure-injection flags; rejects missing values, invalid seeds or failure boundaries, and unknown arguments.src/app/runtime_options.cpp:29
app::RuntimeUsage(const bool graphical)free functionReturns the stable graphical or headless command-line usage string.src/app/runtime_options.cpp:171
Reject(const game::PartyOperationReason reason,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_party.cpp:13
app::RuntimeSession::CreateParty(game::PartyCreateRequest request)methodInventory only; no authored contract note.src/app/runtime_party.cpp:24
app::RuntimeSession::DisbandParty(game::PartyDisbandRequest request)methodInventory only; no authored contract note.src/app/runtime_party.cpp:75
app::RuntimeSession::SetPartyFormation(game::PartyFormationRequest request)methodInventory only; no authored contract note.src/app/runtime_party.cpp:87
app::RuntimeSession::ApplyPartyControlTransition(RuntimePartyControlRequest request)methodInventory only; no authored contract note.src/app/runtime_party.cpp:100
RejectPartyAssist(const game::PartyAssistIntentRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_party_assist.cpp:9
RejectConstructionAssist(const game::PartyAssistIntentRequest & request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_party_assist.cpp:22
CurrentSite(const sim::PersistentId actor,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/app/runtime_party_assist.cpp:30
IsControlPaused(const game::ActorState & actor)internal helperInventory only; no authored contract note.src/app/runtime_party_assist.cpp:42
app::RuntimeSession::AssistPartyConstruction(game::PartyAssistIntentRequest request)methodInventory only; no authored contract note.src/app/runtime_party_assist.cpp:51
IsTerminal(const game::ActorPlanStatus status)internal helperInventory only; no authored contract note.src/app/runtime_party_move.cpp:11
RejectPartyMove(const game::PartyMoveIntentRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_party_move.cpp:16
LeaderFirstMembers(const game::PartyRecord & party)internal helperInventory only; no authored contract note.src/app/runtime_party_move.cpp:28
app::RuntimeSession::MovePartyToSite(game::PartyMoveIntentRequest request)methodInventory only; no authored contract note.src/app/runtime_party_move.cpp:44
Milliseconds(const std::chrono::nanoseconds duration)internal helperInventory only; no authored contract note.src/app/runtime_performance_monitor.cpp:10
FramesPerSecond(const std::chrono::nanoseconds duration)internal helperInventory only; no authored contract note.src/app/runtime_performance_monitor.cpp:14
CpuPercent(const RuntimePerformanceSample & sample)internal helperInventory only; no authored contract note.src/app/runtime_performance_monitor.cpp:18
Normalize(RuntimePerformanceSample sample)internal helperInventory only; no authored contract note.src/app/runtime_performance_monitor.cpp:23
app::RuntimePerformanceMonitor::Record(RuntimePerformanceSample sample)methodInventory only; no authored contract note.src/app/runtime_performance_monitor.cpp:31
app::RuntimePerformanceMonitor::StartLogging(std::string owner_package_id,const std::size_t maximum_samples,std::string & error)methodInventory only; no authored contract note.src/app/runtime_performance_monitor.cpp:113
app::RuntimePerformanceMonitor::StopLogging(const std::string_view owner_package_id,std::string & error)methodInventory only; no authored contract note.src/app/runtime_performance_monitor.cpp:149
app::RuntimePerformanceMonitor::CaptureCurrent() constmethodInventory only; no authored contract note.src/app/runtime_performance_monitor.cpp:167
app::RuntimePerformanceMonitor::CaptureLogSummary() constmethodInventory only; no authored contract note.src/app/runtime_performance_monitor.cpp:198
app::RuntimePerformanceMonitor::CaptureLogSamples(const std::size_t cursor,const std::size_t limit) constmethodInventory only; no authored contract note.src/app/runtime_performance_monitor.cpp:203
app::RuntimePerformanceMonitor::LoggingOwner() constmethodInventory only; no authored contract note.src/app/runtime_performance_monitor.cpp:216
app::RuntimePerformanceLogStateName(const RuntimePerformanceLogState state)free functionInventory only; no authored contract note.src/app/runtime_performance_monitor.cpp:218
app::RuntimeSession::CapturePhase5Inspection(const std::optional<sim::PersistentId> focused_actor) constmethodInventory only; no authored contract note.src/app/runtime_phase5_inspection.cpp:9
Reject(RuntimePlayerActionRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_player_action.cpp:13
Accept(RuntimePlayerActionRequest request,std::string detail,const std::optional<game::PartyId> party=std::nullopt,const std::optional<game::IncidentId> incident=std::nullopt,const std::optional<game::ScoutingOrderId> scouting_order=std::nullopt)internal helperInventory only; no authored contract note.src/app/runtime_player_action.cpp:21
ApplyPartyControl(RuntimeSession & session,RuntimePlayerActionRequest request,const RuntimePartyControlOperation operation)internal helperInventory only; no authored contract note.src/app/runtime_player_action.cpp:35
DisbandParty(RuntimeSession & session,RuntimePlayerActionRequest request,const std::uint64_t command_sequence)internal helperInventory only; no authored contract note.src/app/runtime_player_action.cpp:60
PartyIsDirectlyControlled(const RuntimeSession & session,const game::PartyRecord & party)internal helperInventory only; no authored contract note.src/app/runtime_player_action.cpp:141
ResourceForRenewableKind(const RuntimeSession & session,const sim::RenewableResourceKind kind)internal helperInventory only; no authored contract note.src/app/runtime_player_action.cpp:151
IsSettlementInventoryAnchor(const RuntimeSession & session,const game::InventoryOwnerMarker owner)internal helperInventory only; no authored contract note.src/app/runtime_player_action.cpp:172
RecoverInterruptedExpeditionMember(RuntimeSession & session,const game::PartyRecord & party,const game::ScoutingOrderRecord & order,RuntimePlayerActionRequest request)internal helperInventory only; no authored contract note.src/app/runtime_player_action.cpp:181
AdvanceLiveExpedition(RuntimeSession & session,RuntimePlayerActionRequest request,const std::uint64_t command_sequence)internal helperInventory only; no authored contract note.src/app/runtime_player_action.cpp:232
app::ApplyRuntimePlayerAction(RuntimeSession & session,RuntimePlayerActionRequest request,const std::uint64_t command_sequence)free functionInventory only; no authored contract note.src/app/runtime_player_action.cpp:461
app::RuntimePlayerActionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_player_action.hpp:51
app::RuntimeSession::IssuePlayerAssignmentOrder(game::PlayerAssignmentOrderCommand command)methodInventory only; no authored contract note.src/app/runtime_player_assignment.cpp:10
app::RuntimeSession::CancelPlayerAssignmentOrder(game::PlayerAssignmentCancellationCommand command)methodInventory only; no authored contract note.src/app/runtime_player_assignment.cpp:92
app::RuntimeSession::SetPlayerWorkPriority(const game::JobId job,const std::uint64_t expected_job_revision,const std::uint16_t priority_basis_points,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/app/runtime_player_assignment.cpp:178
app::RuntimeSession::ProcessPlayerAssignmentOrders(const std::uint64_t tick,const std::vector<game::AssignmentOrderRecord> & queued_orders)methodInventory only; no authored contract note.src/app/runtime_player_assignment.cpp:191
IsOpenPlan(const game::ActorState & actor)internal helperInventory only; no authored contract note.src/app/runtime_player_attack.cpp:18
Reject(game::PlayerAttackValidationResult validation,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_player_attack.cpp:24
BuildCombatRetreatMove(const game::PlayerAttackOrderRecord & order,const sim::WorldRuntime & world,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/runtime_player_attack.cpp:35
app::RuntimePlayerAttackStatusName(const RuntimePlayerAttackStatus status)free functionInventory only; no authored contract note.src/app/runtime_player_attack.cpp:84
app::RuntimeSession::IssuePlayerAttackOrder(game::PlayerAttackOrderCommand command)methodInventory only; no authored contract note.src/app/runtime_player_attack.cpp:99
app::RuntimeSession::CancelPlayerAttackOrders(game::PlayerAttackCancellationCommand command)methodInventory only; no authored contract note.src/app/runtime_player_attack.cpp:215
app::RuntimeSession::AdvancePlayerAttackOrders(const std::uint64_t tick)methodInventory only; no authored contract note.src/app/runtime_player_attack.cpp:266
BaseAction(const RuntimePlayerWorkActionKind kind,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/runtime_player_command_snapshot.cpp:16
CanonicalSelectedActors(const game::ActorRuntime & actors,const std::span<const sim::PersistentId> selected)internal helperInventory only; no authored contract note.src/app/runtime_player_command_snapshot.cpp:25
SettlementScaleLabel(const std::size_t population)internal helperInventory only; no authored contract note.src/app/runtime_player_command_snapshot.cpp:39
CapturePartyControlSummary(const game::PartyRecord & party,const game::ControlAuthorityRuntime & control_authority)internal helperInventory only; no authored contract note.src/app/runtime_player_command_snapshot.cpp:53
app::RuntimeSession::CapturePlayerCommandSnapshot(const std::span<const sim::PersistentId> selected,const std::size_t maximum_work_targets) constmethodInventory only; no authored contract note.src/app/runtime_player_command_snapshot.cpp:97
app::RuntimePartyControlSummary::AllMembersDirectlyControlled() constinline methodInventory only; no authored contract note.src/app/runtime_player_command_snapshot.hpp:36
IsReplaceableControlPlan(const game::ActorState & actor)internal helperInventory only; no authored contract note.src/app/runtime_player_move.cpp:14
IsOpenMovePlan(const game::ActorState & actor)internal helperInventory only; no authored contract note.src/app/runtime_player_move.cpp:21
Reject(game::PlayerMoveValidationResult validation,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_player_move.cpp:28
RuntimeStatusFor(const game::PlayerMoveOrderState state)internal helperInventory only; no authored contract note.src/app/runtime_player_move.cpp:39
app::RuntimePlayerMoveStatusName(const RuntimePlayerMoveStatus status)free functionInventory only; no authored contract note.src/app/runtime_player_move.cpp:55
app::RuntimeSession::CancelPlayerMoveOwners(const std::vector<sim::PersistentId> & recipients,const game::PlayerMoveOrderOperationResult & operation,const std::uint64_t tick)methodInventory only; no authored contract note.src/app/runtime_player_move.cpp:72
app::RuntimeSession::ExecuteRetainedPlayerMoveOrder(const game::PlayerMoveOrderRecord & order,game::PlayerMoveValidationResult validation,game::PlayerMoveOrderOperationResult operation)methodInventory only; no authored contract note.src/app/runtime_player_move.cpp:134
app::RuntimeSession::IssuePlayerMoveOrder(game::PlayerMoveOrderCommand command)methodValidates one already directly controlled Actor or exact Party, applies replace-current or bounded queue policy through the durable move-order owner, starts the existing Actor or Party move path without changing control authority, and restores the complete runtime snapshot if a later owner rejects the transaction.src/app/runtime_player_move.cpp:323
app::RuntimeSession::CancelPlayerMoveOrders(game::PlayerMoveCancellationCommand command)methodCancels executing and queued movement for one exact recipient set, reconciles Actor, Party, and World owners atomically, and activates no successor after explicit cancellation.src/app/runtime_player_move.cpp:437
app::RuntimeSession::ReconcilePlayerMoveOrders(const std::uint64_t tick)methodCompletes arrived movement records and activates the next queued order in deterministic order through the same runtime owner path.src/app/runtime_player_move.cpp:480
Reject(RuntimePlayerSettlementActionRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_player_settlement_action.cpp:16
Accept(RuntimePlayerSettlementActionRequest request,std::string detail,const std::optional<game::ConstructionId> construction=std::nullopt,const std::optional<game::BuildingId> building=std::nullopt)internal helperInventory only; no authored contract note.src/app/runtime_player_settlement_action.cpp:28
Designate(RuntimeSession & session,RuntimePlayerSettlementActionRequest request)internal helperInventory only; no authored contract note.src/app/runtime_player_settlement_action.cpp:40
Upgrade(RuntimeSession & session,RuntimePlayerSettlementActionRequest request)internal helperInventory only; no authored contract note.src/app/runtime_player_settlement_action.cpp:97
Repair(RuntimeSession & session,RuntimePlayerSettlementActionRequest request)internal helperInventory only; no authored contract note.src/app/runtime_player_settlement_action.cpp:147
ActivateInfrastructure(RuntimeSession & session,RuntimePlayerSettlementActionRequest request)internal helperInventory only; no authored contract note.src/app/runtime_player_settlement_action.cpp:191
Expand(RuntimeSession & session,RuntimePlayerSettlementActionRequest request)internal helperInventory only; no authored contract note.src/app/runtime_player_settlement_action.cpp:236
Cancel(RuntimeSession & session,RuntimePlayerSettlementActionRequest request)internal helperInventory only; no authored contract note.src/app/runtime_player_settlement_action.cpp:260
app::ApplyRuntimePlayerSettlementAction(RuntimeSession & session,RuntimePlayerSettlementActionRequest request)free functionInventory only; no authored contract note.src/app/runtime_player_settlement_action.cpp:279
app::RuntimePlayerSettlementActionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_player_settlement_action.hpp:49
Reject(RuntimePlayerWorkActionRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_player_work_action.cpp:10
Accept(RuntimePlayerWorkActionRequest request,std::string detail,const std::optional<game::AssignmentOrderId> assignment_order=std::nullopt,const std::optional<game::PartyId> party=std::nullopt,const std::optional<game::ConstructionId> construction=std::nullopt,const std::optional<game::JobPriorityMutationResult> priority=std::nullopt)internal helperInventory only; no authored contract note.src/app/runtime_player_work_action.cpp:18
app::ApplyRuntimePlayerWorkAction(RuntimeSession & session,RuntimePlayerWorkActionRequest request,const std::uint64_t command_sequence)free functionInventory only; no authored contract note.src/app/runtime_player_work_action.cpp:36
app::RuntimePlayerWorkActionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_player_work_action.hpp:56
Reject(RuntimeRegisteredIncidentRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_registered_incident.cpp:12
Accept(RuntimeRegisteredIncidentRequest request,const game::IncidentOutcomeResolverKind resolver)internal helperInventory only; no authored contract note.src/app/runtime_registered_incident.cpp:21
app::RuntimeSession::ResolveRegisteredIncident(RuntimeRegisteredIncidentRequest request)methodInventory only; no authored contract note.src/app/runtime_registered_incident.cpp:33
app::RuntimeRegisteredIncidentResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_registered_incident.hpp:23
ConditionedBenefit(const std::uint16_t authored_basis_points,const std::uint16_t condition_basis_points)internal helperInventory only; no authored contract note.src/app/runtime_residence_composition.cpp:10
app::ComposeRuntimeResidence(const game::BuildingRecord & building,const game::ConstructionRuntime & construction,const sim::WorldTopology & topology,const sim::SiteId settlement_anchor,const assets::RuntimeContentCatalog & content,const std::uint64_t assigned_at_tick)free functionInventory only; no authored contract note.src/app/runtime_residence_composition.cpp:19
app::RuntimeResidenceCompositionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_residence_composition.hpp:18
RejectIssue(RuntimeScoutingOrderIssueRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_scouting_order.cpp:10
RejectCompletion(RuntimeScoutingOrderCompletionRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_scouting_order.cpp:15
ActorCanReportRoute(const sim::WorldRuntime & world,const sim::PersistentId actor,const sim::RouteSegmentId segment)internal helperInventory only; no authored contract note.src/app/runtime_scouting_order.cpp:23
ActorAtSite(const sim::WorldRuntime & world,const sim::PersistentId actor,const sim::SiteId site)internal helperInventory only; no authored contract note.src/app/runtime_scouting_order.cpp:29
app::RuntimeSession::IssueScoutingOrder(RuntimeScoutingOrderIssueRequest request)methodInventory only; no authored contract note.src/app/runtime_scouting_order.cpp:40
app::RuntimeSession::CompleteScoutingOrder(RuntimeScoutingOrderCompletionRequest request)methodInventory only; no authored contract note.src/app/runtime_scouting_order.cpp:109
TakeCandidate(std::optional<Value> & candidate)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:41
RetainOwner(std::optional<Value> & owner)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:48
ActorIds(const std::vector<game::ActorState> & actors)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:55
CapturePersistedCapacityUsage(const std::optional<std::vector<game::ActorState>> & actors,const std::optional<RuntimePhase3EconomyState> & economy)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:65
ResourceLimits(const game::ScenarioCapacityPolicy & policy)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:92
HouseholdIds(const game::HouseholdRuntimeState & households)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:100
JobIds(const game::WorkLifecycleState & work)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:109
IsLiveAssignmentOrder(const game::AssignmentOrderState state)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:118
IsOpenAttackOrder(const game::PlayerAttackOrderState state)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:123
ValidateBuildingInfrastructureBindings(const sim::WorldRuntimeState & world,const RuntimePhase3EconomyState & economy,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:128
ValidateSettlementBindings(const game::SettlementState & settlements,const std::vector<game::ActorState> & actors,const RuntimePhase3EconomyState & economy,const game::HouseholdRuntimeState & households,const sim::WorldTopology & topology,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:156
ValidateControlAuthorityBindings(const game::ControlAuthorityState & authority,const std::optional<RuntimePhase3EconomyState> & economy,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:321
ValidatePartyControlBindings(const game::PartyRegistryState & parties,const game::ControlAuthorityState & authority,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:377
ValidatePartyAssistBindings(const game::PartyRegistryState & parties,const RuntimePhase3EconomyState & economy,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:426
ValidatePlayerMoveBindings(const game::PlayerMoveOrderRegistryState & orders,const game::PartyRegistryState & parties,const game::ControlAuthorityState & authority,const game::ActorRuntime & actors,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:472
ValidatePlayerAttackBindings(const game::PlayerAttackOrderRegistryState & orders,const game::PartyRegistryState & parties,const game::ControlAuthorityState & authority,const game::ActorRuntime & actors,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:530
ValidateMemoryBindings(const game::MemoryRuntimeState & memories,const game::IntersectionLifecycleState & lifecycle,const std::vector<game::ActorState> & actors,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:586
ValidateReputationBindings(const game::ReputationRuntimeState & reputations,const game::MemoryRuntimeState & memories,const game::IntersectionLifecycleState & lifecycle,const game::HouseholdRuntimeState & households,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:671
ValidateRelationshipBindings(const game::RelationshipRuntimeState & relationships,const game::MemoryRuntimeState & memories,const game::IntersectionLifecycleState & lifecycle,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:731
ValidateHouseholdBindings(const game::HouseholdRuntimeState & households,const game::MemoryRuntimeState & memories,const game::IntersectionLifecycleState & lifecycle,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:792
ValidateActorLearnedTendencyBindings(const std::vector<game::ActorState> & actors,const game::MemoryRuntimeState & memories,const game::IntersectionLifecycleState & lifecycle,const sim::WorldRuntime & world,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:883
ComposePhase3EconomyState(const RuntimePhase3EconomyState & economy,const sim::WorldRuntime & world,const game::ActorRuntime & actors)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:936
ComposeAuthoredEconomy(const game::RuntimeEconomyDefinition & authored,const assets::RuntimeContentCatalog & content_catalog,const sim::WorldRuntime & world,const game::ActorRuntime & actors,const game::ResourceCapacityLimits & capacity_limits,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:959
ComposeAuthoredProduction(const game::RuntimeEconomyDefinition & authored,const assets::RuntimeContentCatalog & content_catalog,const game::ResourceEconomyRuntime & resources,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:1517
ComposeDefaultSettlement(const sim::WorldRuntime & world,const game::ActorRuntime & actors,const game::WorkLifecycleRuntime & work,const game::ResourceEconomyRuntime & resources,const game::ConstructionRuntime & construction,const game::HouseholdRuntime & households,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/runtime_session.cpp:1570
app::RuntimeSession::RuntimeSession(game::RuntimeScenario scenario,const game::RuntimeScene & scene,std::optional<game::RuntimeWorldSession> phase1_world,std::optional<game::RuntimeActorRoster> phase2_actors,std::optional<RuntimePhase3EconomyState> phase3_economy,std::optional<game::RuntimeEconomyDefinition> authored_economy,std::optional<game::RuntimeIncidentCatalog> incident_catalog,RuntimeTuningState tuning,std::shared_ptr<const assets::RuntimeContentCatalog> content_catalog,std::optional<game::RuntimeSettlementDefinition> settlement_definition)methodValidates the typed scenario and scene reference, builds mutable ECS state from the authored scene, constructs the fixed-step scheduler, and retains the available phase-owned runtimes without taking their rules.src/app/runtime_session.cpp:1620
app::RuntimeSession::ApplyCommands(const std::span<const core::RuntimeCommand> commands)methodInventory only; no authored contract note.src/app/runtime_session.cpp:2055
app::RuntimeSession::AdvanceFrame(const std::chrono::nanoseconds frame_delta)methodAdvances the fixed-step scheduler for one frame and runs the ordered ECS systems exactly once for every tick the scheduler commits.src/app/runtime_session.cpp:2059
app::RuntimeSession::AdvanceOneTick()methodCommits at most one scheduler tick and runs exactly one ordered ECS tick when the scheduler accepts it.src/app/runtime_session.cpp:2068
app::RuntimeSession::AdvanceTicks(const std::uint64_t tick_budget)methodCommits a bounded explicit tick budget through the scheduler and runs the ordered ECS systems once for each accepted tick without changing pause state.src/app/runtime_session.cpp:2076
app::RuntimeSession::ApplyHeatTransition(const sim::HeatTransitionRequest request)methodApplies a world heat transition, reconciles the Phase 2 actor schedule through its Game owner, and restores captured runtime state if reconciliation fails.src/app/runtime_session.cpp:2083
app::RuntimeSession::RecordFrame(const sim::FrameMetrics metrics)methodInventory only; no authored contract note.src/app/runtime_session.cpp:2118
app::RuntimeSession::Complete() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2122
app::RuntimeSession::QuitRequested() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2124
app::RuntimeSession::CurrentTick() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2126
app::RuntimeSession::ScenarioSeed() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2128
app::RuntimeSession::ScriptCommands()methodInventory only; no authored contract note.src/app/runtime_session.cpp:2130
app::RuntimeSession::ScriptCommands() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2132
app::RuntimeSession::ScriptEvents()methodInventory only; no authored contract note.src/app/runtime_session.cpp:2136
app::RuntimeSession::ScriptEvents() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2138
app::RuntimeSession::Tuning() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2140
app::RuntimeSession::MovementTuning() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2142
app::RuntimeSession::CapacityPolicy() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2151
app::RuntimeSession::CaptureCapacityUsage() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2155
app::RuntimeSession::CaptureCapacitySnapshot() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2180
app::RuntimeSession::ApplyCapacityPolicyPatch(const ScenarioCapacityPolicyPatch & patch)methodInventory only; no authored contract note.src/app/runtime_session.cpp:2185
app::RuntimeSession::CapacityResourceLimits() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2208
app::RuntimeSession::ConstructionTuning() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2212
app::RuntimeSession::ApplyTuningPatch(const RuntimeTuningPatch & patch)methodInventory only; no authored contract note.src/app/runtime_session.cpp:2221
app::RuntimeSession::Snapshot() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2225
app::RuntimeSession::World() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2227
app::RuntimeSession::ReconcileWorldResidency(const std::span<const sim::ChunkResidencyInterest> interests)methodInventory only; no authored contract note.src/app/runtime_session.cpp:2229
app::RuntimeSession::Phase1World() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2239
app::RuntimeSession::Phase1ObserverKnowledge() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2243
app::RuntimeSession::Phase2Actors() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2247
app::RuntimeSession::Phase4ControlAuthority() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2251
app::RuntimeSession::Phase4Parties() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2255
app::RuntimeSession::Phase4IntersectionCandidates() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2260
app::RuntimeSession::Phase4IntersectionOccurrence() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2265
app::RuntimeSession::Phase4IntersectionIncidentSelection() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2270
app::RuntimeSession::Phase4IntersectionPresentation() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2276
app::RuntimeSession::Phase4IntersectionLifecycle() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2281
app::RuntimeSession::Phase4IntersectionSchedule() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2286
app::RuntimeSession::Phase4ScoutingOrders() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2290
app::RuntimeSession::Phase4PlayerMoveOrders() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2294
app::RuntimeSession::Phase4PlayerAttackOrders() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2298
app::RuntimeSession::Phase5Memories() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2302
app::RuntimeSession::Phase5Relationships() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2306
app::RuntimeSession::Phase5Households() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2310
app::RuntimeSession::AssignHouseholdResidence(RuntimeResidenceAssignmentRequest request)methodInventory only; no authored contract note.src/app/runtime_session.cpp:2315
app::RuntimeSession::ReleaseHouseholdResidence(game::HouseholdResidenceReleaseRequest request)methodInventory only; no authored contract note.src/app/runtime_session.cpp:2396
app::RuntimeSession::ApplyResidenceNeedRelief(const sim::PersistentId actor,const std::uint64_t expected_actor_revision,const game::ActorFocus focus,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/app/runtime_session.cpp:2406
app::RuntimeSession::ApplyCompletedWorkProgression(const RuntimeActorWorkProgressionRequest request)methodInventory only; no authored contract note.src/app/runtime_session.cpp:2486
app::RuntimeSession::ApplyBuildingInfrastructure(RuntimeBuildingInfrastructureRequest request)methodInventory only; no authored contract note.src/app/runtime_session.cpp:2504
app::RuntimeSession::RemoveBuildingInfrastructure(const RuntimeBuildingInfrastructureRemovalRequest request)methodInventory only; no authored contract note.src/app/runtime_session.cpp:2613
app::RuntimeSession::Phase5Reputations() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2637
app::RuntimeSession::Phase7Settlements() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2641
app::RuntimeSession::Phase9Production() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2645
app::RuntimeSession::Phase9Trade() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2649
app::RuntimeSession::Phase9RegionalEconomy() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2653
app::RuntimeSession::Phase11IncidentCatalog() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2657
app::RuntimeSession::ContentCatalog() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2661
app::RuntimeSession::SettlementDefinition() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2665
app::RuntimeSession::Phase11StructuredQuests() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2669
app::RuntimeSession::Phase11InstitutionalRequests() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2674
app::RuntimeSession::Phase11EventConsequences() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2679
app::RuntimeSession::Phase12Factions() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2683
app::RuntimeSession::Phase3Work() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2687
app::RuntimeSession::Phase3Resources() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2691
app::RuntimeSession::Phase3Supply() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2695
app::RuntimeSession::Phase3Construction() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2699
app::RuntimeSession::Phase3LandConversions() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2703
app::RuntimeSession::Phase3InfrastructureConstruction() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2710
app::RuntimeSession::Phase3InfrastructureConstructionScheduler() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2717
app::RuntimeSession::CancelInfrastructureConstruction(const sim::LocalInfrastructureId infrastructure,const std::uint64_t expected_revision,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/app/runtime_session.cpp:2725
app::RuntimeSession::RequestInfrastructureMaintenance(const game::SettlementId settlement,const sim::LocalInfrastructureId infrastructure,const game::InfrastructureConstructionPurpose purpose,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/app/runtime_session.cpp:2744
app::RuntimeSession::SetInfrastructureAccessPolicy(const sim::LocalInfrastructureId infrastructure,const std::uint64_t expected_revision,const std::string_view access_policy_id,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/app/runtime_session.cpp:2765
app::RuntimeSession::Phase3Farming() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2781
app::RuntimeSession::Phase3SettlementSupplyScheduler() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2787
app::RuntimeSession::Phase3ConstructionWorkScheduler() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2794
app::RuntimeSession::Phase3JobWork() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2800
app::RuntimeSession::Phase3JobPreferenceTraces() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2805
app::RuntimeSession::CapturePhase3EconomyState() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2809
app::RuntimeSession::SceneAssetId() constmethodReturns the stable asset ID used to build this session's world, or an empty view for a scenario without a scene.src/app/runtime_session.cpp:2842
app::RuntimeSession::ResultLine() constmethodInventory only; no authored contract note.src/app/runtime_session.cpp:2849
app::RuntimeSession::CaptureState() constmethodCopies the scenario plus detached ECS and scheduler values into one RuntimeSession state.src/app/runtime_session.cpp:2854
app::RuntimeSession::RestoreState(const RuntimeSessionState & state,std::string & error)methodValidates all runtime-session values, restores ECS and scheduler owners into temporary objects, and commits the session only after both succeed.src/app/runtime_session.cpp:2955
app::RuntimeSession::ValidateState(const RuntimeSessionState & state,std::string & error)methodRuns Game and Simulation validators and requires scheduler fixed-step and tick-limit settings to match the scenario.src/app/runtime_session.cpp:3428
app::RuntimeSession::SynchronizeConstructionNavigation(const bool hydrate_retained_moves)methodInventory only; no authored contract note.src/app/runtime_session.cpp:4108
app::RuntimeSession::RunWorldTicks(const std::uint64_t tick_count)methodRuns the Simulation-owned fixed ECS system order once per committed scheduler tick using the scenario's fixed-step duration.src/app/runtime_session.cpp:4124
app::RuntimeSettlementConstructionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:133
app::RuntimeSettlementSpatialInfrastructureResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:156
app::RuntimeSettlementSpatialLandResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:174
app::RuntimeSettlementSupplyPortfolioResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:186
app::RuntimeSettlementProductionDecisionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:198
app::RuntimeSettlementUpgradeResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:214
app::RuntimeSettlementHousingExecutionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:237
app::RuntimeSettlementCancellationResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:250
app::RuntimeSettlementDefenseResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:270
app::RuntimeSettlementDefenseClearResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:281
app::RuntimeFactionPressureResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:297
app::RuntimeHeatTransitionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:361
app::RuntimePlayerAssignmentOrderResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:370
app::RuntimePlayerAssignmentOrderResult::Activated() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:371
app::RuntimePlayerAssignmentCancellationResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:382
app::RuntimeActorControlTransitionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:393
app::RuntimePartyControlResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:420
app::RuntimePartyMoveMemberResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:430
app::RuntimePartyMoveResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:442
app::RuntimePlayerMoveResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:465
app::RuntimePlayerMoveCancellationResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:477
app::RuntimePlayerAttackResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:499
app::RuntimePlayerAttackCancellationResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:511
app::RuntimePartyAssistResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:526
app::RuntimeIntersectionCandidateResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:554
app::RuntimeIntersectionOccurrenceResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:572
app::RuntimeIntersectionIncidentSelectionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:588
app::RuntimeIntersectionPresentationResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:614
app::RuntimeIntersectionProposalResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:630
app::RuntimeWildlifeIncidentResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:652
app::RuntimeWildlifeRecoveryResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:679
app::RuntimeTravelerDisputeResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:704
app::RuntimeScoutingOrderIssueResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:733
app::RuntimeScoutingOrderCompletionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session.hpp:751
Failure(std::string error)internal helperInventory only; no authored contract note.src/app/runtime_session_candidate.cpp:11
MatchesAuthoredScenario(const game::RuntimeScenario & saved,const game::RuntimeScenario & authored)internal helperInventory only; no authored contract note.src/app/runtime_session_candidate.cpp:18
app::LoadRuntimeSessionCandidate(const RuntimeSessionCandidateSource source,std::string scenario_id,const std::optional<std::uint64_t> seed_override,assets::AssetService & asset_service,const SessionSaveStore & save_store)free functionInventory only; no authored contract note.src/app/runtime_session_candidate.cpp:33
app::RuntimeSessionCandidateResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_session_candidate.hpp:47
RejectConstruction(std::string error)internal helperInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:11
RejectUpgrade(std::string error)internal helperInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:20
RejectCancellation(std::string error)internal helperInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:24
BundleCapacity(const game::ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:28
PrepareConstructionContainers(game::ConstructionCreateRequest & request,game::ResourceEconomyRuntime & resources,const game::ResourceCapacityLimits & limits,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:39
PrepareRenewalContainer(game::ConstructionRenewalRequest & request,game::ResourceEconomyRuntime & resources,const game::ResourceCapacityLimits & limits,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:87
app::RuntimeSession::DesignateSettlementConstruction(RuntimeSettlementConstructionRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:114
app::RuntimeSession::DesignateSettlementSpatialInfrastructure(RuntimeSettlementSpatialInfrastructureRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:291
app::RuntimeSession::DesignateSettlementSpatialLand(RuntimeSettlementSpatialLandRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:383
app::RuntimeSession::ReconcileSettlementSpatialExecution(const game::SettlementId settlement_id,const game::SettlementSpatialExecutionId execution_id,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:434
app::RuntimeSession::RecordSettlementProjectDecision(game::SettlementProjectDecisionRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:549
app::RuntimeSession::RecordSettlementSpatialPortfolio(game::SettlementSpatialPortfolioRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:566
app::RuntimeSession::BindSettlementSpatialExecution(game::SettlementSpatialExecutionBindRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:582
app::RuntimeSession::RecordSettlementNeedAssessment(game::SettlementNeedAssessmentRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:600
app::RuntimeSession::RecordSettlementGoalPortfolio(game::SettlementGoalPortfolioRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:617
app::RuntimeSession::RecordSettlementDependencyPlan(game::SettlementDependencyPlanRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:634
app::RuntimeSession::RecordSettlementRequirementOutcome(game::SettlementRequirementOutcomeRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:650
app::RuntimeSession::ApplySettlementSupplyPortfolio(game::SettlementSupplyPortfolioRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:668
app::RuntimeSession::ApplySettlementProductionDecision(game::SettlementProductionDecisionRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:766
app::RuntimeSession::RecordSettlementEnterprisePortfolio(game::SettlementEnterprisePortfolioRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:843
app::RuntimeSession::ReconcileSettlementEnterpriseBinding(game::SettlementEnterpriseBindingRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:954
app::RuntimeSession::ReconcileSettlementProjectOutcome(game::SettlementProjectOutcomeRequest request)methodChecks the supplied Construction against the current runtime owner, applies Settlement reconciliation on a candidate, and replaces Settlement only after acceptance.src/app/runtime_settlement_actions.cpp:982
app::RuntimeSession::UpgradeSettlementBuilding(RuntimeSettlementUpgradeRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:1005
app::RuntimeSession::StartSettlementMaintenance(SettlementMaintenanceRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:1063
app::RuntimeSession::CancelSettlementConstruction(const RuntimeSettlementCancellationRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:1102
app::RuntimeSession::ExpandSettlement(game::SettlementExpansionRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:1158
app::RuntimeSession::RaiseSettlementDefense(const RuntimeSettlementDefenseRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:1177
app::RuntimeSession::ClearSettlementDefense(game::SettlementDefenseClearRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_actions.cpp:1248
HasAvailableBundle(const game::ResourceEconomyRuntime & resources,const game::InventoryContainerId container,const game::ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/app/runtime_settlement_construction_template.cpp:13
BundleUnits(const std::span<const assets::ContentResourceQuantity> quantities)internal helperInventory only; no authored contract note.src/app/runtime_settlement_construction_template.cpp:21
app::ResolveSettlementConstructionTemplate(const RuntimeSession & session,const game::SettlementRecord & settlement,const std::string_view building_definition_id,std::string & error)free functionInventory only; no authored contract note.src/app/runtime_settlement_construction_template.cpp:34
app::NextSettlementConstructionIdentity(const RuntimeSession & session)free functionInventory only; no authored contract note.src/app/runtime_settlement_construction_template.cpp:90
Reject(std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_settlement_development.cpp:25
SaturatingAdd(const std::uint64_t left,const std::uint64_t right)internal helperInventory only; no authored contract note.src/app/runtime_settlement_development.cpp:37
RatioBasisPoints(const std::uint64_t numerator,const std::uint64_t denominator)internal helperInventory only; no authored contract note.src/app/runtime_settlement_development.cpp:43
AddCellOffset(const std::int64_t origin,const std::int32_t offset)internal helperInventory only; no authored contract note.src/app/runtime_settlement_development.cpp:53
AxisDistance(const std::int64_t left,const std::int64_t right)internal helperInventory only; no authored contract note.src/app/runtime_settlement_development.cpp:61
FootprintAvailable(const RuntimeSession & session,const game::SettlementRecord & settlement,const game::AuthoredSettlementProjectCandidate & candidate,const assets::ContentBuildingDefinition & building)internal helperInventory only; no authored contract note.src/app/runtime_settlement_development.cpp:73
DestinationReachable(const RuntimeSession & session,const game::SettlementRecord & settlement,const game::AuthoredSettlementProjectCandidate & candidate)internal helperInventory only; no authored contract note.src/app/runtime_settlement_development.cpp:110
EstimateLaborCostTicks(const std::uint64_t required_work_units,const game::ConstructionWorkTuning tuning)internal helperInventory only; no authored contract note.src/app/runtime_settlement_development.cpp:123
IneligibilityDetail(const game::SettlementProjectIneligibility ineligibility)internal helperInventory only; no authored contract note.src/app/runtime_settlement_development.cpp:137
DecisionDetail(const game::SettlementProjectEvaluationStatus status)internal helperInventory only; no authored contract note.src/app/runtime_settlement_development.cpp:164
RetainDecision(const game::RuntimeSettlementDefinition & definition,const game::SettlementProjectDecisionResult & evaluated,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/runtime_settlement_development.cpp:182
app::AdvanceRuntimeSettlementDevelopment(RuntimeSession & session,const std::uint64_t tick)free functionInventory only; no authored contract note.src/app/runtime_settlement_development.cpp:252
app::RuntimeSettlementDevelopmentResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_settlement_development.hpp:32
Terminal(const game::TradeShipmentStage stage)internal helperInventory only; no authored contract note.src/app/runtime_settlement_enterprise.cpp:13
Terminal(const game::ProductionStage stage)internal helperInventory only; no authored contract note.src/app/runtime_settlement_enterprise.cpp:19
CommitmentStatus(const game::ProductionStage stage)internal helperInventory only; no authored contract note.src/app/runtime_settlement_enterprise.cpp:25
CommitmentStatus(const game::TradeShipmentStage stage)internal helperInventory only; no authored contract note.src/app/runtime_settlement_enterprise.cpp:39
ContainerValue(const game::InventoryContainerRecord & container)internal helperInventory only; no authored contract note.src/app/runtime_settlement_enterprise.cpp:52
SettlementHouseholdWealth(const game::SettlementRecord & settlement,const game::ResourceEconomyRuntime & resources)internal helperInventory only; no authored contract note.src/app/runtime_settlement_enterprise.cpp:64
EligibleLabor(const game::SettlementRecord & settlement,const game::ActorRuntime & actors,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/runtime_settlement_enterprise.cpp:82
LatestShipment(const game::TradeRuntime & trade,const game::AuthoredSettlementTradeOpportunity & opportunity,const game::ResourceId resource)internal helperInventory only; no authored contract note.src/app/runtime_settlement_enterprise.cpp:99
RestoreBinding(const game::SettlementRecord & settlement,game::SettlementEnterpriseCandidateFact & candidate)internal helperInventory only; no authored contract note.src/app/runtime_settlement_enterprise.cpp:119
HouseholdCost(const game::SettlementRecord & settlement)internal helperInventory only; no authored contract note.src/app/runtime_settlement_enterprise.cpp:139
app::AdvanceRuntimeSettlementEnterprise(RuntimeSession & session,const std::uint64_t tick)free functionInventory only; no authored contract note.src/app/runtime_settlement_enterprise.cpp:150
app::ReconcileRuntimeSettlementEnterprise(RuntimeSession & session,const std::uint64_t tick)free functionInventory only; no authored contract note.src/app/runtime_settlement_enterprise.cpp:347
app::RuntimeSettlementEnterpriseUpdateResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_settlement_enterprise.hpp:19
NeedStrength(const game::SettlementRecord & settlement,const game::SettlementNeedDomain domain)internal helperInventory only; no authored contract note.src/app/runtime_settlement_goals.cpp:15
Mix(std::uint64_t value)internal helperInventory only; no authored contract note.src/app/runtime_settlement_goals.cpp:26
StableKeyHash(const std::string_view value)internal helperInventory only; no authored contract note.src/app/runtime_settlement_goals.cpp:34
FounderPrioritySupport(const RuntimeSession & session,const game::SettlementId settlement,const game::AuthoredSettlementGoalPolicy & policy,const game::AuthoredSettlementGoalCandidate & candidate)internal helperInventory only; no authored contract note.src/app/runtime_settlement_goals.cpp:43
app::AdvanceRuntimeSettlementGoals(RuntimeSession & session,const std::uint64_t tick)free functionInventory only; no authored contract note.src/app/runtime_settlement_goals.cpp:62
app::RuntimeSettlementGoalUpdateResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_settlement_goals.hpp:20
Reject(std::string error)internal helperInventory only; no authored contract note.src/app/runtime_settlement_housing.cpp:16
BundleCapacity(const game::ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/app/runtime_settlement_housing.cpp:26
ScaleBasisPoints(const std::uint64_t value,const std::uint16_t basis_points)internal helperInventory only; no authored contract note.src/app/runtime_settlement_housing.cpp:37
ParseOrientation(const std::string_view variant)internal helperInventory only; no authored contract note.src/app/runtime_settlement_housing.cpp:45
ParcelVariants(const assets::ContentBuildingDefinition & building)internal helperInventory only; no authored contract note.src/app/runtime_settlement_housing.cpp:58
ResolveHousingTemplate(const RuntimeSession & session,const game::SettlementRecord & settlement,const game::SettlementHousingMethodOptionRecord & method,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_settlement_housing.cpp:97
ExecutionRecord(const game::SettlementHousingMethodOptionRecord & method,const std::optional<game::SettlementHousingParcelOptionRecord> & parcel,const std::uint64_t method_evaluation_tick,const std::uint64_t parcel_evaluation_tick,const game::SettlementHousingExecutionStatus status,const std::optional<game::ConstructionId> construction,const std::optional<game::BuildingId> resulting_building,const std::uint64_t owner_revision,std::string detail,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/runtime_settlement_housing.cpp:167
app::RuntimeSession::ApplySettlementHousingExecution(RuntimeSettlementHousingExecutionRequest request)methodInventory only; no authored contract note.src/app/runtime_settlement_housing.cpp:198
app::RuntimeSession::ReconcileSettlementHousingExecution(const game::SettlementId settlement_id,const game::SettlementHousingExecutionId execution_id,const std::uint64_t tick)methodInventory only; no authored contract note.src/app/runtime_settlement_housing.cpp:522
app::AdvanceRuntimeSettlementHousing(RuntimeSession & session,const std::uint64_t tick)free functionInventory only; no authored contract note.src/app/runtime_settlement_housing.cpp:639
app::RuntimeSettlementHousingUpdateResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_settlement_housing.hpp:19
SaturatingAdd(const std::uint64_t left,const std::uint64_t right)internal helperInventory only; no authored contract note.src/app/runtime_settlement_needs.cpp:22
SaturatingMultiply(const std::uint64_t left,const std::uint64_t right)internal helperInventory only; no authored contract note.src/app/runtime_settlement_needs.cpp:28
ScaleBasisPoints(const std::uint64_t value,const std::uint16_t basis_points)internal helperInventory only; no authored contract note.src/app/runtime_settlement_needs.cpp:34
NegativeForecast(const std::uint64_t quantity)internal helperInventory only; no authored contract note.src/app/runtime_settlement_needs.cpp:41
HashValue(std::uint64_t & hash,const std::uint64_t value)internal helperInventory only; no authored contract note.src/app/runtime_settlement_needs.cpp:47
SourceStamp(const game::SettlementNeedSourceOwner owner,const std::uint64_t revision,const std::uint64_t count,const std::uint64_t hash)internal helperInventory only; no authored contract note.src/app/runtime_settlement_needs.cpp:55
RatioBasisPoints(const std::uint64_t numerator,const std::uint64_t denominator)internal helperInventory only; no authored contract note.src/app/runtime_settlement_needs.cpp:64
CellDistance(const sim::WorldCellCoordinate left,const sim::WorldCellCoordinate right)internal helperInventory only; no authored contract note.src/app/runtime_settlement_needs.cpp:73
ProximityBasisPoints(const sim::WorldCellCoordinate origin,const std::vector<sim::WorldCellCoordinate> & targets,const std::uint32_t radius_cells,std::size_t & remaining_cell_visits)internal helperInventory only; no authored contract note.src/app/runtime_settlement_needs.cpp:92
NeighboringLandProximityBasisPoints(const sim::WorldCellCoordinate origin,const std::vector<sim::WorldLandArea> & areas,const std::vector<std::string> & eligible_land_use_ids,const sim::WorldLandAreaId excluded_area,const std::uint32_t radius_cells,std::size_t & remaining_cell_visits)internal helperInventory only; no authored contract note.src/app/runtime_settlement_needs.cpp:113
ParcelFootprintVariants(const assets::ContentBuildingDefinition & building)internal helperInventory only; no authored contract note.src/app/runtime_settlement_needs.cpp:139
app::AdvanceRuntimeSettlementNeeds(RuntimeSession & session,const std::uint64_t tick)free functionInventory only; no authored contract note.src/app/runtime_settlement_needs.cpp:176
app::RuntimeSettlementNeedUpdateResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_settlement_needs.hpp:20
ResolveReadyFact(const RuntimeSession & session,const game::SettlementRecord & settlement,const game::SettlementPlanRequirementRecord & requirement)internal helperInventory only; no authored contract note.src/app/runtime_settlement_plans.cpp:15
ObserveBoundRequirement(const RuntimeSession & session,const game::SettlementRecord & settlement,const game::SettlementPlanRecord & plan,const game::SettlementPlanRequirementRecord & requirement,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/runtime_settlement_plans.cpp:182
app::AdvanceRuntimeSettlementPlans(RuntimeSession & session,const std::uint64_t tick)free functionInventory only; no authored contract note.src/app/runtime_settlement_plans.cpp:263
app::RuntimeSettlementPlanUpdateResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_settlement_plans.hpp:22
Terminal(const game::ProductionStage stage)internal helperInventory only; no authored contract note.src/app/runtime_settlement_production.cpp:14
Terminal(const game::SupplyStage stage)internal helperInventory only; no authored contract note.src/app/runtime_settlement_production.cpp:19
ActiveDirectSupplyCount(const game::SettlementSupplyRuntime & supplies,const game::ResourceEconomyRuntime & resources,const game::AuthoredSettlementSupplyPolicy * supply_policy,const game::AuthoredSettlementProductionOpportunity & opportunity)internal helperInventory only; no authored contract note.src/app/runtime_settlement_production.cpp:25
FindOperationalBuilding(const game::ConstructionRuntime & construction,const std::string_view definition_id)internal helperInventory only; no authored contract note.src/app/runtime_settlement_production.cpp:59
LatestOrderFor(const game::ProductionRuntime & production,const game::ProductionRecipeId recipe,const game::BuildingId building)internal helperInventory only; no authored contract note.src/app/runtime_settlement_production.cpp:72
HouseholdGoodsQuantity(const game::HouseholdRuntime & households,const game::ResourceEconomyRuntime & resources,const game::ResourceId resource)internal helperInventory only; no authored contract note.src/app/runtime_settlement_production.cpp:84
EligibleLaborCount(const game::ActorRuntime & actors,const game::SettlementRecord & settlement,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/runtime_settlement_production.cpp:102
GoalSupport(const game::SettlementRecord & settlement,const std::string_view opportunity_key)internal helperInventory only; no authored contract note.src/app/runtime_settlement_production.cpp:118
NeedSupport(const game::SettlementRecord & settlement,const game::AuthoredSettlementProductionOpportunity & opportunity)internal helperInventory only; no authored contract note.src/app/runtime_settlement_production.cpp:143
RouteToBuilding(const sim::WorldRuntime & world,const game::ConstructionRuntime & construction,const game::AuthoredInventoryAnchor & source,const game::BuildingRecord & building)internal helperInventory only; no authored contract note.src/app/runtime_settlement_production.cpp:164
ReservedCapacity(const game::ProductionRuntime & production,const game::BuildingId building)internal helperInventory only; no authored contract note.src/app/runtime_settlement_production.cpp:204
app::AdvanceRuntimeSettlementProduction(RuntimeSession & session,const std::uint64_t tick)free functionInventory only; no authored contract note.src/app/runtime_settlement_production.cpp:224
app::RuntimeSettlementProductionUpdateResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_settlement_production.hpp:21
AddSaturating(const std::uint64_t first,const std::uint64_t second)internal helperInventory only; no authored contract note.src/app/runtime_settlement_spatial_growth.cpp:49
BundleQuantity(const game::ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/app/runtime_settlement_spatial_growth.cpp:55
ResourceRevision(const game::ResourceEconomyRuntime & resources)internal helperInventory only; no authored contract note.src/app/runtime_settlement_spatial_growth.cpp:61
InfrastructureRevision(const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/app/runtime_settlement_spatial_growth.cpp:70
ActiveCompetingWork(const RuntimeSession & session)internal helperInventory only; no authored contract note.src/app/runtime_settlement_spatial_growth.cpp:78
OrientationForVariant(const std::string_view id)internal helperInventory only; no authored contract note.src/app/runtime_settlement_spatial_growth.cpp:98
ParcelVariants(const RuntimeSettlementConstructionTemplate & construction)internal helperInventory only; no authored contract note.src/app/runtime_settlement_spatial_growth.cpp:110
ResolveBundle(const std::vector<game::AuthoredSettlementSpatialResourceAmount> & authored,const game::ResourceEconomyRuntime & resources)internal helperInventory only; no authored contract note.src/app/runtime_settlement_spatial_growth.cpp:140
RequiredCapacity(const game::AuthoredSettlementSpatialMethod & method,const std::size_t population)internal helperInventory only; no authored contract note.src/app/runtime_settlement_spatial_growth.cpp:153
MatchesService(const game::BuildingFunction function,const game::SettlementSpatialServiceKind service)internal helperInventory only; no authored contract note.src/app/runtime_settlement_spatial_growth.cpp:160
PhysicalAnchors(const RuntimeSession & session,const game::SettlementRecord & settlement)internal helperInventory only; no authored contract note.src/app/runtime_settlement_spatial_growth.cpp:173
Districts(const RuntimeSession & session,const game::SettlementRecord & settlement,const DistrictPolicy policy)internal helperInventory only; no authored contract note.src/app/runtime_settlement_spatial_growth.cpp:216
Execution(const game::SettlementSpatialOptionRecord & option,const game::SettlementSpatialPortfolioRecord & portfolio,const game::SettlementSpatialExecutionStatus status,std::string detail,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/runtime_settlement_spatial_growth.cpp:306
app::AdvanceRuntimeSettlementSpatialGrowth(RuntimeSession & session,const std::uint64_t tick)free functionInventory only; no authored contract note.src/app/runtime_settlement_spatial_growth.cpp:322
app::RuntimeSettlementSpatialGrowthUpdateResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_settlement_spatial_growth.hpp:20
Terminal(const game::SupplyStage stage)internal helperInventory only; no authored contract note.src/app/runtime_settlement_supply.cpp:13
UsedCapacity(const game::InventoryContainerRecord & container)internal helperInventory only; no authored contract note.src/app/runtime_settlement_supply.cpp:18
FindNeed(const game::SettlementRecord & settlement,const game::SettlementNeedDomain domain)internal helperInventory only; no authored contract note.src/app/runtime_settlement_supply.cpp:29
HasActiveResourcePlan(const game::SettlementRecord & settlement)internal helperInventory only; no authored contract note.src/app/runtime_settlement_supply.cpp:39
DuplicateSupply(const game::SettlementSupplyRuntime & supplies,const game::SettlementSupplyCandidateInput & candidate)internal helperInventory only; no authored contract note.src/app/runtime_settlement_supply.cpp:54
MaximumRouteDanger(const sim::WorldRuntime & world,const sim::RouteQueryResult & route)internal helperInventory only; no authored contract note.src/app/runtime_settlement_supply.cpp:66
app::AdvanceRuntimeSettlementSupply(RuntimeSession & session,const std::uint64_t tick)free functionInventory only; no authored contract note.src/app/runtime_settlement_supply.cpp:78
app::RuntimeSettlementSupplyUpdateResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_settlement_supply.hpp:22
TakeCandidate(std::optional<Value> & candidate)internal helperInventory only; no authored contract note.src/app/runtime_structured_event_consequence.cpp:14
Reject(std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_structured_event_consequence.cpp:21
FindResource(const game::ResourceEconomyRuntime & resources,const std::string_view key)internal helperInventory only; no authored contract note.src/app/runtime_structured_event_consequence.cpp:30
FindIncidentMemory(const game::MemoryRuntime & memories,const sim::PersistentId holder,const game::IncidentId incident)internal helperInventory only; no authored contract note.src/app/runtime_structured_event_consequence.cpp:37
app::ValidateStructuredEventConsequenceBindings(const game::StructuredEventConsequenceState & state,const game::StructuredQuestRuntime & quests,const game::InstitutionalRequestRuntime & institutions,const game::WorkLifecycleRuntime * const work,const game::TradeRuntime * const trade,const game::RelationshipRuntime & relationships,const game::MemoryRuntime & memories,const sim::WorldRuntime & world,std::string & error)free functionInventory only; no authored contract note.src/app/runtime_structured_event_consequence.cpp:50
app::RuntimeSession::ApplyStructuredQuestConsequences(const RuntimeQuestConsequenceRequest request)methodInventory only; no authored contract note.src/app/runtime_structured_event_consequence.cpp:107
app::RuntimeSession::ApplyInstitutionalObligationConsequences(const RuntimeInstitutionalConsequenceRequest request)methodInventory only; no authored contract note.src/app/runtime_structured_event_consequence.cpp:245
app::RuntimeStructuredEventConsequenceResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_structured_event_consequence.hpp:38
RejectQuest(std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_structured_quest.cpp:12
ActorAtSite(const sim::WorldRuntime & world,const sim::PersistentId actor,const sim::SiteId site)internal helperInventory only; no authored contract note.src/app/runtime_structured_quest.cpp:22
QuestTemplate(const game::RuntimeIncidentCatalog * catalog,const game::StructuredQuestRecord & quest)internal helperInventory only; no authored contract note.src/app/runtime_structured_quest.cpp:33
app::ValidateStructuredQuestBindings(const game::StructuredQuestStateData & quests,const std::span<const game::ActorState> actors,const sim::WorldRuntime & world,const std::optional<game::PartyRegistryState> & parties,const game::IntersectionLifecycleState & incidents,std::string & error)free functionInventory only; no authored contract note.src/app/runtime_structured_quest.cpp:40
app::RuntimeSession::CreateStructuredQuest(game::StructuredQuestCreateRequest request)methodInventory only; no authored contract note.src/app/runtime_structured_quest.cpp:102
app::RuntimeSession::TransitionStructuredQuest(game::StructuredQuestTransitionRequest request)methodInventory only; no authored contract note.src/app/runtime_structured_quest.cpp:127
RejectTravelerDispute(RuntimeTravelerDisputeRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_traveler_dispute.cpp:10
app::RuntimeSession::ResolveTravelerDispute(RuntimeTravelerDisputeRequest request)methodInventory only; no authored contract note.src/app/runtime_traveler_dispute.cpp:22
Reject(RuntimeTravelerDisputeRelationshipRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_traveler_dispute_relationship.cpp:20
PolicyDelta(const game::TravelerDisputeOutcomeStatus status)internal helperInventory only; no authored contract note.src/app/runtime_traveler_dispute_relationship.cpp:30
DeltaFits(const std::int16_t value,const std::int16_t delta)internal helperInventory only; no authored contract note.src/app/runtime_traveler_dispute_relationship.cpp:43
app::ComposeTravelerDisputeRelationship(RuntimeTravelerDisputeRelationshipRequest request,const game::IncidentRecord & incident,const game::IntersectionRecord & intersection,const game::MemoryRuntime & memories,const std::span<const sim::PersistentId> current_actors,game::RelationshipRuntime & relationships)free functionInventory only; no authored contract note.src/app/runtime_traveler_dispute_relationship.cpp:50
app::RuntimeSession::ApplyTravelerDisputeRelationship(RuntimeTravelerDisputeRelationshipRequest request)methodInventory only; no authored contract note.src/app/runtime_traveler_dispute_relationship.cpp:172
app::RuntimeTravelerDisputeRelationshipResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_traveler_dispute_relationship.hpp:43
BuildDefinitions()internal helperInventory only; no authored contract note.src/app/runtime_tuning_service.cpp:15
Rejected(const RuntimeTuningState & state,std::string error_id,std::string detail,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/runtime_tuning_service.cpp:56
app::RuntimeTuningService::RuntimeTuningService()methodInventory only; no authored contract note.src/app/runtime_tuning_service.cpp:68
app::RuntimeTuningService::RuntimeTuningService(RuntimeTuningState initial_state)methodInventory only; no authored contract note.src/app/runtime_tuning_service.cpp:71
app::RuntimeTuningService::Definitions() constmethodInventory only; no authored contract note.src/app/runtime_tuning_service.cpp:79
app::RuntimeTuningService::CaptureState() constmethodInventory only; no authored contract note.src/app/runtime_tuning_service.cpp:83
app::RuntimeTuningService::Value(const std::string_view id) constmethodInventory only; no authored contract note.src/app/runtime_tuning_service.cpp:85
app::RuntimeTuningService::Apply(const RuntimeTuningPatch & patch)methodInventory only; no authored contract note.src/app/runtime_tuning_service.cpp:93
app::RuntimeTuningService::RestoreState(const RuntimeTuningState & state,std::string & error)methodInventory only; no authored contract note.src/app/runtime_tuning_service.cpp:145
app::RuntimeTuningService::DefaultState()methodInventory only; no authored contract note.src/app/runtime_tuning_service.cpp:154
app::RuntimeTuningService::ValidateState(const RuntimeTuningState & state,std::string & error)methodInventory only; no authored contract note.src/app/runtime_tuning_service.cpp:156
app::RuntimeTuningMutationStatusName(const RuntimeTuningMutationStatus status)free functionInventory only; no authored contract note.src/app/runtime_tuning_service.cpp:186
app::RuntimeTuningMutationResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_tuning_service.hpp:77
Failure(std::string error)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:21
Merge(RuntimeVillageEconomyAdvanceResult & destination,RuntimeVillageEconomyAdvanceResult source)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:25
FindBinding(const std::span<const game::SettlementWorkSpatialAnchor> bindings,const game::InventoryOwnerMarker owner)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:36
ReadyFor(const game::ActorState & actor,const game::JobId job,const game::WorkTaskId task)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:43
ContainsActor(const std::span<const sim::PersistentId> residents,const sim::PersistentId actor)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:50
CanClaim(const game::ActorState & actor,const std::uint64_t tick,const game::WorkLifecycleRuntime & work,const game::JobId own_job={})internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:55
Terminal(const game::ProductionStage stage)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:63
Terminal(const game::TradeShipmentStage stage)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:68
IntervalElapsed(const std::uint64_t tick,const std::uint64_t previous,const std::uint64_t interval)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:74
FindOperationalBuilding(const game::ConstructionRuntime & construction,const std::string_view definition_id)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:80
BuildingWorkPosition(const game::BuildingRecord & building,const game::ConstructionRuntime & construction,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:92
LatestOrderFor(const game::ProductionRuntime & production,const game::ProductionRecipeId recipe,const game::BuildingId building)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:122
LatestShipmentFor(const game::TradeRuntime & trade,const TradeOpportunity & opportunity,const game::ResourceId resource)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:135
CapabilityFit(const game::ActorState & actor,const VocationKind vocation)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:153
SelectPreferredWorker(const std::uint64_t tick,const std::span<const sim::PersistentId> residents,const std::size_t actor_budget,const game::JobId job_id,const game::WorkTaskId task_id,const sim::SiteId source_site,const std::optional<sim::Transform2D> source_position,const game::InventoryContainerId source,const game::InventoryContainerId destination,const game::ResourceBundle & bundle,const game::ReservationSubject subject,const std::uint16_t urgency_basis_points,const std::uint32_t maximum_route_cost_ticks,const VocationKind vocation,const std::optional<sim::PersistentId> recent_worker,const sim::WorldRuntime & world,game::ActorRuntime & actors,const game::WorkLifecycleRuntime & work,const game::ResourceEconomyRuntime & resources,const game::HouseholdRuntime & households,const game::JobPreferenceScoringPolicy & scoring_policy)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:169
SelectReusableTradeParty(const std::uint64_t tick,const std::span<const sim::PersistentId> residents,const sim::SiteId source_site,const game::WorkLifecycleRuntime & work,const game::ResourceEconomyRuntime & resources,const sim::WorldRuntime & world,const game::ActorRuntime & actors,const game::PartyRuntime & parties)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:298
SelectTradeMembers(const std::uint64_t tick,const std::span<const sim::PersistentId> residents,const std::size_t actor_budget,const sim::SiteId source_site,const std::span<const sim::PersistentId> recent_members,const std::uint16_t recent_worker_penalty_basis_points,const game::WorkLifecycleRuntime & work,const game::ResourceEconomyRuntime & resources,const sim::WorldRuntime & world,const game::ActorRuntime & actors,const game::PartyRuntime & parties)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:329
ScaledValue(const std::uint64_t value,const std::uint16_t basis_points)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:376
CommitTransfer(game::ResourceEconomyRuntime & resources,const game::ResourceCustodyTransferPurpose purpose,const game::WorkSourceMarker cause,const game::InventoryContainerRecord & source,const game::InventoryContainerRecord & destination,game::ResourceBundle bundle,const std::uint64_t tick,const game::InventoryContainerRecord * exchange_source=nullptr,const game::InventoryContainerRecord * exchange_destination=nullptr,game::ResourceBundle exchange_bundle={})internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:386
HouseholdGoodsQuantity(const game::HouseholdRuntime & households,const game::ResourceEconomyRuntime & resources,const game::ResourceId resource)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:421
SettleCompletedProduction(const std::uint64_t tick,const ProductionOpportunity & opportunity,const game::AuthoredSettlementEconomyPolicy & policy,const game::ProductionOrderRecord & order,const game::ProductionRecipeDefinition & recipe,game::ResourceEconomyRuntime & resources,const game::HouseholdRuntime & households)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:438
AdvanceProductionOpportunity(const std::uint64_t tick,const ProductionOpportunity & opportunity,const game::AuthoredSettlementEconomyPolicy & policy,const std::span<const sim::PersistentId> residents,sim::WorldRuntime & world,game::ActorRuntime & actors,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources,const game::ConstructionRuntime & construction,game::ProductionRuntime & production,const game::HouseholdRuntime & households,const std::span<const game::SettlementWorkSpatialAnchor> bindings,const sim::LocalMovementTuning movement_tuning,const game::JobPreferenceScoringPolicy & scoring_policy)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:539
AdvanceTradeOpportunity(const std::uint64_t tick,const TradeOpportunity & opportunity,const game::AuthoredSettlementEconomyPolicy & policy,const std::span<const sim::PersistentId> residents,sim::WorldRuntime & world,game::ActorRuntime & actors,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources,game::TradeRuntime & trade,game::RegionalEconomyRuntime & regional,game::PartyRuntime & parties,const std::span<const game::SettlementWorkSpatialAnchor> bindings,const sim::LocalMovementTuning movement_tuning)internal helperInventory only; no authored contract note.src/app/runtime_village_economy.cpp:748
app::AdvanceVillageEconomy(const std::uint64_t tick,sim::WorldRuntime & world,game::ActorRuntime & actors,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources,const game::ConstructionRuntime & construction,game::ProductionRuntime & production,game::TradeRuntime & trade,game::RegionalEconomyRuntime & regional,game::PartyRuntime & parties,const game::HouseholdRuntime & households,const game::RuntimeSettlementDefinition & definition,const game::SettlementEnterprisePortfolioRecord * enterprise_portfolio,const std::span<const sim::PersistentId> residents,const std::span<const game::SettlementWorkSpatialAnchor> spatial_bindings,const sim::LocalMovementTuning movement_tuning)free functionInventory only; no authored contract note.src/app/runtime_village_economy.cpp:1021
app::RuntimeVillageEconomyAdvanceResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_village_economy.hpp:26
HouseholdIds(const game::HouseholdRuntime & households)internal helperInventory only; no authored contract note.src/app/runtime_village_generations.cpp:21
WindowIndex(const RotatingWindowPosition position)internal helperInventory only; no authored contract note.src/app/runtime_village_generations.cpp:37
TryFormPartnership(const std::uint64_t tick,const game::AuthoredSettlementDemographyPolicy & policy,const game::ActorRuntime & actors,const game::HouseholdRuntime & households,const game::PartyRuntime & parties,game::RelationshipRuntime & relationships)internal helperInventory only; no authored contract note.src/app/runtime_village_generations.cpp:51
TryJoinPartnerHousehold(const std::uint64_t tick,const game::AuthoredSettlementDemographyPolicy & policy,const game::RelationshipRuntime & relationships,const game::ConstructionRuntime & construction,const assets::RuntimeContentCatalog & content,game::HouseholdRuntime & households)internal helperInventory only; no authored contract note.src/app/runtime_village_generations.cpp:93
TryFormPartnerHousehold(const std::uint64_t tick,const game::ActorRuntime & actors,const game::RelationshipRuntime & relationships,const game::ConstructionRuntime & construction,const game::PartyRuntime & parties,const assets::RuntimeContentCatalog & content,const sim::WorldTopology & topology,const sim::SiteId settlement_anchor,game::ResourceEconomyRuntime & resources,game::HouseholdRuntime & households,game::SettlementRuntime & settlements,const game::ResourceCapacityLimits limits,const game::AuthoredSettlementDemographyPolicy & policy,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_village_generations.cpp:160
GenerateAppearance(const sim::PersistentId actor,const std::uint64_t tick,const std::vector<sim::PersistentId> & parents,const game::ActorRuntime & actors,const game::AuthoredSettlementDemographyPolicy & policy)internal helperInventory only; no authored contract note.src/app/runtime_village_generations.cpp:333
ArrivingActor(const game::ActorState & prototype,const sim::PersistentId actor,std::vector<sim::PersistentId> parents,const std::uint64_t birth_tick,const std::optional<std::uint64_t> immigration_tick,game::ActorAppearanceRecord appearance)internal helperInventory only; no authored contract note.src/app/runtime_village_generations.cpp:346
TryAddResident(const std::uint64_t tick,const game::HouseholdUpdateReason reason,const game::HouseholdId household,const game::ActorState & prototype,std::vector<sim::PersistentId> parents,sim::WorldRuntime & world,game::ActorRuntime & actors,game::ResourceEconomyRuntime & resources,game::ControlAuthorityRuntime & authority,game::RelationshipRuntime & relationships,game::HouseholdRuntime & households,game::ReputationRuntime & reputations,game::SettlementRuntime & settlements,const game::ConstructionRuntime & construction,const assets::RuntimeContentCatalog & content,const game::ScenarioCapacityPolicy policy,const game::ResourceCapacityLimits limits,const game::AuthoredSettlementDemographyPolicy & demography,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_village_generations.cpp:380
IntervalElapsed(const std::uint64_t tick,const std::uint64_t previous,const std::uint64_t interval)internal helperInventory only; no authored contract note.src/app/runtime_village_generations.cpp:533
Mix(std::uint64_t value)internal helperInventory only; no authored contract note.src/app/runtime_village_generations.cpp:538
CaptureDemographyFacts(const std::uint64_t tick,const game::AuthoredSettlementDemographyPolicy & policy,const assets::RuntimeContentCatalog & content,const game::ActorRuntime & actors,const game::ResourceEconomyRuntime & resources,const game::ConstructionRuntime & construction,const game::HouseholdRuntime & households,const game::SettlementRuntime & settlements,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_village_generations.cpp:570
HouseholdWealth(const game::HouseholdId household,const game::ResourceEconomyRuntime & resources)internal helperInventory only; no authored contract note.src/app/runtime_village_generations.cpp:701
ComposePopulationStrategy(const std::uint64_t tick,const DemographyFacts & facts,const game::AuthoredSettlementDemographyPolicy & policy,const game::ResourceEconomyRuntime & resources,const game::ConstructionRuntime & construction,const game::ProductionRuntime * production,const game::TradeRuntime * trade)internal helperInventory only; no authored contract note.src/app/runtime_village_generations.cpp:718
ResidencePopulation(const game::BuildingId building,const game::HouseholdRuntime & households)internal helperInventory only; no authored contract note.src/app/runtime_village_generations.cpp:848
TrySeparateHousehold(const std::uint64_t tick,const game::RelationshipRuntime & relationships,const game::PartyRuntime & parties,const game::ConstructionRuntime & construction,const assets::RuntimeContentCatalog & content,const sim::WorldTopology & topology,const sim::SiteId settlement_anchor,game::ResourceEconomyRuntime & resources,game::HouseholdRuntime & households,game::SettlementRuntime & settlements,const game::ResourceCapacityLimits limits,const game::AuthoredSettlementDemographyPolicy & policy,const std::size_t visit_budget,std::string &)internal helperInventory only; no authored contract note.src/app/runtime_village_generations.cpp:859
app::CaptureVillageDemographySnapshot(const RuntimeSession & session)free functionInventory only; no authored contract note.src/app/runtime_village_generations.cpp:997
app::RuntimeSession::AdvanceVillageGenerations(const std::uint64_t tick)methodInventory only; no authored contract note.src/app/runtime_village_generations.cpp:1147
app::RuntimeVillageGenerationResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_village_generations.hpp:22
app::RuntimeVillageDemographySnapshot::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_village_generations.hpp:70
IsTerminal(const game::ActorPlanStatus status)internal helperInventory only; no authored contract note.src/app/runtime_village_life.cpp:16
BuildingApproach(const std::uint64_t slot_key,const game::BuildingRecord & building,const game::ConstructionRuntime & construction,const sim::WorldRuntime & world,const std::optional<sim::Transform2D> nearest_to=std::nullopt)internal helperInventory only; no authored contract note.src/app/runtime_village_life.cpp:28
ResidenceApproach(const sim::PersistentId actor,const game::HouseholdResidence & residence,const game::ConstructionRuntime & construction,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/app/runtime_village_life.cpp:119
OperationalResidenceSite(const sim::PersistentId actor,const game::HouseholdRuntime & households,const game::ConstructionRuntime & construction)internal helperInventory only; no authored contract note.src/app/runtime_village_life.cpp:137
FunctionalApproach(const game::BuildingFunction function,const std::uint64_t slot_key,const game::ConstructionRuntime & construction,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/app/runtime_village_life.cpp:157
ActivityDestination(const game::ActorState & actor,const std::uint64_t resident_slot,const game::HouseholdRuntime & households,const game::ConstructionRuntime & construction,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/app/runtime_village_life.cpp:173
app::AdvanceVillageRoutineTravel(const std::uint64_t tick,const std::span<const sim::PersistentId> scheduled_actors,const std::span<const sim::PersistentId> suppressed_actors,sim::WorldRuntime & world,game::ActorRuntime & actors,const game::HouseholdRuntime & households,const game::ConstructionRuntime & construction,const sim::LocalMovementTuning movement_tuning)free functionInventory only; no authored contract note.src/app/runtime_village_life.cpp:209
app::RuntimeVillageLifeAdvanceResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_village_life.hpp:26
AvailableForSocial(const game::ActorState & actor)internal helperInventory only; no authored contract note.src/app/runtime_village_social.cpp:50
RelationshipScore(const std::optional<game::RelationshipRecord> & relationship)internal helperInventory only; no authored contract note.src/app/runtime_village_social.cpp:63
SelectPairs(const std::span<const sim::PersistentId> resident_actors,const sim::WorldRuntime & world,const game::ActorRuntime & actors,const game::RelationshipRuntime & relationships,const game::HouseholdRuntime & households,const game::MemoryRuntime & memories,const SocialTimeWindow time)internal helperInventory only; no authored contract note.src/app/runtime_village_social.cpp:72
SelectInteraction(const game::ActorState & first,const game::ActorState & second,const std::optional<game::RelationshipRecord> & relationship,const std::uint64_t day)internal helperInventory only; no authored contract note.src/app/runtime_village_social.cpp:170
Fits(const std::int16_t value,const std::int16_t delta)internal helperInventory only; no authored contract note.src/app/runtime_village_social.cpp:198
BuildActivation(const SocialPair & pair,const InteractionPolicy & policy,const std::uint64_t tick,const sim::WorldRuntime & world,const game::ActorState & first,const game::ActorState & second,const game::ObserverId observer)internal helperInventory only; no authored contract note.src/app/runtime_village_social.cpp:204
CompleteIncident(game::IntersectionLifecycleRuntime & incidents,const game::IncidentRecord & proposed,const std::uint64_t tick,game::IncidentRecord & completed,std::string & error)internal helperInventory only; no authored contract note.src/app/runtime_village_social.cpp:261
app::AdvanceVillageSocialEncounters(const std::uint64_t tick,const std::span<const sim::PersistentId> resident_actors,sim::WorldRuntime & world,game::ActorRuntime & actors,game::IntersectionLifecycleRuntime & incidents,game::MemoryRuntime & memories,game::RelationshipRuntime & relationships,const game::HouseholdRuntime & households,const game::ObserverId observer)free functionInventory only; no authored contract note.src/app/runtime_village_social.cpp:288
app::RuntimeVillageSocialAdvanceResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_village_social.hpp:33
Reject(RuntimeWildlifeHouseholdStrainRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_wildlife_household_strain.cpp:12
app::ComposeWildlifeInjuryHouseholdStrain(RuntimeWildlifeHouseholdStrainRequest request,const game::IncidentRecord & incident,const game::IntersectionRecord & intersection,const game::MemoryRuntime & memories,const std::span<const sim::PersistentId> current_actors,game::HouseholdRuntime & households)free functionInventory only; no authored contract note.src/app/runtime_wildlife_household_strain.cpp:24
app::RuntimeSession::ApplyWildlifeInjuryHouseholdStrain(RuntimeWildlifeHouseholdStrainRequest request)methodInventory only; no authored contract note.src/app/runtime_wildlife_household_strain.cpp:117
app::RuntimeWildlifeHouseholdStrainResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_wildlife_household_strain.hpp:43
RejectWildlifeIncident(RuntimeWildlifeIncidentRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_wildlife_incident.cpp:10
app::RuntimeSession::ResolveWildlifeIncident(RuntimeWildlifeIncidentRequest request)methodInventory only; no authored contract note.src/app/runtime_wildlife_incident.cpp:22
Reject(RuntimeWildlifeLearnedTendencyRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_wildlife_learned_tendency.cpp:10
app::ComposeWildlifeInjuryLearnedTendency(RuntimeWildlifeLearnedTendencyRequest request,const game::IncidentRecord & incident,const game::IntersectionRecord & intersection,const game::MemoryRuntime & memories,const sim::WorldRuntime & world,game::ActorRuntime & actors)free functionInventory only; no authored contract note.src/app/runtime_wildlife_learned_tendency.cpp:22
app::RuntimeSession::ApplyWildlifeInjuryLearnedTendency(RuntimeWildlifeLearnedTendencyRequest request)methodInventory only; no authored contract note.src/app/runtime_wildlife_learned_tendency.cpp:121
app::RuntimeWildlifeLearnedTendencyResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_wildlife_learned_tendency.hpp:42
RejectWildlifeRecovery(RuntimeWildlifeRecoveryRequest request,std::string error)internal helperInventory only; no authored contract note.src/app/runtime_wildlife_recovery.cpp:12
app::RuntimeSession::RecoverWildlifeIncident(RuntimeWildlifeRecoveryRequest request)methodInventory only; no authored contract note.src/app/runtime_wildlife_recovery.cpp:24
Reject(RuntimeWildlifeReputationRequest request,std::string detail)internal helperInventory only; no authored contract note.src/app/runtime_wildlife_reputation.cpp:11
PolicyDelta(const game::WildlifePredatorOutcomeResult & outcome,const sim::PersistentId subject)internal helperInventory only; no authored contract note.src/app/runtime_wildlife_reputation.cpp:21
app::ComposeWitnessedWildlifeReputation(RuntimeWildlifeReputationRequest request,const game::IncidentRecord & incident,const game::IntersectionRecord & intersection,const game::MemoryRuntime & memories,const game::HouseholdRuntime & households,const std::span<const sim::PersistentId> current_actors,game::ReputationRuntime & reputations)free functionInventory only; no authored contract note.src/app/runtime_wildlife_reputation.cpp:34
app::RuntimeSession::ApplyWitnessedWildlifeReputation(RuntimeWildlifeReputationRequest request)methodInventory only; no authored contract note.src/app/runtime_wildlife_reputation.cpp:155
app::RuntimeWildlifeReputationResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/runtime_wildlife_reputation.hpp:46
Rejected(const ScenarioCapacityPolicyState & state,std::string error_id,std::string detail,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/scenario_capacity_policy_service.cpp:14
AddChange(std::vector<ScenarioCapacityPolicyChange> & changes,std::string field,const std::uint64_t previous,const std::optional<std::uint64_t> requested,std::uint64_t & destination)internal helperInventory only; no authored contract note.src/app/scenario_capacity_policy_service.cpp:25
app::ScenarioCapacityPolicyService::ScenarioCapacityPolicyService()methodInventory only; no authored contract note.src/app/scenario_capacity_policy_service.cpp:38
app::ScenarioCapacityPolicyService::ScenarioCapacityPolicyService(game::ScenarioCapacityPolicy authored_policy)methodInventory only; no authored contract note.src/app/scenario_capacity_policy_service.cpp:40
app::ScenarioCapacityPolicyService::ScenarioCapacityPolicyService(ScenarioCapacityPolicyState state)methodInventory only; no authored contract note.src/app/scenario_capacity_policy_service.cpp:49
app::ScenarioCapacityPolicyService::CaptureState() constmethodInventory only; no authored contract note.src/app/scenario_capacity_policy_service.cpp:57
app::ScenarioCapacityPolicyService::CaptureSnapshot(ScenarioCapacityUsage usage) constmethodInventory only; no authored contract note.src/app/scenario_capacity_policy_service.cpp:62
app::ScenarioCapacityPolicyService::Apply(const ScenarioCapacityPolicyPatch & patch,const ScenarioCapacityUsage & observed_usage)methodInventory only; no authored contract note.src/app/scenario_capacity_policy_service.cpp:67
app::ScenarioCapacityPolicyService::RestoreState(const ScenarioCapacityPolicyState & state,const ScenarioCapacityUsage & observed_usage,std::string & error)methodInventory only; no authored contract note.src/app/scenario_capacity_policy_service.cpp:121
app::ScenarioCapacityPolicyService::DefaultState(game::ScenarioCapacityPolicy policy)methodInventory only; no authored contract note.src/app/scenario_capacity_policy_service.cpp:133
app::ScenarioCapacityPolicyService::ValidateState(const ScenarioCapacityPolicyState & state,std::string & error)methodInventory only; no authored contract note.src/app/scenario_capacity_policy_service.cpp:139
app::ScenarioCapacityPolicyService::ValidateUsage(const game::ScenarioCapacityPolicy & policy,const ScenarioCapacityUsage & usage,std::string & error)methodInventory only; no authored contract note.src/app/scenario_capacity_policy_service.cpp:152
app::ScenarioCapacityPolicyMutationResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/scenario_capacity_policy_service.hpp:68
NamespaceDescriptor(const NamespaceDefinition & definition)internal helperInventory only; no authored contract note.src/app/script_api_catalog.cpp:301
ErrorDescriptor(const ErrorDefinition & definition)internal helperInventory only; no authored contract note.src/app/script_api_catalog.cpp:351
app::BuildRuntimeScriptApiRegistry(std::string & error)free functionInventory only; no authored contract note.src/app/script_api_catalog.cpp:388
main()entry pointInventory only; no authored contract note.src/app/script_api_export_main.cpp:6
IsStableId(const std::string_view value)internal helperInventory only; no authored contract note.src/app/script_api_registry.cpp:15
IsSourceLocation(const std::string_view value)internal helperInventory only; no authored contract note.src/app/script_api_registry.cpp:38
Validate(const ScriptApiSymbolDescriptor & descriptor)internal helperInventory only; no authored contract note.src/app/script_api_registry.cpp:47
VersionJson(const ScriptApiVersion version)internal helperInventory only; no authored contract note.src/app/script_api_registry.cpp:127
FieldJson(const ScriptApiFieldDescriptor & field)internal helperInventory only; no authored contract note.src/app/script_api_registry.cpp:136
SymbolJson(const ScriptApiSymbolDescriptor & descriptor)internal helperInventory only; no authored contract note.src/app/script_api_registry.cpp:147
app::ScriptApiRegistry::ScriptApiRegistry(const ScriptApiVersion api_version)methodInventory only; no authored contract note.src/app/script_api_registry.cpp:186
app::ScriptApiRegistry::Register(ScriptApiSymbolDescriptor descriptor,std::string & error)methodValidates and atomically inserts one complete script-facing symbol descriptor without granting implementation or runtime authority.src/app/script_api_registry.cpp:189
app::ScriptApiRegistry::Find(const std::string_view id) constmethodInventory only; no authored contract note.src/app/script_api_registry.cpp:207
app::ScriptApiRegistry::Size() constmethodInventory only; no authored contract note.src/app/script_api_registry.cpp:212
app::ScriptApiRegistry::Version() constmethodInventory only; no authored contract note.src/app/script_api_registry.cpp:214
app::ScriptApiRegistry::ValidateComplete(std::string & error) constmethodInventory only; no authored contract note.src/app/script_api_registry.cpp:216
app::ScriptApiRegistry::ExportNormalizedJson() constmethodBuilds the deterministic machine-readable registry document used by later reference generation and drift proof.src/app/script_api_registry.cpp:243
app::ToString(const ScriptApiVersion version)free functionInventory only; no authored contract note.src/app/script_api_registry.cpp:272
app::ToString(const ScriptInterfaceLayer layer)free functionInventory only; no authored contract note.src/app/script_api_registry.cpp:277
app::ToString(const ScriptPackageOrigin origin)free functionInventory only; no authored contract note.src/app/script_api_registry.cpp:289
app::ToString(const ScriptApiSymbolKind kind)free functionInventory only; no authored contract note.src/app/script_api_registry.cpp:299
app::ToString(const ScriptApiAuthority authority)free functionInventory only; no authored contract note.src/app/script_api_registry.cpp:337
app::ToString(const ScriptApiTiming timing)free functionInventory only; no authored contract note.src/app/script_api_registry.cpp:353
app::ScriptInterfaceLayers()free functionInventory only; no authored contract note.src/app/script_api_registry.cpp:371
app::ResolveScriptPackageLayout(const std::filesystem::path & package_root,std::string & error)free functionDerives the runtime-local plugins path from an explicit package root without filesystem mutation or package discovery.src/app/script_api_registry.cpp:390
RevisionField(std::string id,std::string description)internal helperInventory only; no authored contract note.src/app/script_command_service.cpp:35
BuildContracts()internal helperInventory only; no authored contract note.src/app/script_command_service.cpp:43
ValidOriginId(const std::string_view id)internal helperInventory only; no authored contract note.src/app/script_command_service.cpp:387
ArgumentsMatch(const ScriptCommandArguments & arguments,const ScriptCommandContract & contract,std::string & detail)internal helperInventory only; no authored contract note.src/app/script_command_service.cpp:396
UnsignedArgument(const ScriptCommandRequest & request,const std::string_view id)internal helperInventory only; no authored contract note.src/app/script_command_service.cpp:432
SignedArgument(const ScriptCommandRequest & request,const std::string_view id)internal helperInventory only; no authored contract note.src/app/script_command_service.cpp:436
ExecuteOwnerCommand(const ScriptCommandRequest & request,RuntimeSession & session,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/script_command_service.cpp:460
app::ScriptCommandOrigin::ScriptCommandOrigin(const ScriptCommandOriginKind kind,std::string id,const bool restricted)methodInventory only; no authored contract note.src/app/script_command_service.cpp:731
app::ScriptCommandOrigin::CompiledControl(std::string id)methodInventory only; no authored contract note.src/app/script_command_service.cpp:735
app::ScriptCommandOrigin::DeveloperTool(std::string id)methodInventory only; no authored contract note.src/app/script_command_service.cpp:739
app::ScriptCommandOrigin::StandardPackage(std::string id)methodInventory only; no authored contract note.src/app/script_command_service.cpp:743
app::ScriptCommandOrigin::DevelopmentPackage(std::string id)methodInventory only; no authored contract note.src/app/script_command_service.cpp:747
app::ScriptCommandOrigin::Engine(std::string id)methodInventory only; no authored contract note.src/app/script_command_service.cpp:751
app::ScriptCommandOrigin::Valid() constmethodInventory only; no authored contract note.src/app/script_command_service.cpp:755
app::ScriptCommandOrigin::CanUseRestrictedCommands() constmethodInventory only; no authored contract note.src/app/script_command_service.cpp:757
app::ScriptCommandOrigin::Kind() constmethodInventory only; no authored contract note.src/app/script_command_service.cpp:761
app::ScriptCommandOrigin::Id() constmethodInventory only; no authored contract note.src/app/script_command_service.cpp:763
app::ScriptCommandService::ScriptCommandService()methodInventory only; no authored contract note.src/app/script_command_service.cpp:765
app::ScriptCommandService::Contracts() constmethodInventory only; no authored contract note.src/app/script_command_service.cpp:767
app::ScriptCommandService::RecordReceipt(const ScriptCommandRequest & request,const ScriptCommandReceiptStatus status,const std::uint64_t tick,std::string error_id,std::string detail)methodInventory only; no authored contract note.src/app/script_command_service.cpp:771
app::ScriptCommandService::RecordTerminal(const ScriptCommandRequest & request,const ScriptCommandReceipt & terminal_receipt)methodInventory only; no authored contract note.src/app/script_command_service.cpp:789
app::ScriptCommandService::Submit(const std::string_view command_id,ScriptCommandArguments arguments,ScriptCommandOrigin origin,const std::uint64_t current_tick,const std::uint64_t target_tick,ScriptCommandBudget & budget)methodInventory only; no authored contract note.src/app/script_command_service.cpp:798
app::ScriptCommandService::ProcessDueAtTick(RuntimeSession & session,const std::uint64_t current_tick)methodInventory only; no authored contract note.src/app/script_command_service.cpp:851
app::ScriptCommandService::ReceiptsAfter(const std::uint64_t sequence,const std::size_t maximum_count) constmethodInventory only; no authored contract note.src/app/script_command_service.cpp:967
app::ScriptCommandService::CaptureTranscript() constmethodInventory only; no authored contract note.src/app/script_command_service.cpp:979
app::ScriptCommandService::CaptureState() constmethodInventory only; no authored contract note.src/app/script_command_service.cpp:983
app::ScriptCommandService::RestoreState(const ScriptCommandServiceState & state,std::string & error)methodInventory only; no authored contract note.src/app/script_command_service.cpp:992
app::ScriptCommandService::ValidateState(const ScriptCommandServiceState & state,std::string & error)methodInventory only; no authored contract note.src/app/script_command_service.cpp:1006
app::ScriptCommandService::PendingCount() constmethodInventory only; no authored contract note.src/app/script_command_service.cpp:1070
app::RegisterScriptCommandApi(ScriptApiRegistry & registry,std::string & error)free functionInventory only; no authored contract note.src/app/script_command_service.cpp:1072
app::ScriptCommandOriginKindName(const ScriptCommandOriginKind kind)free functionInventory only; no authored contract note.src/app/script_command_service.cpp:1174
app::ScriptCommandReceiptStatusName(const ScriptCommandReceiptStatus status)free functionInventory only; no authored contract note.src/app/script_command_service.cpp:1190
app::ScriptCommandReceipt::Accepted() constinline methodInventory only; no authored contract note.src/app/script_command_service.hpp:89
app::ScriptCommandReceipt::Completed() constinline methodInventory only; no authored contract note.src/app/script_command_service.hpp:92
EventDescriptors()internal helperInventory only; no authored contract note.src/app/script_event_service.cpp:9
ValueMatches(const ScriptEventValue & value,const std::string_view type)internal helperInventory only; no authored contract note.src/app/script_event_service.cpp:295
app::ScriptEventService::Publish(std::string event_id,const std::uint64_t committed_at_tick,ScriptEventPayload payload)methodInventory only; no authored contract note.src/app/script_event_service.cpp:307
app::ScriptEventService::EventsAfter(const std::uint64_t sequence,const std::size_t maximum_count) constmethodInventory only; no authored contract note.src/app/script_event_service.cpp:330
app::ScriptEventService::Registered(const std::string_view event_id) constmethodInventory only; no authored contract note.src/app/script_event_service.cpp:342
app::ScriptEventService::OldestSequence() constmethodInventory only; no authored contract note.src/app/script_event_service.cpp:347
app::ScriptEventService::LatestSequence() constmethodInventory only; no authored contract note.src/app/script_event_service.cpp:351
app::RegisterScriptEventApi(ScriptApiRegistry & registry,std::string & error)free functionInventory only; no authored contract note.src/app/script_event_service.cpp:353
BoundedAllocator(void * user_data,void * pointer,const std::size_t old_size,const std::size_t new_size)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:103
RuntimeFromUpvalue(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:128
RuntimeFromExtraSpace(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:132
InstructionHook(lua_State * state,lua_Debug *)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:136
PushValue(lua_State * state,const ScriptQueryValue & value)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:148
PushEventValue(lua_State * state,const ScriptEventValue & value)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:174
PushSettingValue(lua_State * state,const ScriptSettingDefault & setting)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:200
SetStringField(lua_State * state,const char * key,const std::string_view value)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:217
SetUnsignedField(lua_State * state,const char * key,const std::uint64_t value)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:222
PushQueryResult(lua_State * state,const ScriptQueryResult & result)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:227
ReadQueryValue(lua_State * state,const int index)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:251
ReadCommandValue(lua_State * state,const int index)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:274
ReadBoundedUnsignedField(lua_State * state,const int table_index,const char * field,std::size_t & value)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:282
WorldQuery(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:298
ReadCommandArguments(lua_State * state,const int index)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:337
PushReceipt(lua_State * state,const ScriptCommandReceipt & receipt)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:361
SubmitCommand(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:372
EventsAfter(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:408
ListenForEvent(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:437
IgnoreEvent(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:467
ReadUiString(lua_State * state,const int index,const char * name)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:489
ReadOptionalUiField(lua_State * state,const int table_index,const char * field)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:498
ReadUiColorToken(lua_State * state,const int table_index,const char * field)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:510
ReserveUiText(PackageRuntime & runtime,const std::size_t bytes)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:534
RequireOpenPanel(lua_State * state,PackageRuntime & runtime)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:543
BeginUiPanel(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:551
EndUiPanel(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:678
AddUiStructuralWidget(lua_State * state,const ScriptUiWidgetKind kind)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:688
AddUiWidget(lua_State * state,const ScriptUiWidgetKind kind)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:716
AddUiText(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:760
AddUiRow(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:761
AddUiButton(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:762
AddUiProgress(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:763
AddUiTooltip(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:764
AddUiMenu(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:765
BeginUiRowGroup(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:766
EndUiRowGroup(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:769
AddUiSpacer(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:772
AddUiSeparator(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:775
AddUiStat(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:778
AddUiList(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:798
AddUiExplain(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:875
AddUiTabs(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:893
AddUiSurface(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:936
SetUiCameraIntent(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:969
SetUiGhostIntent(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:993
SetUiTheme(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1030
SelectUiProvider(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1066
StartPerformanceLogging(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1077
StopPerformanceLogging(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1098
CanAccessIndicatorChannel(const PackageRuntime & runtime,const WorldIndicatorChannelDefinition & channel)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1111
ListWorldIndicatorChannels(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1116
WorldIndicatorChannelVisible(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1135
SetWorldIndicatorChannelVisible(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1150
GuardedHostCall(lua_State * state)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1168
SetClosure(lua_State * state,const char * name,lua_CFunction function,PackageRuntime & runtime)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1180
SetCommandClosure(lua_State * state,const char * name,PackageRuntime & runtime,const bool restricted)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1189
InstallHostApi(PackageRuntime & runtime)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1198
ReadSource(const std::filesystem::path & path)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1272
RunProtectedCall(PackageRuntime & runtime,const int argument_count,std::string & error)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1280
ProtectedCall(PackageRuntime & runtime,const std::string_view callback,std::string & error,const std::optional<std::string_view> argument=std::nullopt,const std::optional<std::string_view> second_argument=std::nullopt)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1318
PushEvent(lua_State * state,const ScriptEvent & event)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1340
ProtectedEventCall(PackageRuntime & runtime,const int callback_reference,const ScriptEvent & event,std::string & error)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1353
CreateRuntime(const ScriptPackageManifest & manifest,ScriptPackageHost & host,RuntimeSession & session,const std::span<const sim::PersistentId> selected,RuntimePerformanceMonitor & performance,std::map<std::string,ScriptSettingDefault,std::less<>> settings,std::string & error)internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1365
FunctionDescriptor(std::string id,std::string name_space,std::string name,std::string description,std::string signature,ScriptApiAuthority authority,ScriptApiTiming timing,std::vector<std::string> errors={},std::string side_effects={},const ScriptApiVersion introduced={.major = 1, .minor = 0, .patch = 0})internal helperInventory only; no authored contract note.src/app/script_package_host.cpp:1427
app::ScriptPackageHost::ScriptPackageHost()methodInventory only; no authored contract note.src/app/script_package_host.cpp:1492
app::ScriptPackageHost::~ScriptPackageHost()methodInventory only; no authored contract note.src/app/script_package_host.cpp:1493
app::ScriptPackageHost::Load(const std::filesystem::path & plugins_root,RuntimeSession & session,const std::span<const sim::PersistentId> selected,std::string & error,const ScriptPackageHostState * restored_state,const ScriptPackageLoadPolicy policy)methodInventory only; no authored contract note.src/app/script_package_host.cpp:1497
app::ScriptPackageHost::Reload(const std::filesystem::path & plugins_root,RuntimeSession & session,const std::span<const sim::PersistentId> selected,std::string & error)methodInventory only; no authored contract note.src/app/script_package_host.cpp:1760
app::ScriptPackageHost::Dispatch(const std::string_view package_id,const std::string_view callback,std::string & error)methodInventory only; no authored contract note.src/app/script_package_host.cpp:1823
app::ScriptPackageHost::DispatchAction(const std::string_view package_id,const std::string_view action_id,const std::uint64_t host_generation,std::string & error,const std::string_view row_id)methodInventory only; no authored contract note.src/app/script_package_host.cpp:1841
app::ScriptPackageHost::DispatchEvents()methodInventory only; no authored contract note.src/app/script_package_host.cpp:1873
app::ScriptPackageHost::Compose(const std::string_view package_id,const std::string_view callback,ScriptUiIntentBuffer & output,std::string & error)methodInventory only; no authored contract note.src/app/script_package_host.cpp:1950
app::ScriptPackageHost::ComposeSurface(const std::string_view surface_id,ScriptUiIntentBuffer & output,std::string & error)methodInventory only; no authored contract note.src/app/script_package_host.cpp:1991
app::ScriptPackageHost::SelectReplacement(const std::string_view surface_id,const std::string_view provider_id,std::string & error)methodInventory only; no authored contract note.src/app/script_package_host.cpp:2140
app::ScriptPackageHost::SetSurfaceVisible(const std::string_view surface_id,const bool visible,std::string & error)methodInventory only; no authored contract note.src/app/script_package_host.cpp:2182
app::ScriptPackageHost::CaptureWorldIndicatorChannels(const ScriptPackageOrigin origin) constmethodInventory only; no authored contract note.src/app/script_package_host.cpp:2205
app::ScriptPackageHost::IndicatorChannelVisible(const std::string_view channel_id) constmethodInventory only; no authored contract note.src/app/script_package_host.cpp:2222
app::ScriptPackageHost::SetIndicatorChannelVisible(const std::string_view channel_id,const bool visible,const ScriptPackageOrigin origin,std::string & error)methodInventory only; no authored contract note.src/app/script_package_host.cpp:2227
app::ScriptPackageHost::SetLayoutKey(const std::string_view key,std::string value,std::string & error)methodInventory only; no authored contract note.src/app/script_package_host.cpp:2247
app::ScriptPackageHost::SetPackageSetting(const std::string_view package_id,const std::string_view setting_id,ScriptSettingDefault value,std::string & error)methodInventory only; no authored contract note.src/app/script_package_host.cpp:2258
app::ScriptPackageHost::RestoreStandardInterface(std::string & error)methodInventory only; no authored contract note.src/app/script_package_host.cpp:2297
app::ScriptPackageHost::EnterSafeMode(std::string & error)methodInventory only; no authored contract note.src/app/script_package_host.cpp:2324
app::ScriptPackageHost::RecordDiagnostic(std::string package_id,std::string operation,const bool succeeded,std::string detail)methodInventory only; no authored contract note.src/app/script_package_host.cpp:2359
app::ScriptPackageHost::RecordPackageFailure(const std::string_view package_id,const std::string_view operation,const std::string_view detail)methodInventory only; no authored contract note.src/app/script_package_host.cpp:2374
app::ScriptPackageHost::RebuildActiveComposition(std::string & error)methodInventory only; no authored contract note.src/app/script_package_host.cpp:2407
app::ScriptPackageHost::SetSelected(const std::span<const sim::PersistentId> selected)methodInventory only; no authored contract note.src/app/script_package_host.cpp:2480
app::ScriptPackageHost::RecordPerformanceSample(RuntimePerformanceSample sample)methodInventory only; no authored contract note.src/app/script_package_host.cpp:2487
app::ScriptPackageHost::CaptureCurrentPerformance() constmethodInventory only; no authored contract note.src/app/script_package_host.cpp:2491
app::ScriptPackageHost::CapturePerformanceLog() constmethodInventory only; no authored contract note.src/app/script_package_host.cpp:2495
app::ScriptPackageHost::SuspendAll()methodInventory only; no authored contract note.src/app/script_package_host.cpp:2499
app::ScriptPackageHost::Shutdown()methodInventory only; no authored contract note.src/app/script_package_host.cpp:2517
app::ScriptPackageHost::Reports() constmethodInventory only; no authored contract note.src/app/script_package_host.cpp:2545
app::ScriptPackageHost::Composition() constmethodInventory only; no authored contract note.src/app/script_package_host.cpp:2549
app::ScriptPackageHost::CaptureHostState() constmethodInventory only; no authored contract note.src/app/script_package_host.cpp:2553
app::ScriptPackageHost::LastReloadReport() constmethodInventory only; no authored contract note.src/app/script_package_host.cpp:2565
app::ScriptPackageHost::CaptureDiagnostics() constmethodInventory only; no authored contract note.src/app/script_package_host.cpp:2569
app::ScriptPackageHost::Generation() constmethodInventory only; no authored contract note.src/app/script_package_host.cpp:2608
app::ScriptPackageHost::Active() constmethodInventory only; no authored contract note.src/app/script_package_host.cpp:2610
app::RegisterScriptPackageHostApi(ScriptApiRegistry & registry,std::string & error)free functionInventory only; no authored contract note.src/app/script_package_host.cpp:2612
app::ScriptPackageStatusName(const ScriptPackageStatus status)free functionInventory only; no authored contract note.src/app/script_package_host.cpp:3672
ValidStableId(const std::string_view id)internal helperInventory only; no authored contract note.src/app/script_package_manifest.cpp:21
ValidFunctionName(const std::string_view name)internal helperInventory only; no authored contract note.src/app/script_package_manifest.cpp:30
ExactKeys(const Json & value,const std::set<std::string,std::less<>> & expected,std::string & error)internal helperInventory only; no authored contract note.src/app/script_package_manifest.cpp:40
ParseVersion(const std::string & text)internal helperInventory only; no authored contract note.src/app/script_package_manifest.cpp:58
ReadText(const std::filesystem::path & path,const std::uintmax_t maximum_bytes,std::string & error)internal helperInventory only; no authored contract note.src/app/script_package_manifest.cpp:79
ResolveDeclaredFile(const std::filesystem::path & package_directory,const std::string & declared,const std::uintmax_t maximum_bytes,std::string & error)internal helperInventory only; no authored contract note.src/app/script_package_manifest.cpp:106
ParsePathList(const Json & document,const std::string_view key,const std::filesystem::path & package_directory,std::vector<std::filesystem::path> & output,std::string & error)internal helperInventory only; no authored contract note.src/app/script_package_manifest.cpp:145
ParseSettings(const Json & document,std::vector<ScriptSettingSchema> & output,std::string & error)internal helperInventory only; no authored contract note.src/app/script_package_manifest.cpp:172
ParseContributionKind(const std::string_view name)internal helperInventory only; no authored contract note.src/app/script_package_manifest.cpp:207
ParseUiManifest(const Json & document,ScriptPackageManifest & manifest,std::string & error)internal helperInventory only; no authored contract note.src/app/script_package_manifest.cpp:226
ParseManifest(const std::filesystem::path & package_directory,const ScriptApiVersion api_version,std::string & error)internal helperInventory only; no authored contract note.src/app/script_package_manifest.cpp:301
app::DiscoverScriptPackages(const std::filesystem::path & plugins_root,const ScriptApiVersion api_version)free functionInventory only; no authored contract note.src/app/script_package_manifest.cpp:451
app::ScriptPackageDiscoveryResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/script_package_manifest.hpp:82
Contract(std::string id,std::string name,std::string description,std::string owner,std::vector<ScriptApiFieldDescriptor> fields,std::string missing_value_rule="missing owner data returns unavailable")internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:41
Field(std::string id,std::string type,std::string description,std::string units={},const bool required=true)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:61
JobChoiceOutcomeName(const game::ActorJobChoiceOutcome outcome)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:70
JobChoiceRejectionName(const game::ActorJobChoiceRejection rejection)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:82
WorkSourceName(const game::WorkSourceKind kind)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:108
KnowledgeStateName(const game::ObserverKnowledgeState state)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:140
BundleQuantity(const game::ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:154
BuildContracts()internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:161
Failure(std::string_view id,ScriptQueryStatus status,std::string_view error_id,std::string detail,std::uint64_t tick=0)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:1888
UnsignedFilter(const ScriptQueryRequest & request,const std::string_view name)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:1900
StringFilter(const ScriptQueryRequest & request,const std::string_view name)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:1912
AllowedFilters(const std::string_view query_id)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:1924
Record(std::initializer_list<ScriptQueryRecord::value_type> fields)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2009
OptionalTick(const std::uint64_t tick)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2013
SpatialServices(const std::vector<game::SettlementSpatialServiceKind> & services)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2017
SpatialAnchorCells(const std::vector<sim::WorldCellCoordinate> & cells)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2028
SponsorKindName(const game::SettlementProjectSponsorKind kind)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2039
ValueMatches(const ScriptQueryValue & value,const std::string_view type)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2053
ResultMatches(const ScriptQueryResult & result,const ScriptQueryContract & contract,std::string & detail)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2096
ConstructionProgress(const game::ConstructionRecord & construction)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2118
ResolveConstructionInterruptionTiming(const game::ConstructionRecord & construction,const std::optional<std::uint64_t> grace_ticks,const std::uint64_t current_tick)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2143
ActorPlanKindName(const game::ActorPlanKind kind)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2165
ActorPlanStatusName(const game::ActorPlanStatus status)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2181
ActorTaskKindName(const game::ActorTaskKind kind)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2203
ActorTaskStatusName(const game::ActorTaskStatus status)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2221
ActorPlanChangeReasonName(const game::ActorPlanChangeReason reason)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2241
ActorDisplayName(const RuntimeSession & session,const sim::PersistentId actor)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2305
ActorProfile(const RuntimeSession & session,const sim::PersistentId actor)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2317
MaterialsSummary(const assets::RuntimeContentCatalog & catalog,const std::span<const assets::ContentResourceQuantity> materials)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2329
BuildingFunctionLabel(const game::BuildingFunction function)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2345
BuildingConditionStatus(const std::uint16_t condition_basis_points)internal helperInventory only; no authored contract note.src/app/script_query_service.cpp:2369
app::ScriptQueryService::ScriptQueryService()methodInventory only; no authored contract note.src/app/script_query_service.cpp:2387
app::ScriptQueryService::Contracts() constmethodInventory only; no authored contract note.src/app/script_query_service.cpp:2389
app::ScriptQueryService::Execute(const std::string_view query_id,const ScriptQueryRequest & request,const RuntimeScriptQueryContext & context,ScriptQueryBudget & budget) constmethodInventory only; no authored contract note.src/app/script_query_service.cpp:2393
app::RegisterScriptQueryApi(ScriptApiRegistry & registry,std::string & error)free functionInventory only; no authored contract note.src/app/script_query_service.cpp:6083
app::ScriptQueryStatusName(const ScriptQueryStatus status)free functionInventory only; no authored contract note.src/app/script_query_service.cpp:6170
app::ScriptQueryResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/script_query_service.hpp:58
app::ScriptUiPanelIdentity(const ScriptUiPanel & panel)free functionInventory only; no authored contract note.src/app/script_ui_intent.hpp:167
app::LoadPhase0PresentationAssets(assets::AssetService & assets,render::SdlRenderService & renderer,std::string & error)free functionLoads the Phase 0 image and font through AssetService and passes immutable byte views to the existing SDL render decoder without taking cache or renderer ownership.src/app/sdl_presentation_asset_composition.cpp:18
app::LoadRuntimeScenePresentationAssets(const game::RuntimeScene & scene,assets::AssetService & assets,render::SdlRenderService & renderer,std::string & error,const assets::RuntimeContentCatalog * catalog)free functionInventory only; no authored contract note.src/app/sdl_presentation_asset_composition.cpp:109
app::ResetPhase0AssetsAndReloadPresentation(assets::AssetService & assets,render::SdlRenderService & renderer,const game::RuntimeScene * scene,std::string & error,const assets::RuntimeContentCatalog * catalog)free functionCoordinates the cross-owner F8 reset by clearing AssetService cache authority and transactionally replacing SDL presentation resources through the render service.src/app/sdl_presentation_asset_composition.cpp:216
LoadFailure(std::string error,const bool missing=false)internal helperInventory only; no authored contract note.src/app/session_save_store.cpp:12
LoadPath(const std::filesystem::path & path,const std::string_view label)internal helperInventory only; no authored contract note.src/app/session_save_store.cpp:22
PreserveFile(const PreservationPaths paths,std::string & error)internal helperInventory only; no authored contract note.src/app/session_save_store.cpp:72
app::SessionSaveStore::SessionSaveStore(std::filesystem::path slot_path)methodInventory only; no authored contract note.src/app/session_save_store.cpp:93
app::SessionSaveStore::SlotPath() constmethodInventory only; no authored contract note.src/app/session_save_store.cpp:96
app::SessionSaveStore::BackupPath() constmethodInventory only; no authored contract note.src/app/session_save_store.cpp:98
app::SessionSaveStore::CorruptPath() constmethodInventory only; no authored contract note.src/app/session_save_store.cpp:104
app::SessionSaveStore::HasSave() constmethodInventory only; no authored contract note.src/app/session_save_store.cpp:110
app::SessionSaveStore::Save(const Phase0FoundationState & state,std::string & error) constmethodInventory only; no authored contract note.src/app/session_save_store.cpp:119
app::SessionSaveStore::Load() constmethodInventory only; no authored contract note.src/app/session_save_store.cpp:194
app::SessionSaveLoadResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/session_save_store.hpp:18
app::StartSettlementMaintenance(SettlementMaintenanceRequest request,game::SettlementRuntime & settlements,game::ConstructionRuntime & construction,game::WorkLifecycleRuntime & work,game::ResourceEconomyRuntime & resources)free functionInventory only; no authored contract note.src/app/settlement_maintenance_transaction.cpp:7
app::SettlementMaintenanceTransactionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/settlement_maintenance_transaction.hpp:21
Failure(std::string error)internal helperInventory only; no authored contract note.src/app/settlement_work_composition.cpp:17
SupportsLocalSettlementWork(const game::InventoryOwnerKind kind)internal helperInventory only; no authored contract note.src/app/settlement_work_composition.cpp:21
app::SettlementWorkComposition::SettlementWorkComposition(std::vector<sim::PersistentId> eligible_actor_ids,std::vector<game::SettlementWorkSpatialAnchor> spatial_bindings)methodInventory only; no authored contract note.src/app/settlement_work_composition.cpp:29
app::SettlementWorkComposition::EligibleActorIds() constmethodInventory only; no authored contract note.src/app/settlement_work_composition.cpp:35
app::SettlementWorkComposition::SpatialBindings() constmethodInventory only; no authored contract note.src/app/settlement_work_composition.cpp:40
app::SettlementWorkComposition::FindSpatialBinding(const game::InventoryOwnerMarker owner) constmethodInventory only; no authored contract note.src/app/settlement_work_composition.cpp:44
app::SettlementWorkCompositionCache::Refresh(const game::RuntimeSettlementDefinition & definition,const game::SettlementRecord & settlement,const game::ActorRuntime & actors,const sim::WorldRuntime & world,const std::uint64_t tick,const bool cadence_due)methodReuses one derived settlement-worker and spatial-anchor composition between food-work cadences, then rebuilds it after cadence, topology revision, local-navigation revision, or explicit invalidation without creating save authority.src/app/settlement_work_composition.cpp:51
app::SettlementWorkCompositionCache::Invalidate()methodInventory only; no authored contract note.src/app/settlement_work_composition.cpp:76
app::SettlementWorkCompositionCache::Current() constmethodInventory only; no authored contract note.src/app/settlement_work_composition.cpp:84
app::SettlementWorkCompositionCache::RefreshedAtTick() constmethodInventory only; no authored contract note.src/app/settlement_work_composition.cpp:88
app::BuildSettlementWorkComposition(const game::RuntimeSettlementDefinition & definition,const game::SettlementRecord & settlement,const game::ActorRuntime & actors,const sim::WorldRuntime & world)free functionBuilds bounded sorted resident-worker and owner-spatial indexes only after every authored Actor and inventory anchor resolves through current Actor, topology, chunk, WorldGrid, heat, and local-navigation facts.src/app/settlement_work_composition.cpp:93
app::BuildEconomyScopedSettlementWorkActors(const game::ActorRuntime & actors,const game::ResourceEconomyRuntime & resources)free functionDerives the legacy settlement-work Actor index from carried-inventory owners, alive resident Actor facts, and an explicit bound without visiting unrelated world Actors.src/app/settlement_work_composition.cpp:234
app::SettlementWorkCompositionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/settlement_work_composition.hpp:87
app::SettlementWorkCompositionCacheRefreshResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/settlement_work_composition.hpp:94
app::EconomyScopedSettlementWorkActorsResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/settlement_work_composition.hpp:101
app::CaptureStaticSpriteComposition(const game::RuntimeScene & scene)free functionInventory only; no authored contract note.src/app/static_sprite_composition.cpp:11
app::ApplyConstructionSpriteStages(const game::RuntimeScene & scene,const game::ConstructionRuntime & construction,const std::span<render::StaticSpritePresentation> sprites,std::string & error)free functionInventory only; no authored contract note.src/app/static_sprite_composition.cpp:34
app::StaticSpriteCompositionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/static_sprite_composition.hpp:21
ValidId(const std::string_view id)internal helperInventory only; no authored contract note.src/app/ui_composition_registry.cpp:11
Allows(const UiSlotContract & slot,const UiContributionKind kind)internal helperInventory only; no authored contract note.src/app/ui_composition_registry.cpp:19
FindSlot(const UiSurfaceContract & surface,const std::string_view id)internal helperInventory only; no authored contract note.src/app/ui_composition_registry.cpp:23
Descriptor(const UiSurfaceContract & surface)internal helperInventory only; no authored contract note.src/app/ui_composition_registry.cpp:28
app::UiCompositionRegistry::Build(const std::span<const UiSurfaceContract> surfaces,const std::span<const UiPackageComposition> dependency_ordered_packages,const std::map<std::string,std::string,std::less<>> & selected_replacements) constmethodInventory only; no authored contract note.src/app/ui_composition_registry.cpp:52
app::RegisterUiCompositionApi(ScriptApiRegistry & registry,std::string & error)free functionInventory only; no authored contract note.src/app/ui_composition_registry.cpp:194
app::StandardUiSurfaceContracts()free functionInventory only; no authored contract note.src/app/ui_composition_registry.cpp:216
app::UiContributionKindName(const UiContributionKind kind)free functionInventory only; no authored contract note.src/app/ui_composition_registry.cpp:242
IsLiveJob(const game::JobState state)internal helperInventory only; no authored contract note.src/app/world_indicator_composition.cpp:45
BundleQuantity(const game::ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/app/world_indicator_composition.cpp:50
DisplayName(const RuntimeSession & session,const std::string_view resource_key)internal helperInventory only; no authored contract note.src/app/world_indicator_composition.cpp:57
IndicatorState(const std::uint64_t remaining,const std::uint64_t reserved,const SourceFacts & facts)internal helperInventory only; no authored contract note.src/app/world_indicator_composition.cpp:63
IndicatorPriority(const render::WorldIndicatorState state)internal helperInventory only; no authored contract note.src/app/world_indicator_composition.cpp:80
IndicatorDetail(const std::uint64_t remaining,const std::uint64_t available,const std::uint64_t reserved,const SourceFacts & facts)internal helperInventory only; no authored contract note.src/app/world_indicator_composition.cpp:95
app::WorldIndicatorChannelDefinitions()free functionInventory only; no authored contract note.src/app/world_indicator_composition.cpp:117
app::ComposeResourceActivityIndicators(const RuntimeSession & session,const std::size_t maximum_visits)free functionInventory only; no authored contract note.src/app/world_indicator_composition.cpp:121
app::ComposeResidentWorldLandscape(const sim::WorldRuntime & world,const assets::RuntimeContentCatalog & catalog)free functionInventory only; no authored contract note.src/app/world_landscape_composition.cpp:13
app::WorldLandscapeCompositionResult::Succeeded() constinline methodInventory only; no authored contract note.src/app/world_landscape_composition.hpp:23
app::ComposeWorldResidencyInterests(const sim::WorldRuntime & world,const render::IsometricCameraState & camera,const std::span<const sim::PersistentId> selected)free functionInventory only; no authored contract note.src/app/world_residency_composition.cpp:9
PresentationStyle(const sim::ChunkTerrainKind kind)internal helperInventory only; no authored contract note.src/app/world_terrain_composition.cpp:13
PresentationStyle(const sim::WorldLandArea & area)internal helperInventory only; no authored contract note.src/app/world_terrain_composition.cpp:25
RoadPresentationStyle(const sim::WorldLocalInfrastructureStage stage)internal helperInventory only; no authored contract note.src/app/world_terrain_composition.cpp:52
app::ComposeResidentGroundTerrain(const sim::WorldRuntime & world)free functionInventory only; no authored contract note.src/app/world_terrain_composition.cpp:71
System S.2

#Assets

Manifest validation, stable asset lookup, path safety, immutable byte caching, the required runtime content catalog, release, reset, and load statistics.

Owner

Manifest validation, stable asset lookup, path safety, immutable byte caching, the required runtime content catalog, release, reset, and load statistics.

Dependencies

Core compile options, nlohmann_json, and the standard filesystem. It has no dependency on app, game, simulation, render, or SDL.

Authoritative state

AssetService owns immutable manifest entries and a cache of shared byte strings. RuntimeContentCatalog owns validated, canonically ordered, immutable resource, source-type, profession, job-archetype, recipe, building, land-use, crop, landscape-appearance, landscape-lifecycle, and audio-cue definitions. RuntimeSettlementDefinition owns one immutable authored settlement composition. StaticSpriteAtlasDefinition owns keyed static-world presentation metadata. AssetBlob exposes shared read-only data and resolved source metadata. AssetServiceInspectionSnapshot is a detached read-only view of current manifest and cache facts.

Execution path

  1. Open validates manifest schema, IDs, types, paths, duplicate entries, and root containment before constructing the service.
  2. Load validates ID and expected type, returns cached bytes when present, or opens the resolved file once and stores immutable shared bytes.
  3. LoadRuntimeContentCatalog loads the required content-catalog asset, parses schemas through version 4, validates all stable IDs, family bounds, closed resolver classes, resource bundles, footprints, audio cue bounds, and cross-family references, then returns one shared immutable catalog. Land-use classes include crop-compatible agricultural forms and a non-crop settlement-expansion form; none selects a World parcel. Schema 3 adds landscape appearance families whose class, weighted atlas frames, frame bounds, and manifest references must all resolve before the catalog commits. Schema 4 adds tree, bush, and rock lifecycle policies with compatible standing and harvested appearances, nonempty conserved outputs, positive work, renewal delay, and ecology-pressure bounds.
  4. LoadRuntimeSettlementDefinition validates one authored settlement identity, named profiles, explicit Household identities and membership, personal and Household money custody, inventory anchors, source and storage roles, candidate building references, and bounded stable project alternatives with fixed sites and WorldGrid origins before App composes the candidate. Schema 1 derives Household identities from canonical authored order; schema 2 stores Household identities explicitly; schema 3 adds canonical autonomous project candidates without giving Assets gameplay decision authority.
  5. Required failures return diagnostics; optional missing files return optional_missing without startup failure. Release and Reset remove cache authority only.
  6. The optional meadow-grass image follows the same immutable byte-cache path as other images. The SDL render backend validates its decoded square dimensions; Assets does not infer terrain or presentation state from image contents.
  7. Sprite-atlas schema version 5 retains two to eight named appearance variants plus bounded skin-tone, hair-color, hair-texture, face-shape, and body-shape cardinalities. It requires exactly one child, adolescent, adult, and elder composition with non-empty compatible body, face, hair, skin, and age-layer families and a bounded presentation scale. It validates asset-authored tint buckets, modulation ranges, body-width and face-height ranges, and life-stage-compatible work-clothing, carried-equipment, condition, and weather layer geometry. The parser rejects missing or duplicate stages, families, layers, keys, image references, unordered policy ranges, incompatible values, and invalid frame metadata before Render receives the definition.
  8. manual/generate_villager_assets.py consumes the canonical villager generation manifest and immutable source PNGs. build applies the declared transform and writes the runtime atlas plus a sorted hash and dimension manifest; check rebuilds in a temporary directory and requires byte equality. Generated metadata has no runtime or save authority.
  9. Static-sprite-atlas schema version 1 validates an immutable image, declared dimensions, keyed source rectangles, ground anchors, and bounded render sizes for world props and structures. The parser canonicalizes frame order and rejects duplicate keys or unsafe geometry.
  10. CaptureInspection copies stable manifest order, policy, resolved paths, cache residency, cached byte sizes, and current statistics without performing file IO or changing counters.

Key types and contracts

  • AssetType distinguishes configuration, scenario, scene, world, actor-roster, economy, settlement-definition, incident-catalog, content-catalog, sprite-atlas, static-sprite-atlas, image, and font entries.
  • RuntimeContentCatalog exposes immutable spans and stable lookup for its definition families, including landscape appearances and lifecycle policies. Definition IDs and content versions are authored; canonical sort order is derived. Landscape family frames reference only validated static-atlas keys. Lifecycle policy remains immutable data and retains no World placement, stage, maturity, or causal tick.
  • RuntimeSettlementDefinition exposes at most sixteen canonically ordered AuthoredSettlementProjectCandidate values. Each candidate names a stable project ID, an existing catalog Building definition, the settlement's authored Site, and an in-bound WorldGrid origin. Settlement and Construction retain all mutable decision and project state.
  • SpriteAtlasDefinition validates immutable image references, declared dimensions, destination size, walk cadence, trait-family cardinalities, four complete life-stage composition records, compatible presentation layers, and exactly one in-bounds idle and walk frame with a feet anchor for each of eight directions.
  • StaticSpriteAtlasDefinition exposes deterministic keyed lookup for validated disposable presentation frames; it has no gameplay identity or mutable state.
  • AssetServiceSource names the asset root and manifest path.
  • AssetServiceStats records manifest entries, cache entries, load requests, cache hits, optional misses, failures, loaded bytes, and cache releases.
  • AssetCacheInspectionEntry and AssetServiceInspectionSnapshot provide detached diagnostics without cache mutation authority.
8 source files in this module
97 indexed function definitions

This is source evidence, not an ownership contract. Rows without an authored note make no behavioral claim.

FunctionKindAuthored note statusSource
IsValidAssetId(const std::string_view id)internal helperInventory only; no authored contract note.src/assets/asset_service.cpp:17
IsSafeRelativePath(const std::filesystem::path & path)internal helperInventory only; no authored contract note.src/assets/asset_service.cpp:24
ParseAssetType(const std::string_view name)internal helperInventory only; no authored contract note.src/assets/asset_service.cpp:36
Failure(std::string error)internal helperInventory only; no authored contract note.src/assets/asset_service.cpp:76
assets::AssetTypeName(const AssetType type)free functionReturns the manifest spelling for a typed asset enum and uses unknown only for an invalid enum value.src/assets/asset_service.cpp:83
assets::AssetBlob::Data() constmethodInventory only; no authored contract note.src/assets/asset_service.cpp:113
assets::AssetService::AssetService(std::filesystem::path root,std::map<std::string,Entry> entries)methodInventory only; no authored contract note.src/assets/asset_service.cpp:120
assets::AssetService::Open(AssetServiceSource source,std::string & error)methodReads and validates manifest schema version 1, rejects unsafe or duplicate entries, and constructs the sole file-opening service.src/assets/asset_service.cpp:125
assets::AssetService::Load(const std::string_view id,const AssetType expected_type)methodChecks ID and expected type, returns an immutable cache hit or reads one file, and applies required/optional failure policy with statistics.src/assets/asset_service.cpp:210
assets::AssetService::Release(const std::string_view id)methodRemoves one cached asset ID when present, updates the current cache count, and records one cache release without invalidating existing immutable blob owners.src/assets/asset_service.cpp:287
assets::AssetService::Reset()methodDrops every cached byte buffer, records each release, and leaves immutable manifest entries intact.src/assets/asset_service.cpp:296
assets::AssetService::Stats() constmethodInventory only; no authored contract note.src/assets/asset_service.cpp:302
assets::AssetService::CaptureInspection() constmethodCopies manifest entries in stable ID order with resolved paths, required policy, cache residency, cached byte sizes, and current counters without file IO or mutation.src/assets/asset_service.cpp:304
Failure(std::string error)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:25
ValidStableId(const std::string_view id,const std::string_view required_prefix)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:29
ValidDisplayName(const std::string_view value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:40
CanonicalizeDefinitions(std::vector<Definition> & definitions,const std::string_view family,const std::string_view required_prefix,Projection projection,std::string & error)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:45
FindDefinition(const std::vector<Definition> & definitions,const std::string_view id)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:87
ParseBoundedClass(const std::string_view value,std::initializer_list<std::pair<std::string_view,Enum>> choices,const nlohmann::json & source,const std::string_view field_name)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:94
ParseResourceClass(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:105
ParseSourceResolver(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:118
ParseProfessionClass(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:127
ParseJobResolver(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:138
ParseRecipeResolver(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:149
ParseBuildingFunction(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:155
ParseLandUseClass(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:170
ParseLandscapeAppearanceClass(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:181
ParseLandscapeLifecycleClass(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:195
ParseLandscapeHarvestResult(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:204
ParseResource(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:212
ParseSourceType(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:221
ParseProfession(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:232
ParseJobArchetype(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:241
ParseResourceBundle(const nlohmann::json & value,const std::string_view field_name)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:251
ParseRecipe(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:269
ParseBuilding(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:308
ParseLandUse(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:344
ParseCrop(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:354
ParseLandscapeAppearance(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:365
ParseLandscapeLifecycle(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:387
ParseAudioCue(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:406
ParseFamily(const nlohmann::json & document,const std::string_view field_name,Parser parser)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:418
ValidateBundle(std::vector<ContentResourceQuantity> & bundle,const bool require_nonempty,const RuntimeContentCatalog & catalog,const std::string_view owner,std::string & error)internal helperInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:434
assets::RuntimeContentCatalog::RuntimeContentCatalog(Metadata metadata,std::vector<ContentResourceDefinition> resources,std::vector<ContentSourceTypeDefinition> source_types,std::vector<ContentProfessionDefinition> professions,std::vector<ContentJobArchetypeDefinition> job_archetypes,std::vector<ContentRecipeDefinition> recipes,std::vector<ContentBuildingDefinition> buildings,std::vector<ContentLandUseDefinition> land_uses,std::vector<ContentCropDefinition> crops,std::vector<ContentLandscapeAppearanceDefinition> landscape_appearances,std::vector<ContentLandscapeLifecycleDefinition> landscape_lifecycles,std::vector<core::AudioCueDefinition> audio_cues)methodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:742
assets::RuntimeContentCatalog::AssetId() constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:760
assets::RuntimeContentCatalog::SchemaVersion() constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:762
assets::RuntimeContentCatalog::ContentVersion() constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:764
assets::RuntimeContentCatalog::Resources() constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:766
assets::RuntimeContentCatalog::SourceTypes() constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:770
assets::RuntimeContentCatalog::Professions() constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:774
assets::RuntimeContentCatalog::JobArchetypes() constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:779
assets::RuntimeContentCatalog::Recipes() constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:783
assets::RuntimeContentCatalog::Buildings() constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:787
assets::RuntimeContentCatalog::LandUses() constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:791
assets::RuntimeContentCatalog::Crops() constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:795
assets::RuntimeContentCatalog::LandscapeAppearances() constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:800
assets::RuntimeContentCatalog::LandscapeLifecycles() constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:805
assets::RuntimeContentCatalog::AudioCues() constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:809
assets::RuntimeContentCatalog::FindResource(const std::string_view id) constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:814
assets::RuntimeContentCatalog::FindSourceType(const std::string_view id) constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:819
assets::RuntimeContentCatalog::FindProfession(const std::string_view id) constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:824
assets::RuntimeContentCatalog::FindJobArchetype(const std::string_view id) constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:829
assets::RuntimeContentCatalog::FindRecipe(const std::string_view id) constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:834
assets::RuntimeContentCatalog::FindBuilding(const std::string_view id) constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:839
assets::RuntimeContentCatalog::FindLandUse(const std::string_view id) constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:844
assets::RuntimeContentCatalog::FindCrop(const std::string_view id) constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:849
assets::RuntimeContentCatalog::FindLandscapeAppearance(const std::string_view id) constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:854
assets::RuntimeContentCatalog::FindLandscapeLifecycle(const std::string_view id) constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:859
assets::RuntimeContentCatalog::FindAudioCue(const std::string_view id) constmethodInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:864
assets::ParseRuntimeContentCatalog(const RuntimeContentCatalogDocument document)free functionInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:869
assets::LoadRuntimeContentCatalog(const std::string_view asset_id,AssetService & asset_service)free functionInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:916
assets::ContentResourceClassName(const ContentResourceClass value)free functionInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:953
assets::ContentSourceResolverClassName(const ContentSourceResolverClass value)free functionInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:975
assets::ContentProfessionClassName(const ContentProfessionClass value)free functionInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:987
assets::ContentJobResolverClassName(const ContentJobResolverClass value)free functionInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:1003
assets::ContentRecipeResolverClassName(const ContentRecipeResolverClass value)free functionInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:1019
assets::ContentBuildingFunctionName(const ContentBuildingFunction value)free functionInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:1027
assets::ContentLandUseClassName(const ContentLandUseClass value)free functionInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:1051
assets::ContentLandscapeAppearanceClassName(const ContentLandscapeAppearanceClass value)free functionInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:1068
assets::ContentLandscapeLifecycleClassName(const ContentLandscapeLifecycleClass value)free functionInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:1091
assets::ContentLandscapeHarvestResultName(const ContentLandscapeHarvestResult value)free functionInventory only; no authored contract note.src/assets/runtime_content_catalog.cpp:1104
assets::ContentLandscapeLifecycleDefinition::Renewable() constinline methodInventory only; no authored contract note.src/assets/runtime_content_catalog.hpp:277
assets::RuntimeContentCatalogLoadResult::Succeeded() constinline methodInventory only; no authored contract note.src/assets/runtime_content_catalog.hpp:367
ParseFacing(const std::string_view name)internal helperInventory only; no authored contract note.src/assets/sprite_atlas_definition.cpp:25
ParseLifeStage(const std::string_view name)internal helperInventory only; no authored contract note.src/assets/sprite_atlas_definition.cpp:34
ParsePresentationLayerKind(const std::string_view name)internal helperInventory only; no authored contract note.src/assets/sprite_atlas_definition.cpp:43
ParsePresentationLayerShape(const std::string_view name)internal helperInventory only; no authored contract note.src/assets/sprite_atlas_definition.cpp:53
ParseFrame(const Json & document)internal helperInventory only; no authored contract note.src/assets/sprite_atlas_definition.cpp:69
ValidateFrame(const SpriteFrameDefinition & frame,const SpriteAtlasDefinition & atlas,const std::string_view label)internal helperInventory only; no authored contract note.src/assets/sprite_atlas_definition.cpp:80
ParseAppearanceVariant(const Json & document)internal helperInventory only; no authored contract note.src/assets/sprite_atlas_definition.cpp:97
assets::ParseSpriteAtlasDefinition(const SpriteAtlasDefinitionSource source)free functionInventory only; no authored contract note.src/assets/sprite_atlas_definition.cpp:121
assets::SpriteAtlasDefinitionResult::Succeeded() constinline methodInventory only; no authored contract note.src/assets/sprite_atlas_definition.hpp:15
Failure(const std::string_view source_name,std::string error)internal helperInventory only; no authored contract note.src/assets/static_sprite_atlas_definition.cpp:19
ParseFrame(const Json & document)internal helperInventory only; no authored contract note.src/assets/static_sprite_atlas_definition.cpp:26
ValidateFrame(const StaticSpriteFrameDefinition & frame,const StaticSpriteAtlasDefinition & atlas)internal helperInventory only; no authored contract note.src/assets/static_sprite_atlas_definition.cpp:40
assets::ParseStaticSpriteAtlasDefinition(const StaticSpriteAtlasDefinitionSource source)free functionInventory only; no authored contract note.src/assets/static_sprite_atlas_definition.cpp:68
assets::StaticSpriteAtlasDefinitionResult::Succeeded() constinline methodInventory only; no authored contract note.src/assets/static_sprite_atlas_definition.hpp:15
System S.3

#Core

Backend-neutral low-level contracts for audio, platform input events, runtime commands, and ordered command storage.

Owner

Backend-neutral low-level contracts for audio, platform input events, runtime commands, and ordered command storage.

Dependencies

C++ standard library only. Core does not depend on SDL, EnTT, game rules, or rendering.

Authoritative state

RuntimeCommandQueue owns ordered commands and the next sequence number until commands are drained. RuntimeCommandQueueState is its detached persistence value. AudioService retains one process-local validated semantic cue-definition map for the selected backend; it has no simulation or save authority. Other core files define values and interfaces without durable runtime state.

Execution path

  1. Platform adapters emit PlatformEvent values. Controls consumes them without SDL types.
  2. Control adapters push RuntimeCommand values with a target tick and sequence number. The scheduler drains and applies them in stable order.
  3. Queue capture preserves pending insertion order and the next sequence. Validation rejects invalid command types, duplicate or unordered sequences, and commands that exceed the saved sequence position before restore.
  4. AudioService transactionally configures a validated semantic cue-definition map and resolves stable cue IDs before calling the selected backend. Unknown or malformed cues reject without partial replacement. NullAudioService accepts declared cues as unavailable presentation and remains the headless or disabled fallback.

Key types and contracts

  • PlatformEventType, PlatformKey, and PlatformPointerButton define the physical input vocabulary.
  • PointerPosition and PointerScrollSteps use pixel and scroll-step units explicitly.
  • RuntimeCommandType currently supports quit, pause toggle, single step, and diagnostics toggle.
  • RuntimeCommandQueueState stores pending commands and next_sequence without independent mutation authority.
  • AudioCueDefinition contains one stable ID plus bounded frequency, duration, gain, pan, and priority values. AudioCueResult reports played, unavailable, rejected, or busy without changing gameplay.
8 source files in this module
27 indexed function definitions

This is source evidence, not an ownership contract. Rows without an authored note make no behavioral claim.

FunctionKindAuthored note statusSource
core::ValidateAudioCueDefinition(const AudioCueDefinition & definition,std::string & error)free functionInventory only; no authored contract note.src/core/audio_service.cpp:10
core::AudioService::ConfigureCueDefinitions(const std::span<const AudioCueDefinition> definitions,std::string & error)methodInventory only; no authored contract note.src/core/audio_service.cpp:40
core::AudioService::PlayCue(const std::string_view cue_id)methodInventory only; no authored contract note.src/core/audio_service.cpp:59
core::NullAudioService::PlayCueDefinition(const AudioCueDefinition & definition)methodInventory only; no authored contract note.src/core/audio_service.cpp:68
core::AudioCueResult::Accepted() constinline methodInventory only; no authored contract note.src/core/audio_service.hpp:41
core::AudioService::~AudioService()interface contractInventory only; no authored contract note.src/core/audio_service.hpp:52
core::AudioService::BackendName() constinterface contractInventory only; no authored contract note.src/core/audio_service.hpp:54
core::AudioService::Available() constinterface contractInventory only; no authored contract note.src/core/audio_service.hpp:55
core::AudioService::ConfigureCueDefinitions(std::span<const AudioCueDefinition> definitions,std::string & error)interface contractInventory only; no authored contract note.src/core/audio_service.hpp:56
core::AudioService::PlayCue(std::string_view cue_id)interface contractInventory only; no authored contract note.src/core/audio_service.hpp:58
core::AudioService::PlayCueDefinition(const AudioCueDefinition & definition)interface contractInventory only; no authored contract note.src/core/audio_service.hpp:62
core::NullAudioService::BackendName() constinline methodInventory only; no authored contract note.src/core/audio_service.hpp:70
core::NullAudioService::Available() constinline methodInventory only; no authored contract note.src/core/audio_service.hpp:72
IsValidCommandType(const RuntimeCommandType type)internal helperAccepts only the four runtime command types implemented by the current scheduler.src/core/runtime_command_queue.cpp:12
core::RuntimeCommandQueue::Push(const RuntimeCommandType type,const std::uint64_t target_tick)methodAppends a tick-targeted runtime command, stamps it with the next insertion sequence for deterministic ties, and rejects sequence exhaustion before wraparound.src/core/runtime_command_queue.cpp:25
core::RuntimeCommandQueue::DrainThrough(const std::uint64_t target_tick)methodStable-partitions pending commands, returns every command eligible through the requested tick in insertion-sequence order, and retains future commands.src/core/runtime_command_queue.cpp:36
core::RuntimeCommandQueue::DiscardPending()methodDiscards every queued session command at the leaving boundary, returns the discarded count, and preserves the next sequence so one queue instance never reuses command order values.src/core/runtime_command_queue.cpp:47
core::RuntimeCommandQueue::Empty() constmethodInventory only; no authored contract note.src/core/runtime_command_queue.cpp:53
core::RuntimeCommandQueue::CaptureState() constmethodCopies pending commands and the next insertion sequence into detached queue state.src/core/runtime_command_queue.cpp:55
core::RuntimeCommandQueue::RestoreState(const RuntimeCommandQueueState & state,std::string & error)methodValidates detached queue state before replacing pending commands and the next insertion sequence.src/core/runtime_command_queue.cpp:59
core::RuntimeCommandQueue::ValidateState(const RuntimeCommandQueueState & state,std::string & error)methodEnforces the pending-command limit, valid command types, strictly increasing sequences, and a next sequence above every pending command.src/core/runtime_command_queue.cpp:69
core::SpriteFacingName(const SpriteFacing facing)free functionInventory only; no authored contract note.src/core/sprite_atlas_definition.hpp:30
core::SpriteAtlasDefinition::Frames(const SpriteFacing facing) constinline methodInventory only; no authored contract note.src/core/sprite_atlas_definition.hpp:172
core::SpriteAtlasDefinition::AppearanceVariant(const std::uint64_t variation_key) constinline methodInventory only; no authored contract note.src/core/sprite_atlas_definition.hpp:178
core::SpriteAtlasDefinition::LifeStageComposition(const SpriteLifeStage stage) constinline methodInventory only; no authored contract note.src/core/sprite_atlas_definition.hpp:184
core::SpriteAtlasDefinition::PresentationLayer(const SpritePresentationLayerKind kind) constinline methodInventory only; no authored contract note.src/core/sprite_atlas_definition.hpp:191
core::StaticSpriteAtlasDefinition::FindFrame(const std::string_view key) constinline methodInventory only; no authored contract note.src/core/static_sprite_atlas_definition.hpp:32
System S.4

#Platform SDL

SDL lifecycle, OS event translation and observation, monotonic timing, short delays, process-memory sampling, and SDL audio startup/fallback.

Owner

SDL lifecycle, OS event translation and observation, monotonic timing, short delays, process-memory sampling, and SDL audio startup/fallback.

Dependencies

Core contracts and SDL3. SDL types remain inside this module or render backend files.

Authoritative state

SdlRuntime owns SDL initialization state. The SDL audio implementation owns the opened device and stream through RAII.

Execution path

  1. Initialize starts the SDL video/events subsystems and reports SDL errors without throwing.
  2. PollEvents first offers each raw event to one non-owning SDL event observer, then translates quit, focus loss, keyboard including F8/F9, pointer motion, pointer button, and wheel events into core values.
  3. ProcessResidentMemoryBytes reads the current Linux process resident set from the platform process interface. Unsupported platforms return no value rather than inventing a measurement.
  4. Audio creation returns a real SDL service when available and a null service with a reason when disabled or startup fails. The SDL service receives only validated cue definitions, generates a bounded tone into its owned stream, and applies stable priority and busy behavior without exposing SDL state to callers.

Key types and contracts

  • SdlRuntime is non-copyable and releases SDL state during destruction.
  • SdlEventObserver is the SDL-backend-only event hook used by the ImGui tools backend. It does not enter Core, Controls, Simulation, or Game.
  • Process-memory samples are nondeterministic diagnostics. They have no simulation, persistence, or resource-ownership authority.
  • The concrete SDL audio service is private to its implementation; callers receive std::unique_ptr<AudioService>. The backend owns device, stream, queued sample lifetime, and presentation-only preemption.
5 source files in this module
10 indexed function definitions

This is source evidence, not an ownership contract. Rows without an authored note make no behavioral claim.

FunctionKindAuthored note statusSource
platform::sdl::CreateSdlAudioService(const bool disabled,std::string & fallback_reason)free functionCreates the SDL audio device/stream service or returns the null fallback with a diagnostic reason.src/platform/sdl/sdl_audio_service.cpp:106
MapScancode(const SDL_Scancode scancode)internal helperInventory only; no authored contract note.src/platform/sdl/sdl_runtime.cpp:20
platform::sdl::SdlRuntime::~SdlRuntime()methodInventory only; no authored contract note.src/platform/sdl/sdl_runtime.cpp:90
platform::sdl::SdlRuntime::Initialize(std::string & error)methodStarts SDL video and event subsystems once and reports initialization failure through the caller-owned error string.src/platform/sdl/sdl_runtime.cpp:96
platform::sdl::SdlRuntime::SetEventObserver(SdlEventObserver * observer)methodStores one non-owning SDL-backend event observer selected by App; null disables observation and event translation remains Platform-owned.src/platform/sdl/sdl_runtime.cpp:113
platform::sdl::SdlRuntime::PollEvents() constmethodOffers each raw SDL event to the configured backend observer, then converts window, focus, keyboard, mouse-button, pointer-motion, and wheel events into backend-neutral Core values.src/platform/sdl/sdl_runtime.cpp:117
platform::sdl::SdlRuntime::Now() constmethodReturns SDL's monotonic performance counter converted to nanoseconds for frame and simulation measurements.src/platform/sdl/sdl_runtime.cpp:203
platform::sdl::SdlRuntime::ProcessResidentMemoryBytes() constmethodInventory only; no authored contract note.src/platform/sdl/sdl_runtime.cpp:207
platform::sdl::SdlRuntime::Delay(const std::chrono::nanoseconds duration) constmethodSleeps for a positive duration through SDL's precise delay API and ignores zero or negative durations.src/platform/sdl/sdl_runtime.cpp:227
platform::sdl::SdlRuntime::ApplicationStoragePath(std::string & error) constmethodInventory only; no authored contract note.src/platform/sdl/sdl_runtime.cpp:233
System S.5

#Controls

Backend-neutral bindings, per-frame action transitions, held-action reference counts, pointer state, and runtime command mapping.

Owner

Backend-neutral bindings, per-frame action transitions, held-action reference counts, pointer state, and runtime command mapping.

Dependencies

Core platform events and runtime commands. It has no SDL, simulation, game, or render backend dependency.

Authoritative state

The immutable physical binding catalog is the authoritative keyboard, pointer-button, and wheel-to-action mapping. ControlState owns physical held arrays, action held counts, pressed/released flags, ordered pressed actions, pointer positions, wheel accumulation, additive-selection modifier state captured at primary mouse-down, and focus-reset state.

Execution path

  1. BoundAction resolves backend-neutral physical inputs through the catalog. Update clears transient state, consumes ordered platform events, updates physical state through that lookup, and emits action transitions.
  2. Reset clears held keyboard, pointer, action, cursor, wheel, and gesture state after scenario reset.
  3. Multiple physical bindings may hold one action. Reference counts prevent releasing one binding from canceling another still-held binding.
  4. MapRuntimeControls converts only runtime-owned actions into tick-stamped commands. Run control, camera, debug, selection, and the App-owned F10 package-reload boundary read the same action state through their own adapters.

Key types and contracts

  • ControlAction contains runtime, developer reset/fast-forward, script-package reload, debug, camera, zoom, primary-selection, and additive-selection actions.
  • KeyboardControlBinding, PointerButtonControlBinding, and PointerScrollControlBinding expose immutable physical mappings. PointerScrollAxis names the supported backend-neutral wheel axis.
  • kControlActionCount fixes storage size and excludes the count sentinel from valid queries.
7 source files in this module
30 indexed function definitions

This is source evidence, not an ownership contract. Rows without an authored note make no behavioral claim.

FunctionKindAuthored note statusSource
FindBoundAction(const std::span<const Binding> bindings,const Input input)internal helperFinds one physical input in an immutable binding span and returns its action without changing catalog or input state.src/controls/control_binding.cpp:49
controls::KeyboardControlBindings()free functionReturns the immutable authoritative keyboard-to-action binding catalog.src/controls/control_binding.cpp:65
controls::PointerButtonControlBindings()free functionReturns the immutable authoritative pointer-button-to-action binding catalog.src/controls/control_binding.cpp:69
controls::PointerScrollControlBindings()free functionReturns the immutable authoritative pointer-scroll-to-action binding catalog.src/controls/control_binding.cpp:73
controls::BoundAction(const core::PlatformKey key)free functionResolves one backend-neutral key, pointer button, or pointer-scroll axis through the authoritative physical binding catalog.src/controls/control_binding.cpp:77
controls::BoundAction(const core::PlatformPointerButton button)free functionResolves one backend-neutral key, pointer button, or pointer-scroll axis through the authoritative physical binding catalog.src/controls/control_binding.cpp:81
controls::BoundAction(const PointerScrollAxis axis)free functionResolves one backend-neutral key, pointer button, or pointer-scroll axis through the authoritative physical binding catalog.src/controls/control_binding.cpp:85
Index(const ControlAction action)internal helperInventory only; no authored contract note.src/controls/control_state.cpp:10
Index(const core::PlatformKey key)internal helperInventory only; no authored contract note.src/controls/control_state.cpp:12
Index(const core::PlatformPointerButton button)internal helperInventory only; no authored contract note.src/controls/control_state.cpp:14
controls::ControlState::Update(const std::span<const core::PlatformEvent> events)methodStarts a new input frame and folds ordered platform events through the authoritative binding catalog into physical, action, pointer, wheel, mouse-down modifier, and focus-reset state.src/controls/control_state.cpp:20
controls::ControlState::Reset()methodClears all held, pointer, wheel, edge, and transient input state after scenario reset or at the leaving-session boundary and marks the frame as an input reset.src/controls/control_state.cpp:76
controls::ControlState::Pressed(const ControlAction action) constmethodInventory only; no authored contract note.src/controls/control_state.cpp:88
controls::ControlState::Released(const ControlAction action) constmethodInventory only; no authored contract note.src/controls/control_state.cpp:92
controls::ControlState::Held(const ControlAction action) constmethodInventory only; no authored contract note.src/controls/control_state.cpp:96
controls::ControlState::PressedActions() constmethodInventory only; no authored contract note.src/controls/control_state.cpp:100
controls::ControlState::PointerPosition() constmethodInventory only; no authored contract note.src/controls/control_state.cpp:104
controls::ControlState::PointerScroll() constmethodInventory only; no authored contract note.src/controls/control_state.cpp:108
controls::ControlState::PointerPressPosition(const ControlAction action) constmethodInventory only; no authored contract note.src/controls/control_state.cpp:113
controls::ControlState::PointerReleasePosition(const ControlAction action) constmethodInventory only; no authored contract note.src/controls/control_state.cpp:119
controls::ControlState::PointerPressModifierHeld(const ControlAction action,const ControlAction modifier) constmethodReports whether the supported selection modifier was held at the exact primary pointer press event, even if later events release it in the same frame.src/controls/control_state.cpp:124
controls::ControlState::InputResetThisFrame() constmethodInventory only; no authored contract note.src/controls/control_state.cpp:130
controls::ControlState::PressKey(const core::PlatformKey key)methodInventory only; no authored contract note.src/controls/control_state.cpp:132
controls::ControlState::ReleaseKey(const core::PlatformKey key)methodInventory only; no authored contract note.src/controls/control_state.cpp:147
controls::ControlState::PressPointerButton(const core::PlatformPointerButton button,const core::PointerPosition position)methodInventory only; no authored contract note.src/controls/control_state.cpp:163
controls::ControlState::ReleasePointerButton(const core::PlatformPointerButton button,const core::PointerPosition position)methodInventory only; no authored contract note.src/controls/control_state.cpp:183
controls::ControlState::MarkPressed(const ControlAction action)methodInventory only; no authored contract note.src/controls/control_state.cpp:201
controls::ControlState::MarkReleased(const ControlAction action)methodInventory only; no authored contract note.src/controls/control_state.cpp:209
controls::ControlState::ClearHeld()methodInventory only; no authored contract note.src/controls/control_state.cpp:213
controls::MapRuntimeControls(const ControlState & controls,const std::uint64_t target_tick,core::RuntimeCommandQueue & commands,const bool include_quit)free functionPushes runtime-owned pressed actions into the ordered command queue for a specific simulation tick.src/controls/runtime_control_mapper.cpp:7
System S.6

#Simulation

Stable entity identity, ECS storage, deterministic tick order, fixed-step scheduling, versioned ECS state, and authoritative World grid, topology, exact-local and route travel, environment, ecology, renewable resources, infrastructure, and Settlements.

Owner

Stable entity identity, ECS storage, deterministic tick order, fixed-step scheduling, versioned ECS state, and authoritative World grid, topology, exact-local and route travel, environment, ecology, renewable resources, infrastructure, and Settlements.

Dependencies

Core contracts, EnTT, and private nlohmann_json serialization. Simulation does not depend on SDL, rendering, app composition, or Worldforge game rules.

Authoritative state

EcsWorld owns the EnTT registry, stable-ID lookup table, debug-name side table, and next ID. FixedStepScheduler owns tick, accumulator, pause/step/quit state, and frame metrics. World retains authoritative movement records, landscape clusters and features, plus derived active-mover indexes and pending-arrival queues. Those indexes and queues have no independent save authority. Detached state values have no mutation authority.

Execution path

  1. Entity creation assigns or restores a persistent ID, writes plain components, and validates identity invariants.
  2. RunEcsTick executes the fixed EcsSystemOrder; the current motion system updates transforms from velocity and fixed tick seconds.
  3. The scheduler applies ordered commands, clamps large frame deltas, advances zero or more fixed ticks, supports paused single-step, accepts explicit bounded tick budgets without changing pause state, and exposes a read-only snapshot.
  4. New schedulers default developer diagnostics to hidden so a normal launch starts on the production player path. The existing command still toggles the flag, and capture, restore, save, and replay retain its explicit value.
  5. Scheduler capture preserves fixed-step position, the partial accumulator, pause and pending-step flags, quit and diagnostics flags, and timing counters. Restore validates the complete detached value before replacing scheduler state.
  6. CaptureState orders entities by persistent ID. SerializeEcsWorld writes schema version 1 JSON. Deserialization validates detached state, and RestoreState builds a temporary world before replacing live state.
  7. WorldRuntime advances topology-bound travel, environment, ecology, renewable resources, infrastructure, and Settlements to one exact target tick. Route advancement visits only active_travelers_; local navigation visits only active_movers_. Reaching a destination removes the record from its active index and adds the stable ID once to the matching pending-arrival queue. Focused owners stage their results before the World state commits.
  8. Runtime arrival reconciliation reads bounded prefixes from the route and exact-local pending-arrival queues and acknowledges only the same ordered IDs after Actor accepts the arrival. Candidate load and restore rebuild those derived queues from validated arrived World records selected by the restored Actor plans. Terminal movement records remain authoritative history but do not participate in normal tick work.
  9. Every retained local move stores the last derived-blocker hash used to plan its current path as source metadata. The hash has no collision or save authority over blocker cells, but preserving it lets restore detect an unapplied blocker change and perform the same bounded replan as uninterrupted execution. Schema 15 moves migrate without the hash and conservatively replan on their next visit.
  10. WorldGrid helpers convert finite world positions and authored cells to one canonical cell center and signed chunk coordinate. App may use those detached values to validate settlement anchors, but World remains the sole position and navigation authority.
  11. Environment and ecology updates visit canonical Region or Site records at explicit intervals, retain exact work counters, and use heat and active-chunk facts to bound detailed work. Renewable harvest and renewal preserve the generated baseline separately from persistent modifications.
  12. Local infrastructure condition updates accept a canonical sorted set of project identities that the current maintenance composition protects from wear. World still counts protected records against the visit budget but does not change their condition or revision. The protection set is request-local and has no save authority.
  13. World landscape schema 2 retains stable cluster and feature identities, appearance-family references, lifecycle policy identity, kind, stage, maturity, harvested appearance, renewal deadline and ecology threshold, canonical cells, causal ticks, density, revisions, and authored variation seeds. Candidate construction rejects duplicate identities, overlapping feature cells, invalid topology, missing cluster membership, impossible stage-kind combinations, invalid causal ticks, and empty clusters. The current resident view selects only features in loaded chunks; it does not create or delete World facts.
  14. World land schema 3 retains optional controlling Site identity separately from dedication, crop, cover, preparation, and land-use identity. Validation rejects unknown controlling Sites, and the revision-checked mutation can set or clear control without changing another owner. Schema 2 migration leaves control empty.
  15. WorldRuntime::DeriveParcelCandidates canonicalizes detached eligible land-use IDs, pre-rotated footprint variants, and occupied cells before bounded area, origin, footprint-cell, and path visits. It returns only physically contained, topology-valid, unoccupied, landscape-clear candidates with a reachable perimeter cell. Exhausted work clears the partial candidate set, and no result has save, selection, Settlement, Construction, or mutation authority.

Key types and contracts

  • PersistentId is the durable identity; EntityHandle is the validated public handle. Raw EnTT entities do not cross the world boundary.
  • Transform2D, TestVelocity, Selectable, and RenderProxy are plain components with explicit units.
  • TestEntityState, RenderProxyState, and SelectableState are plain snapshots used across ownership boundaries.
  • EcsWorldEntityState and EcsWorldState contain complete current ECS records, cold debug names, and the next persistent-ID high-water mark without EnTT or JSON types.
  • EcsWorldSerializationResult and EcsWorldDeserializationResult return either document/state values or an actionable error without changing the live world.
  • FixedStepSchedulerState contains the complete current scheduler position needed for deterministic continuation.
  • WorldSubstrate::active_travelers_ and WorldLocalNavigation::active_movers_ are derived ordered indexes over authoritative movement records. The two pending-arrival queues and per-move derived-blocker cache are derived indexes. Capture and schema 16 serialization retain movement records plus each path's blocker-hash source metadata, while candidate construction rebuilds active membership and cache state and App hydrates only pending Actor arrivals before activation.
  • WorldEnvironmentState retains calendar policy and Region biome, weather, and pressure facts. WorldEcologyState retains regional population summaries and finite renewable Site sources. Neither value grants knowledge or presentation authority.
  • WorldGridDefinition, WorldCellCoordinate, ChunkCoordinate, and Transform2D keep placement cells, signed chunks, and meter positions explicit. WorldCellCenterPosition returns the canonical physical center for an authored placement cell without mutating World.
  • WorldLandscapeClusterState and WorldLandscapeFeatureState contain retained placement and lifecycle truth. WorldLandscapeVariationKey mixes the cluster seed, stable feature identity, and canonical cell into one repeatable input for detached presentation selection. Revision-checked harvest changes standing features to stump or cleared state. World advance visits each retained feature once, consults current regional Ecology pressure, and renews only due eligible features. World runtime schema 16 serializes those facts and local-move blocker-hash source metadata; schema 15 moves conservatively replan, schema 14 landscape features migrate as mature standing records, and earlier schemas supply an empty landscape.
58 source files in this module
519 indexed function definitions

This is source evidence, not an ownership contract. Rows without an authored note make no behavioral claim.

FunctionKindAuthored note statusSource
ShapeName(const RenderProxyShape shape)internal helperReturns the stable text label for each render-proxy shape in entity diagnostics.src/sim/ecs_debug_dump.cpp:9
sim::DumpEntity(const EcsWorld & world,const EntityHandle handle)free functionResolves a stable handle and formats identity, debug name, and present components without exposing mutable registry access.src/sim/ecs_debug_dump.cpp:23
IsValid(const EcsSystemId id)internal helperInventory only; no authored contract note.src/sim/ecs_tick.cpp:31
IsValid(const EcsComponentId id)internal helperInventory only; no authored contract note.src/sim/ecs_tick.cpp:39
IsValid(const ComponentAccessMode mode)internal helperInventory only; no authored contract note.src/sim/ecs_tick.cpp:48
sim::TestMotionSystem::Run(EcsWorld & world,const TickDelta delta)methodUpdates every entity with transform and test velocity using the explicit fixed tick duration; no render delta enters the calculation.src/sim/ecs_tick.cpp:59
sim::EcsSystemOrder()free functionReturns the immutable current system order used by runtime code and order-contract tests.src/sim/ecs_tick.cpp:79
sim::ValidateEcsSystemDescriptors(const std::span<const EcsSystemDescriptor> systems,std::string & error)free functionInventory only; no authored contract note.src/sim/ecs_tick.cpp:81
sim::RunEcsTick(EcsWorld & world,const TickDelta delta)free functionRuns the fixed simulation system list in declared order for one explicit tick duration.src/sim/ecs_tick.cpp:153
Failure(std::string error)internal helperInventory only; no authored contract note.src/sim/ecs_world.cpp:13
IsFiniteTransform(const Transform2D transform)internal helperRequires both world-position coordinates to be finite before a detached entity state can serialize or restore.src/sim/ecs_world.cpp:20
IsFiniteVelocity(const TestVelocity velocity)internal helperRequires both velocity coordinates to be finite before a detached entity state can serialize or restore.src/sim/ecs_world.cpp:24
IsPositiveFinite(const double value)internal helperAccepts only finite values greater than zero for selectable and render-proxy footprint radii.src/sim/ecs_world.cpp:29
IsValidShape(const RenderProxyShape shape)internal helperAccepts only the three render-proxy shapes supported by the current runtime and schema version 1.src/sim/ecs_world.cpp:31
sim::EcsWorld::CreateTestEntity(const Transform2D transform,const std::optional<TestVelocity> velocity,const std::optional<Selectable> selectable,const std::optional<RenderProxy> render_proxy,std::string debug_name)methodAllocates a new persistent ID and creates the requested current-phase component set plus cold debug metadata.src/sim/ecs_world.cpp:43
sim::EcsWorld::RestoreTestEntity(const TestEntityState & state,std::string debug_name)methodRecreates a saved test-entity snapshot with its existing persistent ID and rejects collisions or invalid state.src/sim/ecs_world.cpp:64
sim::EcsWorld::Destroy(const EntityHandle handle)methodInventory only; no authored contract note.src/sim/ecs_world.cpp:78
sim::EcsWorld::IsAlive(const EntityHandle handle) constmethodInventory only; no authored contract note.src/sim/ecs_world.cpp:91
sim::EcsWorld::Capture(const EntityHandle handle) constmethodInventory only; no authored contract note.src/sim/ecs_world.cpp:93
sim::EcsWorld::CaptureState() constmethodCopies every current entity and cold debug name in persistent-ID order and preserves the next generated-ID high-water mark.src/sim/ecs_world.cpp:123
sim::EcsWorld::RestoreState(const EcsWorldState & state,std::string & error)methodValidates detached state, rebuilds it through stable-ID creation in a temporary world, and replaces live state only after the complete restore succeeds.src/sim/ecs_world.cpp:148
sim::EcsWorld::ValidateState(const EcsWorldState & state,std::string & error)methodRejects invalid IDs, duplicates, size limits, non-finite component values, invalid footprints, unsupported shapes, and oversized debug names before restore or serialization.src/sim/ecs_world.cpp:178
sim::EcsWorld::DebugName(const EntityHandle handle) constmethodInventory only; no authored contract note.src/sim/ecs_world.cpp:241
sim::EcsWorld::EntityCount() constmethodInventory only; no authored contract note.src/sim/ecs_world.cpp:249
sim::EcsWorld::CollectRenderProxies(std::vector<RenderProxyState> & output) constmethodInventory only; no authored contract note.src/sim/ecs_world.cpp:251
sim::EcsWorld::CollectSelectables(std::vector<SelectableState> & output) constmethodInventory only; no authored contract note.src/sim/ecs_world.cpp:265
sim::EcsWorld::ValidateInvariants() constmethodChecks registry, ID map, component identity, and debug-name consistency and returns the first ownership violation.src/sim/ecs_world.cpp:279
sim::EcsWorld::CreateWithId(const TestEntityState & state,std::string debug_name)methodInventory only; no authored contract note.src/sim/ecs_world.cpp:312
sim::EcsWorld::Resolve(const EntityHandle handle) constmethodInventory only; no authored contract note.src/sim/ecs_world.cpp:341
sim::EntityCreateResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/ecs_world.hpp:50
SerializationFailure(std::string error)internal helperBuilds a failed serialization result without a partial JSON document.src/sim/ecs_world_serialization.cpp:16
DeserializationFailure(std::string error)internal helperBuilds a failed deserialization result without a partial typed world state.src/sim/ecs_world_serialization.cpp:20
ShapeName(const RenderProxyShape shape)internal helperMaps each supported render-proxy shape to its stable schema version 1 text value.src/sim/ecs_world_serialization.cpp:24
ParseShape(const std::string_view name)internal helperMaps a schema render-shape name to its typed value and rejects unsupported names.src/sim/ecs_world_serialization.cpp:36
SerializeEntity(const EcsWorldEntityState & record)internal helperWrites one validated entity record, its present optional components, tint, and cold debug name to JSON.src/sim/ecs_world_serialization.cpp:49
ParseTintChannel(const nlohmann::json & tint,const char * field)internal helperParses one unsigned tint channel and rejects values outside the 0-255 range.src/sim/ecs_world_serialization.cpp:84
ParseEntity(const nlohmann::json & document,const std::size_t index,EcsWorldEntityState & output,std::string & error)internal helperParses one external JSON entity into a detached typed record and adds entity context to structural or value errors.src/sim/ecs_world_serialization.cpp:92
sim::SerializeEcsWorld(const EcsWorld & world)free functionCaptures and validates the Simulation-owned world, then emits deterministic schema version 1 JSON text.src/sim/ecs_world_serialization.cpp:147
sim::SerializeEcsWorld(const EcsWorldState & state)free functionCaptures and validates the Simulation-owned world, then emits deterministic schema version 1 JSON text.src/sim/ecs_world_serialization.cpp:151
sim::DeserializeEcsWorld(const std::string_view document_text)free functionParses schema version 1 JSON into detached typed state, enforces document size and value rules, and does not mutate a live world.src/sim/ecs_world_serialization.cpp:169
ToMilliseconds(const std::chrono::nanoseconds duration)internal helperInventory only; no authored contract note.src/sim/fixed_step_scheduler.cpp:14
sim::FixedStepScheduler::FixedStepScheduler(const std::chrono::milliseconds fixed_step,const std::uint64_t tick_limit)methodInventory only; no authored contract note.src/sim/fixed_step_scheduler.cpp:20
sim::FixedStepScheduler::ApplyCommands(const std::span<const core::RuntimeCommand> commands)methodInventory only; no authored contract note.src/sim/fixed_step_scheduler.cpp:31
sim::FixedStepScheduler::AdvanceFrame(const std::chrono::nanoseconds frame_delta,const std::uint32_t time_scale_basis_points)methodAccumulates a clamped render-frame delta and commits deterministic fixed ticks while respecting pause, quit, and tick limits.src/sim/fixed_step_scheduler.cpp:39
sim::FixedStepScheduler::AdvanceOneTick()methodAdvances exactly one eligible tick for headless execution or paused single-step behavior.src/sim/fixed_step_scheduler.cpp:77
sim::FixedStepScheduler::AdvanceTicks(const std::uint64_t tick_budget)methodClears partial-frame and pending-step state, advances no more than the requested eligible tick budget, preserves pause state, and stops at quit or the scenario limit.src/sim/fixed_step_scheduler.cpp:89
sim::FixedStepScheduler::RecordFrame(const FrameMetrics metrics)methodInventory only; no authored contract note.src/sim/fixed_step_scheduler.cpp:101
sim::FixedStepScheduler::Complete() constmethodInventory only; no authored contract note.src/sim/fixed_step_scheduler.cpp:108
sim::FixedStepScheduler::QuitRequested() constmethodInventory only; no authored contract note.src/sim/fixed_step_scheduler.cpp:110
sim::FixedStepScheduler::CurrentTick() constmethodInventory only; no authored contract note.src/sim/fixed_step_scheduler.cpp:112
sim::FixedStepScheduler::FixedStep() constmethodInventory only; no authored contract note.src/sim/fixed_step_scheduler.cpp:114
sim::FixedStepScheduler::Snapshot() constmethodInventory only; no authored contract note.src/sim/fixed_step_scheduler.cpp:116
sim::FixedStepScheduler::CaptureState() constmethodCopies the complete fixed-step position, accumulator, counters, flags, and timing values into detached scheduler state.src/sim/fixed_step_scheduler.cpp:130
sim::FixedStepScheduler::RestoreState(const FixedStepSchedulerState & state,std::string & error)methodValidates detached scheduler state before replacing every scheduler-owned continuation value.src/sim/fixed_step_scheduler.cpp:148
sim::FixedStepScheduler::ValidateState(const FixedStepSchedulerState & state,std::string & error)methodChecks fixed-step and tick bounds, tick position, accumulator range, finite timing values, and pending-step pause requirements.src/sim/fixed_step_scheduler.cpp:169
sim::FixedStepScheduler::CanAdvance() constmethodInventory only; no authored contract note.src/sim/fixed_step_scheduler.cpp:205
sim::FixedStepScheduler::ApplyCommand(const core::RuntimeCommandType type)methodMutates scheduler-owned quit, pause, single-step, or diagnostics state for one validated runtime command.src/sim/fixed_step_scheduler.cpp:207
sim::FixedStepScheduler::CommitTick()methodInventory only; no authored contract note.src/sim/fixed_step_scheduler.cpp:229
sim::PersistentId::operator bool() constinline methodInventory only; no authored contract note.src/sim/persistent_id.hpp:11
sim::EntityHandle::operator bool() constinline methodInventory only; no authored contract note.src/sim/persistent_id.hpp:20
CanonicalAnchor(const WorldInfrastructureAnchor & anchor,const SiteId site,const WorldRuntime & world)internal helperInventory only; no authored contract note.src/sim/world_connection.cpp:13
CanonicalizePair(WorldInfrastructureAnchor & first,WorldInfrastructureAnchor & second)internal helperInventory only; no authored contract note.src/sim/world_connection.cpp:22
SameAnchor(const WorldInfrastructureAnchor & first,const WorldInfrastructureAnchor & second)internal helperInventory only; no authored contract note.src/sim/world_connection.cpp:28
SamePair(const WorldLocalInfrastructure & infrastructure,const WorldConnectionCandidateKey & key)internal helperInventory only; no authored contract note.src/sim/world_connection.cpp:33
InteriorContains(const std::vector<WorldCellCoordinate> & cells,const std::set<WorldCellCoordinate> & blocked)internal helperInventory only; no authored contract note.src/sim/world_connection.cpp:45
ValidateAndCanonicalize(WorldConnectionSearchRequest & request,const WorldRuntime & world,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_connection.cpp:54
sim::WorldConnectionSearchStatusName(const WorldConnectionSearchStatus status)free functionInventory only; no authored contract note.src/sim/world_connection.cpp:97
sim::WorldConnectionRejectionName(const WorldConnectionRejection rejection)free functionInventory only; no authored contract note.src/sim/world_connection.cpp:109
sim::WorldRuntime::DeriveConnectionCandidates(WorldConnectionSearchRequest request) constmethodInventory only; no authored contract note.src/sim/world_connection.cpp:128
sim::WorldConnectionSearchResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_connection.hpp:104
CheckedAdd(Value & value,const Value addition)internal helperInventory only; no authored contract note.src/sim/world_ecology.cpp:10
IsValid(const EcologySpecies species)internal helperInventory only; no authored contract note.src/sim/world_ecology.cpp:18
IsValid(const RenewableResourceKind kind)internal helperInventory only; no authored contract note.src/sim/world_ecology.cpp:20
UpdatesAt(const std::uint64_t tick,const std::uint64_t interval)internal helperInventory only; no authored contract note.src/sim/world_ecology.cpp:24
SaturatingMultiply(const std::uint64_t left,const std::uint64_t right)internal helperInventory only; no authored contract note.src/sim/world_ecology.cpp:28
ApplySignedChange(const std::uint64_t value,const std::uint64_t capacity,const std::int64_t change_per_update,const std::uint64_t updates)internal helperInventory only; no authored contract note.src/sim/world_ecology.cpp:35
sim::EcologySpeciesName(const EcologySpecies species)free functionInventory only; no authored contract note.src/sim/world_ecology.cpp:50
sim::RenewableResourceKindName(const RenewableResourceKind kind)free functionInventory only; no authored contract note.src/sim/world_ecology.cpp:60
sim::BuildDefaultWorldEcology(const WorldTopology & topology,const std::uint64_t initial_tick,std::string & error)free functionInventory only; no authored contract note.src/sim/world_ecology.cpp:70
sim::ValidateWorldEcologyState(const WorldEcologyState & state,const WorldTopology & topology,std::string & error)free functionInventory only; no authored contract note.src/sim/world_ecology.cpp:124
sim::AdvanceWorldEcology(WorldEcologyState & state,const std::uint64_t target_tick)free functionInventory only; no authored contract note.src/sim/world_ecology.cpp:174
sim::HarvestRenewableSource(WorldEcologyState & state,const RenewableSourceId source,const std::uint64_t expected_revision,const std::uint64_t requested_units,const std::uint64_t requested_at_tick)free functionInventory only; no authored contract note.src/sim/world_ecology.cpp:256
sim::EcologyPopulationId::operator bool() constinline methodInventory only; no authored contract note.src/sim/world_ecology.hpp:16
sim::RenewableSourceId::operator bool() constinline methodInventory only; no authored contract note.src/sim/world_ecology.hpp:24
sim::WorldEcologyAdvanceResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_ecology.hpp:90
sim::RenewableHarvestResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_ecology.hpp:106
IsValid(const WorldSeason season)internal helperInventory only; no authored contract note.src/sim/world_environment.cpp:10
IsValid(const RegionBiome biome)internal helperInventory only; no authored contract note.src/sim/world_environment.cpp:12
IsValid(const RegionWeather weather)internal helperInventory only; no authored contract note.src/sim/world_environment.cpp:14
WindowAt(const std::uint64_t tick,const std::uint64_t ticks_per_day)internal helperInventory only; no authored contract note.src/sim/world_environment.cpp:16
SeasonAt(const std::uint64_t day_index,const std::uint32_t days_per_season)internal helperInventory only; no authored contract note.src/sim/world_environment.cpp:31
WeatherAt(const RegionEnvironmentState & region,const WorldSeason season,const std::uint64_t epoch)internal helperInventory only; no authored contract note.src/sim/world_environment.cpp:44
PressureFor(const RegionBiome biome,const RegionWeather weather,const WorldSeason season)internal helperInventory only; no authored contract note.src/sim/world_environment.cpp:60
UpdateCalendar(WorldEnvironmentState & state)internal helperInventory only; no authored contract note.src/sim/world_environment.cpp:95
sim::WorldSeasonName(const WorldSeason season)free functionInventory only; no authored contract note.src/sim/world_environment.cpp:106
sim::WorldDayKindName(const WorldDayKind kind)free functionInventory only; no authored contract note.src/sim/world_environment.cpp:120
sim::RegionBiomeName(const RegionBiome biome)free functionInventory only; no authored contract note.src/sim/world_environment.cpp:132
sim::RegionWeatherName(const RegionWeather weather)free functionInventory only; no authored contract note.src/sim/world_environment.cpp:144
sim::CaptureWorldCalendar(const WorldEnvironmentState & environment)free functionInventory only; no authored contract note.src/sim/world_environment.cpp:158
sim::BuildDefaultWorldEnvironment(const WorldTopology & topology,const std::uint64_t initial_tick,std::string & error)free functionInventory only; no authored contract note.src/sim/world_environment.cpp:192
sim::ValidateWorldEnvironmentState(const WorldEnvironmentState & state,const WorldTopology & topology,std::string & error)free functionInventory only; no authored contract note.src/sim/world_environment.cpp:221
sim::AdvanceWorldEnvironment(WorldEnvironmentState & state,const std::uint64_t target_tick)free functionInventory only; no authored contract note.src/sim/world_environment.cpp:268
sim::WorldEnvironmentAdvanceResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_environment.hpp:97
sim::WorldSubstrate::CaptureRawFacts(const WorldTopology & topology,const SiteId navigation_origin,const WorldTimeCycle time_cycle) constmethodInventory only; no authored contract note.src/sim/world_facts.cpp:8
IsValidWorldGridDefinition(const WorldGridDefinition & definition)internal helperInventory only; no authored contract note.src/sim/world_grid.cpp:16
CellAxisForPosition(const WorldGridDefinition & definition,const double meters)internal helperInventory only; no authored contract note.src/sim/world_grid.cpp:26
FloorDivide(const std::int64_t value,const std::int64_t positive_divisor)internal helperInventory only; no authored contract note.src/sim/world_grid.cpp:40
sim::ValidateWorldGridDefinition(const WorldGridDefinition & definition)free functionInventory only; no authored contract note.src/sim/world_grid.cpp:48
sim::PlacementCellEdgeMeters(const WorldGridDefinition & definition)free functionInventory only; no authored contract note.src/sim/world_grid.cpp:64
sim::ChunkEdgeMeters(const WorldGridDefinition & definition)free functionInventory only; no authored contract note.src/sim/world_grid.cpp:69
sim::WorldCellCenterPosition(const WorldGridDefinition & definition,const WorldCellCoordinate cell)free functionConverts one valid authored placement cell into its finite canonical physical center in meters without changing World state.src/sim/world_grid.cpp:73
sim::WorldCellForPosition(const WorldGridDefinition & definition,const double x_meters,const double y_meters)free functionInventory only; no authored contract note.src/sim/world_grid.cpp:97
sim::ChunkForWorldCell(const WorldGridDefinition & definition,const WorldCellCoordinate cell)free functionInventory only; no authored contract note.src/sim/world_grid.cpp:111
sim::ChunkForWorldPosition(const WorldGridDefinition & definition,const double x_meters,const double y_meters)free functionInventory only; no authored contract note.src/sim/world_grid.cpp:128
sim::BoundsForChunk(const WorldGridDefinition & definition,const ChunkCoordinate chunk)free functionInventory only; no authored contract note.src/sim/world_grid.cpp:135
IsValidTier(const HeatTier tier)internal helperInventory only; no authored contract note.src/sim/world_heat.cpp:12
IsFinitePosition(const Transform2D position)internal helperInventory only; no authored contract note.src/sim/world_heat.cpp:14
ValidatePolicy(const WorldHeatPolicy & policy,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_heat.cpp:18
sim::HeatTierName(const HeatTier tier)free functionInventory only; no authored contract note.src/sim/world_heat.cpp:38
sim::HeatRepresentationName(const HeatRepresentation representation)free functionInventory only; no authored contract note.src/sim/world_heat.cpp:52
sim::HeatTransitionCauseName(const HeatTransitionCause cause)free functionInventory only; no authored contract note.src/sim/world_heat.cpp:62
sim::HeatTransitionStatusName(const HeatTransitionStatus status)free functionInventory only; no authored contract note.src/sim/world_heat.cpp:78
sim::RepresentationForHeatTier(const HeatTier tier)free functionInventory only; no authored contract note.src/sim/world_heat.cpp:90
sim::WorldHeatRuntime::WorldHeatRuntime(WorldHeatPolicy policy)methodInventory only; no authored contract note.src/sim/world_heat.cpp:102
sim::WorldHeatRuntime::Profile(const HeatTier tier) constmethodInventory only; no authored contract note.src/sim/world_heat.cpp:104
sim::WorldHeatRuntime::Policy() constmethodInventory only; no authored contract note.src/sim/world_heat.cpp:128
sim::WorldHeatRuntime::CaptureDefinition(const PersistentId entity) constmethodInventory only; no authored contract note.src/sim/world_heat.cpp:131
sim::WorldHeatRuntime::Entity(const PersistentId entity) constmethodInventory only; no authored contract note.src/sim/world_heat.cpp:150
sim::WorldHeatRuntime::CaptureEntities() constmethodInventory only; no authored contract note.src/sim/world_heat.cpp:168
sim::WorldHeatRuntime::CaptureEmbodiedEntities() constmethodInventory only; no authored contract note.src/sim/world_heat.cpp:191
sim::WorldHeatRuntime::UpdateSpatialPosition(const PersistentId entity,const SiteId site,const Transform2D position)methodInventory only; no authored contract note.src/sim/world_heat.cpp:211
sim::WorldHeatRuntime::EmbodiedEntityCount() constmethodInventory only; no authored contract note.src/sim/world_heat.cpp:229
sim::WorldHeatRuntime::CompressedEntityCount() constmethodInventory only; no authored contract note.src/sim/world_heat.cpp:233
sim::WorldHeatRuntime::NextTransitionSequence() constmethodInventory only; no authored contract note.src/sim/world_heat.cpp:237
sim::WorldHeatRuntime::LastTransition() constmethodInventory only; no authored contract note.src/sim/world_heat.cpp:241
sim::WorldHeatRuntime::Counters() constmethodInventory only; no authored contract note.src/sim/world_heat.cpp:245
sim::WorldHeatRuntime::Embody(const HeatEntityDefinition & definition)methodInventory only; no authored contract note.src/sim/world_heat.cpp:247
sim::WorldHeatRuntime::Compress(const HeatEntityDefinition & definition)methodInventory only; no authored contract note.src/sim/world_heat.cpp:263
sim::WorldHeatRuntime::AddInitialEntity(const HeatEntityDefinition & definition)methodInventory only; no authored contract note.src/sim/world_heat.cpp:267
sim::WorldHeatRuntime::ValidateInvariants() constmethodInventory only; no authored contract note.src/sim/world_heat.cpp:281
sim::BuildWorldHeatRuntime(WorldHeatDefinition definition,const WorldTopology & topology)free functionInventory only; no authored contract note.src/sim/world_heat.cpp:313
sim::HeatTransitionResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_heat.hpp:107
sim::HeatTierWorkSnapshot::PopulationWithinBudget() constinline methodInventory only; no authored contract note.src/sim/world_heat.hpp:145
sim::HeatTierWorkSnapshot::ScheduledWorkWithinBudget() constinline methodInventory only; no authored contract note.src/sim/world_heat.hpp:149
sim::WorldHeatBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_heat.hpp:247
TierRank(const HeatTier tier)internal helperInventory only; no authored contract note.src/sim/world_heat_transition.cpp:10
IsValidCause(const HeatTransitionCause cause)internal helperInventory only; no authored contract note.src/sim/world_heat_transition.cpp:24
sim::WorldHeatRuntime::ApplyTransition(HeatTransitionRequest request,const std::uint64_t current_tick,std::optional<SyntheticRouteProgress> route_progress)methodInventory only; no authored contract note.src/sim/world_heat_transition.cpp:39
TierIndex(const HeatTier tier)internal helperInventory only; no authored contract note.src/sim/world_heat_work.cpp:53
SaturatingAdd(const std::uint64_t left,const std::uint64_t right,bool & saturated)internal helperInventory only; no authored contract note.src/sim/world_heat_work.cpp:67
RangeContainsPhase(const TickRange range,const SchedulePhase phase)internal helperInventory only; no authored contract note.src/sim/world_heat_work.cpp:86
CountPhaseInRange(const TickRange range,const SchedulePhase phase)internal helperInventory only; no authored contract note.src/sim/world_heat_work.cpp:96
sim::InitialHeatTierWorkBudgets()free functionInventory only; no authored contract note.src/sim/world_heat_work.cpp:109
sim::WorldHeatRuntime::AddToWorkSchedule(const PersistentId entity,const HeatTier tier)methodInventory only; no authored contract note.src/sim/world_heat_work.cpp:113
sim::WorldHeatRuntime::MoveInWorkSchedule(const PersistentId entity,const HeatTier from,const HeatTier to)methodInventory only; no authored contract note.src/sim/world_heat_work.cpp:121
sim::WorldHeatRuntime::RecordScheduledWork(const std::uint64_t from_tick,const std::uint64_t to_tick)methodInventory only; no authored contract note.src/sim/world_heat_work.cpp:142
sim::WorldHeatRuntime::CaptureWorkSnapshot() constmethodInventory only; no authored contract note.src/sim/world_heat_work.cpp:181
sim::ChunkId::operator bool() constinline methodInventory only; no authored contract note.src/sim/world_ids.hpp:11
sim::RegionId::operator bool() constinline methodInventory only; no authored contract note.src/sim/world_ids.hpp:20
sim::SiteId::operator bool() constinline methodInventory only; no authored contract note.src/sim/world_ids.hpp:29
sim::RouteId::operator bool() constinline methodInventory only; no authored contract note.src/sim/world_ids.hpp:38
sim::RouteSegmentId::operator bool() constinline methodInventory only; no authored contract note.src/sim/world_ids.hpp:47
sim::TopologyRevision::operator bool() constinline methodInventory only; no authored contract note.src/sim/world_ids.hpp:56
ValidDefinitionId(const std::string_view id,const std::string_view prefix)internal helperInventory only; no authored contract note.src/sim/world_infrastructure.cpp:11
CellInTopology(const WorldCellCoordinate cell,const WorldTopology & topology)internal helperInventory only; no authored contract note.src/sim/world_infrastructure.cpp:19
Adjacent(const WorldCellCoordinate first,const WorldCellCoordinate second)internal helperInventory only; no authored contract note.src/sim/world_infrastructure.cpp:24
ValidStageCondition(const WorldLocalInfrastructureStage stage,const std::uint16_t condition)internal helperInventory only; no authored contract note.src/sim/world_infrastructure.cpp:30
sim::WorldInfrastructureKindName(const WorldInfrastructureKind kind)free functionInventory only; no authored contract note.src/sim/world_infrastructure.cpp:47
sim::WorldLocalInfrastructureKindName(const WorldLocalInfrastructureKind kind)free functionInventory only; no authored contract note.src/sim/world_infrastructure.cpp:60
sim::WorldLocalInfrastructureStageName(const WorldLocalInfrastructureStage stage)free functionInventory only; no authored contract note.src/sim/world_infrastructure.cpp:73
sim::WorldInfrastructureAnchorKindName(const WorldInfrastructureAnchorKind kind)free functionInventory only; no authored contract note.src/sim/world_infrastructure.cpp:92
sim::ValidateWorldInfrastructureAccessPolicy(const WorldInfrastructureAccessPolicy & policy)free functionInventory only; no authored contract note.src/sim/world_infrastructure.cpp:108
sim::ValidateAndCanonicalizeWorldLocalInfrastructure(WorldLocalInfrastructure & infrastructure,const WorldTopology & topology,const std::uint64_t current_tick,std::string & error)free functionInventory only; no authored contract note.src/sim/world_infrastructure.cpp:114
sim::InfrastructureEffectId::operator bool() constinline methodInventory only; no authored contract note.src/sim/world_infrastructure.hpp:26
sim::LocalInfrastructureId::operator bool() constinline methodInventory only; no authored contract note.src/sim/world_infrastructure.hpp:34
sim::WorldLocalInfrastructureMutationResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_infrastructure.hpp:196
sim::WorldInfrastructureConditionAdvanceResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_infrastructure.hpp:241
sim::WorldInfrastructureMutationResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_infrastructure.hpp:257
ValidDefinitionId(const std::string_view id,const std::string_view prefix)internal helperInventory only; no authored contract note.src/sim/world_land.cpp:17
ValidCover(const WorldLandCover cover)internal helperInventory only; no authored contract note.src/sim/world_land.cpp:25
ValidPreparation(const WorldLandPreparation preparation)internal helperInventory only; no authored contract note.src/sim/world_land.cpp:27
ValidStage(const WorldCropLifecycleStage stage)internal helperInventory only; no authored contract note.src/sim/world_land.cpp:31
ValidDedication(const WorldLandDedication dedication)internal helperInventory only; no authored contract note.src/sim/world_land.cpp:35
Connected(const std::vector<WorldCellCoordinate> & cells)internal helperInventory only; no authored contract note.src/sim/world_land.cpp:39
ValidCropState(const WorldLandArea & area)internal helperInventory only; no authored contract note.src/sim/world_land.cpp:65
sim::ValidateAndCanonicalizeWorldLandState(WorldLandState & state,const WorldTopology & topology,const std::uint64_t current_tick,std::string & error)free functionInventory only; no authored contract note.src/sim/world_land.cpp:80
sim::WorldLandCoverName(const WorldLandCover cover)free functionInventory only; no authored contract note.src/sim/world_land.cpp:145
sim::WorldLandPreparationName(const WorldLandPreparation preparation)free functionInventory only; no authored contract note.src/sim/world_land.cpp:159
sim::WorldCropLifecycleStageName(const WorldCropLifecycleStage stage)free functionInventory only; no authored contract note.src/sim/world_land.cpp:171
sim::WorldLandDedicationName(const WorldLandDedication dedication)free functionInventory only; no authored contract note.src/sim/world_land.cpp:193
sim::WorldRuntime::CaptureLandAreas() constmethodInventory only; no authored contract note.src/sim/world_land.cpp:205
sim::WorldRuntime::FindLandArea(const WorldLandAreaId area) constmethodInventory only; no authored contract note.src/sim/world_land.cpp:215
sim::WorldRuntime::CaptureLandCellPage(const WorldLandCellPageRequest request) constmethodInventory only; no authored contract note.src/sim/world_land.cpp:220
sim::WorldRuntime::PreviewLandAreaMutation(WorldLandAreaMutationRequest request) constmethodInventory only; no authored contract note.src/sim/world_land.cpp:294
sim::WorldRuntime::ApplyLandAreaMutation(WorldLandAreaMutationRequest request)methodInventory only; no authored contract note.src/sim/world_land.cpp:398
sim::WorldLandAreaId::operator bool() constinline methodInventory only; no authored contract note.src/sim/world_land.hpp:24
sim::WorldLandAreaMutationResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_land.hpp:158
ValidAppearanceFamilyId(const std::string_view id)internal helperInventory only; no authored contract note.src/sim/world_landscape.cpp:14
ValidLifecyclePolicyId(const std::string_view id)internal helperInventory only; no authored contract note.src/sim/world_landscape.cpp:23
ValidKind(const WorldLandscapeFeatureKind kind)internal helperInventory only; no authored contract note.src/sim/world_landscape.cpp:32
ValidStage(const WorldLandscapeFeatureStage stage)internal helperInventory only; no authored contract note.src/sim/world_landscape.cpp:37
Mix(std::uint64_t value)internal helperInventory only; no authored contract note.src/sim/world_landscape.cpp:43
sim::ValidateAndCanonicalizeWorldLandscapeState(WorldLandscapeState & state,const WorldTopology & topology,const std::uint64_t current_tick,std::string & error)free functionInventory only; no authored contract note.src/sim/world_landscape.cpp:52
sim::WorldLandscapeFeatureKindName(const WorldLandscapeFeatureKind kind)free functionInventory only; no authored contract note.src/sim/world_landscape.cpp:122
sim::WorldLandscapeFeatureStageName(const WorldLandscapeFeatureStage stage)free functionInventory only; no authored contract note.src/sim/world_landscape.cpp:134
sim::WorldLandscapeVariationKey(const WorldLandscapeCluster & cluster,const WorldLandscapeFeature & feature)free functionInventory only; no authored contract note.src/sim/world_landscape.cpp:146
sim::WorldLandscapeClusterId::operator bool() constinline methodInventory only; no authored contract note.src/sim/world_landscape.hpp:22
sim::WorldLandscapeFeatureId::operator bool() constinline methodInventory only; no authored contract note.src/sim/world_landscape.hpp:33
sim::WorldLandscapeMutationResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_landscape.hpp:128
sim::WorldLandscapeAdvanceResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_landscape.hpp:141
AddCellOffset(const WorldCellCoordinate cell,const WorldCellCoordinate offset,WorldCellCoordinate & result)internal helperInventory only; no authored contract note.src/sim/world_local_navigation.cpp:49
ScaledTraversalCost(const LocalNavigationCell cell,const std::uint64_t cost_scale)internal helperInventory only; no authored contract note.src/sim/world_local_navigation.cpp:61
UnscaleTravelTicks(const std::uint64_t scaled_cost)internal helperInventory only; no authored contract note.src/sim/world_local_navigation.cpp:70
CellCenter(const WorldGridDefinition & grid,const WorldCellCoordinate cell)internal helperInventory only; no authored contract note.src/sim/world_local_navigation.cpp:75
ValidMoveStatus(const LocalMoveStatus status)internal helperInventory only; no authored contract note.src/sim/world_local_navigation.cpp:81
IsBetter(const ChunkCorridorCandidate & left,const ChunkCorridorCandidate & right)internal helperInventory only; no authored contract note.src/sim/world_local_navigation.cpp:95
AdjacentBorderPortal(const WorldGridDefinition & grid,const ChunkCoordinate origin,const ChunkCoordinate destination,const WorldCellCoordinate destination_cell)internal helperInventory only; no authored contract note.src/sim/world_local_navigation.cpp:119
FindChunkCorridor(const ChunkCorridorEndpoints endpoints,const WorldCellCoordinate destination_cell,const WorldTopology & topology,const std::map<ChunkId,ChunkResidencyState> & chunk_states,const WorldLocalNavigation & navigation)internal helperInventory only; no authored contract note.src/sim/world_local_navigation.cpp:157
AddTravelTicks(const std::uint64_t left,const std::uint64_t right,std::uint64_t & result)internal helperInventory only; no authored contract note.src/sim/world_local_navigation.cpp:230
DistanceMillimeters(const Transform2D left,const Transform2D right)internal helperInventory only; no authored contract note.src/sim/world_local_navigation.cpp:238
SegmentTarget(const LocalMoveProgress & move,const WorldGridDefinition & grid)internal helperInventory only; no authored contract note.src/sim/world_local_navigation.cpp:249
PathDistanceMillimeters(const Transform2D origin,const Transform2D destination,const std::vector<WorldCellCoordinate> & path,const WorldGridDefinition & grid)internal helperInventory only; no authored contract note.src/sim/world_local_navigation.cpp:256
SetSegmentPosition(LocalMoveProgress & move,const Transform2D target)internal helperInventory only; no authored contract note.src/sim/world_local_navigation.cpp:280
UpdateLogicalSiteForPosition(LocalMoveProgress & move,const WorldTopology & topology)internal helperInventory only; no authored contract note.src/sim/world_local_navigation.cpp:295
sim::LocalPathStatusName(const LocalPathStatus status)free functionInventory only; no authored contract note.src/sim/world_local_navigation.cpp:316
sim::LocalMoveStatusName(const LocalMoveStatus status)free functionInventory only; no authored contract note.src/sim/world_local_navigation.cpp:334
sim::WorldLocalNavigation::WorldLocalNavigation(LocalNavigationState state)methodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:348
sim::WorldLocalNavigation::Revision() constmethodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:361
CanonicalEdge(WorldCellCoordinate first,WorldCellCoordinate second)internal helperInventory only; no authored contract note.src/sim/world_local_navigation.cpp:366
sim::WorldLocalNavigation::AuthoredCell(const WorldCellCoordinate cell) constmethodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:374
sim::WorldLocalNavigation::Cell(const WorldCellCoordinate cell) constmethodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:383
sim::WorldLocalNavigation::FindPath(const Transform2D origin,const Transform2D destination,const WorldTopology & topology,const std::map<ChunkId,ChunkResidencyState> & chunk_states) constmethodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:392
sim::WorldLocalNavigation::Move(const PersistentId entity) constmethodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:619
sim::WorldLocalNavigation::PendingArrivalCount() constmethodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:624
sim::WorldLocalNavigation::PendingArrivalIds(const std::size_t maximum_visits) constmethodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:629
sim::WorldLocalNavigation::CaptureActiveMoves() constmethodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:635
sim::WorldLocalNavigation::CaptureMoves() constmethodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:644
sim::WorldLocalNavigation::CaptureState() constmethodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:654
sim::WorldLocalNavigation::SetCell(LocalNavigationCell cell)methodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:665
sim::WorldLocalNavigation::SetDerivedBlockedCells(const std::span<const WorldCellCoordinate> blocked_cells)methodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:682
sim::WorldLocalNavigation::SetDerivedTraversalReductions(const std::span<const std::pair<WorldCellCoordinate,std::uint16_t>> reductions)methodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:708
sim::WorldLocalNavigation::SetDerivedBlockedEdges(const std::span<const WorldInfrastructureEdge> blocked_edges)methodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:742
sim::WorldLocalNavigation::HydrateDerivedBlockedCells(const std::span<const WorldCellCoordinate> blocked_cells)methodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:762
sim::WorldLocalNavigation::StartMove(const PersistentId entity,const SiteId logical_site,const Transform2D origin,const Transform2D destination,const std::uint64_t requested_at_tick,const WorldTopology & topology,const std::map<ChunkId,ChunkResidencyState> & chunk_states,const LocalMovementTuning tuning,const LocalMovementCapability capability)methodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:767
sim::WorldLocalNavigation::CancelMove(const PersistentId entity)methodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:847
sim::WorldLocalNavigation::RetireMoveForRoute(const PersistentId entity,const SiteId route_origin,const Transform2D route_origin_position,const WorldCellCoordinate route_origin_cell,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:859
sim::WorldLocalNavigation::AcknowledgeArrivals(const std::span<const PersistentId> entities)methodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:889
sim::WorldLocalNavigation::QueueArrival(const PersistentId entity)methodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:907
sim::WorldLocalNavigation::RemovePendingArrival(const PersistentId entity)methodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:913
sim::WorldLocalNavigation::AdvanceToTick(const std::uint64_t target_tick,const WorldTopology & topology,const std::map<ChunkId,ChunkResidencyState> & chunk_states,const LocalMovementTuning tuning)methodInventory only; no authored contract note.src/sim/world_local_navigation.cpp:924
sim::BuildWorldLocalNavigation(LocalNavigationState state)free functionInventory only; no authored contract note.src/sim/world_local_navigation.cpp:1055
sim::LocalPathQuery::Reached() constinline methodInventory only; no authored contract note.src/sim/world_local_navigation.hpp:63
sim::LocalMoveResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_local_navigation.hpp:117
sim::ValidMovementTuning(const LocalMovementTuning tuning)free functionInventory only; no authored contract note.src/sim/world_movement_rate.cpp:7
sim::ValidMovementCapability(const LocalMovementCapability capability)free functionInventory only; no authored contract note.src/sim/world_movement_rate.cpp:11
sim::ValidMovementRateModifier(const std::uint32_t modifier_basis_points)free functionInventory only; no authored contract note.src/sim/world_movement_rate.cpp:16
sim::ValidRouteMovementRateModifier(const std::uint32_t modifier_basis_points)free functionInventory only; no authored contract note.src/sim/world_movement_rate.cpp:21
sim::MovementNumeratorPerTick(const LocalMovementTuning tuning,const LocalMovementCapability capability,const std::uint32_t route_modifier_basis_points)free functionInventory only; no authored contract note.src/sim/world_movement_rate.cpp:26
sim::EstimatedMovementTicks(const std::uint64_t distance_millimeters,const LocalMovementTuning tuning,const LocalMovementCapability capability,const std::uint32_t route_modifier_basis_points)free functionInventory only; no authored contract note.src/sim/world_movement_rate.cpp:43
sim::EstimatedRouteMovementTicks(const std::span<const std::uint64_t> segment_distances_millimeters,const std::span<const std::uint32_t> route_modifiers_basis_points,const LocalMovementTuning tuning,const LocalMovementCapability capability,const std::uint64_t available_distance_numerator,const std::uint64_t first_segment_progress_millimeters)free functionInventory only; no authored contract note.src/sim/world_movement_rate.cpp:63
ValidStableId(const std::string_view id,const std::string_view prefix)internal helperInventory only; no authored contract note.src/sim/world_parcel.cpp:16
CheckedAdd(const std::int64_t left,const std::int64_t right,std::int64_t & result)internal helperInventory only; no authored contract note.src/sim/world_parcel.cpp:24
InTopology(const WorldRuntime & world,const WorldCellCoordinate cell)internal helperInventory only; no authored contract note.src/sim/world_parcel.cpp:33
ValidateAndCanonicalizeRequest(WorldParcelSearchRequest & request,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_parcel.cpp:38
PlaceFootprint(const WorldCellCoordinate origin,const WorldParcelFootprintVariant & variant)internal helperInventory only; no authored contract note.src/sim/world_parcel.cpp:92
PerimeterCells(const std::vector<WorldCellCoordinate> & footprint)internal helperInventory only; no authored contract note.src/sim/world_parcel.cpp:106
sim::WorldParcelSearchStatusName(const WorldParcelSearchStatus status)free functionInventory only; no authored contract note.src/sim/world_parcel.cpp:127
sim::WorldRuntime::DeriveParcelCandidates(WorldParcelSearchRequest request) constmethodInventory only; no authored contract note.src/sim/world_parcel.cpp:140
sim::WorldParcelSearchResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_parcel.hpp:111
ValidInterestReason(const ChunkResidencyInterestReason reason)internal helperInventory only; no authored contract note.src/sim/world_residency.cpp:9
AddMoveChunks(std::set<ChunkId> & required,const LocalMoveProgress & move,const WorldTopology & topology)internal helperInventory only; no authored contract note.src/sim/world_residency.cpp:18
AddRouteChunks(std::set<ChunkId> & required,const SyntheticRouteProgress & traveler,const WorldTopology & topology)internal helperInventory only; no authored contract note.src/sim/world_residency.cpp:33
sim::WorldRuntime::LastResidencyReconcile() constmethodInventory only; no authored contract note.src/sim/world_residency.cpp:50
sim::WorldRuntime::ReconcileChunkResidency(const std::span<const ChunkResidencyInterest> external_interests,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/sim/world_residency.cpp:54
AddWithoutOverflow(const std::uint64_t left,const std::uint64_t right,std::uint64_t & result)internal helperInventory only; no authored contract note.src/sim/world_route_mutation.cpp:9
sim::SyntheticRouteTravelStatusName(const SyntheticRouteTravelStatus status)free functionInventory only; no authored contract note.src/sim/world_route_mutation.cpp:20
sim::WorldSubstrate::PreviewRouteTravelMutation(const RouteTravelMutationRequest request) constmethodInventory only; no authored contract note.src/sim/world_route_mutation.cpp:33
sim::WorldSubstrate::ApplyRouteTravelMutation(const RouteTravelMutationRequest request)methodInventory only; no authored contract note.src/sim/world_route_mutation.cpp:121
RateModifierFor(const std::span<const RouteSegmentRateOverride> sorted_rate_overrides,const RouteSegmentId segment)internal helperInventory only; no authored contract note.src/sim/world_route_progress.cpp:10
sim::WorldSubstrate::PreviewRouteTravel(const WorldTopology & topology,const SyntheticRouteTravelRequest request,const LocalMovementTuning movement_tuning,const std::span<const RouteSegmentRateOverride> rate_overrides) constmethodInventory only; no authored contract note.src/sim/world_route_progress.cpp:21
sim::WorldSubstrate::StartRouteTravel(const WorldTopology & topology,const SyntheticRouteTravelRequest request,const LocalMovementTuning movement_tuning,const std::span<const RouteSegmentRateOverride> rate_overrides)methodInventory only; no authored contract note.src/sim/world_route_progress.cpp:136
RegionEcologyPressureBasisPoints(const WorldTopology & topology,const WorldEcologyState & ecology,const WorldCellCoordinate cell)internal helperInventory only; no authored contract note.src/sim/world_runtime.cpp:12
AdvanceLandscapeFeatures(std::map<WorldLandscapeFeatureId,WorldLandscapeFeature> & features,const WorldTopology & topology,const WorldEcologyState & ecology,const std::uint64_t target_tick)internal helperInventory only; no authored contract note.src/sim/world_runtime.cpp:36
TransitionTarget(const ChunkResidencyState current,const ChunkTransitionOperation operation)internal helperInventory only; no authored contract note.src/sim/world_runtime.cpp:75
IllegalTransitionDetail(const ChunkResidencyState current,const ChunkTransitionOperation operation)internal helperInventory only; no authored contract note.src/sim/world_runtime.cpp:107
ValidateAndSortInitialLoads(std::vector<InitialChunkLoad> & initial_chunks,const WorldTopology & topology,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_runtime.cpp:113
sim::ChunkResidencyStateName(const ChunkResidencyState state)free functionInventory only; no authored contract note.src/sim/world_runtime.cpp:148
sim::ChunkTransitionOperationName(const ChunkTransitionOperation operation)free functionInventory only; no authored contract note.src/sim/world_runtime.cpp:162
sim::ChunkTransitionStatusName(const ChunkTransitionStatus status)free functionInventory only; no authored contract note.src/sim/world_runtime.cpp:178
sim::WorldRuntime::WorldRuntime(WorldTopology topology,WorldTerrain terrain,WorldSubstrate substrate,WorldHeatRuntime heat,WorldEnvironmentState environment,WorldEcologyState ecology,WorldLocalNavigation local_navigation,std::map<InfrastructureEffectId,WorldInfrastructureEffect> infrastructure,std::map<std::string,WorldInfrastructureAccessPolicy> infrastructure_access_policies,std::map<LocalInfrastructureId,WorldLocalInfrastructure> local_infrastructure,WorldLandState land,WorldLandscapeState landscape)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:188
sim::WorldRuntime::Topology() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:218
sim::WorldRuntime::Substrate() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:220
sim::WorldRuntime::Heat() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:222
sim::WorldRuntime::Environment() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:224
sim::WorldRuntime::Ecology() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:226
sim::WorldRuntime::LocalNavigation() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:228
sim::WorldRuntime::PendingRouteArrivalCount() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:232
sim::WorldRuntime::PendingRouteArrivalIds(const std::size_t maximum_visits) constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:237
sim::WorldRuntime::PendingLocalArrivalCount() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:241
sim::WorldRuntime::PendingLocalArrivalIds(const std::size_t maximum_visits) constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:246
sim::WorldRuntime::Terrain() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:250
sim::WorldRuntime::FindInfrastructureEffect(const InfrastructureEffectId effect) constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:253
sim::WorldRuntime::ChunkState(const ChunkId chunk) constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:259
sim::WorldRuntime::CaptureChunkResidency() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:267
sim::WorldRuntime::CaptureResidentTerrain() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:278
sim::WorldRuntime::CaptureLandscapeClusters() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:300
sim::WorldRuntime::CaptureLandscapeFeatures() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:310
sim::WorldRuntime::CaptureResidentLandscape() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:320
sim::WorldRuntime::FindLandscapeFeature(const WorldLandscapeFeatureId feature) constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:356
sim::WorldRuntime::PreviewLandscapeHarvest(const WorldLandscapeHarvestRequest request) constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:363
sim::WorldRuntime::ApplyLandscapeHarvest(const WorldLandscapeHarvestRequest request)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:420
sim::WorldRuntime::LastLandscapeAdvance() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:431
sim::WorldRuntime::LastChunkTransition() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:435
sim::WorldRuntime::NextChunkTransitionSequence() constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:439
sim::WorldRuntime::ApplyChunkTransition(const ChunkId chunk,const ChunkTransitionOperation operation)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:443
sim::WorldRuntime::StartRouteTravel(const SyntheticRouteTravelRequest request,const LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:479
sim::WorldRuntime::PreviewRouteTravel(const SyntheticRouteTravelRequest request,const LocalMovementTuning movement_tuning) constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:505
sim::WorldRuntime::PreviewRouteTravelMutation(const RouteTravelMutationRequest request) constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:512
sim::WorldRuntime::ApplyRouteTravelMutation(const RouteTravelMutationRequest request)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:517
sim::WorldRuntime::AdvanceWorldToTick(const std::uint64_t target_tick,const LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:538
sim::WorldRuntime::HarvestRenewable(const RenewableSourceId source,const std::uint64_t expected_revision,const std::uint64_t requested_units,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:612
sim::WorldRuntime::SynchronizeTravelerPosition(const PersistentId traveler)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:620
sim::WorldRuntime::ApplyHeatTransition(const HeatTransitionRequest request)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:644
sim::WorldRuntime::SetLocalNavigationCell(LocalNavigationCell cell)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:649
sim::WorldRuntime::SetDerivedLocalNavigationBlockers(const std::span<const WorldCellCoordinate> blocked_cells)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:659
sim::WorldRuntime::HydrateDerivedLocalNavigationBlockers(const std::span<const WorldCellCoordinate> blocked_cells)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:664
sim::WorldRuntime::PreviewLocalPath(const Transform2D origin,const Transform2D destination) constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:669
sim::WorldRuntime::PreviewLocalPathAfterRouteCancellation(const PersistentId entity,const Transform2D destination) constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:675
sim::WorldRuntime::StartLocalMove(const PersistentId entity,const Transform2D destination,const std::uint64_t requested_at_tick,const LocalMovementTuning movement_tuning,const LocalMovementCapability movement_capability)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:699
sim::WorldRuntime::CancelLocalMove(const PersistentId entity)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:723
sim::WorldRuntime::HydratePendingActorArrivals(const std::span<const PersistentId> route_arrivals,const std::span<const PersistentId> local_arrivals)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:727
sim::WorldRuntime::AcknowledgeRouteArrivals(const std::span<const PersistentId> travelers)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:758
sim::WorldRuntime::AcknowledgeLocalArrivals(const std::span<const PersistentId> entities)methodInventory only; no authored contract note.src/sim/world_runtime.cpp:762
sim::WorldRuntime::CaptureRawWorldFacts(const SiteId navigation_origin,const WorldTimeCycle time_cycle) constmethodInventory only; no authored contract note.src/sim/world_runtime.cpp:766
sim::BuildWorldRuntimeCandidate(WorldRuntimeDefinition definition)free functionInventory only; no authored contract note.src/sim/world_runtime.cpp:789
sim::ChunkResidencyReconcileResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_runtime.hpp:107
sim::ChunkTransitionResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_runtime.hpp:122
sim::WorldRuntimeBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_runtime.hpp:303
ValidEffect(const WorldInfrastructureEffect & effect,const WorldTopology & topology)internal helperInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:13
EffectiveReduction(const WorldInfrastructureEffect & effect)internal helperInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:38
sim::WorldRuntime::CaptureInfrastructureEffects() constmethodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:46
sim::WorldRuntime::CaptureLocalInfrastructure() constmethodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:56
sim::WorldRuntime::CaptureInfrastructureAccessPolicies() constmethodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:67
sim::WorldRuntime::FindInfrastructureAccessPolicy(const std::string_view policy_id) constmethodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:78
sim::WorldRuntime::CaptureLandEnclosure(const WorldLandAreaId area_id) constmethodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:85
sim::WorldRuntime::FindLocalInfrastructure(const LocalInfrastructureId infrastructure) constmethodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:149
sim::WorldRuntime::CaptureLocalInfrastructurePage(const WorldLocalInfrastructurePageRequest request) constmethodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:154
sim::WorldRuntime::PreviewLocalInfrastructureMutation(WorldLocalInfrastructureMutationRequest request) constmethodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:182
sim::WorldRuntime::ApplyLocalInfrastructureMutation(WorldLocalInfrastructureMutationRequest request)methodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:252
sim::WorldRuntime::AdvanceLocalInfrastructureCondition(const WorldInfrastructureConditionAdvanceRequest request)methodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:264
sim::WorldRuntime::SetLocalInfrastructureAccessPolicy(const LocalInfrastructureId infrastructure,const std::uint64_t expected_revision,const std::string_view access_policy_id,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:398
sim::WorldRuntime::SynchronizeLocalInfrastructureNavigation()methodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:449
sim::WorldRuntime::ApplyInfrastructureEffect(WorldInfrastructureEffect effect)methodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:493
sim::WorldRuntime::RemoveInfrastructureEffect(const InfrastructureEffectId effect,const std::uint64_t source_revision,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:539
sim::WorldRuntime::RouteTravelOverrides() constmethodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:567
sim::WorldRuntime::RouteTravelRateOverrides() constmethodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:585
sim::WorldRuntime::RouteDangerReduction(const RouteSegmentId segment) constmethodInventory only; no authored contract note.src/sim/world_runtime_infrastructure.cpp:610
Failure(std::string error)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:13
AddWithoutOverflow(const std::uint64_t left,const std::uint64_t right,std::uint64_t & result)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:17
ValidChunkState(const ChunkResidencyState state)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:26
ValidChunkOperation(const ChunkTransitionOperation operation)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:37
ValidChunkStatus(const ChunkTransitionStatus status)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:41
ValidHeatTier(const HeatTier tier)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:45
ValidHeatRepresentation(const HeatRepresentation representation)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:47
ValidHeatCause(const HeatTransitionCause cause)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:51
ValidHeatStatus(const HeatTransitionStatus status)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:55
OrthogonallyAdjacent(const ChunkCoordinate left,const ChunkCoordinate right)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:59
LocalMoveSegmentTarget(const LocalMoveProgress & move,const WorldGridDefinition & grid)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:66
LocalMoveSegmentDistanceMillimeters(const Transform2D left,const Transform2D right)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:76
NearlyEqualPosition(const Transform2D left,const Transform2D right)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:86
ValidateTravelingLocalMoveSegment(const LocalMoveProgress & move,const WorldGridDefinition & grid)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:92
ValidateLocalMoveSpatialState(const LocalMoveProgress & move,const WorldTopology & topology,const std::vector<ChunkResidencyRecord> & chunks,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:117
ValidateTravelProgress(const SyntheticRouteProgress & progress,const WorldTopology & topology,const std::uint64_t sample_tick,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:230
TravelProgressSampleTick(const SyntheticRouteProgress & progress,std::uint64_t & sample_tick)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:334
ValidateSubstrateState(WorldSubstrateState & state,const WorldTopology & topology,WorldSubstrateDefinition & definition,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:346
ValidateInfrastructureState(WorldInfrastructureState & state,const WorldTopology & topology,std::vector<RouteSegmentTravelOverride> & travel_overrides,std::map<InfrastructureEffectId,WorldInfrastructureEffect> & effects,std::map<std::string,WorldInfrastructureAccessPolicy> & access_policies,std::map<LocalInfrastructureId,WorldLocalInfrastructure> & local,const std::uint64_t current_tick,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:430
ValidateChunks(WorldRuntimeState & state,const WorldTopology & topology,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:543
ValidateHeatSnapshot(const HeatEntitySnapshot & entity,const WorldTopology & topology,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:588
ValidateHeatState(WorldHeatState & state,const WorldTopology & topology,WorldHeatDefinition & definition,const std::uint64_t current_tick,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_runtime_state.cpp:600
sim::CaptureWorldRuntimeState(const WorldRuntime & runtime)free functionInventory only; no authored contract note.src/sim/world_runtime_state.cpp:690
sim::BuildWorldRuntimeFromState(WorldRuntimeState state)free functionInventory only; no authored contract note.src/sim/world_runtime_state.cpp:721
sim::WorldRuntimeStateBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_runtime_state.hpp:56
IdDocument(const Id id)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:20
ParseId(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:22
ArrayDocument(const std::vector<Value> & values,Writer writer)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:27
ParseArray(const Json & document,Reader reader)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:36
ParseNamedEnum(const Json & document,const std::initializer_list<std::pair<std::string_view,Enum>> values,const char * label)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:49
TopologyDocument(const WorldTopologyDefinition & topology)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:61
TerrainDocument(const WorldTerrainDefinition & terrain)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:104
ParseTerrain(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:115
LandDocument(const WorldLandState & land)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:132
ParseLand(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:177
LandscapeDocument(const WorldLandscapeState & landscape)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:260
ParseLandscape(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:300
LegacyDistanceFromTicks(const std::uint64_t ticks)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:387
LegacyPhysicalProgressFromTicks(const std::uint64_t distance_millimeters,const std::uint64_t elapsed_ticks,const std::uint64_t travel_ticks)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:405
ParseTopology(const Json & document,const std::uint32_t source_schema)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:421
ChunkStateDocument(const ChunkResidencyState state)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:465
ParseChunkState(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:469
ParseChunkOperation(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:478
ParseChunkStatus(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:489
ChunkTransitionDocument(const ChunkTransitionResult & transition)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:496
ParseChunkTransition(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:508
RouteFieldDocument(const RoutePressureFieldDefinition & field)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:527
ParseRouteField(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:535
SiteFieldDocument(const SiteOpportunityFieldDefinition & field)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:544
ParseSiteField(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:550
RegionDocument(const RegionSubstrateSnapshot & region)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:557
ParseRegion(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:570
TravelStatusDocument(const SyntheticRouteTravelStatus status)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:587
ParseTravelStatus(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:591
TravelerDocument(const SyntheticRouteProgress & traveler)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:600
ParseTraveler(const Json & document,const std::uint32_t source_schema,const WorldTopologyDefinition & topology,const std::uint64_t current_tick)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:628
SubstrateDocument(const WorldSubstrateState & substrate)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:729
ParseSubstrate(const Json & document,const std::uint32_t source_schema,const WorldTopologyDefinition & topology)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:735
HeatTierDocument(const HeatTier tier)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:747
ParseHeatTier(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:749
HeatRepresentationDocument(const HeatRepresentation representation)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:758
ParseHeatRepresentation(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:762
ParseHeatCause(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:769
ParseHeatStatus(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:780
HeatEntityDocument(const HeatEntitySnapshot & entity)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:788
ParseHeatEntity(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:797
HeatTransitionDocument(const HeatTransitionResult & transition)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:806
ParseHeatTransition(const Json & document,const std::uint32_t source_schema,const WorldTopologyDefinition & topology,const std::uint64_t current_tick)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:826
HeatDocument(const WorldHeatState & heat)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:857
ParseHeat(const Json & document,const std::uint32_t source_schema,const WorldTopologyDefinition & topology,const std::uint64_t current_tick)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:881
TransformDocument(const Transform2D position)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:913
ParseTransform(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:917
CellDocument(const WorldCellCoordinate cell)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:922
ParseCell(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:924
LocalMoveDocument(const LocalMoveProgress & move)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:928
ParseLocalMove(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:951
LocalNavigationDocument(const LocalNavigationState & navigation)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:989
ParseLocalNavigation(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1002
MigrationCellCenter(const WorldGridDefinition & grid,const WorldCellCoordinate cell)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1017
MigrationDistanceMillimeters(const Transform2D left,const Transform2D right)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1023
MigrateLegacyLocalMovement(LocalNavigationState & navigation,const WorldGridDefinition & grid,const std::uint64_t current_tick)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1028
InfrastructureEffectDocument(const WorldInfrastructureEffect & effect)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1052
ParseInfrastructureEffect(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1071
InfrastructureAnchorDocument(const WorldInfrastructureAnchor & anchor)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1098
ParseInfrastructureAnchor(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1105
LocalInfrastructureDocument(const WorldLocalInfrastructure & infrastructure)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1122
ParseLocalInfrastructure(const Json & document,const std::uint32_t source_schema)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1148
InfrastructureDocument(const WorldInfrastructureState & infrastructure)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1192
ParseInfrastructure(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1209
EnvironmentDocument(const WorldEnvironmentState & environment)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1243
ParseEnvironment(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1272
EcologyDocument(const WorldEcologyState & ecology)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1323
ParseEcology(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1368
StateDocument(const WorldRuntimeState & state)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1423
ParseState(const Json & document)internal helperInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1450
sim::SerializeWorldRuntimeState(const WorldRuntimeState & state)free functionInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1542
sim::DeserializeWorldRuntimeState(const std::string_view document)free functionInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1557
sim::HashWorldRuntimeStateDocument(const std::string_view canonical_document)free functionInventory only; no authored contract note.src/sim/world_runtime_state_serialization.cpp:1571
SiteBelongsToRegion(const WorldTopology & topology,const SiteId site,const RegionId region)internal helperInventory only; no authored contract note.src/sim/world_substrate.cpp:11
AddWithoutOverflow(const std::uint64_t left,const std::uint64_t right,std::uint64_t & result)internal helperInventory only; no authored contract note.src/sim/world_substrate.cpp:15
ValidateAndSortDefinition(WorldSubstrateDefinition & definition,const WorldTopology & topology,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_substrate.cpp:24
sim::WorldSubstrate::WorldSubstrate(const std::uint64_t initial_tick)methodInventory only; no authored contract note.src/sim/world_substrate.cpp:136
sim::WorldSubstrate::CurrentTick() constmethodInventory only; no authored contract note.src/sim/world_substrate.cpp:138
sim::WorldSubstrate::CaptureRegions() constmethodInventory only; no authored contract note.src/sim/world_substrate.cpp:140
sim::WorldSubstrate::CaptureTravelingTravelers() constmethodInventory only; no authored contract note.src/sim/world_substrate.cpp:150
sim::WorldSubstrate::CaptureTravelers() constmethodInventory only; no authored contract note.src/sim/world_substrate.cpp:159
sim::WorldSubstrate::PendingRouteArrivalCount() constmethodInventory only; no authored contract note.src/sim/world_substrate.cpp:169
sim::WorldSubstrate::PendingRouteArrivalIds(const std::size_t maximum_visits) constmethodInventory only; no authored contract note.src/sim/world_substrate.cpp:174
sim::WorldSubstrate::AcknowledgeRouteArrivals(const std::span<const PersistentId> travelers)methodInventory only; no authored contract note.src/sim/world_substrate.cpp:180
sim::WorldSubstrate::QueueRouteArrival(const PersistentId traveler)methodInventory only; no authored contract note.src/sim/world_substrate.cpp:198
sim::WorldSubstrate::RemovePendingRouteArrival(const PersistentId traveler)methodInventory only; no authored contract note.src/sim/world_substrate.cpp:204
sim::WorldSubstrate::VisitTravelingTravelersAfter(const PersistentId after,const std::size_t maximum_count) constmethodInventory only; no authored contract note.src/sim/world_substrate.cpp:215
sim::WorldSubstrate::Traveler(const PersistentId traveler) constmethodInventory only; no authored contract note.src/sim/world_substrate.cpp:248
sim::WorldSubstrate::RouteFacts(const RouteSegmentId segment) constmethodInventory only; no authored contract note.src/sim/world_substrate.cpp:254
sim::BuildWorldSubstrate(WorldSubstrateDefinition definition,const WorldTopology & topology)free functionInventory only; no authored contract note.src/sim/world_substrate.cpp:283
sim::SyntheticRouteTravelResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_substrate.hpp:146
sim::RouteTravelMutationResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_substrate.hpp:185
sim::WorldAdvanceResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_substrate.hpp:205
sim::RawWorldFactResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_substrate.hpp:255
sim::WorldSubstrateBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_substrate.hpp:340
AddWithoutOverflow(const std::uint64_t left,const std::uint64_t right,std::uint64_t & result)internal helperInventory only; no authored contract note.src/sim/world_substrate_advance.cpp:10
AddRepeatedNonnegativeDelta(std::int64_t & value,const std::int64_t delta,const std::uint64_t count)internal helperInventory only; no authored contract note.src/sim/world_substrate_advance.cpp:19
CanAddRepeatedNonnegativeDelta(const RepeatedNonnegativeDelta request)internal helperInventory only; no authored contract note.src/sim/world_substrate_advance.cpp:47
PreflightRegionUpdate(const RegionSubstrateSnapshot & region,const std::uint64_t target_tick,std::uint64_t & updates,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_substrate_advance.cpp:52
UpdateRegion(RegionSubstrateSnapshot & region,const std::uint64_t target_tick,std::uint64_t & updates,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_substrate_advance.cpp:96
SetCurrentSegment(SyntheticRouteProgress & progress,const SegmentPosition position)internal helperInventory only; no authored contract note.src/sim/world_substrate_advance.cpp:142
UpdateExpectedArrival(SyntheticRouteProgress & progress,const std::uint64_t target_tick,const LocalMovementTuning tuning)internal helperInventory only; no authored contract note.src/sim/world_substrate_advance.cpp:152
UpdateTraveler(SyntheticRouteProgress & progress,const std::uint64_t target_tick,const LocalMovementTuning tuning)internal helperInventory only; no authored contract note.src/sim/world_substrate_advance.cpp:171
sim::WorldSubstrate::AdvanceToTick(const std::uint64_t target_tick,const LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/sim/world_substrate_advance.cpp:253
ValidKind(const ChunkTerrainKind kind)internal helperInventory only; no authored contract note.src/sim/world_terrain.cpp:9
sim::ChunkTerrainKindName(const ChunkTerrainKind kind)free functionInventory only; no authored contract note.src/sim/world_terrain.cpp:13
sim::DefaultWorldTerrain(const WorldTopology & topology)free functionInventory only; no authored contract note.src/sim/world_terrain.cpp:25
sim::WorldTerrain::WorldTerrain(std::map<ChunkId,ChunkTerrainKind> chunks)methodInventory only; no authored contract note.src/sim/world_terrain.cpp:34
sim::WorldTerrain::Find(const ChunkId chunk) constmethodInventory only; no authored contract note.src/sim/world_terrain.cpp:37
sim::WorldTerrain::Capture() constmethodInventory only; no authored contract note.src/sim/world_terrain.cpp:44
sim::BuildWorldTerrain(WorldTerrainDefinition definition,const WorldTopology & topology)free functionInventory only; no authored contract note.src/sim/world_terrain.cpp:53
sim::WorldTerrainBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_terrain.hpp:59
sim::WorldTimeWindowName(const WorldTimeWindow window)free functionInventory only; no authored contract note.src/sim/world_time.cpp:17
sim::DeriveWorldTime(const std::uint64_t source_tick,const WorldTimeCycle cycle)free functionInventory only; no authored contract note.src/sim/world_time.cpp:31
sim::WorldTimeResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_time.hpp:34
SortAndValidateIds(std::vector<Record> & records,const char * label,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_topology.cpp:15
ContainsId(const std::vector<Record> & records,const Id id)internal helperInventory only; no authored contract note.src/sim/world_topology.cpp:32
FindRecord(const std::vector<Record> & records,const Id id)internal helperInventory only; no authored contract note.src/sim/world_topology.cpp:38
ValidateDefinition(WorldTopologyDefinition & definition,std::string & error)internal helperInventory only; no authored contract note.src/sim/world_topology.cpp:44
IsBetter(const RouteCandidate & left,const RouteCandidate & right)internal helperInventory only; no authored contract note.src/sim/world_topology.cpp:153
SameCandidate(const RouteCandidate & left,const RouteCandidate & right)internal helperInventory only; no authored contract note.src/sim/world_topology.cpp:169
sim::WorldTopology::WorldTopology(WorldTopologyDefinition definition,Adjacency adjacency)methodInventory only; no authored contract note.src/sim/world_topology.cpp:178
sim::WorldTopology::Revision() constmethodInventory only; no authored contract note.src/sim/world_topology.cpp:185
sim::WorldTopology::Definition() constmethodInventory only; no authored contract note.src/sim/world_topology.cpp:187
sim::WorldTopology::FindChunk(const ChunkId chunk) constmethodInventory only; no authored contract note.src/sim/world_topology.cpp:189
sim::WorldTopology::FindChunk(const ChunkCoordinate coordinate) constmethodInventory only; no authored contract note.src/sim/world_topology.cpp:193
sim::WorldTopology::FindSite(const SiteId site) constmethodInventory only; no authored contract note.src/sim/world_topology.cpp:198
sim::WorldTopology::FindFirstSiteInChunk(const ChunkId chunk) constmethodInventory only; no authored contract note.src/sim/world_topology.cpp:202
sim::WorldTopology::FindNearestSite(const Transform2D position,const double maximum_distance_meters) constmethodFinds the closest authored Site inside a bounded world-space radius and breaks equal-distance ties by stable Site ID.src/sim/world_topology.cpp:208
sim::WorldTopology::FindRouteSegment(const RouteSegmentId segment) constmethodInventory only; no authored contract note.src/sim/world_topology.cpp:234
sim::WorldTopology::RegionForSite(const SiteId site) constmethodInventory only; no authored contract note.src/sim/world_topology.cpp:238
sim::WorldTopology::FindLowestCostRoute(const SiteId origin,const SiteId destination) constmethodInventory only; no authored contract note.src/sim/world_topology.cpp:247
sim::WorldTopology::FindLowestCostRoute(const SiteId origin,const SiteId destination,const std::span<const RouteSegmentTravelOverride> travel_overrides) constmethodInventory only; no authored contract note.src/sim/world_topology.cpp:252
sim::WorldTopology::IsCurrent(const RouteQueryResult & result) constmethodInventory only; no authored contract note.src/sim/world_topology.cpp:351
sim::BuildWorldTopology(WorldTopologyDefinition definition)free functionInventory only; no authored contract note.src/sim/world_topology.cpp:355
sim::RouteQueryResult::Reached() constinline methodInventory only; no authored contract note.src/sim/world_topology.hpp:85
sim::WorldTopologyBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/sim/world_topology.hpp:145
System S.7

#Game

Worldforge-specific authored schemas and gameplay rules for actors, work, resources, food and water supply, construction, settlements and autonomous project choice, production, trade, regional economy, control, parties, player orders, Intersections, incident outcomes, observer knowledge, scouting, memory, reputation, relationships, and households.

Owner

Worldforge-specific authored schemas and gameplay rules for actors, work, resources, food and water supply, construction, settlements and autonomous project choice, production, trade, regional economy, control, parties, player orders, Intersections, incident outcomes, observer knowledge, scouting, memory, reputation, relationships, and households.

Dependencies

Assets for immutable authored bytes, core for shared contracts, and simulation for ECS, world topology, routes, heat, and fixed-tick facts. Game does not open files or own platform state.

Authoritative state

Game owns Actor state and plans; Work, Resource, Supply, Construction, Settlement, Production, Trade, Regional Economy, and scheduler state; ControlAuthority; Party and player-order lifecycles; Intersection schedule and incident lifecycle; observer knowledge and scouting orders; bounded incident outcomes; and separate retained Memory, Reputation, Relationship, and Household runtimes. Settlement retains its bounded autonomous project decision, terminal outcome, and cadence; Construction retains worker-interruption and failure facts; the pure reasoner retains no state. Stable cross-owner and content-definition IDs do not transfer authority. Assets owns immutable catalog definitions; Game retains only mutable runtime records and stable references. Simulation owns mutable ECS and World route state; detached Game state and inspection evidence have no independent mutation authority.

Execution path

  1. LoadRuntimeScenario resolves scenario.<id> through AssetService, validates schema version 1, timing limits, seed, and the optional stable scene ID, then returns an explicit result.
  2. ValidateRuntimeScenario applies the same name, scene-reference, fixed-step, and tick-limit rules to loaded and restored typed scenarios.
  3. LoadRuntimeScene resolves the scenario's scene ID through AssetService, validates versioned entity data, rejects invalid IDs, transforms, footprints, shapes, and colors, then sorts entities by persistent ID.
  4. BuildRuntimeSceneWorld restores the validated authored entities into the Simulation-owned ECS world. A scenario without a scene produces an empty world.
  5. LoadRuntimeEconomyDefinition validates registered resource keys, typed inventory owners, currency-only personal and Household custody, finite food sources, transfer quantities, construction footprints and materials, production transforms, unique identities, cross-owner references, and explicit scheduler budgets before App composes the existing gameplay owners.
  6. AdvanceFoodWorkScheduler reads canonical eligible-worker and spatial-binding indexes and requests bounded stable-ID windows from Supply for claim candidates, execution, reentry, and alerts. Candidate generation consumes its declared visit and Actor-evaluation budgets before building IAUS inputs, so it never constructs a complete awaiting-Supply by eligible-Actor matrix. Its nested Actor and Supply cursor covers cross-pairs instead of repeatedly pairing the same offsets. Rotation derives from the persisted completed-update counter and declared visit stride, giving deterministic continuation after save and replay without a second durable cursor. Every accepted action revalidates the affected Actor, World, Work, Resource, and Supply owners before claim, exact-source gather, stockpile delivery, beneficiary consumption, successor, or alert mutation. ReconcileSettlementSupplyWorkers runs only on scheduler cadence and uses its own bounded Supply window to cancel retained ownership and local movement when a worker or beneficiary becomes invalid.
  7. ActorRuntime owns needs, condition, affect, learned-focus values and evidence, motivation, focus, schedules, plans, task bindings, and actor-local transition history. Learned-tendency reinforcement is revision checked, bounded, and idempotent by sorted source evidence. IAUS reasoners rank immutable candidates, retain the latest scheduled trace for inspection, and never mutate domain state.
  8. Actor focus scheduling accepts sorted revisioned social inputs only for Actors due that tick. Version 1 Household strain contributes one tenth of its value to companionship and records its source in the IAUS trace.
  9. Work, Resource, Supply, and Construction own separate durable lifecycles. Supply records whether a chain serves food or water, permits a worker distinct from its beneficiary, and retains four explicit WorkTask references plus bounded predecessor-successor lineage. Resource consumption is committed before Actor applies revision-checked hunger or hydration relief. Resource also owns dedicated Actor-wallet and Household-money containers plus bounded stable transfer history; money custody never becomes work cargo. A critical Actor interruption can release an autonomous builder after material delivery: Work consumes the old build reservation and returns the Job and build task to claimable states, while Construction retains unchanged delivered material, completed work, fractional progress, blockage timing, and handoff history. The food and construction schedulers retain cadence and work evidence only while coordinating public mutation paths.
  10. Infrastructure maintenance derives the sorted identities of every nonterminal Construction project before asking World to apply condition wear. Active projects retain an exact World revision; terminal project history accepts later monotonic World revisions without becoming the current condition owner.
  11. Work retains the player-authored priority on each Job and validates revision-checked changes. Job preference scoring adds that bounded term to the existing need, capability, route, and continuity evidence rather than replacing autonomous choice. A live player assignment cannot enter the autonomous handoff path. The construction scheduler treats a plan paused because control authority changed as deferred work rather than a lost builder. Construction derives navigation-blocking cells only from completed retained building footprints; active sites remain traversable to assigned workers.
  12. EvaluateSettlementProject sorts at most sixteen detached Building candidates by stable definition ID, applies hard eligibility gates, evaluates three fixed-point considerations within explicit budgets, and breaks equal scores by that canonical order. It returns every candidate's specific rejection or capacity-pressure, material-readiness, and inverse-labor-cost contributions without mutating Settlement or another owner.
  13. SettlementRuntime::RecordProjectDecision revision-checks and retains one canonical decision trace. A no-selection result schedules the next evaluation at the fixed cadence. A selected result suspends the cadence while its stable Construction remains active. SettlementRuntime::ReconcileProjectOutcome accepts only the exact current selected Construction, retains completed, failed, or abandoned status and cause, and schedules the next evaluation after the normal cadence. RuntimeSession restore verifies the Construction identity, Building membership, definition, revision, stage, and retained outcome.
  14. Authored economy schema 11 requires a content-catalog asset ID and validates stable resource, building, recipe, bundle, source-stockpile, material, consumer, and capacity references before it creates a runtime candidate.
  15. Construction and Building records retain stable building-definition IDs while Construction owns project progress and lifecycle. ProductionRuntime retains stable recipe-definition IDs, production-order progress, accepted Building revisions, and bottleneck explanations. Input pickup, delivery, consumed transforms, output placement, labor graphs, and cancellation use the existing Resource and Work owners.
  16. TradeRuntime owns provisioning and obligation shipment purpose, accepted Party revision, terms, deadline, risk context, progress, and outcome. Parties carry Resource-owned cargo through Work reservations and explicit route-arrival facts; cancellation and expiration reconcile those owners without teleporting goods.
  17. RegionalEconomyRuntime owns revisioned supply, demand, and route-flow observations plus incrementally maintained summaries. Every update has an explicit visit budget and deferred count. Summaries cannot transfer inventory, assign work, move Actors, or mutate topology.
  18. ControlAuthorityRuntime owns autonomous, assigned, direct, crisis, and release authority. Party, assignment, move, attack, and scouting registries own their exact request identity and lifecycle without taking Actor, World, Work, or Resource truth.
  19. Intersection occurrence, incident selection, and presentation are separate deterministic reasoners. IntersectionLifecycleRuntime owns retained incidents; wildlife, traveler-dispute, environmental-hazard, and renewable-discovery outcomes apply through existing Actor, World, Party, and knowledge owners.
  20. The wildlife outcome owner can evaluate an active incident for resolution or reconstruct the same outcome from one completed resolved incident and its immutable activation context. Later consequences consume that result instead of inferring historical facts from current Actor condition.
  21. The traveler-dispute outcome owner can also reconstruct its deterministic agreement or unresolved result from one completed resolved Incident and the retained activation context. Relationship composition consumes that result without reopening or mutating the Incident.
  22. MemoryRuntime owns validated memory identity, participant provenance, bounded retention, derived decay, durable witness and reported-memory receipts, and serialization. Its derived knowledge index prevents a holder from learning the same memory kind and incident twice even after active records expire. Completed route incidents, village social encounters, and household reports enter it only through focused App-owned composition adapters; Memory does not mutate Actor, Household, or Intersection state.
  23. Memory exposes exact durable witness receipts through a read-only lookup so derived causal ledgers do not extend active Memory retention or copy the full Memory state.
  24. Memory, Reputation, Relationship, and Household publish constant-time record and index metrics for detached inspection. The metrics expose counts only and do not copy owner state or grant mutation authority.
  25. RelationshipRuntime owns canonical Actor-pair records, bounded per-Actor adjacency, revisioned affinity, trust, strain, durable partnership time, explicit update reasons, and sorted source-Incident evidence. Ordinary affinity drift does not erase a retained partnership; an estrangement does. HouseholdRuntime separately owns stable identity, unique indexed membership, formation reason, partnership and separation changes, residence, compact strain, update reasons, and sorted source-Incident evidence. Both reject overflow, stale revision, invalid evidence, and capacity exhaustion without clamping or partial mutation. Neither treats Memory as social truth.
  26. ReputationRuntime owns one bounded record for each Household and subject Actor pair. It retains stable identity, bravery, reliability, recklessness, and care-for-others values, revisions, update reasons, and sorted Memory-and-Incident evidence. It rejects overflow and stale or exhausted mutations without clamping or partial state changes.
  27. BuildRuntimeResult produces the stable one-line transcript used by people, CTest, and repeatability checks.
  28. Observer Knowledge owns discovered Sites, route reports, environment, ecology-population, and renewable-resource facts with acquisition and freshness. Observation is restricted by known topology and never turns a hidden current World value into player knowledge.
  29. Player-readable World snapshots join detached knowledge records only. They mark expired facts stale and contain no World or knowledge mutation path.

Key types and contracts

  • RuntimeScenario stores ID, optional scene asset ID, seed, tick limit, and fixed-step duration.
  • RuntimeScene stores the source asset ID and ordered immutable entity definitions. Each definition contains a stable-ID state and cold debug name.
  • ScenarioLoadResult and SceneLoadResult carry either typed data or an actionable error.
  • FoodWorkSchedulerState stores only cadence, claim, execution, reentry, and alert budgets, counters, and last-update evidence. Its persisted completed-update count is also the deterministic source for the next bounded rotation; no candidate matrix or independent cursor state is retained. Work owns jobs and tasks, Resource owns allocations and inventory, Supply owns stage transitions, Actor owns needs and its task binding, and World owns route and exact-local movement.
  • SettlementSupplyState stores bounded food or water chains, stable worker and beneficiary references, exact transfer and consumption bundles, need-relief and reentry policy, four WorkTask IDs, successor lineage, alerts, and stable identity high-water marks.
  • Settlement schema 18 stores current membership and defense facts; autonomous project, need, goal, plan, supply, production, housing-pressure, housing-method, housing-parcel, and housing-execution evidence; capabilities; outposts; and each bounded history and cadence. The housing-pressure ledger retains one stable row per assessed Household. The method ledger retains repair, extension, shared-residence, and new-construction alternatives. The parcel ledger retains complete exact-footprint alternatives and one settlement-wide choice only when a selected new-construction method currently requires it. The execution ledger binds that choice once to the current Household and authoritative Construction or Building outcome without copying physical owner state. Pure bounded reasoners evaluate immutable batches; Settlement merges accepted rows without copying the underlying Household, Actor, Relationship, Building, Resource, Work, or World facts. Supported schema 17 saves reopen with no invented housing execution.
  • Construction schema 8 stores blockage timing, the last worker interruption and reassignment ticks, handoff count, and worker_interruption_timeout failure cause without changing delivered materials or completed work. Construction-work scheduler schema 7 stores the grace policy and sorted completed replacement-scan evidence required for deterministic continuation. Phase 3 economy schema 18 embeds both current values.
  • ResourceEconomyState schema 6 stores dedicated money-custody containers and bounded ResourceCustodyTransferRecord history. Each record names one stable transfer identity, purpose, source and destination revisions, exact bundle, and commit tick; retrying identical terms is a no-op and reusing the identity for different terms rejects.
  • Phase 3 economy schema 18 stores player_priority_basis_points on each Work Job, Construction schema 8, and construction-work scheduler schema 7. Phase 3 schema 17 migrates Job priority to neutral and adds no invented handoff history.
  • ProductionState, TradeState, and RegionalEconomyState are separate versioned detached values. Production and Trade retain stable cross-owner IDs; Regional Economy retains source identity, revision, tick, Region, Site, optional route, and Resource references without becoming exact inventory or obligation authority.
  • ControlAuthorityState, PartyRegistryState, player-order registries, IntersectionScheduleState, IntersectionLifecycleState, and ObserverKnowledgeSnapshot are detached values restored only through their owning runtimes.
  • Observer Knowledge schema 3 persists canonical environment, ecology-population, and renewable facts. Schema 1 and schema 2 documents migrate with empty new fact arrays rather than inferred knowledge.
  • MemoryRuntimeState is the detached schema 3 value for the Memory owner. It stores active records, monotonic identity state, and bounded witness and reported-memory receipts. Report receipts preserve the source MemoryId and reporting Actor after active records expire; RuntimeSession retains the state and the foundation document persists it without gaining mutation authority.
  • RelationshipRuntimeState schema 3 retains durable partnership time, and HouseholdRuntimeState schema 9 retains formation reason plus current membership and residence. Previous supported schemas migrate without inventing partnerships, separations, or historical membership. Relationship records have a maximum degree of 64; both record types retain at most 32 sorted, unique source Incident references. Household members are sorted, unique, and indexed so an Actor belongs to at most one retained household.
  • ReputationRuntimeState is the separate schema 1 detached Reputation value. Each record is indexed by stable ID, Household and subject Actor, and Household membership in the reputation index. Active Memory records remain Memory-owned; accepted reputation evidence can survive their expiry through monotonic Memory identity and durable knowledge receipts.
  • Actor state schema 21 persists birth, parent identities, optional immigration and emigration ticks, life stage inputs, death facts, and at most 32 learned-tendency evidence records per Actor. ActorRuntime issues the next unused persistent Actor identity instead of accepting caller-selected demographic identities. Previous supported schemas migrate with no invented migration event. Each learned-tendency record names its source Incident, route segment, affected focus, and policy version.
  • Phase 5 social inputs are not serialized. App rebuilds them from restored owners; the IAUS trace records the exact consumed Household revision, strain, policy, and contribution.
  • Phase 5 owner metrics report active records and bounded index sizes without traversing or copying complete retained state.
224 source files in this module
2050 indexed function definitions

This is source evidence, not an ownership contract. Rows without an authored note make no behavioral claim.

FunctionKindAuthored note statusSource
AppearanceKey(const sim::PersistentId actor,const std::uint64_t tick,const std::uint64_t salt)internal helperInventory only; no authored contract note.src/game/actor_appearance_generation.cpp:6
game::GenerateActorAppearance(const ActorAppearanceGenerationRequest & request)free functionInventory only; no authored contract note.src/game/actor_appearance_generation.cpp:17
RequiredPreparedActorState(const std::optional<ActorState> & state)internal helperInventory only; no authored contract note.src/game/actor_attack_execution.cpp:10
game::ActorRuntime::PrepareAttackExecution(const std::optional<ActorInjuryRequest> injury,const std::span<const ActorPlanTransitionRequest> plan_transitions,const sim::WorldRuntime & world) constmethodInventory only; no authored contract note.src/game/actor_attack_execution.cpp:19
game::ActorRuntime::CommitPreparedAttackExecution(const PreparedActorAttackExecution & prepared,sim::WorldRuntime & world)methodInventory only; no authored contract note.src/game/actor_attack_execution.cpp:53
game::ActorRuntime::PrepareQueuedMoveExecution(const std::span<const sim::PersistentId> actor_ids,const sim::SiteId target_site,const std::uint64_t requested_at_tick,const sim::WorldRuntime & world,const sim::LocalMovementTuning movement_tuning) constmethodInventory only; no authored contract note.src/game/actor_attack_execution.cpp:93
game::ActorRuntime::CommitPreparedQueuedMoveExecution(const PreparedActorMoveExecution & prepared,sim::WorldRuntime & world,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/actor_attack_execution.cpp:151
game::EvaluateActorLifeStage(const ActorCondition & condition,const std::uint64_t at_tick)free functionInventory only; no authored contract note.src/game/actor_condition.cpp:9
game::ActorLifeStageName(const ActorLifeStage stage)free functionInventory only; no authored contract note.src/game/actor_condition.cpp:27
game::ActorDeathCauseName(const ActorDeathCause cause)free functionInventory only; no authored contract note.src/game/actor_condition.cpp:41
game::ActorWoundStateName(const ActorWoundState state)free functionInventory only; no authored contract note.src/game/actor_condition.cpp:55
game::ActorRuntime::PreviewInjury(const ActorInjuryRequest request) constmethodInventory only; no authored contract note.src/game/actor_condition.cpp:67
game::ActorRuntime::ApplyInjury(ActorInjuryRequest request)methodInventory only; no authored contract note.src/game/actor_condition.cpp:145
game::ActorRuntime::ApplyIllness(ActorIllnessRequest request)methodInventory only; no authored contract note.src/game/actor_condition.cpp:155
game::ActorRuntime::PreviewTreatment(const ActorTreatmentRequest request) constmethodInventory only; no authored contract note.src/game/actor_condition.cpp:201
game::ActorRuntime::ApplyTreatment(ActorTreatmentRequest request)methodInventory only; no authored contract note.src/game/actor_condition.cpp:234
game::ActorRuntime::PreviewWoundTreatment(const ActorWoundTreatmentRequest request) constmethodInventory only; no authored contract note.src/game/actor_condition.cpp:245
game::ActorRuntime::ApplyWoundTreatment(ActorWoundTreatmentRequest request)methodInventory only; no authored contract note.src/game/actor_condition.cpp:304
game::ActorRuntime::ApplyDeath(ActorDeathRequest request)methodInventory only; no authored contract note.src/game/actor_condition.cpp:314
game::ActorRuntime::ApplyEmigration(ActorEmigrationRequest request)methodInventory only; no authored contract note.src/game/actor_condition.cpp:380
game::ActorRuntime::PreviewRecoveryReady(const ActorRecoveryReadyRequest request) constmethodInventory only; no authored contract note.src/game/actor_condition.cpp:432
game::ActorRuntime::MarkRecoveryReady(ActorRecoveryReadyRequest request)methodInventory only; no authored contract note.src/game/actor_condition.cpp:471
game::ActorRuntime::PreviewRecovery(const ActorRecoveryRequest request) constmethodInventory only; no authored contract note.src/game/actor_condition.cpp:481
game::ActorRuntime::ApplyRecovery(ActorRecoveryRequest request)methodInventory only; no authored contract note.src/game/actor_condition.cpp:554
game::IsSupportedActorDriveCurve(const UtilityResponseCurve curve)free functionInventory only; no authored contract note.src/game/actor_drive_response.cpp:7
game::ActorDriveCurve(const ActorDriveResponseProfile & profile,const ActorDrive drive)free functionInventory only; no authored contract note.src/game/actor_drive_response.cpp:11
game::ActorDrivePressure(const ActorNeeds & needs,const ActorDrive drive)free functionInventory only; no authored contract note.src/game/actor_drive_response.cpp:30
game::ActorDriveSensitivity(const ActorDriveTemperament & temperament,const ActorDrive drive)free functionInventory only; no authored contract note.src/game/actor_drive_response.cpp:48
game::EvaluateActorDriveResponse(const ActorDriveResponseCurve & response,const ActorDrive drive,const std::uint16_t pressure_basis_points,const std::uint16_t sensitivity_basis_points)free functionInventory only; no authored contract note.src/game/actor_drive_response.cpp:68
game::EvaluateActorDriveResponse(const ActorState & actor,const ActorDrive drive)free functionInventory only; no authored contract note.src/game/actor_drive_response.cpp:110
game::ActorDriveName(const ActorDrive drive)free functionInventory only; no authored contract note.src/game/actor_drive_response.cpp:117
Mix(std::uint64_t value)internal helperInventory only; no authored contract note.src/game/actor_drive_response_template.cpp:11
GenerateSensitivity(const std::uint64_t generation_key,const std::uint64_t axis,const std::uint16_t maximum_deviation)internal helperInventory only; no authored contract note.src/game/actor_drive_response_template.cpp:18
game::ValidateActorDriveResponseTemplate(const ActorDriveResponseTemplate & response_template)free functionInventory only; no authored contract note.src/game/actor_drive_response_template.cpp:33
game::GenerateActorDriveTemperament(const ActorDriveResponseGenerationRequest & request)free functionInventory only; no authored contract note.src/game/actor_drive_response_template.cpp:70
game::ActorDriveResponseGenerationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_drive_response_template.hpp:48
IsValidFocus(const ActorFocus focus)internal helperInventory only; no authored contract note.src/game/actor_focus_reasoner.cpp:21
FocusRank(const ActorFocus focus)internal helperInventory only; no authored contract note.src/game/actor_focus_reasoner.cpp:35
NeedPressure(const ActorNeeds & needs,const ActorFocus focus)internal helperInventory only; no authored contract note.src/game/actor_focus_reasoner.cpp:55
NeedLabel(const ActorFocus focus)internal helperInventory only; no authored contract note.src/game/actor_focus_reasoner.cpp:75
CapabilityInput(const ActorCapabilities & capabilities,const ActorFocus focus)internal helperInventory only; no authored contract note.src/game/actor_focus_reasoner.cpp:102
TraitInput(const ActorTraits & traits,const ActorFocus focus)internal helperInventory only; no authored contract note.src/game/actor_focus_reasoner.cpp:141
TendencyInput(const ActorLearnedTendencies & tendencies,const ActorFocus focus)internal helperInventory only; no authored contract note.src/game/actor_focus_reasoner.cpp:179
EvaluateConsideration(ActorFocusConsiderationDefinition definition,const std::int32_t raw_value)internal helperInventory only; no authored contract note.src/game/actor_focus_reasoner.cpp:199
EvaluateEligibility(const ActorFocusCandidateInput & candidate,const ActorNeeds & needs)internal helperInventory only; no authored contract note.src/game/actor_focus_reasoner.cpp:213
EvaluateConsiderations(const ActorState & actor,const ActorFocus focus,const std::optional<ActorFocusSocialInput> & social_input)internal helperInventory only; no authored contract note.src/game/actor_focus_reasoner.cpp:233
ValidateSnapshot(const ActorFocusDecisionSnapshot & snapshot)internal helperInventory only; no authored contract note.src/game/actor_focus_reasoner.cpp:335
game::ValidateActorFocusSocialInput(const ActorFocusSocialInput & input,const ActorState & actor,const std::uint64_t evaluation_tick)free functionInventory only; no authored contract note.src/game/actor_focus_reasoner.cpp:425
game::EvaluateActorFocus(const ActorFocusDecisionSnapshot & snapshot)free functionInventory only; no authored contract note.src/game/actor_focus_reasoner.cpp:448
game::ActorFocusEligibilityTrace::Eligible() constinline methodInventory only; no authored contract note.src/game/actor_focus_reasoner.hpp:155
game::ActorFocusDecisionResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_focus_reasoner.hpp:197
IsLatched(const std::uint8_t latches,const ActorInterruptionReason reason)internal helperInventory only; no authored contract note.src/game/actor_interruption_policy.cpp:10
InvalidDestination(const ActorState & actor,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/game/actor_interruption_policy.cpp:14
CurrentRoutePressure(const ActorState & actor,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/game/actor_interruption_policy.cpp:45
game::Phase2ActorInterruptionPolicy()free functionInventory only; no authored contract note.src/game/actor_interruption_policy.cpp:60
game::EvaluateActorInterruptionPolicy(const ActorState & actor,const sim::WorldRuntime & world)free functionInventory only; no authored contract note.src/game/actor_interruption_policy.cpp:65
ValidBasisPoints(const std::uint16_t value)internal helperInventory only; no authored contract note.src/game/actor_job_choice.cpp:11
ValidAlternative(const ActorJobChoiceAlternative & alternative)internal helperInventory only; no authored contract note.src/game/actor_job_choice.cpp:15
Rejected(std::string detail)internal helperInventory only; no authored contract note.src/game/actor_job_choice.cpp:32
game::ActorRuntime::PreviewJobChoice(const ActorJobChoiceRecordRequest & request) constmethodInventory only; no authored contract note.src/game/actor_job_choice.cpp:42
game::ActorRuntime::RecordJobChoice(ActorJobChoiceRecordRequest request)methodInventory only; no authored contract note.src/game/actor_job_choice.cpp:110
TendencyForFocus(ActorLearnedTendencies & tendencies,const ActorFocus focus)internal helperInventory only; no authored contract note.src/game/actor_learned_tendency.cpp:10
game::ActorRuntime::PreviewLearnedTendencyReinforcement(const ActorLearnedTendencyMutationRequest request) constmethodInventory only; no authored contract note.src/game/actor_learned_tendency.cpp:33
game::ActorRuntime::ReinforceLearnedTendency(ActorLearnedTendencyMutationRequest request)methodInventory only; no authored contract note.src/game/actor_learned_tendency.cpp:104
ActiveJob(const ActorState & actor)internal helperInventory only; no authored contract note.src/game/actor_motivation.cpp:13
SameQueuedDecision(const ActorState & actor,const ActorMotivationDecisionResult & decision)internal helperInventory only; no authored contract note.src/game/actor_motivation.cpp:19
WorkCheckpointReached(const ActorState & actor)internal helperInventory only; no authored contract note.src/game/actor_motivation.cpp:27
RejectedMutation(std::string detail,const std::optional<ActorState> & actor=std::nullopt)internal helperInventory only; no authored contract note.src/game/actor_motivation.cpp:41
game::EvaluateActorMotivation(const ActorMotivationDecisionSnapshot & snapshot)free functionInventory only; no authored contract note.src/game/actor_motivation.cpp:52
game::ActorRuntime::PreviewMotivationQueue(const ActorMotivationDecisionResult & decision) constmethodInventory only; no authored contract note.src/game/actor_motivation.cpp:112
game::ActorRuntime::ApplyMotivationQueue(const ActorMotivationDecisionResult & decision)methodInventory only; no authored contract note.src/game/actor_motivation.cpp:167
game::ActorRuntime::PreviewCarriedMealCompletion(const CarriedMealRequest & request) constmethodInventory only; no authored contract note.src/game/actor_motivation.cpp:177
game::ActorRuntime::CompleteCarriedMeal(const CarriedMealRequest & request)methodInventory only; no authored contract note.src/game/actor_motivation.cpp:220
game::PreviewQueueActorMotivation(const ActorMotivationDecisionResult & decision,const ActorRuntime & actors)free functionInventory only; no authored contract note.src/game/actor_motivation.cpp:230
game::QueueActorMotivation(const ActorMotivationDecisionResult & decision,ActorRuntime & actors)free functionInventory only; no authored contract note.src/game/actor_motivation.cpp:235
game::PreviewCarriedMeal(const CarriedMealRequest & request,const ActorRuntime & actors,const ResourceEconomyRuntime & resources)free functionInventory only; no authored contract note.src/game/actor_motivation.cpp:240
game::TryConsumeCarriedMeal(const CarriedMealRequest & request,ActorRuntime & actors,ResourceEconomyRuntime & resources)free functionInventory only; no authored contract note.src/game/actor_motivation.cpp:300
game::ActorMotivationDecisionResult::Selected() constinline methodInventory only; no authored contract note.src/game/actor_motivation.hpp:57
game::ActorMotivationQueueResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_motivation.hpp:74
game::CarriedMealTransactionResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_motivation.hpp:106
NeedPressure(ActorNeeds & needs,const ActorFocus focus)internal helperInventory only; no authored contract note.src/game/actor_need_relief.cpp:9
game::ActorRuntime::PreviewNeedRelief(const ActorNeedReliefRequest request) constmethodInventory only; no authored contract note.src/game/actor_need_relief.cpp:31
game::ActorRuntime::ApplyNeedRelief(ActorNeedReliefRequest request)methodInventory only; no authored contract note.src/game/actor_need_relief.cpp:79
game::ActorRuntime::PreviewJobCompletion(const ActorJobCompletionRequest request) constmethodInventory only; no authored contract note.src/game/actor_need_relief.cpp:90
game::ActorRuntime::CompleteJob(ActorJobCompletionRequest request)methodInventory only; no authored contract note.src/game/actor_need_relief.cpp:160
IsTerminal(const ActorPlanStatus status)internal helperInventory only; no authored contract note.src/game/actor_plan.cpp:11
PositionBelongsToSiteChunk(const sim::Transform2D position,const sim::SiteId site,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/game/actor_plan.cpp:16
IsInterruptReason(const ActorPlanChangeReason reason)internal helperInventory only; no authored contract note.src/game/actor_plan.cpp:26
IsReasonAllowed(const ActorPlanTransitionOperation operation,const ActorPlanChangeReason reason)internal helperInventory only; no authored contract note.src/game/actor_plan.cpp:63
InterruptionReasonForPlanReason(const ActorPlanChangeReason reason)internal helperInventory only; no authored contract note.src/game/actor_plan.cpp:105
IncrementWithoutOverflow(std::uint64_t & value)internal helperInventory only; no authored contract note.src/game/actor_plan.cpp:148
SelectedCandidate(const ActorFocusDecisionResult & decision)internal helperInventory only; no authored contract note.src/game/actor_plan.cpp:157
IsIdempotentPlanStart(const ActorState & actor,const ActorFocus focus,const sim::SiteId target_site)internal helperInventory only; no authored contract note.src/game/actor_plan.cpp:177
game::ActorRuntime::NextPlanTransitionSequence() constmethodInventory only; no authored contract note.src/game/actor_plan.cpp:187
game::ActorRuntime::LastPlanTransition() constmethodInventory only; no authored contract note.src/game/actor_plan.cpp:191
game::ActorRuntime::PlanTransitionCounters() constmethodInventory only; no authored contract note.src/game/actor_plan.cpp:195
game::ActorRuntime::RecordPlanTransition(ActorPlanTransitionResult result)methodInventory only; no authored contract note.src/game/actor_plan.cpp:199
game::ActorRuntime::ApplyFocusDecision(const ActorFocusDecisionSnapshot & snapshot,sim::WorldRuntime & world,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/actor_plan.cpp:217
game::ActorRuntime::PreviewJobPlanStart(const ActorJobPlanRequest & request,const sim::WorldRuntime & world) constmethodInventory only; no authored contract note.src/game/actor_plan.cpp:224
game::ActorRuntime::StartJobPlan(ActorJobPlanRequest request,sim::WorldRuntime & world,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/actor_plan.cpp:391
game::ActorRuntime::PreviewMovePlanStart(const ActorMovePlanRequest & request,const sim::WorldRuntime & world) constmethodInventory only; no authored contract note.src/game/actor_plan.cpp:446
game::ActorRuntime::StartMovePlan(ActorMovePlanRequest request,sim::WorldRuntime & world,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/actor_plan.cpp:613
game::ActorRuntime::PreviewAttackPlanStart(const ActorAttackPlanRequest & request,const sim::WorldRuntime & world) constmethodInventory only; no authored contract note.src/game/actor_plan.cpp:685
game::ActorRuntime::StartAttackPlan(ActorAttackPlanRequest request,const sim::WorldRuntime & world)methodInventory only; no authored contract note.src/game/actor_plan.cpp:783
game::ActorRuntime::PreviewPlanTransition(ActorPlanTransitionRequest request,const sim::WorldRuntime & world) constmethodInventory only; no authored contract note.src/game/actor_plan.cpp:796
game::ActorRuntime::PreviewJobStepAdvance(const ActorJobStepRequest & request,const sim::WorldRuntime & world) constmethodInventory only; no authored contract note.src/game/actor_plan.cpp:803
game::ActorRuntime::AdvanceJobStep(ActorJobStepRequest request,sim::WorldRuntime & world,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/actor_plan.cpp:940
game::ActorRuntime::PreviewJobTargetRefresh(const ActorJobTargetRefreshRequest & request,const sim::WorldRuntime & world) constmethodInventory only; no authored contract note.src/game/actor_plan.cpp:984
game::ActorRuntime::RefreshJobTarget(ActorJobTargetRefreshRequest request,sim::WorldRuntime & world,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/actor_plan.cpp:1082
game::ActorRuntime::ApplyEvaluatedFocusDecision(const ActorFocusDecisionSnapshot & snapshot,const ActorFocusDecisionResult & decision,sim::WorldRuntime & world,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/actor_plan.cpp:1106
game::ActorRuntime::ApplyPlanTransition(ActorPlanTransitionRequest request,sim::WorldRuntime & world,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/actor_plan.cpp:1268
game::ActorRuntime::ApplyPlanTransitionOwned(ActorPlanTransitionRequest request,sim::WorldRuntime & world,const PlanTransitionAuthority authority,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/actor_plan.cpp:1275
game::ActorRuntime::PreviewPlanTransitionOwned(ActorPlanTransitionRequest request,const sim::WorldRuntime & world,const PlanTransitionAuthority authority) constmethodInventory only; no authored contract note.src/game/actor_plan.cpp:1313
game::ActorRuntime::ReconcileRouteArrival(const sim::PersistentId actor,sim::WorldRuntime & world,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/actor_plan.cpp:1592
game::ActorRuntime::ReconcileLocalArrival(const sim::PersistentId actor,const sim::WorldRuntime & world)methodConverts one arrived exact-local World move into the matching Actor job task state only when the retained plan destination and current navigation destination still agree.src/game/actor_plan.cpp:1743
game::ActorRuntime::ReconcileArrivedRouteActors(sim::WorldRuntime & world,const std::span<const sim::PersistentId> arrived_actors,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/actor_plan.cpp:1844
game::ActorRuntime::ReconcileArrivedLocalActors(const sim::WorldRuntime & world,const std::span<const sim::PersistentId> arrived_actors)methodInventory only; no authored contract note.src/game/actor_plan.cpp:1871
SaturatingAdd(const std::uint64_t left,const std::uint64_t right)internal helperInventory only; no authored contract note.src/game/actor_routine.cpp:78
BelowConservationThreshold(const std::uint64_t available,const std::uint64_t capacity)internal helperInventory only; no authored contract note.src/game/actor_routine.cpp:84
PlannedActivity(const std::uint16_t minute_of_day,const sim::WorldDayKind day_kind,const ActorRoutinePolicy & policy)internal helperInventory only; no authored contract note.src/game/actor_routine.cpp:89
MixRoutineValue(std::uint64_t value)internal helperInventory only; no authored contract note.src/game/actor_routine.cpp:100
BoundedSignedSample(const std::uint64_t sample,const std::uint16_t maximum)internal helperInventory only; no authored contract note.src/game/actor_routine.cpp:107
GeneratedScheduleOffset(const ActorState & actor,const ActorRoutinePolicy & policy)internal helperInventory only; no authored contract note.src/game/actor_routine.cpp:115
DailyScheduleVariation(const ActorState & actor,const std::uint64_t day,const ActorRoutinePolicy & policy)internal helperInventory only; no authored contract note.src/game/actor_routine.cpp:130
HasActiveWorkCommitment(const ActorState & actor)internal helperInventory only; no authored contract note.src/game/actor_routine.cpp:136
EvaluateActorRoutine(const ActorState & actor,const sim::WorldCalendarSnapshot & calendar,const ActorRoutinePolicy & policy,const std::optional<RegionalRoutineEnvironment> & regional_environment)internal helperInventory only; no authored contract note.src/game/actor_routine.cpp:141
game::ActorRoutineActivityName(const ActorRoutineActivity activity)free functionInventory only; no authored contract note.src/game/actor_routine.cpp:214
game::ActorRoutineReasonName(const ActorRoutineReason reason)free functionInventory only; no authored contract note.src/game/actor_routine.cpp:240
game::RegionalRoutineAdaptationName(const RegionalRoutineAdaptation adaptation)free functionInventory only; no authored contract note.src/game/actor_routine.cpp:271
game::CaptureRegionalRoutineEnvironment(const sim::SiteId site,const sim::WorldRuntime & world)free functionInventory only; no authored contract note.src/game/actor_routine.cpp:286
game::DefaultActorRoutinePolicy()free functionInventory only; no authored contract note.src/game/actor_routine.cpp:339
game::ValidateActorRoutinePolicy(const ActorRoutinePolicy & policy)free functionInventory only; no authored contract note.src/game/actor_routine.cpp:342
game::EvaluateActorRoutine(const ActorState & actor,const sim::WorldCalendarSnapshot & calendar)free functionInventory only; no authored contract note.src/game/actor_routine.cpp:370
game::EvaluateActorRoutine(const ActorState & actor,const sim::WorldCalendarSnapshot & calendar,const ActorRoutinePolicy & policy)free functionInventory only; no authored contract note.src/game/actor_routine.cpp:375
game::EvaluateActorRoutine(const ActorState & actor,const sim::WorldRuntime & world)free functionInventory only; no authored contract note.src/game/actor_routine.cpp:381
game::EvaluateActorRoutine(const ActorState & actor,const sim::WorldRuntime & world,const ActorRoutinePolicy & policy)free functionInventory only; no authored contract note.src/game/actor_routine.cpp:386
game::ValidateActorRoutineState(const ActorRoutineState & routine,const std::uint64_t current_tick)free functionInventory only; no authored contract note.src/game/actor_routine.cpp:396
game::ApplyActorRoutineDecision(ActorState & actor,const ActorRoutineDecision & decision,const std::uint64_t evaluated_at_tick)free functionInventory only; no authored contract note.src/game/actor_routine.cpp:425
game::ActorJobChoiceRecordResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:41
game::ActorNeedReliefResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:65
game::ActorLearnedTendencyMutationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:95
game::ActorWorkProgressionResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:125
game::ActorConditionMutationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:153
game::ActorIllnessResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:173
game::ActorTreatmentResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:192
game::ActorWoundTreatmentResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:214
game::ActorDeathResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:233
game::ActorEmigrationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:251
game::ActorAttackExecutionPreparationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:265
game::ActorMoveExecutionPreparationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:281
game::ActorRecoveryReadyResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:297
game::ActorRecoveryResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:318
game::ActorJobCompletionResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:341
game::ActorCaptureResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:360
game::ActorSnapshotResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:367
game::ActorLocalArrivalReconcileResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:375
game::ActorRouteArrivalReconcileResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:383
game::ActorRuntimeBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_runtime.hpp:572
PlanReasonForInterruption(const ActorInterruptionReason reason)internal helperInventory only; no authored contract note.src/game/actor_schedule.cpp:17
IncrementWithoutOverflow(std::uint64_t & value)internal helperInventory only; no authored contract note.src/game/actor_schedule.cpp:37
AdvanceBasisPoints(const std::uint16_t current,const std::uint16_t amount_per_tick,const std::uint64_t elapsed_ticks)internal helperInventory only; no authored contract note.src/game/actor_schedule.cpp:79
AdvanceNeeds(ActorNeeds & needs,const std::uint64_t elapsed_ticks)internal helperInventory only; no authored contract note.src/game/actor_schedule.cpp:93
FocusedNeed(ActorNeeds & needs,const ActorFocus focus)internal helperInventory only; no authored contract note.src/game/actor_schedule.cpp:114
IsTerminalPlan(const ActorPlanStatus status)internal helperInventory only; no authored contract note.src/game/actor_schedule.cpp:134
LogicalActorSite(const sim::HeatEntitySnapshot & heat,const std::optional<sim::SyntheticRouteProgress> & route)internal helperInventory only; no authored contract note.src/game/actor_schedule.cpp:139
BuildScheduledFocusSnapshot(const ActorState & actor,const sim::HeatEntitySnapshot & heat,const std::vector<ActorFocusSiteBinding> & bindings,const sim::WorldRuntime & world,std::optional<ActorFocusSocialInput> social_input)internal helperInventory only; no authored contract note.src/game/actor_schedule.cpp:148
RejectedUpdate(const sim::PersistentId actor,const std::uint64_t tick,const ActorScheduledUpdateReason reason,const std::optional<ActorState> & state=std::nullopt)internal helperInventory only; no authored contract note.src/game/actor_schedule.cpp:174
game::Phase2ActorExecutionTuning()free functionInventory only; no authored contract note.src/game/actor_schedule.cpp:207
game::IsActorScheduledAtTick(const sim::PersistentId actor,const std::uint64_t update_interval_ticks,const std::uint64_t tick)free functionInventory only; no authored contract note.src/game/actor_schedule.cpp:209
game::NextActorScheduledUpdateTick(const sim::PersistentId actor,const std::uint64_t update_interval_ticks,const std::uint64_t current_tick)free functionInventory only; no authored contract note.src/game/actor_schedule.cpp:216
game::ActorRuntime::ScheduledWorkCounters() constmethodInventory only; no authored contract note.src/game/actor_schedule.cpp:235
game::ActorRuntime::LastScheduledUpdate() constmethodInventory only; no authored contract note.src/game/actor_schedule.cpp:240
game::ActorRuntime::LastFocusDecisionTrace() constmethodInventory only; no authored contract note.src/game/actor_schedule.cpp:245
game::ActorRuntime::IncrementScheduledCounter(std::uint64_t ActorScheduledWorkCounters::* counter)methodInventory only; no authored contract note.src/game/actor_schedule.cpp:249
game::ActorRuntime::RecordScheduledUpdate(ActorScheduledUpdateResult result)methodInventory only; no authored contract note.src/game/actor_schedule.cpp:259
game::ActorRuntime::ReconcileHeatTransition(const sim::HeatTransitionResult & transition,const sim::WorldRuntime & world)methodInventory only; no authored contract note.src/game/actor_schedule.cpp:319
game::ActorRuntime::ScheduledActorsAtTick(const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/actor_schedule.cpp:404
game::ActorRuntime::AdvanceScheduledActors(sim::WorldRuntime & world,const std::span<const sim::PersistentId> sorted_suppressed_automatic_plan_changes,const std::span<const ActorFocusSocialInput> sorted_social_inputs,const sim::LocalMovementTuning movement_tuning,const ActorRoutinePolicy * const routine_policy)methodAdvances bounded heat-cadenced Actor needs and tasks, evaluates interruption and focus policy, and suppresses every automatic plan mutation for authority-owned Actors while continuing non-plan simulation facts.src/game/actor_schedule.cpp:411
game::ActorScheduledUpdateResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_schedule.hpp:80
game::ActorScheduledAdvanceResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_schedule.hpp:133
game::ActorHeatScheduleReconcileResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_schedule.hpp:151
ValuesWithinBasisPoints(const std::array<std::uint16_t,Size> & values)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:19
TendenciesWithinBounds(const std::array<std::int16_t,Size> & values)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:25
IsValid(const ActorFocus focus)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:32
FocusRank(const ActorFocus focus)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:46
CanonicalizeFocusSiteBindings(std::vector<ActorFocusSiteBinding> & bindings,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:49
IsValid(const ActorPlanKind kind)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:76
IsValid(const ActorPlanStatus status)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:88
IsValid(const ActorPlanChangeReason reason)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:103
IsValid(const ActorTaskKind kind)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:139
IsValid(const ActorTaskStatus status)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:152
IsValid(const ActorInterruptionReason reason)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:166
IsValid(const ActorInterruptionResolution resolution)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:180
IsValid(const ActorMotivationRoot root)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:190
IsValid(const ActorMotivationMethod method)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:194
IsValid(const ActorMotivationStatus status)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:204
IsValid(const ActorJobChoiceOutcome outcome)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:209
IsValid(const ActorJobChoiceRejection rejection)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:214
IsValid(const WorkSourceKind kind)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:231
ValidateJobChoice(const ActorJobChoiceState & choice,const std::uint64_t actor_revision,const std::uint64_t current_tick)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:251
ValidateBoundedFacts(const ActorState & actor)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:321
ValidateMotivation(const ActorMotivationState & motivation,const std::uint64_t current_tick)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:483
ValidateGoal(const ActorGoalState & goal,const std::uint64_t current_tick)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:515
ValidatePlan(const ActorPlanState & plan,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:535
ValidateTask(const ActorTaskState & task,const ActorPlanState & plan,const std::uint64_t current_tick)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:593
ValidateInterruption(const std::optional<ActorInterruptionRecord> & interruption,const std::uint64_t current_tick)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:637
ValidateReplanPolicy(const ActorReplanPolicyState & policy,const std::uint64_t current_tick)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:660
ValidateActor(const ActorState & actor,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/game/actor_state.cpp:684
game::ActorInterruptionLatchBit(const ActorInterruptionReason reason)free functionInventory only; no authored contract note.src/game/actor_state.cpp:847
game::ActorRoleTags::Contains(const ActorRoleTag role) constmethodInventory only; no authored contract note.src/game/actor_state.cpp:867
game::ActorRuntime::ActorRuntime(const sim::TopologyRevision topology_revision,std::map<sim::PersistentId,ActorState> actors,std::vector<ActorFocusSiteBinding> focus_site_bindings,std::map<std::uint64_t,std::vector<sim::PersistentId>> scheduled_actor_updates,std::map<sim::PersistentId,std::uint64_t> next_scheduled_update_ticks)methodInventory only; no authored contract note.src/game/actor_state.cpp:871
game::ActorRuntime::SourceTopologyRevision() constmethodInventory only; no authored contract note.src/game/actor_state.cpp:881
game::ActorRuntime::ActorCount() constmethodInventory only; no authored contract note.src/game/actor_state.cpp:885
game::ActorRuntime::ContainsActor(const sim::PersistentId actor) constmethodInventory only; no authored contract note.src/game/actor_state.cpp:887
game::ActorRuntime::ActorIds() constmethodInventory only; no authored contract note.src/game/actor_state.cpp:891
game::ActorRuntime::NextAvailableActorId() constmethodInventory only; no authored contract note.src/game/actor_state.cpp:901
game::ActorRuntime::FindActor(const sim::PersistentId actor) constmethodInventory only; no authored contract note.src/game/actor_state.cpp:912
game::ActorRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/actor_state.cpp:920
game::ActorRuntime::FocusSiteBindings() constmethodInventory only; no authored contract note.src/game/actor_state.cpp:930
game::ActorRuntime::CaptureActor(const sim::PersistentId actor,const sim::WorldRuntime & world) constmethodInventory only; no authored contract note.src/game/actor_state.cpp:934
game::ActorRuntime::CaptureActors(const sim::WorldRuntime & world) constmethodInventory only; no authored contract note.src/game/actor_state.cpp:976
game::BuildActorRuntimeCandidate(std::vector<ActorState> actors,const sim::WorldRuntime & world,std::vector<ActorFocusSiteBinding> focus_site_bindings,const std::size_t maximum_live_population)free functionInventory only; no authored contract note.src/game/actor_state.cpp:1015
game::AffiliationId::operator bool() constinline methodInventory only; no authored contract note.src/game/actor_state.hpp:39
game::operator |(const ActorRoleTag left,const ActorRoleTag right)free functionInventory only; no authored contract note.src/game/actor_state.hpp:80
game::ActorWoundId::operator bool() constinline methodInventory only; no authored contract note.src/game/actor_state.hpp:154
game::ActorDriveResponseTemplateId::operator bool() constinline methodInventory only; no authored contract note.src/game/actor_state.hpp:228
game::ActorPlanTransitionResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/actor_state.hpp:644
RequireEnum(const std::optional<Enum> value,const std::string_view field)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:24
RequireUnsignedInteger(const nlohmann::json & value,const std::string_view field)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:32
RequireSignedInteger(const nlohmann::json & value,const std::string_view field)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:53
FocusName(const ActorFocus focus)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:73
ParseFocus(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:93
ParseWoundState(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:118
WorkSourceName(const WorkSourceKind kind)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:131
ParseWorkSource(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:163
UtilityCurveName(const UtilityResponseCurve curve)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:206
ParseUtilityCurve(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:222
SerializeDriveResponseCurve(const ActorDriveResponseCurve & response)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:241
ParseDriveResponseCurve(const nlohmann::json & response,const std::string_view drive)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:248
SerializeDriveResponseProfile(const ActorDriveResponseProfile & profile)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:263
ParseDriveResponseProfile(const nlohmann::json & profile)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:272
SerializeDriveTemperament(const ActorDriveTemperament & temperament)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:283
ParseDriveTemperament(const nlohmann::json & temperament)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:293
FindTemplate(const AuthoredDriveResponseGeneration & generation,const ActorDriveResponseTemplateId id)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:321
ParseDriveSensitivityVariation(const nlohmann::json & variation)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:327
ParseAuthoredDriveResponseGeneration(const nlohmann::json & source)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:349
ParseMaterializedDriveResponse(const nlohmann::json & actor,const AuthoredDriveResponseGeneration * generation)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:403
MotivationRootName(const ActorMotivationRoot root)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:445
ParseMotivationRoot(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:455
MotivationMethodName(const ActorMotivationMethod method)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:465
ParseMotivationMethod(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:477
MotivationStatusName(const ActorMotivationStatus status)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:490
ParseMotivationStatus(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:502
PlanKindName(const ActorPlanKind kind)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:515
ParsePlanKind(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:531
PlanStatusName(const ActorPlanStatus status)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:550
ParsePlanStatus(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:572
PlanReasonName(const ActorPlanChangeReason reason)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:600
ParsePlanReason(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:664
TaskKindName(const ActorTaskKind kind)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:755
ParseTaskKind(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:773
TaskStatusName(const ActorTaskStatus status)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:795
ParseTaskStatus(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:815
InterruptionReasonName(const ActorInterruptionReason reason)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:840
ParseInterruptionReason(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:860
InterruptionResolutionName(const ActorInterruptionResolution resolution)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:885
ParseInterruptionResolution(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:898
RoutineActivityDocumentName(const ActorRoutineActivity activity)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:911
ParseRoutineActivity(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:918
RoutineReasonDocumentName(const ActorRoutineReason reason)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:952
ParseRoutineReason(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:982
JobChoiceOutcomeName(const ActorJobChoiceOutcome outcome)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:1022
ParseJobChoiceOutcome(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:1034
JobChoiceRejectionName(const ActorJobChoiceRejection rejection)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:1047
ParseJobChoiceRejection(const std::string_view value)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:1073
SerializeActor(const ActorState & actor)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:1097
ParseActor(const nlohmann::json & document,const AuthoredDriveResponseGeneration * generation,const std::uint64_t schema_version)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:1374
CanonicalFocusSiteBindings(std::vector<ActorFocusSiteBinding> bindings)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:1838
FocusSiteBindingsDocument(const std::vector<ActorFocusSiteBinding> & focus_site_bindings)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:1866
ParseFocusSiteBindings(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/actor_state_serialization.cpp:1875
game::SerializeActorStates(const std::vector<ActorState> & actors,const std::vector<ActorFocusSiteBinding> & focus_site_bindings)free functionInventory only; no authored contract note.src/game/actor_state_serialization.cpp:1894
game::DeserializeActorStates(const std::string_view document_text)free functionInventory only; no authored contract note.src/game/actor_state_serialization.cpp:1927
IsCraftingSource(const WorkSourceKind kind)internal helperInventory only; no authored contract note.src/game/actor_work_progression.cpp:16
VariationKey(const ActorWorkProgressionRequest & request)internal helperInventory only; no authored contract note.src/game/actor_work_progression.cpp:20
game::ActorRuntime::PreviewWorkProgression(const ActorWorkProgressionRequest request) constmethodInventory only; no authored contract note.src/game/actor_work_progression.cpp:30
game::ActorRuntime::ApplyWorkProgression(ActorWorkProgressionRequest request)methodInventory only; no authored contract note.src/game/actor_work_progression.cpp:125
game::EvaluateCombatEquipment(const ResourceEconomyRuntime & resources,const sim::PersistentId actor)free functionInventory only; no authored contract note.src/game/combat_equipment.cpp:5
game::CombatEquipmentSnapshot::Equipped() constinline methodInventory only; no authored contract note.src/game/combat_equipment.hpp:28
Incrementable(const std::uint64_t value)internal helperInventory only; no authored contract note.src/game/construction.cpp:11
IncrementableBy(const std::uint64_t value,const std::uint64_t amount)internal helperInventory only; no authored contract note.src/game/construction.cpp:15
HasWorkTransitionCapacity(const WorkLifecycleRuntime & work,const std::uint64_t count)internal helperInventory only; no authored contract note.src/game/construction.cpp:19
IsValidOrientation(const ConstructionOrientation value)internal helperInventory only; no authored contract note.src/game/construction.cpp:23
IsTerminal(const ConstructionStage stage)internal helperInventory only; no authored contract note.src/game/construction.cpp:28
IsValidBuildingFunction(const BuildingFunction value)internal helperInventory only; no authored contract note.src/game/construction.cpp:33
IsValidDefinitionId(const std::string_view value)internal helperInventory only; no authored contract note.src/game/construction.cpp:37
Rejected(const ConstructionOperationReason reason,const ConstructionId construction,const std::uint64_t tick,std::string detail)internal helperInventory only; no authored contract note.src/game/construction.cpp:41
RequireApplied(const Result & result,const std::string_view operation)internal helperInventory only; no authored contract note.src/game/construction.cpp:52
IsCanonicalBundle(const ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/game/construction.cpp:59
IsValidKey(const std::string_view key)internal helperInventory only; no authored contract note.src/game/construction.cpp:74
game::ConstructionRuntime::RecordOperation(ConstructionOperationResult result)methodInventory only; no authored contract note.src/game/construction.cpp:87
game::ConstructionRuntime::RegisterFootprint(std::string key,std::vector<FootprintCellOffset> cells,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/construction.cpp:93
game::ConstructionRuntime::Designate(ConstructionCreateRequest request,const sim::WorldGridDefinition & grid,WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/construction.cpp:122
game::ConstructionRuntime::PrepareSite(const ConstructionId id,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/construction.cpp:273
game::ConstructionRuntime::BeginRenewal(ConstructionRenewalRequest request,const ConstructionProjectKind project,WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/construction.cpp:304
game::ConstructionRuntime::BeginUpgrade(ConstructionRenewalRequest request,WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/construction.cpp:411
game::ConstructionRuntime::BeginRepair(ConstructionRenewalRequest request,WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/construction.cpp:417
game::ConstructionRuntime::ApplyDamage(const BuildingId id,const std::uint16_t damage_basis_points,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/construction.cpp:423
game::ConstructionRuntime::Decommission(const BuildingId id,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/construction.cpp:449
game::ConstructionRuntime::PreviewObserveClaim(const ConstructionId id,const ReservationId reservation_id,const std::uint64_t tick,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources) constmethodInventory only; no authored contract note.src/game/construction.cpp:493
game::ConstructionRuntime::PreviewObserveClaim(const ConstructionId id,const ConstructionClaimFact & claim,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/construction.cpp:538
game::ConstructionRuntime::ObserveClaim(const ConstructionId id,const ReservationId reservation_id,const std::uint64_t tick,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/construction.cpp:564
game::ConstructionRuntime::PreviewCompletePickup(const ConstructionId id,const std::uint64_t tick,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources) constmethodInventory only; no authored contract note.src/game/construction.cpp:589
game::ConstructionRuntime::CompletePickup(const ConstructionId id,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/construction.cpp:628
game::ConstructionRuntime::PreviewRecordRouteFact(const ConstructionId id,const ConstructionRouteFact route,const std::uint64_t tick,const WorkLifecycleRuntime & work) constmethodInventory only; no authored contract note.src/game/construction.cpp:667
game::ConstructionRuntime::RecordRouteFact(const ConstructionId id,const ConstructionRouteFact route,const std::uint64_t tick,WorkLifecycleRuntime & work)methodInventory only; no authored contract note.src/game/construction.cpp:733
game::ConstructionRuntime::PreviewCompleteDelivery(const ConstructionId id,const std::uint64_t tick,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources) constmethodInventory only; no authored contract note.src/game/construction.cpp:782
game::ConstructionRuntime::CompleteDelivery(const ConstructionId id,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/construction.cpp:820
game::ConstructionRuntime::PreviewApplyBuildProgress(const ConstructionId id,const std::uint64_t work_units,const std::uint64_t work_remainder_numerator,const std::uint64_t tick,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources) constmethodInventory only; no authored contract note.src/game/construction.cpp:851
game::ConstructionRuntime::ApplyBuildProgress(const ConstructionId id,const std::uint64_t work_units,const std::uint64_t work_remainder_numerator,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/construction.cpp:923
game::ConstructionRuntime::RecordWorkerInterruption(const ConstructionId id,const std::uint64_t tick,WorkLifecycleRuntime & work)methodReleases one active autonomous builder through Work while retaining delivered material, completed work, fractional progress, blockage timing, and Construction handoff history.src/game/construction.cpp:991
game::ConstructionRuntime::PreviewReassignInterruptedWorker(const ConstructionId id,const sim::PersistentId replacement,const std::uint64_t tick,const WorkLifecycleRuntime & work) constmethodValidates an interrupted site's replacement identity, tick, Work claim, reservation subject, and Construction revision without mutating either owner.src/game/construction.cpp:1029
game::ConstructionRuntime::ReassignInterruptedWorker(const ConstructionId id,const sim::PersistentId replacement,const std::uint64_t tick,WorkLifecycleRuntime & work)methodCommits the prevalidated replacement Work claim, clears worker-interruption blockage, and retains the new builder plus reassignment tick and handoff count.src/game/construction.cpp:1058
game::ConstructionRuntime::Cancel(const ConstructionId id,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/construction.cpp:1087
game::ConstructionRuntime::Fail(const ConstructionId id,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,const ConstructionFailureCause cause)methodInventory only; no authored contract note.src/game/construction.cpp:1094
game::ConstructionRuntime::Terminate(const ConstructionId id,const std::uint64_t tick,const bool failed,const ConstructionFailureCause failure_cause,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/construction.cpp:1107
game::ConstructionRuntime::Find(const ConstructionId id) constmethodInventory only; no authored contract note.src/game/construction.cpp:1227
game::ConstructionRuntime::FindBuilding(const BuildingId id) constmethodInventory only; no authored contract note.src/game/construction.cpp:1232
game::ConstructionRuntime::FindActiveConstructionByBuilding(const BuildingId building) constmethodInventory only; no authored contract note.src/game/construction.cpp:1238
game::ConstructionRuntime::FindByJob(const JobId job) constmethodInventory only; no authored contract note.src/game/construction.cpp:1244
game::ConstructionRuntime::FindFootprint(const ConstructionFootprintId id) constmethodInventory only; no authored contract note.src/game/construction.cpp:1250
game::ConstructionRuntime::FindFootprintByKey(const std::string_view key) constmethodInventory only; no authored contract note.src/game/construction.cpp:1256
game::ConstructionRuntime::EnsureActiveConstructionIndex() constmethodInventory only; no authored contract note.src/game/construction.cpp:1261
game::ConstructionRuntime::ActiveConstructionCount() constmethodInventory only; no authored contract note.src/game/construction.cpp:1276
game::ConstructionRuntime::ActiveConstructionIdWindow(const ConstructionId after,const std::size_t maximum_visits) constmethodInventory only; no authored contract note.src/game/construction.cpp:1282
game::ConstructionRuntime::ConstructionIds() constmethodInventory only; no authored contract note.src/game/construction.cpp:1317
game::ConstructionRuntime::BuildingIds() constmethodInventory only; no authored contract note.src/game/construction.cpp:1327
game::ConstructionRuntime::OccupantAt(const sim::WorldCellCoordinate cell) constmethodInventory only; no authored contract note.src/game/construction.cpp:1338
game::ConstructionRuntime::OccupiedCells() constmethodInventory only; no authored contract note.src/game/construction.cpp:1343
game::ConstructionRuntime::NavigationBlockedCells() constmethodInventory only; no authored contract note.src/game/construction.cpp:1353
game::ConstructionRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/construction.cpp:1383
game::ConstructionRuntime::LastOperation() constmethodInventory only; no authored contract note.src/game/construction.cpp:1409
game::ConstructionFootprintCreateResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/construction.hpp:52
game::ConstructionCreateResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/construction.hpp:61
game::ActiveConstructionIdWindowResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/construction.hpp:91
game::ConstructionBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/construction.hpp:240
IsValid(const ConstructionOrientation value)internal helperInventory only; no authored contract note.src/game/construction_state.cpp:11
IsValid(const ConstructionStage value)internal helperInventory only; no authored contract note.src/game/construction_state.cpp:16
IsValid(const ConstructionProjectKind value)internal helperInventory only; no authored contract note.src/game/construction_state.cpp:34
IsValid(const BuildingFunction value)internal helperInventory only; no authored contract note.src/game/construction_state.cpp:38
IsValidDefinitionId(const std::string_view value)internal helperInventory only; no authored contract note.src/game/construction_state.cpp:40
IsValid(const BuildingLifecycle value)internal helperInventory only; no authored contract note.src/game/construction_state.cpp:44
IsValid(const ConstructionOperationStatus value)internal helperInventory only; no authored contract note.src/game/construction_state.cpp:46
IsValid(const ConstructionOperationReason value)internal helperInventory only; no authored contract note.src/game/construction_state.cpp:53
IsValidKey(const std::string_view key)internal helperInventory only; no authored contract note.src/game/construction_state.cpp:76
IsCanonicalBundle(const ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/game/construction_state.cpp:86
IsTerminal(const ConstructionStage stage)internal helperInventory only; no authored contract note.src/game/construction_state.cpp:101
IsValid(const ConstructionBlockageReason reason)internal helperInventory only; no authored contract note.src/game/construction_state.cpp:106
IsValid(const ConstructionFailureCause cause)internal helperInventory only; no authored contract note.src/game/construction_state.cpp:112
game::ValidateConstructionState(const ConstructionState & state,const sim::WorldGridDefinition & grid,std::string & error)free functionInventory only; no authored contract note.src/game/construction_state.cpp:121
game::ConstructionRuntime::ConstructionRuntime(ConstructionState state,std::map<ConstructionFootprintId,ConstructionFootprintDefinition> footprints,std::map<ConstructionId,ConstructionRecord> constructions,std::map<BuildingId,BuildingRecord> buildings)methodInventory only; no authored contract note.src/game/construction_state.cpp:378
game::ConstructionRuntime::RebuildOccupancy()methodInventory only; no authored contract note.src/game/construction_state.cpp:392
game::BuildConstructionCandidate(ConstructionState state,const sim::WorldGridDefinition & grid,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)free functionInventory only; no authored contract note.src/game/construction_state.cpp:416
CheckedAdd(const std::int64_t left,const std::int64_t right,std::int64_t & result)internal helperInventory only; no authored contract note.src/game/construction_types.cpp:9
Rotate(const FootprintCellOffset cell,const ConstructionOrientation orientation)internal helperInventory only; no authored contract note.src/game/construction_types.cpp:18
game::ConstructionOrientationName(const ConstructionOrientation value)free functionInventory only; no authored contract note.src/game/construction_types.cpp:35
game::ConstructionStageName(const ConstructionStage value)free functionInventory only; no authored contract note.src/game/construction_types.cpp:49
game::ConstructionProjectKindName(const ConstructionProjectKind value)free functionInventory only; no authored contract note.src/game/construction_types.cpp:77
game::BuildingFunctionName(const BuildingFunction value)free functionInventory only; no authored contract note.src/game/construction_types.cpp:89
game::BuildingLifecycleName(const BuildingLifecycle value)free functionInventory only; no authored contract note.src/game/construction_types.cpp:113
game::ConstructionBlockageReasonName(const ConstructionBlockageReason value)free functionInventory only; no authored contract note.src/game/construction_types.cpp:135
game::ConstructionFailureCauseName(const ConstructionFailureCause value)free functionInventory only; no authored contract note.src/game/construction_types.cpp:147
game::ConstructionOperationStatusName(const ConstructionOperationStatus value)free functionInventory only; no authored contract note.src/game/construction_types.cpp:161
game::ConstructionOperationReasonName(const ConstructionOperationReason value)free functionInventory only; no authored contract note.src/game/construction_types.cpp:175
game::OccupiedConstructionCells(const sim::WorldCellCoordinate origin,const ConstructionOrientation orientation,const std::vector<FootprintCellOffset> & footprint)free functionInventory only; no authored contract note.src/game/construction_types.cpp:214
game::ConstructionId::operator bool() constinline methodInventory only; no authored contract note.src/game/construction_types.hpp:30
game::ConstructionFootprintId::operator bool() constinline methodInventory only; no authored contract note.src/game/construction_types.hpp:38
game::BuildingId::operator bool() constinline methodInventory only; no authored contract note.src/game/construction_types.hpp:48
game::ConstructionOperationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/construction_types.hpp:236
game::EvaluateConstructionCapabilityFit(const ActorState & actor)free functionInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:16
game::EvaluateConstructionWorkRateModifier(const ActorState & actor)free functionInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:28
Rejected(const std::uint64_t tick,std::string detail)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:35
IsSuppressed(const std::span<const sim::PersistentId> suppressed_actors,const sim::PersistentId actor)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:42
HasCompletedReplacementScan(const ConstructionWorkSchedulerState & state,const ConstructionId construction)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:47
MarkReplacementScanCompleted(ConstructionWorkSchedulerState & state,const ConstructionId construction)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:52
ClearReplacementScan(ConstructionWorkSchedulerState & state,const ConstructionId construction)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:61
ContinuationOwnsInterruptedSite(const ConstructionWorkSchedulerState & state,const ConstructionRuntime & construction)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:70
EffectiveBudgets(const ConstructionWorkSchedulerPolicy & policy)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:97
FindSpatialBinding(const std::span<const SettlementWorkSpatialAnchor> spatial_bindings,const InventoryOwnerMarker owner)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:110
ProjectWorkAnchor(const ConstructionRecord & record,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:117
BuildClaimCandidate(const ConstructionRecord & record,const std::uint64_t tick,const ConstructionWorkSchedulerPolicy & policy,const sim::WorldRuntime & world,const sim::PersistentId actor_id,const ActorRuntime & actors,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources,const std::span<const SettlementWorkSpatialAnchor> spatial_bindings,const HouseholdRuntime * households,const JobPreferenceScoringPolicy & scoring_policy)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:138
HaulRouteFact(const ConstructionRecord & record,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:255
JobStep(const ConstructionRecord & record,const ActorState & actor,const std::size_t current,const std::size_t next,const SettlementWorkSpatialAnchor & target,const sim::WorldRuntime & world,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:281
IsReadyAt(const ActorState & actor,const ConstructionRecord & record,const WorkTaskId task,const SettlementWorkSpatialAnchor & target,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:299
EligibleActorWindow(const std::span<const sim::PersistentId> eligible_actors,const sim::PersistentId after,const std::size_t maximum_visits,bool & completed_cycle)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:315
AddCounter(std::uint64_t & target,const std::size_t amount)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:335
SumEquals(const std::uint64_t expected,const std::initializer_list<std::uint64_t> values)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:343
ValidConstructionWorkTuning(const ConstructionWorkTuning tuning)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:354
ConstructionWorkNumeratorPerTick(const ConstructionWorkTuning tuning,const std::uint16_t actor_modifier_basis_points)internal helperInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:361
game::CalculateConstructionWorkContribution(const ConstructionRecord & construction,const ConstructionWorkRateWindow window)free functionInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:375
game::EstimateConstructionRemainingTicks(const ConstructionRecord & construction,const ConstructionWorkTuning tuning,const std::uint16_t actor_modifier_basis_points)free functionInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:406
game::ValidateConstructionWorkSchedulerState(const ConstructionWorkSchedulerState & state,std::string & error)free functionInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:429
game::AdvanceConstructionWorkScheduler(ConstructionWorkSchedulerState & state,const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,ConstructionRuntime & construction,const ConstructionWorkExecutionContext context)free functionInventory only; no authored contract note.src/game/construction_work_scheduler.cpp:494
game::ConstructionWorkSchedulerUpdateResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/construction_work_scheduler.hpp:122
IsValid(const ActorControlMode mode)internal helperInventory only; no authored contract note.src/game/control_authority.cpp:10
IsValid(const ActorControlReason reason)internal helperInventory only; no authored contract note.src/game/control_authority.cpp:12
SuppressesAutonomousWork(const ActorControlMode mode)internal helperInventory only; no authored contract note.src/game/control_authority.cpp:16
IsValid(const ActorPlanStatus status)internal helperInventory only; no authored contract note.src/game/control_authority.cpp:21
IsValid(const ActorTaskStatus status)internal helperInventory only; no authored contract note.src/game/control_authority.cpp:36
ReasonMatchesMode(const ActorControlMode mode,const ActorControlReason reason)internal helperInventory only; no authored contract note.src/game/control_authority.cpp:50
IsLegalTransition(const ActorControlMode source,const ActorControlMode target,const ActorControlReason reason)internal helperInventory only; no authored contract note.src/game/control_authority.cpp:70
CaptureContext(const ActorControlMode source_mode,const ActorState & actor,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/game/control_authority.cpp:101
ValidateRecord(const ActorControlRecord & record,std::string & error)internal helperInventory only; no authored contract note.src/game/control_authority.cpp:114
Reject(ActorControlTransitionRequest request,std::string detail,std::optional<ActorControlRecord> before=std::nullopt)internal helperInventory only; no authored contract note.src/game/control_authority.cpp:193
game::ControlAuthorityRuntime::ControlAuthorityRuntime(std::map<sim::PersistentId,ActorControlRecord> actors,const std::uint64_t next_transition_sequence)methodInventory only; no authored contract note.src/game/control_authority.cpp:205
game::ControlAuthorityRuntime::Find(const sim::PersistentId actor) constmethodInventory only; no authored contract note.src/game/control_authority.cpp:220
game::ControlAuthorityRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/control_authority.cpp:225
game::ControlAuthorityRuntime::SuppressedAutomaticActorIds() constmethodInventory only; no authored contract note.src/game/control_authority.cpp:236
game::ControlAuthorityRuntime::SuppressedAutonomousWorkActorIds() constmethodInventory only; no authored contract note.src/game/control_authority.cpp:240
game::ControlAuthorityRuntime::PreviewTransition(const ActorControlTransitionRequest & request,const ActorState & actor) constmethodInventory only; no authored contract note.src/game/control_authority.cpp:245
game::ControlAuthorityRuntime::ApplyTransition(ActorControlTransitionRequest request,const ActorState & actor)methodInventory only; no authored contract note.src/game/control_authority.cpp:352
game::ValidateControlAuthorityState(const ControlAuthorityState & state,const std::span<const ActorState> actors,std::string & error)free functionInventory only; no authored contract note.src/game/control_authority.cpp:374
game::BuildControlAuthorityRuntime(const std::span<const ActorState> actors,std::optional<ControlAuthorityState> state)free functionInventory only; no authored contract note.src/game/control_authority.cpp:441
game::ActorControlModeName(const ActorControlMode mode)free functionInventory only; no authored contract note.src/game/control_authority.cpp:467
game::ActorControlReasonName(const ActorControlReason reason)free functionInventory only; no authored contract note.src/game/control_authority.cpp:483
game::ActorControlTransitionStatusName(const ActorControlTransitionStatus status)free functionInventory only; no authored contract note.src/game/control_authority.cpp:506
game::ActorControlTransitionResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/control_authority.hpp:96
game::ControlAuthorityBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/control_authority.hpp:133
SerializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/control_authority_serialization.cpp:14
DeserializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/control_authority_serialization.cpp:18
ParseMode(const std::string_view value)internal helperInventory only; no authored contract note.src/game/control_authority_serialization.cpp:22
ParseReason(const std::string_view value)internal helperInventory only; no authored contract note.src/game/control_authority_serialization.cpp:41
ParsePlanStatus(const std::string_view value)internal helperInventory only; no authored contract note.src/game/control_authority_serialization.cpp:69
PlanStatusName(const ActorPlanStatus value)internal helperInventory only; no authored contract note.src/game/control_authority_serialization.cpp:97
ParseTaskStatus(const std::string_view value)internal helperInventory only; no authored contract note.src/game/control_authority_serialization.cpp:119
TaskStatusName(const ActorTaskStatus value)internal helperInventory only; no authored contract note.src/game/control_authority_serialization.cpp:144
OptionalId(const std::optional<Id> value)internal helperInventory only; no authored contract note.src/game/control_authority_serialization.cpp:164
ParseOptionalId(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/game/control_authority_serialization.cpp:168
SerializeContext(const ActorControlContext & context)internal helperInventory only; no authored contract note.src/game/control_authority_serialization.cpp:172
ParseContext(const nlohmann::json & document,std::string & error)internal helperInventory only; no authored contract note.src/game/control_authority_serialization.cpp:184
game::SerializeControlAuthorityState(const ControlAuthorityState & state,const std::span<const ActorState> actors)free functionInventory only; no authored contract note.src/game/control_authority_serialization.cpp:209
game::DeserializeControlAuthorityState(const std::string_view text,const std::span<const ActorState> actors)free functionInventory only; no authored contract note.src/game/control_authority_serialization.cpp:247
game::NormalizeUtilityBasisPoints(const std::int32_t raw_value,const std::int32_t minimum,const std::int32_t maximum)free functionInventory only; no authored contract note.src/game/decision_utility.cpp:8
game::ApplyUtilityResponseCurve(const UtilityResponseCurve curve,const std::uint16_t normalized)free functionInventory only; no authored contract note.src/game/decision_utility.cpp:19
game::ScaleUtilityContribution(const std::int32_t curved_basis_points,const std::uint16_t maximum_contribution)free functionInventory only; no authored contract note.src/game/decision_utility.cpp:37
ValidBasisPoints(const std::uint16_t value)internal helperInventory only; no authored contract note.src/game/faction.cpp:14
ValidRemoteConflictState(const RemoteConflictState state)internal helperInventory only; no authored contract note.src/game/faction.cpp:16
ValidFactionRecord(const FactionRecord & faction)internal helperInventory only; no authored contract note.src/game/faction.cpp:26
ValidPressure(const FactionPressureRecord & pressure,const FactionRecord & faction)internal helperInventory only; no authored contract note.src/game/faction.cpp:50
ValidRemoteConflict(const RemoteConflictSummary & conflict,const std::map<FactionId,FactionRecord> & factions)internal helperInventory only; no authored contract note.src/game/faction.cpp:68
ValidDecision(const FactionStrategicDecision & decision,const FactionRecord & faction)internal helperInventory only; no authored contract note.src/game/faction.cpp:87
HoldCandidate(const FactionStrategicInput & input)internal helperInventory only; no authored contract note.src/game/faction.cpp:115
NegotiationCandidate(const FactionStrategicInput & input)internal helperInventory only; no authored contract note.src/game/faction.cpp:133
RaidCandidate(const FactionStrategicInput & input,const FactionRelationRecord & relation,const FactionRecord & faction)internal helperInventory only; no authored contract note.src/game/faction.cpp:154
game::CanonicalFactionRelationKey(FactionId first,FactionId second)free functionInventory only; no authored contract note.src/game/faction.cpp:198
game::FactionGoalName(const FactionGoal goal)free functionInventory only; no authored contract note.src/game/faction.cpp:205
game::FactionStanceName(const FactionStance stance)free functionInventory only; no authored contract note.src/game/faction.cpp:215
game::FactionStrategicIntentName(const FactionStrategicIntent intent)free functionInventory only; no authored contract note.src/game/faction.cpp:229
game::FactionPressureKindName(const FactionPressureKind kind)free functionInventory only; no authored contract note.src/game/faction.cpp:241
game::RemoteConflictStateName(const RemoteConflictState state)free functionInventory only; no authored contract note.src/game/faction.cpp:251
game::ValidateFactionRuntimeState(const FactionRuntimeState & state,std::string & error)free functionInventory only; no authored contract note.src/game/faction.cpp:263
game::FactionRuntime::FactionRuntime(std::map<FactionId,FactionRecord> factions,std::map<FactionRelationKey,FactionRelationRecord> relations,std::map<RemoteConflictId,RemoteConflictSummary> remote_conflicts,const std::uint64_t next_remote_conflict_id,const RemoteConflictId remote_cursor,std::optional<RemoteConflictBatchEvidence> last_remote_batch)methodInventory only; no authored contract note.src/game/faction.cpp:324
game::BuildFactionRuntime(FactionRuntimeState state)free functionInventory only; no authored contract note.src/game/faction.cpp:335
game::FactionRuntime::Find(const FactionId faction) constmethodInventory only; no authored contract note.src/game/faction.cpp:358
game::FactionRuntime::FindRelation(const FactionId first,const FactionId second) constmethodInventory only; no authored contract note.src/game/faction.cpp:363
game::FactionRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/faction.cpp:369
game::FactionRuntime::EvaluateStrategy(const FactionStrategicInput input)methodInventory only; no authored contract note.src/game/faction.cpp:392
game::FactionRuntime::RecordPressure(FactionPressureRequest request)methodInventory only; no authored contract note.src/game/faction.cpp:465
game::FactionRuntime::CreateRemoteConflict(RemoteConflictCreateRequest request)methodInventory only; no authored contract note.src/game/faction.cpp:489
game::FactionRuntime::AdvanceRemoteConflicts(const RemoteConflictAdvanceRequest request)methodInventory only; no authored contract note.src/game/faction.cpp:521
game::FactionId::operator bool() constinline methodInventory only; no authored contract note.src/game/faction.hpp:32
game::RemoteConflictId::operator bool() constinline methodInventory only; no authored contract note.src/game/faction.hpp:40
game::FactionStrategyResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/faction.hpp:237
game::FactionPressureResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/faction.hpp:253
game::RemoteConflictCreateResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/faction.hpp:275
game::FactionRuntimeBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/faction.hpp:317
game::NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(FactionId,value)free functionInventory only; no authored contract note.src/game/faction_serialization.cpp:42
game::DeserializeFactionRuntimeState(const std::string_view document)free functionInventory only; no authored contract note.src/game/faction_serialization.cpp:99
game::FactionSerializationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/faction_serialization.hpp:15
game::FactionDeserializationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/faction_serialization.hpp:22
Rejected(std::string detail)internal helperInventory only; no authored contract note.src/game/farming.cpp:14
Applied(const FarmingCycleId id,std::string detail)internal helperInventory only; no authored contract note.src/game/farming.cpp:20
Terminal(const FarmingStage stage)internal helperInventory only; no authored contract note.src/game/farming.cpp:24
ValidEnvironmentalPolicy(const FarmingEnvironmentalPolicy & policy)internal helperInventory only; no authored contract note.src/game/farming.cpp:29
CanonicalBundle(const ResourceBundle & bundle,const bool empty_allowed)internal helperInventory only; no authored contract note.src/game/farming.cpp:51
Merge(ResourceBundle first,const ResourceBundle & second)internal helperInventory only; no authored contract note.src/game/farming.cpp:67
InitialInputs(const FarmingCycleRecord & record)internal helperInventory only; no authored contract note.src/game/farming.cpp:82
ScaleBundle(const ResourceBundle & source,const std::uint16_t basis_points)internal helperInventory only; no authored contract note.src/game/farming.cpp:86
RegionForSite(const sim::SiteId site,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/game/farming.cpp:99
EvaluateEnvironment(const FarmingCycleRecord & record,const sim::WorldLandArea & area,const sim::WorldRuntime & world,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/game/farming.cpp:109
WorkPosition(const FarmingCycleRecord & record,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/game/farming.cpp:178
ActorReady(const ActorState & actor,const FarmingCycleRecord & record,const WorkTaskId task)internal helperInventory only; no authored contract note.src/game/farming.cpp:183
CompleteActor(ActorRuntime & actors,const sim::PersistentId actor,sim::WorldRuntime & world,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/game/farming.cpp:190
AbandonActor(ActorRuntime & actors,const sim::PersistentId actor,sim::WorldRuntime & world,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/game/farming.cpp:199
MoveToolToInput(ResourceEconomyRuntime & resources,const FarmingCycleRecord & record,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/game/farming.cpp:208
game::FarmingStageName(const FarmingStage stage)free functionInventory only; no authored contract note.src/game/farming.cpp:251
game::FarmingOutcomeName(const FarmingOutcome outcome)free functionInventory only; no authored contract note.src/game/farming.cpp:297
game::ValidateFarmingEnvironmentalPolicy(const FarmingEnvironmentalPolicy & policy)free functionInventory only; no authored contract note.src/game/farming.cpp:311
game::ValidateFarmingState(const FarmingState & state,std::string & error)free functionInventory only; no authored contract note.src/game/farming.cpp:315
game::FarmingRuntime::Designate(FarmingDesignateRequest request,const sim::WorldRuntime & world,WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/farming.cpp:399
game::FarmingRuntime::Claim(const FarmingCycleId id,const sim::PersistentId actor_id,const InventoryContainerId carrier_id,const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,const sim::LocalMovementTuning movement_tuning,std::string selection_reason)methodInventory only; no authored contract note.src/game/farming.cpp:503
game::FarmingRuntime::Advance(const FarmingCycleId id,const std::uint64_t work_units,const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/farming.cpp:613
game::FarmingRuntime::Cancel(const FarmingCycleId id,const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/farming.cpp:1030
game::FarmingRuntime::ReconcileWorkerLoss(const FarmingCycleId id,const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/farming.cpp:1080
game::FarmingRuntime::Reopen(const FarmingCycleId id,const std::uint64_t tick,std::string selection_reason,sim::WorldRuntime & world,WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/farming.cpp:1126
game::FarmingRuntime::RecordBlockage(const FarmingCycleId id,std::string reason,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/farming.cpp:1203
game::FarmingRuntime::Find(const FarmingCycleId id) constmethodInventory only; no authored contract note.src/game/farming.cpp:1217
game::FarmingRuntime::ActiveWindow(const FarmingCycleId after,const std::size_t maximum_visits) constmethodInventory only; no authored contract note.src/game/farming.cpp:1222
game::FarmingRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/farming.cpp:1242
game::FarmingRuntime::FarmingRuntime(FarmingState state,std::map<FarmingCycleId,FarmingCycleRecord> cycles)methodInventory only; no authored contract note.src/game/farming.cpp:1251
game::BuildFarmingCandidate(FarmingState state,const sim::WorldRuntime & world,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)free functionInventory only; no authored contract note.src/game/farming.cpp:1255
game::ValidateFarmingSchedulerState(const FarmingSchedulerState & state,std::string & error)free functionInventory only; no authored contract note.src/game/farming.cpp:1294
game::AdvanceFarmingScheduler(FarmingSchedulerState & state,const std::uint64_t tick,const std::span<const FarmingSettlementNeed> settlement_needs,const std::span<const sim::PersistentId> eligible_actors,const std::span<const sim::PersistentId> suppressed_actors,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,FarmingRuntime & farming,const sim::LocalMovementTuning movement_tuning)free functionInventory only; no authored contract note.src/game/farming.cpp:1318
game::FarmingCycleId::operator bool() constinline methodInventory only; no authored contract note.src/game/farming.hpp:29
game::FarmingOperationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/farming.hpp:180
game::FarmingSchedulerResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/farming.hpp:242
game::FarmingBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/farming.hpp:300
ValidReason(const HouseholdUpdateReason reason)internal helperInventory only; no authored contract note.src/game/household.cpp:11
ValidResidence(const HouseholdResidence & residence)internal helperInventory only; no authored contract note.src/game/household.cpp:15
ValidEvidence(const std::vector<HouseholdEvidence> & evidence)internal helperInventory only; no authored contract note.src/game/household.cpp:24
CanonicalEvidence(std::vector<HouseholdEvidence> evidence)internal helperInventory only; no authored contract note.src/game/household.cpp:32
Reject(std::string detail,std::optional<HouseholdRecord> before=std::nullopt)internal helperInventory only; no authored contract note.src/game/household.cpp:38
game::HouseholdCareKindName(const HouseholdCareKind kind)free functionInventory only; no authored contract note.src/game/household.cpp:48
game::HouseholdUpdateReasonName(const HouseholdUpdateReason reason)free functionInventory only; no authored contract note.src/game/household.cpp:60
game::ParseHouseholdUpdateReason(const std::string_view name)free functionInventory only; no authored contract note.src/game/household.cpp:102
game::ValidateHouseholdRuntimeState(const HouseholdRuntimeState & state,const std::span<const sim::PersistentId> actors,std::string & error)free functionInventory only; no authored contract note.src/game/household.cpp:121
game::ValidateHouseholdResidenceBindings(const HouseholdRuntimeState & households,const ConstructionState & construction,std::string & error)free functionInventory only; no authored contract note.src/game/household.cpp:190
game::HouseholdRuntime::HouseholdRuntime(const std::span<const sim::PersistentId> actors,HouseholdRuntimeState state)methodInventory only; no authored contract note.src/game/household.cpp:219
game::BuildHouseholdRuntime(const std::span<const sim::PersistentId> actors,HouseholdRuntimeState state)free functionInventory only; no authored contract note.src/game/household.cpp:230
game::HouseholdRuntime::Create(HouseholdCreateRequest request)methodInventory only; no authored contract note.src/game/household.cpp:239
game::HouseholdRuntime::RecordCare(HouseholdCareRequest request)methodInventory only; no authored contract note.src/game/household.cpp:280
game::HouseholdRuntime::AddMember(const HouseholdMemberArrivalRequest request)methodInventory only; no authored contract note.src/game/household.cpp:320
game::HouseholdRuntime::RemoveMember(const HouseholdMemberDepartureRequest request)methodInventory only; no authored contract note.src/game/household.cpp:350
game::HouseholdRuntime::UpdateStrain(HouseholdStrainUpdateRequest request)methodInventory only; no authored contract note.src/game/household.cpp:386
game::HouseholdRuntime::AssignResidence(HouseholdResidenceAssignmentRequest request)methodInventory only; no authored contract note.src/game/household.cpp:449
game::HouseholdRuntime::ReleaseResidence(HouseholdResidenceReleaseRequest request)methodInventory only; no authored contract note.src/game/household.cpp:503
game::HouseholdRuntime::Find(const HouseholdId household) constmethodInventory only; no authored contract note.src/game/household.cpp:535
game::HouseholdRuntime::HouseholdIds() constmethodInventory only; no authored contract note.src/game/household.cpp:540
game::HouseholdRuntime::HouseholdIdForActor(const sim::PersistentId actor) constmethodInventory only; no authored contract note.src/game/household.cpp:551
game::HouseholdRuntime::ForActor(const sim::PersistentId actor) constmethodInventory only; no authored contract note.src/game/household.cpp:557
game::HouseholdRuntime::ResidenceForActor(const sim::PersistentId actor) constmethodInventory only; no authored contract note.src/game/household.cpp:563
game::HouseholdRuntime::ResidenceBenefitForActor(const sim::PersistentId actor) constmethodInventory only; no authored contract note.src/game/household.cpp:573
game::HouseholdRuntime::CaptureMetrics() constmethodInventory only; no authored contract note.src/game/household.cpp:591
game::HouseholdRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/household.cpp:598
game::HouseholdMutationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/household.hpp:206
game::HouseholdRuntimeBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/household.hpp:250
game::HouseholdId::operator bool() constinline methodInventory only; no authored contract note.src/game/household_id.hpp:13
SerializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/household_serialization.cpp:14
DeserializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/household_serialization.cpp:18
game::SerializeHouseholdRuntimeState(const HouseholdRuntimeState & state,const std::span<const sim::PersistentId> actors)free functionInventory only; no authored contract note.src/game/household_serialization.cpp:25
game::DeserializeHouseholdRuntimeState(const std::string_view text,const std::span<const sim::PersistentId> actors)free functionInventory only; no authored contract note.src/game/household_serialization.cpp:90
ValidStableId(const std::string_view id,const std::size_t maximum_length)internal helperInventory only; no authored contract note.src/game/incident_event_template.cpp:12
ValidTrigger(const IncidentEventTrigger trigger)internal helperInventory only; no authored contract note.src/game/incident_event_template.cpp:20
ValidLocation(const IncidentEventLocationRequirement location)internal helperInventory only; no authored contract note.src/game/incident_event_template.cpp:24
ValidVisibility(const IncidentEventVisibility visibility)internal helperInventory only; no authored contract note.src/game/incident_event_template.cpp:34
ValidResolutionMode(const IncidentEventResolutionMode mode)internal helperInventory only; no authored contract note.src/game/incident_event_template.cpp:44
game::ValidateAndCanonicalizeIncidentEventTemplates(std::vector<IncidentEventTemplate> & templates,std::string & error)free functionInventory only; no authored contract note.src/game/incident_event_template.cpp:51
game::IncidentEventTriggerName(const IncidentEventTrigger trigger)free functionInventory only; no authored contract note.src/game/incident_event_template.cpp:98
game::IncidentEventLocationRequirementName(const IncidentEventLocationRequirement location)free functionInventory only; no authored contract note.src/game/incident_event_template.cpp:103
game::IncidentEventVisibilityName(const IncidentEventVisibility visibility)free functionInventory only; no authored contract note.src/game/incident_event_template.cpp:115
game::IncidentEventResolutionModeName(const IncidentEventResolutionMode mode)free functionInventory only; no authored contract note.src/game/incident_event_template.cpp:127
game::IncidentId::operator bool() constinline methodInventory only; no authored contract note.src/game/incident_id.hpp:11
game::FindIncidentOutcomeResolver(const std::string_view id)free functionInventory only; no authored contract note.src/game/incident_outcome_resolver.cpp:31
game::ValidateIncidentOutcomeResolverRegistrations(const std::span<const IncidentEventTemplate> templates,std::string & error)free functionInventory only; no authored contract note.src/game/incident_outcome_resolver.cpp:37
Rejected(std::string detail)internal helperInventory only; no authored contract note.src/game/infrastructure_construction.cpp:14
Applied(const sim::LocalInfrastructureId id,std::string detail)internal helperInventory only; no authored contract note.src/game/infrastructure_construction.cpp:18
IsTerminal(const InfrastructureConstructionStage stage)internal helperInventory only; no authored contract note.src/game/infrastructure_construction.cpp:23
IsWorkStage(const InfrastructureConstructionStage stage)internal helperInventory only; no authored contract note.src/game/infrastructure_construction.cpp:29
TaskIndex(const InfrastructureConstructionStage stage)internal helperInventory only; no authored contract note.src/game/infrastructure_construction.cpp:35
CanonicalBundle(const ResourceBundle & bundle,const bool allow_empty)internal helperInventory only; no authored contract note.src/game/infrastructure_construction.cpp:48
MergeBundles(ResourceBundle first,const ResourceBundle & second)internal helperInventory only; no authored contract note.src/game/infrastructure_construction.cpp:64
WorkPosition(const InfrastructureConstructionRecord & record,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/game/infrastructure_construction.cpp:79
ActorReady(const ActorState & actor,const InfrastructureConstructionRecord & record,const WorkTaskId task)internal helperInventory only; no authored contract note.src/game/infrastructure_construction.cpp:84
CompleteActorPlan(ActorRuntime & actors,const sim::PersistentId actor,sim::WorldRuntime & world,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/game/infrastructure_construction.cpp:92
AbandonActorPlan(ActorRuntime & actors,const sim::PersistentId actor,sim::WorldRuntime & world,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/game/infrastructure_construction.cpp:101
RequiredWork(const InfrastructureConstructionRecord & record,const InfrastructureConstructionStage stage)internal helperInventory only; no authored contract note.src/game/infrastructure_construction.cpp:110
game::InfrastructureConstructionStageName(const InfrastructureConstructionStage stage)free functionInventory only; no authored contract note.src/game/infrastructure_construction.cpp:127
game::InfrastructureConstructionFailureCauseName(const InfrastructureConstructionFailureCause cause)free functionInventory only; no authored contract note.src/game/infrastructure_construction.cpp:153
game::InfrastructureConstructionPurposeName(const InfrastructureConstructionPurpose purpose)free functionInventory only; no authored contract note.src/game/infrastructure_construction.cpp:171
game::ValidateInfrastructureConstructionState(const InfrastructureConstructionState & state,std::string & error)free functionInventory only; no authored contract note.src/game/infrastructure_construction.cpp:181
game::InfrastructureConstructionRuntime::Designate(InfrastructureConstructionDesignateRequest request,const sim::WorldRuntime & world,WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/infrastructure_construction.cpp:244
game::InfrastructureConstructionRuntime::Claim(const sim::LocalInfrastructureId id,const sim::PersistentId actor_id,const InventoryContainerId carrier_id,const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/infrastructure_construction.cpp:336
game::InfrastructureConstructionRuntime::Advance(const sim::LocalInfrastructureId id,const std::uint64_t work_units,const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/infrastructure_construction.cpp:434
game::InfrastructureConstructionRuntime::Cancel(const sim::LocalInfrastructureId id,const std::uint64_t expected_revision,const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/infrastructure_construction.cpp:684
game::InfrastructureConstructionRuntime::ReconcileWorkerLoss(const sim::LocalInfrastructureId id,const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/infrastructure_construction.cpp:792
game::InfrastructureConstructionRuntime::Find(const sim::LocalInfrastructureId id) constmethodInventory only; no authored contract note.src/game/infrastructure_construction.cpp:836
game::InfrastructureConstructionRuntime::ActiveWindow(const sim::LocalInfrastructureId after,const std::size_t maximum_visits) constmethodInventory only; no authored contract note.src/game/infrastructure_construction.cpp:842
game::InfrastructureConstructionRuntime::CapturePage(const InfrastructureConstructionPageRequest request) constmethodInventory only; no authored contract note.src/game/infrastructure_construction.cpp:868
game::InfrastructureConstructionRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/infrastructure_construction.cpp:896
game::InfrastructureConstructionRuntime::InfrastructureConstructionRuntime(std::map<sim::LocalInfrastructureId,InfrastructureConstructionRecord> projects)methodInventory only; no authored contract note.src/game/infrastructure_construction.cpp:906
game::BuildInfrastructureConstructionCandidate(InfrastructureConstructionState state,const sim::WorldRuntime & world,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)free functionInventory only; no authored contract note.src/game/infrastructure_construction.cpp:910
game::ValidateInfrastructureConstructionSchedulerState(const InfrastructureConstructionSchedulerState & state,std::string & error)free functionInventory only; no authored contract note.src/game/infrastructure_construction.cpp:962
game::AdvanceInfrastructureConstructionScheduler(InfrastructureConstructionSchedulerState & state,const std::uint64_t tick,const std::span<const sim::PersistentId> eligible_actors,const std::span<const sim::PersistentId> suppressed_actors,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,InfrastructureConstructionRuntime & construction,const sim::LocalMovementTuning movement_tuning)free functionInventory only; no authored contract note.src/game/infrastructure_construction.cpp:1007
game::AdvanceInfrastructureMaintenanceScheduler(InfrastructureConstructionSchedulerState & state,const std::uint64_t tick,sim::WorldRuntime & world,SettlementRuntime & settlements,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,InfrastructureConstructionRuntime & construction,const std::optional<InfrastructureMaintenanceDirection> direction)free functionInventory only; no authored contract note.src/game/infrastructure_construction.cpp:1166
game::InfrastructureConstructionOperationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/infrastructure_construction.hpp:130
game::InfrastructureMaintenanceResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/infrastructure_construction.hpp:222
game::InfrastructureConstructionBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/infrastructure_construction.hpp:277
ValidKey(const std::string_view value)internal helperInventory only; no authored contract note.src/game/institutional_request.cpp:12
AddTicks(const std::uint64_t tick,const std::uint64_t duration,std::uint64_t & result)internal helperInventory only; no authored contract note.src/game/institutional_request.cpp:21
Reject(std::string detail)internal helperInventory only; no authored contract note.src/game/institutional_request.cpp:29
IsMember(const InstitutionRecord & institution,const sim::PersistentId actor)internal helperInventory only; no authored contract note.src/game/institutional_request.cpp:39
game::InstitutionalRequestStateName(const InstitutionalRequestState state)free functionInventory only; no authored contract note.src/game/institutional_request.cpp:46
game::InstitutionalObligationStateName(const InstitutionalObligationState state)free functionInventory only; no authored contract note.src/game/institutional_request.cpp:63
game::ValidateAndCanonicalizeInstitutionDefinitions(std::vector<InstitutionDefinition> & definitions,std::string & error)free functionInventory only; no authored contract note.src/game/institutional_request.cpp:77
game::ValidateAndCanonicalizeInstitutionalRequestTemplates(std::vector<InstitutionalRequestTemplate> & templates,std::string & error)free functionInventory only; no authored contract note.src/game/institutional_request.cpp:110
game::ValidateInstitutionalRequestState(const InstitutionalRequestStateData & state,const std::span<const InstitutionDefinition> definitions,const std::span<const InstitutionalRequestTemplate> templates,std::string & error)free functionInventory only; no authored contract note.src/game/institutional_request.cpp:142
game::InstitutionalRequestRuntime::InstitutionalRequestRuntime(std::vector<InstitutionDefinition> definitions,std::vector<InstitutionalRequestTemplate> templates,InstitutionalRequestStateData state)methodInventory only; no authored contract note.src/game/institutional_request.cpp:256
game::InstitutionalRequestRuntime::FindTemplate(const std::string_view id) constmethodInventory only; no authored contract note.src/game/institutional_request.cpp:277
game::InstitutionalRequestRuntime::Create(InstitutionalRequestCreateRequest request)methodInventory only; no authored contract note.src/game/institutional_request.cpp:283
game::InstitutionalRequestRuntime::Transition(InstitutionalRequestTransitionRequest request)methodInventory only; no authored contract note.src/game/institutional_request.cpp:339
game::InstitutionalRequestRuntime::Resolve(InstitutionalRequestResolveRequest request)methodInventory only; no authored contract note.src/game/institutional_request.cpp:374
game::InstitutionalRequestRuntime::FindRequest(const InstitutionalRequestId request) constmethodInventory only; no authored contract note.src/game/institutional_request.cpp:441
game::InstitutionalRequestRuntime::FindObligation(const InstitutionalObligationId obligation) constmethodInventory only; no authored contract note.src/game/institutional_request.cpp:448
game::InstitutionalRequestRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/institutional_request.cpp:455
game::BuildInstitutionalRequestRuntime(const std::span<const InstitutionDefinition> definitions,const std::span<const InstitutionalRequestTemplate> templates,InstitutionalRequestStateData state)free functionInventory only; no authored contract note.src/game/institutional_request.cpp:489
game::InstitutionId::operator bool() constinline methodInventory only; no authored contract note.src/game/institutional_request.hpp:32
game::FormalMessageId::operator bool() constinline methodInventory only; no authored contract note.src/game/institutional_request.hpp:39
game::InstitutionalRequestId::operator bool() constinline methodInventory only; no authored contract note.src/game/institutional_request.hpp:46
game::InstitutionalObligationId::operator bool() constinline methodInventory only; no authored contract note.src/game/institutional_request.hpp:53
game::InstitutionalRequestOperationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/institutional_request.hpp:242
game::InstitutionalRequestRuntimeBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/institutional_request.hpp:291
SerializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/institutional_request_serialization.cpp:14
DeserializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/institutional_request_serialization.cpp:18
OptionalId(const std::optional<StableId> id)internal helperInventory only; no authored contract note.src/game/institutional_request_serialization.cpp:22
ParseRequestState(const std::string_view name)internal helperInventory only; no authored contract note.src/game/institutional_request_serialization.cpp:26
ParseObligationState(const std::string_view name)internal helperInventory only; no authored contract note.src/game/institutional_request_serialization.cpp:45
ParseOptionalId(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/game/institutional_request_serialization.cpp:61
game::SerializeInstitutionalRequestState(const InstitutionalRequestStateData & state)free functionInventory only; no authored contract note.src/game/institutional_request_serialization.cpp:68
game::DeserializeInstitutionalRequestState(const std::string_view document_text)free functionInventory only; no authored contract note.src/game/institutional_request_serialization.cpp:161
CandidateKeyLess(const IntersectionCandidateKey & left,const IntersectionCandidateKey & right)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:11
ValidLocation(const IntersectionLocation & location)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:18
ValidCandidateKey(const IntersectionCandidateKey & key)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:23
ValidWorldTimeWindow(const sim::WorldTimeWindow window)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:33
ValidHeatTier(const sim::HeatTier tier)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:38
ValidHeatRepresentation(const sim::HeatRepresentation representation)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:43
ValidTravelStatus(const sim::SyntheticRouteTravelStatus status)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:48
ProvenanceMatches(const sim::WorldFactProvenance & provenance,const sim::WorldFactSourceOwner owner,const sim::WorldFactUnit unit,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:54
ValidateWorldFacts(const IntersectionCandidateEvaluationSnapshot & input)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:62
ParticipantLocation(const IntersectionParticipantSnapshot & participant)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:127
ValidateParticipants(const IntersectionCandidateEvaluationSnapshot & input)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:145
ValidateCooldowns(const IntersectionCandidateEvaluationSnapshot & input)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:173
BuildParticipantFact(const IntersectionParticipantSnapshot & participant)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:191
GroupParticipants(const IntersectionCandidateEvaluationSnapshot & input)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:198
BuildCandidateKey(const IntersectionLocation & location,std::vector<const IntersectionParticipantSnapshot * > participants)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:208
FindRouteFact(const sim::RawWorldFactSnapshot & world,const sim::RouteSegmentId segment)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:221
FindSiteFact(const sim::RawWorldFactSnapshot & world,const sim::SiteId site)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:228
FindRegionEnvironment(const IntersectionCandidateEvaluationSnapshot & input,const sim::RegionId region)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:236
FindSiteEcology(const IntersectionCandidateEvaluationSnapshot & input,const sim::SiteId site)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:244
CooldownClear(const IntersectionCandidateEvaluationSnapshot & input,const IntersectionCandidateKey & key)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:250
BuildCandidate(const IntersectionCandidateEvaluationSnapshot & input,const IntersectionLocation & location,std::vector<const IntersectionParticipantSnapshot * > participants)internal helperInventory only; no authored contract note.src/game/intersection_candidates.cpp:258
game::BuildIntersectionParticipantFact(const ActorState & actor,const sim::HeatTier heat_tier)free functionInventory only; no authored contract note.src/game/intersection_candidates.cpp:322
game::IntersectionCandidateIneligibilityName(const IntersectionCandidateIneligibility reason)free functionInventory only; no authored contract note.src/game/intersection_candidates.cpp:373
game::IntersectionCandidateEvaluationStatusName(const IntersectionCandidateEvaluationStatus status)free functionInventory only; no authored contract note.src/game/intersection_candidates.cpp:387
game::PreviewIntersectionCandidateKeys(const IntersectionCandidateEvaluationSnapshot & snapshot)free functionInventory only; no authored contract note.src/game/intersection_candidates.cpp:401
game::EvaluateIntersectionCandidates(IntersectionCandidateEvaluationSnapshot snapshot)free functionInventory only; no authored contract note.src/game/intersection_candidates.cpp:427
game::IntersectionCandidateRuntime::Evaluate(IntersectionCandidateEvaluationSnapshot snapshot)methodInventory only; no authored contract note.src/game/intersection_candidates.cpp:479
game::IntersectionCandidateRuntime::LastEvaluation() constmethodInventory only; no authored contract note.src/game/intersection_candidates.cpp:488
game::IntersectionCandidateGateTrace::Eligible() constinline methodInventory only; no authored contract note.src/game/intersection_candidates.hpp:131
game::IntersectionCandidateEvaluationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/intersection_candidates.hpp:184
game::IntersectionCandidateKeyPreviewResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/intersection_candidates.hpp:198
ValidFamilyId(const std::string_view id)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:12
ValidAuthoredText(const std::string_view value,const std::size_t maximum)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:20
ValidTemplateId(const std::string_view id)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:27
ValidCapability(const IntersectionIncidentCapability capability)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:35
WeightSum(const IntersectionIncidentFamilyWeights & weights)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:46
ValidateAndCanonicalizeFamilies(std::vector<IntersectionIncidentFamilyDefinition> & families)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:55
ValidateSources(const IntersectionCandidateEvaluationResult & candidates,const IntersectionOccurrenceResult & occurrence)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:89
SelectedContext(const IntersectionCandidateEvaluationResult & candidates,const std::optional<IntersectionCandidateKey> & selected_candidate)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:102
CapabilityValue(const ActorCapabilities & capabilities,const IntersectionIncidentCapability capability)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:112
HighestCapability(const IntersectionCandidateContext & context,const IntersectionIncidentCapability capability)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:127
HighestStress(const IntersectionCandidateContext & context)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:136
TimeExposureBasisPoints(const sim::WorldTimeWindow window)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:144
BoundedSignal(const std::int64_t value)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:158
EvaluateGates(const IntersectionIncidentFamilyDefinition & family,const IntersectionCandidateContext * context)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:162
EvaluateConsideration(IntersectionIncidentConsiderationDefinition definition,const std::int32_t raw_value)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:197
EvaluateConsiderations(const IntersectionIncidentFamilyDefinition & family,const IntersectionCandidateContext & context)internal helperInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:211
game::IntersectionIncidentSelectionStatusName(const IntersectionIncidentSelectionStatus status)free functionInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:277
game::IntersectionIncidentIneligibilityName(const IntersectionIncidentIneligibility reason)free functionInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:290
game::IntersectionIncidentConsiderationKindName(const IntersectionIncidentConsiderationKind kind)free functionInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:308
game::ValidateAndCanonicalizeIntersectionIncidentFamilies(std::vector<IntersectionIncidentFamilyDefinition> & families,std::string & error)free functionInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:325
game::EvaluateIntersectionIncidentSelection(const IntersectionCandidateEvaluationResult & candidates,const IntersectionOccurrenceResult & occurrence,std::vector<IntersectionIncidentFamilyDefinition> families)free functionInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:333
game::IntersectionIncidentSelectionRuntime::Evaluate(const IntersectionCandidateEvaluationResult & candidates,const IntersectionOccurrenceResult & occurrence,std::vector<IntersectionIncidentFamilyDefinition> families)methodInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:397
game::IntersectionIncidentSelectionRuntime::LastDecision() constmethodInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:410
game::IntersectionIncidentSelectionRuntime::Invalidate()methodInventory only; no authored contract note.src/game/intersection_incident_selection.cpp:414
game::IntersectionIncidentGateTrace::Eligible() constinline methodInventory only; no authored contract note.src/game/intersection_incident_selection.hpp:121
game::IntersectionIncidentSelectionResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/intersection_incident_selection.hpp:189
IsTerminal(const IncidentLifecycleState state)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:13
CooldownUntil(const IncidentRecord & incident,const std::uint64_t cooldown_ticks)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:18
IsValid(const IncidentLifecycleState state)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:28
IsValid(const IncidentTerminalReason reason)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:32
IsValid(const ObserverKnowledgeState state)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:36
IsValid(const sim::HeatTier tier)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:47
IsValid(const sim::WorldTimeWindow window)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:58
IsValid(const IntersectionPresentationBand band)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:69
IsValidFamilyId(const std::string_view id)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:73
SourceKey(const IntersectionActivationContext & context)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:83
ValidBasisPoints(const std::uint16_t value)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:90
ValidateParticipant(const IntersectionParticipantFact & participant,std::string & error)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:92
ValidateActivation(const IntersectionActivationContext & activation,std::string & error)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:137
ValidTerminalReason(const IncidentLifecycleState state,const IncidentTerminalReason reason)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:211
LegalTransition(const IncidentLifecycleState from,const IncidentLifecycleState to)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:230
RejectProposal(std::string detail)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:243
RejectTransition(IncidentTransitionRequest request,std::string detail,std::optional<IncidentRecord> before=std::nullopt)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:251
game::IntersectionLifecycleRuntime::IntersectionLifecycleRuntime(IntersectionLifecycleState state)methodInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:263
game::IntersectionLifecycleRuntime::RegisterCooldown(const IntersectionRecord & intersection,const IncidentRecord & incident)methodInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:279
game::IntersectionLifecycleRuntime::UpdateCooldown(const IncidentRecord & after)methodInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:289
game::IntersectionLifecycleRuntime::Propose(IntersectionProposalRequest request)methodInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:309
game::IntersectionLifecycleRuntime::Transition(IncidentTransitionRequest request)methodInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:366
game::IntersectionLifecycleRuntime::FindIntersection(const IntersectionId id) constmethodInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:424
game::IntersectionLifecycleRuntime::FindIncident(const IncidentId id) constmethodInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:430
game::IntersectionLifecycleRuntime::CooldownFacts(const std::span<const IntersectionCandidateKey> candidates,const std::uint64_t evaluation_tick) constmethodInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:435
game::IntersectionLifecycleRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:456
game::ValidateIntersectionLifecycleState(const IntersectionLifecycleState & state,std::string & error)free functionInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:478
game::BuildIntersectionLifecycleRuntime(std::optional<IntersectionLifecycleState> state)free functionInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:561
game::IncidentLifecycleStateName(const IncidentLifecycleState state)free functionInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:570
game::IncidentTerminalReasonName(const IncidentTerminalReason reason)free functionInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:590
game::IncidentOperationStatusName(const IncidentOperationStatus status)free functionInventory only; no authored contract note.src/game/intersection_lifecycle.cpp:608
game::IntersectionId::operator bool() constinline methodInventory only; no authored contract note.src/game/intersection_lifecycle.hpp:28
game::IntersectionProposalResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/intersection_lifecycle.hpp:153
game::IncidentTransitionResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/intersection_lifecycle.hpp:167
game::IntersectionLifecycleBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/intersection_lifecycle.hpp:213
SerializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle_serialization.cpp:15
DeserializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle_serialization.cpp:19
OptionalId(const std::optional<Id> id)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle_serialization.cpp:23
ParseOptionalId(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle_serialization.cpp:27
SerializeParticipant(const IntersectionParticipantFact & participant)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle_serialization.cpp:31
ParseParticipant(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle_serialization.cpp:65
SerializeActivation(const IntersectionActivationContext & activation)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle_serialization.cpp:114
ParseActivation(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle_serialization.cpp:166
ParseLifecycle(const std::string_view value)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle_serialization.cpp:233
ParseTerminalReason(const std::string_view value)internal helperInventory only; no authored contract note.src/game/intersection_lifecycle_serialization.cpp:258
game::SerializeIntersectionLifecycleState(const IntersectionLifecycleState & state)free functionInventory only; no authored contract note.src/game/intersection_lifecycle_serialization.cpp:283
game::DeserializeIntersectionLifecycleState(const std::string_view text)free functionInventory only; no authored contract note.src/game/intersection_lifecycle_serialization.cpp:321
ValidRouteSegment(const std::optional<sim::RouteSegmentId> segment)internal helperInventory only; no authored contract note.src/game/intersection_occurrence.cpp:21
ValidCandidateKey(const IntersectionCandidateKey & key)internal helperInventory only; no authored contract note.src/game/intersection_occurrence.cpp:25
ValidWorldTimeWindow(const sim::WorldTimeWindow window)internal helperInventory only; no authored contract note.src/game/intersection_occurrence.cpp:36
ValidBasisPoints(const std::uint16_t value)internal helperInventory only; no authored contract note.src/game/intersection_occurrence.cpp:47
GateTraceConsistent(const IntersectionCandidateGateTrace & gates)internal helperInventory only; no authored contract note.src/game/intersection_occurrence.cpp:49
ParticipantFactValid(const IntersectionParticipantFact & participant)internal helperInventory only; no authored contract note.src/game/intersection_occurrence.cpp:65
ValidateCandidates(const IntersectionCandidateEvaluationResult & result)internal helperInventory only; no authored contract note.src/game/intersection_occurrence.cpp:87
BoundedSignal(const std::int64_t value)internal helperInventory only; no authored contract note.src/game/intersection_occurrence.cpp:138
TimeExposureBasisPoints(const sim::WorldTimeWindow window)internal helperInventory only; no authored contract note.src/game/intersection_occurrence.cpp:143
ParticipantVulnerabilityBasisPoints(const std::vector<IntersectionParticipantFact> & participants)internal helperInventory only; no authored contract note.src/game/intersection_occurrence.cpp:158
EvaluateConsideration(IntersectionOccurrenceConsiderationDefinition definition,const std::int32_t raw_value)internal helperInventory only; no authored contract note.src/game/intersection_occurrence.cpp:173
EvaluateConsiderations(const IntersectionCandidateContext & context)internal helperInventory only; no authored contract note.src/game/intersection_occurrence.cpp:187
game::IntersectionOccurrenceStatusName(const IntersectionOccurrenceStatus status)free functionInventory only; no authored contract note.src/game/intersection_occurrence.cpp:262
game::IntersectionOccurrenceConsiderationKindName(const IntersectionOccurrenceConsiderationKind kind)free functionInventory only; no authored contract note.src/game/intersection_occurrence.cpp:274
game::EvaluateIntersectionOccurrence(const IntersectionCandidateEvaluationResult & candidates)free functionInventory only; no authored contract note.src/game/intersection_occurrence.cpp:294
game::IntersectionOccurrenceRuntime::Evaluate(const IntersectionCandidateEvaluationResult & candidates)methodInventory only; no authored contract note.src/game/intersection_occurrence.cpp:351
game::IntersectionOccurrenceRuntime::LastDecision() constmethodInventory only; no authored contract note.src/game/intersection_occurrence.cpp:360
game::IntersectionOccurrenceRuntime::Invalidate()methodInventory only; no authored contract note.src/game/intersection_occurrence.cpp:364
game::IntersectionOccurrenceResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/intersection_occurrence.hpp:117
ValidKnowledgeState(const ObserverKnowledgeState state)internal helperInventory only; no authored contract note.src/game/intersection_presentation.cpp:20
SourceFamilyDefinitions(const IntersectionIncidentSelectionResult & selection)internal helperInventory only; no authored contract note.src/game/intersection_presentation.cpp:32
ValidateSources(const IntersectionCandidateEvaluationResult & candidates,const IntersectionOccurrenceResult & occurrence,const IntersectionIncidentSelectionResult & incident_selection)internal helperInventory only; no authored contract note.src/game/intersection_presentation.cpp:42
ValidateContext(const IntersectionCandidateEvaluationResult & candidates,const IntersectionOccurrenceResult & occurrence,const IntersectionPresentationContext & context)internal helperInventory only; no authored contract note.src/game/intersection_presentation.cpp:56
SelectedCandidate(const IntersectionCandidateEvaluationResult & candidates,const std::optional<IntersectionCandidateKey> & key)internal helperInventory only; no authored contract note.src/game/intersection_presentation.cpp:78
SelectedFamily(const IntersectionIncidentSelectionResult & selection)internal helperInventory only; no authored contract note.src/game/intersection_presentation.cpp:89
EvaluateGates(const IntersectionIncidentFamilyTrace * family,const IntersectionPresentationContext & context)internal helperInventory only; no authored contract note.src/game/intersection_presentation.cpp:99
HeatRelevanceBasisPoints(const IntersectionCandidateContext & context)internal helperInventory only; no authored contract note.src/game/intersection_presentation.cpp:119
KnowledgeRelevanceBasisPoints(const ObserverKnowledgeState state)internal helperInventory only; no authored contract note.src/game/intersection_presentation.cpp:142
ObserverRelevanceBasisPoints(const IntersectionPresentationContext & context)internal helperInventory only; no authored contract note.src/game/intersection_presentation.cpp:156
EvaluateConsideration(IntersectionPresentationConsiderationDefinition definition,const std::int32_t raw_value)internal helperInventory only; no authored contract note.src/game/intersection_presentation.cpp:166
EvaluateConsiderations(const IntersectionIncidentFamilyTrace & family,const IntersectionCandidateTrace & candidate,const IntersectionPresentationContext & context)internal helperInventory only; no authored contract note.src/game/intersection_presentation.cpp:180
BandForScore(const std::uint16_t score)internal helperInventory only; no authored contract note.src/game/intersection_presentation.cpp:248
game::IntersectionPresentationStatusName(const IntersectionPresentationStatus status)free functionInventory only; no authored contract note.src/game/intersection_presentation.cpp:261
game::IntersectionPresentationBandName(const IntersectionPresentationBand band)free functionInventory only; no authored contract note.src/game/intersection_presentation.cpp:274
game::IntersectionPresentationIneligibilityName(const IntersectionPresentationIneligibility reason)free functionInventory only; no authored contract note.src/game/intersection_presentation.cpp:288
game::IntersectionPresentationConsiderationKindName(const IntersectionPresentationConsiderationKind kind)free functionInventory only; no authored contract note.src/game/intersection_presentation.cpp:303
game::EvaluateIntersectionPresentation(const IntersectionCandidateEvaluationResult & candidates,const IntersectionOccurrenceResult & occurrence,const IntersectionIncidentSelectionResult & incident_selection,IntersectionPresentationContext context)free functionInventory only; no authored contract note.src/game/intersection_presentation.cpp:321
game::IntersectionPresentationRuntime::Evaluate(const IntersectionCandidateEvaluationResult & candidates,const IntersectionOccurrenceResult & occurrence,const IntersectionIncidentSelectionResult & incident_selection,IntersectionPresentationContext context)methodInventory only; no authored contract note.src/game/intersection_presentation.cpp:370
game::IntersectionPresentationRuntime::LastDecision() constmethodInventory only; no authored contract note.src/game/intersection_presentation.cpp:384
game::IntersectionPresentationRuntime::Invalidate()methodInventory only; no authored contract note.src/game/intersection_presentation.cpp:388
game::IntersectionPresentationGateTrace::Eligible() constinline methodInventory only; no authored contract note.src/game/intersection_presentation.hpp:90
game::IntersectionPresentationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/intersection_presentation.hpp:149
AddCounter(std::uint64_t & counter,const std::size_t amount)internal helperInventory only; no authored contract note.src/game/intersection_schedule.cpp:9
Reject(const IntersectionScheduleState & before,std::string detail)internal helperInventory only; no authored contract note.src/game/intersection_schedule.cpp:17
game::IntersectionScheduleRuntime::IntersectionScheduleRuntime(IntersectionScheduleState state)methodInventory only; no authored contract note.src/game/intersection_schedule.cpp:27
game::IntersectionScheduleRuntime::Due(const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/intersection_schedule.cpp:30
game::IntersectionScheduleRuntime::CompleteVisit(IntersectionScheduleVisitReport report)methodInventory only; no authored contract note.src/game/intersection_schedule.cpp:35
game::IntersectionScheduleRuntime::State() constmethodInventory only; no authored contract note.src/game/intersection_schedule.cpp:81
game::IntersectionScheduleRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/intersection_schedule.cpp:85
game::ValidateIntersectionScheduleState(const IntersectionScheduleState & state,std::string & error)free functionInventory only; no authored contract note.src/game/intersection_schedule.cpp:87
game::BuildIntersectionScheduleRuntime(std::optional<IntersectionScheduleState> state)free functionInventory only; no authored contract note.src/game/intersection_schedule.cpp:99
game::IntersectionScheduleOperationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/intersection_schedule.hpp:74
SerializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/intersection_schedule_serialization.cpp:13
DeserializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/intersection_schedule_serialization.cpp:17
game::SerializeIntersectionScheduleState(const IntersectionScheduleState & state)free functionInventory only; no authored contract note.src/game/intersection_schedule_serialization.cpp:24
game::DeserializeIntersectionScheduleState(const std::string_view document_text)free functionInventory only; no authored contract note.src/game/intersection_schedule_serialization.cpp:53
ValidBasisPoints(const std::uint16_t value)internal helperInventory only; no authored contract note.src/game/intersection_traveler_dispute_outcome.cpp:11
ValidParticipant(const IntersectionParticipantFact & participant)internal helperInventory only; no authored contract note.src/game/intersection_traveler_dispute_outcome.cpp:15
MediationScore(const IntersectionParticipantFact & participant)internal helperInventory only; no authored contract note.src/game/intersection_traveler_dispute_outcome.cpp:24
TensionScore(const IntersectionParticipantFact & participant)internal helperInventory only; no authored contract note.src/game/intersection_traveler_dispute_outcome.cpp:31
EvaluateTravelerDisputeOutcomeForState(const IntersectionRecord & intersection,const IncidentRecord & incident,const IncidentLifecycleState required_state)internal helperInventory only; no authored contract note.src/game/intersection_traveler_dispute_outcome.cpp:39
game::EvaluateTravelerDisputeOutcome(const IntersectionRecord & intersection,const IncidentRecord & incident)free functionInventory only; no authored contract note.src/game/intersection_traveler_dispute_outcome.cpp:140
game::EvaluateResolvedTravelerDisputeOutcome(const IntersectionRecord & intersection,const IncidentRecord & incident)free functionInventory only; no authored contract note.src/game/intersection_traveler_dispute_outcome.cpp:147
game::TravelerDisputeOutcomeStatusName(const TravelerDisputeOutcomeStatus status)free functionInventory only; no authored contract note.src/game/intersection_traveler_dispute_outcome.cpp:162
game::TravelerDisputeOutcomeResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/intersection_traveler_dispute_outcome.hpp:47
ClampBasisPoints(const std::int64_t value)internal helperInventory only; no authored contract note.src/game/intersection_wildlife_outcome.cpp:11
EvaluateWildlifePredatorOutcomeForState(const IntersectionRecord & intersection,const IncidentRecord & incident,const IncidentLifecycleState required_state)internal helperInventory only; no authored contract note.src/game/intersection_wildlife_outcome.cpp:16
FindParticipant(const IntersectionActivationContext & activation,const sim::PersistentId actor)internal helperInventory only; no authored contract note.src/game/intersection_wildlife_outcome.cpp:118
game::EvaluateWildlifePredatorOutcome(const IntersectionRecord & intersection,const IncidentRecord & incident)free functionInventory only; no authored contract note.src/game/intersection_wildlife_outcome.cpp:128
game::EvaluateResolvedWildlifePredatorOutcome(const IntersectionRecord & intersection,const IncidentRecord & incident)free functionInventory only; no authored contract note.src/game/intersection_wildlife_outcome.cpp:135
game::EvaluateWildlifePredatorRecovery(const IntersectionRecord & intersection,const IncidentRecord & incident,const std::uint64_t current_tick)free functionInventory only; no authored contract note.src/game/intersection_wildlife_outcome.cpp:150
game::WildlifePredatorOutcomeStatusName(const WildlifePredatorOutcomeStatus status)free functionInventory only; no authored contract note.src/game/intersection_wildlife_outcome.cpp:216
game::WildlifePredatorRecoveryStatusName(const WildlifePredatorRecoveryStatus status)free functionInventory only; no authored contract note.src/game/intersection_wildlife_outcome.cpp:229
game::WildlifePredatorOutcomeResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/intersection_wildlife_outcome.hpp:46
game::WildlifePredatorRecoveryResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/intersection_wildlife_outcome.hpp:81
game::WildlifePredatorRecoveryResult::Ready() constinline methodInventory only; no authored contract note.src/game/intersection_wildlife_outcome.hpp:84
FindSelectedCandidate(const JobPreferenceDecisionResult & decision)internal helperInventory only; no authored contract note.src/game/job_claim_transaction.cpp:10
Failure(const JobClaimTransactionStatus status,const JobId job,std::string detail)internal helperInventory only; no authored contract note.src/game/job_claim_transaction.cpp:29
game::PreviewPreferredJobClaim(const JobPreferenceDecisionResult & decision,const JobClaimRevalidation & revalidation,const std::uint64_t tick,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)free functionInventory only; no authored contract note.src/game/job_claim_transaction.cpp:36
game::TryCommitPreferredJob(const JobPreferenceDecisionResult & decision,const JobClaimRevalidation & revalidation,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)free functionInventory only; no authored contract note.src/game/job_claim_transaction.cpp:115
game::JobClaimTransactionResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/job_claim_transaction.hpp:38
InvalidBatch(JobPreferenceBatchBudget budget,std::string error)internal helperInventory only; no authored contract note.src/game/job_preference_batch.cpp:9
game::EvaluateJobPreferenceBatch(const std::span<const JobPreferenceDecisionSnapshot> snapshots,const JobPreferenceBatchBudget budget)free functionInventory only; no authored contract note.src/game/job_preference_batch.cpp:16
game::JobPreferenceBatchResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/job_preference_batch.hpp:40
Bounded(const std::int32_t value)internal helperInventory only; no authored contract note.src/game/job_preference_personal_facts.cpp:8
LearnedBias(const ActorState & actor,const JobPreferenceVocation vocation)internal helperInventory only; no authored contract note.src/game/job_preference_personal_facts.cpp:12
game::EvaluateJobPreferencePersonalFacts(const ActorState & actor,const HouseholdRecord * household,const JobPreferenceVocation vocation,const std::uint16_t route_danger_basis_points,const bool benefits_household,const JobId candidate_job,const WorkSourceMarker candidate_source)free functionInventory only; no authored contract note.src/game/job_preference_personal_facts.cpp:36
ValidPolicy(const JobPreferenceScoringPolicy & policy)internal helperInventory only; no authored contract note.src/game/job_preference_reasoner.cpp:13
IsValidSubject(const ReservationSubject subject)internal helperInventory only; no authored contract note.src/game/job_preference_reasoner.cpp:28
IsStructurallyValidTransfer(const JobTransferCandidate & transfer)internal helperInventory only; no authored contract note.src/game/job_preference_reasoner.cpp:39
ValidateSnapshot(const JobPreferenceDecisionSnapshot & snapshot)internal helperInventory only; no authored contract note.src/game/job_preference_reasoner.cpp:50
EvaluateEligibility(const JobPreferenceCandidateInput & candidate)internal helperInventory only; no authored contract note.src/game/job_preference_reasoner.cpp:111
EvaluateConsideration(JobPreferenceConsiderationDefinition definition,const std::int32_t raw_value)internal helperInventory only; no authored contract note.src/game/job_preference_reasoner.cpp:147
EvaluateConsiderations(const JobPreferenceCandidateInput & candidate,const JobPreferenceScoringPolicy & policy)internal helperInventory only; no authored contract note.src/game/job_preference_reasoner.cpp:161
game::ValidateJobPreferenceScoringPolicy(const JobPreferenceScoringPolicy & policy)free functionInventory only; no authored contract note.src/game/job_preference_reasoner.cpp:303
game::EvaluateJobPreference(const JobPreferenceDecisionSnapshot & snapshot)free functionInventory only; no authored contract note.src/game/job_preference_reasoner.cpp:307
game::BuildActorJobChoiceRecordRequest(const JobPreferenceDecisionResult & decision,const std::uint64_t expected_actor_revision,const std::uint64_t source_household_revision)free functionInventory only; no authored contract note.src/game/job_preference_reasoner.cpp:374
game::JobPreferenceEligibilityTrace::Eligible() constinline methodInventory only; no authored contract note.src/game/job_preference_reasoner.hpp:172
game::JobPreferenceDecisionResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/job_preference_reasoner.hpp:213
Rejected(std::string detail)internal helperInventory only; no authored contract note.src/game/land_conversion.cpp:14
Applied(const LandConversionId id,std::string detail)internal helperInventory only; no authored contract note.src/game/land_conversion.cpp:18
IsTerminal(const LandConversionStage stage)internal helperInventory only; no authored contract note.src/game/land_conversion.cpp:22
CanonicalBundle(const ResourceBundle & bundle,const bool allow_empty)internal helperInventory only; no authored contract note.src/game/land_conversion.cpp:27
MergeBundles(ResourceBundle first,const ResourceBundle & second)internal helperInventory only; no authored contract note.src/game/land_conversion.cpp:43
WorkPosition(const LandConversionRecord & record,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/game/land_conversion.cpp:58
ActorReady(const ActorState & actor,const LandConversionRecord & record,const WorkTaskId task)internal helperInventory only; no authored contract note.src/game/land_conversion.cpp:63
CompleteActorPlan(ActorRuntime & actors,const sim::PersistentId actor,sim::WorldRuntime & world,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/game/land_conversion.cpp:71
AbandonActorPlan(ActorRuntime & actors,const sim::PersistentId actor,sim::WorldRuntime & world,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/game/land_conversion.cpp:80
game::LandConversionStageName(const LandConversionStage stage)free functionInventory only; no authored contract note.src/game/land_conversion.cpp:91
game::LandConversionFailureCauseName(const LandConversionFailureCause cause)free functionInventory only; no authored contract note.src/game/land_conversion.cpp:115
game::ValidateLandConversionState(const LandConversionState & state,std::string & error)free functionInventory only; no authored contract note.src/game/land_conversion.cpp:131
game::LandConversionRuntime::Designate(LandConversionDesignateRequest request,const sim::WorldRuntime & world,WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/land_conversion.cpp:199
game::LandConversionRuntime::Claim(const LandConversionId id,const sim::PersistentId actor_id,const InventoryContainerId carrier_id,const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/land_conversion.cpp:280
game::LandConversionRuntime::Advance(const LandConversionId id,const std::uint64_t work_units,const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,const sim::LocalMovementTuning movement_tuning)methodInventory only; no authored contract note.src/game/land_conversion.cpp:386
game::LandConversionRuntime::Cancel(const LandConversionId id,const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/land_conversion.cpp:627
game::LandConversionRuntime::ReconcileWorkerLoss(const LandConversionId id,const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/land_conversion.cpp:676
game::LandConversionRuntime::Find(const LandConversionId id) constmethodInventory only; no authored contract note.src/game/land_conversion.cpp:718
game::LandConversionRuntime::ActiveWindow(const LandConversionId after,const std::size_t maximum_visits) constmethodInventory only; no authored contract note.src/game/land_conversion.cpp:724
game::LandConversionRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/land_conversion.cpp:748
game::LandConversionRuntime::LandConversionRuntime(LandConversionState state,std::map<LandConversionId,LandConversionRecord> conversions)methodInventory only; no authored contract note.src/game/land_conversion.cpp:758
game::BuildLandConversionCandidate(LandConversionState state,const sim::WorldRuntime & world,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)free functionInventory only; no authored contract note.src/game/land_conversion.cpp:762
game::ValidateLandConversionSchedulerState(const LandConversionSchedulerState & state,std::string & error)free functionInventory only; no authored contract note.src/game/land_conversion.cpp:803
game::AdvanceLandConversionScheduler(LandConversionSchedulerState & state,const std::uint64_t tick,const std::span<const sim::PersistentId> eligible_actors,const std::span<const sim::PersistentId> suppressed_actors,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,LandConversionRuntime & conversions,const sim::LocalMovementTuning movement_tuning)free functionInventory only; no authored contract note.src/game/land_conversion.cpp:819
game::LandConversionId::operator bool() constinline methodInventory only; no authored contract note.src/game/land_conversion.hpp:28
game::LandConversionOperationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/land_conversion.hpp:115
game::LandConversionSchedulerResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/land_conversion.hpp:155
game::LandConversionBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/land_conversion.hpp:199
ValidProvenance(const MemoryProvenance & provenance)internal helperInventory only; no authored contract note.src/game/memory.cpp:12
FindKind(const MemoryCatalog & catalog,const MemoryKindId & id)internal helperInventory only; no authored contract note.src/game/memory.cpp:23
ValidRecord(const MemoryRecord & memory,const MemoryCatalog & catalog,std::string & error)internal helperInventory only; no authored contract note.src/game/memory.cpp:28
game::BuildPhase5AMemoryCatalog()free functionInventory only; no authored contract note.src/game/memory.cpp:48
game::ValidateMemoryCatalog(const MemoryCatalog & catalog,std::string & error)free functionInventory only; no authored contract note.src/game/memory.cpp:72
game::ValidateMemoryRuntimeState(const MemoryRuntimeState & state,const MemoryCatalog & catalog,std::string & error)free functionInventory only; no authored contract note.src/game/memory.cpp:115
game::MemoryRuntime::MemoryRuntime(MemoryCatalog catalog,MemoryRuntimeState state)methodInventory only; no authored contract note.src/game/memory.cpp:222
game::BuildMemoryRuntime(MemoryCatalog catalog,MemoryRuntimeState state)free functionInventory only; no authored contract note.src/game/memory.cpp:246
game::MemoryRuntime::Catalog() constmethodInventory only; no authored contract note.src/game/memory.cpp:255
game::MemoryRuntime::Find(const MemoryId id) constmethodInventory only; no authored contract note.src/game/memory.cpp:257
game::MemoryRuntime::HasKnowledgeReceipt(const sim::PersistentId holder,const MemoryKindId & kind,const IncidentId source_incident) constmethodInventory only; no authored contract note.src/game/memory.cpp:262
game::MemoryRuntime::FindWitnessReceipt(const sim::PersistentId holder,const MemoryKindId & kind,const IncidentId source_incident) constmethodInventory only; no authored contract note.src/game/memory.cpp:269
game::MemoryRuntime::HasWitnessReceipt(const sim::PersistentId holder,const MemoryKindId & kind,const IncidentId source_incident) constmethodInventory only; no authored contract note.src/game/memory.cpp:277
game::MemoryRuntime::CaptureMetrics() constmethodInventory only; no authored contract note.src/game/memory.cpp:282
game::MemoryRuntime::EffectiveIntensity(const MemoryRecord & memory,const std::uint64_t at_tick) constmethodInventory only; no authored contract note.src/game/memory.cpp:291
game::MemoryRuntime::ActiveForHolder(const sim::PersistentId holder,const std::uint64_t at_tick) constmethodInventory only; no authored contract note.src/game/memory.cpp:305
game::MemoryRuntime::RemoveExpired(const std::uint64_t at_tick)methodInventory only; no authored contract note.src/game/memory.cpp:322
game::MemoryRuntime::Create(MemoryCreateRequest request)methodInventory only; no authored contract note.src/game/memory.cpp:341
game::MemoryRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/memory.cpp:475
game::MemoryId::operator bool() constinline methodInventory only; no authored contract note.src/game/memory.hpp:27
game::MemoryKindId::operator bool() constinline methodInventory only; no authored contract note.src/game/memory.hpp:34
game::MemoryDisclosurePolicyId::operator bool() constinline methodInventory only; no authored contract note.src/game/memory.hpp:41
game::MemoryCreateResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/memory.hpp:164
game::MemoryRuntimeBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/memory.hpp:212
ProvenanceKindName(const MemoryProvenanceKind kind)internal helperInventory only; no authored contract note.src/game/memory_serialization.cpp:12
ParseProvenanceKind(const std::string & value)internal helperInventory only; no authored contract note.src/game/memory_serialization.cpp:16
game::SerializeMemoryRuntimeState(const MemoryRuntimeState & state,const MemoryCatalog & catalog)free functionInventory only; no authored contract note.src/game/memory_serialization.cpp:28
game::DeserializeMemoryRuntimeState(const std::string_view document_text,const MemoryCatalog & catalog)free functionInventory only; no authored contract note.src/game/memory_serialization.cpp:94
Reject(EnvironmentEcologyObservationRequest request,const ObserverKnowledgeSnapshot & retained,std::string detail)internal helperInventory only; no authored contract note.src/game/observer_environment_knowledge.cpp:9
InsertOrReplace(std::vector<Value> & values,const Id id,Projection projection,Value replacement)internal helperInventory only; no authored contract note.src/game/observer_environment_knowledge.cpp:20
game::ApplyEnvironmentEcologyObservation(const ObserverKnowledgeSnapshot & retained,const sim::WorldTopology & topology,const sim::WorldEnvironmentState & environment,const sim::WorldEcologyState & ecology,EnvironmentEcologyObservationRequest request)free functionInventory only; no authored contract note.src/game/observer_environment_knowledge.cpp:32
SortAndRejectDuplicates(std::vector<Value> & values,Projection projection)internal helperInventory only; no authored contract note.src/game/observer_knowledge.cpp:17
FindById(const std::vector<Value> & values,const Id id,Projection projection)internal helperInventory only; no authored contract note.src/game/observer_knowledge.cpp:23
ContainsId(const std::vector<Id> & values,const Id id)internal helperInventory only; no authored contract note.src/game/observer_knowledge.cpp:31
ValidateAcquisition(const KnowledgeAcquisition & acquisition,const ObserverId observer,const KnowledgeEvaluationWindow window,const std::string_view subject)internal helperInventory only; no authored contract note.src/game/observer_knowledge.cpp:35
InitialFreshness(const std::uint64_t source_sample_tick,const std::uint64_t evaluated_at_tick,const std::uint64_t max_age_ticks)internal helperInventory only; no authored contract note.src/game/observer_knowledge.cpp:66
game::BuildObserverKnowledgeSnapshot(const sim::RawWorldFactSnapshot & world_facts,ObserverKnowledgeFilter filter)free functionInventory only; no authored contract note.src/game/observer_knowledge.cpp:75
game::ObserverId::operator bool() constinline methodInventory only; no authored contract note.src/game/observer_knowledge.hpp:20
game::ObserverKnowledgeResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/observer_knowledge.hpp:161
game::RouteKnowledgeReportResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/observer_knowledge.hpp:192
game::DirectObservationCoverageResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/observer_knowledge.hpp:217
game::EnvironmentEcologyObservationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/observer_knowledge.hpp:238
RejectCoverage(DirectObservationCoverageRequest request,const ObserverKnowledgeSnapshot & retained,std::string detail)internal helperInventory only; no authored contract note.src/game/observer_knowledge_coverage.cpp:9
InsertIdentity(std::vector<Id> & values,const Id id)internal helperInventory only; no authored contract note.src/game/observer_knowledge_coverage.cpp:19
game::ApplyDirectObservationCoverage(const ObserverKnowledgeSnapshot & retained,const sim::RawWorldFactSnapshot & world_facts,DirectObservationCoverageRequest request)free functionInventory only; no authored contract note.src/game/observer_knowledge_coverage.cpp:29
ReevaluateFreshness(const std::uint64_t source_sample_tick,const std::uint64_t max_age_ticks,const sim::TopologyRevision source_topology_revision,const sim::TopologyRevision current_topology_revision,const std::uint64_t current_tick)internal helperInventory only; no authored contract note.src/game/observer_knowledge_freshness.cpp:11
IsCanonicalAndUnique(const std::vector<Value> & values,Projection projection)internal helperInventory only; no authored contract note.src/game/observer_knowledge_freshness.cpp:24
HasProvenance(const sim::WorldFactProvenance & provenance,const sim::WorldFactSourceOwner owner,const sim::WorldFactUnit unit,const std::uint64_t source_sample_tick)internal helperInventory only; no authored contract note.src/game/observer_knowledge_freshness.cpp:29
ValidateRetainedAcquisition(const KnowledgeAcquisition & acquisition,const ObserverKnowledgeSnapshot & retained,const std::uint64_t source_sample_tick,const std::string_view subject)internal helperInventory only; no authored contract note.src/game/observer_knowledge_freshness.cpp:36
ValidateRetainedSnapshot(const ObserverKnowledgeSnapshot & retained)internal helperInventory only; no authored contract note.src/game/observer_knowledge_freshness.cpp:69
StateFor(const std::vector<Id> & discovered,const std::vector<KnownFact> & known,const Id id,Projection projection)internal helperInventory only; no authored contract note.src/game/observer_knowledge_freshness.cpp:228
game::ReevaluateObserverKnowledgeSnapshot(const ObserverKnowledgeSnapshot & retained,const sim::TopologyRevision current_topology_revision,const std::uint64_t current_tick)free functionInventory only; no authored contract note.src/game/observer_knowledge_freshness.cpp:243
game::ValidateObserverKnowledgeSnapshot(const ObserverKnowledgeSnapshot & snapshot,std::string & error)free functionInventory only; no authored contract note.src/game/observer_knowledge_freshness.cpp:295
game::SiteKnowledgeState(const ObserverKnowledgeSnapshot & snapshot,const sim::SiteId site)free functionInventory only; no authored contract note.src/game/observer_knowledge_freshness.cpp:362
game::RouteKnowledgeState(const ObserverKnowledgeSnapshot & snapshot,const sim::RouteSegmentId segment)free functionInventory only; no authored contract note.src/game/observer_knowledge_freshness.cpp:368
game::WorldTimeKnowledgeState(const ObserverKnowledgeSnapshot & snapshot)free functionInventory only; no authored contract note.src/game/observer_knowledge_freshness.cpp:374
RejectReport(RouteKnowledgeReportRequest request,const ObserverKnowledgeSnapshot & retained,std::string detail)internal helperInventory only; no authored contract note.src/game/observer_knowledge_report.cpp:10
FreshnessAt(const std::uint64_t source_sample_tick,const ObserverKnowledgeSnapshot & snapshot)internal helperInventory only; no authored contract note.src/game/observer_knowledge_report.cpp:21
RefreshFactFreshness(ObserverKnowledgeSnapshot & snapshot)internal helperInventory only; no authored contract note.src/game/observer_knowledge_report.cpp:31
game::ApplyRouteKnowledgeReport(const ObserverKnowledgeSnapshot & retained,const sim::RawRouteWorldFacts & observed_facts,RouteKnowledgeReportRequest request)free functionInventory only; no authored contract note.src/game/observer_knowledge_report.cpp:46
ProvenanceDocument(const sim::WorldFactProvenance & value)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:238
ParseProvenance(const Json & value)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:244
AcquisitionDocument(const KnowledgeAcquisition & value)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:251
ParseAcquisition(const Json & value,const std::uint32_t schema_version)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:259
SiteFactDocument(const KnownSiteWorldFacts & value)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:275
ParseSiteFact(const Json & value,const std::uint32_t schema_version)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:288
RouteFactDocument(const KnownRouteWorldFacts & value)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:306
ParseRouteFact(const Json & value,const std::uint32_t schema_version)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:317
WorldTimeDocument(const KnownWorldTimeFact & value)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:329
ParseWorldTime(const Json & value,const std::uint32_t schema_version)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:339
RegionEnvironmentFactDocument(const KnownRegionEnvironmentFacts & value)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:351
ParseRegionEnvironmentFact(const Json & value,const std::uint32_t schema_version)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:363
EcologyPopulationFactDocument(const KnownEcologyPopulationFacts & value)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:380
ParseEcologyPopulationFact(const Json & value,const std::uint32_t schema_version)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:397
RenewableSourceFactDocument(const KnownRenewableSourceFacts & value)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:419
ParseRenewableSourceFact(const Json & value,const std::uint32_t schema_version)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:436
SnapshotDocument(const ObserverKnowledgeSnapshot & snapshot)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:457
ParseSnapshot(const Json & document)internal helperInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:498
game::SerializeObserverKnowledgeSnapshot(const ObserverKnowledgeSnapshot & snapshot)free functionInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:551
game::DeserializeObserverKnowledgeSnapshot(const std::string_view document)free functionInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:566
game::HashObserverKnowledgeDocument(const std::string_view canonical_document)free functionInventory only; no authored contract note.src/game/observer_knowledge_serialization.cpp:580
IsValid(const PartyLifecycleState state)internal helperInventory only; no authored contract note.src/game/party.cpp:15
IsValid(const PartyMemberBehavior behavior)internal helperInventory only; no authored contract note.src/game/party.cpp:19
IsValid(const PartyFormationKind formation)internal helperInventory only; no authored contract note.src/game/party.cpp:23
IsValid(const PartyOperationReason reason)internal helperInventory only; no authored contract note.src/game/party.cpp:27
IsValid(const PartyMoveIntentState state)internal helperInventory only; no authored contract note.src/game/party.cpp:31
IsValid(const PartyAssistIntentState state)internal helperInventory only; no authored contract note.src/game/party.cpp:35
ValidatePreparationBundle(const ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/game/party.cpp:39
ValidateExpeditionPreparation(const PartyExpeditionPreparationRecord & preparation)internal helperInventory only; no authored contract note.src/game/party.cpp:49
Reject(const PartyOperationReason reason,std::string detail,const std::optional<PartyRecord> before=std::nullopt)internal helperInventory only; no authored contract note.src/game/party.cpp:73
ValidateRecordShape(const PartyRecord & party,std::string & error)internal helperInventory only; no authored contract note.src/game/party.cpp:83
ValidateMoveIntentShape(const PartyMoveIntentRecord & intent,std::string & error)internal helperInventory only; no authored contract note.src/game/party.cpp:159
ValidateAssistIntentShape(const PartyAssistIntentRecord & intent,std::string & error)internal helperInventory only; no authored contract note.src/game/party.cpp:178
ValidateActiveBindings(const PartyRecord & party,const ActorRuntime & actors,const ResourceEconomyRuntime & resources,std::set<InventoryContainerId> & inventories,std::string & error)internal helperInventory only; no authored contract note.src/game/party.cpp:194
ValidateExecutingMoveBindings(const PartyRegistryState & state,const ActorRuntime & actors,std::string & error)internal helperInventory only; no authored contract note.src/game/party.cpp:217
game::PartyRuntime::PartyRuntime(PartyRegistryState state)methodInventory only; no authored contract note.src/game/party.cpp:263
game::PartyRuntime::RebuildActiveMembership()methodInventory only; no authored contract note.src/game/party.cpp:279
game::PartyRuntime::CreateParty(PartyCreateRequest request,const ActorRuntime & actors,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/party.cpp:303
game::PartyRuntime::SetFormation(const PartyFormationRequest request)methodInventory only; no authored contract note.src/game/party.cpp:350
game::PartyRuntime::PrepareExpedition(PartyExpeditionPreparationRequest request)methodInventory only; no authored contract note.src/game/party.cpp:407
game::PartyRuntime::DisbandParty(const PartyDisbandRequest request)methodInventory only; no authored contract note.src/game/party.cpp:458
game::PartyRuntime::Find(const PartyId party) constmethodInventory only; no authored contract note.src/game/party.cpp:510
game::PartyRuntime::FindMoveIntent(const PartyMoveIntentId intent) constmethodInventory only; no authored contract note.src/game/party.cpp:516
game::PartyRuntime::FindAssistIntent(const PartyAssistIntentId intent) constmethodInventory only; no authored contract note.src/game/party.cpp:522
game::PartyRuntime::FindActivePartyForActor(const sim::PersistentId actor) constmethodInventory only; no authored contract note.src/game/party.cpp:527
game::PartyRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/party.cpp:532
game::ValidatePartyRegistryState(const PartyRegistryState & state,const ActorRuntime & actors,const ResourceEconomyRuntime & resources,std::string & error)free functionInventory only; no authored contract note.src/game/party.cpp:558
game::ValidatePartyRegistryStructure(const PartyRegistryState & state,std::string & error)free functionInventory only; no authored contract note.src/game/party.cpp:580
game::BuildPartyRuntime(const ActorRuntime & actors,const ResourceEconomyRuntime & resources,std::optional<PartyRegistryState> state)free functionInventory only; no authored contract note.src/game/party.cpp:770
game::PartyLifecycleStateName(const PartyLifecycleState state)free functionInventory only; no authored contract note.src/game/party.cpp:783
game::PartyMemberBehaviorName(const PartyMemberBehavior behavior)free functionInventory only; no authored contract note.src/game/party.cpp:793
game::PartyFormationKindName(const PartyFormationKind formation)free functionInventory only; no authored contract note.src/game/party.cpp:805
game::PartyOperationReasonName(const PartyOperationReason reason)free functionInventory only; no authored contract note.src/game/party.cpp:815
game::PartyMoveIntentStateName(const PartyMoveIntentState state)free functionInventory only; no authored contract note.src/game/party.cpp:839
game::PartyAssistIntentStateName(const PartyAssistIntentState state)free functionInventory only; no authored contract note.src/game/party.cpp:851
game::PartyOperationStatusName(const PartyOperationStatus status)free functionInventory only; no authored contract note.src/game/party.cpp:861
game::BuildPartyFormationTargets(const PartyRecord & party,const sim::Transform2D anchor)free functionInventory only; no authored contract note.src/game/party.cpp:873
game::PartyId::operator bool() constinline methodInventory only; no authored contract note.src/game/party.hpp:41
game::PartyMoveIntentId::operator bool() constinline methodInventory only; no authored contract note.src/game/party.hpp:49
game::PartyAssistIntentId::operator bool() constinline methodInventory only; no authored contract note.src/game/party.hpp:57
game::PartyOperationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/party.hpp:278
game::PartyMoveIntentResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/party.hpp:293
game::PartyAssistIntentResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/party.hpp:308
game::PartyRuntimeBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/party.hpp:378
RejectAssist(const PartyAssistIntentRequest request,std::string detail,const std::optional<PartyRecord> party=std::nullopt,const std::optional<PartyAssistIntentRecord> intent=std::nullopt)internal helperInventory only; no authored contract note.src/game/party_assist.cpp:12
game::PartyRuntime::PreviewAssistIntent(const PartyAssistIntentRequest & request) constmethodInventory only; no authored contract note.src/game/party_assist.cpp:28
game::PartyRuntime::StartAssistIntent(PartyAssistIntentRequest request)methodInventory only; no authored contract note.src/game/party_assist.cpp:96
game::PartyRuntime::CompleteAssistIntent(const PartyAssistIntentId intent_id,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/game/party_assist.cpp:132
RejectMove(const PartyMoveIntentRequest request,std::string detail,const std::optional<PartyRecord> party=std::nullopt,const std::optional<PartyMoveIntentRecord> intent=std::nullopt)internal helperInventory only; no authored contract note.src/game/party_move.cpp:17
MatchesMoveIntent(const ActorState & actor,const PartyMoveIntentRecord & intent)internal helperInventory only; no authored contract note.src/game/party_move.cpp:30
game::PartyRuntime::PreviewMoveIntent(const PartyMoveIntentRequest & request,const sim::WorldRuntime & world) constmethodInventory only; no authored contract note.src/game/party_move.cpp:45
game::PartyRuntime::StartMoveIntent(PartyMoveIntentRequest request,const ActorRuntime & actors,const ResourceEconomyRuntime & resources,const sim::WorldRuntime & world)methodInventory only; no authored contract note.src/game/party_move.cpp:121
game::PartyRuntime::CommitPreparedMoveIntent(PartyMoveIntentResult result,const ActorRuntime & actors,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/party_move.cpp:134
game::PartyRuntime::CancelMoveIntent(const PartyId party_id,const std::uint64_t requested_at_tick,const ActorRuntime & actors,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/party_move.cpp:189
game::PartyRuntime::ReconcileMoveIntentForActor(const sim::PersistentId actor_id,const ActorRuntime & actors,const ResourceEconomyRuntime & resources,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/game/party_move.cpp:253
SerializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/party_serialization.cpp:14
DeserializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/party_serialization.cpp:18
ParseLifecycle(const std::string_view value)internal helperInventory only; no authored contract note.src/game/party_serialization.cpp:22
ParseBehavior(const std::string_view value)internal helperInventory only; no authored contract note.src/game/party_serialization.cpp:32
ParseFormation(const std::string_view value)internal helperInventory only; no authored contract note.src/game/party_serialization.cpp:45
ParseReason(const std::string_view value)internal helperInventory only; no authored contract note.src/game/party_serialization.cpp:55
ParseMoveIntentState(const std::string_view value)internal helperInventory only; no authored contract note.src/game/party_serialization.cpp:86
ParseAssistIntentState(const std::string_view value)internal helperInventory only; no authored contract note.src/game/party_serialization.cpp:99
ResourceBundleDocument(const ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/game/party_serialization.cpp:109
ParseResourceBundle(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/party_serialization.cpp:117
ParseWeather(const std::string_view value)internal helperInventory only; no authored contract note.src/game/party_serialization.cpp:128
game::SerializePartyRegistryState(const PartyRegistryState & state)free functionInventory only; no authored contract note.src/game/party_serialization.cpp:146
game::DeserializePartyRegistryState(const std::string_view text)free functionInventory only; no authored contract note.src/game/party_serialization.cpp:252
IsTerminal(const ActorPlanStatus status)internal helperInventory only; no authored contract note.src/game/player_assignment_order.cpp:20
IsBusy(const ActorState & actor)internal helperInventory only; no authored contract note.src/game/player_assignment_order.cpp:25
IsActiveWorkPlan(const ActorState & actor)internal helperInventory only; no authored contract note.src/game/player_assignment_order.cpp:29
IsValid(const AssignmentQueuePolicy policy)internal helperInventory only; no authored contract note.src/game/player_assignment_order.cpp:33
Reject(std::string detail)internal helperInventory only; no authored contract note.src/game/player_assignment_order.cpp:38
RejectActivation(const AssignmentOrderId order,std::string detail)internal helperInventory only; no authored contract note.src/game/player_assignment_order.cpp:42
DeferActivation(const AssignmentOrderId order,std::string detail)internal helperInventory only; no authored contract note.src/game/player_assignment_order.cpp:52
FindBinding(const AssignmentOrderRecord & order,const WorkLifecycleRuntime & work,const SettlementSupplyRuntime & supply,const ConstructionRuntime & construction)internal helperInventory only; no authored contract note.src/game/player_assignment_order.cpp:62
EventualOrigin(const ActorState & actor,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/game/player_assignment_order.cpp:114
CurrentOrigin(const ActorState & actor,const sim::WorldRuntime & world)internal helperInventory only; no authored contract note.src/game/player_assignment_order.cpp:126
RejectCancellation(PlayerAssignmentCancellationCommand command,std::string detail,std::optional<AssignmentOrderRecord> before=std::nullopt)internal helperInventory only; no authored contract note.src/game/player_assignment_order.cpp:132
game::PreviewPlayerAssignmentOrder(const PlayerAssignmentOrderCommand & command,const ActorRuntime & actors,const WorkLifecycleRuntime & work,const sim::WorldRuntime & world)free functionInventory only; no authored contract note.src/game/player_assignment_order.cpp:145
game::IssuePlayerAssignmentOrder(PlayerAssignmentOrderCommand command,ActorRuntime & actors,WorkLifecycleRuntime & work,sim::WorldRuntime & world)free functionInventory only; no authored contract note.src/game/player_assignment_order.cpp:237
game::CancelPlayerAssignmentOrder(PlayerAssignmentCancellationCommand command,WorkLifecycleRuntime & work,const sim::WorldRuntime & world)free functionInventory only; no authored contract note.src/game/player_assignment_order.cpp:287
game::TryActivatePlayerAssignmentOrder(const AssignmentOrderId order_id,const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,SettlementSupplyRuntime & supply,ConstructionRuntime & construction,const sim::LocalMovementTuning movement_tuning)free functionInventory only; no authored contract note.src/game/player_assignment_order.cpp:332
game::PlayerAssignmentOrderStatusName(const PlayerAssignmentOrderStatus status)free functionInventory only; no authored contract note.src/game/player_assignment_order.cpp:509
game::PlayerAssignmentActivationStatusName(const PlayerAssignmentActivationStatus status)free functionInventory only; no authored contract note.src/game/player_assignment_order.cpp:520
game::PlayerAssignmentCancellationStatusName(const PlayerAssignmentCancellationStatus status)free functionInventory only; no authored contract note.src/game/player_assignment_order.cpp:533
game::PlayerAssignmentOrderPreview::Succeeded() constinline methodInventory only; no authored contract note.src/game/player_assignment_order.hpp:36
game::PlayerAssignmentOrderResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/player_assignment_order.hpp:51
game::PlayerAssignmentCancellationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/player_assignment_order.hpp:80
game::PlayerAssignmentActivationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/player_assignment_order.hpp:100
game::PlayerAssignmentActivationResult::Deferred() constinline methodInventory only; no authored contract note.src/game/player_assignment_order.hpp:103
Average(const std::uint64_t total,const std::size_t count)internal helperInventory only; no authored contract note.src/game/player_attack_execution.cpp:12
ClampBasisPoints(const std::int64_t value)internal helperInventory only; no authored contract note.src/game/player_attack_execution.cpp:16
SpacingMillimeters(const sim::Transform2D & left,const sim::Transform2D & right)internal helperInventory only; no authored contract note.src/game/player_attack_execution.cpp:20
Invalid(const PlayerAttackOrderRecord & order,const std::uint64_t current_tick,std::string detail)internal helperInventory only; no authored contract note.src/game/player_attack_execution.cpp:32
Cancel(const PlayerAttackOrderRecord & order,const std::uint64_t current_tick,std::string detail)internal helperInventory only; no authored contract note.src/game/player_attack_execution.cpp:42
game::EvaluatePlayerAttackExecution(const PlayerAttackOrderRecord & order,const ActorRuntime & actors,const sim::WorldRuntime & world,const std::uint64_t current_tick,const ResourceEconomyRuntime * resources)free functionInventory only; no authored contract note.src/game/player_attack_execution.cpp:57
game::PlayerAttackExecutionStatusName(const PlayerAttackExecutionStatus status)free functionInventory only; no authored contract note.src/game/player_attack_execution.cpp:226
game::PlayerAttackExecutionResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/player_attack_execution.hpp:63
game::PlayerAttackExecutionResult::MutatesOrder() constinline methodInventory only; no authored contract note.src/game/player_attack_execution.hpp:66
SameRecipients(const PlayerAttackOrderRecord & order,const std::vector<sim::PersistentId> & recipients)internal helperInventory only; no authored contract note.src/game/player_attack_order.cpp:14
IsOpen(const PlayerAttackOrderState state)internal helperInventory only; no authored contract note.src/game/player_attack_order.cpp:19
IsValid(const PlayerAttackOrderState state)internal helperInventory only; no authored contract note.src/game/player_attack_order.cpp:23
IsValid(const PlayerAttackOrderReason reason)internal helperInventory only; no authored contract note.src/game/player_attack_order.cpp:27
RejectOperation(std::string detail)internal helperInventory only; no authored contract note.src/game/player_attack_order.cpp:31
Reject(PlayerAttackOrderCommand command,std::string detail)internal helperInventory only; no authored contract note.src/game/player_attack_order.cpp:39
Block(PlayerAttackOrderCommand command,std::string detail)internal helperInventory only; no authored contract note.src/game/player_attack_order.cpp:47
game::PlayerAttackOrderRuntime::PlayerAttackOrderRuntime(PlayerAttackOrderRegistryState state)methodInventory only; no authored contract note.src/game/player_attack_order.cpp:57
game::PlayerAttackOrderRuntime::Issue(const PlayerAttackValidationResult & validation)methodInventory only; no authored contract note.src/game/player_attack_order.cpp:69
game::PlayerAttackOrderRuntime::Cancel(std::vector<sim::PersistentId> recipients,const std::uint64_t requested_at_tick,const PlayerAttackOrderReason reason)methodInventory only; no authored contract note.src/game/player_attack_order.cpp:154
game::PlayerAttackOrderRuntime::ApplyExecution(const PlayerAttackExecutionResult & execution)methodInventory only; no authored contract note.src/game/player_attack_order.cpp:207
game::PlayerAttackOrderRuntime::PrepareExecution(const PlayerAttackExecutionResult & execution) constmethodInventory only; no authored contract note.src/game/player_attack_order.cpp:216
game::PlayerAttackOrderRuntime::CommitPreparedExecution(const PreparedPlayerAttackExecution & prepared)methodInventory only; no authored contract note.src/game/player_attack_order.cpp:310
game::PlayerAttackOrderRuntime::ActiveFor(const std::vector<sim::PersistentId> & recipients) constmethodInventory only; no authored contract note.src/game/player_attack_order.cpp:331
game::PlayerAttackOrderRuntime::Find(const PlayerAttackOrderId order) constmethodInventory only; no authored contract note.src/game/player_attack_order.cpp:342
game::PlayerAttackOrderRuntime::OpenOrders(const std::size_t maximum_count) constmethodInventory only; no authored contract note.src/game/player_attack_order.cpp:348
game::PlayerAttackOrderRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/player_attack_order.cpp:360
game::ValidatePlayerAttackOrderRegistryState(const PlayerAttackOrderRegistryState & state,std::string & error)free functionInventory only; no authored contract note.src/game/player_attack_order.cpp:374
game::BuildPlayerAttackOrderRuntime(PlayerAttackOrderRegistryState state)free functionInventory only; no authored contract note.src/game/player_attack_order.cpp:471
game::ValidatePlayerAttackOrder(PlayerAttackOrderCommand command,const ActorRuntime & actors,const ControlAuthorityRuntime & authority,const PartyRuntime & parties,const sim::WorldRuntime & world)free functionInventory only; no authored contract note.src/game/player_attack_order.cpp:480
game::PlayerAttackRecipientKindName(const PlayerAttackRecipientKind kind)free functionInventory only; no authored contract note.src/game/player_attack_order.cpp:573
game::PlayerAttackValidationStatusName(const PlayerAttackValidationStatus status)free functionInventory only; no authored contract note.src/game/player_attack_order.cpp:584
game::PlayerAttackOrderStateName(const PlayerAttackOrderState state)free functionInventory only; no authored contract note.src/game/player_attack_order.cpp:596
game::PlayerAttackOrderReasonName(const PlayerAttackOrderReason reason)free functionInventory only; no authored contract note.src/game/player_attack_order.cpp:612
game::PlayerAttackOrderId::operator bool() constinline methodInventory only; no authored contract note.src/game/player_attack_order.hpp:24
game::PlayerAttackOrderOperationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/player_attack_order.hpp:115
game::PlayerAttackValidationResult::Accepted() constinline methodInventory only; no authored contract note.src/game/player_attack_order.hpp:139
game::PlayerAttackExecutionPreparationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/player_attack_order.hpp:193
game::PlayerAttackOrderRuntimeBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/player_attack_order.hpp:200
ParseState(const std::string_view value)internal helperInventory only; no authored contract note.src/game/player_attack_order_serialization.cpp:15
ParseReason(const std::string_view value)internal helperInventory only; no authored contract note.src/game/player_attack_order_serialization.cpp:34
game::SerializePlayerAttackOrderRegistryState(const PlayerAttackOrderRegistryState & state)free functionInventory only; no authored contract note.src/game/player_attack_order_serialization.cpp:62
game::DeserializePlayerAttackOrderRegistryState(const std::string_view document_text)free functionInventory only; no authored contract note.src/game/player_attack_order_serialization.cpp:117
game::PlayerAttackOrderSerializationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/player_attack_order_serialization.hpp:15
game::PlayerAttackOrderDeserializationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/player_attack_order_serialization.hpp:22
SameRecipients(const PlayerMoveOrderRecord & order,const std::vector<sim::PersistentId> & recipients)internal helperInventory only; no authored contract note.src/game/player_move_order.cpp:13
IsOpen(const PlayerMoveOrderState state)internal helperInventory only; no authored contract note.src/game/player_move_order.cpp:18
IsValid(const PlayerMoveOrderState state)internal helperInventory only; no authored contract note.src/game/player_move_order.cpp:22
IsValid(const PlayerMoveOrderReason reason)internal helperInventory only; no authored contract note.src/game/player_move_order.cpp:26
IsValid(const PlayerMoveIssueMode mode)internal helperInventory only; no authored contract note.src/game/player_move_order.cpp:30
IsValid(const PlayerMoveTargetKind kind)internal helperInventory only; no authored contract note.src/game/player_move_order.cpp:32
HasValidLifecycle(const PlayerMoveOrderRecord & order)internal helperInventory only; no authored contract note.src/game/player_move_order.cpp:36
RejectOperation(std::string detail)internal helperInventory only; no authored contract note.src/game/player_move_order.cpp:59
Reject(PlayerMoveOrderCommand command,std::string detail)internal helperInventory only; no authored contract note.src/game/player_move_order.cpp:67
game::PlayerMoveOrderRuntime::PlayerMoveOrderRuntime(PlayerMoveOrderRegistryState state)methodInventory only; no authored contract note.src/game/player_move_order.cpp:77
game::PlayerMoveOrderRuntime::Issue(const PlayerMoveValidationResult & validation)methodAssigns one stable order ID, applies idempotent command-sequence handling, replaces current work or appends to a four-order queue, and retains explicit lifecycle reasons.src/game/player_move_order.cpp:92
game::PlayerMoveOrderRuntime::Cancel(std::vector<sim::PersistentId> recipients,const std::uint64_t requested_at_tick,const PlayerMoveOrderReason reason)methodCloses every open order for one canonical recipient set with an explicit terminal reason and no gameplay-owner mutation.src/game/player_move_order.cpp:202
game::PlayerMoveOrderRuntime::Complete(const PlayerMoveOrderId order_id,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/game/player_move_order.cpp:260
game::PlayerMoveOrderRuntime::ActivateNext(const std::vector<sim::PersistentId> & recipients,const std::uint64_t requested_at_tick)methodPromotes the oldest queued order for one recipient set after its predecessor completes and records deterministic operation order.src/game/player_move_order.cpp:289
game::PlayerMoveOrderRuntime::PrepareCompletion(const PlayerMoveOrderId order_id,const std::uint64_t requested_at_tick,const bool complete_activated_order) constmethodInventory only; no authored contract note.src/game/player_move_order.cpp:326
game::PlayerMoveOrderRuntime::CommitPreparedCompletion(const PreparedPlayerMoveCompletion & prepared)methodInventory only; no authored contract note.src/game/player_move_order.cpp:390
game::PlayerMoveOrderRuntime::Find(const PlayerMoveOrderId order) constmethodInventory only; no authored contract note.src/game/player_move_order.cpp:431
game::PlayerMoveOrderRuntime::ExecutingFor(const std::vector<sim::PersistentId> & recipients) constmethodInventory only; no authored contract note.src/game/player_move_order.cpp:437
game::PlayerMoveOrderRuntime::QueuedFor(const std::vector<sim::PersistentId> & recipients) constmethodInventory only; no authored contract note.src/game/player_move_order.cpp:448
game::PlayerMoveOrderRuntime::ExecutingOrders(const std::size_t maximum_count) constmethodInventory only; no authored contract note.src/game/player_move_order.cpp:460
game::PlayerMoveOrderRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/player_move_order.cpp:472
game::ValidatePlayerMoveOrderRegistryState(const PlayerMoveOrderRegistryState & state,std::string & error)free functionValidates stable IDs, monotonic sequences, bounded records and queues, canonical recipients, and one executing order per recipient set before restoration.src/game/player_move_order.cpp:484
game::BuildPlayerMoveOrderRuntime(PlayerMoveOrderRegistryState state)free functionInventory only; no authored contract note.src/game/player_move_order.cpp:534
game::ValidatePlayerMoveOrder(PlayerMoveOrderCommand command,const ActorRuntime & actors,const ControlAuthorityRuntime & authority,const PartyRuntime & parties,const sim::WorldRuntime & world)free functionCanonicalizes stable-ID recipients, accepts one Actor or the exact membership of one active Party, and validates direct-control, issue-mode, command-sequence, and target-site eligibility without mutating gameplay state.src/game/player_move_order.cpp:542
game::PlayerMoveRecipientKindName(const PlayerMoveRecipientKind kind)free functionInventory only; no authored contract note.src/game/player_move_order.cpp:658
game::PlayerMoveValidationStatusName(const PlayerMoveValidationStatus status)free functionInventory only; no authored contract note.src/game/player_move_order.cpp:668
game::PlayerMoveIssueModeName(const PlayerMoveIssueMode mode)free functionInventory only; no authored contract note.src/game/player_move_order.cpp:678
game::PlayerMoveTargetKindName(const PlayerMoveTargetKind kind)free functionInventory only; no authored contract note.src/game/player_move_order.cpp:688
game::PlayerMoveOrderStateName(const PlayerMoveOrderState state)free functionInventory only; no authored contract note.src/game/player_move_order.cpp:698
game::PlayerMoveOrderReasonName(const PlayerMoveOrderReason reason)free functionInventory only; no authored contract note.src/game/player_move_order.cpp:712
game::PlayerMoveOrderId::operator bool() constinline methodInventory only; no authored contract note.src/game/player_move_order.hpp:25
game::PlayerMoveOrderOperationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/player_move_order.hpp:124
game::PlayerMoveCompletionPreparationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/player_move_order.hpp:188
game::PlayerMoveOrderRuntimeBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/player_move_order.hpp:195
game::PlayerMoveValidationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/player_move_order.hpp:215
ParseState(const std::string_view value)internal helperInventory only; no authored contract note.src/game/player_move_order_serialization.cpp:15
ParseReason(const std::string_view value)internal helperInventory only; no authored contract note.src/game/player_move_order_serialization.cpp:31
ParseIssueMode(const std::string_view value)internal helperInventory only; no authored contract note.src/game/player_move_order_serialization.cpp:53
ParseTargetKind(const std::string_view value)internal helperInventory only; no authored contract note.src/game/player_move_order_serialization.cpp:63
game::SerializePlayerMoveOrderRegistryState(const PlayerMoveOrderRegistryState & state)free functionWrites the canonical move-order registry, including stable IDs, issue modes, lifecycle reasons, and operation sequence, without taking file authority.src/game/player_move_order_serialization.cpp:76
game::DeserializePlayerMoveOrderRegistryState(const std::string_view document_text)free functionParses and validates one bounded move-order registry document without mutating a live runtime.src/game/player_move_order_serialization.cpp:131
Rejected(const ProductionOrderId order,const std::uint64_t tick,std::string detail)internal helperInventory only; no authored contract note.src/game/production.cpp:13
IsTerminal(const ProductionStage stage)internal helperInventory only; no authored contract note.src/game/production.cpp:22
RequiresReservation(const ProductionStage stage)internal helperInventory only; no authored contract note.src/game/production.cpp:27
ValidKey(const std::string_view key)internal helperInventory only; no authored contract note.src/game/production.cpp:34
ValidBundle(const ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/game/production.cpp:42
ValidOptionalBundle(const ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/game/production.cpp:55
CombineBundles(const ResourceBundle & inputs,const ResourceBundle & maintenance)internal helperInventory only; no authored contract note.src/game/production.cpp:59
SameBundle(const ResourceBundle & left,const ResourceBundle & right)internal helperInventory only; no authored contract note.src/game/production.cpp:80
Applied(const ProductionOrderId order,const ProductionOperationReason reason,const std::uint64_t tick,std::string detail)internal helperInventory only; no authored contract note.src/game/production.cpp:82
Unchanged(const ProductionOrderId order,const ProductionOperationReason reason,const std::uint64_t tick,std::string detail)internal helperInventory only; no authored contract note.src/game/production.cpp:92
game::ProductionStageName(const ProductionStage stage)free functionInventory only; no authored contract note.src/game/production.cpp:104
game::ProductionOperationStatusName(const ProductionOperationStatus status)free functionInventory only; no authored contract note.src/game/production.cpp:126
game::ProductionOperationReasonName(const ProductionOperationReason reason)free functionInventory only; no authored contract note.src/game/production.cpp:138
game::ValidateProductionState(const ProductionState & state,std::string & error)free functionInventory only; no authored contract note.src/game/production.cpp:164
game::ValidateProductionBindings(const ProductionState & state,const ConstructionRuntime & construction,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources,std::string & error)free functionInventory only; no authored contract note.src/game/production.cpp:240
game::ProductionRuntime::ProductionRuntime(ProductionState state,std::map<ProductionRecipeId,ProductionRecipeDefinition> recipes,std::map<ProductionOrderId,ProductionOrderRecord> orders)methodInventory only; no authored contract note.src/game/production.cpp:311
game::BuildProductionCandidate(ProductionState state)free functionInventory only; no authored contract note.src/game/production.cpp:317
game::ProductionRuntime::Record(ProductionOperationResult result)methodInventory only; no authored contract note.src/game/production.cpp:336
game::ProductionRuntime::RegisterRecipe(ProductionRecipeDefinition recipe,const ResourceEconomyRuntime & resources,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/production.cpp:341
game::ProductionRuntime::CreateOrder(const ProductionOrderCreateRequest & request,const BuildingRecord & building,WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/production.cpp:386
game::ProductionRuntime::ObserveClaim(const ProductionOrderId order,const ReservationId reservation_id,const sim::PersistentId actor,const InventoryContainerId carrier,const std::uint64_t tick,WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/production.cpp:466
game::ProductionRuntime::CompletePickup(const ProductionOrderId order,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/production.cpp:514
game::ProductionRuntime::RecordRouteFact(const ProductionOrderId order,const ProductionRouteFact route,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/production.cpp:544
game::ProductionRuntime::CompleteDelivery(const ProductionOrderId order,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/production.cpp:569
game::ProductionRuntime::ApplyWork(const ProductionOrderId order,const std::uint64_t work_ticks,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,const ResourceCapacityLimits & limits)methodInventory only; no authored contract note.src/game/production.cpp:609
game::ProductionRuntime::CancelOrder(const ProductionOrderId order,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/production.cpp:680
game::ProductionRuntime::FindRecipe(const ProductionRecipeId recipe) constmethodInventory only; no authored contract note.src/game/production.cpp:727
game::ProductionRuntime::FindRecipeByKey(const std::string_view key) constmethodInventory only; no authored contract note.src/game/production.cpp:733
game::ProductionRuntime::RequiredInputs(const ProductionRecipeId recipe) constmethodInventory only; no authored contract note.src/game/production.cpp:740
game::ProductionRuntime::FindOrder(const ProductionOrderId order) constmethodInventory only; no authored contract note.src/game/production.cpp:748
game::ProductionRuntime::OrderIds() constmethodInventory only; no authored contract note.src/game/production.cpp:753
game::ProductionRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/production.cpp:763
game::ProductionRuntime::DescribeBottleneck(const ProductionOrderId order,const ResourceEconomyRuntime & resources,const std::uint64_t tick,const ResourceCapacityLimits & limits) constmethodInventory only; no authored contract note.src/game/production.cpp:780
game::ProductionRuntime::DescribeEconomics(const ProductionOrderId order) constmethodInventory only; no authored contract note.src/game/production.cpp:821
game::ProductionRecipeId::operator bool() constinline methodInventory only; no authored contract note.src/game/production.hpp:27
game::ProductionOrderId::operator bool() constinline methodInventory only; no authored contract note.src/game/production.hpp:35
game::ProductionOperationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/production.hpp:137
game::ProductionBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/production.hpp:239
game::NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(ResourceId,value)free functionInventory only; no authored contract note.src/game/production_serialization.cpp:44
game::DeserializeProductionState(const std::string_view document)free functionInventory only; no authored contract note.src/game/production_serialization.cpp:86
game::ProductionSerializationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/production_serialization.hpp:15
game::ProductionDeserializationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/production_serialization.hpp:22
IsRouteFact(const RegionalEconomyFactKind kind)internal helperInventory only; no authored contract note.src/game/regional_economy.cpp:13
ScarcityBasisPoints(const RegionalEconomySummary & summary)internal helperInventory only; no authored contract note.src/game/regional_economy.cpp:19
ValidFact(const RegionalEconomyFact & fact)internal helperInventory only; no authored contract note.src/game/regional_economy.cpp:30
CheckedAdd(const std::uint64_t value,const std::uint64_t added,std::uint64_t & result)internal helperInventory only; no authored contract note.src/game/regional_economy.cpp:37
SummaryQuantity(RegionalEconomySummary & summary,const RegionalEconomyFactKind kind)internal helperInventory only; no authored contract note.src/game/regional_economy.cpp:45
RouteQuantity(RegionalRouteFlowSummary & summary,const RegionalEconomyFactKind kind)internal helperInventory only; no authored contract note.src/game/regional_economy.cpp:62
AddFactContribution(const RegionalEconomyFact & fact,const std::uint64_t updated_at_tick,std::map<RegionalEconomySummaryKey,RegionalEconomySummary> & summaries,std::map<RegionalRouteFlowKey,RegionalRouteFlowSummary> & route_flows,std::string & error)internal helperInventory only; no authored contract note.src/game/regional_economy.cpp:78
ReplaceFactContribution(const RegionalEconomyFact & before,const RegionalEconomyFact & after,const std::uint64_t updated_at_tick,std::map<RegionalEconomySummaryKey,RegionalEconomySummary> & summaries,std::map<RegionalRouteFlowKey,RegionalRouteFlowSummary> & route_flows,std::string & error)internal helperInventory only; no authored contract note.src/game/regional_economy.cpp:150
game::RegionalEconomyFactKindName(const RegionalEconomyFactKind kind)free functionInventory only; no authored contract note.src/game/regional_economy.cpp:210
game::ValidateRegionalEconomyState(const RegionalEconomyState & state,std::string & error)free functionInventory only; no authored contract note.src/game/regional_economy.cpp:226
game::RegionalEconomyRuntime::RegionalEconomyRuntime(RegionalEconomyState state,std::map<RegionalEconomyFactKey,RegionalEconomyFact> facts,std::map<RegionalEconomySummaryKey,RegionalEconomySummary> summaries,std::map<RegionalRouteFlowKey,RegionalRouteFlowSummary> route_flows)methodInventory only; no authored contract note.src/game/regional_economy.cpp:300
game::BuildRegionalEconomyCandidate(RegionalEconomyState state)free functionInventory only; no authored contract note.src/game/regional_economy.cpp:307
game::RegionalEconomyRuntime::ApplyFacts(RegionalEconomyUpdateRequest request)methodInventory only; no authored contract note.src/game/regional_economy.cpp:333
game::RegionalEconomyRuntime::FindFact(const RegionalEconomyFactKey key) constmethodInventory only; no authored contract note.src/game/regional_economy.cpp:409
game::RegionalEconomyRuntime::FindSummary(const RegionalEconomySummaryKey key) constmethodInventory only; no authored contract note.src/game/regional_economy.cpp:415
game::RegionalEconomyRuntime::FindRouteFlow(const RegionalRouteFlowKey key) constmethodInventory only; no authored contract note.src/game/regional_economy.cpp:421
game::RegionalEconomyRuntime::Summaries(const std::size_t limit) constmethodInventory only; no authored contract note.src/game/regional_economy.cpp:427
game::RegionalEconomyRuntime::RouteFlows(const std::size_t limit) constmethodInventory only; no authored contract note.src/game/regional_economy.cpp:441
game::RegionalEconomyRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/regional_economy.cpp:454
game::RegionalEconomyRuntime::IsSummaryStale(const RegionalEconomySummaryKey key,const std::uint64_t now_tick,const std::uint64_t maximum_age_ticks) constmethodInventory only; no authored contract note.src/game/regional_economy.cpp:475
game::RegionalEconomyRuntime::QuoteTrade(const RegionalEconomySummaryKey source,const RegionalEconomySummaryKey destination,const sim::RouteId route,const std::uint64_t quantity,const std::uint64_t base_unit_price_minor,const std::uint16_t route_exposure_basis_points,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/regional_economy.cpp:483
game::RegionalTradePriceQuoteResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/regional_economy.hpp:151
game::RegionalEconomyBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/regional_economy.hpp:194
game::NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(ResourceId,value)free functionInventory only; no authored contract note.src/game/regional_economy_serialization.cpp:43
game::DeserializeRegionalEconomyState(const std::string_view document)free functionInventory only; no authored contract note.src/game/regional_economy_serialization.cpp:76
game::RegionalEconomySerializationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/regional_economy_serialization.hpp:15
game::RegionalEconomyDeserializationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/regional_economy_serialization.hpp:22
ValidValue(const std::int16_t value)internal helperInventory only; no authored contract note.src/game/relationship.cpp:15
ValidReason(const RelationshipUpdateReason reason)internal helperInventory only; no authored contract note.src/game/relationship.cpp:19
ValidEvidence(const std::vector<RelationshipEvidence> & evidence)internal helperInventory only; no authored contract note.src/game/relationship.cpp:23
CanonicalEvidence(std::vector<RelationshipEvidence> evidence)internal helperInventory only; no authored contract note.src/game/relationship.cpp:31
CanonicalPair(sim::PersistentId first,sim::PersistentId second)internal helperInventory only; no authored contract note.src/game/relationship.cpp:37
Reject(std::string detail,std::optional<RelationshipRecord> before=std::nullopt)internal helperInventory only; no authored contract note.src/game/relationship.cpp:42
ApplyDelta(const std::int16_t value,const std::int16_t delta)internal helperInventory only; no authored contract note.src/game/relationship.cpp:50
game::RelationshipUpdateReasonName(const RelationshipUpdateReason reason)free functionInventory only; no authored contract note.src/game/relationship.cpp:60
game::ParseRelationshipUpdateReason(const std::string_view name)free functionInventory only; no authored contract note.src/game/relationship.cpp:76
game::EvaluateRelationshipStage(const RelationshipRecord & relationship)free functionInventory only; no authored contract note.src/game/relationship.cpp:88
game::RelationshipStageName(const RelationshipStage stage)free functionInventory only; no authored contract note.src/game/relationship.cpp:105
game::ValidateRelationshipRuntimeState(const RelationshipRuntimeState & state,const std::span<const sim::PersistentId> actors,std::string & error)free functionInventory only; no authored contract note.src/game/relationship.cpp:119
game::RelationshipRuntime::RelationshipRuntime(const std::span<const sim::PersistentId> actors,RelationshipRuntimeState state)methodInventory only; no authored contract note.src/game/relationship.cpp:169
game::BuildRelationshipRuntime(const std::span<const sim::PersistentId> actors,RelationshipRuntimeState state)free functionInventory only; no authored contract note.src/game/relationship.cpp:182
game::RelationshipRuntime::Create(RelationshipCreateRequest request)methodInventory only; no authored contract note.src/game/relationship.cpp:191
game::RelationshipRuntime::Update(RelationshipUpdateRequest request)methodInventory only; no authored contract note.src/game/relationship.cpp:239
game::RelationshipRuntime::FormPartnership(const RelationshipId relationship,const std::uint64_t expected_revision,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/game/relationship.cpp:288
game::RelationshipRuntime::Find(const RelationshipId relationship) constmethodInventory only; no authored contract note.src/game/relationship.cpp:320
game::RelationshipRuntime::Find(const sim::PersistentId first,const sim::PersistentId second) constmethodInventory only; no authored contract note.src/game/relationship.cpp:325
game::RelationshipRuntime::ForActor(const sim::PersistentId actor) constmethodInventory only; no authored contract note.src/game/relationship.cpp:331
game::RelationshipRuntime::CaptureMetrics() constmethodInventory only; no authored contract note.src/game/relationship.cpp:344
game::RelationshipRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/relationship.cpp:351
game::RelationshipId::operator bool() constinline methodInventory only; no authored contract note.src/game/relationship.hpp:28
game::RelationshipMutationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/relationship.hpp:114
game::RelationshipRuntimeBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/relationship.hpp:152
SerializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/relationship_serialization.cpp:14
DeserializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/relationship_serialization.cpp:18
game::SerializeRelationshipRuntimeState(const RelationshipRuntimeState & state,const std::span<const sim::PersistentId> actors)free functionInventory only; no authored contract note.src/game/relationship_serialization.cpp:25
game::DeserializeRelationshipRuntimeState(const std::string_view text,const std::span<const sim::PersistentId> actors)free functionInventory only; no authored contract note.src/game/relationship_serialization.cpp:67
ValidValue(const std::int16_t value)internal helperInventory only; no authored contract note.src/game/reputation.cpp:11
ValidValues(const ReputationValues & values)internal helperInventory only; no authored contract note.src/game/reputation.cpp:15
ValidEvidence(const std::vector<ReputationEvidence> & evidence)internal helperInventory only; no authored contract note.src/game/reputation.cpp:21
ValidReason(const ReputationUpdateReason reason)internal helperInventory only; no authored contract note.src/game/reputation.cpp:30
Reject(std::string detail,std::optional<ReputationRecord> before=std::nullopt)internal helperInventory only; no authored contract note.src/game/reputation.cpp:34
AddChecked(const std::int16_t value,const std::int32_t delta)internal helperInventory only; no authored contract note.src/game/reputation.cpp:42
CanonicalEvidence(std::vector<ReputationEvidence> evidence)internal helperInventory only; no authored contract note.src/game/reputation.cpp:50
game::ReputationUpdateReasonName(const ReputationUpdateReason reason)free functionInventory only; no authored contract note.src/game/reputation.cpp:58
game::ParseReputationUpdateReason(const std::string_view name)free functionInventory only; no authored contract note.src/game/reputation.cpp:74
game::ValidateReputationRuntimeState(const ReputationRuntimeState & state,const std::span<const sim::PersistentId> actors,const std::span<const HouseholdId> households,std::string & error)free functionInventory only; no authored contract note.src/game/reputation.cpp:86
game::ReputationRuntime::ReputationRuntime(const std::span<const sim::PersistentId> actors,const std::span<const HouseholdId> households,ReputationRuntimeState state)methodInventory only; no authored contract note.src/game/reputation.cpp:134
game::BuildReputationRuntime(const std::span<const sim::PersistentId> actors,const std::span<const HouseholdId> households,ReputationRuntimeState state)free functionInventory only; no authored contract note.src/game/reputation.cpp:147
game::ReputationRuntime::Create(ReputationCreateRequest request)methodInventory only; no authored contract note.src/game/reputation.cpp:157
game::ReputationRuntime::Update(ReputationUpdateRequest request)methodInventory only; no authored contract note.src/game/reputation.cpp:196
game::ReputationRuntime::Find(const ReputationId reputation) constmethodInventory only; no authored contract note.src/game/reputation.cpp:247
game::ReputationRuntime::Find(const HouseholdId audience_household,const sim::PersistentId subject) constmethodInventory only; no authored contract note.src/game/reputation.cpp:252
game::ReputationRuntime::ForHousehold(const HouseholdId household) constmethodInventory only; no authored contract note.src/game/reputation.cpp:258
game::ReputationRuntime::CaptureMetrics() constmethodInventory only; no authored contract note.src/game/reputation.cpp:271
game::ReputationRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/reputation.cpp:278
game::ReputationId::operator bool() constinline methodInventory only; no authored contract note.src/game/reputation.hpp:29
game::ReputationMutationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/reputation.hpp:112
game::ReputationRuntimeBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/reputation.hpp:149
SerializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/reputation_serialization.cpp:14
DeserializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/reputation_serialization.cpp:18
game::SerializeReputationRuntimeState(const ReputationRuntimeState & state,const std::span<const sim::PersistentId> actors,const std::span<const HouseholdId> households)free functionInventory only; no authored contract note.src/game/reputation_serialization.cpp:25
game::DeserializeReputationRuntimeState(const std::string_view text,const std::span<const sim::PersistentId> actors,const std::span<const HouseholdId> households)free functionInventory only; no authored contract note.src/game/reputation_serialization.cpp:64
CheckedAdd(const std::uint64_t left,const std::uint64_t right,std::uint64_t & result)internal helperInventory only; no authored contract note.src/game/resource_economy.cpp:12
IsValidKey(const std::string_view key)internal helperInventory only; no authored contract note.src/game/resource_economy.cpp:20
IsValidOwner(const InventoryOwnerMarker owner)internal helperInventory only; no authored contract note.src/game/resource_economy.cpp:30
IsTerminal(const ResourceAllocationState state)internal helperInventory only; no authored contract note.src/game/resource_economy.cpp:50
FindQuantity(const ResourceBundle & bundle,const ResourceId resource)internal helperInventory only; no authored contract note.src/game/resource_economy.cpp:56
CanonicalizeBundle(ResourceBundle & bundle,const std::map<ResourceId,ResourceDefinition> & resources,std::string & error)internal helperInventory only; no authored contract note.src/game/resource_economy.cpp:62
TotalUnits(const ResourceBundle & bundle,std::uint64_t & total)internal helperInventory only; no authored contract note.src/game/resource_economy.cpp:89
CanAdd(const InventoryContainerRecord & container,const ResourceBundle & bundle,std::string & error)internal helperInventory only; no authored contract note.src/game/resource_economy.cpp:99
CanSubtract(const InventoryContainerRecord & container,const ResourceBundle & bundle,std::string & error)internal helperInventory only; no authored contract note.src/game/resource_economy.cpp:119
ApplyBundle(InventoryContainerRecord & container,const ResourceBundle & bundle,const bool add)internal helperInventory only; no authored contract note.src/game/resource_economy.cpp:130
AddBundle(ResourceBundle & target,const ResourceBundle & added)internal helperInventory only; no authored contract note.src/game/resource_economy.cpp:154
Rejected(const ResourceOperationReason reason,const std::uint64_t record_id,const std::uint64_t tick,std::string detail)internal helperInventory only; no authored contract note.src/game/resource_economy.cpp:169
MatchesActiveWork(const JobRecord & job,const ReservationRecord & reservation,const ResourceAllocationRecord & allocation,const InventoryContainerRecord & carrier)internal helperInventory only; no authored contract note.src/game/resource_economy.cpp:179
TransferRecord(const ResourceCustodyTransferRequest & request)internal helperInventory only; no authored contract note.src/game/resource_economy.cpp:191
game::ResourceEconomyRuntime::RecordOperation(ResourceOperationResult result)methodInventory only; no authored contract note.src/game/resource_economy.cpp:212
game::ResourceEconomyRuntime::RegisterResource(std::string key,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/resource_economy.cpp:218
game::ResourceEconomyRuntime::CreateContainer(const InventoryOwnerMarker owner,const std::uint64_t capacity,ResourceBundle initial_quantities,const std::uint64_t tick,const ResourceCapacityLimits & limits)methodInventory only; no authored contract note.src/game/resource_economy.cpp:251
game::ResourceEconomyRuntime::ValidateCustodyTransfer(ResourceCustodyTransferRequest & request) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:344
game::ResourceEconomyRuntime::PreviewCustodyTransfer(ResourceCustodyTransferRequest request) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:500
game::ResourceEconomyRuntime::CommitCustodyTransfer(ResourceCustodyTransferRequest request)methodInventory only; no authored contract note.src/game/resource_economy.cpp:508
game::ResourceEconomyRuntime::ValidateReserveTransfer(const JobRecord & work_job,const ReservationRecord & work,const InventoryContainerId source,const InventoryContainerId carrier,const InventoryContainerId destination,ResourceBundle & bundle,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:553
game::ResourceEconomyRuntime::PreviewReserveTransfer(const JobRecord & work_job,const ReservationRecord & work,const InventoryContainerId source,const InventoryContainerId carrier,const InventoryContainerId destination,ResourceBundle bundle,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:625
game::ResourceEconomyRuntime::ReserveTransfer(const JobRecord & work_job,const ReservationRecord & work,const InventoryContainerId source,const InventoryContainerId carrier,const InventoryContainerId destination,ResourceBundle bundle,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/resource_economy.cpp:632
game::ResourceEconomyRuntime::ValidateCollection(const JobRecord & work_job,const ReservationRecord & work,const InventoryOwnerKind source_kind,const ResourceOperationReason reason,const std::string_view operation,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:664
game::ResourceEconomyRuntime::PreviewPickup(const JobRecord & work_job,const ReservationRecord & work,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:712
game::ResourceEconomyRuntime::CommitPickup(const JobRecord & work_job,const ReservationRecord & work,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/resource_economy.cpp:719
game::ResourceEconomyRuntime::PreviewGather(const JobRecord & work_job,const ReservationRecord & work,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:726
game::ResourceEconomyRuntime::CommitGather(const JobRecord & work_job,const ReservationRecord & work,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/resource_economy.cpp:733
game::ResourceEconomyRuntime::PreviewLandOutputPickup(const JobRecord & work_job,const ReservationRecord & work,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:740
game::ResourceEconomyRuntime::CommitLandOutputPickup(const JobRecord & work_job,const ReservationRecord & work,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/resource_economy.cpp:747
game::ResourceEconomyRuntime::PreviewLandscapeOutputPickup(const JobRecord & work_job,const ReservationRecord & work,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:753
game::ResourceEconomyRuntime::CommitLandscapeOutputPickup(const JobRecord & work_job,const ReservationRecord & work,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/resource_economy.cpp:760
game::ResourceEconomyRuntime::PreviewProduceLandscapeOutput(const InventoryContainerId output,ResourceBundle produced,const std::uint64_t tick,const ResourceCapacityLimits & limits) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:767
game::ResourceEconomyRuntime::ProduceLandscapeOutput(const InventoryContainerId output,ResourceBundle produced,const std::uint64_t tick,const ResourceCapacityLimits & limits)methodInventory only; no authored contract note.src/game/resource_economy.cpp:806
game::ResourceEconomyRuntime::CommitCollection(const JobRecord & work_job,const ReservationRecord & work,const InventoryOwnerKind source_kind,const ResourceOperationReason reason,const std::string_view operation,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/resource_economy.cpp:826
game::ResourceEconomyRuntime::ValidateDelivery(const JobRecord & work_job,const ReservationRecord & work,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:860
game::ResourceEconomyRuntime::PreviewDelivery(const JobRecord & work_job,const ReservationRecord & work,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:905
game::ResourceEconomyRuntime::CommitDelivery(const JobRecord & work_job,const ReservationRecord & work,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/resource_economy.cpp:911
game::ResourceEconomyRuntime::ValidateConsume(const InventoryContainerId container,ResourceBundle & bundle,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:944
game::ResourceEconomyRuntime::PreviewConsume(const InventoryContainerId container,ResourceBundle bundle,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:980
game::ResourceEconomyRuntime::Consume(const InventoryContainerId container,ResourceBundle bundle,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/resource_economy.cpp:986
game::ResourceEconomyRuntime::ValidateTransform(const InventoryContainerId input,const InventoryContainerId output,ResourceBundle & consumed,ResourceBundle & produced,const std::uint64_t tick,const ResourceCapacityLimits & limits) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1002
game::ResourceEconomyRuntime::PreviewTransform(const InventoryContainerId input,const InventoryContainerId output,ResourceBundle consumed,ResourceBundle produced,const std::uint64_t tick,const ResourceCapacityLimits & limits) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1099
game::ResourceEconomyRuntime::Transform(const InventoryContainerId input,const InventoryContainerId output,ResourceBundle consumed,ResourceBundle produced,const std::uint64_t tick,const ResourceCapacityLimits & limits)methodInventory only; no authored contract note.src/game/resource_economy.cpp:1105
game::ResourceEconomyRuntime::ValidateReconcileReservation(const ReservationRecord & work,const ResourceOperationReason reason,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1140
game::ResourceEconomyRuntime::PreviewReconcileReservation(const ReservationRecord & work,const ResourceOperationReason reason,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1201
game::ResourceEconomyRuntime::ReconcileReservation(const ReservationRecord & work,const ResourceOperationReason reason,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/resource_economy.cpp:1207
game::ResourceEconomyRuntime::FindResource(const ResourceId resource) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1233
game::ResourceEconomyRuntime::FindResourceByKey(const std::string_view key) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1239
game::ResourceEconomyRuntime::FindContainer(const InventoryContainerId container) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1245
game::ResourceEconomyRuntime::FindContainerByOwner(const InventoryOwnerMarker owner) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1251
game::ResourceEconomyRuntime::FindAllocation(const ReservationId reservation) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1257
game::ResourceEconomyRuntime::FindCustodyTransfer(const ResourceCustodyTransferId transfer) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1263
game::ResourceEconomyRuntime::FindCustodyTransfer(const ResourceCustodyTransferPurpose purpose,const WorkSourceMarker cause) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1269
game::ResourceEconomyRuntime::Quantity(const InventoryContainerId container,const ResourceId resource) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1276
game::ResourceEconomyRuntime::AvailableQuantity(const InventoryContainerId container,const ResourceId resource) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1282
game::ResourceEconomyRuntime::ReservedQuantity(const InventoryContainerId container,const ResourceId resource) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1289
game::ResourceEconomyRuntime::InTransitQuantity(const InventoryContainerId carrier,const ResourceId resource) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1295
game::ResourceEconomyRuntime::TotalQuantity(const ResourceId resource) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1301
game::ResourceEconomyRuntime::ConsumedQuantity(const ResourceId resource) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1313
game::ResourceEconomyRuntime::ProducedQuantity(const ResourceId resource) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1317
game::ResourceEconomyRuntime::AccountedQuantity(const ResourceId resource) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1321
game::ResourceEconomyRuntime::CaptureResourceCounts(const ResourceCountRequest request) constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1335
game::ResourceEconomyRuntime::ResourceCountCaptureVisitEstimate() constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1407
game::ResourceEconomyRuntime::CaptureCapacityUsage() constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1411
game::ResourceEconomyRuntime::LastOperation() constmethodInventory only; no authored contract note.src/game/resource_economy.cpp:1432
game::ResourceCapacityUsageResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/resource_economy.hpp:15
game::ResourceEconomyBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/resource_economy.hpp:214
InsertRecords(const std::vector<Record> & records,std::map<Id,Record> & output,const std::size_t maximum,const std::string_view label,std::string & error)internal helperInventory only; no authored contract note.src/game/resource_economy_state.cpp:12
ValidateNextId(const std::map<Id,Record> & records,const std::uint64_t next_id,const std::string_view label,std::string & error)internal helperInventory only; no authored contract note.src/game/resource_economy_state.cpp:28
IsValidKey(const std::string_view key)internal helperInventory only; no authored contract note.src/game/resource_economy_state.cpp:37
IsValid(const InventoryOwnerKind kind)internal helperInventory only; no authored contract note.src/game/resource_economy_state.cpp:50
IsValid(const ResourceCustodyTransferPurpose purpose)internal helperInventory only; no authored contract note.src/game/resource_economy_state.cpp:66
IsValid(const ResourceAllocationState state)internal helperInventory only; no authored contract note.src/game/resource_economy_state.cpp:81
IsValid(const ResourceOperationReason reason)internal helperInventory only; no authored contract note.src/game/resource_economy_state.cpp:93
IsValid(const ResourceOperationStatus status)internal helperInventory only; no authored contract note.src/game/resource_economy_state.cpp:111
HasValidHistory(const ResourceAllocationRecord & allocation)internal helperInventory only; no authored contract note.src/game/resource_economy_state.cpp:117
CheckedAdd(const std::uint64_t value,const std::uint64_t added,std::uint64_t & result)internal helperInventory only; no authored contract note.src/game/resource_economy_state.cpp:134
ValidateBundle(const ResourceBundle & bundle,const std::map<ResourceId,ResourceDefinition> & resources,const bool allow_empty,std::uint64_t & total,std::string & error)internal helperInventory only; no authored contract note.src/game/resource_economy_state.cpp:142
Quantity(const InventoryContainerRecord & container,const ResourceId resource)internal helperInventory only; no authored contract note.src/game/resource_economy_state.cpp:164
game::ValidateResourceCapacityLimits(const ResourceCapacityLimits & limits,std::string & error)free functionInventory only; no authored contract note.src/game/resource_economy_state.cpp:175
game::CaptureResourceCapacityUsage(const ResourceEconomyState & state)free functionInventory only; no authored contract note.src/game/resource_economy_state.cpp:196
game::ValidateResourceEconomyState(const ResourceEconomyState & state,const ResourceCapacityLimits & limits,std::string & error)free functionInventory only; no authored contract note.src/game/resource_economy_state.cpp:215
game::ValidateResourceEconomyState(const ResourceEconomyState & state,std::string & error)free functionInventory only; no authored contract note.src/game/resource_economy_state.cpp:499
game::ResourceEconomyRuntime::ResourceEconomyRuntime(ResourceEconomyState state,std::map<ResourceId,ResourceDefinition> resources,std::map<InventoryContainerId,InventoryContainerRecord> containers,std::map<ReservationId,ResourceAllocationRecord> allocations,std::map<ResourceCustodyTransferId,ResourceCustodyTransferRecord> custody_transfers)methodInventory only; no authored contract note.src/game/resource_economy_state.cpp:503
game::ResourceEconomyRuntime::RebuildDerivedIndexes()methodInventory only; no authored contract note.src/game/resource_economy_state.cpp:518
game::BuildResourceEconomyCandidate(ResourceEconomyState state,const ResourceCapacityLimits & limits)free functionInventory only; no authored contract note.src/game/resource_economy_state.cpp:547
game::ResourceEconomyRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/resource_economy_state.cpp:579
game::InventoryOwnerKindName(const InventoryOwnerKind kind)free functionInventory only; no authored contract note.src/game/resource_economy_types.cpp:5
game::ResourceCustodyTransferPurposeName(const ResourceCustodyTransferPurpose purpose)free functionInventory only; no authored contract note.src/game/resource_economy_types.cpp:44
game::ResourceAllocationStateName(const ResourceAllocationState state)free functionInventory only; no authored contract note.src/game/resource_economy_types.cpp:66
game::ResourceOperationReasonName(const ResourceOperationReason reason)free functionInventory only; no authored contract note.src/game/resource_economy_types.cpp:82
game::ResourceOperationStatusName(const ResourceOperationStatus status)free functionInventory only; no authored contract note.src/game/resource_economy_types.cpp:110
game::ResourceId::operator bool() constinline methodInventory only; no authored contract note.src/game/resource_economy_types.hpp:45
game::InventoryContainerId::operator bool() constinline methodInventory only; no authored contract note.src/game/resource_economy_types.hpp:53
game::ResourceCustodyTransferId::operator bool() constinline methodInventory only; no authored contract note.src/game/resource_economy_types.hpp:61
game::ResourceCreateResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/resource_economy_types.hpp:240
Failure(std::string error)internal helperInventory only; no authored contract note.src/game/runtime_actor_roster.cpp:15
game::LoadRuntimeActorRoster(const RuntimeScenario & scenario,assets::AssetService & asset_service)free functionInventory only; no authored contract note.src/game/runtime_actor_roster.cpp:21
game::RuntimeActorRosterLoadResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/runtime_actor_roster.hpp:28
Failure(std::string error)internal helperInventory only; no authored contract note.src/game/runtime_economy.cpp:23
ParseOwnerKind(const std::string_view kind)internal helperInventory only; no authored contract note.src/game/runtime_economy.cpp:27
ParseSupplyPurpose(const std::string_view purpose)internal helperInventory only; no authored contract note.src/game/runtime_economy.cpp:73
CheckedAdd(const std::uint64_t left,const std::uint64_t right,std::uint64_t & result)internal helperInventory only; no authored contract note.src/game/runtime_economy.cpp:86
ParseOrientation(const std::string_view value)internal helperInventory only; no authored contract note.src/game/runtime_economy.cpp:94
HasStablePrefix(const std::string_view value,const std::string_view prefix)internal helperInventory only; no authored contract note.src/game/runtime_economy.cpp:110
game::ValidateRuntimeEconomyDefinition(const RuntimeEconomyDefinition & economy,std::string & error)free functionInventory only; no authored contract note.src/game/runtime_economy.cpp:116
game::ValidateRuntimeEconomyContentReferences(const RuntimeEconomyDefinition & economy,const assets::RuntimeContentCatalog & content_catalog,std::string & error)free functionInventory only; no authored contract note.src/game/runtime_economy.cpp:501
game::LoadRuntimeEconomyDefinition(const RuntimeScenario & scenario,assets::AssetService & asset_service)free functionInventory only; no authored contract note.src/game/runtime_economy.cpp:614
game::RuntimeEconomyLoadResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/runtime_economy.hpp:176
Failure(std::string error)internal helperInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:15
ParseCapability(const std::string_view value)internal helperInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:19
ParseFamily(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:35
ParseTrigger(const std::string_view value)internal helperInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:81
ParseLocation(const std::string_view value)internal helperInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:88
ParseVisibility(const std::string_view value)internal helperInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:102
ParseResolutionMode(const std::string_view value)internal helperInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:115
ParseEventTemplate(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:125
ParseQuestStepKind(const std::string_view value)internal helperInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:152
ParseQuestTemplate(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:169
ParseInstitution(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:189
ParseInstitutionalRequestTemplate(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:207
game::RuntimeIncidentCatalog::FindFamily(const std::string_view id) constmethodInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:235
game::RuntimeIncidentCatalog::FindEventTemplate(const std::string_view id) constmethodInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:242
game::RuntimeIncidentCatalog::FindEventTemplateForFamily(const std::string_view family_id) constmethodInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:248
game::RuntimeIncidentCatalog::FindQuestTemplate(const std::string_view id) constmethodInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:255
game::RuntimeIncidentCatalog::FindInstitutionalRequestTemplate(const std::string_view id) constmethodInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:262
game::ValidateRuntimeIncidentCatalog(RuntimeIncidentCatalog & catalog,std::string & error)free functionInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:268
game::LoadRuntimeIncidentCatalog(const std::string_view asset_id,assets::AssetService & asset_service)free functionInventory only; no authored contract note.src/game/runtime_incident_catalog.cpp:312
game::RuntimeIncidentCatalogLoadResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/runtime_incident_catalog.hpp:53
IsValidScenarioId(const std::string & scenario_id)internal helperInventory only; no authored contract note.src/game/runtime_scenario.cpp:26
IsValidSceneAssetId(const std::string & asset_id)internal helperAccepts only stable scene.<lowercase-id> references before scenario composition can request a scene asset.src/game/runtime_scenario.cpp:34
IsValidWorldAssetId(const std::string & asset_id)internal helperInventory only; no authored contract note.src/game/runtime_scenario.cpp:45
IsValidActorRosterAssetId(const std::string & asset_id)internal helperInventory only; no authored contract note.src/game/runtime_scenario.cpp:56
IsValidEconomyAssetId(const std::string & asset_id)internal helperInventory only; no authored contract note.src/game/runtime_scenario.cpp:67
IsValidSettlementDefinitionAssetId(const std::string & asset_id)internal helperInventory only; no authored contract note.src/game/runtime_scenario.cpp:78
IsValidIncidentCatalogAssetId(const std::string & asset_id)internal helperInventory only; no authored contract note.src/game/runtime_scenario.cpp:89
Failure(std::string error)internal helperInventory only; no authored contract note.src/game/runtime_scenario.cpp:100
game::ValidateRuntimeScenario(const RuntimeScenario & scenario,std::string & error)free functionApplies the same bounded name, optional scene reference, fixed-step, and tick-limit rules to loaded and restored typed scenarios.src/game/runtime_scenario.cpp:106
game::LoadRuntimeScenario(const std::string & scenario_id,assets::AssetService & asset_service)free functionLoads scenario.<id> through Assets, validates schema and numeric limits, and returns a typed scenario or contextual error.src/game/runtime_scenario.cpp:182
game::BuildRuntimeResult(const RuntimeScenario & scenario,const std::uint64_t completed_ticks,const bool quit_requested)free functionFormats the deterministic scenario ID, seed, completed tick count, and complete/quit status transcript.src/game/runtime_scenario.cpp:281
Failure(std::string error)internal helperBuilds a failed scene-load result without partially publishing scene data.src/game/runtime_scene.cpp:28
AssetFailure(const assets::AssetBlob & asset,std::string error)internal helperAdds the stable scene asset ID and resolved path to a schema or value failure.src/game/runtime_scene.cpp:32
IsValidCoordinate(const double value)internal helperAccepts only finite world coordinates inside the current authored-scene safety bound.src/game/runtime_scene.cpp:37
IsValidRadius(const double value)internal helperAccepts only finite positive selectable or render footprints inside the current safety bound.src/game/runtime_scene.cpp:41
IsStableSpriteKey(const std::string_view value)internal helperInventory only; no authored contract note.src/game/runtime_scene.cpp:45
ParseShape(const std::string_view name)internal helperMaps the three supported authored shape names to backend-neutral simulation render-proxy values.src/game/runtime_scene.cpp:55
ParseConstructionStage(const std::string_view name)internal helperInventory only; no authored contract note.src/game/runtime_scene.cpp:68
ParseTintChannel(const nlohmann::json & tint,const char * field)internal helperReads one authored RGBA channel and rejects values outside the 8-bit range.src/game/runtime_scene.cpp:105
game::RuntimeConstructionSpriteBinding::FindFrame(const ConstructionStage stage) constmethodInventory only; no authored contract note.src/game/runtime_scene.cpp:116
game::LoadRuntimeScene(const RuntimeScenario & scenario,assets::AssetService & asset_service)free functionLoads the scenario's optional scene through AssetService, validates schema version 1 and every current entity field, rejects duplicate persistent IDs, and returns definitions sorted by ID.src/game/runtime_scene.cpp:121
game::BuildRuntimeSceneWorld(const RuntimeScene & scene)free functionRestores validated authored entities through Simulation's stable-ID creation path and reports any internal construction failure with scene and entity context.src/game/runtime_scene_world.cpp:7
Failure(std::string error)internal helperInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:27
ParseOwnerKind(const std::string_view kind)internal helperInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:31
ParseNeedDomain(const std::string_view name)internal helperInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:44
ParseSpatialServiceKind(const std::string_view name)internal helperInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:56
ParseHousingMethodKind(const std::string_view name)internal helperInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:68
ParseProjectPlacementMode(const std::string_view name)internal helperInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:81
ParseSupplyPurpose(const std::string_view name)internal helperInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:91
ParseGoalSourceKind(const std::string_view name)internal helperInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:101
ParseSponsorKind(const std::string_view name)internal helperInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:112
ParseRequirementKind(const std::string_view name)internal helperInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:128
HasPrefix(const std::string_view value,const std::string_view prefix)internal helperInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:141
AxisDistance(const std::int64_t left,const std::int64_t right)internal helperInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:145
AddCellOffset(const std::int64_t origin,const std::int32_t offset)internal helperInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:157
ParseRoutineActivity(const std::string_view value)internal helperInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:165
game::LoadRuntimeSettlementDefinition(const RuntimeScenario & scenario,assets::AssetService & asset_service)free functionInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:182
game::ValidateRuntimeSettlementDefinition(const RuntimeSettlementDefinition & definition,const RuntimeScene & scene,const RuntimeWorldSession & world_session,const RuntimeActorRoster & actors,const RuntimeEconomyDefinition & economy,const assets::RuntimeContentCatalog & content_catalog,std::string & error)free functionInventory only; no authored contract note.src/game/runtime_settlement_definition.cpp:1153
game::RuntimeSettlementDefinitionLoadResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/runtime_settlement_definition.hpp:461
Failure(std::string error)internal helperInventory only; no authored contract note.src/game/runtime_world.cpp:17
game::ValidateRuntimeWorldSession(const RuntimeWorldSession & world,std::string & error)free functionInventory only; no authored contract note.src/game/runtime_world.cpp:23
game::LoadRuntimeWorldSession(const RuntimeScenario & scenario,assets::AssetService & asset_service)free functionInventory only; no authored contract note.src/game/runtime_world.cpp:55
game::RuntimeWorldLoadResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/runtime_world.hpp:28
game::DefaultScenarioCapacityPolicy()free functionInventory only; no authored contract note.src/game/scenario_capacity_policy.cpp:5
game::ValidateScenarioCapacityPolicy(const ScenarioCapacityPolicy & policy,std::string & error)free functionInventory only; no authored contract note.src/game/scenario_capacity_policy.cpp:7
MatchesIssue(const ScoutingOrderRecord & record,const ScoutingOrderIssueRequest & request)internal helperInventory only; no authored contract note.src/game/scouting_order.cpp:12
MatchesPreparation(const ScoutingOrderRecord & record,const ScoutingOrderPreparationRequest & request)internal helperInventory only; no authored contract note.src/game/scouting_order.cpp:27
ValidProvisionBundle(const ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/game/scouting_order.cpp:43
IsActiveExpedition(const ScoutingOrderState state)internal helperInventory only; no authored contract note.src/game/scouting_order.cpp:53
RetainsActiveExpedition(const ScoutingOrderRecord & order)internal helperInventory only; no authored contract note.src/game/scouting_order.cpp:58
ValidFieldDecision(const ScoutingFieldDecisionRecord & decision,const std::uint64_t camp_tick)internal helperInventory only; no authored contract note.src/game/scouting_order.cpp:63
ValidDiscovery(const ScoutingDiscoveryRecord & discovery,const std::uint64_t camp_tick)internal helperInventory only; no authored contract note.src/game/scouting_order.cpp:79
Reject(std::string detail,std::optional<ScoutingOrderRecord> before=std::nullopt)internal helperInventory only; no authored contract note.src/game/scouting_order.cpp:100
game::ScoutingOrderRuntime::ScoutingOrderRuntime(ScoutingOrderRegistryState state)methodInventory only; no authored contract note.src/game/scouting_order.cpp:111
game::ScoutingOrderRuntime::Issue(ScoutingOrderIssueRequest request)methodInventory only; no authored contract note.src/game/scouting_order.cpp:122
game::ScoutingOrderRuntime::Prepare(ScoutingOrderPreparationRequest request)methodInventory only; no authored contract note.src/game/scouting_order.cpp:190
game::ScoutingOrderRuntime::BeginExpedition(ScoutingOrderDepartureRequest request)methodInventory only; no authored contract note.src/game/scouting_order.cpp:274
game::ScoutingOrderRuntime::EstablishCamp(ScoutingOrderCampRequest request)methodInventory only; no authored contract note.src/game/scouting_order.cpp:316
game::ScoutingOrderRuntime::ApplyFieldDecision(ScoutingOrderFieldDecisionRequest request)methodInventory only; no authored contract note.src/game/scouting_order.cpp:354
game::ScoutingOrderRuntime::BeginDiscoveryReturn(ScoutingOrderDiscoveryRequest request)methodInventory only; no authored contract note.src/game/scouting_order.cpp:393
game::ScoutingOrderRuntime::CompleteDiscovery(ScoutingOrderDiscoveryCompletionRequest request)methodInventory only; no authored contract note.src/game/scouting_order.cpp:431
game::ScoutingOrderRuntime::PreviewCompletion(ScoutingOrderCompletionRequest request) constmethodInventory only; no authored contract note.src/game/scouting_order.cpp:478
game::ScoutingOrderRuntime::Complete(ScoutingOrderCompletionRequest request)methodInventory only; no authored contract note.src/game/scouting_order.cpp:522
game::ScoutingOrderRuntime::Find(const ScoutingOrderId order) constmethodInventory only; no authored contract note.src/game/scouting_order.cpp:536
game::ScoutingOrderRuntime::FindActiveExpeditionByParty(const PartyId party) constmethodInventory only; no authored contract note.src/game/scouting_order.cpp:542
game::ScoutingOrderRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/scouting_order.cpp:547
game::ValidateScoutingOrderRegistryState(const ScoutingOrderRegistryState & state,std::string & error)free functionInventory only; no authored contract note.src/game/scouting_order.cpp:559
game::BuildScoutingOrderRuntime(ScoutingOrderRegistryState state)free functionInventory only; no authored contract note.src/game/scouting_order.cpp:701
game::ScoutingOrderStateName(const ScoutingOrderState state)free functionInventory only; no authored contract note.src/game/scouting_order.cpp:709
game::ScoutingOrderReasonName(const ScoutingOrderReason reason)free functionInventory only; no authored contract note.src/game/scouting_order.cpp:725
game::ScoutingFieldDecisionKindName(const ScoutingFieldDecisionKind decision)free functionInventory only; no authored contract note.src/game/scouting_order.cpp:747
game::ScoutingObjectiveKindName(const ScoutingObjectiveKind objective)free functionInventory only; no authored contract note.src/game/scouting_order.cpp:765
game::ScoutingOrderId::operator bool() constinline methodInventory only; no authored contract note.src/game/scouting_order.hpp:24
game::ScoutingOrderOperationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/scouting_order.hpp:251
game::ScoutingOrderRuntimeBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/scouting_order.hpp:303
SerializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/scouting_order_serialization.cpp:14
DeserializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/scouting_order_serialization.cpp:18
ParseState(const std::string_view value)internal helperInventory only; no authored contract note.src/game/scouting_order_serialization.cpp:22
ParseReason(const std::string_view value)internal helperInventory only; no authored contract note.src/game/scouting_order_serialization.cpp:41
ParseFieldDecision(const std::string_view value)internal helperInventory only; no authored contract note.src/game/scouting_order_serialization.cpp:69
ParseObjective(const std::string_view value)internal helperInventory only; no authored contract note.src/game/scouting_order_serialization.cpp:81
BundleDocument(const ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/game/scouting_order_serialization.cpp:91
ParseBundle(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/scouting_order_serialization.cpp:99
game::SerializeScoutingOrderRegistryState(const ScoutingOrderRegistryState & state)free functionInventory only; no authored contract note.src/game/scouting_order_serialization.cpp:116
game::DeserializeScoutingOrderRegistryState(const std::string_view text)free functionInventory only; no authored contract note.src/game/scouting_order_serialization.cpp:218
game::SettlementProjectOutcomeStatusName(const SettlementProjectOutcomeStatus status)free functionInventory only; no authored contract note.src/game/settlement.cpp:16
game::SettlementProjectOutcomeCauseName(const SettlementProjectOutcomeCause cause)free functionInventory only; no authored contract note.src/game/settlement.cpp:29
game::SettlementInfrastructureDecisionKindName(const SettlementInfrastructureDecisionKind kind)free functionInventory only; no authored contract note.src/game/settlement.cpp:44
game::SettlementInfrastructureDecisionStatusName(const SettlementInfrastructureDecisionStatus status)free functionInventory only; no authored contract note.src/game/settlement.cpp:54
game::SettlementSpatialServiceKindName(const SettlementSpatialServiceKind service)free functionInventory only; no authored contract note.src/game/settlement.cpp:68
game::SettlementSpatialOptionRejectionName(const SettlementSpatialOptionRejection rejection)free functionInventory only; no authored contract note.src/game/settlement.cpp:87
game::SettlementDistrictKindName(const SettlementDistrictKind kind)free functionInventory only; no authored contract note.src/game/settlement.cpp:113
game::SettlementSpatialExecutionOwnerKindName(const SettlementSpatialExecutionOwnerKind owner)free functionInventory only; no authored contract note.src/game/settlement.cpp:130
game::SettlementSpatialExecutionStatusName(const SettlementSpatialExecutionStatus status)free functionInventory only; no authored contract note.src/game/settlement.cpp:143
NormalizeIds(std::vector<Value> & values,const std::size_t maximum,std::string & error,const char * label)internal helperInventory only; no authored contract note.src/game/settlement.cpp:162
ValidateAnchor(const SettlementAnchorRecord & anchor,const sim::WorldTopology & topology,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:180
HasStablePrefix(const std::string_view value,const std::string_view prefix)internal helperInventory only; no authored contract note.src/game/settlement.cpp:200
ValidateProjectDecision(const SettlementProjectDecisionRecord & decision,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:204
ValidateInfrastructureDecision(const SettlementInfrastructureDecisionRecord & decision,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:330
ValidCapabilityEvidenceKind(const SettlementCapabilityEvidenceKind kind)internal helperInventory only; no authored contract note.src/game/settlement.cpp:396
ValidateNeedRecord(const SettlementNeedRecord & need,const std::uint64_t founded_at_tick,const std::uint64_t updated_at_tick,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:407
ValidateNeedAssessment(const SettlementNeedAssessmentRecord & assessment,const SettlementRecord & record,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:429
ValidateHousingPressure(const SettlementHousingPressureRecord & housing,const SettlementRecord & record,const std::optional<std::uint64_t> expected_source_revision,const std::optional<std::uint64_t> expected_assessment_tick,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:449
ValidateHousingAssessment(const SettlementHousingAssessmentRecord & assessment,const SettlementRecord & record,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:484
ValidateHousingMethodOption(const SettlementHousingMethodOptionRecord & option,const SettlementRecord & record,const std::optional<std::uint64_t> expected_source_revision,const std::optional<std::uint64_t> expected_evaluation_tick,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:508
ValidateHousingMethodAssessment(const SettlementHousingMethodAssessmentRecord & assessment,const SettlementRecord & record,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:538
ValidateHousingParcelOption(const SettlementHousingParcelOptionRecord & option,const SettlementRecord & record,const std::optional<std::uint64_t> expected_source_revision,const std::optional<std::uint64_t> expected_evaluation_tick,const bool require_current_method,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:582
ValidateHousingParcelAssessment(const SettlementHousingParcelAssessmentRecord & assessment,const SettlementRecord & record,const bool require_current_method,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:636
ValidateHousingExecution(const SettlementHousingExecutionRecord & execution,const SettlementRecord & record,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:685
ValidateSpatialPortfolio(const SettlementSpatialPortfolioRecord & portfolio,const SettlementRecord & record,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:741
ValidateSpatialExecution(const SettlementSpatialExecutionRecord & execution,const SettlementRecord & record,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:821
ValidGoalSourceKind(const SettlementGoalSourceKind source)internal helperInventory only; no authored contract note.src/game/settlement.cpp:842
ValidGoalStatus(const SettlementGoalStatus status)internal helperInventory only; no authored contract note.src/game/settlement.cpp:853
CanonicalGoalKeys(const std::vector<std::string> & keys)internal helperInventory only; no authored contract note.src/game/settlement.cpp:863
ValidateGoalRecord(const SettlementGoalRecord & goal,const SettlementRecord & settlement,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:870
ValidateGoalPortfolio(const SettlementGoalPortfolioRecord & portfolio,const SettlementRecord & settlement,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:891
ValidPlanStatus(const SettlementPlanStatus status)internal helperInventory only; no authored contract note.src/game/settlement.cpp:944
ValidRequirementKind(const SettlementRequirementKind kind)internal helperInventory only; no authored contract note.src/game/settlement.cpp:948
ValidRequirementStatus(const SettlementRequirementStatus status)internal helperInventory only; no authored contract note.src/game/settlement.cpp:952
ValidBinding(const std::optional<SettlementRequirementBinding> & binding)internal helperInventory only; no authored contract note.src/game/settlement.cpp:956
RequirementTransitionAllowed(const SettlementRequirementStatus from,const SettlementRequirementStatus to)internal helperInventory only; no authored contract note.src/game/settlement.cpp:963
ValidateDependencyPlan(const SettlementPlanRecord & plan,const SettlementRecord & settlement,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:1000
RouteSupportsConnection(const sim::WorldTopology & topology,const sim::RouteId route,const sim::SiteId origin,const sim::SiteId destination)internal helperInventory only; no authored contract note.src/game/settlement.cpp:1097
ValidateSupplyPortfolio(const SettlementSupplyPortfolioRecord & portfolio,const SettlementRecord & settlement,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:1108
ValidateProductionDecision(const SettlementProductionDecisionRecord & decision,const SettlementRecord & settlement,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:1170
ValidateEnterprisePortfolio(const SettlementEnterprisePortfolioRecord & portfolio,const SettlementRecord & settlement,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:1218
ValidatePopulationStrategy(const SettlementPopulationStrategyRecord & strategy,const SettlementRecord & settlement,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:1287
ValidateSettlementRecord(SettlementRecord & record,const sim::WorldTopology & topology,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement.cpp:1317
IsInfrastructure(const BuildingFunction function)internal helperInventory only; no authored contract note.src/game/settlement.cpp:1910
Reject(std::string detail)internal helperInventory only; no authored contract note.src/game/settlement.cpp:1915
IsTerminal(const SettlementMaintenanceStatus status)internal helperInventory only; no authored contract note.src/game/settlement.cpp:1923
game::SettlementRuntime::SettlementRuntime(SettlementState state,std::map<SettlementId,SettlementRecord> settlements,std::map<sim::PersistentId,SettlementId> actor_membership,std::map<HouseholdId,SettlementId> household_membership,std::map<BuildingId,SettlementId> building_membership,std::map<InventoryContainerId,SettlementId> stockpile_membership,std::map<JobId,SettlementId> job_membership,std::map<SettlementMaintenanceId,SettlementMaintenanceRecord> maintenance)methodInventory only; no authored contract note.src/game/settlement.cpp:1929
game::SettlementRuntime::Create(SettlementCreateRequest request,const sim::WorldTopology & topology)methodInventory only; no authored contract note.src/game/settlement.cpp:1944
game::SettlementRuntime::Expand(SettlementExpansionRequest request,const sim::WorldTopology & topology)methodInventory only; no authored contract note.src/game/settlement.cpp:2079
game::SettlementRuntime::AddMembers(SettlementMembershipRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:2117
game::SettlementRuntime::RemoveActor(const SettlementActorDepartureRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:2203
game::SettlementRuntime::Abandon(SettlementAbandonRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:2230
game::SettlementRuntime::RaiseDefense(SettlementDefenseRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:2269
game::SettlementRuntime::ClearDefense(SettlementDefenseClearRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:2304
game::SettlementRuntime::RecordProjectDecision(SettlementProjectDecisionRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:2340
game::SettlementRuntime::RecordNeedAssessment(SettlementNeedAssessmentRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:2393
game::SettlementRuntime::BindHousingExecution(SettlementHousingExecutionBindRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:2518
game::SettlementRuntime::RecordHousingExecutionOutcome(SettlementHousingExecutionOutcomeRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:2596
game::SettlementRuntime::RecordGoalPortfolio(SettlementGoalPortfolioRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:2639
game::SettlementRuntime::RecordDependencyPlan(SettlementDependencyPlanRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:2799
game::SettlementRuntime::RecordRequirementOutcome(SettlementRequirementOutcomeRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:2907
game::SettlementRuntime::RecordSupplyPortfolio(SettlementSupplyPortfolioRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:3056
game::SettlementRuntime::BindSupplyOption(const SettlementSupplyOptionBindingRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:3134
game::SettlementRuntime::RecordProductionDecision(SettlementProductionDecisionRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:3186
game::SettlementRuntime::RecordEnterprisePortfolio(SettlementEnterprisePortfolioRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:3216
game::SettlementRuntime::ReconcileEnterpriseBinding(SettlementEnterpriseBindingRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:3251
game::SettlementRuntime::RecordPopulationStrategy(SettlementPopulationStrategyRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:3303
game::SettlementRuntime::BindProductionOption(SettlementProductionOptionBindingRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:3336
game::SettlementRuntime::RecordInfrastructureDecision(SettlementInfrastructureDecisionRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:3388
game::SettlementRuntime::RecordSpatialPortfolio(SettlementSpatialPortfolioRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:3422
game::SettlementRuntime::BindSpatialExecution(SettlementSpatialExecutionBindRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:3461
game::SettlementRuntime::RecordSpatialExecutionOutcome(SettlementSpatialExecutionOutcomeRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:3517
game::SettlementRuntime::RecordExpeditionDecision(SettlementExpeditionDecisionRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:3559
game::SettlementRuntime::EarnCapability(SettlementCapabilityEarnRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:3601
game::SettlementRuntime::SetCapabilityStatus(SettlementCapabilityStatusRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:3660
game::SettlementRuntime::EstablishOutpost(SettlementOutpostEstablishRequest request,const sim::WorldTopology & topology)methodInventory only; no authored contract note.src/game/settlement.cpp:3700
game::SettlementRuntime::ReviewOutpostMaintenance(SettlementOutpostMaintenanceRequest request)methodInventory only; no authored contract note.src/game/settlement.cpp:3769
game::SettlementRuntime::ReconcileProjectOutcome(SettlementProjectOutcomeRequest request)methodValidates the exact selected Construction terminal state, retains its outcome and cause in Settlement, and schedules the next project evaluation.src/game/settlement.cpp:3807
game::SettlementRuntime::AuthorizeMaintenance(const SettlementId settlement,const BuildingRecord & building,const std::uint64_t requested_at_tick,std::string & error) constmethodInventory only; no authored contract note.src/game/settlement.cpp:3910
game::SettlementRuntime::RecordMaintenance(const SettlementMaintenanceAuthorization authorization,const BuildingRecord & repairing_building,const ConstructionRecord & repair_construction)methodInventory only; no authored contract note.src/game/settlement.cpp:3954
game::SettlementRuntime::ReconcileMaintenance(const SettlementMaintenanceId maintenance,const BuildingRecord & building,const ConstructionRecord & construction,const std::uint64_t requested_at_tick)methodInventory only; no authored contract note.src/game/settlement.cpp:4010
game::SettlementRuntime::Find(const SettlementId settlement) constmethodInventory only; no authored contract note.src/game/settlement.cpp:4066
game::SettlementRuntime::SettlementForActor(const sim::PersistentId actor) constmethodInventory only; no authored contract note.src/game/settlement.cpp:4073
game::SettlementRuntime::SettlementForHousehold(const HouseholdId household) constmethodInventory only; no authored contract note.src/game/settlement.cpp:4080
game::SettlementRuntime::SettlementForBuilding(const BuildingId building) constmethodInventory only; no authored contract note.src/game/settlement.cpp:4087
game::SettlementRuntime::SettlementForStockpile(const InventoryContainerId stockpile) constmethodInventory only; no authored contract note.src/game/settlement.cpp:4094
game::SettlementRuntime::SettlementForJob(const JobId job) constmethodInventory only; no authored contract note.src/game/settlement.cpp:4100
game::SettlementRuntime::SettlementCount() constmethodInventory only; no authored contract note.src/game/settlement.cpp:4106
game::SettlementRuntime::SettlementIds(const std::size_t start_index,const std::size_t maximum_visits) constmethodInventory only; no authored contract note.src/game/settlement.cpp:4108
game::SettlementRuntime::MaintenanceRecords() constmethodInventory only; no authored contract note.src/game/settlement.cpp:4124
game::SettlementRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/settlement.cpp:4134
game::BuildSettlementRuntime(SettlementState state,const sim::WorldTopology & topology)free functionInventory only; no authored contract note.src/game/settlement.cpp:4151
game::EvaluateSettlementCapabilityRequirement(const SettlementRecord & settlement,const std::string_view required_capability)free functionInventory only; no authored contract note.src/game/settlement.cpp:4256
game::DeriveSettlementCapabilityProfile(const SettlementRecord & settlement)free functionInventory only; no authored contract note.src/game/settlement.cpp:4276
game::SettlementProsperityStateName(const SettlementProsperityState state)free functionInventory only; no authored contract note.src/game/settlement.cpp:4342
game::SettlementEnterpriseKindName(const SettlementEnterpriseKind kind)free functionInventory only; no authored contract note.src/game/settlement.cpp:4358
game::SettlementEnterpriseRejectionName(const SettlementEnterpriseRejection rejection)free functionInventory only; no authored contract note.src/game/settlement.cpp:4369
game::SettlementEnterpriseOwnerKindName(const SettlementEnterpriseOwnerKind kind)free functionInventory only; no authored contract note.src/game/settlement.cpp:4406
game::SettlementEnterpriseCommitmentStatusName(const SettlementEnterpriseCommitmentStatus status)free functionInventory only; no authored contract note.src/game/settlement.cpp:4418
game::SettlementPopulationTrajectoryName(const SettlementPopulationTrajectory trajectory)free functionInventory only; no authored contract note.src/game/settlement.cpp:4436
game::SettlementNeedDomainName(const SettlementNeedDomain domain)free functionInventory only; no authored contract note.src/game/settlement.cpp:4454
game::SettlementNeedUnitName(const SettlementNeedUnit unit)free functionInventory only; no authored contract note.src/game/settlement.cpp:4476
game::SettlementNeedTrendName(const SettlementNeedTrend trend)free functionInventory only; no authored contract note.src/game/settlement.cpp:4492
game::SettlementHousingPressureStatusName(const SettlementHousingPressureStatus status)free functionInventory only; no authored contract note.src/game/settlement.cpp:4505
game::SettlementHousingPressureTrendName(const SettlementHousingPressureTrend trend)free functionInventory only; no authored contract note.src/game/settlement.cpp:4518
game::SettlementHousingMethodKindName(const SettlementHousingMethodKind method)free functionInventory only; no authored contract note.src/game/settlement.cpp:4531
game::SettlementHousingMethodRejectionName(const SettlementHousingMethodRejection rejection)free functionInventory only; no authored contract note.src/game/settlement.cpp:4546
game::SettlementHousingParcelRejectionName(const SettlementHousingParcelRejection rejection)free functionInventory only; no authored contract note.src/game/settlement.cpp:4579
game::SettlementHousingExecutionStatusName(const SettlementHousingExecutionStatus status)free functionInventory only; no authored contract note.src/game/settlement.cpp:4598
game::SettlementNeedSourceOwnerName(const SettlementNeedSourceOwner owner)free functionInventory only; no authored contract note.src/game/settlement.cpp:4614
game::SettlementGoalSourceKindName(const SettlementGoalSourceKind source)free functionInventory only; no authored contract note.src/game/settlement.cpp:4634
game::SettlementGoalStatusName(const SettlementGoalStatus status)free functionInventory only; no authored contract note.src/game/settlement.cpp:4648
game::SettlementPlanStatusName(const SettlementPlanStatus status)free functionInventory only; no authored contract note.src/game/settlement.cpp:4660
game::SettlementRequirementKindName(const SettlementRequirementKind kind)free functionInventory only; no authored contract note.src/game/settlement.cpp:4676
game::SettlementRequirementStatusName(const SettlementRequirementStatus status)free functionInventory only; no authored contract note.src/game/settlement.cpp:4697
game::SettlementRequirementBindingKindName(const SettlementRequirementBindingKind kind)free functionInventory only; no authored contract note.src/game/settlement.cpp:4718
game::SettlementPlanEventKindName(const SettlementPlanEventKind kind)free functionInventory only; no authored contract note.src/game/settlement.cpp:4740
game::SettlementSupplyOptionRejectionName(const SettlementSupplyOptionRejection rejection)free functionInventory only; no authored contract note.src/game/settlement.cpp:4757
game::SettlementProductionOptionRejectionName(const SettlementProductionOptionRejection rejection)free functionInventory only; no authored contract note.src/game/settlement.cpp:4783
game::DeriveSettlementProsperity(const SettlementRecord & settlement,const SettlementProsperityFacts & facts)free functionInventory only; no authored contract note.src/game/settlement.cpp:4818
game::DeriveSettlementProsperityBatch(const std::span<const SettlementRecord> settlements,const std::span<const SettlementProsperityFacts> facts,const std::size_t cursor,const std::uint32_t visit_budget)free functionInventory only; no authored contract note.src/game/settlement.cpp:4887
game::SettlementId::operator bool() constinline methodInventory only; no authored contract note.src/game/settlement.hpp:70
game::SettlementMaintenanceId::operator bool() constinline methodInventory only; no authored contract note.src/game/settlement.hpp:78
game::SettlementGoalId::operator bool() constinline methodInventory only; no authored contract note.src/game/settlement.hpp:88
game::SettlementPlanId::operator bool() constinline methodInventory only; no authored contract note.src/game/settlement.hpp:96
game::SettlementHousingExecutionId::operator bool() constinline methodInventory only; no authored contract note.src/game/settlement.hpp:104
game::SettlementSpatialExecutionId::operator bool() constinline methodInventory only; no authored contract note.src/game/settlement.hpp:114
game::SettlementRequirementId::operator bool() constinline methodInventory only; no authored contract note.src/game/settlement.hpp:249
game::SettlementSupplyOptionId::operator bool() constinline methodInventory only; no authored contract note.src/game/settlement.hpp:259
game::SettlementProsperityResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement.hpp:923
game::SettlementProsperityBatchResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement.hpp:933
game::SettlementMutationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement.hpp:1459
game::SettlementBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement.hpp:1862
CanonicalKey(const std::string & key,const std::string_view prefix)internal helperInventory only; no authored contract note.src/game/settlement_dependency_planner.cpp:12
Reject(std::string error)internal helperInventory only; no authored contract note.src/game/settlement_dependency_planner.cpp:16
game::BuildSettlementDependencyPlan(SettlementDependencyPlanSnapshot snapshot,const SettlementDependencyPlanningBudget budget)free functionInventory only; no authored contract note.src/game/settlement_dependency_planner.cpp:21
game::SettlementDependencyPlanResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_dependency_planner.hpp:44
RatioScore(const std::uint64_t numerator,const std::uint64_t denominator,const std::int32_t maximum)internal helperInventory only; no authored contract note.src/game/settlement_enterprise_reasoner.cpp:12
Reject(const SettlementEnterpriseCandidateFact & fact)internal helperInventory only; no authored contract note.src/game/settlement_enterprise_reasoner.cpp:21
Score(const SettlementEnterpriseOptionRecord & option)internal helperInventory only; no authored contract note.src/game/settlement_enterprise_reasoner.cpp:61
game::EvaluateSettlementEnterpriseAlternatives(SettlementEnterpriseReasonerRequest request)free functionInventory only; no authored contract note.src/game/settlement_enterprise_reasoner.cpp:82
game::SettlementEnterpriseReasonerResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_enterprise_reasoner.hpp:35
CanonicalKeys(const std::vector<std::string> & keys)internal helperInventory only; no authored contract note.src/game/settlement_goal_reasoner.cpp:11
ValidBasisPoints(const SettlementGoalCandidateInput & candidate)internal helperInventory only; no authored contract note.src/game/settlement_goal_reasoner.cpp:18
ValidWeights(const SettlementGoalScoreWeights & weights)internal helperInventory only; no authored contract note.src/game/settlement_goal_reasoner.cpp:32
Weighted(const WeightedValue input)internal helperInventory only; no authored contract note.src/game/settlement_goal_reasoner.cpp:46
Score(const SettlementGoalCandidateInput & candidate,const SettlementGoalScoreWeights & weights)internal helperInventory only; no authored contract note.src/game/settlement_goal_reasoner.cpp:51
game::EvaluateSettlementGoalPortfolio(const SettlementGoalSnapshot & snapshot,const SettlementGoalEvaluationBudget budget)free functionInventory only; no authored contract note.src/game/settlement_goal_reasoner.cpp:67
game::SettlementGoalEvaluationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_goal_reasoner.hpp:68
ValidMethod(const SettlementHousingMethodKind method)internal helperInventory only; no authored contract note.src/game/settlement_housing_method_reasoner.cpp:15
Ratio(const std::uint64_t numerator,const std::uint64_t denominator)internal helperInventory only; no authored contract note.src/game/settlement_housing_method_reasoner.cpp:19
Reject(const SettlementHousingMethodCandidateFact & fact)internal helperInventory only; no authored contract note.src/game/settlement_housing_method_reasoner.cpp:29
Score(const SettlementHousingMethodCandidateFact & fact,const SettlementHousingMethodScoreWeights & weights)internal helperInventory only; no authored contract note.src/game/settlement_housing_method_reasoner.cpp:80
Detail(const SettlementHousingMethodRejection rejection,const SettlementHousingMethodKind method)internal helperInventory only; no authored contract note.src/game/settlement_housing_method_reasoner.cpp:106
game::EvaluateSettlementHousingMethods(SettlementHousingMethodReasonerRequest request)free functionInventory only; no authored contract note.src/game/settlement_housing_method_reasoner.cpp:146
game::SettlementHousingMethodReasonerResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_housing_method_reasoner.hpp:75
Ratio(const std::uint64_t numerator,const std::uint64_t denominator)internal helperInventory only; no authored contract note.src/game/settlement_housing_parcel_reasoner.cpp:11
Reject(const SettlementHousingParcelCandidateFact & fact)internal helperInventory only; no authored contract note.src/game/settlement_housing_parcel_reasoner.cpp:21
Score(const SettlementHousingParcelCandidateFact & fact,const SettlementHousingParcelScoreWeights & weights)internal helperInventory only; no authored contract note.src/game/settlement_housing_parcel_reasoner.cpp:37
Detail(const SettlementHousingParcelRejection rejection)internal helperInventory only; no authored contract note.src/game/settlement_housing_parcel_reasoner.cpp:65
ValidCandidate(const SettlementHousingParcelCandidateFact & fact,const SettlementHousingParcelReasonerRequest & request)internal helperInventory only; no authored contract note.src/game/settlement_housing_parcel_reasoner.cpp:84
game::EvaluateSettlementHousingParcels(SettlementHousingParcelReasonerRequest request)free functionInventory only; no authored contract note.src/game/settlement_housing_parcel_reasoner.cpp:116
game::SettlementHousingParcelReasonerResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_housing_parcel_reasoner.hpp:79
RatioPressure(const std::uint64_t deficit,const std::uint64_t target)internal helperInventory only; no authored contract note.src/game/settlement_housing_pressure_reasoner.cpp:11
SaturatingAdd(const std::uint64_t left,const std::uint64_t right)internal helperInventory only; no authored contract note.src/game/settlement_housing_pressure_reasoner.cpp:21
ValidPolicy(const SettlementHousingPressurePolicy & policy)internal helperInventory only; no authored contract note.src/game/settlement_housing_pressure_reasoner.cpp:27
game::EvaluateSettlementHousingPressure(SettlementHousingAssessmentInput input,const std::size_t household_visit_budget)free functionInventory only; no authored contract note.src/game/settlement_housing_pressure_reasoner.cpp:49
game::SettlementHousingAssessmentResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_housing_pressure_reasoner.hpp:74
ProjectQuantity(const SettlementNeedCandidateInput & candidate)internal helperInventory only; no authored contract note.src/game/settlement_need_reasoner.cpp:11
Severity(const SettlementNeedCandidateInput & candidate,const std::uint64_t projected)internal helperInventory only; no authored contract note.src/game/settlement_need_reasoner.cpp:24
ValidSources(const std::vector<SettlementNeedSourceStamp> & sources)internal helperInventory only; no authored contract note.src/game/settlement_need_reasoner.cpp:36
game::EvaluateSettlementNeeds(const SettlementNeedSnapshot & snapshot,const SettlementNeedEvaluationBudget budget)free functionInventory only; no authored contract note.src/game/settlement_need_reasoner.cpp:50
game::SettlementNeedEvaluationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_need_reasoner.hpp:43
Delta(const std::uint64_t current,const std::uint64_t previous)internal helperInventory only; no authored contract note.src/game/settlement_population_reasoner.cpp:9
SignedDifference(const std::uint64_t positive,const std::uint64_t negative)internal helperInventory only; no authored contract note.src/game/settlement_population_reasoner.cpp:14
game::EvaluateSettlementPopulationStrategy(SettlementPopulationStrategyRecord current,const std::optional<SettlementPopulationStrategyRecord> previous)free functionInventory only; no authored contract note.src/game/settlement_population_reasoner.cpp:25
game::SettlementPopulationStrategyEvaluation::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_population_reasoner.hpp:14
RatioScore(const std::uint64_t numerator,const std::uint64_t denominator,const std::int32_t maximum)internal helperInventory only; no authored contract note.src/game/settlement_production_reasoner.cpp:12
Reject(const SettlementProductionCandidateFact & fact)internal helperInventory only; no authored contract note.src/game/settlement_production_reasoner.cpp:22
Score(const SettlementProductionCandidateFact & fact)internal helperInventory only; no authored contract note.src/game/settlement_production_reasoner.cpp:63
game::EvaluateSettlementProductionAlternatives(SettlementProductionReasonerRequest request)free functionInventory only; no authored contract note.src/game/settlement_production_reasoner.cpp:83
game::SettlementProductionReasonerResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_production_reasoner.hpp:59
ValidateSnapshot(const SettlementProjectDecisionSnapshot & snapshot)internal helperInventory only; no authored contract note.src/game/settlement_project_reasoner.cpp:21
EvaluateEligibility(const SettlementProjectDecisionSnapshot & snapshot,const SettlementProjectCandidateInput & candidate)internal helperInventory only; no authored contract note.src/game/settlement_project_reasoner.cpp:64
EvaluateConsideration(SettlementProjectConsiderationDefinition definition,const std::int32_t raw_value)internal helperInventory only; no authored contract note.src/game/settlement_project_reasoner.cpp:101
EvaluateConsiderations(const SettlementProjectCandidateInput & candidate)internal helperInventory only; no authored contract note.src/game/settlement_project_reasoner.cpp:115
InitialTrace(const SettlementProjectDecisionSnapshot & snapshot,const SettlementProjectEvaluationBudget budget)internal helperInventory only; no authored contract note.src/game/settlement_project_reasoner.cpp:164
game::EvaluateSettlementProject(const SettlementProjectDecisionSnapshot & snapshot,const SettlementProjectEvaluationBudget budget)free functionInventory only; no authored contract note.src/game/settlement_project_reasoner.cpp:183
game::SettlementProjectEligibilityTrace::Eligible() constinline methodInventory only; no authored contract note.src/game/settlement_project_reasoner.hpp:142
game::SettlementProjectDecisionResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_project_reasoner.hpp:189
SerializeIds(const std::vector<Id> & values)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:19
ParseIds(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:27
LifecycleName(const SettlementLifecycle lifecycle)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:36
ParseLifecycle(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:46
DefenseStateName(const SettlementDefenseState state)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:56
ParseDefenseState(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:66
MaintenanceStatusName(const SettlementMaintenanceStatus status)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:76
ParseMaintenanceStatus(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:90
ProjectDecisionStatusName(const SettlementProjectDecisionStatus status)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:107
ParseProjectDecisionStatus(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:120
ProjectSponsorKindName(const SettlementProjectSponsorKind kind)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:133
ParseProjectSponsorKind(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:147
ParseInfrastructureDecisionKind(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:164
ParseInfrastructureDecisionStatus(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:176
CapabilityEvidenceKindName(const SettlementCapabilityEvidenceKind kind)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:191
ParseCapabilityEvidenceKind(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:206
ExpeditionPostureName(const SettlementExpeditionPosture posture)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:222
ParseExpeditionPosture(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:232
ParseProjectOutcomeStatus(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:243
ParseProjectOutcomeCause(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:256
ParseNeedDomain(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:272
ParseSupplyPurpose(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:284
ParseNeedUnit(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:294
ParseNeedTrend(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:305
ParseNeedSourceOwner(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:315
SerializeNeed(const SettlementNeedRecord & need)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:328
ParseNeed(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:350
SerializeHousingPressure(const SettlementHousingPressureRecord & housing)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:380
ParseHousingPressure(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:418
SerializeHousingAssessment(const SettlementHousingAssessmentRecord & assessment)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:497
ParseHousingAssessment(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:510
ParseHousingMethodKind(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:529
ParseHousingMethodRejection(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:542
SerializeHousingMethodOption(const SettlementHousingMethodOptionRecord & option)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:564
ParseHousingMethodOption(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:603
SerializeHousingMethodAssessment(const SettlementHousingMethodAssessmentRecord & assessment)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:649
ParseHousingMethodAssessment(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:667
ParseHousingParcelRejection(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:692
SerializeHousingParcelOption(const SettlementHousingParcelOptionRecord & option)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:708
ParseHousingParcelOption(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:752
SerializeHousingParcelAssessment(const SettlementHousingParcelAssessmentRecord & assessment)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:813
ParseHousingParcelAssessment(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:836
ParseHousingExecutionStatus(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:867
SerializeHousingExecution(const SettlementHousingExecutionRecord & execution)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:880
ParseHousingExecution(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:909
ParseSpatialNamedEnum(const std::string_view value,const std::initializer_list<Enum> values,Name name,const char * error)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:946
SerializeSpatialAnchor(const std::optional<sim::WorldInfrastructureAnchor> & anchor)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:957
ParseSpatialAnchor(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:968
SerializeSpatialOption(const SettlementSpatialOptionRecord & option)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:981
ParseSpatialOption(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1015
SerializeSpatialPortfolio(const SettlementSpatialPortfolioRecord & portfolio)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1074
ParseSpatialPortfolio(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1109
SerializeSpatialExecution(const SettlementSpatialExecutionRecord & execution)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1158
ParseSpatialExecution(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1173
ParseGoalSourceKind(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1205
ParseGoalStatus(const std::string_view name)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1216
SerializeGoal(const SettlementGoalRecord & goal)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1226
ParseGoal(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1249
SerializeGoalPortfolio(const SettlementGoalPortfolioRecord & portfolio)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1282
ParseGoalPortfolio(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1316
ParseNamedEnum(const std::string_view name,const std::initializer_list<Enum> values,NameFunction name_function,const char * error)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1370
SerializePlan(const SettlementPlanRecord & plan)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1381
ParsePlan(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1427
SerializeSupplyOption(const SettlementSupplyOptionRecord & option)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1532
ParseSupplyOption(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1564
SerializeSupplyPortfolio(const SettlementSupplyPortfolioRecord & portfolio)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1613
ParseSupplyPortfolio(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1630
SerializeProductionDecision(const SettlementProductionDecisionRecord & decision)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1657
ParseProductionDecision(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1702
SerializeEnterprisePortfolio(const SettlementEnterprisePortfolioRecord & portfolio)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1781
ParseEnterprisePortfolio(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1826
SerializePopulationStrategy(const SettlementPopulationStrategyRecord & strategy)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1923
ParsePopulationStrategy(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:1973
SerializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:2042
DeserializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/settlement_serialization.cpp:2046
game::SerializeSettlementState(const SettlementState & state)free functionInventory only; no authored contract note.src/game/settlement_serialization.cpp:2052
game::DeserializeSettlementState(const std::string_view document_text)free functionInventory only; no authored contract note.src/game/settlement_serialization.cpp:2475
Ratio(const std::uint64_t value,const std::uint64_t target)internal helperInventory only; no authored contract note.src/game/settlement_spatial_reasoner.cpp:11
Reject(const SettlementSpatialCandidateFact & fact)internal helperInventory only; no authored contract note.src/game/settlement_spatial_reasoner.cpp:19
Detail(const SettlementSpatialOptionRejection rejection)internal helperInventory only; no authored contract note.src/game/settlement_spatial_reasoner.cpp:47
ValidAnchor(const std::optional<sim::WorldInfrastructureAnchor> & anchor)internal helperInventory only; no authored contract note.src/game/settlement_spatial_reasoner.cpp:73
ValidFact(const SettlementSpatialCandidateFact & fact)internal helperInventory only; no authored contract note.src/game/settlement_spatial_reasoner.cpp:77
Score(const SettlementSpatialCandidateFact & fact,const SettlementSpatialScoreWeights & weights)internal helperInventory only; no authored contract note.src/game/settlement_spatial_reasoner.cpp:90
game::EvaluateSettlementSpatialPortfolio(SettlementSpatialReasonerRequest request)free functionInventory only; no authored contract note.src/game/settlement_spatial_reasoner.cpp:118
game::SettlementSpatialReasonerResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_spatial_reasoner.hpp:80
IsTerminal(const SupplyStage stage)internal helperInventory only; no authored contract note.src/game/settlement_supply.cpp:12
IsNeedSupply(const SupplyPurpose purpose)internal helperInventory only; no authored contract note.src/game/settlement_supply.cpp:17
Rejected(const SupplyOperationReason reason,const SupplyChainId supply,const std::uint64_t tick,std::string detail)internal helperInventory only; no authored contract note.src/game/settlement_supply.cpp:21
Incrementable(const std::uint64_t revision)internal helperInventory only; no authored contract note.src/game/settlement_supply.cpp:30
CanonicalizeSupplyBundle(ResourceBundle & bundle,const ResourceId resource,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement_supply.cpp:34
FocusForPurpose(const SupplyPurpose purpose)internal helperInventory only; no authored contract note.src/game/settlement_supply.cpp:54
PressureForPurpose(const ActorState & actor,const SupplyPurpose purpose)internal helperInventory only; no authored contract note.src/game/settlement_supply.cpp:66
BundleQuantity(const ResourceBundle & bundle,const ResourceId resource)internal helperInventory only; no authored contract note.src/game/settlement_supply.cpp:78
RequireApplied(const Result & result,const std::string_view operation)internal helperInventory only; no authored contract note.src/game/settlement_supply.cpp:88
game::SettlementSupplyRuntime::RecordOperation(SupplyOperationResult result)methodInventory only; no authored contract note.src/game/settlement_supply.cpp:97
game::SettlementSupplyRuntime::CreateSupply(SupplyCreateRequest request,const ActorRuntime & actors,WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/settlement_supply.cpp:102
game::SettlementSupplyRuntime::CreateSupplySuccessor(const SupplyChainId predecessor_id,const std::uint64_t expected_actor_revision,const std::uint64_t tick,const ActorRuntime & actors,WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodCreates one preflighted recurring supply chain from a completed predecessor, current beneficiary need pressure, and existing Work and Resource owners while retaining bounded lineage.src/game/settlement_supply.cpp:221
game::SettlementSupplyRuntime::PreviewCreateSupplySuccessor(const SupplyChainId predecessor_id,const std::uint64_t expected_actor_revision,const std::uint64_t tick,const ActorRuntime & actors,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources) constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:269
game::SettlementSupplyRuntime::ObserveClaim(const SupplyChainId supply_id,const ReservationId reservation_id,const std::uint64_t tick,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/settlement_supply.cpp:315
game::SettlementSupplyRuntime::PreviewObserveClaim(const SupplyChainId supply_id,const JobRecord & prospective_job,const ReservationRecord & prospective_reservation,const InventoryContainerId source,const InventoryContainerId carrier,const InventoryContainerId destination,const ResourceBundle & bundle,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:371
game::SettlementSupplyRuntime::PreviewCompleteGather(const SupplyChainId supply_id,const std::uint64_t tick,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources) constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:406
game::SettlementSupplyRuntime::CompleteGather(const SupplyChainId supply_id,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodCommits the prevalidated source-to-carrier Resource gather and matching Work transitions before advancing one supply chain to hauling.src/game/settlement_supply.cpp:459
game::SettlementSupplyRuntime::SetAlert(SupplyChainRecord & supply,const SettlementAlertKind kind,const SettlementAlertCause cause,const bool active,const std::uint64_t tick,std::string & error)methodInventory only; no authored contract note.src/game/settlement_supply.cpp:504
game::SettlementSupplyRuntime::CanSetAlert(const SupplyChainId supply,const SettlementAlertKind kind,const bool active,const std::uint64_t tick,std::string & error) constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:545
game::SettlementSupplyRuntime::CanResolveAlerts(const SupplyChainId supply,const std::uint64_t tick,std::string & error) constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:572
game::SettlementSupplyRuntime::PreviewRecordRouteFact(const SupplyChainId supply_id,const SupplyRouteFact route,const std::uint64_t tick,const WorkLifecycleRuntime & work) constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:579
game::SettlementSupplyRuntime::RecordRouteFact(const SupplyChainId supply_id,const SupplyRouteFact route,const std::uint64_t tick,WorkLifecycleRuntime & work)methodInventory only; no authored contract note.src/game/settlement_supply.cpp:635
game::SettlementSupplyRuntime::PreviewCompleteDelivery(const SupplyChainId supply_id,const std::uint64_t tick,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources) constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:671
game::SettlementSupplyRuntime::CompleteDelivery(const SupplyChainId supply_id,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodCommits the prevalidated carrier-to-storage Resource delivery and matching Work transitions before advancing one supply chain to beneficiary consumption.src/game/settlement_supply.cpp:716
game::SettlementSupplyRuntime::PreviewConsumeSupply(const SupplyChainId supply_id,const std::uint64_t expected_actor_revision,const std::uint64_t tick,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources,const ActorRuntime & actors) constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:753
game::SettlementSupplyRuntime::ConsumeSupply(const SupplyChainId supply_id,const std::uint64_t expected_actor_revision,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,ActorRuntime & actors)methodCommits the exact Resource consumption sink, applies revision-checked hunger or hydration relief to the beneficiary Actor, and completes the retained Work graph and supply chain.src/game/settlement_supply.cpp:855
game::SettlementSupplyRuntime::PreviewStoreMaterial(const SupplyChainId supply_id,const std::uint64_t expected_actor_revision,const std::uint64_t tick,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources,const ActorRuntime & actors) constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:922
game::SettlementSupplyRuntime::StoreMaterial(const SupplyChainId supply_id,const std::uint64_t expected_actor_revision,const std::uint64_t tick,WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources,ActorRuntime & actors)methodInventory only; no authored contract note.src/game/settlement_supply.cpp:994
game::SettlementSupplyRuntime::PreviewRefreshAlerts(const SupplyChainId supply_id,const SupplyRouteFact route,const std::uint64_t tick,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources) constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:1040
game::SettlementSupplyRuntime::RefreshAlerts(const SupplyChainId supply_id,const SupplyRouteFact route,const std::uint64_t tick,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/settlement_supply.cpp:1110
game::SettlementSupplyRuntime::CancelSupply(const SupplyChainId supply_id,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/settlement_supply.cpp:1161
game::SettlementSupplyRuntime::FindSupply(const SupplyChainId supply) constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:1249
game::SettlementSupplyRuntime::FindSupplyByJob(const JobId job) constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:1254
game::SettlementSupplyRuntime::SupplyCount() constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:1259
game::SettlementSupplyRuntime::SupplyIdWindow(const std::size_t start_index,const std::size_t maximum_visits) constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:1262
game::SettlementSupplyRuntime::SupplyIds() constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:1290
game::SettlementSupplyRuntime::EnsureOrderedSupplyIds() constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:1295
game::SettlementSupplyRuntime::FindAlert(const SupplyChainId supply,const SettlementAlertKind kind) constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:1308
game::SettlementSupplyRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:1314
game::SettlementSupplyRuntime::LastOperation() constmethodInventory only; no authored contract note.src/game/settlement_supply.cpp:1335
game::SupplyCreateResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_supply.hpp:37
game::SupplyIdWindowResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_supply.hpp:48
game::SettlementSupplyBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_supply.hpp:181
Failure(std::string error)internal helperInventory only; no authored contract note.src/game/settlement_supply_portfolio_reasoner.cpp:14
CandidateKey(const SettlementSupplyCandidateInput & candidate)internal helperInventory only; no authored contract note.src/game/settlement_supply_portfolio_reasoner.cpp:18
ValidCandidate(const SettlementSupplyCandidateInput & candidate)internal helperInventory only; no authored contract note.src/game/settlement_supply_portfolio_reasoner.cpp:23
Rejection(const SettlementSupplyCandidateInput & candidate)internal helperInventory only; no authored contract note.src/game/settlement_supply_portfolio_reasoner.cpp:50
Score(const SettlementSupplyCandidateInput & candidate)internal helperInventory only; no authored contract note.src/game/settlement_supply_portfolio_reasoner.cpp:78
RejectionDetail(const SettlementSupplyOptionRejection rejection)internal helperInventory only; no authored contract note.src/game/settlement_supply_portfolio_reasoner.cpp:99
game::EvaluateSettlementSupplyPortfolio(SettlementSupplyPortfolioSnapshot snapshot,const SettlementSupplyPortfolioBudget budget)free functionInventory only; no authored contract note.src/game/settlement_supply_portfolio_reasoner.cpp:128
game::SettlementSupplyPortfolioResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_supply_portfolio_reasoner.hpp:67
Rejected(const std::uint64_t tick,std::string detail)internal helperInventory only; no authored contract note.src/game/settlement_supply_scheduler.cpp:24
CheckedAdd(std::uint64_t & target,const std::size_t value)internal helperInventory only; no authored contract note.src/game/settlement_supply_scheduler.cpp:68
SumWithin(const std::uint64_t left,const std::uint64_t right,const std::uint64_t maximum)internal helperInventory only; no authored contract note.src/game/settlement_supply_scheduler.cpp:76
ExecutionMutations(const SettlementSupplySchedulerUpdateResult & update)internal helperInventory only; no authored contract note.src/game/settlement_supply_scheduler.cpp:80
ExecutionVisits(const SettlementSupplySchedulerUpdateResult & update)internal helperInventory only; no authored contract note.src/game/settlement_supply_scheduler.cpp:85
IsSuppressed(const std::span<const sim::PersistentId> suppressed_actors,const sim::PersistentId actor)internal helperInventory only; no authored contract note.src/game/settlement_supply_scheduler.cpp:90
RotatedStart(const std::uint64_t completed_updates,const std::size_t visit_budget,const std::size_t population)internal helperInventory only; no authored contract note.src/game/settlement_supply_scheduler.cpp:97
FindSpatialBinding(const std::span<const SettlementWorkSpatialAnchor> spatial_bindings,const InventoryOwnerMarker owner)internal helperInventory only; no authored contract note.src/game/settlement_supply_scheduler.cpp:109
IsReadyAt(const ActorState & actor,const SupplyChainRecord & chain,const WorkTaskId task,const SettlementWorkSpatialAnchor & target)internal helperInventory only; no authored contract note.src/game/settlement_supply_scheduler.cpp:116
IsValidDestination(const SupplyChainRecord & chain,const InventoryContainerRecord & destination)internal helperInventory only; no authored contract note.src/game/settlement_supply_scheduler.cpp:125
SupplyPressure(const ActorState & actor,const SupplyPurpose purpose)internal helperInventory only; no authored contract note.src/game/settlement_supply_scheduler.cpp:132
BuildCandidate(const SupplyChainRecord & chain,const sim::WorldRuntime & world,const sim::PersistentId actor_id,const ActorRuntime & actors,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources,const std::span<const SettlementWorkSpatialAnchor> spatial_bindings,const std::uint32_t maximum_route_cost_ticks,const HouseholdRuntime * households)internal helperInventory only; no authored contract note.src/game/settlement_supply_scheduler.cpp:145
game::ReconcileSettlementSupplyWorkers(const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,SettlementSupplyRuntime & supply,const SettlementSupplySchedulerState & scheduler,const std::span<const sim::PersistentId> eligible_actors,const std::span<const SettlementWorkSpatialAnchor> spatial_bindings,const sim::LocalMovementTuning movement_tuning)free functionOn food-work cadence, scans one deterministic bounded Supply ID window, cancels invalid supply ownership, and terminates its matching Actor plan when a beneficiary dies or a retained worker leaves the canonical eligible and spatial indexes.src/game/settlement_supply_scheduler.cpp:301
game::ValidateSettlementSupplySchedulerState(const SettlementSupplySchedulerState & state,std::string & error)free functionInventory only; no authored contract note.src/game/settlement_supply_scheduler.cpp:397
game::AdvanceSettlementSupplyScheduler(SettlementSupplySchedulerState & state,const std::uint64_t tick,sim::WorldRuntime & world,ActorRuntime & actors,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources,SettlementSupplyRuntime & supply,const std::span<const sim::PersistentId> eligible_actors,const std::span<const sim::PersistentId> suppressed_actors,const sim::LocalMovementTuning movement_tuning,const std::span<const SettlementWorkSpatialAnchor> spatial_bindings,const HouseholdRuntime * households,const JobPreferenceScoringPolicy job_preference_policy)free functionRequests deterministic bounded Supply ID windows for claim candidates, execution, reentry, and alerts; uses a nested Actor and Supply cursor that covers cross-pairs; spends declared visit and Actor-evaluation budgets before IAUS candidate construction; and advances food, water, and material work through existing owner transactions without building a complete Supply by Actor matrix.src/game/settlement_supply_scheduler.cpp:517
game::SettlementSupplySchedulerUpdateResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_supply_scheduler.hpp:129
game::SettlementSupplySchedulerAdvanceResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_supply_scheduler.hpp:153
game::SettlementSupplyWorkerReconcileResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_supply_scheduler.hpp:161
InsertRecords(const std::vector<Record> & records,std::map<Id,Record> & output,const std::size_t maximum,const std::string_view label,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement_supply_state.cpp:12
ValidateNextId(const std::map<Id,Record> & records,const std::uint64_t next_id,const std::string_view label,std::string & error)internal helperInventory only; no authored contract note.src/game/settlement_supply_state.cpp:28
IsValid(const SupplyPurpose purpose)internal helperInventory only; no authored contract note.src/game/settlement_supply_state.cpp:37
IsValid(const SupplyStage stage)internal helperInventory only; no authored contract note.src/game/settlement_supply_state.cpp:42
IsValid(const SettlementAlertKind kind)internal helperInventory only; no authored contract note.src/game/settlement_supply_state.cpp:59
IsValid(const SettlementAlertStatus status)internal helperInventory only; no authored contract note.src/game/settlement_supply_state.cpp:65
IsValid(const SettlementAlertCause cause)internal helperInventory only; no authored contract note.src/game/settlement_supply_state.cpp:69
KindMatchesCause(const SettlementAlertKind kind,const SettlementAlertCause cause)internal helperInventory only; no authored contract note.src/game/settlement_supply_state.cpp:75
IsValid(const SupplyOperationStatus status)internal helperInventory only; no authored contract note.src/game/settlement_supply_state.cpp:84
IsValid(const SupplyOperationReason reason)internal helperInventory only; no authored contract note.src/game/settlement_supply_state.cpp:89
IsCanonicalBundle(const ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/game/settlement_supply_state.cpp:105
IsTerminal(const SupplyStage stage)internal helperInventory only; no authored contract note.src/game/settlement_supply_state.cpp:120
IsValid(const WorkSourceKind kind)internal helperInventory only; no authored contract note.src/game/settlement_supply_state.cpp:125
Quantity(const ResourceBundle & bundle,const ResourceId resource)internal helperInventory only; no authored contract note.src/game/settlement_supply_state.cpp:130
game::MigrateSettlementSupplyState(SettlementSupplyState & state,std::string & error)free functionInventory only; no authored contract note.src/game/settlement_supply_state.cpp:141
game::ValidateSettlementSupplyState(const SettlementSupplyState & state,std::string & error)free functionInventory only; no authored contract note.src/game/settlement_supply_state.cpp:163
game::SettlementSupplyRuntime::SettlementSupplyRuntime(SettlementSupplyState state,std::map<SupplyChainId,SupplyChainRecord> supplies,std::map<SettlementAlertId,SettlementAlertRecord> alerts)methodInventory only; no authored contract note.src/game/settlement_supply_state.cpp:310
game::SettlementSupplyRuntime::RebuildDerivedIndexes()methodInventory only; no authored contract note.src/game/settlement_supply_state.cpp:319
game::BuildSettlementSupplyCandidate(SettlementSupplyState state,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources,const ActorRuntime & actors)free functionInventory only; no authored contract note.src/game/settlement_supply_state.cpp:330
game::SupplyPurposeName(const SupplyPurpose purpose)free functionInventory only; no authored contract note.src/game/settlement_supply_types.cpp:5
game::SupplyStageName(const SupplyStage stage)free functionInventory only; no authored contract note.src/game/settlement_supply_types.cpp:17
game::SettlementAlertKindName(const SettlementAlertKind kind)free functionInventory only; no authored contract note.src/game/settlement_supply_types.cpp:43
game::SettlementAlertStatusName(const SettlementAlertStatus status)free functionInventory only; no authored contract note.src/game/settlement_supply_types.cpp:55
game::SettlementAlertCauseName(const SettlementAlertCause cause)free functionInventory only; no authored contract note.src/game/settlement_supply_types.cpp:65
game::SupplyOperationStatusName(const SupplyOperationStatus status)free functionInventory only; no authored contract note.src/game/settlement_supply_types.cpp:77
game::SupplyOperationReasonName(const SupplyOperationReason reason)free functionInventory only; no authored contract note.src/game/settlement_supply_types.cpp:91
game::SupplyChainId::operator bool() constinline methodInventory only; no authored contract note.src/game/settlement_supply_types.hpp:28
game::SettlementAlertId::operator bool() constinline methodInventory only; no authored contract note.src/game/settlement_supply_types.hpp:36
game::SupplyOperationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/settlement_supply_types.hpp:161
ValidSourceKind(const StructuredEventSourceKind kind)internal helperInventory only; no authored contract note.src/game/structured_event_consequence.cpp:12
ValidRecord(const StructuredEventConsequenceRecord & record)internal helperInventory only; no authored contract note.src/game/structured_event_consequence.cpp:21
game::StructuredEventSourceKindName(const StructuredEventSourceKind kind)free functionInventory only; no authored contract note.src/game/structured_event_consequence.cpp:41
game::ValidateStructuredEventConsequenceState(const StructuredEventConsequenceState & state,std::string & error)free functionInventory only; no authored contract note.src/game/structured_event_consequence.cpp:51
game::StructuredEventConsequenceRuntime::StructuredEventConsequenceRuntime(StructuredEventConsequenceState state,std::map<std::pair<StructuredEventSourceKind,std::uint64_t>,StructuredEventConsequenceRecord> records)methodInventory only; no authored contract note.src/game/structured_event_consequence.cpp:77
game::StructuredEventConsequenceRuntime::Record(StructuredEventConsequenceRecordRequest request)methodInventory only; no authored contract note.src/game/structured_event_consequence.cpp:84
game::StructuredEventConsequenceRuntime::Find(const StructuredEventSourceKind kind,const std::uint64_t source_id) constmethodInventory only; no authored contract note.src/game/structured_event_consequence.cpp:126
game::StructuredEventConsequenceRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/structured_event_consequence.cpp:133
game::BuildStructuredEventConsequenceRuntime(StructuredEventConsequenceState state)free functionInventory only; no authored contract note.src/game/structured_event_consequence.cpp:144
game::StructuredEventConsequenceId::operator bool() constinline methodInventory only; no authored contract note.src/game/structured_event_consequence.hpp:25
game::StructuredEventConsequenceResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/structured_event_consequence.hpp:88
game::StructuredEventConsequenceBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/structured_event_consequence.hpp:120
OptionalId(const std::optional<StableId> id)internal helperInventory only; no authored contract note.src/game/structured_event_consequence_serialization.cpp:14
ParseOptionalId(const nlohmann::json & value)internal helperInventory only; no authored contract note.src/game/structured_event_consequence_serialization.cpp:18
ParseSourceKind(const std::string_view value)internal helperInventory only; no authored contract note.src/game/structured_event_consequence_serialization.cpp:22
SerializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/structured_event_consequence_serialization.cpp:32
DeserializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/structured_event_consequence_serialization.cpp:36
game::SerializeStructuredEventConsequenceState(const StructuredEventConsequenceState & state)free functionInventory only; no authored contract note.src/game/structured_event_consequence_serialization.cpp:43
game::DeserializeStructuredEventConsequenceState(const std::string_view document_text)free functionInventory only; no authored contract note.src/game/structured_event_consequence_serialization.cpp:79
IsRecent(const std::uint64_t updated_at_tick,const std::uint64_t evaluation_tick)internal helperInventory only; no authored contract note.src/game/structured_event_presentation.cpp:12
BandPriority(const IntersectionPresentationBand band)internal helperInventory only; no authored contract note.src/game/structured_event_presentation.cpp:17
RemainingTicks(const StructuredEventPrompt & prompt,const std::uint64_t evaluation_tick)internal helperInventory only; no authored contract note.src/game/structured_event_presentation.cpp:31
HigherPriority(const StructuredEventPrompt & left,const StructuredEventPrompt & right,const std::uint64_t evaluation_tick)internal helperInventory only; no authored contract note.src/game/structured_event_presentation.cpp:39
EscalateForDeadline(StructuredEventPrompt & prompt,const std::uint64_t evaluation_tick)internal helperInventory only; no authored contract note.src/game/structured_event_presentation.cpp:57
RetainPrompt(StructuredEventPresentationSnapshot & result,StructuredEventPrompt prompt)internal helperInventory only; no authored contract note.src/game/structured_event_presentation.cpp:68
FindIntersection(const IntersectionLifecycleState & state,const IntersectionId id)internal helperInventory only; no authored contract note.src/game/structured_event_presentation.cpp:89
DeadlineFrom(const std::uint64_t start_tick,const std::uint64_t duration_ticks)internal helperInventory only; no authored contract note.src/game/structured_event_presentation.cpp:96
ComposeIncidentPrompts(const RuntimeIncidentCatalog & catalog,const IntersectionLifecycleState & intersections,const std::set<IncidentId> & quest_sources,StructuredEventPresentationSnapshot & result)internal helperInventory only; no authored contract note.src/game/structured_event_presentation.cpp:101
ComposeQuestPrompts(const RuntimeIncidentCatalog & catalog,const StructuredQuestStateData & quests,StructuredEventPresentationSnapshot & result)internal helperInventory only; no authored contract note.src/game/structured_event_presentation.cpp:168
ComposeInstitutionalPrompts(const RuntimeIncidentCatalog & catalog,const InstitutionalRequestStateData & state,StructuredEventPresentationSnapshot & result)internal helperInventory only; no authored contract note.src/game/structured_event_presentation.cpp:224
game::ComposeStructuredEventPresentation(const RuntimeIncidentCatalog & catalog,const IntersectionLifecycleState & intersections,const StructuredQuestStateData & quests,const InstitutionalRequestStateData & institutional_requests,const std::uint64_t evaluation_tick)free functionInventory only; no authored contract note.src/game/structured_event_presentation.cpp:338
game::StructuredEventPromptSourceKindName(const StructuredEventPromptSourceKind kind)free functionInventory only; no authored contract note.src/game/structured_event_presentation.cpp:361
game::StructuredEventPromptDispositionName(const StructuredEventPromptDisposition disposition)free functionInventory only; no authored contract note.src/game/structured_event_presentation.cpp:376
ValidStableId(const std::string_view value)internal helperInventory only; no authored contract note.src/game/structured_quest.cpp:14
ValidText(const std::string_view value)internal helperInventory only; no authored contract note.src/game/structured_quest.cpp:23
Terminal(const StructuredQuestState state)internal helperInventory only; no authored contract note.src/game/structured_quest.cpp:30
ValidStepKind(const StructuredQuestStepKind kind)internal helperInventory only; no authored contract note.src/game/structured_quest.cpp:35
ValidState(const StructuredQuestState state)internal helperInventory only; no authored contract note.src/game/structured_quest.cpp:46
ValidControlMode(const StructuredQuestControlMode mode)internal helperInventory only; no authored contract note.src/game/structured_quest.cpp:60
Reject(std::string detail,std::optional<StructuredQuestRecord> before=std::nullopt)internal helperInventory only; no authored contract note.src/game/structured_quest.cpp:65
game::ValidateAndCanonicalizeStructuredQuestTemplates(std::vector<StructuredQuestTemplate> & templates,std::string & error)free functionInventory only; no authored contract note.src/game/structured_quest.cpp:78
game::ValidateStructuredQuestStateShape(const StructuredQuestStateData & state,std::string & error)free functionInventory only; no authored contract note.src/game/structured_quest.cpp:117
game::ValidateStructuredQuestState(const StructuredQuestStateData & state,const std::span<const StructuredQuestTemplate> templates,std::string & error)free functionInventory only; no authored contract note.src/game/structured_quest.cpp:183
game::StructuredQuestRuntime::StructuredQuestRuntime(std::vector<StructuredQuestTemplate> templates,StructuredQuestStateData state)methodInventory only; no authored contract note.src/game/structured_quest.cpp:203
game::StructuredQuestRuntime::FindTemplate(const std::string_view id) constmethodInventory only; no authored contract note.src/game/structured_quest.cpp:213
game::StructuredQuestRuntime::Create(StructuredQuestCreateRequest request)methodInventory only; no authored contract note.src/game/structured_quest.cpp:219
game::StructuredQuestRuntime::PreviewTransition(StructuredQuestTransitionRequest request) constmethodInventory only; no authored contract note.src/game/structured_quest.cpp:287
game::StructuredQuestRuntime::Transition(StructuredQuestTransitionRequest request)methodInventory only; no authored contract note.src/game/structured_quest.cpp:422
game::StructuredQuestRuntime::Find(const StructuredQuestId quest) constmethodInventory only; no authored contract note.src/game/structured_quest.cpp:434
game::StructuredQuestRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/structured_quest.cpp:439
game::BuildStructuredQuestRuntime(const std::span<const StructuredQuestTemplate> templates,StructuredQuestStateData state)free functionInventory only; no authored contract note.src/game/structured_quest.cpp:454
game::StructuredQuestStepKindName(const StructuredQuestStepKind kind)free functionInventory only; no authored contract note.src/game/structured_quest.cpp:469
game::StructuredQuestStateName(const StructuredQuestState state)free functionInventory only; no authored contract note.src/game/structured_quest.cpp:483
game::StructuredQuestControlModeName(const StructuredQuestControlMode mode)free functionInventory only; no authored contract note.src/game/structured_quest.cpp:503
game::StructuredQuestActionName(const StructuredQuestAction action)free functionInventory only; no authored contract note.src/game/structured_quest.cpp:507
game::StructuredQuestId::operator bool() constinline methodInventory only; no authored contract note.src/game/structured_quest.hpp:29
game::StructuredQuestOperationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/structured_quest.hpp:175
game::StructuredQuestRuntimeBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/structured_quest.hpp:216
SerializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/structured_quest_serialization.cpp:14
DeserializationFailure(std::string error)internal helperInventory only; no authored contract note.src/game/structured_quest_serialization.cpp:18
ParseState(const std::string_view value)internal helperInventory only; no authored contract note.src/game/structured_quest_serialization.cpp:22
ParseControlMode(const std::string_view value)internal helperInventory only; no authored contract note.src/game/structured_quest_serialization.cpp:47
ParseAction(const std::string_view value)internal helperInventory only; no authored contract note.src/game/structured_quest_serialization.cpp:57
OptionalStableId(const std::optional<StableId> value)internal helperInventory only; no authored contract note.src/game/structured_quest_serialization.cpp:91
game::SerializeStructuredQuestState(const StructuredQuestStateData & state)free functionInventory only; no authored contract note.src/game/structured_quest_serialization.cpp:101
game::DeserializeStructuredQuestState(const std::string_view document_text)free functionInventory only; no authored contract note.src/game/structured_quest_serialization.cpp:165
IsTerminal(const TradeShipmentStage stage)internal helperInventory only; no authored contract note.src/game/trade.cpp:13
RequiresReservation(const TradeShipmentStage stage)internal helperInventory only; no authored contract note.src/game/trade.cpp:18
SourceKind(const TradeShipmentPurpose purpose)internal helperInventory only; no authored contract note.src/game/trade.cpp:25
SubjectKind(const TradeShipmentPurpose purpose)internal helperInventory only; no authored contract note.src/game/trade.cpp:30
ValidBundle(const ResourceBundle & bundle,const ResourceEconomyRuntime & resources)internal helperInventory only; no authored contract note.src/game/trade.cpp:36
StructurallyValidBundle(const ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/game/trade.cpp:51
ValidRisk(const TradeShipmentPurpose purpose,const TradeRiskContext & risk,const std::uint64_t deadline_tick,const std::uint64_t created_at_tick)internal helperInventory only; no authored contract note.src/game/trade.cpp:65
ValidExchangeTerms(const TradeShipmentPurpose purpose,const ResourceBundle & cargo,const TradeRiskContext & risk,const std::optional<TradeExchangeTerms> & exchange_terms,const bool legacy_unpriced_obligation)internal helperInventory only; no authored contract note.src/game/trade.cpp:77
Rejected(const TradeShipmentId shipment,const std::uint64_t tick,std::string detail)internal helperInventory only; no authored contract note.src/game/trade.cpp:107
Applied(const TradeShipmentId shipment,const TradeOperationReason reason,const std::uint64_t tick,std::string detail)internal helperInventory only; no authored contract note.src/game/trade.cpp:116
Unchanged(const TradeShipmentId shipment,const TradeOperationReason reason,const std::uint64_t tick,std::string detail)internal helperInventory only; no authored contract note.src/game/trade.cpp:125
game::TradeShipmentPurposeName(const TradeShipmentPurpose purpose)free functionInventory only; no authored contract note.src/game/trade.cpp:136
game::TradeShipmentStageName(const TradeShipmentStage stage)free functionInventory only; no authored contract note.src/game/trade.cpp:146
game::TradeOperationStatusName(const TradeOperationStatus status)free functionInventory only; no authored contract note.src/game/trade.cpp:166
game::TradeOperationReasonName(const TradeOperationReason reason)free functionInventory only; no authored contract note.src/game/trade.cpp:178
game::ValidateTradeState(const TradeState & state,std::string & error)free functionInventory only; no authored contract note.src/game/trade.cpp:200
game::ValidateTradeBindings(const TradeState & state,const PartyRuntime & parties,const WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources,std::string & error)free functionInventory only; no authored contract note.src/game/trade.cpp:247
game::TradeRuntime::TradeRuntime(TradeState state,std::map<TradeShipmentId,TradeShipmentRecord> shipments)methodInventory only; no authored contract note.src/game/trade.cpp:321
game::BuildTradeCandidate(TradeState state)free functionInventory only; no authored contract note.src/game/trade.cpp:326
game::TradeRuntime::Record(TradeOperationResult result)methodInventory only; no authored contract note.src/game/trade.cpp:339
game::TradeRuntime::CreateShipment(TradeShipmentCreateRequest request,const PartyRecord & party,WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/trade.cpp:344
game::TradeRuntime::ObserveClaim(const TradeShipmentId shipment,const ReservationId reservation_id,const sim::PersistentId actor,const InventoryContainerId carrier,const std::uint64_t tick,WorkLifecycleRuntime & work,const ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/trade.cpp:414
game::TradeRuntime::CompletePickup(const TradeShipmentId shipment,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/trade.cpp:459
game::TradeRuntime::RecordRouteFact(const TradeShipmentId shipment,const TradeRouteFact route,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/trade.cpp:502
game::TradeRuntime::CompleteDelivery(const TradeShipmentId shipment,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/trade.cpp:531
game::TradeRuntime::Terminate(const TradeShipmentId shipment,const TradeShipmentStage terminal_stage,const TradeOperationReason reason,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/trade.cpp:568
game::TradeRuntime::FailExpiredObligation(const TradeShipmentId shipment,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/trade.cpp:623
game::TradeRuntime::CancelShipment(const TradeShipmentId shipment,const std::uint64_t tick,WorkLifecycleRuntime & work,ResourceEconomyRuntime & resources)methodInventory only; no authored contract note.src/game/trade.cpp:637
game::TradeRuntime::FindShipment(const TradeShipmentId shipment) constmethodInventory only; no authored contract note.src/game/trade.cpp:646
game::TradeRuntime::ShipmentIds() constmethodInventory only; no authored contract note.src/game/trade.cpp:651
game::TradeRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/trade.cpp:661
game::TradeRuntime::DescribeBottleneck(const TradeShipmentId shipment,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/trade.cpp:673
game::TradeRuntime::DescribeExchangeTerms(const TradeShipmentId shipment) constmethodInventory only; no authored contract note.src/game/trade.cpp:704
game::TradeShipmentId::operator bool() constinline methodInventory only; no authored contract note.src/game/trade.hpp:26
game::TradeOperationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/trade.hpp:118
game::TradeBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/trade.hpp:214
game::NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(ResourceId,value)free functionInventory only; no authored contract note.src/game/trade_serialization.cpp:46
game::DeserializeTradeState(const std::string_view document)free functionInventory only; no authored contract note.src/game/trade_serialization.cpp:91
game::TradeSerializationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/trade_serialization.hpp:15
game::TradeDeserializationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/trade_serialization.hpp:22
StateCode(const State state)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:13
IsTerminal(const JobState state)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:17
IsTerminal(const WorkTaskState state)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:22
IsTerminal(const AssignmentOrderState state)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:27
HasLiveClaim(const JobRecord & job)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:32
IsValidSource(const WorkSourceMarker source)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:37
IsValidSubject(const ReservationSubject subject)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:51
IsValidQueuePolicy(const AssignmentQueuePolicy policy)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:64
CanAllocate(const std::uint64_t next_id,const std::size_t size)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:69
IncrementRevision(std::uint64_t & revision)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:74
CanIncrementRevision(const std::uint64_t revision)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:82
IsLegalDemandTransition(const DemandState from,const DemandState to,const WorkTransitionReason reason)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:88
IsLegalJobTransition(const JobState from,const JobState to,const WorkTransitionReason reason)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:98
IsLegalTaskTransition(const WorkTaskState from,const WorkTaskState to,const WorkTransitionReason reason)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:122
IsLegalReservationTransition(const ReservationState from,const ReservationState to,const WorkTransitionReason reason)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:140
IsLegalOrderTransition(const AssignmentOrderState from,const AssignmentOrderState to,const WorkTransitionReason reason)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:156
RejectedCreation(const WorkRecordKind kind,const WorkTransitionReason reason,const std::uint64_t tick,std::string detail)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:182
RejectedClaimPreview(std::string error)internal helperInventory only; no authored contract note.src/game/work_lifecycle.cpp:195
game::WorkLifecycleRuntime::RecordTransition(WorkTransitionResult result)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:201
game::WorkLifecycleRuntime::EnsureAppliedTransitionCapacity(const std::size_t transition_count) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:238
game::WorkLifecycleRuntime::CanApplyTransitions(const std::size_t transition_count) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:245
game::WorkLifecycleRuntime::HasOtherLiveJobClaim(const sim::PersistentId actor,const JobId except) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:251
game::WorkLifecycleRuntime::UpdateLiveJobClaimIndex(const JobRecord & previous,const JobRecord & current)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:258
game::WorkLifecycleRuntime::PreflightJobCleanup(const JobId job,const std::uint64_t tick,std::size_t & transition_count,std::string & detail) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:283
game::WorkLifecycleRuntime::CreateDemand(WorkSourceMarker source,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:328
game::WorkLifecycleRuntime::CreateJob(const DemandId demand,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:370
game::WorkLifecycleRuntime::CreateTask(const JobId job,const std::uint32_t ordinal,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:414
game::WorkLifecycleRuntime::CreateReservation(const JobId job,const ReservationSubject subject,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:470
game::WorkLifecycleRuntime::PreviewJobClaimWithReservation(const JobId job,const sim::PersistentId actor,const ReservationSubject subject,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:523
game::WorkLifecycleRuntime::PreviewAssignedJobClaimWithReservation(const AssignmentOrderId order,const JobId job,const sim::PersistentId actor,const ReservationSubject subject,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:529
game::WorkLifecycleRuntime::PreviewJobClaimWithReservation(const std::optional<AssignmentOrderId> authorized_order,const JobId job,const sim::PersistentId actor,const ReservationSubject subject,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:535
game::WorkLifecycleRuntime::ClaimJobWithReservation(const JobId job,const sim::PersistentId actor,const ReservationSubject subject,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:610
game::WorkLifecycleRuntime::ClaimAssignedJobWithReservation(const AssignmentOrderId order,const JobId job,const sim::PersistentId actor,const ReservationSubject subject,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:635
game::WorkLifecycleRuntime::CreateAssignmentOrder(const WorkSourceMarker source,const sim::PersistentId actor,const JobId job,const WorkTaskId initial_task,const sim::SiteId target_site,const AssignmentQueuePolicy queue_policy,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:660
game::WorkLifecycleRuntime::PreviewCreateWorkGraph(const WorkSourceMarker source,const std::uint32_t task_count) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:743
game::WorkLifecycleRuntime::CreateWorkGraph(const WorkSourceMarker source,const std::uint32_t task_count,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:763
game::WorkLifecycleRuntime::PreviewCompleteWorkGraph(const DemandId demand,const JobId job,const WorkTaskId final_task,const ReservationId reservation,const std::uint64_t tick) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:794
game::WorkLifecycleRuntime::CompleteWorkGraph(const DemandId demand,const JobId job,const WorkTaskId final_task,const ReservationId reservation,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:863
game::WorkLifecycleRuntime::TransitionDemand(const DemandId demand,const DemandState target,const WorkTransitionReason reason,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:887
game::WorkLifecycleRuntime::TransitionJob(const JobId job,const JobState target,const WorkTransitionReason reason,const std::uint64_t tick,const std::optional<sim::PersistentId> claimant)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:974
game::WorkLifecycleRuntime::PreviewReleaseActiveJobForHandoff(const JobId job,const WorkTaskId active_task,const ReservationId delivered_reservation,const std::uint64_t tick) constmethodValidates the exact active Job, build task, delivered reservation, tick, and absence of a live player assignment required for autonomous handoff.src/game/work_lifecycle.cpp:1182
game::WorkLifecycleRuntime::ReleaseActiveJobForHandoff(const JobId job,const WorkTaskId active_task,const ReservationId delivered_reservation,const std::uint64_t tick)methodConsumes the delivered build reservation, returns its active task to pending, and makes the Job available with no claimant for replacement.src/game/work_lifecycle.cpp:1211
game::WorkLifecycleRuntime::PreviewClaimReleasedActiveJob(const JobId job,const WorkTaskId pending_task,const sim::PersistentId claimant,const ReservationSubject subject,const std::uint64_t tick) constmethodValidates one replacement Actor against the released Job and pending build task, rejects another live claim, and previews the new reservation without mutation.src/game/work_lifecycle.cpp:1255
game::WorkLifecycleRuntime::ClaimReleasedActiveJob(const JobId job,const WorkTaskId pending_task,const sim::PersistentId claimant,const ReservationSubject subject,const std::uint64_t tick)methodCreates the replacement reservation, claims and activates the released Job, and returns the pending build task to active execution.src/game/work_lifecycle.cpp:1275
game::WorkLifecycleRuntime::TransitionTask(const WorkTaskId task,const WorkTaskState target,const WorkTransitionReason reason,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1308
game::WorkLifecycleRuntime::TransitionReservation(const ReservationId reservation,const ReservationState target,const WorkTransitionReason reason,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1362
game::WorkLifecycleRuntime::TransitionAssignmentOrder(const AssignmentOrderId order,const AssignmentOrderState target,const WorkTransitionReason reason,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1411
game::WorkLifecycleRuntime::CancelAssignmentOrderByPlayerCommand(const AssignmentOrderId order,const std::uint64_t expected_order_revision,const std::uint64_t command_sequence,const bool continues_current_plan,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1480
game::WorkLifecycleRuntime::SetPlayerPriority(const JobId id,const std::uint64_t expected_job_revision,const std::uint16_t priority_basis_points,const std::uint64_t tick)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1539
game::WorkLifecycleRuntime::CleanupJob(const JobId job,const WorkTransitionReason reason,const std::uint64_t tick,const bool fail_children)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1576
game::WorkLifecycleRuntime::CleanupDemand(const DemandId demand,const std::uint64_t tick,const bool fail_children)methodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1608
game::WorkLifecycleRuntime::FindDemand(const DemandId demand) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1621
game::WorkLifecycleRuntime::FindJob(const JobId job) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1626
game::WorkLifecycleRuntime::FindTask(const WorkTaskId task) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1631
game::WorkLifecycleRuntime::FindReservation(const ReservationId reservation) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1637
game::WorkLifecycleRuntime::FindAssignmentOrder(const AssignmentOrderId order) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1643
game::WorkLifecycleRuntime::AvailableJobs(const std::size_t limit) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1648
game::WorkLifecycleRuntime::LatestLiveAssignmentOrderForActor(const sim::PersistentId actor) constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1667
game::WorkLifecycleRuntime::QueuedAssignmentOrders() constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1679
game::WorkLifecycleRuntime::TransitionCounters() constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1691
game::WorkLifecycleRuntime::LastTransition() constmethodInventory only; no authored contract note.src/game/work_lifecycle.cpp:1695
game::WorkClaimReservationPreview::Succeeded() constinline methodInventory only; no authored contract note.src/game/work_lifecycle.hpp:16
game::WorkClaimReservationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/work_lifecycle.hpp:27
game::WorkGraphCreateResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/work_lifecycle.hpp:41
game::WorkGraphCompletionPreview::Succeeded() constinline methodInventory only; no authored contract note.src/game/work_lifecycle.hpp:49
game::WorkGraphCreationPreview::Succeeded() constinline methodInventory only; no authored contract note.src/game/work_lifecycle.hpp:55
game::WorkHandoffClaimResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/work_lifecycle.hpp:62
game::WorkLifecycleBuildResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/work_lifecycle.hpp:215
InsertRecords(const std::vector<Record> & records,std::map<Id,Record> & output,std::string_view label,std::string & error)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:13
ValidateNextId(const std::map<Id,Record> & records,const std::uint64_t next_id,std::string_view label,std::string & error)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:34
IsValid(const WorkSourceKind kind)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:47
IsValid(const ReservationSubjectKind kind)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:67
IsValid(const AssignmentQueuePolicy policy)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:83
IsValid(const AssignmentReturnPolicy policy)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:92
IsValid(const DemandState state)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:96
IsValid(const JobState state)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:107
IsValid(const WorkTaskState state)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:120
IsValid(const ReservationState state)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:132
IsValid(const AssignmentOrderState state)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:142
IsValid(const WorkRecordKind kind)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:156
IsValid(const WorkTransitionReason reason)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:168
IsValid(const WorkTransitionStatus status)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:188
ValidateRecordHistory(const Record & record,std::string_view label,std::string & error)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:199
IsTerminal(const DemandState state)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:217
IsTerminal(const JobState state)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:219
IsTerminal(const WorkTaskState state)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:224
IsTerminal(const ReservationState state)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:229
IsTerminal(const AssignmentOrderState state)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:231
HasValidHistory(const DemandRecord & record)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:236
HasValidHistory(const JobRecord & record)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:250
HasValidHistory(const WorkTaskRecord & record)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:271
HasValidHistory(const ReservationRecord & record)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:289
HasValidHistory(const AssignmentOrderRecord & record)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:303
IsValidStateCode(const WorkRecordKind kind,const std::uint8_t value)internal helperInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:325
game::ValidateWorkLifecycleState(const WorkLifecycleState & state,std::string & error)free functionInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:343
game::WorkLifecycleRuntime::WorkLifecycleRuntime(WorkLifecycleState state,std::map<DemandId,DemandRecord> demands,std::map<JobId,JobRecord> jobs,std::map<WorkTaskId,WorkTaskRecord> tasks,std::map<ReservationId,ReservationRecord> reservations,std::map<AssignmentOrderId,AssignmentOrderRecord> assignment_orders)methodInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:634
game::BuildWorkLifecycleCandidate(WorkLifecycleState state)free functionInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:677
game::WorkLifecycleRuntime::CaptureState() constmethodInventory only; no authored contract note.src/game/work_lifecycle_state.cpp:713
game::WorkRecordKindName(const WorkRecordKind kind)free functionInventory only; no authored contract note.src/game/work_lifecycle_types.cpp:5
game::WorkTransitionReasonName(const WorkTransitionReason reason)free functionInventory only; no authored contract note.src/game/work_lifecycle_types.cpp:21
game::WorkTransitionStatusName(const WorkTransitionStatus status)free functionInventory only; no authored contract note.src/game/work_lifecycle_types.cpp:53
game::DemandStateName(const DemandState state)free functionInventory only; no authored contract note.src/game/work_lifecycle_types.cpp:65
game::JobStateName(const JobState state)free functionInventory only; no authored contract note.src/game/work_lifecycle_types.cpp:79
game::WorkTaskStateName(const WorkTaskState state)free functionInventory only; no authored contract note.src/game/work_lifecycle_types.cpp:97
game::ReservationStateName(const ReservationState state)free functionInventory only; no authored contract note.src/game/work_lifecycle_types.cpp:113
game::AssignmentQueuePolicyName(const AssignmentQueuePolicy policy)free functionInventory only; no authored contract note.src/game/work_lifecycle_types.cpp:125
game::AssignmentReturnPolicyName(const AssignmentReturnPolicy policy)free functionInventory only; no authored contract note.src/game/work_lifecycle_types.cpp:135
game::AssignmentOrderStateName(const AssignmentOrderState state)free functionInventory only; no authored contract note.src/game/work_lifecycle_types.cpp:143
game::DemandId::operator bool() constinline methodInventory only; no authored contract note.src/game/work_lifecycle_types.hpp:22
game::JobId::operator bool() constinline methodInventory only; no authored contract note.src/game/work_lifecycle_types.hpp:30
game::WorkTaskId::operator bool() constinline methodInventory only; no authored contract note.src/game/work_lifecycle_types.hpp:38
game::ReservationId::operator bool() constinline methodInventory only; no authored contract note.src/game/work_lifecycle_types.hpp:46
game::AssignmentOrderId::operator bool() constinline methodInventory only; no authored contract note.src/game/work_lifecycle_types.hpp:54
game::JobPriorityMutationResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/work_lifecycle_types.hpp:237
game::WorkCreateResult::Succeeded() constinline methodInventory only; no authored contract note.src/game/work_lifecycle_types.hpp:311
StateFor(const KnowledgeFreshness freshness)internal helperInventory only; no authored contract note.src/game/world_player_read.cpp:8
game::BuildPlayerWorldRead(const ObserverKnowledgeSnapshot * knowledge)free functionInventory only; no authored contract note.src/game/world_player_read.cpp:15
System S.8

#Render and Selection

Isometric projection, camera state, render-scene extraction and ordering, world-space selection, render debug state, SDL asset decoding, and SDL presentation.

Owner

Isometric projection, camera state, render-scene extraction and ordering, world-space selection, render debug state, SDL asset decoding, and SDL presentation.

Dependencies

Controls and simulation provide backend-neutral input/state. SDL3, SDL3_image, and SDL3_ttf are private dependencies of the SDL backend path. Render has no dependency on developer tools.

Authoritative state

IsometricCamera, IsometricSelection, and RenderDebugState own presentation-only state. IsometricCameraState is a validated detached replay value. RenderScene, ActorSpritePresentation, StaticSpritePresentation, WorldLandscapePresentation, and RuntimePresentation are rebuilt from current runtime truth and have no save authority. SdlPresentationAssets owns the logo and font resources. SdlActorSpriteAtlas owns the optional villager texture family. SdlStaticSpriteAtlases owns the scene and landscape world-prop texture set. SdlGroundTiles owns the optional grass texture and reusable geometry scratch storage. The SDL renderer retains only a non-owning optional overlay pointer.

Execution path

  1. Camera and selection adapters translate ControlState into render-owned commands and input records.
  2. Projection maps world ground coordinates to screen pixels and reverses that mapping for picking. Pointer-centered zoom preserves the world point beneath the cursor.
  3. Camera capture and restore validate bounds, viewport, center, and zoom before replay can replace camera-owned state.
  4. RenderService exposes narrow camera capture and restore operations so the graphical composition path can reset render-owned camera state without exposing backend internals.
  5. Selection merges authored ECS candidates with authoritative Actor overrides by stable ID, culls offscreen hit candidates, and performs point or marquee tests in world/presentation space. In the Actor-aware gameplay path, a marquee includes only Actor candidates so resource props and structures do not enter unit commands; direct clicks can still inspect those props. Normal click and drag replace selection. Shift-click toggles one hit, Shift-drag adds marquee hits once, and empty additive gestures preserve selection.
  6. Scene extraction merges authored ECS proxies with Actor overrides, validates and culls projected footprints, then sorts visible proxies by projected ground depth with persistent ID as the tie-breaker.
  7. The app requests image and font byte buffers from AssetService. SdlPresentationAssets decodes those buffers without opening files and commits both resources only after the complete set succeeds.
  8. The optional Actor atlas family decodes every distinct immutable AssetService image, verifies common dimensions against validated metadata, and commits the complete texture set transactionally. The detached presentation carries the Actor-owned stable variation key and five retained trait indices plus the current derived child, adolescent, adult, or elder stage. BuildActorVisualSignature normalizes those traits through asset-authored cardinalities, chooses one validated texture, quantizes bounded tint, applies body-width and face-height ranges, and derives finite batch and visible keys. Invalid indices wrap to the same canonical trait; an invalid stage uses the first validated life-stage record. Nothing is saved by Render. Moving Actor presentations select a direction and alternate idle and walk source frames from the simulation tick. Idle Actors retain the directional idle frame. The authored feet anchor is placed at the authoritative projected ground point.
  9. App resolves each scene entity and resident World landscape feature into disposable atlas and frame records. The SDL backend loads every scene- and landscape-referenced atlas transactionally from immutable AssetService bytes, then depth-orders landscape, buildings, and Actors by authoritative ground position. Actor sprites take precedence for embodied Actors; unresolved optional static scene art preserves the procedural proxy.
  10. The Phase 13D reduced-motion preference is renderer-owned presentation state. When enabled, walking Actors retain their directional idle source frame while authoritative World movement, Actor position, selection, and simulation ticks continue unchanged.
  11. The optional grass image decodes from immutable AssetService bytes, validates as a square source, and commits transactionally. Resident chunks render in one geometry submission with stable texture orientation. World land and crop stages tint irregular cells; road planning, completion, damage, and breakage derive trampled or road treatments; operational fence and gate edges draw during normal play. The subdued grid remains a separate developer overlay.
  12. SdlRenderService::Present builds the scene, draws the textured or procedural ground and depth-ordered entities, substitutes an Actor sprite or keyed static sprite only when validated art and derived presentation are available, otherwise preserves the procedural proxy, then draws optional debug/selection layers, cached presentation assets, the optional SdlRenderOverlay, and the frame.
  13. SdlRenderService::PresentOverlayFrame clears and presents an overlay-only frame for the application front end and pending-load feedback. It does not construct a gameplay scene or require an ECS world.

Key types and contracts

  • WorldPoint, ScreenPoint, ViewportSize, and ProjectionView keep coordinate spaces explicit.
  • CameraCommand and RenderDebugCommand are render-owned requests; their state is not simulation truth. IsometricCameraState contains replayable bounds and view values.
  • SelectionState exposes cursor, hover, selected IDs, marquee, visible candidates, and bounded work counts as read-only views. RenderSceneWorkSnapshot reports ECS and Actor inputs, overrides, candidates, culled and visible counts, and diagnostic build time.
  • PresentationAssetSource is a non-owning ID and immutable byte view valid only during decode. PresentationAssetStatus is a plain diagnostic snapshot.
  • ActorSpritePresentation carries stable ID, facing, walking state, retained appearance traits, derived life stage, and one detached semantic layer mask for the current frame. ActorVisualSignature is a disposable texture, tint, proportion, batch, and visible selection derived from that record and immutable Assets. Render draws only compatible asset-authored work, equipment, condition, and weather geometry; it has no save or mutation authority. ActorSpriteAtlasStatus reports decoded image dimensions, validated variant and layer counts, the finite visual batch capacity, and resource lifecycle counters.
  • StaticSpritePresentation carries only stable entity ID, atlas ID, and frame key. WorldLandscapePresentation carries current primary and deterministic fallback frames derived by App. StaticSpriteAtlasStatus reports decoded atlases, resource lifecycle counters, and the latest landscape candidate, camera-visible, and draw-call totals. Render reuses one visible-landscape scratch vector each frame.
  • GroundTileStatus reports decoded image dimensions, resource lifecycle counters, and the most recent tile and geometry-submission counts without terrain authority.
  • RenderService is the platform-neutral backend contract; SdlRenderService is the current graphical implementation. SdlRenderOverlay is the narrow SDL-specific extension point implemented by the optional tools backend. SDL types do not enter the platform-neutral render, simulation, or game contracts.
56 source files in this module
212 indexed function definitions

This is source evidence, not an ownership contract. Rows without an authored note make no behavioral claim.

FunctionKindAuthored note statusSource
render::ActorPresentationLayerBit(const core::SpritePresentationLayerKind kind)free functionInventory only; no authored contract note.src/render/actor_sprite_presentation.hpp:38
render::HasActorPresentationLayer(const ActorSpritePresentation & presentation,const core::SpritePresentationLayerKind kind)free functionInventory only; no authored contract note.src/render/actor_sprite_presentation.hpp:43
NormalizeTrait(const std::uint16_t value,const std::uint16_t count)internal helperInventory only; no authored contract note.src/render/actor_visual_signature.cpp:10
TraitBucket(const std::uint16_t value,const std::uint16_t count,const std::uint8_t bucket_count)internal helperInventory only; no authored contract note.src/render/actor_visual_signature.cpp:14
Interpolate(const Value minimum,const Value maximum,const std::uint32_t numerator,const std::uint32_t denominator)internal helperInventory only; no authored contract note.src/render/actor_visual_signature.cpp:25
Modulate(const std::uint8_t authored,const std::uint8_t derived)internal helperInventory only; no authored contract note.src/render/actor_visual_signature.cpp:35
Mix(std::uint64_t & value,const std::uint64_t fact)internal helperInventory only; no authored contract note.src/render/actor_visual_signature.cpp:40
render::BuildActorVisualSignature(const ActorSpritePresentation & presentation,const core::SpriteAtlasDefinition & atlas)free functionInventory only; no authored contract note.src/render/actor_visual_signature.cpp:46
render::ActorVisualBatchCapacity(const core::SpriteAtlasDefinition & atlas)free functionInventory only; no authored contract note.src/render/actor_visual_signature.cpp:117
render::MapCameraControls(const controls::ControlState & controls,const std::chrono::nanoseconds frame_delta)free functionConverts held pan actions and pressed/scroll zoom actions into frame-scaled camera commands.src/render/camera_input_mapper.cpp:14
ViewportPosition(const std::optional<core::PointerPosition> position,const std::optional<ViewportRect> viewport)internal helperInventory only; no authored contract note.src/render/contextual_move_input_mapper.cpp:6
MapContextualMoveControls(const controls::ControlState & controls,const std::optional<ViewportRect> viewport)internal helperCopies one exact secondary-pointer release with replace or Shift-queue mode, plus the X cancellation edge, from Controls into backend-neutral contextual-move input without reading selection or gameplay state.src/render/contextual_move_input_mapper.cpp:23
render::MapContextualMoveControls(const controls::ControlState & controls)free functionCopies one exact secondary-pointer release with replace or Shift-queue mode, plus the X cancellation edge, from Controls into backend-neutral contextual-move input without reading selection or gameplay state.src/render/contextual_move_input_mapper.cpp:36
render::MapContextualMoveControls(const controls::ControlState & controls,const ViewportRect viewport)free functionCopies one exact secondary-pointer release with replace or Shift-queue mode, plus the X cancellation edge, from Controls into backend-neutral contextual-move input without reading selection or gameplay state.src/render/contextual_move_input_mapper.cpp:40
Valid(const GroundChunkPresentation & chunk)internal helperInventory only; no authored contract note.src/render/ground_terrain.cpp:11
ChunkEdgeMeters(const GroundChunkPresentation & chunk)internal helperInventory only; no authored contract note.src/render/ground_terrain.cpp:16
render::VisibleGroundChunk::TileCount() constmethodInventory only; no authored contract note.src/render/ground_terrain.cpp:22
render::CullGroundChunks(const std::span<const GroundChunkPresentation> chunks,const IsometricProjection & projection,const ProjectionView & view)free functionInventory only; no authored contract note.src/render/ground_terrain.cpp:28
render::CameraBoundsForGroundChunks(const std::span<const GroundChunkPresentation> chunks)free functionInventory only; no authored contract note.src/render/ground_terrain.cpp:92
IsFinite(const WorldPoint point)internal helperInventory only; no authored contract note.src/render/isometric_camera.cpp:13
IsFinite(const ViewportSize viewport)internal helperInventory only; no authored contract note.src/render/isometric_camera.cpp:15
HasValidBounds(const CameraBounds bounds)internal helperRequires finite ordered world and zoom limits and requires the default center and zoom to fit inside those limits.src/render/isometric_camera.cpp:19
render::IsometricCamera::IsometricCamera(const CameraBounds bounds)methodInventory only; no authored contract note.src/render/isometric_camera.cpp:30
render::IsometricCamera::Apply(const std::span<const CameraCommand> commands,const IsometricProjection & projection)methodApplies either one camera command or an ordered command span; pan, discrete zoom, wheel zoom, and reset remain camera-owned mutations.src/render/isometric_camera.cpp:37
render::IsometricCamera::SetViewport(const ViewportSize viewport)methodInventory only; no authored contract note.src/render/isometric_camera.cpp:44
render::IsometricCamera::CenterOn(const WorldPoint target,std::string & error)methodInventory only; no authored contract note.src/render/isometric_camera.cpp:51
render::IsometricCamera::SetBounds(const CameraBounds bounds,std::string & error)methodInventory only; no authored contract note.src/render/isometric_camera.cpp:62
render::IsometricCamera::Reset()methodRestores the configured initial center and zoom, then clamps the result to current camera bounds.src/render/isometric_camera.cpp:73
render::IsometricCamera::View() constmethodInventory only; no authored contract note.src/render/isometric_camera.cpp:79
render::IsometricCamera::Bounds() constmethodInventory only; no authored contract note.src/render/isometric_camera.cpp:87
render::IsometricCamera::CaptureState() constmethodCopies camera bounds, world center, viewport size, and zoom into detached replay state.src/render/isometric_camera.cpp:89
render::IsometricCamera::RestoreState(const IsometricCameraState & state,std::string & error)methodValidates detached camera state before replacing every camera-owned bound and view value.src/render/isometric_camera.cpp:93
render::IsometricCamera::ValidateState(const IsometricCameraState & state,std::string & error)methodRejects non-finite or unordered bounds, non-positive viewports, and center or zoom values outside the saved camera limits.src/render/isometric_camera.cpp:105
render::IsometricCamera::Apply(const CameraCommand command,const IsometricProjection & projection)methodApplies either one camera command or an ordered command span; pan, discrete zoom, wheel zoom, and reset remain camera-owned mutations.src/render/isometric_camera.cpp:126
render::IsometricCamera::ZoomAtPointer(const double zoom_steps,const ScreenPoint anchor,const IsometricProjection & projection)methodChanges zoom within bounds while adjusting camera center so the same world point remains beneath the pointer.src/render/isometric_camera.cpp:169
render::IsometricCamera::Clamp()methodClamps finite center and zoom values to the documented camera bounds; public camera boundaries reject non-finite values before mutation.src/render/isometric_camera.cpp:185
render::IsometricProjection::IsometricProjection(const double tile_width_pixels,const double tile_height_pixels)methodInventory only; no authored contract note.src/render/isometric_projection.cpp:8
render::IsometricProjection::WorldToScreen(const WorldPoint world,const ProjectionView & view) constmethodProjects a world-plane point into screen pixels using the configured 2:1 basis, camera center, zoom, and viewport center.src/render/isometric_projection.cpp:18
render::IsometricProjection::ScreenToWorld(const ScreenPoint screen,const ProjectionView & view) constmethodInverts the 2:1 projection from screen pixels back onto the world ground plane.src/render/isometric_projection.cpp:30
render::IsometricProjection::TileWidthPixels() constmethodInventory only; no authored contract note.src/render/isometric_projection.cpp:42
render::IsometricProjection::TileHeightPixels() constmethodInventory only; no authored contract note.src/render/isometric_projection.cpp:46
IsFinite(const ScreenPoint point)internal helperInventory only; no authored contract note.src/render/isometric_selection.cpp:22
IsValid(const sim::SelectableState & candidate)internal helperInventory only; no authored contract note.src/render/isometric_selection.cpp:24
IsValid(const ProjectionView & view)internal helperInventory only; no authored contract note.src/render/isometric_selection.cpp:32
IsValid(const SelectionInput & input)internal helperInventory only; no authored contract note.src/render/isometric_selection.cpp:39
IdLess(const sim::SelectableState & left,const sim::SelectableState & right)internal helperInventory only; no authored contract note.src/render/isometric_selection.cpp:47
HasDuplicateIds(const std::span<const sim::SelectableState> states)internal helperInventory only; no authored contract note.src/render/isometric_selection.cpp:51
GroundPosition(const sim::SelectableState & candidate)internal helperInventory only; no authored contract note.src/render/isometric_selection.cpp:55
IsInFrontOf(const sim::SelectableState & candidate,const sim::SelectableState & current)internal helperInventory only; no authored contract note.src/render/isometric_selection.cpp:59
PickAtWorld(const std::span<const sim::SelectableState> candidates,const WorldPoint point)internal helperTests all valid candidate footprints at a world point and returns the deterministic frontmost hit plus the number tested.src/render/isometric_selection.cpp:66
FootprintIntersectsMarquee(const sim::SelectableState & candidate,const SelectionMarquee marquee,const IsometricProjection & projection,const ProjectionView & view)internal helperInventory only; no authored contract note.src/render/isometric_selection.cpp:88
DragDistanceSquared(const SelectionMarquee marquee)internal helperInventory only; no authored contract note.src/render/isometric_selection.cpp:107
DifferenceCount(const std::span<const sim::PersistentId> values,const std::span<const sim::PersistentId> other)internal helperInventory only; no authored contract note.src/render/isometric_selection.cpp:113
render::SelectionModeName(const SelectionMode mode)free functionInventory only; no authored contract note.src/render/isometric_selection.cpp:121
render::SelectionGestureName(const SelectionGesture gesture)free functionInventory only; no authored contract note.src/render/isometric_selection.cpp:131
render::SelectionState::CursorScreen() constmethodInventory only; no authored contract note.src/render/isometric_selection.cpp:143
render::SelectionState::CursorWorld() constmethodInventory only; no authored contract note.src/render/isometric_selection.cpp:145
render::SelectionState::Hovered() constmethodInventory only; no authored contract note.src/render/isometric_selection.cpp:147
render::SelectionState::Selected() constmethodInventory only; no authored contract note.src/render/isometric_selection.cpp:149
render::SelectionState::IsSelected(const sim::PersistentId id) constmethodInventory only; no authored contract note.src/render/isometric_selection.cpp:151
render::SelectionState::PickVisible(const ScreenPoint screen,const IsometricProjection & projection,const ProjectionView & view) constmethodInventory only; no authored contract note.src/render/isometric_selection.cpp:155
render::SelectionState::Marquee() constmethodInventory only; no authored contract note.src/render/isometric_selection.cpp:164
render::SelectionState::HitCandidateCount() constmethodInventory only; no authored contract note.src/render/isometric_selection.cpp:166
render::SelectionState::Candidates() constmethodInventory only; no authored contract note.src/render/isometric_selection.cpp:168
render::SelectionState::Work() constmethodInventory only; no authored contract note.src/render/isometric_selection.cpp:172
render::SelectionState::LastCommit() constmethodInventory only; no authored contract note.src/render/isometric_selection.cpp:174
render::IsometricSelection::Update(const sim::EcsWorld & world,const SelectionInput & input,const IsometricProjection & projection,const ProjectionView & view,std::string & error)methodValidates input and view, merges stable-ID Actor overrides with authored candidates, culls offscreen footprints, captures replace or additive mode at gesture start, and commits click or marquee selection transitions.src/render/isometric_selection.cpp:176
render::IsometricSelection::Update(const sim::EcsWorld & world,const std::span<const sim::SelectableState> actor_selectables,const SelectionInput & input,const IsometricProjection & projection,const ProjectionView & view,std::string & error)methodValidates input and view, merges stable-ID Actor overrides with authored candidates, culls offscreen footprints, captures replace or additive mode at gesture start, and commits click or marquee selection transitions.src/render/isometric_selection.cpp:182
render::IsometricSelection::UpdateImpl(const sim::EcsWorld & world,const std::span<const sim::SelectableState> actor_selectables,const bool actor_only_marquee,const SelectionInput & input,const IsometricProjection & projection,const ProjectionView & view,std::string & error)methodInventory only; no authored contract note.src/render/isometric_selection.cpp:189
render::IsometricSelection::State() constmethodInventory only; no authored contract note.src/render/isometric_selection.cpp:297
render::IsometricSelection::RemoveStaleSelection()methodInventory only; no authored contract note.src/render/isometric_selection.cpp:299
render::IsometricSelection::CommitClick(const ScreenPoint screen,const SelectionMode mode,const IsometricProjection & projection,const ProjectionView & view)methodInventory only; no authored contract note.src/render/isometric_selection.cpp:307
render::IsometricSelection::CommitMarquee(const SelectionMarquee marquee,const IsometricProjection & projection,const ProjectionView & view)methodCommits stable marquee hits and, in the Actor-aware gameplay path, excludes non-Actor scene candidates while preserving direct prop inspection.src/render/isometric_selection.cpp:341
render::IsometricSelection::UpdateHover(const IsometricProjection & projection,const ProjectionView & view)methodInventory only; no authored contract note.src/render/isometric_selection.cpp:375
render::RenderDebugState::Apply(const std::span<const RenderDebugCommand> commands)methodToggles procedural-grid, render-bounds, selection-query, and selection-overlay visibility from ordered debug commands.src/render/render_debug_controls.cpp:7
render::RenderDebugState::Visibility() constmethodInventory only; no authored contract note.src/render/render_debug_controls.cpp:26
render::MapRenderDebugControls(const controls::ControlState & controls)free functionInventory only; no authored contract note.src/render/render_debug_controls.cpp:28
render::DescribeRenderDebugVisibility(const RenderDebugVisibility visibility)free functionFormats the four render debug visibility flags into the compact diagnostics string shown by the SDL backend.src/render/render_debug_controls.cpp:71
render::CaptureRenderInspection(const RenderScene & scene,const IsometricProjection & projection,const ProjectionView view)free functionInventory only; no authored contract note.src/render/render_inspection.cpp:5
IsValid(const sim::RenderProxyState & state)internal helperInventory only; no authored contract note.src/render/render_scene.cpp:14
IsValid(const ProjectionView & view)internal helperInventory only; no authored contract note.src/render/render_scene.cpp:20
IdLess(const sim::RenderProxyState & left,const sim::RenderProxyState & right)internal helperInventory only; no authored contract note.src/render/render_scene.cpp:27
HasDuplicateIds(const std::span<const sim::RenderProxyState> states)internal helperInventory only; no authored contract note.src/render/render_scene.cpp:31
render::RenderScene::Entities() constmethodInventory only; no authored contract note.src/render/render_scene.cpp:37
render::RenderScene::Work() constmethodInventory only; no authored contract note.src/render/render_scene.cpp:39
render::BuildRenderScene(const sim::EcsWorld & world,const std::span<const sim::RenderProxyState> actor_proxies,const IsometricProjection & projection,const ProjectionView & view,RenderScene & scene,std::string & error)free functionMerges Actor overrides with authored proxies by stable ID, validates and culls projected footprints, records work and timing, and builds a stable visible depth order.src/render/render_scene.cpp:41
render::RenderService::~RenderService()interface contractInventory only; no authored contract note.src/render/render_service.hpp:23
render::RenderService::ApplyCameraCommands(std::span<const CameraCommand> commands)interface contractInventory only; no authored contract note.src/render/render_service.hpp:25
render::RenderService::ApplyDebugCommands(std::span<const RenderDebugCommand> commands)interface contractInventory only; no authored contract note.src/render/render_service.hpp:26
render::RenderService::SetCameraBounds(CameraBounds bounds,std::string & error)interface contractInventory only; no authored contract note.src/render/render_service.hpp:27
render::RenderService::RefreshViewport(std::string & error)interface contractInventory only; no authored contract note.src/render/render_service.hpp:28
render::RenderService::Projection() constinterface contractInventory only; no authored contract note.src/render/render_service.hpp:29
render::RenderService::View() constinterface contractInventory only; no authored contract note.src/render/render_service.hpp:30
render::RenderService::CaptureCameraState() constinterface contractDefines the backend-neutral read operation used to capture the render-owned camera for developer reset.src/render/render_service.hpp:31
render::RenderService::RestoreCameraState(const IsometricCameraState & state,std::string & error)interface contractDefines the backend-neutral validated restore operation used by the graphical reset coordinator.src/render/render_service.hpp:32
render::RenderService::Present(const sim::EcsWorld & world,std::span<const sim::RenderProxyState> actor_proxies,std::span<const ActorSpritePresentation> actor_sprites,std::span<const StaticSpritePresentation> static_sprites,const SelectionState & selection,const RuntimePresentation & presentation,std::string & error)interface contractInventory only; no authored contract note.src/render/render_service.hpp:34
DrawActivityMarker(SDL_Renderer * renderer,const ActorActivityMarker marker,const SDL_FRect & actor_destination,const double zoom,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_actor_sprite_atlas.cpp:26
DrawPresentationLayers(SDL_Renderer * renderer,const core::SpriteAtlasDefinition & definition,const ActorSpritePresentation & presentation,const SDL_FRect & actor_destination,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_actor_sprite_atlas.cpp:83
render::SdlActorSpriteAtlas::TextureDeleter::operator ()(SDL_Texture * texture) constmethodInventory only; no authored contract note.src/render/sdl_actor_sprite_atlas.cpp:163
render::SdlActorSpriteAtlas::~SdlActorSpriteAtlas()methodInventory only; no authored contract note.src/render/sdl_actor_sprite_atlas.cpp:167
render::SdlActorSpriteAtlas::Load(SDL_Renderer * renderer,const std::span<const SpriteAtlasImageSource> images,const core::SpriteAtlasDefinition & definition,std::string & error)methodInventory only; no authored contract note.src/render/sdl_actor_sprite_atlas.cpp:169
render::SdlActorSpriteAtlas::Reset()methodInventory only; no authored contract note.src/render/sdl_actor_sprite_atlas.cpp:252
render::SdlActorSpriteAtlas::Status() constmethodInventory only; no authored contract note.src/render/sdl_actor_sprite_atlas.cpp:267
render::SdlActorSpriteAtlas::Draw(SDL_Renderer * renderer,const RenderSceneEntity & entity,const ActorSpritePresentation & presentation,const std::uint64_t simulation_tick,const bool reduced_motion,const IsometricProjection & projection,const ProjectionView & view,std::string & error) constmethodInventory only; no authored contract note.src/render/sdl_actor_sprite_atlas.cpp:269
CaptureFailure(const bool operation_succeeded,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_contextual_move_markers.cpp:12
DrawEllipse(SDL_Renderer * renderer,const ScreenPoint anchor,const double radius_x,const double radius_y,const std::array<std::uint8_t,4> color,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_contextual_move_markers.cpp:20
FeedbackColor(const ContextualMoveFeedbackPresentation & feedback)internal helperInventory only; no authored contract note.src/render/sdl_contextual_move_markers.cpp:39
render::DrawContextualMoveFeedback(SDL_Renderer * renderer,const ContextualMoveFeedbackPresentation & feedback,const IsometricProjection & projection,const ProjectionView & view,std::string & error)free functionDraws transient accepted, queued, executing, interrupted, cancelled, completed, or rejected move feedback from one detached presentation value.src/render/sdl_contextual_move_markers.cpp:74
CaptureFailure(const bool operation_succeeded,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_debug_geometry.cpp:13
DrawWorldRectangle(SDL_Renderer * renderer,const IsometricProjection & projection,const ProjectionView & view,const double minimum_x,const double maximum_x,const double minimum_y,const double maximum_y,const sim::RenderTint tint,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_debug_geometry.cpp:21
render::DrawRenderDebugBounds(SDL_Renderer * renderer,const IsometricProjection & projection,const ProjectionView & view,const CameraBounds camera_bounds,std::string & error)free functionInventory only; no authored contract note.src/render/sdl_debug_geometry.cpp:48
ToSdlPoint(const ScreenPoint point)internal helperInventory only; no authored contract note.src/render/sdl_ground_tiles.cpp:21
CellVariation(const WorldCellCoordinate cell)internal helperInventory only; no authored contract note.src/render/sdl_ground_tiles.cpp:30
TerrainColor(const GroundTerrainStyle style)internal helperInventory only; no authored contract note.src/render/sdl_ground_tiles.cpp:36
render::SdlGroundTiles::TextureDeleter::operator ()(SDL_Texture * texture) constmethodInventory only; no authored contract note.src/render/sdl_ground_tiles.cpp:68
render::SdlGroundTiles::~SdlGroundTiles()methodInventory only; no authored contract note.src/render/sdl_ground_tiles.cpp:72
render::SdlGroundTiles::Load(SDL_Renderer * renderer,const std::string_view image_id,const std::string_view resolved_path,const std::string_view bytes,std::string & error)methodInventory only; no authored contract note.src/render/sdl_ground_tiles.cpp:74
render::SdlGroundTiles::Reset()methodInventory only; no authored contract note.src/render/sdl_ground_tiles.cpp:123
render::SdlGroundTiles::Status() constmethodInventory only; no authored contract note.src/render/sdl_ground_tiles.cpp:139
render::SdlGroundTiles::Draw(SDL_Renderer * renderer,const IsometricProjection & projection,const ProjectionView & view,const std::span<const GroundChunkPresentation> chunks,std::string & error)methodInventory only; no authored contract note.src/render/sdl_ground_tiles.cpp:141
operator ()(SDL_Surface * surface) constinternal helperDestroys one temporary SDL surface, committed SDL texture, or open TTF font through the matching backend API when its unique owner releases it.src/render/sdl_presentation_assets.cpp:22
DecodeError(const std::string_view kind,const std::string_view decoder,const PresentationAssetSource source)internal helperBuilds a decoder failure that identifies the asset type and stable asset ID, then appends the current SDL error.src/render/sdl_presentation_assets.cpp:26
render::SdlTextureDeleter::operator ()(SDL_Texture * texture) constmethodDestroys one temporary SDL surface, committed SDL texture, or open TTF font through the matching backend API when its unique owner releases it.src/render/sdl_presentation_assets.cpp:35
render::TtfFontDeleter::operator ()(TTF_Font * font) constmethodDestroys one temporary SDL surface, committed SDL texture, or open TTF font through the matching backend API when its unique owner releases it.src/render/sdl_presentation_assets.cpp:39
render::SdlPresentationAssets::~SdlPresentationAssets()methodReleases label texture, font, and image texture before balancing the service's successful TTF initialization.src/render/sdl_presentation_assets.cpp:41
render::SdlPresentationAssets::Load(SDL_Window * window,SDL_Renderer * renderer,const PresentationAssetSource image,const PresentationAssetSource font,std::string & error)methodDecodes PNG and TTF data from immutable memory streams, creates the image and cached label textures, and transactionally replaces the active set only after every step succeeds.src/render/sdl_presentation_assets.cpp:48
render::SdlPresentationAssets::Reset()methodReleases the cached label texture, font, and image texture in dependency order, clears dimensions/load flags, and increments the release counter once per complete active set.src/render/sdl_presentation_assets.cpp:162
render::SdlPresentationAssets::Status() constmethodReturns a plain snapshot of loaded flags, dimensions, font size, attempts, successes, failures, and released sets without exposing SDL handles.src/render/sdl_presentation_assets.cpp:180
render::SdlPresentationAssets::Draw(SDL_Renderer * renderer,std::string & error) constmethodDraws the decoded mark and cached Worldforge label texture at fixed diagnostic-panel positions without file access, image decode, or font rasterization during the frame.src/render/sdl_presentation_assets.cpp:182
render::SdlPresentationAssets::DiagnosticLine() constmethodFormats image dimensions, font point size, and load/failure counters for the SDL diagnostic overlay.src/render/sdl_presentation_assets.cpp:202
CaptureFailure(const bool operation_succeeded,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_procedural_grid.cpp:11
ToSdlPoint(const ScreenPoint point)internal helperInventory only; no authored contract note.src/render/sdl_procedural_grid.cpp:19
DrawWorldLine(SDL_Renderer * renderer,const IsometricProjection & projection,const ProjectionView & view,const WorldPoint start,const WorldPoint end,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_procedural_grid.cpp:26
FillGridPatch(SDL_Renderer * renderer,const IsometricProjection & projection,const ProjectionView & view,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_procedural_grid.cpp:38
DrawGridLines(SDL_Renderer * renderer,const IsometricProjection & projection,const ProjectionView & view,const bool textured,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_procedural_grid.cpp:76
DrawGridOrigin(SDL_Renderer * renderer,const IsometricProjection & projection,const ProjectionView & view,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_procedural_grid.cpp:124
render::DrawProceduralIsometricGrid(SDL_Renderer * renderer,const IsometricProjection & projection,const ProjectionView & view,std::string & error)free functionInventory only; no authored contract note.src/render/sdl_procedural_grid.cpp:139
render::DrawTexturedIsometricGridOverlay(SDL_Renderer * renderer,const IsometricProjection & projection,const ProjectionView & view,const std::span<const GroundChunkPresentation> chunks,std::string & error)free functionInventory only; no authored contract note.src/render/sdl_procedural_grid.cpp:146
render::DrawGroundInfrastructureEdges(SDL_Renderer * renderer,const IsometricProjection & projection,const ProjectionView & view,const std::span<const GroundChunkPresentation> chunks,std::string & error)free functionInventory only; no authored contract note.src/render/sdl_procedural_grid.cpp:186
CaptureFailure(const bool operation_succeeded,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_render_scene.cpp:19
ToSdlColor(const sim::RenderTint tint)internal helperInventory only; no authored contract note.src/render/sdl_render_scene.cpp:27
DrawDiamond(SDL_Renderer * renderer,const ScreenPoint anchor,const double radius_x,const double radius_y,const sim::RenderTint tint,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_render_scene.cpp:37
DrawCircle(SDL_Renderer * renderer,const ScreenPoint anchor,const double radius_x,const double radius_y,const sim::RenderTint tint,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_render_scene.cpp:65
DrawSquare(SDL_Renderer * renderer,const ScreenPoint anchor,const double radius_x,const double radius_y,const sim::RenderTint tint,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_render_scene.cpp:99
DrawEntity(SDL_Renderer * renderer,const RenderSceneEntity & entity,const IsometricProjection & projection,const ProjectionView & view,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_render_scene.cpp:113
render::DrawRenderScene(SDL_Renderer * renderer,const RenderScene & scene,const std::span<const ActorSpritePresentation> actor_sprites,const SdlActorSpriteAtlas & sprite_atlas,const std::span<const StaticSpritePresentation> static_sprites,SdlStaticSpriteAtlases & static_sprite_atlases,const std::span<const WorldLandscapePresentation> landscape,const SelectionState & selection,const bool draw_selection_candidate_bounds,const std::optional<ContextualMoveFeedbackPresentation> & contextual_move_feedback,const std::uint64_t simulation_tick,const bool reduced_motion,const IsometricProjection & projection,const ProjectionView & view,std::string & error)free functionInventory only; no authored contract note.src/render/sdl_render_scene.cpp:135
CaptureFailure(const bool operation_succeeded,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_render_service.cpp:53
DrawPlacementGhost(SDL_Renderer * renderer,const PlacementGhostPresentation & ghost,const IsometricProjection & projection,const ProjectionView & view,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_render_service.cpp:61
render::SdlRenderService::SdlRenderService()methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:127
render::SdlRenderService::~SdlRenderService()methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:129
render::SdlRenderService::Initialize(const std::string_view window_title,const int window_width_pixels,const int window_height_pixels,std::string & error,const bool vertical_sync)methodCreates the SDL window and renderer from validated configuration, releases any prior presentation set in dependency order, and enables vertical synchronization.src/render/sdl_render_service.cpp:138
render::SdlRenderService::LoadPresentationAssets(const PresentationAssetSource image,const PresentationAssetSource font,std::string & error)methodForwards immutable image/font IDs and byte views to the SDL-owned transactional decoder after renderer startup.src/render/sdl_render_service.cpp:167
render::SdlRenderService::LoadActorSpriteAtlas(const std::span<const PresentationAssetSource> images,const core::SpriteAtlasDefinition & definition,std::string & error)methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:173
render::SdlRenderService::LoadStaticSpriteAtlases(const std::span<const StaticSpriteAtlasLoadSource> sources,std::string & error)methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:185
render::SdlRenderService::LoadGroundTiles(const PresentationAssetSource image,std::string & error)methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:190
render::SdlRenderService::InitializeOverlay(SdlRenderOverlay & overlay,std::string & error)methodInitializes a caller-owned SDL overlay with this renderer's window and renderer handles, then retains a non-owning interface pointer for frame submission without depending on tools.src/render/sdl_render_service.cpp:195
render::SdlRenderService::PresentOverlayFrame(const std::string_view window_title,std::string & error)methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:203
render::SdlRenderService::ResetPresentationAssets()methodExplicitly releases the SDL-owned image, font, and cached label set while leaving the renderer available.src/render/sdl_render_service.cpp:223
render::SdlRenderService::ResetActorSpriteAtlas()methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:225
render::SdlRenderService::ResetStaticSpriteAtlases()methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:227
render::SdlRenderService::ResetGroundTiles()methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:229
render::SdlRenderService::PresentationAssets() constmethodReturns the backend's plain presentation-asset status snapshot without exposing SDL resource handles.src/render/sdl_render_service.cpp:231
render::SdlRenderService::ActorSpriteAtlas() constmethodInventory only; no authored contract note.src/render/sdl_render_service.cpp:235
render::SdlRenderService::StaticSpriteAtlases() constmethodInventory only; no authored contract note.src/render/sdl_render_service.cpp:239
render::SdlRenderService::GroundTiles() constmethodInventory only; no authored contract note.src/render/sdl_render_service.cpp:243
render::SdlRenderService::SetReducedMotion(const bool reduced_motion)methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:247
render::SdlRenderService::ReducedMotion() constmethodInventory only; no authored contract note.src/render/sdl_render_service.cpp:251
render::SdlRenderService::ApplyCameraCommands(const std::span<const CameraCommand> commands)methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:253
render::SdlRenderService::ApplyDebugCommands(const std::span<const RenderDebugCommand> commands)methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:257
render::SdlRenderService::SetCameraBounds(const CameraBounds bounds,std::string & error)methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:261
render::SdlRenderService::SetViewportRect(const ViewportRect viewport,std::string & error)methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:265
render::SdlRenderService::RefreshViewport(std::string & error)methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:278
render::SdlRenderService::Projection() constmethodInventory only; no authored contract note.src/render/sdl_render_service.cpp:322
render::SdlRenderService::View() constmethodInventory only; no authored contract note.src/render/sdl_render_service.cpp:326
render::SdlRenderService::CaptureCameraState() constmethodReturns detached bounds, viewport, center, and zoom from the render-owned camera for the reset checkpoint.src/render/sdl_render_service.cpp:328
render::SdlRenderService::CaptureInspection() constmethodInventory only; no authored contract note.src/render/sdl_render_service.cpp:332
render::SdlRenderService::RestoreCameraState(const IsometricCameraState & state,std::string & error)methodValidates and restores render-owned camera state without exposing the SDL backend or mutable camera internals.src/render/sdl_render_service.cpp:334
render::SdlRenderService::CenterCameraOn(const WorldPoint target,std::string & error)methodInventory only; no authored contract note.src/render/sdl_render_service.cpp:338
render::SdlRenderService::Present(const sim::EcsWorld & world,const std::span<const sim::RenderProxyState> actor_proxies,const std::span<const ActorSpritePresentation> actor_sprites,const std::span<const StaticSpritePresentation> static_sprites,const SelectionState & selection,const RuntimePresentation & presentation,std::string & error)methodBuilds and draws one complete frame, applies enabled debug/selection layers, draws the cached mark and font label when developer UI is visible, submits the attached SDL overlay, and calls SDL present.src/render/sdl_render_service.cpp:342
CaptureFailure(const bool operation_succeeded,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_selection_markers.cpp:13
DrawDiamondOutline(SDL_Renderer * renderer,const ScreenPoint anchor,const double radius_x,const double radius_y,const sim::RenderTint tint,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_selection_markers.cpp:21
DrawEllipseOutline(SDL_Renderer * renderer,const ScreenPoint anchor,const double radius_x,const double radius_y,const sim::RenderTint tint,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_selection_markers.cpp:37
DrawEntityMarkers(SDL_Renderer * renderer,const RenderSceneEntity & entity,const SelectionState & selection,const IsometricProjection & projection,const ProjectionView & view,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_selection_markers.cpp:56
DrawMarquee(SDL_Renderer * renderer,const SelectionMarquee marquee,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_selection_markers.cpp:89
DrawPointQuery(SDL_Renderer * renderer,const ScreenPoint cursor,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_selection_markers.cpp:100
render::DrawSelectionGroundMarkersForEntity(SDL_Renderer * renderer,const RenderSceneEntity & entity,const SelectionState & selection,const bool draw_candidate_bounds,const IsometricProjection & projection,const ProjectionView & view,std::string & error)free functionInventory only; no authored contract note.src/render/sdl_selection_markers.cpp:115
render::DrawSelectionQueryBounds(SDL_Renderer * renderer,const SelectionState & selection,std::string & error)free functionInventory only; no authored contract note.src/render/sdl_selection_markers.cpp:141
DrawFrame(SDL_Renderer * renderer,SDL_Texture * texture,const core::StaticSpriteFrameDefinition & frame,const WorldPoint ground_position,const IsometricProjection & projection,const ProjectionView & view,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_static_sprite_atlases.cpp:23
render::SdlStaticSpriteAtlases::TextureDeleter::operator ()(SDL_Texture * texture) constmethodInventory only; no authored contract note.src/render/sdl_static_sprite_atlases.cpp:51
render::SdlStaticSpriteAtlases::~SdlStaticSpriteAtlases()methodInventory only; no authored contract note.src/render/sdl_static_sprite_atlases.cpp:55
render::SdlStaticSpriteAtlases::Load(SDL_Renderer * renderer,const std::span<const StaticSpriteAtlasLoadSource> sources,std::string & error)methodInventory only; no authored contract note.src/render/sdl_static_sprite_atlases.cpp:57
render::SdlStaticSpriteAtlases::Reset()methodInventory only; no authored contract note.src/render/sdl_static_sprite_atlases.cpp:133
render::SdlStaticSpriteAtlases::Status() constmethodInventory only; no authored contract note.src/render/sdl_static_sprite_atlases.cpp:146
render::SdlStaticSpriteAtlases::BeginLandscapeFrame(const LandscapeFrameMetrics metrics)methodInventory only; no authored contract note.src/render/sdl_static_sprite_atlases.cpp:148
render::SdlStaticSpriteAtlases::Draw(SDL_Renderer * renderer,const RenderSceneEntity & entity,const StaticSpritePresentation & presentation,const IsometricProjection & projection,const ProjectionView & view,std::string & error) constmethodInventory only; no authored contract note.src/render/sdl_static_sprite_atlases.cpp:154
render::SdlStaticSpriteAtlases::DrawLandscape(SDL_Renderer * renderer,const WorldLandscapePresentation & presentation,const IsometricProjection & projection,const ProjectionView & view,std::string & error)methodInventory only; no authored contract note.src/render/sdl_static_sprite_atlases.cpp:176
ColorForState(const WorldIndicatorState state)internal helperInventory only; no authored contract note.src/render/sdl_world_indicators.cpp:27
CaptureFailure(const bool operation_succeeded,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_world_indicators.cpp:48
DrawCircleBody(SDL_Renderer * renderer,const CircleBodySpec & body,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_world_indicators.cpp:56
DrawFilledCircle(SDL_Renderer * renderer,const float center_x,const float center_y,const float radius,const IndicatorColor color,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_world_indicators.cpp:77
IsVisible(const ScreenPoint point,const ProjectionView & view)internal helperInventory only; no authored contract note.src/render/sdl_world_indicators.cpp:95
DrawIndicator(SDL_Renderer * renderer,const WorldIndicatorPresentation & indicator,const IsometricProjection & projection,const ProjectionView & view,std::string & error)internal helperInventory only; no authored contract note.src/render/sdl_world_indicators.cpp:102
render::DrawWorldIndicators(SDL_Renderer * renderer,const std::span<const WorldIndicatorPresentation> indicators,const IsometricProjection & projection,const ProjectionView & view,std::string & error)free functionInventory only; no authored contract note.src/render/sdl_world_indicators.cpp:142
ToScreenPoint(const std::optional<core::PointerPosition> position,const std::optional<ViewportRect> viewport)internal helperInventory only; no authored contract note.src/render/selection_input_mapper.cpp:8
MapSelectionControls(const controls::ControlState & controls,const std::optional<ViewportRect> viewport)internal helperBuilds render-owned pointer, press, release, replace/additive mode, and focus-reset selection input from ControlState.src/render/selection_input_mapper.cpp:25
render::MapSelectionControls(const controls::ControlState & controls)free functionBuilds render-owned pointer, press, release, replace/additive mode, and focus-reset selection input from ControlState.src/render/selection_input_mapper.cpp:44
render::MapSelectionControls(const controls::ControlState & controls,const ViewportRect viewport)free functionBuilds render-owned pointer, press, release, replace/additive mode, and focus-reset selection input from ControlState.src/render/selection_input_mapper.cpp:48
render::ProjectedFootprintIntersectsViewport(const sim::Transform2D & transform,const double radius_meters,const IsometricProjection & projection,const ProjectionView & view)free functionConservatively tests the projected ellipse bounding a world-space footprint against the current pixel viewport.src/render/viewport_culling.cpp:7
render::ComputeWorldIndicatorScreenLayout(const WorldIndicatorScreenAnchor anchor,const std::size_t visible_character_count)free functionInventory only; no authored contract note.src/render/world_indicator_layout.cpp:17
render::WorldIndicatorAudienceName(const WorldIndicatorAudience audience)free functionInventory only; no authored contract note.src/render/world_indicator_presentation.hpp:47
render::WorldIndicatorStateName(const WorldIndicatorState state)free functionInventory only; no authored contract note.src/render/world_indicator_presentation.hpp:60
render::CullWorldLandscape(const std::span<const WorldLandscapePresentation> candidates,const IsometricProjection & projection,const ProjectionView & view,std::vector<WorldLandscapePresentation> & visible)free functionInventory only; no authored contract note.src/render/world_landscape_presentation.cpp:7
System S.9

#Developer Tools

Developer inspection and presentation for the current runtime plus reset/fast-forward coordination, versioned recording, replay, checkpoint hashing, first-divergence reporting, and bounded graphical frame benchmarking.

Owner

Developer inspection and presentation for the current runtime plus reset/fast-forward coordination, versioned recording, replay, checkpoint hashing, first-divergence reporting, and bounded graphical frame benchmarking.

Dependencies

The backend-neutral tools library reads App, Assets, and Simulation snapshots, Core events/commands, the Controls-owned binding catalog, and Render presentation values. The optional graphical tools backend privately uses SDL3 and Dear ImGui and implements Render's SDL overlay contract. The separate replay target uses App foundation state, Core commands, Render camera and selection owners, and private nlohmann_json conversion.

Authoritative state

Inspection snapshots for application flow, runtime, World, Known World, Actor, Personhood, Phase 3 and Phase 9 economy, control, parties, player orders, Intersections, incidents, scouting, Phase 5 consequences, selection, assets, script packages, and replay are detached and expose no mutation authority. RuntimeInspectionActions contains only narrow requests routed to existing owners. RuntimePresentation is a render-owned derived frame value built by tools. HotkeyReferenceSnapshot is derived from the Controls catalog. SdlRuntimeInspector owns only the ImGui context, SDL backends, panel presentation state, compiled script-recovery presentation, the player-facing front-end panel, and the hover-only Hotkeys reference. Replay and run-control records remain detached developer data.

Execution path

  1. BuildRuntimePresentation derives only the SDL window title and developer-UI visibility from a read-only scheduler snapshot.
  2. BuildApplicationFlowPresentation derives title-screen visibility, configured-scenario text, pending-load feedback, and available start or shutdown actions from a detached lifecycle snapshot. The separate SDL application-flow panel returns ApplicationFlowUiIntent; it never requests or commits a lifecycle transition.
  3. BuildHotkeyReference combines tools-owned action groups and behavior text with physical labels derived from the Controls catalog, then validates that every bound action is represented.
  4. The SDL inspector observes raw SDL events for ImGui, captures keyboard input only while developer text input is active, reports pointer capture when ImGui owns the pointer, builds sibling runtime and domain panels from detached data, anchors a separate Hotkeys activator to the top-right viewport edge, and submits its draw data before SDL presents the frame.
  5. FilterCapturedGameInput keeps ImGui-owned input out of Controls, always preserves quit and F3, and injects one input reset when a captured press or release could otherwise leave held game state stuck.
  6. Pause and single-step buttons produce RuntimeInspectionActions; QueueRuntimeInspectionActions stamps the corresponding existing Core commands. The scheduler remains the only mutation owner.
  7. The compiled Scripts tab presents detached host generation, mode, reload result, package and surface work, faults, disabled state, and bounded event history. Its Reload Packages, Restore Standard Interface, and Safe Mode buttons return narrow App requests; Tools does not change the package graph.
  8. When scripted UI cannot produce a valid surface, a centered compiled recovery window presents the same three controls independently of Lua. During ordinary F3 inspection the content remains a normal tab and does not overlap other panels.
  9. MapPhase0RunControls maps F8 and F9 press edges to scenario reset and a ten-tick fast-forward request. ApplyPhase0RunControlActions validates the complete action span, restores reset owners through their APIs, and delegates tick budgets to Simulation.
  10. FramePerformanceBenchmark excludes a fixed warmup, retains only the requested bounded measured frames, and reports average FPS, p50, p95, p99, worst-frame latency, slow-frame counts, and peak detached scene-load counts. It owns no renderer, platform, World, or simulation state.
  11. RecordPhase0Replay captures an initial owner checkpoint, applies runtime, camera, and selection inputs through existing owners, and records one canonical hash after each step.
  12. ReplayPhase0Transcript restores the foundation and camera through their public owner APIs, starts fresh selection state, reapplies each input, and returns the first step whose tick or hash differs.
  13. Replay orchestration, canonical checkpoint capture, and schema conversion live in separate source files inside the replay target.
  14. Replay serialization writes schema version 20 JSON with explicit size, step-count, run-control budget, duration, command, script-command, player-order, coordinate, scenario, seed, owner-state, and checkpoint validation.
  15. CaptureReplaySerializationInspection serializes and round-trips one supplied foundation and optional transcript once, then copies step actions, checkpoints, and replay-result diagnostics into a read-only tools snapshot.
  16. Phase 13D adds a production Quick Start panel beside Commands and Lenses. It reads the current objective, selected Actor IDs, and retained player-action feedback; exposes the supported interface scales and reduced-motion request; and routes panel buttons to the same existing player surfaces. It has no gameplay mutation API.
  17. Separate Memory, Reputation, Relationship, and Household capture modules reduce the bounded App snapshot into domain-specific read-only views. Four separate ImGui panel files render current counts, limits, latest reasons, evidence links, propagation totals, and the reconstructed Household ledger.
  18. The World panel presents detached authoritative environment and ecology diagnostics. The Known World panel separately presents only learned environment, ecology-population, and renewable facts with explicit current or stale labels.
  19. The Economy panel joins a bounded detached Phase 9 snapshot to the existing Phase 3 view. It shows recipe and order counts, production and shipment stages, exact bottleneck text, obligation deadlines, route exposure, regional summaries, route flows, and the latest regional visit and mutation budget.
  20. The Personhood panel joins the selected detached Actor snapshot to the matching detached Phase 5 consequence snapshot. It shows current life stage, health, progression, memory, Relationship, Household, care, lineage, and death facts as an ordered biography capped at 256 entries.

Key types and contracts

  • render::RuntimePresentation contains the derived window title and developer-UI visibility flag; tools builds it but does not own the contract.
  • DeveloperInputCapture records ImGui keyboard/pointer capture. RuntimeInspectionData contains detached application-flow, configured-scenario, scheduler, pending-queue, last-applied command, and script-package diagnostic views. RuntimeInspectionActions contains the detached application-flow intent plus narrow pause, single-step, package-reload, standard-restoration, and safe-mode requests.
  • ApplicationFlowPresentationSnapshot is the detached title-screen and loading-feedback view. ApplicationFlowUiIntent contains only start-session and shutdown requests.
  • HotkeyReferenceRow contains one tools-owned group, derived input label, and behavior label. HotkeyReferenceSnapshot contains the complete rows plus any catalog-coverage error.
  • Phase0ReplayInput contains ordered reset/fast-forward, heat-transition, player-order, script-command, runtime, camera, and selection inputs for one replay step.
  • Phase0RunControlResult reports whether reset occurred and how many requested ticks Simulation actually advanced.
  • FramePerformanceBenchmarkConfig, FramePerformanceSample, and FramePerformanceSummary are process-local diagnostic values. The graphical composition root supplies presented-frame timing and detached scene counts.
  • Phase0ReplayCheckpoint stores the simulation tick and a 64-bit canonical state hash. Phase0ReplayDivergence reports expected and actual tick/hash values for one step.
  • Replay record, replay, serialization, and deserialization result values carry either the requested artifact or an actionable error.
  • Foundation, replay-step, transcript, and result inspection snapshots expose schema, document, action, checkpoint, and divergence facts without recorder, playback, or save mutation authority.
  • Phase9EconomyInspectionSnapshot contains bounded copies of production orders, trade shipments, regional summaries, route flows, and the latest budget evidence. It exposes no Production, Trade, Regional Economy, Work, Resource, Party, or World mutation API.
  • PersonhoodInspectionSnapshot contains one selected Actor's bounded current summary and ordered biography. PersonhoodPopulationSnapshot reports exact Actor and retained-fact visits, life-stage totals, stable-reference validation, and a deterministic digest for an explicitly budgeted population pass.
  • The four Phase 5 inspection snapshots contain only constant-time totals and selected-Actor bounded facts. Hidden diagnostics skip their capture, and the panel layer never queries a gameplay owner.
96 source files in this module
370 indexed function definitions

This is source evidence, not an ownership contract. Rows without an authored note make no behavioral claim.

FunctionKindAuthored note statusSource
tools::CaptureActorInspection(const game::ActorRuntime * actors,const sim::WorldRuntime * world,const game::ControlAuthorityRuntime * control_authority,const game::PartyRuntime * parties,const std::span<const sim::PersistentId> selected_entities,const ActorInspectionCaptureMode mode)free functionInventory only; no authored contract note.src/tools/actor_inspection.cpp:12
IsPendingSessionLoad(const app::ApplicationFlowSnapshot & lifecycle)internal helperInventory only; no authored contract note.src/tools/application_flow_presentation.cpp:9
IsPendingSessionExit(const app::ApplicationFlowSnapshot & lifecycle)internal helperInventory only; no authored contract note.src/tools/application_flow_presentation.cpp:17
tools::BuildApplicationFlowPresentation(const app::ApplicationFlowSnapshot & lifecycle,const std::string_view scenario_id,const bool save_available,const std::optional<ApplicationFlowSessionSummary> session)free functionInventory only; no authored contract note.src/tools/application_flow_presentation.cpp:27
tools::CaptureConstructionInspection(const game::ConstructionRuntime * construction,const sim::WorldGridDefinition & grid)free functionInventory only; no authored contract note.src/tools/construction_inspection.cpp:8
ParseWorkerLossSelector(const std::string_view value)internal helperInventory only; no authored contract note.src/tools/continuity_harness.cpp:27
WorkerLossSelectorName(const ContinuityWorkerLossSelector value)internal helperInventory only; no authored contract note.src/tools/continuity_harness.cpp:43
OptionalValue(const json & document,const std::string_view key)internal helperInventory only; no authored contract note.src/tools/continuity_harness.cpp:58
SumBundle(const game::ResourceBundle & bundle)internal helperInventory only; no authored contract note.src/tools/continuity_harness.cpp:66
ValidateConfig(const ContinuityHarnessConfig & config,std::string & error)internal helperInventory only; no authored contract note.src/tools/continuity_harness.cpp:74
CaptureMetrics(const app::RuntimeSession & session)internal helperInventory only; no authored contract note.src/tools/continuity_harness.cpp:129
CheckInvariants(const ContinuityHarnessConfig & config,const ContinuityCheckpoint & checkpoint,const std::string & last_valid_hash,const std::optional<std::uint64_t> expected_resource_origin_units)internal helperInventory only; no authored contract note.src/tools/continuity_harness.cpp:574
tools::ClassifyContinuityOutcome(const ContinuityEvidence & evidence)free functionInventory only; no authored contract note.src/tools/continuity_harness.cpp:612
MetricsDocument(const ContinuityMetrics & value)internal helperInventory only; no authored contract note.src/tools/continuity_harness.cpp:656
ConfigDocument(const ContinuityHarnessConfig & value)internal helperInventory only; no authored contract note.src/tools/continuity_harness.cpp:801
tools::ContinuitySettlementOutcomeName(const ContinuitySettlementOutcome outcome)free functionInventory only; no authored contract note.src/tools/continuity_harness.cpp:847
tools::LoadContinuityHarnessConfig(const std::filesystem::path & path)free functionInventory only; no authored contract note.src/tools/continuity_harness.cpp:863
tools::ApplyContinuityInitialConditions(const ContinuityHarnessConfig & config,app::RuntimeSessionCandidate & candidate,std::string & error)free functionInventory only; no authored contract note.src/tools/continuity_harness.cpp:946
tools::RunContinuityHarness(const ContinuityHarnessConfig & config,const std::uint64_t seed,app::RuntimeSession & session,core::RuntimeCommandQueue & command_queue)free functionInventory only; no authored contract note.src/tools/continuity_harness.cpp:1063
tools::CaptureContinuityMetrics(const app::RuntimeSession & session)free functionInventory only; no authored contract note.src/tools/continuity_harness.cpp:1314
tools::SerializeContinuityMetrics(const ContinuityMetrics & metrics)free functionInventory only; no authored contract note.src/tools/continuity_harness.cpp:1318
tools::SerializeContinuityEvidence(const ContinuityEvidence & evidence)free functionInventory only; no authored contract note.src/tools/continuity_harness.cpp:1322
tools::ContinuityCampaignEvidence::Succeeded() constmethodInventory only; no authored contract note.src/tools/continuity_harness.cpp:1386
tools::BuildContinuityCampaignEvidence(const ContinuityHarnessConfig & config,std::vector<ContinuityEvidence> runs)free functionInventory only; no authored contract note.src/tools/continuity_harness.cpp:1391
tools::SerializeContinuityCampaignEvidence(const ContinuityCampaignEvidence & evidence)free functionInventory only; no authored contract note.src/tools/continuity_harness.cpp:1431
tools::WriteContinuityEvidence(const std::filesystem::path & path,const ContinuityEvidence & evidence,std::string & error)free functionInventory only; no authored contract note.src/tools/continuity_harness.cpp:1469
tools::WriteContinuityCampaignEvidence(const std::filesystem::path & path,const ContinuityCampaignEvidence & evidence,std::string & error)free functionInventory only; no authored contract note.src/tools/continuity_harness.cpp:1497
tools::ContinuityEvidence::Succeeded() constinline methodInventory only; no authored contract note.src/tools/continuity_harness.hpp:280
tools::ContinuityConfigLoadResult::Succeeded() constinline methodInventory only; no authored contract note.src/tools/continuity_harness.hpp:299
tools::ContinuityRunResult::Succeeded() constinline methodInventory only; no authored contract note.src/tools/continuity_harness.hpp:306
Point(const render::ScreenPoint point)internal helperCopies a Render-owned screen or world point into the backend-neutral inspection point used by developer presentation.src/tools/entity_selection_inspection.cpp:8
Point(const render::WorldPoint point)internal helperCopies a Render-owned screen or world point into the backend-neutral inspection point used by developer presentation.src/tools/entity_selection_inspection.cpp:10
tools::CaptureEntitySelectionInspection(const sim::EcsWorld & world,const render::SelectionState & selection)free functionCaptures Simulation-owned entities in stable persistent-ID order and copies Render-owned cursor, hover, selection, marquee mode, last transition counts, and hit-query facts without mutating either owner.src/tools/entity_selection_inspection.cpp:15
tools::CaptureFactionInspection(const game::FactionRuntime * factions)free functionInventory only; no authored contract note.src/tools/faction_inspection.cpp:5
ToMicroseconds(const std::chrono::nanoseconds duration)internal helperInventory only; no authored contract note.src/tools/frame_performance_benchmark.cpp:14
Percentile(const std::vector<std::uint64_t> & sorted,const double percentile)internal helperInventory only; no authored contract note.src/tools/frame_performance_benchmark.cpp:19
tools::FramePerformanceBenchmark::FramePerformanceBenchmark(const FramePerformanceBenchmarkConfig config)methodInventory only; no authored contract note.src/tools/frame_performance_benchmark.cpp:27
tools::FramePerformanceBenchmark::Record(FramePerformanceSample sample)methodInventory only; no authored contract note.src/tools/frame_performance_benchmark.cpp:37
tools::FramePerformanceBenchmark::Complete() constmethodInventory only; no authored contract note.src/tools/frame_performance_benchmark.cpp:51
tools::FramePerformanceBenchmark::CaptureSummary() constmethodInventory only; no authored contract note.src/tools/frame_performance_benchmark.cpp:55
tools::FormatFramePerformanceSummary(const FramePerformanceSummary & summary,const bool vertical_sync)free functionInventory only; no authored contract note.src/tools/frame_performance_benchmark.cpp:92
ReferencesAction(const ReferenceDefinition & definition,const ControlAction action)internal helperChecks whether one tools-owned display row includes a specific Controls action.src/tools/hotkey_reference.cpp:147
KeyLabel(const core::PlatformKey key)internal helperMaps a backend-neutral platform key to its compact tools-only display label.src/tools/hotkey_reference.cpp:156
PointerButtonLabel(const core::PlatformPointerButton button)internal helperMaps a backend-neutral pointer button to its tools-only display label.src/tools/hotkey_reference.cpp:223
AppendInput(std::string & label,const std::string_view input)internal helperAppends one derived physical input label with the hotkey panel separator.src/tools/hotkey_reference.cpp:236
KeyboardInputLabel(const ReferenceDefinition & definition)internal helperBuilds one display row's keyboard label by reading every matching Controls-owned binding.src/tools/hotkey_reference.cpp:243
PointerButtonInputLabel(const ReferenceDefinition & definition,const std::string_view gesture)internal helperBuilds one click or drag label from the matching Controls-owned pointer-button binding.src/tools/hotkey_reference.cpp:253
PointerWheelInputLabel(const ReferenceDefinition & definition)internal helperBuilds the mouse-wheel label only when the Controls catalog binds the displayed action to vertical scroll.src/tools/hotkey_reference.cpp:266
ModifierPointerInputLabel(const ReferenceDefinition & definition,const std::string_view gesture)internal helperInventory only; no authored contract note.src/tools/hotkey_reference.cpp:276
InputLabel(const ReferenceDefinition & definition)internal helperDispatches one tools-owned input presentation to its catalog-derived label builder.src/tools/hotkey_reference.cpp:287
ReferencedActions()internal helperBuilds the set of actions covered by the tools-owned hotkey reference definitions.src/tools/hotkey_reference.cpp:305
tools::BuildHotkeyReference()free functionCombines tools-owned grouping and behavior text with labels derived from the Controls binding catalog and reports missing row or catalog coverage.src/tools/hotkey_reference.cpp:317
tools::CaptureHouseholdInspection(const app::RuntimePhase5InspectionSnapshot & source)free functionInventory only; no authored contract note.src/tools/household_inspection.cpp:6
tools::CaptureInstitutionalRequestInspection(const game::RuntimeIncidentCatalog * catalog,const game::InstitutionalRequestRuntime * requests,const game::StructuredEventConsequenceRuntime * consequences)free functionInventory only; no authored contract note.src/tools/institutional_request_inspection.cpp:6
tools::CaptureIntersectionInspection(const game::IntersectionCandidateRuntime * candidates,const game::IntersectionOccurrenceRuntime * occurrence,const game::IntersectionIncidentSelectionRuntime * incident_selection,const game::IntersectionPresentationRuntime * presentation,const game::IntersectionLifecycleRuntime * lifecycle)free functionInventory only; no authored contract note.src/tools/intersection_inspection.cpp:6
tools::CaptureMemoryInspection(const app::RuntimePhase5InspectionSnapshot & source)free functionInventory only; no authored contract note.src/tools/memory_inspection.cpp:9
MixDigest(std::uint64_t & digest,const std::uint64_t value)internal helperInventory only; no authored contract note.src/tools/personhood_inspection.cpp:14
OtherActor(const game::RelationshipRecord & relationship,const sim::PersistentId actor)internal helperInventory only; no authored contract note.src/tools/personhood_inspection.cpp:19
tools::PersonhoodBiographyEntryKindName(const PersonhoodBiographyEntryKind kind)free functionInventory only; no authored contract note.src/tools/personhood_inspection.cpp:32
tools::ComposePersonhoodInspection(const ActorInspectionSnapshot & actors,const app::RuntimePhase5InspectionSnapshot & consequences)free functionInventory only; no authored contract note.src/tools/personhood_inspection.cpp:53
tools::CapturePersonhoodPopulation(const std::span<const game::ActorState> sorted_actors,const PersonhoodPopulationCaptureRequest request)free functionInventory only; no authored contract note.src/tools/personhood_inspection.cpp:159
tools::operator <=>(const PersonhoodBiographyEntry & left,const PersonhoodBiographyEntry & right)free functionInventory only; no authored contract note.src/tools/personhood_inspection.hpp:37
RecordFailure(std::string error)internal helperReturns a failed recording result without a partial transcript.src/tools/phase0_replay.cpp:15
IsFresh(const render::SelectionState & state)internal helperRequires empty cursor, hover, selection, marquee, hit-count, and candidate state at the start of a recording.src/tools/phase0_replay.cpp:19
ApplyInput(const Phase0ReplayInput & input,const app::Phase0FoundationState & initial_foundation,const render::IsometricCameraState & initial_camera,const render::IsometricProjection & projection,app::RuntimeSession & session,core::RuntimeCommandQueue & command_queue,render::IsometricCamera & camera,render::IsometricSelection & selection,std::string & error)internal helperApplies recorded run-control actions and heat-transition requests through existing owners, then pushes runtime commands, advances a normal frame when no run-control action consumed it, and updates camera and selection.src/tools/phase0_replay.cpp:26
Diverged(const std::size_t step_index,const Phase0ReplayCheckpoint & expected,const Phase0ReplayCheckpoint & actual)internal helperBuilds the first mismatch result and identifies whether foundation, actor state, or actor decision state diverged.src/tools/phase0_replay.cpp:127
tools::Phase0ReplayDivergenceScopeName(const Phase0ReplayDivergenceScope scope)free functionMaps a replay divergence scope to stable developer-facing text.src/tools/phase0_replay.cpp:158
tools::RecordPhase0Replay(const std::span<const Phase0ReplayInput> inputs,const render::IsometricProjection & projection,app::RuntimeSession & session,core::RuntimeCommandQueue & command_queue,render::IsometricCamera & camera,render::IsometricSelection & selection)free functionCaptures initial foundation and camera state, applies each validated input through current owners, and records a checkpoint after every step.src/tools/phase0_replay.cpp:170
tools::ReplayPhase0Transcript(const Phase0ReplayTranscript & transcript,app::RuntimeSession & session,core::RuntimeCommandQueue & command_queue,render::IsometricCamera & camera,render::IsometricSelection & selection)free functionValidates and restores initial owners, reapplies every recorded input, and stops at the first tick or canonical-state mismatch.src/tools/phase0_replay.cpp:232
PointDocument(const render::ScreenPoint point)internal helperWrites one checkpoint-only screen-space point with explicit x and y values.src/tools/phase0_replay_checkpoint.cpp:16
OptionalPointDocument(const std::optional<render::ScreenPoint> point)internal helperWrites a present checkpoint screen point or JSON null without inventing coordinates.src/tools/phase0_replay_checkpoint.cpp:20
SelectionStateDocument(const render::SelectionState & state)internal helperWrites cursor, hover, selected IDs, marquee, hit count, and ordered candidates for checkpoint comparison only.src/tools/phase0_replay_checkpoint.cpp:24
HashDocument(const std::string_view document)internal helperComputes the stable 64-bit FNV-1a checkpoint value and returns it as 16 lowercase hexadecimal characters.src/tools/phase0_replay_checkpoint.cpp:62
tools::detail::CaptureActorReplayHashes(const app::RuntimeSessionState & state,ActorReplayHashes & hashes,std::string & error)free functionHashes the canonical actor document and a decision-only projection containing focus bindings, goals, plans, tasks, interruptions, and replan policy.src/tools/phase0_replay_checkpoint.cpp:80
tools::detail::CaptureCheckpoint(const app::RuntimeSession & session,const core::RuntimeCommandQueue & command_queue,const render::IsometricCamera & camera,const render::IsometricSelection & selection,Phase0ReplayCheckpoint & checkpoint,std::string & error)free functionSerializes the current foundation, captures actor state and decision hashes, and combines foundation, camera, and observable selection state into one replay checkpoint.src/tools/phase0_replay_checkpoint.cpp:127
SerializationFailure(std::string error)internal helperReturns a failed replay serialization result without a partial document.src/tools/phase0_replay_serialization.cpp:25
DeserializationFailure(std::string error)internal helperReturns a failed replay deserialization result without partial detached transcript state.src/tools/phase0_replay_serialization.cpp:29
IsFinite(const render::ScreenPoint point)internal helperChecks one screen-space point before it enters transcript validation, camera commands, or selection input.src/tools/phase0_replay_serialization.cpp:33
IsValidRuntimeCommandType(const core::RuntimeCommandType type)internal helperAccepts only quit, pause toggle, single step, and diagnostics toggle in a replay input.src/tools/phase0_replay_serialization.cpp:37
IsValidCameraCommandType(const render::CameraCommandType type)internal helperAccepts only the current pan, zoom, pointer zoom, and reset camera commands.src/tools/phase0_replay_serialization.cpp:48
IsStateHash(const std::string_view hash)internal helperRequires the fixed 16-character lowercase hexadecimal checkpoint format.src/tools/phase0_replay_serialization.cpp:63
ScriptCommandValueDocument(const app::ScriptCommandValue & value)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:69
ScriptCommandArgumentsDocument(const app::ScriptCommandArguments & arguments)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:90
ScriptCommandActionDocument(const ScriptCommandReplayAction & action)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:100
ParseScriptCommandOrigin(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:112
ParseScriptCommandValue(const nlohmann::json & document)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:133
ParseScriptCommandArguments(const nlohmann::json & document,app::ScriptCommandArguments & arguments,std::string & error)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:157
ParseScriptCommandAction(const nlohmann::json & document,std::string & error)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:178
PointDocument(const render::ScreenPoint point)internal helperWrites one schema screen-space point with explicit x and y values.src/tools/phase0_replay_serialization.cpp:198
OptionalPointDocument(const std::optional<render::ScreenPoint> point)internal helperWrites a present schema screen point or JSON null without inventing coordinates.src/tools/phase0_replay_serialization.cpp:202
RuntimeCommandName(const core::RuntimeCommandType type)internal helperMaps each supported runtime command enum to its stable replay schema name.src/tools/phase0_replay_serialization.cpp:206
ParseRuntimeCommand(const std::string_view name)internal helperMaps a replay runtime-command name to its typed enum and rejects unsupported names.src/tools/phase0_replay_serialization.cpp:220
CameraCommandName(const render::CameraCommandType type)internal helperMaps each supported camera command enum to its stable replay schema name.src/tools/phase0_replay_serialization.cpp:236
ParseCameraCommand(const std::string_view name)internal helperMaps a replay camera-command name to its typed enum and rejects unsupported names.src/tools/phase0_replay_serialization.cpp:258
ParseSelectionMode(const std::string_view name)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:286
RunControlActionName(const Phase0RunControlActionType type)internal helperMaps reset and fast-forward action types to their stable replay schema names.src/tools/phase0_replay_serialization.cpp:296
ParseRunControlAction(const std::string_view name)internal helperMaps a replay run-control name to its typed action and rejects unsupported names.src/tools/phase0_replay_serialization.cpp:306
ParseHeatTier(const std::string_view name)internal helperMaps a replay heat-tier name to its typed Simulation value and rejects unsupported names.src/tools/phase0_replay_serialization.cpp:316
ParseHeatTransitionCause(const std::string_view name)internal helperMaps a replay heat-transition cause to its typed Simulation value and rejects unsupported names.src/tools/phase0_replay_serialization.cpp:332
ParseAssignmentQueuePolicy(const std::string_view name)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:351
ParsePlayerMoveIssueMode(const std::string_view name)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:361
ParsePlayerMoveTargetKind(const std::string_view name)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:371
ParseActorControlMode(const std::string_view name)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:381
ParseActorControlReason(const std::string_view name)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:391
SettlementActionName(const app::RuntimePlayerSettlementActionKind kind)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:401
ParseSettlementActionKind(const std::string_view name)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:420
ParseConstructionOrientation(const std::string_view name)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:444
IsValidBuildingDefinitionId(const std::string_view value)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:461
IsBoundedBuildingDefinitionId(const std::string_view value)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:465
PlayerOrderActionDocument(const PlayerOrderReplayAction & action)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:469
ParsePlayerOrderAction(const nlohmann::json & document,std::string & error)internal helperInventory only; no authored contract note.src/tools/phase0_replay_serialization.cpp:575
CheckpointDocument(const Phase0ReplayCheckpoint & checkpoint)internal helperWrites one expected tick plus foundation, actor-state, and actor-decision hashes.src/tools/phase0_replay_serialization.cpp:763
InputDocument(const Phase0ReplayInput & input)internal helperWrites ordered run-control and heat-transition requests, one frame delta, ordered runtime and camera commands, and the complete selection input record.src/tools/phase0_replay_serialization.cpp:770
ParsePoint(const nlohmann::json & document)internal helperParses one required x/y screen point from replay JSON.src/tools/phase0_replay_serialization.cpp:828
ParseOptionalPoint(const nlohmann::json & document)internal helperParses JSON null as no point or delegates a present value to the required point parser.src/tools/phase0_replay_serialization.cpp:833
ParseCameraState(const nlohmann::json & document)internal helperParses detached camera bounds and view values without mutating a live camera.src/tools/phase0_replay_serialization.cpp:838
ParseCheckpoint(const nlohmann::json & document)internal helperParses one replay tick plus foundation, actor-state, and actor-decision hashes into detached checkpoint data.src/tools/phase0_replay_serialization.cpp:868
ParseInput(const nlohmann::json & document,Phase0ReplayInput & input,std::string & error)internal helperParses bounded run-control and heat-transition requests, runtime commands, camera commands, and selection data, then runs the shared input validator.src/tools/phase0_replay_serialization.cpp:877
tools::detail::ValidateInput(const Phase0ReplayInput & input,std::string & error)free functionChecks run-control and heat-transition limits, reset exclusivity, request ticks, frame duration, runtime commands, camera values, anchors, and selection coordinates before record or replay.src/tools/phase0_replay_serialization.cpp:1008
tools::detail::CameraStateDocument(const render::IsometricCameraState & state)free functionWrites camera bounds, world center, viewport, and zoom for transcript storage and checkpoint comparison.src/tools/phase0_replay_serialization.cpp:1213
tools::ValidatePhase0ReplayTranscript(const Phase0ReplayTranscript & transcript,std::string & error)free functionEnforces foundation, camera, projection, step-count, tick-order, input, and checkpoint-hash boundaries without changing runtime state.src/tools/phase0_replay_serialization.cpp:1233
tools::SerializePhase0ReplayTranscript(const Phase0ReplayTranscript & transcript)free functionWrites deterministic schema version 20 JSON containing the scenario, seed, initial state, projection, ordered run-control, heat, script-command, runtime, render, selection, and player-order inputs, plus scoped checkpoints.src/tools/phase0_replay_serialization.cpp:1341
tools::DeserializePhase0ReplayTranscript(const std::string_view document_text)free functionEnforces document and schema limits, verifies header/foundation identity, parses every step, and returns detached transcript state.src/tools/phase0_replay_serialization.cpp:1384
RestoreCamera(render::IsometricCamera & camera,const render::IsometricCameraState & initial_camera,std::string & error)internal helperDelegates reset camera restoration to either a standalone IsometricCamera or the graphical RenderService camera boundary.src/tools/phase0_run_control.cpp:11
RestoreCamera(render::RenderService & renderer,const render::IsometricCameraState & initial_camera,std::string & error)internal helperDelegates reset camera restoration to either a standalone IsometricCamera or the graphical RenderService camera boundary.src/tools/phase0_run_control.cpp:16
ApplyActions(std::span<const Phase0RunControlAction> actions,const app::Phase0FoundationState & initial_foundation,const render::IsometricCameraState & initial_camera,app::RuntimeSession & session,core::RuntimeCommandQueue & command_queue,CameraOwner & camera,render::IsometricSelection & selection,Phase0RunControlResult & result,std::string & error)internal helperPrevalidates the complete developer action span and initial owner snapshots, then applies ordered reset and fast-forward requests through owner APIs.src/tools/phase0_run_control.cpp:22
tools::MapPhase0RunControls(const controls::ControlState & controls)free functionMaps ordered F8 and F9 press edges to scenario reset and the fixed ten-tick fast-forward request without creating runtime commands.src/tools/phase0_run_control.cpp:65
tools::ValidatePhase0RunControlAction(const Phase0RunControlAction & action,std::string & error)free functionRequires reset to carry no tick budget and fast-forward to request between one and one thousand ticks.src/tools/phase0_run_control.cpp:109
tools::ApplyPhase0RunControlActions(const std::span<const Phase0RunControlAction> actions,const app::Phase0FoundationState & initial_foundation,const render::IsometricCameraState & initial_camera,app::RuntimeSession & session,core::RuntimeCommandQueue & command_queue,render::IsometricCamera & camera,render::IsometricSelection & selection,Phase0RunControlResult & result,std::string & error)free functionApplies a validated developer action span to foundation, command-queue, camera, selection, and scheduler owners through either replay or graphical camera access.src/tools/phase0_run_control.cpp:132
tools::ApplyPhase0RunControlActions(const std::span<const Phase0RunControlAction> actions,const app::Phase0FoundationState & initial_foundation,const render::IsometricCameraState & initial_camera,app::RuntimeSession & session,core::RuntimeCommandQueue & command_queue,render::RenderService & renderer,render::IsometricSelection & selection,Phase0RunControlResult & result,std::string & error)free functionApplies a validated developer action span to foundation, command-queue, camera, selection, and scheduler owners through either replay or graphical camera access.src/tools/phase0_run_control.cpp:144
FailedInspection(std::string error)internal helperInventory only; no authored contract note.src/tools/phase3_economy_inspection.cpp:11
Add(std::uint64_t & target,const std::uint64_t amount)internal helperInventory only; no authored contract note.src/tools/phase3_economy_inspection.cpp:27
BundleQuantity(const game::ResourceBundle & bundle,bool & valid)internal helperInventory only; no authored contract note.src/tools/phase3_economy_inspection.cpp:35
ProgressBasisPoints(const game::ConstructionRecord & construction)internal helperInventory only; no authored contract note.src/tools/phase3_economy_inspection.cpp:43
tools::CapturePhase3EconomyInspection(const app::Phase3EconomyState & state,const std::span<const game::JobPreferenceDecisionTrace> job_preference_traces,const std::optional<game::ConstructionWorkTuning> construction_tuning)free functionInventory only; no authored contract note.src/tools/phase3_economy_inspection.cpp:60
TakeCandidate(std::optional<Value> & candidate)internal helperInventory only; no authored contract note.src/tools/phase3_economy_replay.cpp:14
RecordFailure(std::string error)internal helperInventory only; no authored contract note.src/tools/phase3_economy_replay.cpp:43
ReplayFailure(std::string error)internal helperInventory only; no authored contract note.src/tools/phase3_economy_replay.cpp:47
MigrateTranscript(const Phase3EconomyReplayTranscript & source,std::string & error)internal helperInventory only; no authored contract note.src/tools/phase3_economy_replay.cpp:55
BuildRuntime(const app::Phase3EconomyState & state,sim::WorldRuntimeState world_state,std::string & error)internal helperInventory only; no authored contract note.src/tools/phase3_economy_replay.cpp:76
CaptureState(const ReplayRuntime & runtime)internal helperInventory only; no authored contract note.src/tools/phase3_economy_replay.cpp:100
CaptureCheckpoint(const ReplayRuntime & runtime,Phase3EconomyReplayCheckpoint & checkpoint,std::string & error)internal helperInventory only; no authored contract note.src/tools/phase3_economy_replay.cpp:112
IsHash(const std::string_view hash)internal helperInventory only; no authored contract note.src/tools/phase3_economy_replay.cpp:123
FindTransferFacts(const Phase3EconomyTarget target,const std::uint64_t target_id,const sim::PersistentId actor,const ReplayRuntime & runtime)internal helperInventory only; no authored contract note.src/tools/phase3_economy_replay.cpp:135
ApplyClaim(const Phase3ClaimReplayInput & input,ReplayRuntime & runtime,std::string & error)internal helperInventory only; no authored contract note.src/tools/phase3_economy_replay.cpp:172
ApplyInput(const Phase3EconomyReplayInput & input,ReplayRuntime & runtime,std::string & error)internal helperInventory only; no authored contract note.src/tools/phase3_economy_replay.cpp:227
ValidateInput(const Phase3EconomyReplayInput & input)internal helperInventory only; no authored contract note.src/tools/phase3_economy_replay.cpp:315
tools::RecordPhase3EconomyReplay(const app::Phase3EconomyState & initial_state,sim::WorldRuntimeState world,const std::span<const Phase3EconomyReplayInput> inputs)free functionInventory only; no authored contract note.src/tools/phase3_economy_replay.cpp:342
tools::ReplayPhase3EconomyTranscript(const Phase3EconomyReplayTranscript & transcript)free functionInventory only; no authored contract note.src/tools/phase3_economy_replay.cpp:386
tools::ValidatePhase3EconomyReplayTranscript(const Phase3EconomyReplayTranscript & transcript,std::string & error)free functionInventory only; no authored contract note.src/tools/phase3_economy_replay.cpp:443
Delta(const std::uint64_t start,const std::uint64_t end)internal helperInventory only; no authored contract note.src/tools/phase3_economy_throughput.cpp:8
Failure(const Phase3ThroughputReportStatus status,const Phase3ThroughputSample & start,const Phase3ThroughputSample & end,std::string detail)internal helperInventory only; no authored contract note.src/tools/phase3_economy_throughput.cpp:18
MonotonicCountersRegressed(const Phase3ThroughputInspection & start,const Phase3ThroughputInspection & end)internal helperInventory only; no authored contract note.src/tools/phase3_economy_throughput.cpp:30
tools::Phase3ThroughputRate::PerThousandTicks() constmethodInventory only; no authored contract note.src/tools/phase3_economy_throughput.cpp:38
tools::CapturePhase3ThroughputSample(const Phase3EconomyInspectionSnapshot & snapshot,const std::uint64_t simulation_tick)free functionInventory only; no authored contract note.src/tools/phase3_economy_throughput.cpp:46
tools::BuildPhase3ThroughputReport(const Phase3ThroughputSample & start,const Phase3ThroughputSample & end)free functionInventory only; no authored contract note.src/tools/phase3_economy_throughput.cpp:61
tools::Phase3ThroughputReportStatusName(const Phase3ThroughputReportStatus status)free functionInventory only; no authored contract note.src/tools/phase3_economy_throughput.cpp:111
tools::Phase3ThroughputReport::Succeeded() constinline methodInventory only; no authored contract note.src/tools/phase3_economy_throughput.hpp:70
tools::CapturePhase9EconomyInspection(const game::ProductionRuntime * production,const game::TradeRuntime * trade,const game::RegionalEconomyRuntime * regional,const game::ResourceEconomyRuntime * resources,const Phase9EconomyInspectionRequest request)free functionInventory only; no authored contract note.src/tools/phase9_economy_inspection.cpp:7
SaturatingAdd(const std::uint64_t left,const std::uint64_t right)internal helperInventory only; no authored contract note.src/tools/player_lenses.cpp:11
LatestMemoryTick(const std::vector<app::RuntimeActorMemoryConsequenceFact> & memories)internal helperInventory only; no authored contract note.src/tools/player_lenses.cpp:19
DepartureEntry(const PlayerStatusActorSnapshot * actor)internal helperInventory only; no authored contract note.src/tools/player_lenses.cpp:28
InterruptionEntry(const PlayerStatusActorSnapshot * actor,const PlayerStatusEpisodeSnapshot * episode)internal helperInventory only; no authored contract note.src/tools/player_lenses.cpp:58
InjuryEntry(const PlayerStatusActorSnapshot * actor,const std::vector<app::RuntimeActorMemoryConsequenceFact> & memories)internal helperInventory only; no authored contract note.src/tools/player_lenses.cpp:82
ReturnEntry(const PlayerStatusActorSnapshot * actor,const PlayerStatusEpisodeSnapshot * episode)internal helperInventory only; no authored contract note.src/tools/player_lenses.cpp:99
HouseholdEntry(const std::optional<game::HouseholdRecord> & household)internal helperInventory only; no authored contract note.src/tools/player_lenses.cpp:121
tools::ComposePlayerLenses(const std::uint64_t captured_at_tick,const PlayerStatusInspectionSnapshot & status,const Phase3EconomyInspectionSnapshot & economy,const game::PlayerWorldReadSnapshot & known_world,const MemoryInspectionSnapshot & memory,const HouseholdInspectionSnapshot & household,const app::RuntimePlayerCommandSnapshot & commands)free functionInventory only; no authored contract note.src/tools/player_lenses.cpp:140
tools::PlayerLensTimelineStateName(const PlayerLensTimelineState state)free functionInventory only; no authored contract note.src/tools/player_lenses.cpp:252
tools::CapturePlayerMoveInspection(const std::optional<app::RuntimePlayerMoveResult> & retained,const app::RuntimeSession & session)free functionResolves retained move recipients against current Actor or Party truth and reports detached executing, interrupted, completed, or rejected evidence without mutation authority.src/tools/player_move_inspection.cpp:6
tools::PlayerMoveInspectionStateName(const PlayerMoveInspectionState state)free functionInventory only; no authored contract note.src/tools/player_move_inspection.cpp:161
tools::PlayerMoveInspectionFeedback(const PlayerMoveInspectionSnapshot & inspection)free functionInventory only; no authored contract note.src/tools/player_move_inspection.cpp:181
ActorRoles(const game::ActorRoleTags roles)internal helperInventory only; no authored contract note.src/tools/player_status_inspection.cpp:15
ActorFocusName(const game::ActorFocus focus)internal helperInventory only; no authored contract note.src/tools/player_status_inspection.cpp:29
ActorPlanName(const game::ActorPlanKind plan)internal helperInventory only; no authored contract note.src/tools/player_status_inspection.cpp:49
ActorPlanStateName(const game::ActorPlanStatus state)internal helperInventory only; no authored contract note.src/tools/player_status_inspection.cpp:65
ActorPlanChangeName(const game::ActorPlanChangeReason reason)internal helperInventory only; no authored contract note.src/tools/player_status_inspection.cpp:87
AssignmentOrderActive(const game::AssignmentOrderState state)internal helperInventory only; no authored contract note.src/tools/player_status_inspection.cpp:151
BetterOrder(const PlayerStatusOrderSnapshot & candidate,const PlayerStatusOrderSnapshot & retained)internal helperInventory only; no authored contract note.src/tools/player_status_inspection.cpp:157
ConsiderOrder(std::optional<PlayerStatusOrderSnapshot> & selected,PlayerStatusOrderSnapshot candidate)internal helperInventory only; no authored contract note.src/tools/player_status_inspection.cpp:163
KnownRoute(const game::PlayerWorldReadSnapshot & known_world,const std::optional<sim::RouteSegmentId> route)internal helperInventory only; no authored contract note.src/tools/player_status_inspection.cpp:170
AvailableResponse(const game::IncidentLifecycleState state)internal helperInventory only; no authored contract note.src/tools/player_status_inspection.cpp:181
EpisodeOpen(const game::IncidentLifecycleState state)internal helperInventory only; no authored contract note.src/tools/player_status_inspection.cpp:199
tools::CapturePlayerStatusInspection(const ActorInspectionSnapshot & actors,const game::PlayerWorldReadSnapshot & known_world,const IntersectionInspectionSnapshot & intersections,const Phase3EconomyInspectionSnapshot & economy,const game::ScoutingOrderRuntime * scouting_orders,const game::PlayerMoveOrderRuntime * player_move_orders,const game::PlayerAttackOrderRuntime * player_attack_orders)free functionCombines detached selected-Actor, authority, assignment, contextual-move, knowledge, and incident facts into one read-only status snapshot, including queued move count.src/tools/player_status_inspection.cpp:209
tools::PlayerStatusOrderKindName(const PlayerStatusOrderKind kind)free functionInventory only; no authored contract note.src/tools/player_status_inspection.cpp:447
tools::PlayerStatusEpisodeResponseName(const PlayerStatusEpisodeResponse response)free functionInventory only; no authored contract note.src/tools/player_status_inspection.cpp:466
tools::CaptureRelationshipInspection(const app::RuntimePhase5InspectionSnapshot & source)free functionInventory only; no authored contract note.src/tools/relationship_inspection.cpp:9
RuntimeCommandAction(const core::RuntimeCommandType type)internal helperMaps one replay runtime-command type to a short developer-facing action description.src/tools/replay_serialization_inspection.cpp:14
CameraAction(const render::CameraCommandType type)internal helperMaps one replay camera-command type to a short developer-facing action description.src/tools/replay_serialization_inspection.cpp:28
InputActions(const Phase0ReplayInput & input)internal helperCopies ordered run-control, heat-transition, runtime, camera, and selection actions from one replay input into detached inspection text.src/tools/replay_serialization_inspection.cpp:50
InspectFoundation(const app::Phase0FoundationState & foundation)internal helperSummarizes one detached foundation, verifies schema 27 serialization and deserialization, and requires both typed state and document bytes to round-trip unchanged.src/tools/replay_serialization_inspection.cpp:162
InspectTranscript(const Phase0ReplayTranscript * transcript)internal helperSummarizes an optional schema 20 transcript, copies ordered steps and scoped checkpoint hashes, and verifies typed and byte-stable round-trip behavior.src/tools/replay_serialization_inspection.cpp:206
InspectResult(const Phase0ReplayResult * result)internal helperCopies not-run, matched, first-divergence, or failed replay result facts without applying replay behavior.src/tools/replay_serialization_inspection.cpp:262
tools::CaptureReplaySerializationInspection(const app::Phase0FoundationState & foundation,const Phase0ReplayTranscript * transcript,const Phase0ReplayResult * result)free functionComposes detached foundation, optional transcript, and optional replay-result inspection values without retaining mutation authority.src/tools/replay_serialization_inspection.cpp:293
tools::CaptureReputationInspection(const app::RuntimePhase5InspectionSnapshot & source)free functionInventory only; no authored contract note.src/tools/reputation_inspection.cpp:9
tools::CaptureResourceEconomyInspection(const game::ResourceEconomyRuntime * economy)free functionInventory only; no authored contract note.src/tools/resource_economy_inspection.cpp:8
IsKeyboardEvent(const core::PlatformEventType type)internal helperClassifies only backend-neutral key press and release events for developer keyboard-capture filtering.src/tools/runtime_inspection.cpp:6
IsPointerEvent(const core::PlatformEventType type)internal helperClassifies pointer motion, wheel, press, and release events for developer pointer-capture filtering.src/tools/runtime_inspection.cpp:11
NeedsHeldInputReset(const core::PlatformEventType type)internal helperIdentifies captured key or pointer-button transitions that require Controls to clear held state so a swallowed release cannot leave movement or selection stuck.src/tools/runtime_inspection.cpp:18
tools::FilterCapturedGameInput(const std::span<const core::PlatformEvent> events,const DeveloperInputCapture capture)free functionRemoves keyboard or pointer events owned by the developer UI, preserves F3 visibility and quit events, and inserts at most one input reset when captured transitions could strand held game input.src/tools/runtime_inspection.cpp:28
tools::QueueRuntimeInspectionActions(const RuntimeInspectionActions & actions,const std::uint64_t target_tick,core::RuntimeCommandQueue & commands)free functionConverts ordered Runtime-panel pause and single-step requests into the existing tick-stamped Core commands without mutating scheduler state.src/tools/runtime_inspection.cpp:54
tools::RuntimeCommandName(const core::RuntimeCommandType type)free functionReturns the display label for each current runtime command type without changing the command or queue.src/tools/runtime_inspection.cpp:65
tools::BuildRuntimePresentation(const sim::RuntimeSnapshot & snapshot)free functionDerives the SDL window title and developer-UI visibility flag from a read-only scheduler snapshot; it does not build or own inspection state.src/tools/runtime_presentation.cpp:7
tools::CaptureScoutingOrderIssueInspection(const app::RuntimeScoutingOrderIssueResult & result)free functionInventory only; no authored contract note.src/tools/scouting_order_inspection.cpp:6
tools::CaptureScoutingOrderCompletionInspection(const app::RuntimeScoutingOrderCompletionResult & result)free functionInventory only; no authored contract note.src/tools/scouting_order_inspection.cpp:11
ActorFocusName(const game::ActorFocus focus)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:17
ActorPlanStatusName(const game::ActorPlanStatus status)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:37
ActorPlanKindName(const game::ActorPlanKind kind)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:59
ActorTaskKindName(const game::ActorTaskKind kind)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:75
ActorTaskStatusName(const game::ActorTaskStatus status)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:93
ActorPlanReasonName(const game::ActorPlanChangeReason reason)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:113
ActorInterruptionReasonName(const game::ActorInterruptionReason reason)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:177
ActorInterruptionResolutionName(const game::ActorInterruptionResolution resolution)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:197
ActorMotivationRootName(const game::ActorMotivationRoot root)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:209
ActorMotivationMethodName(const game::ActorMotivationMethod method)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:219
ActorMotivationStatusName(const game::ActorMotivationStatus status)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:231
DrawDriveResponse(const game::ActorState & actor,const game::ActorDrive drive)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:243
ActorScheduledUpdateStatusName(const game::ActorScheduledUpdateStatus status)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:260
ActorScheduledUpdateReasonName(const game::ActorScheduledUpdateReason reason)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:270
RouteTravelMutationOperationName(const sim::RouteTravelMutationOperation operation)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:292
RouteTravelMutationStatusName(const sim::RouteTravelMutationStatus status)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:304
InspectorHeatTierName(const sim::HeatTier tier)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:316
DrawNeedBar(const char * label,const std::uint16_t basis_points)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:330
DrawControlAuthority(const bool control_authority_available,const std::optional<game::ActorControlRecord> & selected_control_authority)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:338
DrawParty(const bool party_available,const std::optional<game::PartyRecord> & selected_party,const std::optional<game::PartyMoveIntentRecord> & selected_party_move_intent,const std::optional<game::PartyAssistIntentRecord> & selected_party_assist_intent)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:393
DrawActorDetails(const game::ActorSnapshot & snapshot,const std::uint64_t captured_at_tick,const bool control_authority_available,const std::optional<game::ActorControlRecord> & selected_control_authority,const bool party_available,const std::optional<game::PartyRecord> & selected_party,const std::optional<game::PartyMoveIntentRecord> & selected_party_move_intent,const std::optional<game::PartyAssistIntentRecord> & selected_party_assist_intent)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:459
UtilityCurveName(const game::UtilityResponseCurve curve)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:661
ActorDecisionRawUnitName(const game::ActorDecisionRawUnit unit)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:677
ActorDecisionSourceName(const game::ActorDecisionFactSource source)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:689
ActorFocusIneligibilityName(const game::ActorFocusIneligibility reason)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:707
DrawActorFocusDecision(const std::optional<game::ActorFocusDecisionTrace> & decision)internal helperInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:721
tools::DrawActorInspectionPanel(const ActorInspectionSnapshot & snapshot)free functionInventory only; no authored contract note.src/tools/sdl_actor_inspection_panel.cpp:795
tools::DrawApplicationFlowPanel(const ApplicationFlowPresentationSnapshot & snapshot)free functionInventory only; no authored contract note.src/tools/sdl_application_flow_panel.cpp:8
ActorFocusName(const game::ActorFocus focus)internal helperInventory only; no authored contract note.src/tools/sdl_household_inspection_panel.cpp:8
tools::DrawHouseholdInspectionPanel(const HouseholdInspectionSnapshot & snapshot)free functionInventory only; no authored contract note.src/tools/sdl_household_inspection_panel.cpp:30
MemoryProvenanceName(const game::MemoryProvenanceKind kind)internal helperInventory only; no authored contract note.src/tools/sdl_memory_inspection_panel.cpp:8
tools::DrawMemoryInspectionPanel(const MemoryInspectionSnapshot & snapshot)free functionInventory only; no authored contract note.src/tools/sdl_memory_inspection_panel.cpp:20
tools::DrawPersonhoodInspectionPanel(const PersonhoodInspectionSnapshot & snapshot)free functionInventory only; no authored contract note.src/tools/sdl_personhood_inspection_panel.cpp:9
PlayerAction(const app::RuntimePlayerActionKind kind,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/tools/sdl_player_command_panel.cpp:16
DrawPartyControl(const std::optional<app::RuntimePartyControlSummary> & control)internal helperInventory only; no authored contract note.src/tools/sdl_player_command_panel.cpp:24
DrawPartyCommands(const RuntimeInspectionData & data,std::optional<sim::PersistentId> & party_leader,RuntimeInspectionActions & actions)internal helperInventory only; no authored contract note.src/tools/sdl_player_command_panel.cpp:58
DrawWorkCommands(const RuntimeInspectionData & data,RuntimeInspectionActions & actions)internal helperInventory only; no authored contract note.src/tools/sdl_player_command_panel.cpp:147
DrawSettlementSummary(const app::RuntimePlayerCommandSnapshot & snapshot)internal helperInventory only; no authored contract note.src/tools/sdl_player_command_panel.cpp:208
DrawSettlementCommands(const RuntimeInspectionData & data,SettlementCommandUiState & ui,RuntimeInspectionActions & actions)internal helperInventory only; no authored contract note.src/tools/sdl_player_command_panel.cpp:233
tools::DrawPlayerCommandPanel(const RuntimeInspectionData & data,std::optional<sim::PersistentId> & party_leader,SettlementCommandUiState & settlement_commands,bool & open,RuntimeInspectionActions & actions)free functionInventory only; no authored contract note.src/tools/sdl_player_command_panel.cpp:314
DrawSelectionSummary(const RuntimeInspectionData & data)internal helperInventory only; no authored contract note.src/tools/sdl_player_guide_panel.cpp:17
tools::DrawPlayerGuidePanel(const RuntimeInspectionData & data,PlayerGuideUiState & guide,PlayerPanelUiState & player_panels,RuntimeInspectionActions & actions)free functionInventory only; no authored contract note.src/tools/sdl_player_guide_panel.cpp:32
KnowledgeName(const game::ObserverKnowledgeState state)internal helperInventory only; no authored contract note.src/tools/sdl_player_lenses_panel.cpp:11
DrawSettlementLens(const PlayerLensSettlementSnapshot & settlement)internal helperInventory only; no authored contract note.src/tools/sdl_player_lenses_panel.cpp:25
DrawPersonConsequences(const PlayerLensPersonSnapshot & person)internal helperInventory only; no authored contract note.src/tools/sdl_player_lenses_panel.cpp:115
DrawEpisodeLens(const PlayerLensEpisodeSnapshot & episode)internal helperInventory only; no authored contract note.src/tools/sdl_player_lenses_panel.cpp:153
tools::DrawPlayerLensesPanel(const RuntimeInspectionData & data,std::optional<sim::PersistentId> & party_leader,bool & open,RuntimeInspectionActions & actions)free functionInventory only; no authored contract note.src/tools/sdl_player_lenses_panel.cpp:177
KnowledgeStateName(const game::ObserverKnowledgeState state)internal helperInventory only; no authored contract note.src/tools/sdl_player_status_panel.cpp:14
DrawDisabledWrapped(const char * text)internal helperInventory only; no authored contract note.src/tools/sdl_player_status_panel.cpp:28
DrawKnownRisk(const std::optional<game::KnownRouteRead> & risk)internal helperInventory only; no authored contract note.src/tools/sdl_player_status_panel.cpp:34
DrawOrder(const std::optional<PlayerStatusOrderSnapshot> & order)internal helperInventory only; no authored contract note.src/tools/sdl_player_status_panel.cpp:57
DrawEpisode(const std::optional<PlayerStatusEpisodeSnapshot> & episode)internal helperInventory only; no authored contract note.src/tools/sdl_player_status_panel.cpp:114
PlayerAction(const app::RuntimePlayerActionKind kind,const std::uint64_t tick)internal helperInventory only; no authored contract note.src/tools/sdl_player_status_panel.cpp:144
DrawPartyControl(const std::optional<app::RuntimePartyControlSummary> & control)internal helperInventory only; no authored contract note.src/tools/sdl_player_status_panel.cpp:152
DrawPartyActions(const RuntimeInspectionData & data,std::optional<sim::PersistentId> & party_leader,RuntimeInspectionActions & actions)internal helperInventory only; no authored contract note.src/tools/sdl_player_status_panel.cpp:186
DrawIncidentAction(const RuntimeInspectionData & data,RuntimeInspectionActions & actions)internal helperInventory only; no authored contract note.src/tools/sdl_player_status_panel.cpp:274
DrawScoutingAction(const RuntimeInspectionData & data,RuntimeInspectionActions & actions)internal helperInventory only; no authored contract note.src/tools/sdl_player_status_panel.cpp:288
tools::DrawPlayerStatusPanel(const RuntimeInspectionData & data,std::optional<sim::PersistentId> & party_leader,RuntimeInspectionActions & actions)free functionInventory only; no authored contract note.src/tools/sdl_player_status_panel.cpp:367
tools::DrawRelationshipInspectionPanel(const RelationshipInspectionSnapshot & snapshot)free functionInventory only; no authored contract note.src/tools/sdl_relationship_inspection_panel.cpp:7
tools::DrawReputationInspectionPanel(const ReputationInspectionSnapshot & snapshot)free functionInventory only; no authored contract note.src/tools/sdl_reputation_inspection_panel.cpp:7
ScriptUiColor(const app::ScriptUiColorToken token)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:30
DrawCategoryControls(InspectionVisibility & visibility)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:74
DrawApplicationFlowRequest(const app::ApplicationFlowRequest & request)internal helperDraws one detached lifecycle request sequence, source, target, and reason without retaining the request or exposing controller access.src/tools/sdl_runtime_inspector.cpp:117
DrawApplicationFlowResult(const app::ApplicationFlowResult & result)internal helperDraws one detached lifecycle result status, request, resulting state, and optional detail.src/tools/sdl_runtime_inspector.cpp:127
DrawApplicationFlowInspection(const app::ApplicationFlowSnapshot & snapshot)internal helperDraws current lifecycle state, next sequence, optional pending request, last result, and last failure from one detached App snapshot.src/tools/sdl_runtime_inspector.cpp:139
DrawHotkeySection(const char * id,const HotkeyReferenceSnapshot & snapshot,const char * title,const HotkeyReferenceGroup group)internal helperDraws one read-only two-column group from catalog-derived hotkey snapshot rows without mapping input or mutating control behavior.src/tools/sdl_runtime_inspector.cpp:167
DrawHotkeyPanelContents(const HotkeyReferenceSnapshot & snapshot)internal helperPresents the complete derived hotkey snapshot in compact runtime, camera, selection, and debug groups and surfaces any catalog-coverage error.src/tools/sdl_runtime_inspector.cpp:190
DrawHotkeyReference(const HotkeyReferenceSnapshot & snapshot,float & hover_grace_seconds)internal helperAnchors an independent Hotkeys activator and sibling derived-reference window to the top-right viewport edge, keeping the panel open across the pointer handoff with a short hover grace period.src/tools/sdl_runtime_inspector.cpp:200
DrawCommandTable(const char * id,const std::span<const core::RuntimeCommand> commands)internal helperDraws sequence, target-tick, and command-name columns for a read-only command span in the current ImGui frame.src/tools/sdl_runtime_inspector.cpp:248
RenderShapeName(const sim::RenderProxyShape shape)internal helperReturns a display-only name for each current render-proxy shape.src/tools/sdl_runtime_inspector.cpp:270
IsSelected(const SelectionInspectionSnapshot & selection,const sim::PersistentId id)internal helperChecks the inspection snapshot's stable ordered selected-ID list without querying or mutating Render state.src/tools/sdl_runtime_inspector.cpp:282
DrawSelectionSnapshot(const SelectionInspectionSnapshot & selection)internal helperDraws cursor, hover, selected IDs, marquee, selectable count, and hit-candidate facts from a detached read-only snapshot.src/tools/sdl_runtime_inspector.cpp:286
DrawEntityDetails(const sim::EcsWorldEntityState & record)internal helperDraws the current Phase 0 transform and optional velocity, selectable, and render-proxy component values for one detached entity record.src/tools/sdl_runtime_inspector.cpp:334
DrawEntitySelectionSnapshot(const EntitySelectionInspectionSnapshot & snapshot,const PlayerMoveInspectionSnapshot & player_move,const bool show_selection,const bool show_ecs,const std::string_view selected_entity_dump,RuntimeInspectionActions & actions)internal helperDraws stable-ID entity rows and current selection facts from detached data without providing an ECS or selection mutation path.src/tools/sdl_runtime_inspector.cpp:353
DrawRenderInspection(const render::RenderInspectionSnapshot & snapshot,const app::ActorRenderCompositionWork & actor_render)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:419
DrawAssetInspection(const assets::AssetServiceInspectionSnapshot & snapshot)internal helperDraws current AssetService counters and stable manifest entries with type, policy, resolved path, cache residency, and cached byte size from a detached snapshot.src/tools/sdl_runtime_inspector.cpp:476
DrawFoundationSerializationInspection(const FoundationSerializationInspectionSnapshot & snapshot)internal helperDraws reset-foundation schema, scenario, timing, ECS, command-position, document-size, and round-trip facts from a detached snapshot.src/tools/sdl_runtime_inspector.cpp:513
DrawReplayResult(const ReplayResultInspectionSnapshot & result)internal helperDraws not-run, matched, divergent, or failed replay-result state and first-divergence details without replay controls.src/tools/sdl_runtime_inspector.cpp:554
DrawReplayInspection(const ReplaySerializationInspectionSnapshot & snapshot)internal helperDraws replay inspection through SDL using projection/view inputs and propagates backend failures.src/tools/sdl_runtime_inspector.cpp:582
KnowledgeStateName(const game::ObserverKnowledgeState state)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:630
DrawWorldInspection(const WorldInspectionSnapshot & snapshot)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:644
DrawKnownWorld(const game::PlayerWorldReadSnapshot & snapshot)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:864
DrawThroughputDelta(const char * label,const Phase3ThroughputGaugeDelta & delta)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:942
DecisionCurveName(const game::UtilityResponseCurve curve)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:956
JobFactOwnerName(const game::JobPreferenceFactOwner owner)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:972
JobRawUnitName(const game::JobPreferenceRawUnit unit)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:988
JobIneligibilityName(const game::JobPreferenceIneligibility reason)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:998
DrawJobPreferenceTraces(const Phase3EconomyInspectionSnapshot & economy)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1024
DrawPhase9EconomyInspection(const Phase9EconomyInspectionSnapshot & economy)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1103
DrawEconomyInspection(const Phase3EconomyInspectionSnapshot & economy,const std::optional<Phase3ThroughputReport> & throughput_report)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1160
WorldTimeWindowLabel(const sim::WorldTimeWindow window)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1468
OccurrenceFactOwnerName(const game::IntersectionOccurrenceFactOwner owner)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1482
OccurrenceRawUnitName(const game::IntersectionOccurrenceRawUnit unit)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1496
IncidentFactOwnerName(const game::IntersectionIncidentFactOwner owner)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1512
IncidentRawUnitName(const game::IntersectionIncidentRawUnit unit)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1526
PresentationFactOwnerName(const game::IntersectionPresentationFactOwner owner)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1539
PresentationRawUnitName(const game::IntersectionPresentationRawUnit unit)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1553
DrawIntersectionLifecycleInspection(const IntersectionInspectionSnapshot & inspection)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1563
DrawStructuredEventPresentationInspection(const StructuredEventPresentationInspectionSnapshot & inspection)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1624
FindStructuredQuestTemplate(const StructuredQuestInspectionSnapshot & inspection,const std::string_view template_id)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1667
DrawStructuredQuestInspection(const StructuredQuestInspectionSnapshot & inspection)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1674
DrawInstitutionalRequestInspection(const InstitutionalRequestInspectionSnapshot & inspection)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1737
DrawIntersectionInspection(const IntersectionInspectionSnapshot & inspection)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:1796
DrawInspectionWindow(const RuntimeInspectionData & data,const InspectionVisibility & visibility,const std::optional<Phase3ThroughputReport> & throughput_report,std::optional<sim::PersistentId> & party_leader,RuntimeInspectionActions & actions)internal helperPresents application flow, entity, selection, asset, replay, and serialization diagnostics as tabs in the read-only inspection window.src/tools/sdl_runtime_inspector.cpp:2044
DrawScriptRecoveryContents(const RuntimeInspectionData & data,RuntimeInspectionActions & actions)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:2232
DrawScriptRecoveryWindow(const RuntimeInspectionData & data,RuntimeInspectionActions & actions)internal helperInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:2300
ConfigureStyle()internal helperApplies the Runtime panel's dark colors, rounding, padding, and spacing to the active ImGui context.src/tools/sdl_runtime_inspector.cpp:2313
tools::SdlRuntimeInspector::SdlRuntimeInspector()methodAllocates the private implementation that tracks ImGui context, SDL backend, renderer, and frame lifetime without exposing ImGui types.src/tools/sdl_runtime_inspector.cpp:2348
tools::SdlRuntimeInspector::~SdlRuntimeInspector()methodEnds an unfinished frame and shuts down the renderer backend, platform backend, and ImGui context before the borrowed SDL renderer and window are destroyed.src/tools/sdl_runtime_inspector.cpp:2350
tools::SdlRuntimeInspector::Shutdown()methodReleases an active or partially initialized ImGui stack in reverse dependency order and clears every borrowed SDL handle and lifecycle flag.src/tools/sdl_runtime_inspector.cpp:2352
tools::SdlRuntimeInspector::Initialize(SDL_Window * window,SDL_Renderer * renderer,std::string & error)methodCreates the ImGui context and initializes its SDL3 and SDL_Renderer backends transactionally; invalid handles or partial backend failure leave no active context.src/tools/sdl_runtime_inspector.cpp:2386
tools::SdlRuntimeInspector::ObserveSdlEvent(const SDL_Event & event)methodForwards one raw SDL event to ImGui only while its context exists; Platform still performs the authoritative backend-neutral event translation.src/tools/sdl_runtime_inspector.cpp:2424
tools::SdlRuntimeInspector::InputCapture() constmethodReturns ImGui's current keyboard and pointer capture flags as a backend-neutral value, or no capture before initialization.src/tools/sdl_runtime_inspector.cpp:2430
tools::SdlRuntimeInspector::WorldViewport() constmethodInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:2445
tools::SdlRuntimeInspector::PlayerLensesRequested() constmethodInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:2449
tools::SdlRuntimeInspector::BeginFrame(const RuntimeInspectionData & data)methodStarts one ImGui frame, always builds the independent Hotkeys activator, conditionally builds the Runtime and Inspection panels from detached data, and returns pause or single-step button requests without applying them.src/tools/sdl_runtime_inspector.cpp:2453
tools::SdlRuntimeInspector::DrawScriptUi(const app::ScriptUiIntentBuffer & commands,const ScriptUiSpatialContext & spatial_context)methodInventory only; no authored contract note.src/tools/sdl_runtime_inspector.cpp:2601
tools::SdlRuntimeInspector::Render()methodFinalizes the current ImGui frame and submits its draw data through the borrowed SDL renderer exactly once.src/tools/sdl_runtime_inspector.cpp:3126
tools::ResolveScriptUiShortcut(const ScriptUiShortcutKey key,const ScriptUiShortcutState & state)free functionInventory only; no authored contract note.src/tools/sdl_runtime_inspector.hpp:36
tools::CaptureSettlementInspection(const game::SettlementRuntime * settlements,const sim::WorldTopology & topology)free functionInventory only; no authored contract note.src/tools/settlement_inspection.cpp:8
tools::CaptureSettlementSupplyInspection(const game::SettlementSupplyRuntime * supply)free functionInventory only; no authored contract note.src/tools/settlement_supply_inspection.cpp:8
tools::CaptureStructuredEventPresentationInspection(const game::RuntimeIncidentCatalog * catalog,const IntersectionInspectionSnapshot & intersections,const StructuredQuestInspectionSnapshot & quests,const InstitutionalRequestInspectionSnapshot & institutional_requests,const std::uint64_t evaluation_tick)free functionInventory only; no authored contract note.src/tools/structured_event_presentation_inspection.cpp:5
tools::CaptureStructuredQuestInspection(const game::RuntimeIncidentCatalog * catalog,const game::StructuredQuestRuntime * quests)free functionInventory only; no authored contract note.src/tools/structured_quest_inspection.cpp:6
tools::CaptureTravelerDisputeInspection(const app::RuntimeTravelerDisputeResult & result)free functionInventory only; no authored contract note.src/tools/traveler_dispute_inspection.cpp:6
ValidateConfig(const WatchabilitySoakConfig & config,std::string & error)internal helperInventory only; no authored contract note.src/tools/watchability_recorder.cpp:21
WriteExclusive(const std::filesystem::path & path,const std::string & document,std::string & error)internal helperInventory only; no authored contract note.src/tools/watchability_recorder.cpp:44
CheckpointDocument(const WatchabilityCheckpoint & checkpoint)internal helperInventory only; no authored contract note.src/tools/watchability_recorder.cpp:74
tools::LoadWatchabilitySoakConfig(const std::filesystem::path & path)free functionInventory only; no authored contract note.src/tools/watchability_recorder.cpp:86
tools::WatchabilityRecorder::WatchabilityRecorder(WatchabilitySoakConfig config,std::filesystem::path output_directory)methodInventory only; no authored contract note.src/tools/watchability_recorder.cpp:118
tools::WatchabilityRecorder::Begin(const std::chrono::nanoseconds now,const app::RuntimeSession & session,const core::RuntimeCommandQueue & command_queue,std::string & error)methodInventory only; no authored contract note.src/tools/watchability_recorder.cpp:122
tools::WatchabilityRecorder::Record(const std::chrono::nanoseconds now,const app::RuntimeSession & session,const core::RuntimeCommandQueue & command_queue)methodInventory only; no authored contract note.src/tools/watchability_recorder.cpp:164
tools::WatchabilityRecorder::Capture(const std::chrono::nanoseconds now,const app::RuntimeSession & session,const core::RuntimeCommandQueue & command_queue,const bool final_checkpoint)methodInventory only; no authored contract note.src/tools/watchability_recorder.cpp:189
tools::WatchabilityRecorder::WriteManifest(std::string & error) constmethodInventory only; no authored contract note.src/tools/watchability_recorder.cpp:272
tools::WatchabilitySoakConfigLoadResult::Succeeded() constinline methodInventory only; no authored contract note.src/tools/watchability_recorder.hpp:34
tools::WatchabilityRecordResult::Succeeded() constinline methodInventory only; no authored contract note.src/tools/watchability_recorder.hpp:53
tools::WatchabilityRecorder::Config() constinline methodInventory only; no authored contract note.src/tools/watchability_recorder.hpp:69
tools::WatchabilityRecorder::OutputDirectory() constinline methodInventory only; no authored contract note.src/tools/watchability_recorder.hpp:70
tools::WatchabilityRecorder::Checkpoints() constinline methodInventory only; no authored contract note.src/tools/watchability_recorder.hpp:73
tools::CaptureWildlifeIncidentInspection(const app::RuntimeWildlifeIncidentResult & result)free functionInventory only; no authored contract note.src/tools/wildlife_incident_inspection.cpp:6
tools::CaptureWildlifeRecoveryInspection(const app::RuntimeWildlifeRecoveryResult & result)free functionInventory only; no authored contract note.src/tools/wildlife_incident_inspection.cpp:20
tools::CaptureWorkLifecycleInspection(const game::WorkLifecycleRuntime * work)free functionInventory only; no authored contract note.src/tools/work_lifecycle_inspection.cpp:8
tools::CaptureWorldInspection(const sim::WorldRuntime * world)free functionInventory only; no authored contract note.src/tools/world_inspection.cpp:8
RecordFailure(std::string error)internal helperInventory only; no authored contract note.src/tools/world_replay.cpp:15
CaptureCheckpoint(const sim::WorldRuntime & runtime,const std::optional<game::ObserverKnowledgeSnapshot> & observer_knowledge,WorldReplayCheckpoint & checkpoint,std::string & error)internal helperInventory only; no authored contract note.src/tools/world_replay.cpp:19
ApplyCommand(const WorldReplayCommand & command,sim::WorldRuntime & runtime)internal helperInventory only; no authored contract note.src/tools/world_replay.cpp:46
IsHash(const std::string_view hash)internal helperInventory only; no authored contract note.src/tools/world_replay.cpp:64
ValidateCommand(const WorldReplayCommand & command)internal helperInventory only; no authored contract note.src/tools/world_replay.cpp:76
Diverged(const std::size_t index,const WorldReplayCheckpoint & expected,const WorldReplayCheckpoint & actual)internal helperInventory only; no authored contract note.src/tools/world_replay.cpp:96
ReevaluateKnowledge(const sim::WorldRuntime & runtime,std::optional<game::ObserverKnowledgeSnapshot> & knowledge,std::string & error)internal helperInventory only; no authored contract note.src/tools/world_replay.cpp:109
tools::RecordWorldReplay(sim::WorldRuntimeState initial_state,const std::span<const WorldReplayCommand> commands)free functionInventory only; no authored contract note.src/tools/world_replay.cpp:129
tools::RecordWorldReplay(sim::WorldRuntimeState initial_state,std::optional<game::ObserverKnowledgeSnapshot> initial_observer_knowledge,const std::span<const WorldReplayCommand> commands)free functionInventory only; no authored contract note.src/tools/world_replay.cpp:135
tools::ReplayWorldTranscript(const WorldReplayTranscript & transcript)free functionInventory only; no authored contract note.src/tools/world_replay.cpp:183
tools::ValidateWorldReplayTranscript(const WorldReplayTranscript & transcript,std::string & error)free functionInventory only; no authored contract note.src/tools/world_replay.cpp:255
CheckpointDocument(const WorldReplayCheckpoint & checkpoint)internal helperInventory only; no authored contract note.src/tools/world_replay_serialization.cpp:18
ParseCheckpoint(const Json & document)internal helperInventory only; no authored contract note.src/tools/world_replay_serialization.cpp:22
MovementTuningDocument(const sim::LocalMovementTuning tuning)internal helperInventory only; no authored contract note.src/tools/world_replay_serialization.cpp:27
ParseMovementTuning(const Json & document)internal helperInventory only; no authored contract note.src/tools/world_replay_serialization.cpp:34
MovementCapabilityDocument(const sim::LocalMovementCapability capability)internal helperInventory only; no authored contract note.src/tools/world_replay_serialization.cpp:42
ParseMovementCapability(const Json & document)internal helperInventory only; no authored contract note.src/tools/world_replay_serialization.cpp:49
ParseHeatTier(const std::string & name)internal helperInventory only; no authored contract note.src/tools/world_replay_serialization.cpp:58
ParseHeatCause(const std::string & name)internal helperInventory only; no authored contract note.src/tools/world_replay_serialization.cpp:74
ParseChunkOperation(const std::string & name)internal helperInventory only; no authored contract note.src/tools/world_replay_serialization.cpp:93
CommandDocument(const WorldReplayCommand & command)internal helperInventory only; no authored contract note.src/tools/world_replay_serialization.cpp:112
ParseCommand(const Json & document,const std::uint32_t source_schema_version)internal helperInventory only; no authored contract note.src/tools/world_replay_serialization.cpp:144
tools::SerializeWorldReplayTranscript(const WorldReplayTranscript & transcript)free functionInventory only; no authored contract note.src/tools/world_replay_serialization.cpp:188
tools::DeserializeWorldReplayTranscript(const std::string_view document)free functionInventory only; no authored contract note.src/tools/world_replay_serialization.cpp:229
System S.10

#Test Support

Authored test fixtures and helper functions used to express deterministic contracts without duplicating production ownership paths.

Owner

Authored test fixtures and helper functions used to express deterministic contracts without duplicating production ownership paths.

Dependencies

Catch2 plus the public App, Controls, Render, Simulation, Game, Assets, and Core APIs exercised by each test file.

Authoritative state

Test helpers create local events, snapshots, projection views, ECS fixtures, or comparison values. No test helper owns runtime state outside one test case.

Execution path

  1. Input helpers construct backend-neutral key, pointer, and wheel events for Controls and Render adapter tests.
  2. ECS and render helpers create explicit stable-ID snapshots and return required captured state for focused assertions.
  3. Serialization helpers build compact entity states and require successful document creation before round-trip assertions.
  4. Foundation helpers construct one scenario and scene, require typed serialization results, continue original and restored owners, and make bounded document mutations for rejection tests.
  5. Replay helpers build the fixed phase0-foundation scenario, define eight runtime/camera/selection/run-control input steps, require typed replay results, and compare generated transcript bytes to the checked-in fixture.
  6. Selection helpers construct worlds, default views, click records, and pointer events so point and marquee behavior use the production path.
  7. Settlement-work fixtures construct bounded Actor, Resource, Work, Supply, topology, local-navigation, and authored-anchor candidates so exact food and water movement, worker loss, persistence, replay, and conservation use the same production owners. Focused proofs cover derived composition-cache reuse and invalidation, rotating scheduler continuation without a complete Supply by Actor matrix, active movement indexes that exclude retained terminal history, restore-time arrival hydration, Actor-only marquee selection, and complete-Party command recipients.
  8. Construction-continuity fixtures advance one real project through material delivery and partial build progress before applying an Actor-owned critical interruption. They verify atomic Work release, unchanged material and progress, bounded replacement traversal, direct-control deferral, successful handoff, timeout failure only after a complete replacement scan, terminal Settlement outcome, reopened cadence, query fields, and standard-package presentation through production APIs.

Key types and contracts

  • Catch2 test cases remain declarative test registrations; the function inventory lists every separately authored C++ helper definition.
  • Fixtures use production plain values and public APIs. They do not reach into private registries, caches, or renderer handles.
135 source files in this module
647 indexed function definitions

This is source evidence, not an ownership contract. Rows without an authored note make no behavioral claim.

FunctionKindAuthored note statusSource
OpenAssets()test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:25
RequireScenario(const worldforge::game::ScenarioLoadResult & result)test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:34
RequireScene(worldforge::game::SceneLoadResult & result)test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:42
RequireWorld(worldforge::game::RuntimeWorldLoadResult & result)test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:51
RequireRoster(worldforge::game::RuntimeActorRosterLoadResult & result)test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:60
RequireEconomy(worldforge::game::RuntimeEconomyLoadResult & result)test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:69
RequireInspectedActor(const worldforge::tools::ActorInspectionSnapshot & snapshot)test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:78
RequireSelectedControlAuthority(const worldforge::tools::ActorInspectionSnapshot & snapshot)test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:87
RequireSelectedParty(const worldforge::tools::ActorInspectionSnapshot & snapshot)test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:96
RequireSelectedPartyMoveIntent(const worldforge::tools::ActorInspectionSnapshot & snapshot)test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:105
RequireLastTransition(const worldforge::tools::ActorInspectionSnapshot & snapshot)test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:114
RequireLastScheduledUpdate(const worldforge::tools::ActorInspectionSnapshot & snapshot)test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:123
RequireActorDocument(const worldforge::game::ActorStateSerializationResult & result)test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:132
RequireActorStates(const worldforge::game::ActorStateDeserializationResult & result)test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:141
AdvanceTravelerToArrival(worldforge::app::RuntimeSession & session,const worldforge::sim::PersistentId actor_id,const std::uint64_t maximum_ticks=5000)test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:149
front()test helperInventory only; no authored contract note.tests/actor_diagnostics_tests.cpp:598
InvalidEnumValue()test helperInventory only; no authored contract note.tests/actor_focus_reasoner_tests.cpp:14
DecisionActor(const std::uint64_t id=42)test helperInventory only; no authored contract note.tests/actor_focus_reasoner_tests.cpp:19
AllCandidates()test helperInventory only; no authored contract note.tests/actor_focus_reasoner_tests.cpp:59
RequireCandidateTrace(const worldforge::game::ActorFocusDecisionResult & result,const worldforge::game::ActorFocus focus)test helperInventory only; no authored contract note.tests/actor_focus_reasoner_tests.cpp:91
RequireConsideration(const worldforge::game::ActorFocusCandidateTrace & candidate,const worldforge::game::ActorFocusConsiderationKind kind)test helperInventory only; no authored contract note.tests/actor_focus_reasoner_tests.cpp:104
MotivationWorldDefinition()test helperInventory only; no authored contract note.tests/actor_motivation_tests.cpp:17
WorkingActor()test helperInventory only; no authored contract note.tests/actor_motivation_tests.cpp:42
RequireWorld(worldforge::sim::WorldRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/actor_motivation_tests.cpp:81
RequireActors(worldforge::game::ActorRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/actor_motivation_tests.cpp:86
RequireCreated(const worldforge::game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/actor_motivation_tests.cpp:92
RequireWorkCreated(const worldforge::game::WorkCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/actor_motivation_tests.cpp:98
PlanWorldDefinition()test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:17
IdleActor(const std::uint64_t id)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:84
RequireWorld(worldforge::sim::WorldRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:118
RequireActors(worldforge::game::ActorRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:126
RequireActor(const worldforge::game::ActorRuntime & actors,const worldforge::sim::PersistentId actor)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:134
RequireBefore(const worldforge::game::ActorPlanTransitionResult & result)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:145
RequireAfter(const worldforge::game::ActorPlanTransitionResult & result)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:154
RequireRouteProgress(const worldforge::game::ActorPlanTransitionResult & result)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:163
RequireRouteMutation(const worldforge::game::ActorPlanTransitionResult & result)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:172
RequireMutationAfter(const worldforge::sim::RouteTravelMutationResult & result)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:181
RequireTraveler(const worldforge::sim::WorldRuntime & world,const worldforge::sim::PersistentId actor)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:189
RequireActorDocument(const worldforge::game::ActorStateSerializationResult & result)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:200
RequireActorStates(const worldforge::game::ActorStateDeserializationResult & result)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:209
RequireWorldDocument(const worldforge::sim::WorldRuntimeStateSerializationResult & result)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:218
RequireWorldState(const worldforge::sim::WorldRuntimeStateDeserializationResult & result)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:227
RequireRestoredWorld(worldforge::sim::WorldRuntimeStateBuildResult & result)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:236
RequireInterruption(const worldforge::game::ActorState & actor)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:245
FocusSnapshot(const worldforge::game::ActorRuntime & actors,const worldforge::sim::PersistentId actor,const worldforge::game::ActorFocus focus,const worldforge::sim::SiteId target_site,const std::uint64_t tick)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:254
TransitionRequest(const worldforge::sim::PersistentId actor,const worldforge::game::ActorPlanTransitionOperation operation,const worldforge::game::ActorPlanChangeReason reason,const std::uint64_t tick)test helperInventory only; no authored contract note.tests/actor_plan_tests.cpp:273
RoutineActor()test helperInventory only; no authored contract note.tests/actor_routine_tests.cpp:10
Calendar(const std::uint64_t day,const std::uint16_t minute)test helperInventory only; no authored contract note.tests/actor_routine_tests.cpp:38
ScheduleWorldDefinition()test helperInventory only; no authored contract note.tests/actor_schedule_tests.cpp:13
IdleActor(const std::uint64_t id)test helperInventory only; no authored contract note.tests/actor_schedule_tests.cpp:65
FoodTaskActor()test helperInventory only; no authored contract note.tests/actor_schedule_tests.cpp:97
TravelingActor(const worldforge::game::ActorFocus focus)test helperInventory only; no authored contract note.tests/actor_schedule_tests.cpp:119
FocusSiteBindings()test helperInventory only; no authored contract note.tests/actor_schedule_tests.cpp:141
RequireWorld(worldforge::sim::WorldRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/actor_schedule_tests.cpp:153
RequireActors(worldforge::game::ActorRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/actor_schedule_tests.cpp:161
RequireActor(const worldforge::game::ActorRuntime & actors,const std::uint64_t id)test helperInventory only; no authored contract note.tests/actor_schedule_tests.cpp:169
RequireLastScheduledUpdate(const worldforge::game::ActorRuntime & actors)test helperInventory only; no authored contract note.tests/actor_schedule_tests.cpp:180
AdvanceThrough(worldforge::sim::WorldRuntime & world,worldforge::game::ActorRuntime & actors,const TickRange ticks)test helperInventory only; no authored contract note.tests/actor_schedule_tests.cpp:193
InvalidEnumValue()test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:17
ActorWorldDefinition(const worldforge::sim::TopologyRevision revision=worldforge::sim::TopologyRevision{1})test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:22
RequireWorld(worldforge::sim::WorldRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:96
RequireActors(worldforge::game::ActorRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:104
ActorDefinitions()test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:112
StartTraveler(worldforge::sim::WorldRuntime & world)test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:237
RequireSnapshots(const worldforge::game::ActorRuntime & actors,const worldforge::sim::WorldRuntime & world)test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:245
RequireRouteProgress(const worldforge::game::ActorSnapshot & actor)test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:256
front()test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:352
front()test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:354
front()test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:735
front()test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:743
front()test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:830
front()test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:834
back()test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:850
back()test helperInventory only; no authored contract note.tests/actor_state_tests.cpp:860
LoadAtlas()test helperInventory only; no authored contract note.tests/actor_visual_breadth_tests.cpp:15
PresentationFor(const worldforge::game::ActorAppearanceRecord & appearance,const worldforge::core::SpriteLifeStage stage)test helperInventory only; no authored contract note.tests/actor_visual_breadth_tests.cpp:34
ExpectedLegal(const ApplicationFlowState from,const ApplicationFlowState to,const ApplicationFlowReason reason)test helperInventory only; no authored contract note.tests/application_flow_tests.cpp:84
RequireValue(const std::optional<Value> & value)test helperInventory only; no authored contract note.tests/application_flow_tests.cpp:94
SourceFiles(const fs::path & root)test helperInventory only; no authored contract note.tests/config_contract_tests.cpp:19
ReadText(const fs::path & path)test helperInventory only; no authored contract note.tests/config_contract_tests.cpp:33
ProjectIncludes(const std::string & text)test helperInventory only; no authored contract note.tests/config_contract_tests.cpp:38
ContainsInOrder(const std::string_view text,const std::vector<std::string_view> & required_tokens)test helperInventory only; no authored contract note.tests/config_contract_tests.cpp:60
RequireCreated(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/construction_tests.cpp:13
RequireRecord(std::optional<Record> record)test helperInventory only; no authored contract note.tests/construction_tests.cpp:18
BuildFixture(const sim::WorldCellCoordinate origin={.x = 0, .y = 0},const game::ConstructionOrientation orientation=game::ConstructionOrientation::north,const std::uint64_t start_tick=1)test helperInventory only; no authored contract note.tests/construction_tests.cpp:39
Claim(ConstructionFixture & fixture,const std::uint64_t tick=2)test helperInventory only; no authored contract note.tests/construction_tests.cpp:90
Deliver(ConstructionFixture & fixture)test helperInventory only; no authored contract note.tests/construction_tests.cpp:109
CompleteProject(ConstructionFixture & fixture,const game::ConstructionId id,const game::InventoryContainerId carrier,const std::uint64_t start_tick,const std::uint64_t build_ticks)test helperInventory only; no authored contract note.tests/construction_tests.cpp:121
RequireResourceCreated(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/construction_tool_use_tests.cpp:12
RequireRecord(std::optional<Record> record)test helperInventory only; no authored contract note.tests/construction_tool_use_tests.cpp:17
BuildReadyFixture(const bool include_tool)test helperInventory only; no authored contract note.tests/construction_tool_use_tests.cpp:37
BuildRequest(const ToolUseFixture & fixture)test helperInventory only; no authored contract note.tests/construction_tool_use_tests.cpp:114
TakeRequired(std::optional<Value> value)test helperInventory only; no authored contract note.tests/construction_work_scheduler_tests.cpp:17
RequireCreated(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/construction_work_scheduler_tests.cpp:24
SchedulerActor(const std::uint64_t id)test helperInventory only; no authored contract note.tests/construction_work_scheduler_tests.cpp:29
BuildSchedulerWorld(const std::size_t actor_count)test helperInventory only; no authored contract note.tests/construction_work_scheduler_tests.cpp:57
BuildSchedulerActors(const sim::WorldRuntime & world,const std::size_t actor_count)test helperInventory only; no authored contract note.tests/construction_work_scheduler_tests.cpp:96
BuildSchedulerFixture(const std::size_t actor_count,const std::uint64_t carrier_actor)test helperInventory only; no authored contract note.tests/construction_work_scheduler_tests.cpp:125
AddPreparedConstruction(SchedulerFixture & fixture,const std::uint64_t construction_value,const std::uint64_t tick)test helperInventory only; no authored contract note.tests/construction_work_scheduler_tests.cpp:229
AdvanceConstruction(SchedulerFixture & fixture,const std::uint64_t tick)test helperInventory only; no authored contract note.tests/construction_work_scheduler_tests.cpp:276
LoadFixture()test helperInventory only; no authored contract note.tests/content_catalog_tests.cpp:16
Parse(const nlohmann::json & document)test helperInventory only; no authored contract note.tests/content_catalog_tests.cpp:23
OpenAssets()test helperInventory only; no authored contract note.tests/continuity_harness_tests.cpp:39
BuildSession(worldforge::app::RuntimeSessionCandidate & candidate)test helperInventory only; no authored contract note.tests/continuity_harness_tests.cpp:48
Actor(const std::uint64_t id,const std::uint64_t revision=1)test helperInventory only; no authored contract note.tests/control_authority_tests.cpp:12
Build(const std::span<const game::ActorState> actors)test helperInventory only; no authored contract note.tests/control_authority_tests.cpp:48
Transition(game::ControlAuthorityRuntime & runtime,const game::ActorState & actor,const game::ActorControlMode target,const game::ActorControlReason reason,const std::uint64_t tick,const std::optional<game::AssignmentOrderId> order=std::nullopt)test helperInventory only; no authored contract note.tests/control_authority_tests.cpp:55
KeyEvent(const worldforge::core::PlatformEventType type,const worldforge::core::PlatformKey key)test helperBuilds one backend-neutral keyboard event for control transition and multi-binding tests.tests/control_tests.cpp:17
PointerEvent(const worldforge::core::PlatformEventType type,const double x_pixels,const double y_pixels,const worldforge::core::PlatformPointerButton button=worldforge::core::PlatformPointerButton::unknown)test helperBuilds one pointer event with explicit pixel position and optional button for control-state tests.tests/control_tests.cpp:27
WheelEvent(const double x_pixels,const double y_pixels,const double x_steps,const double y_steps)test helperBuilds one pointer-wheel event with explicit cursor position and horizontal/vertical steps.tests/control_tests.cpp:39
EntityState(const std::uint64_t id,const double x_meters)test helperBuilds a compact stable-ID transform record used to compare serialization order across equivalent worlds.tests/ecs_serialization_tests.cpp:11
RequireDocument(const worldforge::sim::EcsWorldSerializationResult & result)test helperRequires a successful serialization result through Catch2 and returns its document text for assertions.tests/ecs_serialization_tests.cpp:21
RequireState(const worldforge::sim::EcsWorld & world,const worldforge::sim::EntityHandle handle)test helperCaptures an entity by stable handle, requires success through Catch2, and returns the plain state for assertions.tests/ecs_tests.cpp:12
State(const std::uint64_t id,const double x_meters,const double velocity_meters_per_second)test helperBuilds a compact test-entity state with persistent ID, transform, and velocity for restore/order tests.tests/ecs_tests.cpp:22
TakeRequired(std::optional<Value> value)test helperInventory only; no authored contract note.tests/farming_tests.cpp:18
RequireCreated(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/farming_tests.cpp:25
Resident(const std::uint64_t id)test helperInventory only; no authored contract note.tests/farming_tests.cpp:30
BuildWorld()test helperInventory only; no authored contract note.tests/farming_tests.cpp:57
BuildFixture()test helperInventory only; no authored contract note.tests/farming_tests.cpp:125
Designate(Fixture & fixture,const game::FarmingEnvironmentalPolicy environmental_policy={},const bool recurrence_enabled=false,const std::uint64_t replant_delay_ticks=0)test helperInventory only; no authored contract note.tests/farming_tests.cpp:164
CompletePhysicalCropWork(Fixture & fixture,const game::FarmingCycleId id,const std::uint64_t harvest_tick=10)test helperInventory only; no authored contract note.tests/farming_tests.cpp:197
FoundationScenario()test helperBuilds the bounded scenario used by foundation persistence and continuation tests.tests/foundation_serialization_tests.cpp:21
FoundationScene()test helperBuilds one complete current-component scene entity with a stable ID and debug name for nested ECS proof.tests/foundation_serialization_tests.cpp:37
RequireDocument(const worldforge::app::Phase0FoundationSerializationResult & result)test helperRequires successful foundation serialization and returns its deterministic document text.tests/foundation_serialization_tests.cpp:67
RequireState(const worldforge::app::Phase0FoundationDeserializationResult & result)test helperRequires successful foundation deserialization and returns the detached typed state.tests/foundation_serialization_tests.cpp:76
ContinueToCompletion(worldforge::app::RuntimeSession & session,worldforge::core::RuntimeCommandQueue & commands)test helperDrains due commands and advances a session until completion, failing immediately if restored scheduler state cannot progress.tests/foundation_serialization_tests.cpp:84
ReplaceFirst(std::string & text,const std::string & before,const std::string & after)test helperReplaces one required document field occurrence to create bounded invalid-input cases without a second JSON builder.tests/foundation_serialization_tests.cpp:97
BuildWorld()test helperInventory only; no authored contract note.tests/ground_terrain_tests.cpp:12
BuildWorldWithLand()test helperInventory only; no authored contract note.tests/ground_terrain_tests.cpp:54
TakeRequired(std::optional<Value> value)test helperInventory only; no authored contract note.tests/infrastructure_construction_tests.cpp:15
RequireCreated(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/infrastructure_construction_tests.cpp:22
Resident(const std::uint64_t id)test helperInventory only; no authored contract note.tests/infrastructure_construction_tests.cpp:27
BuildWorld()test helperInventory only; no authored contract note.tests/infrastructure_construction_tests.cpp:54
BuildFixture()test helperInventory only; no authored contract note.tests/infrastructure_construction_tests.cpp:133
Designate(Fixture & fixture)test helperInventory only; no authored contract note.tests/infrastructure_construction_tests.cpp:165
Deliver(Fixture & fixture,const sim::PersistentId actor,const game::InventoryContainerId carrier)test helperInventory only; no authored contract note.tests/infrastructure_construction_tests.cpp:184
CompleteRoad(Fixture & fixture)test helperInventory only; no authored contract note.tests/infrastructure_construction_tests.cpp:200
Require(std::optional<Value> value,const std::string & error)test helperInventory only; no authored contract note.tests/institutional_request_tests.cpp:24
OpenAssets()test helperInventory only; no authored contract note.tests/institutional_request_tests.cpp:32
LoadCatalog(assets::AssetService & assets)test helperInventory only; no authored contract note.tests/institutional_request_tests.cpp:41
BuildSession()test helperInventory only; no authored contract note.tests/institutional_request_tests.cpp:47
RequireRequest(const game::InstitutionalRequestOperationResult & result)test helperInventory only; no authored contract note.tests/institutional_request_tests.cpp:64
RequestAt(const std::uint64_t tick=0)test helperInventory only; no authored contract note.tests/institutional_request_tests.cpp:71
OpenAssets()test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:34
IncidentFamilies()test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:42
RequireIncidentCatalog(worldforge::assets::AssetService & assets)test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:54
DefaultIncidentFamilies()test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:63
Phase8IncidentFamilies()test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:77
RequireScenario(const worldforge::game::ScenarioLoadResult & result)test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:87
RequireScene(worldforge::game::SceneLoadResult & result)test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:95
RequireWorld(worldforge::game::RuntimeWorldLoadResult & result)test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:104
RequireRoster(worldforge::game::RuntimeActorRosterLoadResult & result)test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:113
RequireOptional(std::optional<Value> & value,const std::string_view label)test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:122
RequireOptional(const std::optional<Value> & value,const std::string_view label)test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:130
Provenance(const worldforge::sim::WorldFactSourceOwner owner,const worldforge::sim::WorldFactUnit unit,const std::uint64_t tick)test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:137
SiteFacts(const std::uint64_t site,const std::int64_t opportunity,const std::uint64_t tick)test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:144
WorldFacts(const std::uint64_t tick)test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:161
ParticipantAtSite(const worldforge::sim::PersistentId actor,const worldforge::sim::SiteId site)test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:187
ParticipantOnRoute(const worldforge::sim::PersistentId actor)test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:211
Snapshot()test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:241
HighOccurrenceCandidates(const worldforge::sim::HeatTier tier=worldforge::sim::HeatTier::warm)test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:257
PresentationContext(const worldforge::game::IntersectionCandidateEvaluationResult & candidates,const worldforge::game::IntersectionOccurrenceResult & occurrence,const worldforge::game::ObserverKnowledgeState knowledge,const std::optional<worldforge::sim::PersistentId> selected_actor=std::nullopt,const std::optional<worldforge::sim::SiteId> viewed_site=std::nullopt)test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:277
ActivationContext(const worldforge::game::IntersectionCandidateEvaluationResult & candidates,const worldforge::game::IntersectionOccurrenceResult & occurrence,const worldforge::game::IntersectionIncidentSelectionResult & selection,const worldforge::game::IntersectionPresentationResult & presentation)test helperInventory only; no authored contract note.tests/intersection_candidate_tests.cpp:300
OpenScheduleAssets()test helperInventory only; no authored contract note.tests/intersection_schedule_tests.cpp:21
Near(const double first,const double second)test helperCompares two floating-point values against the shared isometric test tolerance.tests/isometric_tests.cpp:25
KeyEvent(const worldforge::core::PlatformEventType type,const worldforge::core::PlatformKey key)test helperBuilds a keyboard event used to test camera control mapping without SDL.tests/isometric_tests.cpp:29
WheelEvent(const double x_pixels,const double y_pixels,const double y_steps)test helperBuilds a vertical wheel event at a specified pixel anchor for zoom mapping tests.tests/isometric_tests.cpp:39
RequireWorkCreated(const game::WorkCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/job_preference_tests.cpp:17
RequireResourceCreated(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/job_preference_tests.cpp:22
RequireRecord(std::optional<Record> record)test helperInventory only; no authored contract note.tests/job_preference_tests.cpp:27
BuildFixture(const std::uint64_t source_quantity=20)test helperInventory only; no authored contract note.tests/job_preference_tests.cpp:45
Candidate(const PreferenceFixture & fixture,const game::JobId job,const game::DemandId demand,const std::uint64_t subject,const std::uint64_t quantity=5)test helperInventory only; no authored contract note.tests/job_preference_tests.cpp:65
Snapshot(const PreferenceFixture & fixture)test helperInventory only; no authored contract note.tests/job_preference_tests.cpp:98
CurrentFacts()test helperInventory only; no authored contract note.tests/job_preference_tests.cpp:114
SelectedCandidate(const game::JobPreferenceDecisionResult & result)test helperInventory only; no authored contract note.tests/job_preference_tests.cpp:127
TakeRequired(std::optional<Value> value)test helperInventory only; no authored contract note.tests/land_conversion_tests.cpp:16
RequireCreated(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/land_conversion_tests.cpp:23
Resident(const std::uint64_t id)test helperInventory only; no authored contract note.tests/land_conversion_tests.cpp:28
BuildWorld()test helperInventory only; no authored contract note.tests/land_conversion_tests.cpp:55
BuildFixture()test helperInventory only; no authored contract note.tests/land_conversion_tests.cpp:125
Designate(Fixture & fixture)test helperInventory only; no authored contract note.tests/land_conversion_tests.cpp:160
WitnessRequest(const std::uint64_t holder=42,const std::uint64_t created_at_tick=100,const std::uint16_t intensity=8000)test helperInventory only; no authored contract note.tests/memory_tests.cpp:13
BuildRuntime()test helperInventory only; no authored contract note.tests/memory_tests.cpp:30
ObserverWorldDefinition()test helperInventory only; no authored contract note.tests/observer_knowledge_tests.cpp:14
RequireRuntime(worldforge::sim::WorldRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/observer_knowledge_tests.cpp:92
RequireRawFacts(const worldforge::sim::RawWorldFactResult & result)test helperInventory only; no authored contract note.tests/observer_knowledge_tests.cpp:101
RequireKnowledge(const worldforge::game::ObserverKnowledgeResult & result)test helperInventory only; no authored contract note.tests/observer_knowledge_tests.cpp:110
RequireKnowledgeDocument(const worldforge::game::ObserverKnowledgeSerializationResult & result)test helperInventory only; no authored contract note.tests/observer_knowledge_tests.cpp:119
RequireRestoredKnowledge(const worldforge::game::ObserverKnowledgeDeserializationResult & result)test helperInventory only; no authored contract note.tests/observer_knowledge_tests.cpp:128
StandardFilter()test helperInventory only; no authored contract note.tests/observer_knowledge_tests.cpp:136
ReplaceAll(std::string & text,const std::string_view from,const std::string_view to)test helperInventory only; no authored contract note.tests/party_tests.cpp:33
OpenAssets()test helperInventory only; no authored contract note.tests/party_tests.cpp:41
Require(std::optional<Value> value,const std::string & error)test helperInventory only; no authored contract note.tests/party_tests.cpp:49
BuildSession(const bool include_phase3_economy=true,const bool quiet_route=false)test helperInventory only; no authored contract note.tests/party_tests.cpp:57
BuildPartyRuntime(const app::RuntimeSession & session)test helperInventory only; no authored contract note.tests/party_tests.cpp:100
RequireAfter(const game::PartyOperationResult & result)test helperInventory only; no authored contract note.tests/party_tests.cpp:107
AdvanceThroughRouteArrivals(app::RuntimeSession & session,const std::initializer_list<sim::PersistentId> actors)test helperInventory only; no authored contract note.tests/party_tests.cpp:115
ReplayScenario()test helperBuilds the fixed 50 ms, ten-tick phase0-foundation scenario with seed 104729.tests/phase0_replay_tests.cpp:41
ReplayScene()test helperBuilds one selectable and renderable stable-ID entity for camera and pointer-selection replay proof.tests/phase0_replay_tests.cpp:57
ReplayInputs()test helperDefines eight ordered steps covering pan, pointer zoom, pause, single step, resume, diagnostics, bounded fast-forward, full scenario reset, and deterministic continuation.tests/phase0_replay_tests.cpp:87
RecordTranscript()test helperRecords the standard schema 20 fixture through production owners and requires the final tick, diagnostics, and selected entity state.tests/phase0_replay_tests.cpp:229
RequireDocument(const worldforge::tools::Phase0ReplaySerializationResult & result)test helperRequires successful replay serialization and returns the stable document text for fixture and round-trip assertions.tests/phase0_replay_tests.cpp:254
RequireTranscript(const worldforge::tools::Phase0ReplayDeserializationResult & result)test helperRequires successful replay deserialization and returns detached typed transcript state.tests/phase0_replay_tests.cpp:263
BuildLabReplaySession(const bool include_phase3_economy=true,const bool quiet_route=false,const bool focused_phase3_fixture=false,const bool activate_destination_chunk=false,const std::uint32_t active_chunk_count=2)test helperLoads the isometric-lab scenario, scene, world, and actor roster through production asset owners for actor replay proof.tests/phase0_replay_tests.cpp:272
TakeControlAction(const worldforge::app::RuntimeSession & session,const worldforge::sim::PersistentId actor_id=worldforge::sim::PersistentId{42})test helperInventory only; no authored contract note.tests/phase0_replay_tests.cpp:362
LabTickInput(const std::uint64_t input_tick,const std::optional<worldforge::sim::HeatTier> heat_target=std::nullopt)test helperBuilds one fixed actor replay tick with an optional recorded heat transition for actor 42.tests/phase0_replay_tests.cpp:381
LabFastForwardInput(const std::uint64_t tick_budget)test helperInventory only; no authored contract note.tests/phase0_replay_tests.cpp:403
FastForwardInputs(std::uint64_t current_tick,const std::uint64_t target_tick)test helperInventory only; no authored contract note.tests/phase0_replay_tests.cpp:420
SetReplayRoutePressure(worldforge::app::RuntimeSession & session,const std::int64_t pressure_units)test helperInventory only; no authored contract note.tests/phase0_replay_tests.cpp:430
AdvanceReplayActorToSite(worldforge::app::RuntimeSession & session,const worldforge::sim::PersistentId actor,const worldforge::sim::SiteId site)test helperInventory only; no authored contract note.tests/phase0_replay_tests.cpp:453
SetReplayActorNeeds(worldforge::app::RuntimeSession & session,const worldforge::sim::PersistentId actor_id,const std::uint16_t hunger_pressure_basis_points,const std::uint16_t rest_pressure_basis_points)test helperInventory only; no authored contract note.tests/phase0_replay_tests.cpp:476
SetReplayMovementRate(worldforge::app::RuntimeSession & session,const std::int64_t millimeters_per_second)test helperInventory only; no authored contract note.tests/phase0_replay_tests.cpp:493
RequireLabActor(const worldforge::app::RuntimeSession & session)test helperRequires actor 42 from the replay session and returns its detached state for assertions.tests/phase0_replay_tests.cpp:505
ReplaceFirst(std::string & text,const std::string & before,const std::string & after)test helperChanges one required replay document field to create version and header rejection cases.tests/phase0_replay_tests.cpp:518
front()test helperInventory only; no authored contract note.tests/phase0_replay_tests.cpp:1818
OpenAssets()test helperInventory only; no authored contract note.tests/phase10_closure_tests.cpp:29
BuildSession(assets::AssetService & assets)test helperInventory only; no authored contract note.tests/phase10_closure_tests.cpp:40
PopulationActor(const std::size_t index)test helperInventory only; no authored contract note.tests/phase10_closure_tests.cpp:56
BuildWorld()test helperInventory only; no authored contract note.tests/phase10_progression_tests.cpp:20
CraftingActor(const std::uint64_t id,const game::JobId job,const game::WorkTaskId task,const std::uint64_t completed_at_tick)test helperInventory only; no authored contract note.tests/phase10_progression_tests.cpp:53
CompleteCraftingWork(game::WorkLifecycleRuntime & work,const sim::PersistentId actor,const std::uint64_t source_id,const std::uint64_t start_tick)test helperInventory only; no authored contract note.tests/phase10_progression_tests.cpp:98
Candidate(const game::JobId job,const std::uint16_t capability)test helperInventory only; no authored contract note.tests/phase10_progression_tests.cpp:126
SocialParticipant(const sim::PersistentId actor,const std::uint16_t social,const std::uint16_t sociability,const std::uint16_t companionship,const std::uint16_t stress)test helperInventory only; no authored contract note.tests/phase10_progression_tests.cpp:157
ResolvedSupportIncident()test helperInventory only; no authored contract note.tests/phase10_progression_tests.cpp:175
SupportMemories()test helperInventory only; no authored contract note.tests/phase10_progression_tests.cpp:215
LoadCatalog()test helperInventory only; no authored contract note.tests/phase11_closure_tests.cpp:15
ActiveIncidentState()test helperInventory only; no authored contract note.tests/phase11_closure_tests.cpp:27
Quest(const std::uint64_t id,const std::uint64_t deadline_tick)test helperInventory only; no authored contract note.tests/phase11_closure_tests.cpp:85
front()test helperInventory only; no authored contract note.tests/phase11_closure_tests.cpp:143
OpenAssets()test helperInventory only; no authored contract note.tests/phase12_defense_tests.cpp:21
BuildSession(assets::AssetService & assets)test helperInventory only; no authored contract note.tests/phase12_defense_tests.cpp:32
FirstSettlement(const app::RuntimeSession & session)test helperInventory only; no authored contract note.tests/phase12_defense_tests.cpp:48
FactionState()test helperInventory only; no authored contract note.tests/phase12_faction_tests.cpp:17
OpenAssets()test helperInventory only; no authored contract note.tests/phase12_faction_tests.cpp:71
BuildSession(assets::AssetService & assets)test helperInventory only; no authored contract note.tests/phase12_faction_tests.cpp:82
ActorIds(const app::RuntimeSession & session)test helperInventory only; no authored contract note.tests/phase12_faction_tests.cpp:98
AddTargetHousehold(app::RuntimeSession & session)test helperInventory only; no authored contract note.tests/phase12_faction_tests.cpp:106
Require(std::optional<Value> value,const std::string & error)test helperInventory only; no authored contract note.tests/phase15_closure_tests.cpp:31
OpenAssets()test helperInventory only; no authored contract note.tests/phase15_closure_tests.cpp:39
LoadWorld(assets::AssetService & assets)test helperInventory only; no authored contract note.tests/phase15_closure_tests.cpp:50
BuildSession(const std::optional<sim::ChunkId> initially_unloaded_chunk=std::nullopt)test helperInventory only; no authored contract note.tests/phase15_closure_tests.cpp:58
TakeControl(app::RuntimeSession & session,const sim::PersistentId actor_id)test helperInventory only; no authored contract note.tests/phase15_closure_tests.cpp:96
GroundMove(app::RuntimeSession & session,const sim::Transform2D destination,const std::uint64_t sequence)test helperInventory only; no authored contract note.tests/phase15_closure_tests.cpp:113
AdvanceUntilArrived(app::RuntimeSession & session,const sim::PersistentId actor,const std::uint64_t maximum_ticks)test helperInventory only; no authored contract note.tests/phase15_closure_tests.cpp:129
OpenAssets()test helperInventory only; no authored contract note.tests/phase16_settlement_content_tests.cpp:41
OpenLegacySettlementAssets()test helperInventory only; no authored contract note.tests/phase16_settlement_content_tests.cpp:50
BuildSession(app::RuntimeSessionCandidate & candidate)test helperInventory only; no authored contract note.tests/phase16_settlement_content_tests.cpp:81
CommitmentWorldDefinition()test helperInventory only; no authored contract note.tests/phase17_commitment_tests.cpp:14
WorkingActor(const std::uint64_t id)test helperInventory only; no authored contract note.tests/phase17_commitment_tests.cpp:42
RequireWorld(worldforge::sim::WorldRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/phase17_commitment_tests.cpp:76
RequireActors(worldforge::game::ActorRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/phase17_commitment_tests.cpp:83
RequireCreated(const worldforge::game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/phase17_commitment_tests.cpp:90
BuildWorld()test helperInventory only; no authored contract note.tests/phase17_generational_closure_tests.cpp:29
EmigrantActor()test helperInventory only; no authored contract note.tests/phase17_generational_closure_tests.cpp:61
ResidentActor()test helperInventory only; no authored contract note.tests/phase17_generational_closure_tests.cpp:87
RequireResource(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/phase17_generational_closure_tests.cpp:97
BuildOwners()test helperInventory only; no authored contract note.tests/phase17_generational_closure_tests.cpp:120
RequestFor(const EmigrationOwners & owners)test helperInventory only; no authored contract note.tests/phase17_generational_closure_tests.cpp:212
Capture(const EmigrationOwners & owners)test helperInventory only; no authored contract note.tests/phase17_generational_closure_tests.cpp:246
RunEmigration()test helperInventory only; no authored contract note.tests/phase17_generational_closure_tests.cpp:255
PopulationActor(const std::size_t index)test helperInventory only; no authored contract note.tests/phase17_generational_closure_tests.cpp:265
BuildWorld()test helperInventory only; no authored contract note.tests/phase17_health_care_tests.cpp:18
Resident(const std::uint64_t id)test helperInventory only; no authored contract note.tests/phase17_health_care_tests.cpp:51
BuildCareFixture()test helperInventory only; no authored contract note.tests/phase17_health_care_tests.cpp:96
OpenCare(CareFixture & fixture,const app::RuntimeHealthCareKind kind)test helperInventory only; no authored contract note.tests/phase17_health_care_tests.cpp:151
CompletionRequest(const CareFixture & fixture,const app::RuntimeHealthCareWorkResult & opened,const app::RuntimeHealthCareKind kind)test helperInventory only; no authored contract note.tests/phase17_health_care_tests.cpp:176
RunCompleteCareCycle(const bool prove_rollback)test helperInventory only; no authored contract note.tests/phase17_health_care_tests.cpp:222
BuildWorld()test helperInventory only; no authored contract note.tests/phase17_life_transition_tests.cpp:26
ElderActor()test helperInventory only; no authored contract note.tests/phase17_life_transition_tests.cpp:58
SurvivorActor()test helperInventory only; no authored contract note.tests/phase17_life_transition_tests.cpp:83
RequireResource(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/phase17_life_transition_tests.cpp:93
RequireWork(const game::WorkCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/phase17_life_transition_tests.cpp:99
BuildOwners()test helperInventory only; no authored contract note.tests/phase17_life_transition_tests.cpp:121
RequestFor(const LifeOwners & owners)test helperInventory only; no authored contract note.tests/phase17_life_transition_tests.cpp:200
RunCycle()test helperInventory only; no authored contract note.tests/phase17_life_transition_tests.cpp:234
BuildWorld()test helperInventory only; no authored contract note.tests/phase17_relationship_household_tests.cpp:26
Resident(const sim::PersistentId id)test helperInventory only; no authored contract note.tests/phase17_relationship_household_tests.cpp:59
SocialParticipant(const sim::PersistentId actor,const bool primary)test helperInventory only; no authored contract note.tests/phase17_relationship_household_tests.cpp:92
ResolvedSupportIncident()test helperInventory only; no authored contract note.tests/phase17_relationship_household_tests.cpp:107
SupportMemories()test helperInventory only; no authored contract note.tests/phase17_relationship_household_tests.cpp:147
RunRelationshipHouseholdCycle()test helperInventory only; no authored contract note.tests/phase17_relationship_household_tests.cpp:176
BuildSession()test helperInventory only; no authored contract note.tests/phase18_expedition_closure_tests.cpp:47
AdvanceThroughPartyArrival(app::RuntimeSession & session,const game::PartyId party_id)test helperInventory only; no authored contract note.tests/phase18_expedition_closure_tests.cpp:69
AdvanceExpedition(app::RuntimeSession & session,const game::PartyId party,const std::uint64_t sequence,const bool include_route=false)test helperInventory only; no authored contract note.tests/phase18_expedition_closure_tests.cpp:96
FormControlledParty(app::RuntimeSession & session,const sim::PersistentId leader=sim::PersistentId{1001},const sim::PersistentId follower=sim::PersistentId{1002},const std::uint64_t sequence=18601)test helperInventory only; no authored contract note.tests/phase18_expedition_closure_tests.cpp:113
SeedExpeditionSupplies(app::RuntimeSession & session,const std::vector<sim::PersistentId> & leaders)test helperInventory only; no authored contract note.tests/phase18_expedition_closure_tests.cpp:146
RoundTrip(const app::RuntimeSession & session)test helperInventory only; no authored contract note.tests/phase18_expedition_closure_tests.cpp:177
OpenAssets()test helperInventory only; no authored contract note.tests/phase18_expedition_discovery_tests.cpp:44
BuildSession()test helperInventory only; no authored contract note.tests/phase18_expedition_discovery_tests.cpp:52
AdvanceThroughPartyArrival(app::RuntimeSession & session,const game::PartyId party_id)test helperInventory only; no authored contract note.tests/phase18_expedition_discovery_tests.cpp:72
BuildCampFixture()test helperInventory only; no authored contract note.tests/phase18_expedition_discovery_tests.cpp:118
SurveyRequest(const DiscoveryFixture & fixture)test helperInventory only; no authored contract note.tests/phase18_expedition_discovery_tests.cpp:223
ReturnRequest(const DiscoveryFixture & fixture)test helperInventory only; no authored contract note.tests/phase18_expedition_discovery_tests.cpp:260
OpenAssets()test helperInventory only; no authored contract note.tests/phase18_expedition_preparation_tests.cpp:24
Require(std::optional<Value> value,const std::string & error)test helperInventory only; no authored contract note.tests/phase18_expedition_preparation_tests.cpp:32
BuildSession()test helperInventory only; no authored contract note.tests/phase18_expedition_preparation_tests.cpp:40
BuildPreparedFixture()test helperInventory only; no authored contract note.tests/phase18_expedition_preparation_tests.cpp:75
RequestFor(const PreparedFixture & fixture)test helperInventory only; no authored contract note.tests/phase18_expedition_preparation_tests.cpp:143
OpenAssets()test helperInventory only; no authored contract note.tests/phase18_expedition_travel_tests.cpp:25
Require(std::optional<Value> value,const std::string & error)test helperInventory only; no authored contract note.tests/phase18_expedition_travel_tests.cpp:33
BuildSession()test helperInventory only; no authored contract note.tests/phase18_expedition_travel_tests.cpp:41
BuildTravelFixture()test helperInventory only; no authored contract note.tests/phase18_expedition_travel_tests.cpp:89
DepartureRequest(const TravelFixture & fixture)test helperInventory only; no authored contract note.tests/phase18_expedition_travel_tests.cpp:181
AdvanceThroughRouteArrivals(app::RuntimeSession & session)test helperInventory only; no authored contract note.tests/phase18_expedition_travel_tests.cpp:193
AdvanceInterruptedExpeditionReturn(app::RuntimeSession & session,const game::PartyId party_id)test helperInventory only; no authored contract note.tests/phase18_expedition_travel_tests.cpp:225
CampRequest(const TravelFixture & fixture)test helperInventory only; no authored contract note.tests/phase18_expedition_travel_tests.cpp:281
BuildCampFixture(const bool enable_predator_hazard)test helperInventory only; no authored contract note.tests/phase18_expedition_travel_tests.cpp:297
NextDisruptionTick(const TravelFixture & fixture)test helperInventory only; no authored contract note.tests/phase18_expedition_travel_tests.cpp:329
EnvironmentRequest(const TravelFixture & fixture)test helperInventory only; no authored contract note.tests/phase18_expedition_travel_tests.cpp:356
BuildHazardFixture()test helperInventory only; no authored contract note.tests/phase18_expedition_travel_tests.cpp:580
FieldDecisionRequest(const HazardFixture & fixture,const game::ScoutingFieldDecisionKind decision)test helperInventory only; no authored contract note.tests/phase18_expedition_travel_tests.cpp:594
AddFieldWound(HazardFixture & fixture)test helperInventory only; no authored contract note.tests/phase18_expedition_travel_tests.cpp:622
CheckRetainedDecision(const HazardFixture & fixture,const app::RuntimeExpeditionFieldDecisionResult & result,const game::ScoutingFieldDecisionKind expected)test helperInventory only; no authored contract note.tests/phase18_expedition_travel_tests.cpp:651
OpenProjectAssets()test helperInventory only; no authored contract note.tests/phase1_closure_tests.cpp:19
LoadAuthoredWorld(worldforge::assets::AssetService & assets)test helperInventory only; no authored contract note.tests/phase1_closure_tests.cpp:27
BuildRuntime(const worldforge::sim::WorldRuntimeState & state)test helperInventory only; no authored contract note.tests/phase1_closure_tests.cpp:50
RequireCreated(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/phase3_economy_state_tests.cpp:21
RequireRecord(std::optional<Record> record)test helperInventory only; no authored contract note.tests/phase3_economy_state_tests.cpp:26
UseLegacySupplySchedulerKey(nlohmann::json & document)test helperInventory only; no authored contract note.tests/phase3_economy_state_tests.cpp:31
UseLegacyConstructionSchedulerSchema(nlohmann::json & document,const std::uint32_t schema_version)test helperInventory only; no authored contract note.tests/phase3_economy_state_tests.cpp:36
EconomyWorldDefinition()test helperInventory only; no authored contract note.tests/phase3_economy_state_tests.cpp:73
EconomyActor(const std::uint64_t id,const std::uint16_t hunger)test helperInventory only; no authored contract note.tests/phase3_economy_state_tests.cpp:102
BuildMidHaulFixture(const bool begin_haul=true)test helperInventory only; no authored contract note.tests/phase3_economy_state_tests.cpp:142
front()test helperInventory only; no authored contract note.tests/phase3_economy_state_tests.cpp:424
front()test helperInventory only; no authored contract note.tests/phase3_economy_state_tests.cpp:428
front()test helperInventory only; no authored contract note.tests/phase3_economy_state_tests.cpp:432
front()test helperInventory only; no authored contract note.tests/phase3_economy_state_tests.cpp:433
Snapshot(tools::Phase3ThroughputInspection totals)test helperInventory only; no authored contract note.tests/phase3_economy_throughput_tests.cpp:8
Require(std::optional<Value> value,const std::string & error)test helperInventory only; no authored contract note.tests/phase4_closure_tests.cpp:40
BuildDangerousPartySession()test helperInventory only; no authored contract note.tests/phase4_closure_tests.cpp:48
AdvanceThroughPartyRouteArrival(app::RuntimeSession & session,const std::array<sim::PersistentId,2> & actors)test helperInventory only; no authored contract note.tests/phase4_closure_tests.cpp:96
SuppressRoutePressureInterruptions(app::RuntimeSession & session)test helperInventory only; no authored contract note.tests/phase4_closure_tests.cpp:127
Require(std::optional<Value> value,const std::string & error)test helperInventory only; no authored contract note.tests/phase5_inspection_tests.cpp:20
BuildSparsePhase5State(const std::vector<sim::PersistentId> & actors)test helperInventory only; no authored contract note.tests/phase5_inspection_tests.cpp:37
ElapsedMicroseconds(const Clock::time_point started)test helperInventory only; no authored contract note.tests/phase6_benchmark_tests.cpp:48
PeakResidentBytes()test helperInventory only; no authored contract note.tests/phase6_benchmark_tests.cpp:53
OpenAssets()test helperInventory only; no authored contract note.tests/phase6_benchmark_tests.cpp:61
BenchmarkTier(const std::size_t actor_index)test helperInventory only; no authored contract note.tests/phase6_benchmark_tests.cpp:72
BenchmarkSettlementIndex(const std::size_t actor_index)test helperInventory only; no authored contract note.tests/phase6_benchmark_tests.cpp:85
BenchmarkDriveTemplate(const game::ActorState & baseline)test helperInventory only; no authored contract note.tests/phase6_benchmark_tests.cpp:90
BuildBenchmarkSession(assets::AssetService & assets)test helperInventory only; no authored contract note.tests/phase6_benchmark_tests.cpp:107
SeedBenchmarkConsequence(app::RuntimeSession & session)test helperInventory only; no authored contract note.tests/phase6_benchmark_tests.cpp:231
OpenAssets()test helperInventory only; no authored contract note.tests/phase6_persistence_tests.cpp:29
BuildSession(assets::AssetService & assets)test helperInventory only; no authored contract note.tests/phase6_persistence_tests.cpp:40
AdvanceFoundation(app::RuntimeSession & session,core::RuntimeCommandQueue & commands,const std::uint64_t tick_count)test helperInventory only; no authored contract note.tests/phase6_persistence_tests.cpp:81
CheckRejectedRestore(app::RuntimeSession & session,app::RuntimeSessionState invalid)test helperInventory only; no authored contract note.tests/phase6_persistence_tests.cpp:90
OpenAssets()test helperInventory only; no authored contract note.tests/phase7_closure_tests.cpp:33
BuildSession(assets::AssetService & assets)test helperInventory only; no authored contract note.tests/phase7_closure_tests.cpp:44
ResourceByKey(const game::ResourceEconomyState & state,const std::string_view key)test helperInventory only; no authored contract note.tests/phase7_closure_tests.cpp:75
Stockpile(const game::ResourceEconomyState & state)test helperInventory only; no authored contract note.tests/phase7_closure_tests.cpp:82
FirstSettlement(const app::RuntimeSession & session)test helperInventory only; no authored contract note.tests/phase7_closure_tests.cpp:90
AdvanceUntilBuildingOperational(app::RuntimeSession & session,const game::BuildingId building)test helperInventory only; no authored contract note.tests/phase7_closure_tests.cpp:97
WideWorldDefinition()test helperInventory only; no authored contract note.tests/phase8_closure_tests.cpp:24
RequireWorld(sim::WorldRuntimeBuildResult result)test helperInventory only; no authored contract note.tests/phase8_closure_tests.cpp:77
RequireWorldState(const sim::WorldRuntimeStateDeserializationResult & result)test helperInventory only; no authored contract note.tests/phase8_closure_tests.cpp:86
RequireWorldDocument(const sim::WorldRuntimeStateSerializationResult & result)test helperInventory only; no authored contract note.tests/phase8_closure_tests.cpp:94
RequireWorldCandidate(sim::WorldRuntimeStateBuildResult & result)test helperInventory only; no authored contract note.tests/phase8_closure_tests.cpp:102
RequireKnowledge(const game::ObserverKnowledgeResult & result)test helperInventory only; no authored contract note.tests/phase8_closure_tests.cpp:110
RequireRawFacts(const sim::RawWorldFactResult & result)test helperInventory only; no authored contract note.tests/phase8_closure_tests.cpp:118
RequireObservedKnowledge(const game::EnvironmentEcologyObservationResult & result)test helperInventory only; no authored contract note.tests/phase8_closure_tests.cpp:127
RequireRestoredKnowledge(const game::ObserverKnowledgeDeserializationResult & result)test helperInventory only; no authored contract note.tests/phase8_closure_tests.cpp:136
RequireKnowledgeDocument(const game::ObserverKnowledgeSerializationResult & result)test helperInventory only; no authored contract note.tests/phase8_closure_tests.cpp:144
OpenAssets()test helperInventory only; no authored contract note.tests/phase9_closure_tests.cpp:21
BuildSession(assets::AssetService & assets)test helperInventory only; no authored contract note.tests/phase9_closure_tests.cpp:32
AssignmentWorldDefinition()test helperInventory only; no authored contract note.tests/player_assignment_order_tests.cpp:12
AssignmentActor()test helperInventory only; no authored contract note.tests/player_assignment_order_tests.cpp:41
RequireCreated(const game::WorkCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/player_assignment_order_tests.cpp:66
BuildFixture()test helperInventory only; no authored contract note.tests/player_assignment_order_tests.cpp:79
Command(const AssignmentFixture & fixture,const std::uint64_t sequence,const game::AssignmentQueuePolicy policy)test helperInventory only; no authored contract note.tests/player_assignment_order_tests.cpp:102
ActorInspection()test helperInventory only; no authored contract note.tests/player_status_inspection_tests.cpp:9
IntersectionInspection()test helperInventory only; no authored contract note.tests/player_status_inspection_tests.cpp:76
RequireResourceCreated(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/production_tests.cpp:16
RequireRecord(std::optional<Record> record)test helperInventory only; no authored contract note.tests/production_tests.cpp:21
BuildFixture(const std::uint64_t output_capacity=20,const std::uint64_t output_quantity=1)test helperInventory only; no authored contract note.tests/production_tests.cpp:43
ClaimAndReserve(ProductionFixture & fixture)test helperInventory only; no authored contract note.tests/production_tests.cpp:102
DeliverInputs(ProductionFixture & fixture)test helperInventory only; no authored contract note.tests/production_tests.cpp:123
RequireValue(const std::optional<Value> & value)test helperInventory only; no authored contract note.tests/regional_economy_tests.cpp:15
Fact(const game::RegionalEconomyFactKind kind,const std::uint64_t stable_id,const std::uint64_t quantity,const std::uint64_t revision,const std::uint64_t tick,const std::optional<sim::RouteId> route=std::nullopt)test helperInventory only; no authored contract note.tests/regional_economy_tests.cpp:20
BaselineFacts()test helperInventory only; no authored contract note.tests/regional_economy_tests.cpp:33
Require(std::optional<Value> value,const std::string & error)test helperInventory only; no authored contract note.tests/relationship_household_tests.cpp:42
BuildRelationships()test helperInventory only; no authored contract note.tests/relationship_household_tests.cpp:50
BuildHouseholds()test helperInventory only; no authored contract note.tests/relationship_household_tests.cpp:57
BuildWitnessMemory()test helperInventory only; no authored contract note.tests/relationship_household_tests.cpp:64
BuildSession()test helperInventory only; no authored contract note.tests/relationship_household_tests.cpp:87
KeyEvent(const worldforge::core::PlatformEventType type,const worldforge::core::PlatformKey key)test helperBuilds a keyboard event used to prove debug-action aliases and toggle order.tests/render_debug_tests.cpp:14
ProxyState(const std::uint64_t id,const double x,const double y)test helperBuilds a render-proxy snapshot with stable ID and ground position for scene-order tests.tests/render_scene_tests.cpp:15
SceneEntities(const worldforge::render::RenderScene & scene)test helperCopies the scene's read-only entity span into a vector for direct Catch2 comparison.tests/render_scene_tests.cpp:32
DefaultView()test helperInventory only; no authored contract note.tests/render_scene_tests.cpp:37
BuildScene(const worldforge::sim::EcsWorld & world,worldforge::render::RenderScene & scene,std::string & error)test helperInventory only; no authored contract note.tests/render_scene_tests.cpp:45
Require(std::optional<Value> value,const std::string & error)test helperInventory only; no authored contract note.tests/reputation_tests.cpp:20
BuildReputations()test helperInventory only; no authored contract note.tests/reputation_tests.cpp:28
Establish(game::ReputationRuntime & reputations)test helperInventory only; no authored contract note.tests/reputation_tests.cpp:35
front()test helperInventory only; no authored contract note.tests/reputation_tests.cpp:164
RequireCreated(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/resource_economy_tests.cpp:15
RequireWorkCreated(const game::WorkCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/resource_economy_tests.cpp:20
RequireRecord(std::optional<Record> record)test helperInventory only; no authored contract note.tests/resource_economy_tests.cpp:25
RequireCandidate(game::ResourceEconomyBuildResult result)test helperInventory only; no authored contract note.tests/resource_economy_tests.cpp:30
BuildClaimedJob()test helperInventory only; no authored contract note.tests/resource_economy_tests.cpp:40
CreateWorkReservation(game::WorkLifecycleRuntime & runtime,const game::JobId job,const std::uint64_t stable_subject,const std::uint64_t tick=2)test helperInventory only; no authored contract note.tests/resource_economy_tests.cpp:54
CurrentJob(const WorkFixture & work)test helperInventory only; no authored contract note.tests/resource_economy_tests.cpp:63
BuildEconomy(const std::uint64_t carrier_capacity=20,const std::uint64_t destination_capacity=100,const game::InventoryOwnerKind source_kind=game::InventoryOwnerKind::stockpile)test helperInventory only; no authored contract note.tests/resource_economy_tests.cpp:77
MixedBundle(const game::ResourceId berries,const game::ResourceId wood)test helperInventory only; no authored contract note.tests/resource_economy_tests.cpp:101
ConsequenceWorldDefinition()test helperInventory only; no authored contract note.tests/runtime_actor_consequence_snapshot_tests.cpp:13
ConsequenceActor(const std::uint64_t id)test helperInventory only; no authored contract note.tests/runtime_actor_consequence_snapshot_tests.cpp:52
Require(std::optional<Value> value,const std::string & error)test helperInventory only; no authored contract note.tests/runtime_actor_consequence_snapshot_tests.cpp:79
OpenAssets()test helperInventory only; no authored contract note.tests/runtime_audio_cue_tests.cpp:61
LoadDeclaredAudioCues()test helperInventory only; no authored contract note.tests/runtime_audio_cue_tests.cpp:70
ConfigureDeclaredAudio(core::AudioService & audio)test helperInventory only; no authored contract note.tests/runtime_audio_cue_tests.cpp:79
BuildStarterSession()test helperInventory only; no authored contract note.tests/runtime_audio_cue_tests.cpp:86
TakeRequired(std::optional<Value> value)test helperInventory only; no authored contract note.tests/runtime_economy_tests.cpp:20
OpenFixtureAssets()test helperInventory only; no authored contract note.tests/runtime_economy_tests.cpp:27
LoadEconomy(worldforge::assets::AssetService & assets,const std::string & economy_asset_id="economy.test-base")test helperInventory only; no authored contract note.tests/runtime_economy_tests.cpp:39
LoadCatalog(worldforge::assets::AssetService & assets)test helperInventory only; no authored contract note.tests/runtime_economy_tests.cpp:50
LoadStarterEconomyDocument()test helperInventory only; no authored contract note.tests/runtime_economy_tests.cpp:57
LoadEconomyDocument(nlohmann::json document)test helperInventory only; no authored contract note.tests/runtime_economy_tests.cpp:63
OpenAssets()test helperInventory only; no authored contract note.tests/runtime_money_custody_tests.cpp:39
BuildStarterSession()test helperInventory only; no authored contract note.tests/runtime_money_custody_tests.cpp:48
Parse(const std::vector<std::string_view> & arguments,const bool graphical=false)test helperInventory only; no authored contract note.tests/runtime_options_tests.cpp:14
Sample(const std::uint64_t frame,const std::uint64_t frame_milliseconds,const std::uint64_t cpu_milliseconds,const std::uint64_t memory_bytes)test helperInventory only; no authored contract note.tests/runtime_performance_monitor_tests.cpp:11
Required(std::optional<Value> & value)test helperInventory only; no authored contract note.tests/runtime_phase3_tests.cpp:25
Required(const std::optional<Value> & value)test helperInventory only; no authored contract note.tests/runtime_phase3_tests.cpp:32
LoadPhase3Session()test helperInventory only; no authored contract note.tests/runtime_phase3_tests.cpp:48
FastTravelTuningState()test helperInventory only; no authored contract note.tests/runtime_phase3_tests.cpp:95
Phase3EconomyState()test helperInventory only; no authored contract note.tests/runtime_phase3_tests.cpp:101
AdvanceUntilThroughput(worldforge::app::RuntimeSession & session,const worldforge::tools::Phase3ThroughputSample & start,const std::uint64_t delivered_units,const std::uint64_t consumed_units,const std::uint64_t completed_jobs)test helperInventory only; no authored contract note.tests/runtime_phase3_tests.cpp:127
Required(std::optional<Value> & value)test helperInventory only; no authored contract note.tests/runtime_phase4_assignment_tests.cpp:27
Required(const std::optional<Value> & value)test helperInventory only; no authored contract note.tests/runtime_phase4_assignment_tests.cpp:34
LoadPhase3Session()test helperInventory only; no authored contract note.tests/runtime_phase4_assignment_tests.cpp:50
FastTravelTuningState()test helperInventory only; no authored contract note.tests/runtime_phase4_assignment_tests.cpp:97
AdvanceThroughRouteArrival(worldforge::app::RuntimeSession & session,const worldforge::sim::PersistentId actor)test helperInventory only; no authored contract note.tests/runtime_phase4_assignment_tests.cpp:103
AdvanceUntilAssignmentState(worldforge::app::RuntimeSession & session,const worldforge::game::AssignmentOrderId order,const std::initializer_list<worldforge::game::AssignmentOrderState> expected_states)test helperInventory only; no authored contract note.tests/runtime_phase4_assignment_tests.cpp:126
AdvanceUntilActorPlanRevision(worldforge::app::RuntimeSession & session,const worldforge::sim::PersistentId actor,const std::uint64_t previous_revision)test helperInventory only; no authored contract note.tests/runtime_phase4_assignment_tests.cpp:150
Require(std::optional<Value> value,const std::string & error)test helperInventory only; no authored contract note.tests/runtime_player_attack_tests.cpp:27
TakeControl(app::RuntimeSession & session,const sim::PersistentId actor_id)test helperInventory only; no authored contract note.tests/runtime_player_attack_tests.cpp:35
BuildSession()test helperInventory only; no authored contract note.tests/runtime_player_attack_tests.cpp:52
AttackCommand(app::RuntimeSession & session,sim::PersistentId target,bool queue_requested=false,std::uint64_t sequence=1,const bool ensure_direct_control=true)test helperInventory only; no authored contract note.tests/runtime_player_attack_tests.cpp:78
RequireActor(app::RuntimeSessionState & state,const sim::PersistentId actor)test helperInventory only; no authored contract note.tests/runtime_player_attack_tests.cpp:96
LoadPhase3Session()test helperInventory only; no authored contract note.tests/runtime_player_command_tests.cpp:35
BuildSession()test helperInventory only; no authored contract note.tests/runtime_player_command_tests.cpp:82
Require(std::optional<Value> value,const std::string & error)test helperInventory only; no authored contract note.tests/runtime_player_move_tests.cpp:30
TakeControl(app::RuntimeSession & session,const sim::PersistentId actor_id)test helperInventory only; no authored contract note.tests/runtime_player_move_tests.cpp:38
AdvanceTravelerToArrival(app::RuntimeSession & session,const sim::PersistentId actor_id,const std::uint64_t maximum_ticks=5000)test helperInventory only; no authored contract note.tests/runtime_player_move_tests.cpp:55
AdvanceMoveOrderToState(app::RuntimeSession & session,const std::size_t order_index,const game::PlayerMoveOrderState target_state,const std::uint64_t maximum_ticks=5000)test helperInventory only; no authored contract note.tests/runtime_player_move_tests.cpp:75
AdvanceLocalMoveToArrival(app::RuntimeSession & session,const sim::PersistentId actor_id,const std::uint64_t maximum_ticks=5000)test helperInventory only; no authored contract note.tests/runtime_player_move_tests.cpp:101
ActivateDestinationChunk(game::RuntimeWorldSession & world)test helperInventory only; no authored contract note.tests/runtime_player_move_tests.cpp:116
LoadDestinationChunk(game::RuntimeWorldSession & world)test helperInventory only; no authored contract note.tests/runtime_player_move_tests.cpp:132
BlockDestinationPortal(game::RuntimeWorldSession & world)test helperInventory only; no authored contract note.tests/runtime_player_move_tests.cpp:148
BuildSession(const bool quiet_route=true,const bool activate_destination_chunk=false,const bool block_destination_portal=false,const std::uint32_t active_chunk_count=2)test helperInventory only; no authored contract note.tests/runtime_player_move_tests.cpp:154
MoveCommand(app::RuntimeSession & session,std::vector<sim::PersistentId> recipients,const sim::SiteId target,const std::uint64_t sequence=1,const game::PlayerMoveIssueMode mode=game::PlayerMoveIssueMode::replace,const bool ensure_direct_control=true)test helperInventory only; no authored contract note.tests/runtime_player_move_tests.cpp:209
GroundMoveCommand(app::RuntimeSession & session,const sim::PersistentId recipient,const sim::Transform2D target,const std::uint64_t sequence=1,const bool ensure_direct_control=true)test helperInventory only; no authored contract note.tests/runtime_player_move_tests.cpp:232
OpenAssets()test helperInventory only; no authored contract note.tests/runtime_session_candidate_tests.cpp:19
OpenAssets()test helperInventory only; no authored contract note.tests/runtime_settlement_development_tests.cpp:54
BuildSession(app::RuntimeSessionCandidate & candidate)test helperInventory only; no authored contract note.tests/runtime_settlement_development_tests.cpp:63
StarterSettlement(const app::RuntimeSession & session)test helperInventory only; no authored contract note.tests/runtime_settlement_development_tests.cpp:71
ConfigureAuthoredProjectFixture(game::RuntimeSettlementDefinition & definition)test helperInventory only; no authored contract note.tests/runtime_settlement_development_tests.cpp:83
AdvanceTravelerToArrival(worldforge::app::RuntimeSession & session,const worldforge::sim::PersistentId actor,const std::uint64_t maximum_ticks=20000)test helperInventory only; no authored contract note.tests/runtime_tests.cpp:29
FastTravelTuningState()test helperInventory only; no authored contract note.tests/runtime_tests.cpp:52
OpenAssets()test helperInventory only; no authored contract note.tests/scouting_order_tests.cpp:31
Require(std::optional<Value> value,const std::string & error)test helperInventory only; no authored contract note.tests/scouting_order_tests.cpp:39
BuildSession()test helperInventory only; no authored contract note.tests/scouting_order_tests.cpp:47
ObservedRoute(const std::uint64_t tick=21)test helperInventory only; no authored contract note.tests/scouting_order_tests.cpp:72
SetObservedRouteFacts(app::RuntimeSession & session,const std::int64_t pressure_units,const std::int64_t danger_units)test helperInventory only; no authored contract note.tests/scouting_order_tests.cpp:85
AdvanceActorToSite(app::RuntimeSession & session,const sim::PersistentId actor,const sim::SiteId site)test helperInventory only; no authored contract note.tests/scouting_order_tests.cpp:106
ResourceCountsDescriptor()test helperInventory only; no authored contract note.tests/script_api_registry_tests.cpp:14
ReceiptDescriptor()test helperInventory only; no authored contract note.tests/script_api_registry_tests.cpp:51
Required(const std::optional<Value> & value)test helperInventory only; no authored contract note.tests/script_command_service_tests.cpp:28
LoadCommandSession(const std::string_view scenario_id="isometric-lab")test helperInventory only; no authored contract note.tests/script_command_service_tests.cpp:45
MakeCommandSession()test helperInventory only; no authored contract note.tests/script_command_service_tests.cpp:103
MakeStarterCommandSession()test helperInventory only; no authored contract note.tests/script_command_service_tests.cpp:112
ActorArguments(const worldforge::app::RuntimeSession & session,const worldforge::sim::PersistentId actor_id)test helperInventory only; no authored contract note.tests/script_command_service_tests.cpp:122
BuildStarterSession()test helperInventory only; no authored contract note.tests/script_money_command_tests.cpp:49
ContributionArguments(const app::RuntimeSession & session)test helperInventory only; no authored contract note.tests/script_money_command_tests.cpp:69
TakeControl(app::RuntimeSession & session)test helperInventory only; no authored contract note.tests/script_money_command_tests.cpp:94
Required(const std::optional<Value> & value)test helperInventory only; no authored contract note.tests/script_package_host_tests.cpp:31
CommandEventPayload(std::string command_id,const std::uint64_t sequence=1)test helperInventory only; no authored contract note.tests/script_package_host_tests.cpp:38
LoadSession(const std::string_view scenario_id="isometric-lab")test helperInventory only; no authored contract note.tests/script_package_host_tests.cpp:56
MakeSession(const std::string_view scenario_id="isometric-lab")test helperInventory only; no authored contract note.tests/script_package_host_tests.cpp:114
Required(std::optional<Value> & value)test helperInventory only; no authored contract note.tests/script_query_service_tests.cpp:30
Required(const std::optional<Value> & value)test helperInventory only; no authored contract note.tests/script_query_service_tests.cpp:37
LoadQuerySession(const std::string_view scenario_id="isometric-lab")test helperInventory only; no authored contract note.tests/script_query_service_tests.cpp:54
MakeQuerySession(const std::string_view scenario_id="isometric-lab")test helperInventory only; no authored contract note.tests/script_query_service_tests.cpp:113
Field(const worldforge::app::ScriptQueryRecord & record,const std::string_view id)test helperInventory only; no authored contract note.tests/script_query_service_tests.cpp:123
Budget(const std::size_t queries=32,const std::size_t records=256,const std::size_t owner_visits=100000)test helperInventory only; no authored contract note.tests/script_query_service_tests.cpp:135
LoadPresentationAssetBytes()test helperOpens the production manifest, loads the required Phase 0D image/font through AssetService, and returns byte-owning blobs for SDL decoder tests.tests/sdl_asset_tests.cpp:28
InitializedRenderer()test helperStarts SDL with the test-selected video backend and creates a small renderer whose destruction order keeps SDL alive until all render resources release.tests/sdl_asset_tests.cpp:54
AddSelectable(worldforge::sim::EcsWorld & world,const std::uint64_t id,const double x,const double y,const double radius=0.5)test helperRestores one stable-ID selectable render fixture into a test world and requires successful creation.tests/selection_tests.cpp:17
DefaultView()test helperReturns the shared finite viewport, camera center, and zoom used by selection tests.tests/selection_tests.cpp:31
ClickAt(const worldforge::render::ScreenPoint point,const worldforge::render::SelectionMode mode=worldforge::render::SelectionMode::replace)test helperBuilds a press-and-release selection input at one screen point for click tests.tests/selection_tests.cpp:40
KeyEvent(const worldforge::core::PlatformEventType type,const worldforge::core::PlatformKey key)test helperInventory only; no authored contract note.tests/selection_tests.cpp:52
PointerEvent(const worldforge::core::PlatformEventType type,const double x,const double y,const worldforge::core::PlatformPointerButton button=worldforge::core::PlatformPointerButton::unknown)test helperBuilds one pointer event with position and optional button for selection adapter tests.tests/selection_tests.cpp:62
SaveScenario()test helperInventory only; no authored contract note.tests/session_save_store_tests.cpp:19
SaveScene()test helperInventory only; no authored contract note.tests/session_save_store_tests.cpp:35
Feasible(std::string key,const SettlementEnterpriseKind kind,const std::uint64_t demand,const std::uint16_t complement)test helperInventory only; no authored contract note.tests/settlement_enterprise_reasoner_tests.cpp:10
Candidate(std::string key,const worldforge::game::SettlementNeedDomain domain,const std::uint16_t strength,const std::uint16_t benefit)test helperInventory only; no authored contract note.tests/settlement_goal_reasoner_tests.cpp:8
Snapshot()test helperInventory only; no authored contract note.tests/settlement_goal_reasoner_tests.cpp:28
Candidate(const std::string & key,const game::SettlementHousingMethodKind method,const std::uint64_t household,const std::int32_t score_bias=0)test helperInventory only; no authored contract note.tests/settlement_housing_method_reasoner_tests.cpp:12
Request()test helperInventory only; no authored contract note.tests/settlement_housing_method_reasoner_tests.cpp:53
Candidate(const std::string & key,const std::uint64_t household,const std::uint64_t area,const std::int64_t origin_x,const std::uint16_t service=8000)test helperInventory only; no authored contract note.tests/settlement_housing_parcel_reasoner_tests.cpp:12
Request()test helperInventory only; no authored contract note.tests/settlement_housing_parcel_reasoner_tests.cpp:52
HousingPolicy()test helperInventory only; no authored contract note.tests/settlement_housing_pressure_reasoner_tests.cpp:11
AdequateHousehold()test helperInventory only; no authored contract note.tests/settlement_housing_pressure_reasoner_tests.cpp:28
StrainedHousehold()test helperInventory only; no authored contract note.tests/settlement_housing_pressure_reasoner_tests.cpp:53
AssessmentInput()test helperInventory only; no authored contract note.tests/settlement_housing_pressure_reasoner_tests.cpp:78
Viable()test helperInventory only; no authored contract note.tests/settlement_population_reasoner_tests.cpp:8
Feasible(std::string key,const std::uint16_t goal_support)test helperInventory only; no authored contract note.tests/settlement_production_reasoner_tests.cpp:10
Candidate(std::string_view definition_id,const std::uint16_t capacity_pressure,const std::uint16_t material_readiness,const std::uint32_t labor_cost,const worldforge::game::SettlementProjectSponsorKind sponsor_kind=worldforge::game::SettlementProjectSponsorKind::civic,const std::string_view sponsor_id="civic.test")test helperInventory only; no authored contract note.tests/settlement_project_reasoner_tests.cpp:15
Snapshot(const SettlementProjectCandidateInput & first,const SettlementProjectCandidateInput & second)test helperInventory only; no authored contract note.tests/settlement_project_reasoner_tests.cpp:38
Budget(const std::size_t candidate_count=2)test helperInventory only; no authored contract note.tests/settlement_project_reasoner_tests.cpp:49
RequireCandidate(const worldforge::game::SettlementProjectDecisionResult & result,const std::string_view definition_id)test helperInventory only; no authored contract note.tests/settlement_project_reasoner_tests.cpp:56
TakeRequired(std::optional<Value> value)test helperInventory only; no authored contract note.tests/settlement_spatial_reasoner_tests.cpp:17
BuildTopology()test helperInventory only; no authored contract note.tests/settlement_spatial_reasoner_tests.cpp:23
BuildSettlement(const sim::WorldTopology & topology)test helperInventory only; no authored contract note.tests/settlement_spatial_reasoner_tests.cpp:36
Candidate(std::string key,const game::SettlementSpatialServiceKind service)test helperInventory only; no authored contract note.tests/settlement_spatial_reasoner_tests.cpp:53
Request(const game::SettlementRecord & settlement)test helperInventory only; no authored contract note.tests/settlement_spatial_reasoner_tests.cpp:93
TakeRequired(std::optional<Value> value)test helperInventory only; no authored contract note.tests/settlement_spatial_supply_tests.cpp:16
RequireCreated(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/settlement_spatial_supply_tests.cpp:23
BuildSpatialWorld()test helperInventory only; no authored contract note.tests/settlement_spatial_supply_tests.cpp:28
BuildSpatialActor(const sim::WorldRuntime & world)test helperInventory only; no authored contract note.tests/settlement_spatial_supply_tests.cpp:64
BuildSpatialFixture(const game::SupplyPurpose purpose)test helperInventory only; no authored contract note.tests/settlement_spatial_supply_tests.cpp:115
SpatialBindings(const SpatialSupplyFixture & fixture)test helperInventory only; no authored contract note.tests/settlement_spatial_supply_tests.cpp:179
AdvanceSpatialSupply(SpatialSupplyFixture & fixture,const std::uint64_t tick,const bool use_secondary_worker=false)test helperInventory only; no authored contract note.tests/settlement_spatial_supply_tests.cpp:216
ProveSpatialSupplyCycle(const game::SupplyPurpose purpose)test helperInventory only; no authored contract note.tests/settlement_spatial_supply_tests.cpp:247
Candidate(const worldforge::game::InventoryContainerId source,const std::uint32_t route_cost,const std::uint16_t danger=500)test helperInventory only; no authored contract note.tests/settlement_supply_portfolio_reasoner_tests.cpp:11
TakeRequired(std::optional<Value> value)test helperInventory only; no authored contract note.tests/settlement_supply_scheduler_tests.cpp:19
RequireCreated(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/settlement_supply_scheduler_tests.cpp:26
BuildWorld(const std::size_t actor_count=1)test helperInventory only; no authored contract note.tests/settlement_supply_scheduler_tests.cpp:31
BuildActors(const sim::WorldRuntime & world,const std::size_t actor_count=1)test helperInventory only; no authored contract note.tests/settlement_supply_scheduler_tests.cpp:84
EligibleActors(const SchedulerFixture & fixture)test helperInventory only; no authored contract note.tests/settlement_supply_scheduler_tests.cpp:131
BuildFixture(const std::uint64_t source_site=200,const std::uint64_t source_quantity=10,const std::size_t actor_count=1,const game::SupplyPurpose purpose=game::SupplyPurpose::food)test helperInventory only; no authored contract note.tests/settlement_supply_scheduler_tests.cpp:135
ReconcileRouteArrivals(SchedulerFixture & fixture,const sim::LocalMovementTuning movement_tuning={})test helperInventory only; no authored contract note.tests/settlement_supply_scheduler_tests.cpp:211
AdvanceScheduler(SchedulerFixture & fixture,const std::uint64_t tick,const bool reconcile_arrival=false)test helperInventory only; no authored contract note.tests/settlement_supply_scheduler_tests.cpp:222
CompleteSupplyCycle(SchedulerFixture & fixture,const std::uint64_t claim_tick)test helperInventory only; no authored contract note.tests/settlement_supply_scheduler_tests.cpp:236
RequireResourceCreated(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/settlement_supply_tests.cpp:15
RequireRecord(std::optional<Record> record)test helperInventory only; no authored contract note.tests/settlement_supply_tests.cpp:20
TakeCandidate(std::optional<Value> candidate)test helperInventory only; no authored contract note.tests/settlement_supply_tests.cpp:25
SupplyWorldDefinition()test helperInventory only; no authored contract note.tests/settlement_supply_tests.cpp:32
HungryActor()test helperInventory only; no authored contract note.tests/settlement_supply_tests.cpp:66
BuildFixture(const SupplyFixtureOptions options={})test helperInventory only; no authored contract note.tests/settlement_supply_tests.cpp:110
ClaimSupply(SupplyFixture & fixture,const std::uint64_t tick=2)test helperInventory only; no authored contract note.tests/settlement_supply_tests.cpp:166
DeliverSupply(SupplyFixture & fixture)test helperInventory only; no authored contract note.tests/settlement_supply_tests.cpp:185
RequireSupplyCandidate(game::SettlementSupplyBuildResult result)test helperInventory only; no authored contract note.tests/settlement_supply_tests.cpp:220
RequireCreated(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/settlement_tests.cpp:22
RequireRecord(std::optional<Record> record)test helperInventory only; no authored contract note.tests/settlement_tests.cpp:27
BuildTopology()test helperInventory only; no authored contract note.tests/settlement_tests.cpp:32
BuildSettlementFixture()test helperInventory only; no authored contract note.tests/settlement_tests.cpp:72
GoalCandidate(std::string key,const game::SettlementNeedDomain domain,const std::uint16_t strength,const std::uint16_t benefit)test helperInventory only; no authored contract note.tests/settlement_tests.cpp:165
HousingAssessment(const game::SettlementRecord & settlement,const std::uint64_t assessment_tick)test helperInventory only; no authored contract note.tests/settlement_tests.cpp:187
HousingMethodAssessment(const game::SettlementRecord & settlement,const std::uint64_t assessment_tick)test helperInventory only; no authored contract note.tests/settlement_tests.cpp:229
HousingParcelAssessment(const game::SettlementRecord & settlement,const std::uint64_t assessment_tick)test helperInventory only; no authored contract note.tests/settlement_tests.cpp:244
front()test helperInventory only; no authored contract note.tests/settlement_tests.cpp:295
front()test helperInventory only; no authored contract note.tests/settlement_tests.cpp:802
TakeRequired(std::optional<Value> value)test helperInventory only; no authored contract note.tests/settlement_work_composition_tests.cpp:21
BuildWorld()test helperInventory only; no authored contract note.tests/settlement_work_composition_tests.cpp:28
BuildActors(const sim::WorldRuntime & world)test helperInventory only; no authored contract note.tests/settlement_work_composition_tests.cpp:68
Definition()test helperInventory only; no authored contract note.tests/settlement_work_composition_tests.cpp:100
Settlement()test helperInventory only; no authored contract note.tests/settlement_work_composition_tests.cpp:131
front()test helperInventory only; no authored contract note.tests/settlement_work_composition_tests.cpp:224
Parse(const std::string_view bytes)test helperInventory only; no authored contract note.tests/static_sprite_atlas_tests.cpp:40
OpenAssets()test helperInventory only; no authored contract note.tests/structured_event_consequence_tests.cpp:23
BuildSession(assets::AssetService & assets)test helperInventory only; no authored contract note.tests/structured_event_consequence_tests.cpp:32
RequireRequest(const game::InstitutionalRequestOperationResult & result)test helperInventory only; no authored contract note.tests/structured_event_consequence_tests.cpp:60
RequireQuest(const game::StructuredQuestOperationResult & result)test helperInventory only; no authored contract note.tests/structured_event_consequence_tests.cpp:67
Require(std::optional<Value> value,const std::string & error)test helperInventory only; no authored contract note.tests/structured_quest_tests.cpp:26
OpenAssets()test helperInventory only; no authored contract note.tests/structured_quest_tests.cpp:34
LoadCatalog(assets::AssetService & assets)test helperInventory only; no authored contract note.tests/structured_quest_tests.cpp:43
BuildSession()test helperInventory only; no authored contract note.tests/structured_quest_tests.cpp:49
AdvanceActorToSite(app::RuntimeSession & session,const sim::PersistentId actor,const sim::SiteId site)test helperInventory only; no authored contract note.tests/structured_quest_tests.cpp:73
RescueRequest(const std::uint64_t tick=0)test helperInventory only; no authored contract note.tests/structured_quest_tests.cpp:97
RequireQuest(const game::StructuredQuestOperationResult & result)test helperInventory only; no authored contract note.tests/structured_quest_tests.cpp:112
RequireValue(const std::optional<Value> & value)test helperInventory only; no authored contract note.tests/trade_tests.cpp:13
OpenAssets()test helperInventory only; no authored contract note.tests/traveler_dispute_tests.cpp:29
Require(std::optional<Value> value,const std::string & error)test helperInventory only; no authored contract note.tests/traveler_dispute_tests.cpp:37
Participant(const sim::PersistentId actor,const std::uint16_t social,const std::uint16_t sociability,const std::uint16_t diligence,const std::uint16_t companionship,const std::uint16_t stress)test helperInventory only; no authored contract note.tests/traveler_dispute_tests.cpp:46
DisputeRecords()test helperInventory only; no authored contract note.tests/traveler_dispute_tests.cpp:62
BuildRuntimeFixture()test helperInventory only; no authored contract note.tests/traveler_dispute_tests.cpp:109
ActivateDispute(app::RuntimeSession & session)test helperInventory only; no authored contract note.tests/traveler_dispute_tests.cpp:160
Required(const std::optional<Value> & value)test helperInventory only; no authored contract note.tests/ui_composition_registry_tests.cpp:12
Contracts()test helperInventory only; no authored contract note.tests/ui_composition_registry_tests.cpp:19
Contribution(std::string id,std::string package,std::string target,const worldforge::app::UiContributionKind kind,std::string provider)test helperInventory only; no authored contract note.tests/ui_composition_registry_tests.cpp:41
SiteSource(const std::uint64_t id,const std::uint64_t revision=1)test helperInventory only; no authored contract note.tests/work_lifecycle_tests.cpp:15
PlayerSource(const std::uint64_t id,const std::uint64_t revision=1)test helperInventory only; no authored contract note.tests/work_lifecycle_tests.cpp:19
RequireCreated(const game::WorkCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/work_lifecycle_tests.cpp:31
RequireRecord(std::optional<Record> record)test helperInventory only; no authored contract note.tests/work_lifecycle_tests.cpp:36
RequireCandidate(game::WorkLifecycleBuildResult result)test helperInventory only; no authored contract note.tests/work_lifecycle_tests.cpp:41
BuildClaimedWorkGraph(game::WorkLifecycleRuntime & runtime)test helperInventory only; no authored contract note.tests/work_lifecycle_tests.cpp:46
front()test helperInventory only; no authored contract note.tests/work_lifecycle_tests.cpp:421
TakeRequired(std::optional<Value> value)test helperInventory only; no authored contract note.tests/world_connection_tests.cpp:16
BuildWorld(std::vector<sim::WorldLocalInfrastructure> infrastructure={})test helperInventory only; no authored contract note.tests/world_connection_tests.cpp:23
Building(const std::uint64_t id,const std::int64_t x,const std::int64_t y)test helperInventory only; no authored contract note.tests/world_connection_tests.cpp:61
Request()test helperInventory only; no authored contract note.tests/world_connection_tests.cpp:69
BuildTopology()test helperInventory only; no authored contract note.tests/world_ecology_tests.cpp:11
BuildRuntime()test helperInventory only; no authored contract note.tests/world_ecology_tests.cpp:25
BuildTopology()test helperInventory only; no authored contract note.tests/world_environment_tests.cpp:13
HeatWorldDefinition()test helperInventory only; no authored contract note.tests/world_heat_tests.cpp:12
RequireRuntime(worldforge::sim::WorldRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/world_heat_tests.cpp:100
RequireProfile(const worldforge::sim::WorldHeatRuntime & heat,const worldforge::sim::HeatTier tier)test helperInventory only; no authored contract note.tests/world_heat_tests.cpp:108
RequireHeatEntity(const worldforge::sim::WorldHeatRuntime & heat,const worldforge::sim::PersistentId entity)test helperInventory only; no authored contract note.tests/world_heat_tests.cpp:118
RequireAfter(const worldforge::sim::HeatTransitionResult & result)test helperInventory only; no authored contract note.tests/world_heat_tests.cpp:129
BuildStarterSession()test helperInventory only; no authored contract note.tests/world_indicator_tests.cpp:44
OpenAssets()test helperInventory only; no authored contract note.tests/world_landscape_tests.cpp:24
LoadScenario(assets::AssetService & assets)test helperInventory only; no authored contract note.tests/world_landscape_tests.cpp:35
BuildLandscapeWorkWorld()test helperInventory only; no authored contract note.tests/world_landscape_tests.cpp:88
LandscapeWorker()test helperInventory only; no authored contract note.tests/world_landscape_tests.cpp:141
RequireResourceCreated(const game::ResourceCreateResult<Id> & result)test helperInventory only; no authored contract note.tests/world_landscape_tests.cpp:152
Rectangle(const std::int64_t minimum_x,const std::int64_t minimum_y,const std::int64_t width,const std::int64_t height)test helperInventory only; no authored contract note.tests/world_parcel_tests.cpp:14
LandArea(const std::uint64_t id,const std::string & use,std::vector<WorldCellCoordinate> cells)test helperInventory only; no authored contract note.tests/world_parcel_tests.cpp:26
ParcelWorldDefinition()test helperInventory only; no authored contract note.tests/world_parcel_tests.cpp:50
RequireRuntime(WorldRuntimeStateBuildResult & result)test helperInventory only; no authored contract note.tests/world_parcel_tests.cpp:74
ParcelWorldState()test helperInventory only; no authored contract note.tests/world_parcel_tests.cpp:82
SearchRequest()test helperInventory only; no authored contract note.tests/world_parcel_tests.cpp:114
ReplayWorldDefinition()test helperInventory only; no authored contract note.tests/world_replay_tests.cpp:10
RequireRuntime(worldforge::sim::WorldRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/world_replay_tests.cpp:60
RequireTranscript(const worldforge::tools::WorldReplayRecordResult & result)test helperInventory only; no authored contract note.tests/world_replay_tests.cpp:69
RequireReplayDocument(const worldforge::tools::WorldReplaySerializationResult & result)test helperInventory only; no authored contract note.tests/world_replay_tests.cpp:77
RequireParsedTranscript(const worldforge::tools::WorldReplayDeserializationResult & result)test helperInventory only; no authored contract note.tests/world_replay_tests.cpp:86
RequireFinalState(const worldforge::tools::WorldReplayResult & result)test helperInventory only; no authored contract note.tests/world_replay_tests.cpp:95
RequireFinalKnowledge(const worldforge::tools::WorldReplayResult & result)test helperInventory only; no authored contract note.tests/world_replay_tests.cpp:104
RequireDivergence(const worldforge::tools::WorldReplayResult & result)test helperInventory only; no authored contract note.tests/world_replay_tests.cpp:113
RequireInitialKnowledge(worldforge::tools::WorldReplayTranscript & transcript)test helperInventory only; no authored contract note.tests/world_replay_tests.cpp:122
ReplayCommands()test helperInventory only; no authored contract note.tests/world_replay_tests.cpp:130
ReplayObserverKnowledge(worldforge::sim::WorldRuntime & runtime)test helperInventory only; no authored contract note.tests/world_replay_tests.cpp:158
StateWorldDefinition()test helperInventory only; no authored contract note.tests/world_runtime_state_tests.cpp:14
RequireRuntime(worldforge::sim::WorldRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/world_runtime_state_tests.cpp:88
RequireRestored(worldforge::sim::WorldRuntimeStateBuildResult & result)test helperInventory only; no authored contract note.tests/world_runtime_state_tests.cpp:97
RequireDocument(const worldforge::sim::WorldRuntimeState & state)test helperInventory only; no authored contract note.tests/world_runtime_state_tests.cpp:105
RequireState(const worldforge::sim::WorldRuntimeStateDeserializationResult & result)test helperInventory only; no authored contract note.tests/world_runtime_state_tests.cpp:115
RequireTraveler(const worldforge::sim::WorldRuntime & runtime,const worldforge::sim::PersistentId traveler)test helperInventory only; no authored contract note.tests/world_runtime_state_tests.cpp:124
RequireHeatEntity(const worldforge::sim::WorldRuntime & runtime,const worldforge::sim::PersistentId entity)test helperInventory only; no authored contract note.tests/world_runtime_state_tests.cpp:134
ReachMidJourney(worldforge::sim::WorldRuntime & runtime)test helperInventory only; no authored contract note.tests/world_runtime_state_tests.cpp:144
ContinueJourney(worldforge::sim::WorldRuntime & runtime)test helperInventory only; no authored contract note.tests/world_runtime_state_tests.cpp:169
front()test helperInventory only; no authored contract note.tests/world_runtime_state_tests.cpp:687
TestRuntimeDefinition()test helperInventory only; no authored contract note.tests/world_runtime_tests.cpp:14
RequireCandidate(worldforge::sim::WorldRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/world_runtime_tests.cpp:74
RequireCandidate(worldforge::sim::WorldRuntimeStateBuildResult & result)test helperInventory only; no authored contract note.tests/world_runtime_tests.cpp:83
RequireChunkState(const worldforge::sim::WorldRuntime & runtime,const worldforge::sim::ChunkId chunk)test helperInventory only; no authored contract note.tests/world_runtime_tests.cpp:91
RequireLastTransition(const worldforge::sim::WorldRuntime & runtime)test helperInventory only; no authored contract note.tests/world_runtime_tests.cpp:102
TestSubstrateDefinition()test helperInventory only; no authored contract note.tests/world_substrate_tests.cpp:14
RequireCandidate(worldforge::sim::WorldRuntimeBuildResult & result)test helperInventory only; no authored contract note.tests/world_substrate_tests.cpp:96
RequireRawFacts(const worldforge::sim::RawWorldFactResult & result)test helperInventory only; no authored contract note.tests/world_substrate_tests.cpp:105
RequireTraveler(const worldforge::sim::WorldRuntime & runtime,const worldforge::sim::PersistentId traveler)test helperInventory only; no authored contract note.tests/world_substrate_tests.cpp:114
RequireStartedProgress(const worldforge::sim::SyntheticRouteTravelResult & result)test helperInventory only; no authored contract note.tests/world_substrate_tests.cpp:125
RequireMutationBefore(const worldforge::sim::RouteTravelMutationResult & result)test helperInventory only; no authored contract note.tests/world_substrate_tests.cpp:134
RequireMutationAfter(const worldforge::sim::RouteTravelMutationResult & result)test helperInventory only; no authored contract note.tests/world_substrate_tests.cpp:143
TestTopologyDefinition(const worldforge::sim::TopologyRevision revision={1})test helperInventory only; no authored contract note.tests/world_topology_tests.cpp:16
RequireTopology(const worldforge::sim::WorldTopologyBuildResult & result)test helperInventory only; no authored contract note.tests/world_topology_tests.cpp:59
RequireWorldTime(const worldforge::sim::WorldTimeResult & result)test helperInventory only; no authored contract note.tests/world_topology_tests.cpp:68
RequireBounds(const std::optional<worldforge::sim::ChunkBoundsMeters> & bounds)test helperInventory only; no authored contract note.tests/world_topology_tests.cpp:77
System S.11

#Runtime Data

Every authored and runtime document has an explicit schema. Current serialized runtime values use ECS schema 1, World runtime schema 3, Memory schema 3, Reputation, Relationship, and Household schema 1, Phase 0 foundation schema 12, and replay transcript schema 12. Authored project data enters through AssetService; detached runtime documents have no file policy. The replay fixture is developer test data under tests/fixtures/replay/.

ID or fileTypeCurrent contractOwner
assets/manifest.jsonmanifestNine required entries with stable lowercase IDs, explicit types, and safe relative paths.Assets validates and retains entries.
config.runtimeconfigurationconfig/runtime.json; title Worldforge; window 960 × 540.Assets owns bytes; App validates values.
scenario.boot-smokescenario50 ms fixed step, 20 ticks, seed 104729; deterministic bounded smoke run.Assets owns bytes; Game validates schema.
scenario.isometric-labscenario50 ms fixed step, 100000-tick ceiling, seed 104729; references its scene, world, actor roster, and economy assets.Assets owns bytes; Game validates run settings and typed references.
scene.isometric-labsceneSix stable-ID entity definitions with transforms, selectable footprints, render proxies, colors, and debug names.Assets owns bytes; Game validates definitions; Simulation owns the mutable ECS copy.
world.isometric-labworldWorld runtime schema 3 topology, stable Site positions, chunk, substrate, heat, traveler, and observer-knowledge state for the two-site lab. Route progress interpolates World position at fixed ticks.Assets owns bytes; Game validates the session wrapper; Simulation owns mutable world state.
actors.isometric-labactor rosterActors 42, 43, and 44, Actor schema 11 deterministic Phase 2 state, affiliations, condition and target facts, and focus-to-site bindings. Actor 43 is the off-screen construction worker; Actor 44 is the hostile contextual-attack target.Assets owns bytes; Game validates and owns mutable actor state.
economy.isometric-labeconomySchema 6 sorted food-supply and construction-site collections, registered berry and timber keys, typed containers and World anchors, one live food request, one live grid-aligned workshop, authored hunger re-entry, and separate five-tick food and construction scheduler policies with route, visit, mutation, and execution budgets.Assets owns bytes; Game validates definitions and scheduling policy; App composes existing runtime owners.
image.worldforge-logoimageRequired transparent PNG decoded from immutable bytes during graphical startup and applied as the program mark and supported window icon.Assets owns source bytes; SDL Render owns the decoded texture and window-icon application.
font.debugfontRequired Inter TTF decoded from immutable bytes during graphical startup.Assets owns source bytes; SDL Render owns the font and label texture.
EcsWorld schema 1serialized stateOrdered entities, stable IDs, current components, cold debug names, and the next persistent-ID high-water mark. Unsupported versions and invalid values are rejected.Simulation owns capture, validation, JSON conversion, and transactional restore. No module owns a save-file path yet.
Phase0Foundation schema 10serialized stateScenario settings and scene reference, complete scheduler continuation state, pending runtime commands and next sequence, nested ECS and optional World, Actor, economy, control-authority, Party, assignment, Intersection lifecycle and schedule, durable player-move and attack state, and separate Phase 5 Memory, Relationship, and Household records. The document is limited to 64 MiB.App composes detached Game, Simulation, and Core values. Each system remains the only mutation owner for its restored state.
phase0-foundation.jsonreplay schema 12Initial foundation and camera state, projection dimensions, ordered run-control, heat, runtime, camera, selection, and player-order input steps; explicit replace/additive selection mode; contextual move mode, recipients, and Site target; contextual attack recipients and Actor target; move and attack cancellation; bounded attack, Intersection scheduling, Memory, Reputation, Relationship, and Household state; and scoped hashes at every checkpoint. The document is limited to 64 MiB and one million steps.Developer Tools owns validation, JSON conversion, replay orchestration, and scoped divergence reporting. Runtime owners still perform every mutation.

Data rules

  • Manifest and document bytes are immutable source data. They are not simulation or save authority.
  • App and Game parse typed values after loading. Render and Simulation do not open files.
  • Paths must remain inside the configured asset root after lexical normalization.
  • Unsupported authored-project schema versions fail with asset ID, resolved path, and parser context.
  • ECS state JSON is a detached transfer document. Deserialization cannot mutate a live world, and restore commits only after a temporary world validates completely.
  • The foundation document embeds the existing ECS object. It does not define a second component format.
  • Foundation restore validates every owner and cross-owner tick limits before RuntimeSession and RuntimeCommandQueue accept their state.
  • Replay restore uses the foundation and camera owner APIs, starts a fresh selection owner, and applies recorded inputs through the same runtime, camera, and selection functions used during recording.
  • Scenario reset is exclusive of normal frame input. It restores initial owner snapshots and clears selection; the graphical composition also clears held input. Fast-forward requests are bounded and Simulation remains the sole tick owner.
  • Replay hashes compare canonical foundation, camera, and observable selection state. They locate the first divergence and do not replace typed state or owner validation.
System S.12

#Build and Verification

CMake targets enforce the ownership graph and CTest proves deterministic graphical and headless behavior.

Production targets

  • worldforge_core, worldforge_assets, worldforge_controls, worldforge_sim, worldforge_game, worldforge_tools, worldforge_render, and worldforge_app are focused runtime libraries.
  • worldforge_replay is the developer-only run-control and replay library. It depends outward on App and Render so neither runtime library depends on replay coordination.
  • worldforge_tools_sdl implements the render-owned SDL overlay contract. Render does not depend on Tools, and the generated target graph is acyclic.
  • worldforge_headless links App without SDL or rendering.
  • worldforge adds Controls, SDL Platform, Render, Replay run control, and SDL3 to the same App/Game/Simulation path.
  • worldforge_tests uses Catch2 and links App, Controls, Render, Replay, and Tools; transitive target dependencies supply the lower layers.

Test source contracts

88 of 137 registered test sources currently have authored summaries. Every listed record names at least one exact registered test case; omitted C++ test sources remain visible in the collapsed inventory and make no authored proof claim here.

Test sourceWhat it proves
tests/application_flow_tests.cppComplete application-flow state and reason matrix, direct-launch sequencing, rejection without mutation, competing requests, cancellation, pending, ambient, real, and injected failure containment diagnostics, detached snapshots, and enum-name coverage.
1 named proof case(s)
  • application flow legality matches the complete transition table
tests/asset_tests.cppManifest schema, IDs, path safety, type checks, required and optional failure, required content-catalog typing, immutable cache reuse, release and reset, statistics, and deterministic non-mutating cache inspection.
1 named proof case(s)
  • asset service loads and caches immutable project data
tests/config_contract_tests.cppPinned dependency and public CMake target checks, module include boundaries, backend include ownership, direct-launch, leaving-cleanup, deterministic failure-seam order, detached graphical capture, and exclusion of lifecycle state from durable foundation, ECS, and replay authority.
2 named proof case(s)
  • Worldforge configuration uses C++20
  • source includes respect engine ownership boundaries
tests/control_tests.cppAuthoritative binding-catalog uniqueness and lookup, multi-binding held counts including both Shift keys, mouse-down modifier capture across same-frame releases, ordered presses, focus and explicit session-exit reset, wheel input, pointer positions, contextual move queue and cancellation mapping, runtime command mapping, and F8/F9 run-control mapping.
1 named proof case(s)
  • controls expose one unique authoritative physical binding catalog
tests/ecs_tests.cppPersistent IDs, handle validity, create/restore/destroy, component snapshots, motion tick order, debug dump, and invariants.
1 named proof case(s)
  • persistent handles survive pool growth and generated IDs are not reused
tests/ecs_serialization_tests.cppVersioned ECS document round trips, byte stability, stable ordering, deleted-ID continuity, boundary validation, and transactional restore failure.
1 named proof case(s)
  • ECS world state round trips every current component and ID high-water mark
tests/foundation_serialization_tests.cppPhase 0 foundation schema 27 round trip, stable bytes, scheduler accumulator, command-queue and script-command continuity, movement and construction tuning, scenario-capacity revision, content-catalog asset identity, deterministic continuation, migrations, cross-owner validation, and failed-restore isolation.
5 named proof case(s)
  • Phase 0 foundation state round trips and continues deterministically
  • foundation schema 21 restores default tuning and an empty time-scale remainder
  • foundation schema 22 migrates tuning schema 1 with the default movement rate
  • foundation schema 24 restores default scenario capacity policy
  • foundation preserves pending script commands and schema 26 migrates an empty service
tests/phase0_replay_tests.cppReplay schema 20 recording, stable fixture bytes, normal and development-restricted script commands, explicit Actor control transitions, replace and additive selection replay, queued and cancelled contextual movement, contextual attack targeting, stable building-definition identity for settlement actions, cancellation, bounded execution, reset and bounded fast-forward, owner restore, actor heat-transition input, midpoint actor save/replay, scoped actor divergence, schema round trip, detached replay/save inspection, invalid document rejection, and transactional camera restore.
3 named proof case(s)
  • phase0-foundation records serializes and replays every current command path
  • foundation replay records delayed tuning and capacity commands through the script owner
  • settlement replay commands retain stable building definition identity
tests/isometric_tests.cppProjection round trips, camera bounds, pan/zoom/reset, viewport changes, pointer-centered zoom, and rejection of non-finite projection, viewport, and command values.
1 named proof case(s)
  • 2:1 isometric projection maps the Cartesian basis
tests/render_debug_tests.cppDebug action mapping, visibility toggles, and visibility descriptions.
1 named proof case(s)
  • render debug controls preserve press order and stay out of runtime commands
tests/render_scene_tests.cppRender-proxy extraction, Actor overrides, viewport culling, 500-proxy work and timing bounds, validation, stable depth order, and deterministic scene results.
1 named proof case(s)
  • render scene pulls proxies and sorts depth ties by persistent ID
tests/runtime_inspection_tests.cppDerived hotkey labels including Shift selection gestures, binding coverage, developer input capture filtering, F3 and quit passthrough, held-input reset, inspector action command ordering, and ordered entity/selection snapshot capture.
1 named proof case(s)
  • hotkey reference derives every displayed input from control bindings
tests/runtime_options_tests.cppGraphical and headless option parsing for every deterministic application-flow failure boundary, invalid values, missing values, and usage text.
1 named proof case(s)
  • runtime options accept every named application flow failure boundary
tests/runtime_tests.cppCLI parsing, versioned scenario capacity loading and migration, configuration and scene loading, scene validation and stable ordering, runtime presentation, scheduler commands, deterministic scaled frame accumulation, atomic runtime tuning, pending-command discard with monotonic sequence continuity, frame ticks, bounded tick budgets, exactly-once ECS execution for every committed tick, runtime session behavior, and result transcripts.
4 named proof case(s)
  • runtime command queue preserves stamped order
  • fixed step time scaling preserves tick equations and frame partition equivalence
  • runtime tuning patches validate atomically and advance one revision
  • runtime scenario capacity policy loads authored v2 limits and defaults legacy v1
tests/runtime_player_attack_tests.cppContextual hostile-target acceptance after explicit direct control, autonomous-recipient rejection, friendly and queued-policy blocks, durable lifecycle identity, idempotence, cancellation, movement replacement in both directions, fixed attack cadence, bounded injury, fear retreat, target-loss cancellation, out-of-range waiting, midpoint persistence, owner serialization, rollback-safe Actor plan application, and direct-control deferral and resumption of retained autonomous construction Work.
3 named proof case(s)
  • contextual attack requires an explicit Take Control transition
  • contextual attack advances on a fixed cadence and applies one bounded injury
  • direct control defers retained construction work and release resumes it
tests/selection_tests.cppHover, replace click and Actor-only marquee, additive click toggle and marquee union, direct prop inspection, same-frame modifier capture, empty-ground behavior, Actor overrides, 500-proxy viewport culling, stable offscreen selection, candidate order, invalid inputs, stale selection removal, and control-to-selection mapping.
2 named proof case(s)
  • selection controls map pointer action state without SDL details
  • actor-aware marquee excludes props while direct clicks can inspect them
tests/sdl_asset_tests.cppSDL F8/F9, X cancellation, right-click, and left/right Shift translation; image/font decode from AssetService bytes; invalid typed data; transactional replacement; app-owned reset and reload composition; explicit release counters; overlay startup; read-only lifecycle inspection; hotkey input capture; and close-before-first-frame shutdown under the dummy backend.
1 named proof case(s)
  • SDL translates run-control and additive-selection keys
tests/verify_headless_repeat.cmakeRuns the headless scenario repeatedly and rejects transcript drift.
1 named proof case(s)
  • Worldforge_headless_repeat
tests/verify_application_flow_failures.cmakeRuns both real composition roots through bootstrapping, loading, active-session, leaving-session, and shutdown injection plus a real missing-scenario load failure; requires the expected error result, faulted diagnostic, and no success transcript.
2 named proof case(s)
  • Worldforge_headless_application_flow_failures
  • Worldforge_graphical_application_flow_failures
tests/construction_tests.cppConstruction schema-8 stable building-definition identity, footprint, placement, material, Work binding, blockage, authored work units, deterministic fractional progress, autonomous worker interruption and handoff history, timeout failure cause, completion, cancellation, validation, and restoration contracts.
4 named proof case(s)
  • construction consumes delivered material only after bounded build progress
  • interrupted construction releases its worker and resumes without losing material or work
  • interrupted construction times out with its delivered material and cause retained
  • construction rejects tick-zero blockage evidence without creating invalid state
tests/resource_economy_tests.cppResource registration, inventory, reservation, collection, delivery, consumption, conservation, exact live-capacity accounting, bounded container creation and transformations, validation, and state restoration contracts.
4 named proof case(s)
  • resource pickup and delivery conserve every registered quantity
  • resource consumption preserves an explicit accounted sink total
  • resource capacity usage is exact and limits reject container growth atomically
  • resource transforms enforce net-positive aggregate limits without partial mutation
tests/work_lifecycle_tests.cppDemand, Job, WorkTask, reservation, transition, completion, cleanup, identity, validation, derived live-claim indexing, and transactional restore contracts.
2 named proof case(s)
  • work lifecycle completes one explicit demand job task reservation and order chain
  • live job claims stay indexed across lifecycle transitions and restoration
tests/runtime_phase3_tests.cppRunning-session Phase 3 composition, autonomous food and capability-sensitive construction execution, owner continuity, bounded fixed-point progression, and result evidence.
2 named proof case(s)
  • authored Phase 3 runtime completes construction and produces reproducible rate evidence
  • autonomous construction stages survive detached save-load checkpoints
tests/phase3_economy_state_tests.cppPhase 3 schema-19 catalog identity, stable content references, exact supply worker and beneficiary persistence, aggregate cross-owner validation, legacy building-definition, supply, Construction, and scheduler migration, moving-beneficiary target-refresh evidence, worker-interruption continuation, fixed-point contribution math, capability-rate bounds, serialization, inspection projection, counter bounds, replay, and transactional restoration.
10 named proof case(s)
  • construction scheduler rejects overflowing retained counter sums
  • Phase 3 replay reproduces claim transfer delivery and construction completion
  • Phase 3 schema 11 migrates construction work ticks to fixed-point work units
  • Phase 3 schema 12 maps every legacy building function to a stable definition
  • Phase 3 schema 13 migration preserves a distinct supply worker and beneficiary
  • construction scheduler schema six initializes replacement scan evidence
  • construction schema seven migrates an unknown failure without inventing a cause
  • construction work rate preserves fractional progress across scheduler partitions
  • construction capability fit handles signed habit bias without unsigned wrap
  • Phase 3 schema 18 initializes moving-beneficiary handoff evidence
tests/phase3_economy_throughput_tests.cppDetached Phase 3 throughput windows, conservation evidence, stall classification, bounded history, and non-authoritative inspection contracts.
1 named proof case(s)
  • Phase 3 throughput derives exact rates and signed gauge deltas from detached samples
tests/phase7_closure_tests.cppPhase 7 catalog-driven player designation, stable building-definition replay, Settlement persistence and migration, expansion, functional upgrade, infrastructure activation, damage, repair, cancellation, scenario storage-limit enforcement, cross-owner validation, and transactional restore contracts.
5 named proof case(s)
  • Phase 7 player construction expansion save and replay use one ownership path
  • settlement construction respects the scenario storage limit atomically
  • Phase 7 foundation schema loads the previous save without inventing Settlement state
  • Phase 7 player upgrade uses Settlement Construction Work and Resource owners
  • Phase 7 active maintenance survives save and cancellation reconciles every owner
tests/phase8_closure_tests.cppPhase 8 generated-baseline separation, persistent modification, scoped observer disclosure, stale player reads, deterministic checkpoint continuation, representative world breadth, active-set limits, and exact environment and ecology work-budget contracts.
2 named proof case(s)
  • Phase 8 wide world remains bounded and deterministic across persistence
  • Phase 8 observer checkpoint retains scoped facts and stale continuation
tests/production_tests.cppPhase 9 recipe validation and Phase 19A Building function, condition, service capacity, physical maintenance, multi-step Work execution, exact Resource transformation, route gating, storage failure, cancellation, schema migration, serialization, and deterministic continuation.
5 named proof case(s)
  • production completes a multi-step accounted transform through Work and inventory
  • production reserves building service and consumes visible maintenance
  • production schema one migrates without inventing economic costs
  • production rejects completion atomically when output capacity is unavailable
  • production cancellation releases Work and retains carried inputs exactly once
tests/trade_tests.cppPhase 9 physical party provisioning plus Phase 19C regional trade obligations with stable endpoints, scarcity-derived price evidence, Route identity, conservation, arrival, deadline failure, cancellation, schema migration, serialization, and deterministic continuation.
5 named proof case(s)
  • party provisioning and trade obligation move physical conserved cargo
  • regional scarcity quote becomes a physical trade obligation with failure
  • expired trade obligation fails and retains already carried cargo
  • cancelled provisioning releases source cargo without partial transfer
  • trade state round trips in transit and resumes deterministically
tests/regional_economy_tests.cppPhase 9 bounded revisioned regional facts, incremental summaries, route flows, stale detection, atomic rejection, serialization, deterministic continuation, and Phase 19C scarcity-derived Route quotes.
5 named proof case(s)
  • regional economy applies bounded facts in canonical identity order
  • regional economy replaces a revisioned source fact without double counting
  • regional economy rejects over-budget and conflicting updates atomically
  • regional economy summaries serialize and continue deterministically
  • regional economy quotes one route from owned scarcity and risk facts
tests/phase9_closure_tests.cppPhase 9 live-session composition, foundation persistence, deterministic continuation, previous-schema migration, cross-owner validation, transactional rejection, and detached inspection.
4 named proof case(s)
  • Phase 9 owners compose persist and continue through the live session
  • Phase 9 restoration rejects unknown recipe resources transactionally
  • Phase 9 foundation migration preserves an older save without inventing owners
  • Phase 9 inspection rejects partial owner composition
tests/phase10_progression_tests.cppPhase 10 attributable Work progression, later IAUS effect, Relationship stages, transactional Household formation and care, illness, treatment, life stages, death, lineage, persistence, and terminal Actor eligibility.
4 named proof case(s)
  • completed Work produces Actor-owned progression and changes a later IAUS choice
  • resolved support progresses one Relationship and forms one Household transactionally
  • one household meal records care consumes food and relieves one member atomically
  • Actor life course retains lineage illness treatment and one terminal death
tests/phase10_closure_tests.cppPhase 10 detached biography, 20,000-Actor multi-year bounded traversal, stable lineage validation, projected save budget, foundation persistence, deterministic continuation, and transactional restore rejection.
3 named proof case(s)
  • detached personhood biography orders bounded facts from their existing owners
  • twenty thousand life courses advance across years within one linear visit budget
  • Phase 10 life-course facts persist and continue through the live foundation
tests/phase11_content_tests.cppPhase 11 authored catalog loading, stable metadata, focused resolver registration, cross-reference validation, and pre-session rejection.
3 named proof case(s)
  • authored incident catalog loads stable metadata and focused resolver IDs
  • event templates reject unregistered focused outcome resolvers
  • malformed authored incident catalogs reject before session construction
tests/structured_quest_tests.cppPhase 11 quest authoring, legal lifecycle transitions, neglect, failure, expiry, delegation, participant replacement, domain evidence, persistence, and autonomous continuation.
2 named proof case(s)
  • structured rescue lifecycle branches without owning domain state
  • runtime rescue steps require World knowledge movement and Incident evidence
tests/institutional_request_tests.cppPhase 11 formal messages, real participants, institutional standing, revisioned social evidence, requests, obligations, failure, persistence, and runtime composition.
2 named proof case(s)
  • institutional request lifecycle retains formal evidence and obligations
  • runtime institutional resolution uses Actor and retained social facts
tests/structured_event_consequence_tests.cppPhase 11 atomic quest and institutional aftermath through existing domain owners plus bounded idempotent causal-ledger persistence.
3 named proof case(s)
  • completed quest applies retained Relationship Memory and World aftermath exactly once
  • resolved institutional obligation creates normal Trade and Work exactly once
  • structured event consequence ledger is bounded idempotent and serializable
tests/phase11_closure_tests.cppPhase 11 authoring budgets, bounded prompt visits and output, urgency, de-escalation, related-chain suppression, control modes, serialization regeneration, and deterministic closure.
5 named proof case(s)
  • Phase 11 authored catalogs reject before content volume can bypass fixed budgets
  • Phase 11 surfacing is bounded urgent deterministic and suppresses related chains
  • Phase 11 neglect failure delegation and success de-escalate through one prompt policy
  • Phase 11 prompt composition stops at each owner's fixed visit budget
  • Phase 11 persisted owners regenerate the same bounded presentation after restore
tests/phase12_defense_tests.cppPhase 12 settlement alarm, normal guard Work, atomic clearing, deterministic Party line slots, exact-ground movement, and persistence.
2 named proof case(s)
  • settlement alarm creates one normal guard job and clears it atomically
  • selected Party uses deterministic line slots through normal exact-ground movement
tests/phase12_faction_tests.cppPhase 12 faction validity, fixed-point strategy, cadence, negotiation, raid aftermath, remote-conflict budgets, persistence, migration, and deterministic continuation.
4 named proof case(s)
  • bounded rival strategy applies hard gates before fixed point preference
  • faction state persists its references cadence and complete strategic trace
  • faction raid composes authoritative loss defense alarm and social aftermath
  • remote conflicts advance in stable bounded batches and persist their cursor
tests/script_api_registry_tests.cppPhase 14A and 14L interface layers, package origins, stable descriptor validation, complete cross-reference validation, actual runtime catalog coverage including building-definition query fields, committed normalized export equality, deterministic export, and package-root-relative plugin layout.
6 named proof case(s)
  • Script API registry defines the three interface authority layers
  • Script API registry rejects malformed and duplicate symbols
  • Script API normalized export is stable across registration order
  • Runtime Script API catalog is complete and matches the committed reference export
  • Complete Script API validation rejects missing namespaces and errors
  • Script package layout places plugins at the explicit package root
tests/script_query_service_tests.cppRegistered query schemas, detached owner routing, pagination and package budgets, explicit unavailable facts, stable ordering, mutation isolation, Actor hunger and hydration fields, building and construction definition IDs, World land control, worker-interruption timing and handoff evidence, terminal settlement-project outcomes, and detached runtime-tuning and scenario-capacity snapshots.
6 named proof case(s)
  • script query catalog registers complete read-only API descriptors
  • script queries enforce bounded pages and package budgets before owner access
  • script queries return detached owner facts without mutating the runtime
  • script queries route implemented domain facts through their authoritative owners
  • script queries distinguish missing filters, cold data, and unopened capabilities
  • script land query pages stable irregular cells without mutating World
tests/script_command_service_tests.cppPhase 14D typed normal and restricted commands, host-created origins, fixed-tick owner dispatch, bounded receipts and transcripts, post-commit events, deterministic replay evidence, and Phase 16 revision-checked runtime-tuning and scenario-capacity requests.
10 named proof case(s)
  • script command and event catalogs register typed post-commit contracts
  • script event service rejects unregistered and malformed facts without partial retention
  • normal script commands execute at the requested fixed tick through ControlAuthority
  • restricted commands require an engine-created development origin
  • script command validation and owner rejection cannot publish completion events
  • script command queues, histories, and replay evidence remain bounded and ordered
  • development tuning commands commit through the tuning owner and publish facts
  • development capacity commands commit through the policy owner and publish facts
  • capacity commands produce identical state transcripts and event facts
  • capacity commands reject limits below current use without state or event mutation
tests/script_package_host_tests.cppPhase 14E through 14M manifest, sandbox, lifecycle, authority, budget, semantic UI, package-qualified panel identity, composition, versioned host state, active event delivery, deterministic repeated reload, hostile Lua containment, fault isolation, recovery proof, Phase 16 executable-owned tuning and scenario-capacity controls, and standard-interface construction recovery presentation.
17 named proof case(s)
  • script package host loads first-party and development packages in bounded sandboxes
  • standard settlement interface renders the retained autonomous project trace
  • script panels use package-qualified identities and reject local duplicates
  • script package host rejects instruction, memory, and lifecycle command violations
  • script package reload atomically preserves compatible host state and last valid graph
  • repeated script composition and reload remain deterministic and memory bounded
  • script package host disables repeated faults and bounds diagnostic history
  • script package recovery rejects stale actions and suppresses hidden surface work
  • script package safe mode restores standard composition without changing gameplay
  • runtime contribution faults isolate one package and retain the active provider
  • script events deliver in order and defer callback commands to a later fixed tick
  • faulting event handlers are isolated and disabled without stopping the session
  • event callback memory exhaustion remains a contained package fault
  • event subscriptions are bounded and successful reloads discard the old generation
  • event storms drain in deterministic bounded batches
  • script host API registers query, command, event, and lifecycle contracts
  • script package host policy excludes development packages from release-style loads
tests/ui_composition_registry_tests.cppPhase 14F stable surface, slot, fallback, contribution ordering, explicit replacement selection, and recovery-shell protection.
3 named proof case(s)
  • UI composition resolves dependency order and explicit replacement selection
  • UI composition rejects conflicts and preserves compiled recovery authority
  • UI composition validates slots semantics cardinality and registered metadata
tests/runtime_player_move_tests.cppDurable single-Actor and Party movement, physical exact-ground navigation, Actor capability modifiers, bounded queues, cancellation, persistence, inspection, explicit direct-control validation, and transactional rollback.
3 named proof case(s)
  • contextual movement requires an explicit Take Control transition
  • contextual move requires direct control and advances one Actor through World positions
  • contextual move rejects empty or partial Party recipients without partial mutation
tests/world_topology_tests.cppSigned meter, cell, and Chunk-coordinate mapping; stable identity lookup; authored Site geometry; transactional topology validation; and deterministic route queries.
3 named proof case(s)
  • world grid maps meter positions through aligned cells into half-open chunks
  • topology construction validates all stable spatial references transactionally
  • route queries use lowest cost and stable segment-id tie breaking
tests/world_runtime_state_tests.cppCanonical World persistence, physical route and local-movement continuation, rebuilt active-movement indexes, movement modifiers and fractional progress, independent land control, legacy migration, transactional rejection, and spatial validation.
7 named proof case(s)
  • world state is canonical across equivalent authoring order
  • schema ten route durations migrate to physical distance progress
  • schema ten road timing migrates to physical distance and proportional progress
  • invalid world state never mutates a retained runtime
  • restored local movement rejects spatial contradictions transactionally
  • World owns connected retained land areas with revision checked mutation
  • World land schema 2 migrates without inventing controlling Sites
tests/ground_terrain_tests.cppWorld-owned terrain validation, active-residency composition, stable detached ordering, camera-visible cell culling, and empty-presentation recovery.
2 named proof case(s)
  • resident World terrain composes into detached ordered chunks
  • camera culling submits only visible resident terrain cells
tests/world_runtime_tests.cppWorld topology and physical route execution, physical local-movement rates, deterministic fractional progress, capability and road modifiers, duration estimates, bounded tick advancement, and ordered pending-arrival hydration.
2 named proof case(s)
  • local movement converts physical rates into deterministic residual progress
  • road effects improve new route plans without rewriting active travel
tests/scenario_capacity_policy_tests.cppScenario policy technical ceilings, detached snapshots, revision-checked atomic patches, stale rejection, below-current-use rejection, and restore validation.
4 named proof case(s)
  • scenario capacity policy validates balance policy below immutable technical ceilings
  • scenario capacity policy patches are revisioned and detached
  • scenario capacity policy rejects stale and below-use changes atomically
  • scenario capacity policy restore rejects state below observed use
tests/actor_state_tests.cppActor candidate canonicalization, World and exact-target bindings, scenario live-population enforcement, hunger and hydration mutation, detached render snapshots with regional-transit classification, schema-18 validation, and topology-revision rejection.
5 named proof case(s)
  • actor candidates are canonical and join Phase 1 world state without owning it
  • actor candidates enforce the scenario live-population boundary exactly
  • actor owner applies revision-checked hydration relief
  • invalid actor candidates leave a retained actor runtime unchanged
  • actor render composition joins Actor identity to World position without changing heat
tests/runtime_player_command_tests.cppPlayer command snapshots with Actor-only and complete-Party recipients, explicit Party formation and whole-member control summaries, contextual movement, scenario storage-limit enforcement during Party inventory provisioning, and transactional rejection.
6 named proof case(s)
  • player command forms a Party from the two embodied authored Actors
  • player command snapshot promotes explicit Party formation and control
  • a controlled leader forms a directly movable Party
  • Party control summary reports and repairs a crisis-overridden follower
  • Party inventory provisioning respects the scenario storage limit atomically
  • rejected Party formation does not retain provisioned member inventory
tests/content_catalog_tests.cppRequired catalog loading, canonical stable-ID ordering, immutable lookup, closed land-use classifications including settlement expansion, cross-reference validation, content-owned residence benefits, canonical footprint-key reuse, malformed and order-derived identity rejection, duplicate rejection, and bound enforcement.
5 named proof case(s)
  • required content catalog loads immutable canonically ordered definitions
  • content catalog rejects malformed and order-derived identities transactionally
  • content catalog rejects duplicate definitions and missing references transactionally
  • content catalog footprint keys retain one canonical cell definition
  • content catalog validates land uses and crops as immutable referenced definitions
tests/runtime_economy_tests.cppAuthored economy schema 18, stable catalog instance references, food and water supply purpose and beneficiary policy, resource, building, recipe, material, source, consumer, capacity, established-construction stage and worker validation, and explicit legacy migration handling.
6 named proof case(s)
  • authored economy schema 11 loads stable catalog instance references
  • authored economy definition rejects invalid runtime relationships
  • economy content validation resolves resources, buildings, recipes, and materials
  • legacy economy schemas reject with a catalog migration diagnostic
  • economy schema 17 defaults every authored construction to site preparation
  • economy schema 18 validates established construction stage and worker pairs
tests/runtime_session_candidate_tests.cppCatalog-aware new and saved session candidate construction, authored identity validation, complete owner loading before commit, missing-save rejection, and backup recovery feedback.
4 named proof case(s)
  • new session candidate loads every authored owner before construction
  • saved session candidate validates authored identity before restoring state
  • missing saved session fails without constructing a partial candidate
  • saved session candidate exposes backup recovery feedback
tests/world_substrate_tests.cppPhysical compressed-route planning and active-only advancement, capability and live tuning, infrastructure modifiers, fractional multi-segment ETA, ordered pending arrivals, atomic regional and traveler preflight, route lifecycle, and transactional rejection.
7 named proof case(s)
  • movement tick work excludes twenty thousand retained terminal records
  • route travel uses physical distance actor capability and live movement tuning
  • route advancement preserves physical rate crossings and fractional ETA
  • route preview evaluates only the reachable physical path
  • traveler overflow rejects world advancement before region mutation
  • arrived route progress can be atomically replaced by a later trip
  • invalid substrate candidates leave a retained runtime unchanged
tests/static_sprite_atlas_tests.cppStatic world-prop atlas parsing, canonical keyed lookup, duplicate rejection, and bounded source and presentation geometry validation.
3 named proof case(s)
  • static sprite atlas canonicalizes keyed presentation frames
  • static sprite atlas rejects unsafe source and presentation geometry
  • static sprite atlas rejects duplicate and transient frame identities
tests/phase16_settlement_content_tests.cppStarter-settlement authored identity, ten-resident and four-household owner composition, clustered regional woodland, irregular settlement-expansion land, live bounded housing parcels, bounded autonomous project placements, direct presentation coverage for established buildings, residence benefits, bounded named-villager food and water competition, moving-beneficiary supply completion, a complete visible daily routine, regional-traveler presentation exclusion, exact-local supply persistence and replay, headless equivalence, and foundation persistence.
13 named proof case(s)
  • Phase 16A starter settlement content resolves every authored identity
  • Phase 16A starter settlement composes households, settlement, and embodied villagers
  • Phase 16A starter settlement survives the real save-candidate restore path
  • named starter villagers compete deterministically for bounded settlement supply work
  • Phase 16B exact-local supply survives an active save and deterministic replay
  • starter villagers derive and complete a needed facility through spatial growth
  • Phase 16C active construction survives save restore and deterministic replay
  • authored project placements still resolve canonical buildings and world cells
  • starter villagers follow a visible work-to-home day through save and restore
  • inter-site merchants do not render as local wandering pedestrians
  • moving need beneficiaries cannot strand the retained supply worker
  • Phase 19M starter settlement dedicates whole fields and connects meaningful anchors
  • Phase 19Q5C2A derives live starter housing parcels without an authored winner
tests/actor_focus_reasoner_tests.cppShared fixed-point Actor focus scoring, hydration and water selection, hard eligibility, stable tie-breaking, capability and learned-tendency contributions, Household strain, traced evidence, and invalid-input rejection.
3 named proof case(s)
  • actor focus scoring selects a need and explains every fixed-point contribution
  • hydration pressure selects the water focus through the shared scorer
  • hard eligibility excludes candidates before considerations run
tests/actor_motivation_tests.cppTemplated drive-response variation, shared pressure curves, job checkpoint retention, carried-meal consumption, critical interruption, immediate need relief, and rejection of invalid in-transit consumption.
3 named proof case(s)
  • one drive response evaluator handles every actor pressure curve
  • working actor retains its job through a checkpoint and consumes a real carried meal
  • carried meals cannot consume resources in transit for active Work
tests/actor_plan_tests.cppFocus, player, claimed-Job, and daily-routine plan transactions; exact local targets and same-task target replacement; remote-route handoff; pause, interruption, resume, failure, arrival reconciliation; capability-sensitive movement; matching completed local-arrival state; and rollback-safe rejection.
7 named proof case(s)
  • exact job targets use local navigation before work becomes ready
  • route arrival starts exact local navigation for a remote job
  • route and local arrival reconciliation visit one mover in a twenty thousand Actor world
  • exact job travel cancels and restarts through plan lifecycle transitions
  • routine home movement reaches an exact local residence position
  • completed routine movement replaces stale local navigation with its exact arrival
  • ready jobs can replace a stale local target without changing work identity
tests/actor_schedule_tests.cppStable heat-tier scheduling, bounded IAUS evaluation, need pressure, authority suppression, exact-route and local-path interruption, resume and replan budgets, arrival reconciliation, and invalid-input isolation.
3 named proof case(s)
  • scheduled IAUS evaluation starts bounded plans and replaces an arrived route
  • invalidated exact travel interrupts and fails through the scheduled policy
  • route pressure interruption pauses until the clear threshold then resumes
tests/settlement_supply_tests.cppSupply-chain creation, distinct worker and beneficiary ownership, exact Work and Resource transitions, revision-checked need relief after consumption, alerts, cancellation, successor lineage, restoration, and transactional failure.
3 named proof case(s)
  • food supply moves accounted stock and relieves hunger only after consumption
  • food supply cancellation in transit reconciles ownership exactly once
  • completed food supply creates one preflighted successor with explicit lineage
tests/settlement_supply_scheduler_tests.cppBounded deterministic Actor and Supply candidate windows plus execution, moving-beneficiary target refresh, reentry, and alert traversal; no complete Supply by Actor matrix; arbitrary-budget cross-pair fairness through save and restore; food, water, and material handoffs; need reentry; route and source alerts; suppression; hard route-cost gates; counter validation; and cross-owner rollback.
4 named proof case(s)
  • bounded settlement supply scheduler selects and claims one authored supply transactionally
  • settlement supply scheduler gives every actor a bounded window before cycling supplies
  • food need re-entry completes a second owned cycle without duplicating resources
  • settlement supply scheduler preflight rejection preserves every gameplay owner
tests/settlement_work_composition_tests.cppBounded deterministic resident-worker and owner-spatial indexes; retained derived-cache cadence and source-revision invalidation; topology and local-navigation validation; empty-eligibility behavior; and economy-scoped legacy fallback without a world-population scan.
5 named proof case(s)
  • settlement work composition produces bounded deterministic actor and anchor indexes
  • settlement work composition cache refreshes only at its authoritative seams
  • settlement work composition rejects missing actors and invalid local anchors
  • settlement work composition retains authored anchors when no resident is eligible
  • economy-scoped settlement work excludes unrelated large Actor populations
tests/settlement_spatial_supply_tests.cppExact local source, stockpile, and consumer movement for food and water; conserved transfers; distinct workers and beneficiaries; empty eligibility; worker-loss cleanup; death cleanup; and blocked-path alerts.
4 named proof case(s)
  • food supply follows exact source and stockpile positions without losing resources
  • water supply uses the same exact movement and conservation path
  • lost worker eligibility cancels exact movement and releases supply ownership
  • a blocked exact source path raises the retained blocked-route alert
tests/construction_work_scheduler_tests.cppBounded settlement-scoped construction claims, exact stockpile and project movement, material delivery, capability-sensitive labor, direct-control deferral, critical-interruption release, bounded replacement traversal, timeout only after a complete replacement scan, active-only construction indexing, invalid-worker reconciliation, and deterministic cursor continuation across large Actor populations.
7 named proof case(s)
  • construction execution uses exact stockpile and project positions
  • construction claim continuation bounds a twenty-thousand Actor population
  • invalid construction worker reconciliation fails closed without stranding resources
  • construction worker reconciliation waits a bounded grace period after delivery
  • construction worker reconciliation assigns a replacement builder before timeout
  • construction worker recovery completes a bounded late-candidate scan after grace
  • interrupted construction preempts an ordinary claim continuation
tests/runtime_money_custody_tests.cppDirect-control and Household authority, personal-to-Household currency conservation, transfer history, rejection, and exact RuntimeSession restoration.
2 named proof case(s)
  • money contribution requires direct control and conserves personal and household custody
  • money custody survives RuntimeSession state restoration exactly
tests/script_money_command_tests.cppNormal money-command authority, deterministic post-commit events, multi-tick execution timing, bounded standard-interface feedback, Lua balance and contribution UI, and foundation replay continuity.
6 named proof case(s)
  • money command fails closed without direct control
  • money command publishes conserved post-commit facts deterministically
  • money contribution executes on its target tick inside a multi-tick frame
  • standard interface shows money and contributes only after direct control
  • standard interface clears completed command feedback after its bounded lifetime
  • money contribution survives the foundation replay path
tests/job_preference_tests.cppDeterministic fixed-point Job preference, bounded player-priority contribution, hard eligibility gates, stable ties, population budgets, and transactional claim behavior.
5 named proof case(s)
  • job preference ranks immutable eligible jobs with fixed-point IAUS traces
  • player work priority adds a bounded preference without changing the baseline score
  • job preference excludes hard failures and breaks ties by stable job ID
  • job preference population gate bounds work across twenty thousand actors
  • preferred job claim commits work and resource ownership as one transaction
tests/runtime_audio_cue_tests.cppTransactional catalog-declared cue configuration, semantic coverage, bounded owner-fact capture, stable priority, deduplication, retry, cooldown, and Null-backend fallback.
5 named proof case(s)
  • asset-declared audio cues configure transactionally with a null fallback
  • runtime audio cue definitions cover each player-facing fact class
  • runtime audio routing prioritizes and deduplicates observed facts
  • busy audio cues are retried without changing fact authority
  • runtime audio capture reads bounded settlement owner state
tests/settlement_project_reasoner_tests.cppBounded fixed-point autonomous project scoring, household, business, civic, and institution sponsor evidence, two-settlement divergence, hard eligibility gates, complete contribution traces, useful-score rejection, stable ties, input permutations, and invalid budget or snapshot rejection.
7 named proof case(s)
  • settlement project reasoner selects housing and exposes bounded fixed-point evidence
  • settlement facts can make storehouse outrank housing
  • different settlement and sponsor facts select different valid projects
  • settlement project hard gates retain the first specific rejection
  • settlement project threshold produces an explained no-selection result
  • settlement project selection is stable across ties and input permutations
  • settlement project reasoner rejects insufficient budgets and malformed snapshots
tests/settlement_tests.cppSettlement identity, membership, expansion, maintenance, abandonment, bounded autonomous sponsor and decision evidence, selected-project terminal outcome and cause, cadence reopening, schema-5 sponsor migration, and canonical persistence.
5 named proof case(s)
  • settlement expansion uses stable topology anchors and bounded indexes
  • settlement retains bounded autonomous project decisions across cadence and save
  • settlement reconciles only its selected Construction and reopens project cadence
  • settlement maintenance uses normal construction work and material ownership
  • settlement abandonment rejects retained ownership and accepts an empty record
tests/runtime_settlement_development_tests.cppBounded autonomous project designation, housing-pressure, housing-method, exact parcel composition, authoritative housing execution, unattended multi-method closure, standard-interface explanation, owner and candidate visits, retained evidence, terminal reconciliation, reconsideration, persistence, Lua inspection, and deterministic replay.
13 named proof case(s)
  • Phase 16E selects and designates exactly one bounded settlement project
  • Phase 16E rejects invalid selected-project Construction bindings on restore
  • Phase 16E retains no-selection cadence and deterministic selection replay
  • Phase 16F reconciles a terminal selected project and reopens decision cadence
  • Phase 19Q5A retains independent household housing pressure without physical mutation
  • Phase 19Q5B compares durable housing methods without starting physical work
  • Phase 19Q5C2B selects one explained housing parcel without starting construction
  • Phase 19Q5C2B proximity budget exhaustion preserves every runtime owner
  • Phase 19Q5D binds the selected parcel once and reconciles cancellation
  • Phase 19Q5D completes selected housing and assigns the Household residence
  • Phase 19Q5D assigns selected shared housing without construction
  • Phase 19Q5D binds selected extension to the existing Building
  • Phase 19Q5E starts every housing method for distinct households without player input
tests/actor_routine_tests.cppWorld calendar boundaries, stable Actor routine offsets, work, meal, break, social, care, community, and sleep windows, explainable condition and need overrides, retained work-checkpoint meal deferral, and off-duty ordinary-work release.
4 named proof case(s)
  • calendar snapshot exposes stable day and clock boundaries
  • two residents retain different explainable choices in the same routine window
  • a retained work checkpoint defers a hungry resident's meal
  • scheduled breaks and social time release an ordinary work commitment
tests/world_indicator_tests.cppStable resource-source indicator identity, bounded Supply traversal, detached owner reads, source state, and explicit truncation evidence.
2 named proof case(s)
  • resource activity indicators detach bounded stable facts without mutating owners
  • resource activity indicator composition reports its visit budget
tests/phase17_health_care_tests.cppAtomic and autonomous same-household injury and illness treatment through Actor, Work, Resource, Household, Settlement, and World owners, including rollback, migration, persistence, and deterministic replay.
3 named proof case(s)
  • household care Work recovers one injury and one illness atomically
  • household care Work is deterministic from the same retained inputs
  • scheduled residents receive injury and illness care without player direction
tests/phase17_relationship_household_tests.cppResolved supportive partnership, persistent Household formation, and the resulting later autonomous partner-care decision through existing owners.
1 named proof case(s)
  • household formation changes a later autonomous partner care decision
tests/phase17_life_transition_tests.cppDerived life stages and one atomic death, Work cleanup, Resource inheritance, and survivor Household transition with conservation, persistence, rollback, biography, and deterministic replay.
1 named proof case(s)
  • life stages end in one conserved death and inheritance transition
tests/phase17_generational_closure_tests.cppAtomic living emigration and representative multi-year population continuity through existing World, Actor, Work, Resource, Household, Settlement, persistence, inspection, and budget owners.
2 named proof case(s)
  • living emigration releases current work and preserves identity and property
  • representative generations remain bounded and deterministic across multiple years
tests/phase18_expedition_preparation_tests.cppAtomic expedition preparation through Party, Resource, ObserverKnowledge, ScoutingOrder, and World owners with knowledge-safe inspection, rollback, persistence, and bounded visits.
3 named proof case(s)
  • Phase 18A prepares one physical knowledge-safe scouting Party atomically
  • Phase 18A rejects stale or unavailable facts without partial mutation
  • Phase 18A preparation is idempotent persistent and bounded
tests/phase18_expedition_travel_tests.cppExpedition departure, physical provision consumption, normal Party and World travel, a World-owned field camp, direct field observation, one weather disruption, one observed predator hazard through Intersection and Incident, knowledge-safe audio facts, rollback, persistence, idempotency, and bounded visits.
7 named proof case(s)
  • Phase 18B departs through normal Party travel and consumes one physical provision
  • Phase 18B establishes one field camp and retains only directly observed knowledge
  • Phase 18B rejects stale departure and premature or stale camp without partial mutation
  • Phase 18C observes one weather disruption and retains one camp predator incident
  • Phase 18C rolls back stale knowledge and a failed deep predator selection
  • Phase 18D retains pursuit, retreat, treatment, extraction, and failed objectives
  • Phase 18D rejects stale or unavailable field decisions without partial mutation
tests/land_conversion_tests.cppRevisioned clearing and preparation through Construction-owned progress and physical Work, Actor, World, and Resource owner transactions.
2 named proof case(s)
  • residents clear and prepare retained land through physical owner transactions
  • cancellation releases a land conversion without mutating World land
tests/farming_tests.cppConserved physical crop stages, environmental yield and failure, fallow recovery, storage return, shortage-driven reopening, and bounded cold-settlement evidence through existing owners.
5 named proof case(s)
  • residents sow tend and harvest one conserved physical crop cycle
  • authored environmental thresholds fail and recover a crop without invented output
  • authored weather changes conserved harvest quantity deterministically
  • settlement food need can reopen a stored conserved crop cycle
  • cold settlement farming retains bounded shortage evidence without an Actor
tests/infrastructure_construction_tests.cppPhysical road, fence, gate, repair, condition, conservation, cancellation, handoff, and autonomous maintenance transactions through existing owners.
6 named proof case(s)
  • residents build retained road plans through physical owner transactions
  • cancelling delivered road work restores the plan and every retained input
  • worker loss retains delivered road progress for a replacement resident
  • environment and use wear remove road effects at zero condition
  • repair work restores retained condition and can be cancelled without erasing damage
  • infrastructure construction stages have stable inspection names
tests/world_parcel_tests.cppCanonical bounded World parcel derivation, land and physical hard gates, reachable perimeter access, fail-closed work budgets, invalid input, and mutation isolation.
4 named proof case(s)
  • World derives canonical bounded parcel candidates without selecting one
  • World parcel candidates enforce land occupancy landscape topology and access gates
  • World parcel search reports each bounded-work stop without retaining partial authority
  • World parcel search rejects malformed and unavailable request facts
tests/settlement_housing_parcel_reasoner_tests.cppDeterministic settlement-wide exact parcel ranking, authored fixed-point risk, direct policy rejections, malformed evidence rejection, and fail-closed candidate budgets.
4 named proof case(s)
  • housing parcel reasoner selects one stable settlement-wide alternative
  • housing parcel reasoner retains direct policy rejections
  • housing parcel reasoner applies authored risk weight to otherwise equal parcels
  • housing parcel reasoner rejects malformed and over-budget evidence

Gate commands

cmake --preset dev
cmake --build --preset dev --parallel
ctest --preset dev --output-on-failure

cmake --build --preset headless --parallel
ctest --preset headless --output-on-failure

cmake --build --preset dev-sanitize --parallel
ctest --preset dev-sanitize --output-on-failure

AssetForge Contents

  1. 1AssetForgeAssetForge is Worldforge's local image-generation workbench. It provides one desktop and command-line path from a prompt to a validated ComfyUI workflow, genera
1

#AssetForge

AssetForge is Worldforge's local image-generation workbench. It provides one desktop and command-line path from a prompt to a validated ComfyUI workflow, generated image, thumbnail, and durable history record. Model weights, Python dependencies, experiments, and generated images remain outside the Worldforge game repository.

#1.1Start the application

Launch AssetForge from KDE or run ./run-gui.sh from the AssetForge workspace. AssetForge connects to an existing local ComfyUI server when possible and starts its managed server when one is not available.

The main generation controls are:

  • Model selects a validated ComfyUI runtime profile.
  • Prompt profile selects the independent recipe and alias vocabulary.
  • CFG and Steps are final per-generation overrides.
  • Render selects the configured Fast or Quality settings.
  • Images accepts one through ten independent jobs.
  • Seed accepts an explicit 64-bit seed or remains blank for a random seed.
  • Generate and Ctrl+Enter start the batch.

When a starting seed is supplied, later images increment it by one. With a blank seed, each image receives an independent random seed. The prompt editor supports normal Ctrl+A, Ctrl+C, Ctrl+X, and Ctrl+V editing.

#1.2Current design

The current design separates runtime configuration from prompt language.

A model profile owns executable concerns only: the declarative ComfyUI graph, model components, sampler, scheduler, dimensions, VAE behavior, LoRAs, render profiles, and required image inputs. A model profile cannot add positive prompt text, aliases, recipe nodes, or hidden defaults.

A prompt profile owns language only: its recipe tree, categorized aliases, suggestion index, and prompt-composition policy. AssetForge currently has two prompt profiles:

  • Flux contains the Worldforge recipe tree and natural-language aliases used with FLUX.2.
  • Other is a deliberately empty, general-purpose prompt surface for internal workflow testing. It does not inherit Worldforge recipes or aliases.

Changing the model selects its recommended prompt profile, but the selectors remain independent. The manual intentionally documents only the FLUX.2 profiles. Other internal test profiles and their components are confidential and are not listed here.

#1.3FLUX.2 profiles

FLUX.2 Klein 9B Uncensored Q8 is the default Worldforge generation profile. It uses the Flux prompt profile and the validated FLUX.2 style LoRAs.

FLUX.2 Klein 9B Uncensored Q8 Clean uses the same base components and sampler without the style LoRAs. It is the controlled baseline for deciding whether a result comes from the base model, prompt, or added style conditioning.

FLUX.2 Klein 4B BF16 Clean is the smaller official distilled baseline. It renders at 1024 by 1024 with four steps, CFG 1, Euler sampling, and the FLUX.2 scheduler. A first render at a new tensor shape can pause before sampling while ROCm TunableOps are profiled. Components trained for the 9B architecture are not attached to the 4B profile.

Flux 9B RefControl is the controlled-facing profile. It uses the undistilled FLUX.2 Klein 9B base required by the adapter and exposes two mandatory inputs:

  • Identity reference supplies character identity, clothing, color, and style.
  • Depth guide supplies facing, pose, and silhouette.

AssetForge stages the inputs independently and attaches the depth latent before the identity latent to match the adapter's training order. Fast uses the validated 20-step, CFG-5 configuration; Quality uses 50 steps and CFG 4. Include @refcontrol in the prompt. Supplying only one input is rejected before ComfyUI is queued. This profile does not silently fall back to ordinary prompt-only generation.

#1.4Positive-only prompting

AssetForge has one user-authored prompt stream: the desired result. Recipe nodes, aliases, suggestions, resolved generation specifications, output records, and tooltips do not have a negative or exclusion side. A workflow that technically needs a second conditioning input receives an empty internal literal rather than user-configurable negative text.

FLUX.2 prompt composition is subject-first: subject and action, explicit aliases and descriptive suffix, then inherited camera and readability context. Plain prompts receive no baked Worldforge defaults.

#1.5Recipe syntax

A recipe is a colon-separated path through the active prompt profile:

Map:Environment:Tree:Leafy
Map:Structure:Castle
Map:Creatures:Persons:Villager
Map:Creatures:Persons:Adventurer

Each selected node contributes its configured positive description. Only nodes marked as generatable can be submitted. Recipe depth and branch names come from the active JSON tree rather than hard-coded syntax positions.

Text that does not begin with a configured root is an ordinary prompt:

a luminous castle on a cliff during a storm

#1.5.1Inline aliases

Aliases begin with @. They are categorized, reusable natural-language descriptions owned by the active prompt profile. Attach aliases to any recipe segment in braces:

Map:Structure{@medieval}:Castle
Map:Creatures:Goblin{@cave_creature}

The alias applies to the completed descendant rather than becoming a new tree level. Braces accept aliases only.

An alias may reference other aliases. Names are unique across the complete profile, and exclusive groups reject contradictory combinations before generation. Skin, body, and gender traits are explicit aliases rather than required recipe fields.

#1.5.2Descriptive suffix

:: ends the structured path and begins the final natural-language description:

Map:Structure{@medieval}:Castle::large with parapets, a moat, gate, and drawbridge
Map:Creatures:Goblin{@cave_creature}::@gender_male, @skin_green, @size_large

Aliases remain available after :: and can be mixed with ordinary language. Only one suffix separator is allowed, and it must be followed by text.

#1.6People, creatures, and four-facing characters

Persons is a neutral parent. Its current generatable people include:

Map:Creatures:Persons:Person
Map:Creatures:Persons:Villager
Map:Creatures:Persons:Farmer
Map:Creatures:Persons:Adventurer

The branch does not force skin tone, gender, body type, clothing color, or equipment. Add only the traits and visual details required for the design. For example:

Map:Creatures:Persons:Adventurer::
@skin_onyx, @body_small, @gender_female, wearing a muted moss-green knee-length tunic,
a plain brown leather belt, dark trousers, brown ankle boots, and one short sword
sheathed at the left hip

For a four-facing set, use four independent generations with the same seed and identical identity, garment, color, and equipment wording. Change only the facing clause between northeast, southeast, southwest, and northwest. Keep descriptions concrete and compact; overly elaborate traits make cross-facing drift more likely. Describe carried or worn items using the character's anatomical left or right so the relationship survives a change in view.

Reference conditioning can improve pose and silhouette, but it does not guarantee that details hidden in one view will be reconstructed correctly. Inspect every facing for hair, face, collar, hands, weapon side, and sheath consistency. Repair localized defects with an approved reference and mask after the overall design is accepted.

#1.7Suggestions and prompt help

AssetForge rebuilds one complete suggestion index whenever the prompt profile changes. The index contains every root, every child at every depth, every alias in every category, and the description shown for each result. Results are not cut off by a fixed cap.

  • Focus an empty Flux prompt to show its root choices.
  • Type after : to narrow valid children of the current path.
  • Type @ inside braces or after :: to narrow aliases.
  • Click a path result to complete the active segment and continue into its children.
  • Hover the prompt editor to see help generated from the same index.

The tooltip and completion popup share one data source, so documentation in the editor cannot drift from the configured vocabulary. The Other profile has no Worldforge paths or aliases by design.

#1.8Editors

Template Editor edits the active prompt profile's positive recipe tree. A node can define its name, label, description, positive prompt fragment, generatable state, output group, children, and additional versioned fields. Branches can be added, renamed, updated, or removed at arbitrary depth.

Alias Editor edits categorized aliases. Each alias has a category, name, description, one or more positive fragments, and optional exclusive-group membership. An exact @alias fragment composes another alias recursively. Deletion is rejected while another alias still references the selected entry.

The protected Flux and Other registry entries remain available to model recommendations. Their contents are editable, but their registry identities cannot be removed or renamed. Writes use schema validation, locking, atomic replacement, and conflict detection so an editor cannot silently discard a concurrent change.

#1.9Desktop interface

The responsive header contains the model and prompt-profile selectors, CFG and Steps overrides, a centered Worldforge mark, configuration access, both editors, and live CPU and discrete AMD GPU utilization. Hover the GPU meter to see VRAM allocation. Telemetry reads Linux procfs and AMD DRM sysfs directly rather than starting a competing monitor.

The read-only Config viewer shows resolved runtime values for the selected model and render profile. Prompt text, aliases, and seed are deliberately excluded because they are per-generation language and state, not model configuration.

The interface uses one shared rounded-button component with semantic default, primary, success, danger, ghost, and icon treatments. The layout moves header groups at narrower window widths so controls do not overlap the centered mark.

Generation runs in the background. The window remains responsive, prevents overlapping AssetForge batches, and reports model loading, prompt encoding, sampling, VAE decode, saving, and local catalog work. The title carries sampler progress without adding a second progress bar to the page.

#1.10Stop, unload, and server lifecycle

The square stop control cancels only the active AssetForge batch. It interrupts active prompt IDs and removes the unsubmitted remainder without affecting unrelated ComfyUI clients.

Unload Model performs two spaced ComfyUI release passes for model weights, execution caches, reserved RAM, and VRAM. AssetForge also unloads when switching models while idle and when closing the application.

Stop ComfyUI is the complete local reset. It cancels AssetForge work, performs both unload passes, and sends SIGTERM only to a process verified as the local AssetForge ComfyUI server. A bounded fallback is used only if that process does not exit. The next generation starts the server again automatically. The launcher translates terminal Ctrl+C into SIGTERM to avoid Python and ROCm finalization races.

#1.11Galleries and history

The gallery selector controls both visible history and the destination for new output. Each gallery is a flat directory under output/. Its private .assetforge/ directory contains transactional SQLite history and compact disk-backed thumbnails.

Every new record preserves enough evidence to inspect the exact request:

  • submitted and fully resolved positive prompt;
  • alias names and expanded definitions;
  • 64-bit seed, model profile, prompt profile, and render profile;
  • effective CFG, steps, dimensions, sampler, scheduler, denoise, and LoRAs;
  • staged source images and masks;
  • complete submitted ComfyUI graph and prompt ID;
  • output, thumbnail, and gallery paths.

Click a thumbnail to open the full-resolution image. Left and Right move through the active gallery. Hovering exposes the resolved prompt. The card actions can restore the prompt and seed, open the original in an external editor, or remove the item from active history.

Normal removal creates a durable tombstone and leaves the PNG recoverable. Shift-delete requires confirmation and permanently removes the PNG, thumbnail, and history record. The Default gallery cannot be deleted. Shift-deleting another gallery removes its entire folder only after destructive confirmation.

#1.12References, masks, and controlled inputs

Curated source images belong in templates/, edit masks in masks/, and style notes in styles/. A source image alone uses img2img. A source plus mask uses inpainting so the change is limited to the selected region. Perform background and cast-shadow extraction after the character design and facings are approved so cleanup does not hide generation errors.

For ordinary img2img or inpainting:

./forge 'Map:Creatures:Persons:Adventurer::wearing a blue linen coat' \
  --template templates/adventurer.png \
  --mask masks/adventurer-coat.png \
  --denoise 0.6

For RefControl, --template is the identity reference and --depth is the structural guide. Both are mandatory and --mask is rejected:

./forge 'Map:Creatures:Persons:Adventurer::@refcontrol, wearing a blue linen coat' \
  --model-profile 'Flux 9B RefControl' \
  --template templates/adventurer-reference.png \
  --depth templates/adventurer-ne-depth.png \
  --count 1

#1.13Command line

The CLI uses the same parser, typed configuration, workflow transforms, generation service, ComfyUI client, and output history as the desktop application:

./forge list
./forge explain 'Map:Structure{@medieval}:Castle::large with a moat'
./forge 'Map:Creatures:Goblin{@cave_creature}::@gender_male, @skin_green' --count 4
./forge 'Map:Creatures:Persons:Adventurer::@skin_onyx, @body_small, @gender_female' \
  --model-profile 'FLUX.2 Klein 9B Uncensored Q8' \
  --count 4 \
  --seed 104729

Each image is submitted as an independent ComfyUI job, so a multi-image request does not create one large batch allocation. ./forge explain resolves and validates a recipe without submitting it.

#1.14Configuration and ownership

  • presets/worldforge.json owns model/runtime profiles and the prompt-profile registry.
  • presets/templates/flux2-9b.json owns Flux recipes and categorized aliases.
  • presets/templates/other.json owns the clean general-purpose prompt profile.
  • workflows/models/ owns versioned declarative ComfyUI API graphs.
  • recipe_syntax.py owns the recipe AST, parser, formatter, and :: suffix grammar.
  • recipe_suggestions.py owns the complete profile-scoped path and alias index.
  • prompt_aliases.py owns categorized recursive alias validation and expansion.
  • template_tree.py owns the arbitrary-depth recipe tree.
  • assetforge_generation.py owns batch state, cancellation, typed events, and cataloging.
  • assetforge_output_repository.py owns transactional SQLite history and tombstones.
  • assetforge_persistence.py owns locked atomic JSON updates and conflict detection.

Every supported runtime profile must name a validated declarative workflow. Runtime bindings and graph references are checked before submission. There is no procedural fallback graph, and prompt profiles cannot inject model configuration.

#1.15Documentation proposals

OpenClaw updates AssetForge documentation through the project-bound DocForge session. The openclaw writer can propose content-only updates to existing AssetForge chapters. It cannot create, move, delete, or rename nodes; change metadata or relationships; read another documentation family; run the manual builder; use Git; or publish the website. The current WorldForge adapter does not bind a canonical applier, although DocForge2 supports explicitly authorized hash-bound application.

The proposal workflow is:

  1. Read the current AssetForge node and retain its content hash.
  2. Create one isolated changeset with a unique stable ID.
  3. Submit the complete replacement chapter content with the expected node and changeset hashes.
  4. Validate the changeset, inspect its structured diff, and render the assetforge-review preview.
  5. Give the exact reviewed changeset ID and hash to the WorldForge integration owner.
  6. Rebuild and test through Worldforge's canonical manual workflow, then commit and publish through the normal repository process.

Concurrent proposals against the same chapter fail with an explicit conflict. A canonical source or manual-index change makes an older proposal stale. DocForge changesets and previews are disposable review artifacts; the files under manual/content/assetforge/ remain authoritative.

Canonical application may be enabled only after the WorldForge adapter supplies and verifies its project-owned serializer, exact-hash authorization, rollback, derived refresh, and failure recovery. That integration boundary belongs to WorldForge; it does not change DocForge2's product contract.

#1.16Current limits

  • Prompting and aliases improve repeatability but do not guarantee exact identity across independent generations.
  • RefControl improves facing and silhouette but can still drift on occluded details.
  • Final alpha extraction, cast-shadow cleanup, padding, pivots, and sprite metadata are not yet one approved export operation.
  • The gallery save/export action remains reserved; generated images stay in AssetForge until a reviewed asset is deliberately exported to the game.
  • Restoring prompt and seed does not by itself restore every historical runtime setting; inspect the retained generation record when exact reproduction matters.