Salvageist: an owner-led delivery pilot
September 19–25, 2026. Retrospective recorded September 25 against Salvageist
2dedbbaeef6ee399d8617d43bc1d0a1b950c8956, with two protected unstaged paths.
The study record binds source, scope and limits.
What this case is
Salvageist is a single-army survival game: steer a swarm of machines, choose a patrol to fight, defeat it, then hold reclamation to recruit its wrecks while the army is unable to move or attack. The owner supplied the premise, RCTN reference, tactical adaptation and repeated play feedback. The reference game remained a separate read-only study; its code and assets were not imported.
The owner proposed treating this as the first substantial post-Circussy pilot. Here that means this owner's continuing game-delivery pilot with the 0.7 workflow, not that Lanternworks, Followspot or the other recorded trials did not happen. Their negative findings remain intact. The active task exposed installed STAGE 0.7.0; the exact skill snapshot used for every earlier turn was not captured, so the whole development history is not a controlled 0.7 treatment.
The current game uses Unity 6000.6.3f1, authored tuning, concrete MonoBehaviour owners, native UI Toolkit, a shared numeric crowd kernel, a Burst contact job, and a browser release. It does not adopt a STAGE project-map manifest or a universal runtime framework. Existing repository guidance and project-native commands perform those jobs.
This is a same-director retrospective operational trial, not independent adoption or a prospective productivity experiment. Questions were selected for this audit after development. No new game playtest or performance run was performed merely to produce the retrospective.
Questions and observations
Did the method preserve the intended game and authored state?
The owner repeatedly corrected movement, readability, sound, balance and pacing
by playing the actual game. Later feedback described it as fun and worth
continuing. These are useful informal product signals, not a revision-bound
four-dimension acceptance test. The structured experience gate remains
not_tested; that means no formal study verdict, not that the owner never played.
Concrete protected decisions survived: endless low-micro control, local hold-to-reclaim, intentional pulse radii, updated specialist health, no music ducking, and a frozen legacy Pages deployment. Native UI replaced OneJS when the owner asked; data orientation did not imply an unapproved ECS rewrite.
The initial prototype nevertheless felt unlike its reference. Later player reports found repeated clearance defects and a first-kill browser hitch after large test suites passed. STAGE did not prevent these escapes. Human play and narrower reproductions remained essential inputs, rather than final approval ceremony after the agent's tests.
Did better architecture actually improve performance?
Not initially. The shared-core migration produced a useful no-engine execution seam but regressed the native 630-body workload: motor mean rose from 9.62 ms in one old-build recheck to 12.08–12.59 ms in three matched-input new runs. The report retained the regression rather than calling data orientation an optimization.
Subsequent release-Web work measured the affected platform. Bounded neighbor queries, preserved numerical behavior and generated-code inspection reduced capacity motor mean from 35.13 to 27.23 ms (medians of three runs); wall-frame p95 fell from 71 to 59 ms. An earlier candidate had regressed and remained in the evidence. This was a measured hot-path win, not evidence that ECS was necessary.
The later combined Unity 6.6 / Release variant / Burst upgrade reduced capacity motor mean from 27.58 to 6.54 ms in its separate matched 2560×1440 cohort. Receipts confirmed compiled contact execution and five worker threads. It is incorrect to attribute that entire gain to Burst alone, multiply it by the prior percentage, or generalize one Mac/Chromium cohort to mobile devices.
The first-kill report exposed another boundary: warmed steady-state benchmarks could not detect cold shader setup. A cold replay attributed much of the hitch to first-use graphics program compilation. Targeted Unity shader preparation reduced the first-death event from 83–93 to 19–22 ms locally; rechecking the old build afterward still produced 101 ms. Startup pays the work instead. Direct browser-side duplicate GLSL compilation failed and was not shipped.
These observations support measuring the real claim, not a general claim that adopting STAGE or data-oriented architecture makes software faster.
Did the workflow become easier to operate?
The owner complained about repeated title screens, recreated cameras, restarting music and the growing test workload. The earned solution was a designer Scenario Lab plus a shared direct-boot batch, not another detached evidence viewer. Scenario resets reuse the session/camera/music voice; numeric tests run without Unity. Genuine menu, audio and fresh-scene integration tests remain separate.
The test loop itself created a nuisance: rapid audible effects crackled through the owner's speakers even when scenario music was muted. The repair muted final Editor test output across the runner lifecycle while retaining real AudioSources and their assertions, then restored the prior mute setting. Skipping sound tests or lowering the authored mix would have hidden the problem. Input focus and teardown completion also needed explicit tests.
This demonstrates functioning operations. Tool-call counts, human active time, time to fair inspection and STAGE-specific maintenance minutes were not collected consistently. Reduced repetitive setup is observable in the new route, but a numerical attention/productivity gain is not established.
Could a new agent recover the project without this conversation?
Before this audit, architecture and release reports were substantial but the entry point prioritized the already-submitted assessment. The “current” design page still listed old health fractions, stationary blast corpses and the old late-game arrival multiplier. A telemetry section presented the previous engine as current. The hosting guide's pause example named an old deployment bundle. Many raw evidence paths existed only in ignored local directories.
The authorized documentation correction created a short recovery entry, repaired those contradictions from source, retained historical records as dated evidence, and explained local-only logs/builds, rollback coupling, known limitations and protected state. It did not invent a map, erase failed receipts or rewrite old measurements to match today's implementation. A linked document is not necessarily accurate; a valid path is not necessarily available on another machine.
No independent fresh-agent takeover was run. The audit supports a better reading path, not a guarantee of zero handoff problems or credential/tool portability.
Bounded change ledger
This uses the existing 8–12-change observation format retrospectively. For every row, human active minutes, time to fair inspection and STAGE maintenance minutes are unknown. Commit times are not substitutes. Decisions below are engineering outcomes, not retrospective human acceptance scores.
| Source checkpoint | Outcome / useful rejection | Rework or escaped boundary |
|---|---|---|
18d8d4d shared core / Scenario Lab | Shared production math and direct-boot/headless routes delivered | Native capacity regression explicitly retained; not an optimization result |
3db151e test audio / wreck weight | Output-only test mute and weight/falloff rules delivered | Music-only muting had not covered combat voices or teardown tails |
4577502 / a8a92a2 Web hot paths | Repeated release-Web gain, no quality/collision-budget reduction | First candidate regressed; scalar shortcut failed Mono equivalence; both retained |
d2350bb browser clarity | Spatial lighting batches and bounded adaptive resolution | Resolution alone cannot repair a CPU-bound crowd; visual judgment stays human |
28c8207 / 4b8e58a telemetry | Real error, source-map, feedback and frame-context delivery verified | SDK presence/flush alone insufficient; sampled windows are not fleet-wide raw-frame p95 |
c0a7453 / 6addc70 Unity upgrade | Actual Web Burst execution and isolated hosting verified | Package/internal-API, cached fallback and mismatched-canvas failures preserved |
b065d5c / 365ade2 UI | Production menu/cue polish plus fresh browser smoke | Editor tests did not certify browser arrow-key focus; warning remained disclosed |
63c2d19 reconstruction | Living occupancy and stable escape goals removed tested stalls | Earlier edge-only repair had escaped a filled-pocket/reversal case |
9cbf1bb / 2dedbba first combat / release | Cold-event A/B, ordinary export, verified custom-domain deployment | Warmed benchmark omitted first-use setup; approximately 50 ms final-patrol work remained |
What changes in STAGE from this pilot
Applied as conditional guidance, not new Safety Kernel obligations:
- Continuity: compare current claims with serialized data and code, label superseded release/engine instructions, and disclose ignored/local evidence. Keep product choices canonical instead of copying a whole conversation.
- Unity iteration: select pure rules, direct-boot scenarios, fresh-scene lifecycle tests and input/menu tests by claim. Keep one-call batching and a cleanup-complete receipt; protect and restore device output/preferences.
- Performance: distinguish cold events from steady state, fix comparable workload/input/resolution/clock, retain rejected candidates, and verify the optimized backend actually executed. Data layout alone is not a win.
Next opportunities, proposed, not implemented or promised:
- Record attention/inspection/rework fields prospectively for the next few real changes in their existing reports. Do not add another dashboard or quota.
- Exercise one real future task from a fresh agent using only the recovery path; retain misunderstandings and additional context requests as evidence.
- If docs-only work repeatedly pays for engine tests, propose an explicit documentation gate to the project owner. Do not quietly weaken the current project policy or call previous runtime receipts fresh.
- Keep a compact durable evidence excerpt only when a remote handoff or rollback needs it. Do not commit every large recording, log or paid asset to STAGE.
No plugin version, owner-readiness category, 1.0 decision or public release is promoted by this retrospective. The learnings change repository guidance; an already-open task still uses its installed skill snapshot.
Evidence and limits
The private Salvageist source checkpoint
contains the cited reports under docs/: data-oriented-workflow.md,
development.md, web-performance-2026-09-25.md, web-rendering.md, telemetry.md,
unity-6-6-web-jobs.md, ui-readability-polish.md,
reconstruction-clearance-fix.md, first-combat-stutter.md and web-release.md.
The structured record links the principal reports at that immutable revision.
Those are private source locators, not assertions that every local commit has
been pushed or that the reader has access; this audit does not publish game source.
Raw Logs/ and Builds/ receipts were local inspection sources, not copied into
this repository; third-party licensed code, credentials and full chat are excluded.
The last release's mechanical gate reported 238 Edit Mode, 97 Play Mode and 32 numeric executions; live smoke confirmed the new build and active Burst/Jobs. Those counts describe that revision and do not grade design, fun, complete test coverage or all-browser performance. Current unresolved boundaries include cold startup/generation work, long-session memory, cross-device performance, some browser keyboard-focus evidence and subjective audio/visual acceptance.