Imagination pass. Cut A deletes the re-mint path and TradeMenuDebug; Cut B
moves quality and product onto lots in a run-store ledger with a placeholder
origin and derived branding; Cut C removes ItemData.Manufacturer and rewrites
the catalog. N1 (Produced.Station type) defaults to a run-scoped integer id.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Imagination pass. Body map of items, mint sites, stations, persistence and
quality readers; identity/lifecycle/authority table; schema-cut forks F0, F1,
F4 and future forks F2-F10.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The click-through passed with the AmmoType refs repointed and the schematic
underlay fixed. It also surfaced that the cutover dropped the Database Tools'
record grouping and drag-and-drop without recording them; CultLib's
studio-grouping cut map owns restoring them.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The cut map and postmortem read as if a cultcache-ts publish were blocked
and imminent. The operator parked registry publication for a later pass
(CultLib QUIC map, Q5 C, 2026-09-16); no token exists and none is planned.
Same facts, honest framing.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Covers the timeline, the structural delta against the ledger (including the
CultLib core size miss), the defects Soul caught that green tests passed
(29 of 32 passes found real defects), operator corrections with the context
each one lacked, incidents, and the pipeline changes carried into the Eureka
skill. The evidence comes from commits, the cut map and the session
transcript.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The Loadouts section no longer says the editor opens the catalog writable. It
describes the read-only process cache, the short-lived capture cache, the
refusals for a missing catalog and a same name under another key, the console's
character refusal, and the need to reopen CultCache Studio after capturing,
since a Studio save overwrites captured presets.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The operator redefined loadouts as ship presets (variants) for spawners,
hidden from players in the MVP. The header and Q7 route now describe the
live design, and the older player-store Cut 10 text is marked as history.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The target's Loadouts section now describes catalog presets. They are
authored in Studio or captured by the editor command, and spawners
materialize them under availability, all-or-nothing, with no charge. It
keeps the weapon-group rules and records hardpoint-configuration variants as
future direction. The README no longer lists loadouts as player state.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Status is landed and awaiting the operator's play smoke and Studio
click-through. Quit and zone transition share the run save commit and death
uses RunSave.Clear. The importer was deleted in Cut 10, so the target states
that no legacy reader exists.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
docs/cultcache-migration-target.md's status names the Aetheria range: Cut 8a
(4f4beb0f) through Cut 10 (4a545469 to this commit) on
codex/cultcache-cutover. The cut map's status header is left for the root
pass that records Cuts 9 and 10.
Builds: docs only.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The deletion line lands before RunSave, as the spec orders. Deleted, not
demoted:
- PlayerSettings.SavedRun (Key 1 stays unclaimed) and the SavedGame
constructor that upserted a fresh SavedZone per zone on every save.
- ActionGameManager: the PlayerSettings.msgpack getter, file path and
writer; the .loadout format (_loadoutPath, Loadouts, SaveLoadout and its
default-options serializer, the commented loader); OnApplicationQuit and
SaveState; SaveZone, which had no caller.
- MainMenu's SavedRun Continue branch and both `SavedRun = null` writes.
- InventoryPanel's Save Loadout and Restore Loadout bodies.
- InputDisplayLayout's KeyboardLayouts file reader, ParseJson,
AssociateInputKeys, SaveLayout and the usings they alone needed.
- AetherDb's Cut 9 importer (Import.cs, legacy-census, import).
- The three-gates note on loading writes; Cut 3 made loading non-writing.
- .gitignore ignores GameData/run.cc and GameData/player.cc instead of
PlayerSettings.msgpack.
DOES NOT BUILD in Unity: ActionGameManager, MainMenu and InputDisplayLayout
still reference the deleted members until the next commit wires RunSave,
the settings getter and the catalog layout read. Headless builds.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Operator rulings:
- A loadout stores item designs only, with no manufacturer or product.
- Restoring one picks the first available product of each design under the
generation rule, charges the sum of design prices, and is all or nothing.
Cut 10 starts by pinning the CultLib 1.0.59 correction release. It then
generalizes clear-boss-hulls into one dangling-ref command that clears the
two DemandProfile refs, leaving the three AmmoType refs for the Studio
click-through.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Soul decoded the legacy file on its own and confirmed the six dangling refs
were authored breakage: records deleted before 285b5771. The spec's rule,
which required them to equal factions' DANGLING rows, was wrong.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Cut 10 now owns every Cut 8b Soul finding:
- all three stores attach once for the process;
- a run commit writes stable zone keys and drops stale ones in the same batch;
- PlayerSettings.SavedRun is deleted as a second run-root owner;
- each lifecycle global has one named creator;
- the remaining non-CultCache persistence is deleted, each with a negative grep.
Operator rulings:
- InputLayout moves to the catalog.
- The local PlayerSettings.msgpack is discarded.
- Loadouts are kept as portable blueprint documents in the player store, a
design ref plus an optional product ref per hull cell, materialized against
current galaxy contents.
Open: Q10-3, the materialization rules.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Guided weapons lock only onto hostiles, which need a no-fly zone to aggro,
so that step becomes optional, and the smoke runs at a commit before 8b
stops runtime play.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Imagination refreshed Cut 8 against Aetheria 59bc5753 and CultLib main, with
probe builds: 8a swaps Unity.Mathematics for CultMath on the legacy cache
(76 Unity conversion errors listed per file, MathFormatters kept), 8b cuts the
data model over. Operator rulings: CultMath gaps filled in CultMath 0.2.1
(f060536), which 8a pins; double overloads keep double precision; the
Temperature and SchematicShape drawers are ported into Aetheria's Studio
drawers.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Soul compiled step with dxc and found NaN gives 1, so the docs-based
change is reverted to the compiler's behaviour. The shader mirror test
only proved compilation and grows numeric comparison of every mirrored
function. The operator keeps the ref row indexer without an analyzer and
documents that writes through readonly, in, and property receivers land on
a copy.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Soul verified the Studio model rewrite and found a saveable partial edit
after a throwing drawer, edit decisions left in IMGUI, a comparer mismatch
on dictionary keys, and three model tests that do not pin their rules. The
operator chose: delete FlushAsync(soft) and edit Mimir's call, and retry a
lockless directory read on manifest mismatch. By-name reflection in CultNet
and CultMesh becomes a follow-up. The composite heuristic waits on the
operator.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
HLSL source did not yet compile as C#. Operator chose A throughout: generate the
full swizzle set and mixed constructors with a test over CultMath's own shader
bodies, fix cheap intrinsic semantics now and defer larger matrix features, add
Studio drawers for the new types after merge, and compile-check the shader
mirror with dxc.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Operator goal: CultUI, descended from Aetheria's PropertiesPanel, should be able
to recreate the CultCache Studio at runtime. The inspection logic moves into an
engine-free model in CultLib core and the editor Studio lowers it; the runtime
lowering is a follow-up.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Soul found foldouts dirtying records, fragile drawers, and type-only drawer
claims that cannot express Aetheria's inspector attributes. Operator decisions:
inspector attributes move into CultLib core, drawers claim by attribute or type
with a default fallback, opening a directory store creates no files, and game
data stores never live under a Unity Assets folder. Cut 8 lists CultMath in the
Unity manifest directly.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Operator decision: the manual Studio check runs in Aetheria against the tagged
package once Cuts 7 and 8 land. CultLib's demo Unity project, which has no
committed manifest and a UI assembly that does not compile, is recorded as a
follow-up outside the migration.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The parity audit showed CultMath is not a drop-in for Aetheria's
Unity.Mathematics use. Operator decisions: CultMath targets HLSL source
compatibility, so components and swizzles become writable; CultMath keeps its
own behavior where it differs from Unity.Mathematics; only what Aetheria uses is
added; the Unity bridge lives in CultMath's Unity package. Cut 8 swaps Aetheria.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Operator decision: Aetheria moves onto CultMath as the best workout GameCult's
math library can get, with gaps filled in CultMath itself. The map no longer
rejects the switch, and Cut 6's Studio drawers target CultMath types only.
Unity.Mathematics stays permitted for tooling supporting a Unity game; CultLib
uses CultMath.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The sibling runtimes now hold one home store per type, refuse moves and
non-home loads, validate before writing, and serialize mutations. TS
registration and attach methods became promise-returning and Rust attach
returns a Result, which consumers adopt when they re-pin. Cut 6 is in progress.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The AsyncLocalStorage guard refused ordinary write-backs from store change
handlers and still missed the real deadlock. The contract instead says a store
call must not wait for a write to its own cache to finish. Legacy global
retirement stays two-step and a crash leaving both records stays loud.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Operator decisions after Soul's check of the sibling locks: a legacy-key global
loads as a read-only compatibility shim that the first write replaces under
__global__ and removes; re-entrant mutation is forbidden in TS and Python; a
Rust store keeps receiving its full view and the default push_all fails closed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Soul found the TS and Python caches writing stores before validating, TS open
to async interleaving, Python accepting globals under any key, and Rust's
load_soa clearing before it could fail. Operator chose A throughout: a per-cache
TS queue for mutations, globals only under __global__, delete Rust's uncalled
load_envelope and make load_soa atomic, and leave error wording alone.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Cut 5 landed on the routing branch and the Python suite runs under unittest.
Soul found the sibling runtimes let a record's home move and loaded records from
the wrong store, and TS and Rust refused in-memory writes; those are being
brought to the C# reference.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Cut 4 ended at CultLib 5bd4e4e with the generator deleted and the registry
persisting exactly what MessagePack round-trips. The five Eve.Surface documents
change schema ids because constructor-filled get-only members now enter the
catalog; no store on disk holds them.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Soul's check of the generator deletion found the map's Q2 and Q4 evidence still
describing generated metadata and serializers as current. Those lines now say
the registry owns type names and all payloads go through MessagePackSerializer,
and Delvehold's re-pin follow-up names its generator references and its
preference for a stale CultLib worktree.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>