Commit graph Aetheria/docs
Author SHA1 Message Date
Meta Vens
e7dd62d02a Record the loadout ruling in the migration target
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 22:51:48 +02:00
Meta Vens
bb3aae4998 Record Cut 10 landed and correct its negative greps
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 22:39:56 +02:00
Meta Vens
45f2a97862 Correct the CultCache migration target's status and save and legacy claims (Cut 10 fix)
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>
2026-09-14 22:29:58 +02:00
Meta Vens
453ee9fba2 Mark the CultCache migration target done (Cut 10)
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>
2026-09-14 22:09:39 +02:00
Meta Vens
5c5c3d5e19 Delete the old run, settings, layout and loadout authorities (Cut 10)
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>
2026-09-14 21:51:10 +02:00
Meta Vens
9e8b5ee2ea Make loadouts design-only and settle Cut 10's open rulings
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>
2026-09-14 21:31:47 +02:00
Meta Vens
e3af23fa5b Record Cut 9 landed and correct its dangling-ref pass rule
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>
2026-09-14 21:23:20 +02:00
Meta Vens
1ec29b132c Refresh Cuts 9 and 10 against the landed data model
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>
2026-09-14 21:00:46 +02:00
Meta Vens
20db3a93ba Rewrite the Cut 8a play smoke around how guided weapons lock
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>
2026-09-14 19:17:15 +02:00
Meta Vens
d3db1730ad Record the second Cut 8a Soul pass and its follow-ups
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 18:29:58 +02:00
Meta Vens
9a546a52c1 Record Cut 8a landed with CultMath 0.2.2 and 0.2.3
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 18:25:27 +02:00
Meta Vens
549adb7912 Split Cut 8 into CultMath swap and data model cutover
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>
2026-09-14 17:36:08 +02:00
Meta Vens
59bc575301 Record Cut 7 release state and the held npm publish
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 15:35:35 +02:00
Meta Vens
fcecdd0537 Mark Cuts 6 and 6b landed at CultLib merge 1b95dd6
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 15:12:58 +02:00
Meta Vens
5b80215150 Record the decision to skip CultMath Studio drawers for now
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 14:57:07 +02:00
Meta Vens
9c9c004d3e Record Cut 6b closed: DXIL NaN rules and commit-independent DLL
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 14:47:43 +02:00
Meta Vens
bb964ca2d4 Record the second Cut 6b Soul pass and the row-indexer ruling
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>
2026-09-14 14:15:31 +02:00
Meta Vens
3a8a37be6d Record the operator ruling deleting the composite heuristic
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 14:02:16 +02:00
Meta Vens
04ef8d3093 Record the second Cut 6 Soul pass and its operator decisions
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>
2026-09-14 14:00:10 +02:00
Meta Vens
c8771eba45 Record Cut 6b Soul findings and CultMath scope decisions
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>
2026-09-14 13:41:54 +02:00
Meta Vens
136a2209d3 Keep the Studio inspection model reusable by CultUI
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>
2026-09-14 13:19:48 +02:00
Meta Vens
17b848e087 Record Cut 6 Studio findings and decisions
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>
2026-09-14 13:16:35 +02:00
Meta Vens
6fa5cfe8ff Move the Studio click-through into Aetheria
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>
2026-09-14 13:11:18 +02:00
Meta Vens
47094d8900 Add Cut 6b: CultMath grows what Aetheria needs, HLSL as parity target
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>
2026-09-14 13:09:23 +02:00
Meta Vens
fc06a3fabd Adopt CultMath in Aetheria and drop Unity.Mathematics from Studio drawers
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>
2026-09-14 13:02:52 +02:00
Meta Vens
3e1d51d8db Mark Cut 5 landed with its re-pin follow-ups
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>
2026-09-14 12:45:59 +02:00
Meta Vens
65a88e2a10 Drop the TS re-entry guard in favor of the precise waiting rule
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>
2026-09-14 12:41:15 +02:00
Meta Vens
eae25a0aa8 Record the legacy global shim, re-entry rule, and Rust push_all shape
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>
2026-09-14 12:16:01 +02:00
Meta Vens
4fba9f6c35 Record sibling write-atomicity decisions for Cut 5
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>
2026-09-14 11:42:19 +02:00
Meta Vens
bd2ebfe7d2 Correct Cut 5's branch and Python command; record sibling parity gaps
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>
2026-09-14 00:45:34 +02:00
Meta Vens
ff858823cd Mark Cut 4 landed and Cut 5 in progress
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>
2026-09-14 00:23:16 +02:00
Meta Vens
7e093605a8 Stop citing the deleted generator as live code in the cut map
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>
2026-09-13 23:54:04 +02:00
Meta Vens
31620653e4 Require MessagePackObject on documents and keep reflection type names
Deleting the generator exposed that its codec was the only writer for documents
without [MessagePackObject], and that it named nested member types with a dot
where reflection uses a plus. Operator decisions: the registry requires
[MessagePackObject] on every [CultDocument], and nested type names keep the
reflection form once a store scan shows no persisted record uses the dot form.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 23:22:58 +02:00
Meta Vens
73b0f69d70 Delete the CultCache generator from the plan
Operator decision: with .cc canonically MessagePack, the source generator only
duplicated the reflective registry. Nothing reads its output without a
reflection fallback, no consumer builds AOT, and nothing measured a benefit,
while the duplication caused every Cut 4 defect. The registry stays the single
descriptor authority with all rejection rules. Delvehold and EveUnity re-pin
follow-ups are recorded.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 22:55:00 +02:00
Meta Vens
14bd2fd5a2 Record the override rule Cut 4 landed and two generator follow-ups
MessagePack reads the base declaration's attributes, so the generator and
registry reject overrides whose Key or IgnoreMember differ from the base
instead of using the most-derived declaration. The typed serialize helpers are
deleted. Global-namespace type naming and generic document types in generator
assemblies are recorded as follow-ups.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 22:07:30 +02:00
Meta Vens
5d89447be0 Update the cut map's status to Cuts 0-3 landed, Cut 4 in progress
The header still said nothing past Cut 0 was cut. Each cut's landing commit now
updates it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 22:00:50 +02:00
Meta Vens
a20ee76aa7 Record Cut 4's slot authority, generic resolver rule, and generator findings
Operator decisions: MessagePack's integer [Key] is the only slot authority and
the cache core references MessagePack.Annotations directly, since .cc is
canonically MessagePack; a generic document's resolvers come from its own
assembly. Also records the generator and registry disagreements Soul found with
old-versus-new consumer probes and the shape of the fixes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 21:58:37 +02:00
Meta Vens
ed6c2bc498 Record the sequenced read rule for latest-value consumers
Operator chose option A on all three: a public cache read returns a document
with the current sequence, and consumers subscribe before reading; OnUpdate and
CultNet's derived streams stay unprotected and documented as such; schema-alias
handles and removals are documented as not stale-protected.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 20:52:57 +02:00
Meta Vens
17b8a95cb0 Record sequence follow-ups the cache change exposed in CultNet and Mesh
The CultNet subscription server and database watches keep latest values from
changes that carry no sequence, and the Mesh mirrors' refresh and observe paths
race with applied changes. None came from the sequence change; each is named so
it is not mistaken for covered.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 20:44:22 +02:00
Meta Vens
550964be81 Make change order data instead of cache scheduling
Operator decision: the cache stamps each admitted change with a per-cache,
in-memory sequence and publishes on the caller's thread without scheduling
delivery. Latest-value consumers compare sequence numbers. Save-order delivery
with tickets is rejected: it turned the cache into a delivery scheduler,
deadlocked against the CultNet subscription server's lifecycle lock, and could
stall a cache on an interrupted wait.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 20:29:25 +02:00
Meta Vens
9a27814c3b Guarantee observer delivery in save order
Operator decision: changes reach observers in the order they were saved, across
threads, so latest-value consumers such as CultMesh's WatchRecord never apply a
stale record. Also records per-call publication on the caller's thread and that
only OnUpdate handler exceptions are rethrown to the caller.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 19:59:28 +02:00
Meta Vens
c145370e0f State that observers run outside the cache gate
Cut 3's second Soul pass found Watch observers and OnUpdate running while the
gate was held on re-pull and commit, which deadlocks a subscriber that waits on
a thread reading the cache, and a throwing handler that could leave a store
holding records the cache dropped. Observers now publish after the outermost
gate exit, and stores adopt their loaded view first. Also corrects the flush
wording, which described only single-file stores.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 19:01:47 +02:00
Meta Vens
b0cb0fa7dc Keep directory stores merging under an unconditional commit
Operator chose option A: a flush or unconditional commit on a directory store
lands its changed pages onto the current manifest, so other writers' records
survive, while a single-file store stays last-writer-wins. Also records that an
attached store shares its cache's gate, which is how Cut 3 fixed the lock order.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 18:55:27 +02:00
Meta Vens
edb6703d3b Record Cut 3's concurrency and commit decisions
Operator chose option A on all three questions Soul raised: one lock order
(cache, then store) with store I/O blocking that cache's readers; an
unconditional Commit is last-writer-wins like a flush; a store that fails to
hydrate on open throws and is never overwritten. Also records one key per
store, load-only OnUpdate, missing-file dirtiness, the late-route fixture,
TryGet kept for AquaSynth, the scoped SemaphoreSlim check, and the corrected
size target for CultCache.cs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 18:32:58 +02:00
Meta Vens
d311901dbc Decide store overwrite for Cut 3: the consumer removes and rewrites
Operator chose option A. Opening hydrates; a consumer that wants a fresh store
removes the records it does not keep, upserts, and flushes, and the atomic
snapshot replace does the rest. No CultLib API is added and PullOnOpen goes in
Cut 3. The two AquaSynth single-document writers adopt that form; the
File.Exists-style setters in AquaSynth and Mimir just drop the property.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 17:25:30 +02:00
Meta Vens
e4a9cb4113 Record Cut 2's real behavior changes and restore durability coverage in Cut 3
Cut 2 was not purely subtraction: load-time admission failures now propagate,
a store attached to a second cache replaces the first cache's callbacks, a
missing manifest empties the store on the next flush, and a v1 snapshot opened
as a directory store throws. The code still keeps atomic replace, manifest
ordering, content-addressed pages and both leases, but the tests for them left
with the stage probes. Cut 3 now restores them with real file locks, makes load
all-or-nothing, refuses shared stores, settles the legacy catalog resolver, and
keeps CultNet from publishing before a batch commits. The managed document is
recorded as parked with SoA.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 17:13:09 +02:00
Meta Vens
8a889ee494 Amend Cut 2 from Hands' findings; open the overwrite question for Cut 3
OpenAsync keeps pulling until attach hydrates in Cut 3. CultCache.FlushAsync
keeps its dead soft parameter for Studio's reflection until Cut 6. Loaded and
Unloaded are protected internal; PullSelected goes with the directory store;
a missing directory manifest is an empty store; doc comments go from all eight
files. PullOnOpen has AquaSynth and Mimir setters that mean overwrite without
loading, so Cut 3 must decide who owns replacing a store before deleting it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 16:34:02 +02:00
Meta Vens
1643027851 Amend the cut map from Cut 1's Soul review
Cut 3 rewrites the Cut 1 fixture that attaches a second untyped store and
retires the reflective IsGlobal hack. Cut 4 makes the generator discover
inherited members like the reflective registry, so derived documents hash one
schema id in both builds, and requires [Key] on persisted document members.
Corrects sibling attach wording, the C# commit status, and a deleted doc target.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 16:11:50 +02:00
Meta Vens
040e50b249 Finish the compare-exchange fold-in; mark the race probe failed
The two-process race probe (P7) spawned recursively and produced no trustworthy
result, so conditional commit's lock behavior is proven by Cut 3's tests, which
now require guarded child launches (explicit host, role chosen by environment,
fail if a child would spawn) or in-process concurrent file handles. The fork bomb
is recorded among the risks. Compare-exchange leaves the follow-ups.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 15:52:17 +02:00
Meta Vens
365e8cd781 Fold compare-exchange into the atomic commit cut (in progress)
Saved mid-pass after a workstation crash: per-entry Expect and ExpectUnchanged
on the one-store batch, TryCommit, a lock sidecar for the single-file store,
the last-writer-wins flush contract, the race tests and probe P7, and full
CultLib\packages paths for sibling runtimes. The Imagination pass is finishing
the rest.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 15:37:25 +02:00