Expedition contract — schema 1, model 1#
This optional provider defaults to three framework-generated NPCs and a finite abstract supply reserve. Its model accepts cohorts of 1–32 for bounded API use and measurement. It uses only the public SimLOD API. The native fixture alone may use internal fault injection; that is not an example integration capability.
State and conservation#
The version-1 payload stores: original crew size; uncreated, deployed, retained, dead and transferred counts; initial supply credit, remaining credit, consumed credit and unmet demand; and the last accounted game tick. Counts sum to the original crew size. Supplies use integer person-ticks (60,000 credits = one person-day), avoiding floating-point drift. Remaining + consumed = initial; consumption + unmet = modeled demand.
Uncreated and retained members consume one supply credit per elapsed game tick. Deployed/reserved members consume no abstract credit; spawned members use native map systems. Native inventory is separate from this reserve; the example never creates food Things from credits. Retained Pawns receive no automatic Pawn ticks: needs, health and biological aging are not actively simulated by the holder. Chronological age and other time-derived native properties still follow the global clock. Starvation is recorded as unmet demand and has no invented health effects.
Before changing a member's representation, the provider accounts its old population through the request's effective tick. It then changes counts exactly once. Fixed steps account only the remaining interval. This requires a generic immutable transition context and a provider callback for rematerialization; the 0.2 API lacked both. Existing providers retain their legacy callbacks and unchanged default rematerialization behavior.
Transitions#
New materialization moves uncreated members to deployed and creates pinned native Pawns. Return moves deployed members to retained without aggregating or destroying them. Rematerialization moves retained members back to deployed and reuses their native identities. Reconciled deaths/transfers move the member from its previous representation to its terminal category. Names, native relations, quest tags, inventory and equipment remain native state.
An operation's effective time is its original request tick. Reservations and proposed return state use that time across retries, provider removal and save/load. Recovery does not replan against a later time or changed native outcomes. The entity remains frozen while faulted; after completion scheduled catch-up uses the already saved accounting cursor. This is a declared abstract accounting convention, not atomic rollback of native side effects.
Interrupted-plan settlement#
The provider opts into native settlement. It reads the locked payload and converts each outcome from its declared accounting representation to the observed disposition at the settlement preparation tick. Cancelled untouched claims return to Uncreated; living captured Pawns remain Deployed or Retained; verified losses enter Dead or Transferred. Ordinary generated individuals are never aggregated. Preparation saves the proposed accounting without applying it; commit applies it once after native preflight, and repeated keys replay the journal.
This explicit settlement time differs from the original operation time. The old representation remains the accounting basis until preparation; there is no retroactive refund for an abandoned plan. A replacement preparation gets its own time, and commit retries keep the existing one. Scheduled deadlines already covered by the accounting cursor do not charge again, including a long interruption that leaves several overdue deadlines.
Exit gates#
- Multiple simulated days and repeated deployment/return cycles produce the same canonical accounting as an independent piecewise demand calculation, including mid-step transitions and delayed recovery.
- Actual Scribe saves preserve native identity, possessions and references with the provider absent and restored.
- Occupied cells, carried pawns, changed ownership, incompatible provider versions and changed outcomes during a partially applied operation refuse unsafe progress without duplication or forced ownership transfer.
- Public diagnostics identify member owners, completed items, remaining items and specific recovery blockers. The developer UI calls the same guarded recovery API.
- Native-runtime measurements report scheduler, transition, save and managed-memory costs with raw samples and explicit experimental limits.
Core-only, framework-created NPCs, existing maps and unticked native retention remain the supported scope. This separate public-API implementation is a second native provider exercise; it is not third-party adoption or compatibility certification.