The pinned upstream checkout remains
cbf9206b9a823f0911cd9be0217104a49d72380b. The SDK build now applies the reviewed
tools/build/patches/modapi-model-load-lifetime.patch to a verified private
source copy. The patch extends an original model's reference lifetime across
FinishBackgroundLoad and its texture override, using the pinned SDK
ModelPtr and its existing original Release method. It changes no game
binary or native method signature.
| Identity | SHA-256 |
|---|---|
| Reviewed patch | 7ca2bce9880f1f6a8423f4bb28c73e5c4cf8ea10a4700cf9cf1e3edbb4479b44 |
TextureOverride.cpp, pinned source before patch |
84e9e003084fad4a18a1082367c88b97b84ccc066eb6c3acbbf5487f87ed3e8d |
TextureOverride.cpp, reviewed source after patch |
836ef21615db1f20f584a773242a491e9dc34571b7560eecfdd5bc2c8c21718f |
First patched Release SporeModAPI.dll build |
a7b287cc67d66a8e2bc25c6f6c35dbfc5c5ae15384fadff83bed7151231af6c7 |
| First patched Release SDK PDB | f0953abf293f978ccba0a916eb33e8f5182d7a699b1aeb41030e5fbf590107b9 |
The BUILD/HOST checks in testing.md establish source provenance and successful compilation. They do not establish native load compatibility. A rebuilt guarded host fingerprints the changed SDK; the original-game regression must use that matching payload. Historical native SDK qualifications below describe their recorded unpatched configurations.
Historical (accounts deleted 2026-09-30 at the user's request): two real standard accounts, SporeMP-M04-01/02, had distinct OS profiles and hash-checked post-M03 Creature fixtures. Both pass open-only write/delete-denial probes against personal/game and peer profile/save/creation paths. The native host enforces one game per actual SID across sessions and rejects unqueryable process identity before injection. Only workers append the statically identified original -multipleInstances switch; no game binary is patched.
The original concurrent processes execute native IPC actions in distinct save/creation paths. Final 0.0.14 acceptance includes overlapping original save calls, successful own-profile checkpoint writes, clean exits and separately sealed backups. Concurrent ETW reports zero lost events and no resolved personal/peer-profile opens or mutations. Some file/registry correlations remain unresolved; shared NVIDIA driver writes occurred. Normal Play changed ten personal files with observed successful player mutations for every changed path; those changes were retained and backed up. The later concurrent worker phase leaves all 29 personal baseline files unchanged. These observations qualify the bounded paths exercised, not every shared Windows/configuration path. See M04 acceptance.
The separate, never-activated desktop remains a renderer [1001] failure. Current-desktop unminimized windows work; losing focus does not prevent the tested actions. Minimization stops app/AI progress; restoration before the 30-second update deadline resumes it. Native Options/Save dialogs pause AI while app heartbeats continue. Locked/disconnected/service/RDP/VM operation is NOT RUN. Developer accounts are not prerequisites for normal Play. See worker limits and checkpoint reproduction and current native evidence. A later approximately 47-second native AI plateau with continuing app updates was correctly reported as simulation_stalled; its cause is unproven and indefinite autonomous progression remains unqualified.
| Item | Observed/pinned value |
|---|---|
| Installation | GOG SPORE Collection, C:\Games\SPORE |
| Candidate executable | SporebinEP1\SporeApp.exe, file/product version 3.1.0.29 |
| Architecture | PE32 / IMAGE_FILE_MACHINE_I386 (0x014c), executable rather than DLL |
| Size | 24,895,536 bytes |
| SHA-256 | dc04aee5a3debc3f1ad4c1a937460e99a29b9bd3bc285008be83615dd5e59a37 |
| SDK commit | cbf9206b9a823f0911cd9be0217104a49d72380b |
| SDK binding family | EXECUTABLE_TYPE=2, March2017; the upstream combined selector lists this file size |
| Local SDK version | 2.5.0 development build (SDK_BUILD_VER=0), not a published release number |
| Native compatibility | M01 native lifecycle qualified for this exact local configuration; final player flow confirmed by user |
| Initial content | Exact observed trees for Data, DataEP1, bp1content and SporebinEP1 |
| Clean standard-content equivalence | NOT VERIFIED; a local inventory is not an official content certification |
The base-game executable is 1.3.0.29, 20,454,960 bytes, SHA-256 25d42a7a5c4d438fb155233230f57d29e2849bfdff5c889a5d0847f0469d914e. It is not the bridge target. GA is the runtime candidate supporting the campaign integration, not a scope change to adventure-only multiplayer.
../config/compatibility.candidate.json records exact PE fields and immutable content hashes. Inspection is read-only. Validation rejects different executable bytes (including same-size changes), x64 images, DLLs, malformed/truncated PE headers, missing roots and added/changed/removed immutable content. Reparse points are refused. The pinned SDK's exact regular SporebinEP1/spore_log.txt is its documented runtime log; it is permitted only after safe-path validation and separately fingerprinted under runtime_artifacts. No other unknown file or directory receives an exemption. This narrowly scoped rule was required after actual normal Play generated that log and the next worker was correctly rejected before launch. No candidate field grants launch permission.
The upstream SDK binds native addresses during DLL load. The implemented SporeMP.NativeHost validates compiled game/content/payload fingerprints before creating or injecting a game. It rejects reparse paths and unknown content entries, holds file read locks, starts the original process suspended, configures the pinned injector and resumes only after success. A late bridge check is secondary.
The loader source is pinned at 26adca9a2578b5bb32ba2eac90d96bd9ac7d48a9. This configuration loads the current SDK core and project bridge; legacy mods are not included. Three clean native runs and six rejection fixtures are recorded in ../evidence/2026-09-08-m01-native/SESSION.md.
Normal Play uses --play under the player's normal Windows account and existing save paths. There is no separate-account or backup gate and no profile redirection, following the user's explicit correction. Project DLLs stay in local/launcher/native-payload rather than being installed into SPORE.
Launcher 0.1.3 optionally supplies an allowlisted display mode/resolution pair. The host appends only the original readme's documented -w/-f and -r:<width>x<height> options after validating their values. All executable/content/payload guards still precede process creation. The default supplies no override. Source provenance, physical display enumeration and the pending native display acceptance are in launcher.md; no compatibility claim is extended to another executable or new SDK binding.
Optional developer --probe/--launch modes retain the owned SporeMP-M01 account, SID/known-folder checks and protected-path OS denial probes. Earlier environment-variable-only isolation failed; real isolated native runs subsequently reported save/creation/temp paths under C:\Users\SporeMP-M01.
Native ETW traces include actual save/config writes in that test profile and shared NVIDIA driver writes in ProgramData. Some correlations remain unresolved. Complete personal-file manifests and OS denial probes independently establish preservation during those earlier tests. Normal Play intentionally uses normal saves.
The old Python preflight starts no process and does not govern the implemented player action. Other executable/content configurations and official clean-content equivalence remain unqualified.
Bridge 0.0.2's M02 baseline is VERIFIED for the recorded original Creature paths, separate from M01's qualification. The 2026-09-09 restored-fixture pair supplies actual reference/observed game video, original jump/landing traces, scene exit/reload, rendered read-only diagnostics, measured presentation/CPU samples and clean exits without trace loss or foreign callbacks. Complete lifetime paths, other stages and gameplay families remain unqualified. The developer --observe host mode retains the same compiled file/content/payload guard and disposable-account identity checks as --launch, then sets SPOREMP_M02_TRACE=observe in the child environment. --play and reference --launch explicitly clear that variable, even if inherited from the parent. The isolated developer wrapper exposes this as -ObservationMode Observe; default is Off.
Neither building, CTest, nor the log analyzer launches SPORE or installs a DLL into the game directory. sporemp_trace is registered only inside the opted-in original process and only reads state/counters. New source/ABI provenance and pending runtime limits are in m02-binding-registry.md; the fixture comparison is in ../tests/engine/M02.md. The user's normal account/saves remain the normal Play flow.