Survey Relay — a second public API integration#
Survey Relay is an optional, separately compiled provider and consumer. It depends only on SimLOD and RimWorld Core. It does not reference the Expedition provider, Visitor Relay, framework source, or framework internals. It is a second first-party design, not evidence of independent third-party adoption.
Use matching 1.2 packages. Enable SimLOD → SimLOD Survey Relay, restart, build a survey relay under Misc, then choose Survey reports. Start a survey, close the window and let twelve game hours pass. All survey relays share one contact. Replacing the building reconnects that contact. Reports demonstrate persistent simulation; they award no resources/research and do not measure actual terrain.
The provider stores only elapsed|reports|points under provider ID simlod.survey, schema 1, model 1, API 1. Each 2,500 logical ticks produces one report with 1–5 deterministic observation points. After twelve reports, the payload and random state remain unchanged. The consumer automatically pauses completed records, removing their scheduled callbacks. Completed surveys remain in saved history when another starts; pausing does not free that storage. After loading an older save, one scan retires compatible completed survey history from scheduling.
The report window offers Pause survey and Resume survey and catch up for unfinished work. Pause preserves deadlines and report state; resume processes missed hours through later normal scheduler ticks. Repeated start requests also preserve an unfinished paused survey. Provider absence retains the flag; restoring the provider leaves paused work paused. The time policy gives the exact contract.
The consumer's world component stores only the current entity ID. Repeated start requests during an active survey reuse it. A completed survey can be followed by another with a new monotonic ID. The framework alone saves payload, logical time, revisions and random state. There are no native Pawn claims, operation receipts, native holders or materialization callbacks.
Validation rejects inconsistent counts, out-of-range scores and elapsed time outside the twelve-hour cap. The model tests compare hourly and shorter dispatch intervals, provider suspension and restoration, native-independent archive restoration, and completed-state stability. Native tests run the package without any example or other consumer assembly, then remove only its provider registration in an owned test copy, reload/save the suspended survey, restore registration, finish the survey and reload again. Removing the whole package would also remove the consumer's save root and is outside this restoration claim.
The native colony scenario combines both relays, native hauling/construction, drafting interruption, moving visitors, deconstruction/rebuilding and multiple real save/load boundaries. It never calls the framework's private queue pump or advances its tick method directly. See the release acceptance report for the selected results and evidence limits.
Version 1.2 uses the additive abstract pause/resume API. No native ownership adapter is required. The integration keeps domain progress and UI intent separate from retained-Pawn workflows. General commands, mutable cadence, completion events and history deletion remain outside this pilot.