Commit graph Aetheria/docs
Author SHA1 Message Date
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
Meta Vens
80018f9730 Reshape the CultCache cut map: parked SoA, fixed routes, owned generator, atomic commit
Second and third Imagination passes, probe-backed. Globals get lifecycle owners
and the cache invents none; routing admits a record's home once and refuses
later routes over admitted types; mirrors go in every runtime; subtraction is
separated from behavior. SoA is parked at a tag with its intent recorded.
The MessagePack generator is contained in CultLib's own package reference.
Atomic multi-record commit stays as an explicit one-store batch replacing the
ambient transaction machinery. AetheriaEve is removed from all evidence.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 14:28:26 +02:00
Meta Vens
e0fe049d78 Stop pointing the parked map at AetheriaEve as a living rebuild
AetheriaEve preserves the rolled-back rebuild as a specimen, not as direction
or precedent.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 13:48:46 +02:00
Meta Vens
c3377f113a Drop AetheriaEve from the migration's consumers
AetheriaEve is preserved as a specimen and constrains nothing. The consumers
that must survive the CultLib changes are the ones that build against it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 13:47:46 +02:00
Meta Vens
82c1e72e2b Map the CultCache migration cut
The Imagination pass over cultcache-migration-target.md: answers to its eight
questions with evidence from CultLib and its canonical packages, the CultLib
store-routing authority map, the wire-parity plan, ten sequenced cuts with
failing-first tests, negative checks and build budgets, a subtraction ledger,
and rejected paths. Two corrections on review: Cut 0 is already done
(6bd3e176, 560779a4), and Cut 7 adds an LFS rule for .cc before committing
the catalog.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 23:40:17 +02:00
Meta Vens
eeffcadb89 Name only CultLib's packages as canonical parity runtimes
The neighboring cultcache-rs, cultcache-py, cultnet-rs and cultnet-ts
repositories are defunct. Wire parity is held against CultLib\packages
(cultcache, cultnet and cultmesh runtimes) with C# as the reference.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 23:29:56 +02:00
Meta Vens
68fbce4a8a Define the CultCache migration target
Aetheria moves onto modern CultCache from CultLib, cache only. States the end
state for Aetheria and CultLib, the wire-parity and foundation invariants, the
probe evidence, and the questions the Imagination pass must answer before any
cut. Points the parked perfect-machine map at it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 23:12:42 +02:00
Meta Vens
285b57713f Clear dangling boss hull links, and stop the tool writing on read
Eight factions pointed at one boss hull GUID that no longer resolves,
shared wreckage from the database loss. PlaceFactionsMain gives a boss zone
to every faction carrying a BossHull, so each dangling link claimed a
chokepoint that could never spawn a boss.

AetherDb.Open no longer registers the name file store. CultCache subscribes
Add to a store EntryAdded, MultiFileBackingStore.PullAll re-emits what it
loads, and Add pushes to that type store, whose Push writes a file: opening
the cache rewrote all twelve name files, 4.4 MB, on every command. They were
byte identical, and it only surfaced as an error because Unity had one of
them memory mapped. Name files now load only on request, and the scope doc
records the underlying smell.

Adds commands: factions, clear-boss-hulls, save, loadout (runs the real
LoadoutGenerator against every hull), hardpoint-fit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 02:05:33 +02:00
Meta Vens
8d93b937bc Author manufacturer variation as faction products
A design lists role names; a faction product is a manufacturer's branded
build of one, carrying its name, its flavor text, and a pseudo-gaussian
quality distribution per role whose mean is the technology put in and
whose deviation is their quality control. A PerformanceStat may name the
role whose quality it reads, unset reading the item own workmanship as
before, so old saves behave unchanged. Generation selects products rather
than designs, which makes what a faction makes the availability rule.

This is Njordr shape at one dimension: role names, per-role derivation
and per-product distributions carry over when quality widens into
dimensions. No parts exist yet; the product authors the role quality.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 01:12:12 +02:00
Meta Vens
95932da895 Record Njordr as the owner of item property derivation
Aetheria authors roles, per-role stat derivation, continuous part quality
and per-faction role competence: the same shape one dimension wide, so
migration widens quality into dimensions rather than restructuring. No
second owner of item property derivation grows here.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 00:22:08 +02:00
Meta Vens
02058a3cdf Build ServerShared without Unity and add AetherDb scripts
Aetheria.Shared.csproj compiles ServerShared with MessagePack, UniRx
core, Ink and Unity.Mathematics from source against .NET Standard 2.1
(Unity's API level) with no Unity defines; a clean build checks that the
simulation stays engine-independent. tools/AetherDb opens AetherDB.msgpack
through the game's own CultCache for file-based C# scripts; station-fit
checks every station hull can take a docking bay.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-11 23:23:20 +02:00
Meta Vens
086b966c30 Record Unity-independent simulation as an invariant
Also itemize the coast-path preview as a navigation computer behavior.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-11 21:04:59 +02:00
Meta Vens
20ebb39ad2 Give fire control hit authority and plan navigation
Replace the aim-error and steering items with a ServerShared fire control
system that owns hit resolution and an MPC navigation planner.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-11 21:00:24 +02:00
Meta Vens
434c2611ff Adopt Three Gates shipping scope
Record the scoped-down rogue-lite plan on the legacy Unity game and mark
the CultMesh migration map as parked.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-11 20:40:36 +02:00
Meta Vens
7006a6b0dd Restore the stable legacy Unity project 2026-08-10 14:57:50 +01:00
Meta Vens
152db9e744 Launch Terminus through daemon-owned Hangar 2026-08-08 08:45:14 +01:00
Meta Vens
023a35944c Restore daemon-backed Unity launch 2026-08-07 21:10:44 +01:00
Meta Vens
7c46cd1060 Pin CultMath min-max rectangle release 2026-08-07 20:06:51 +01:00
Meta Vens
e9d1e04897 Establish shared Hangar deployment spine 2026-08-07 15:52:38 +01:00
Meta Vens
54895e28fe Define CultMesh authority runway 2026-08-07 14:46:32 +01:00
Meta Vens
c002d53c66 Define shared Aetheria mode progression 2026-08-07 14:27:49 +01:00
Meta Vens
04c0b77c94 Add entity-owned dynamic fog fields 2026-07-22 02:09:30 +01:00
Meta Vens
ec00373067 Return idle Aetheria sessions to ready 2026-07-22 00:19:29 +01:00
Meta Vens
165ecfc443 Defer Aetheria worlds until client activation 2026-07-22 00:12:13 +01:00
Meta Vens
2d5180534b Separate daemon build from launch 2026-07-21 23:53:37 +01:00
Meta Vens
fe4cd60d60 Decouple daemon from Unity Play lifecycle 2026-07-21 22:52:09 +01:00
Meta Vens
b312bfec3d Make Unity own daemon readiness 2026-07-21 20:10:13 +01:00
Meta Vens
91f0a697da Record released generic cockpit ownership 2026-07-20 05:24:07 +01:00
Meta Vens
33fe511c32 Document Aetheria Unity transport ownership 2026-07-20 04:33:58 +01:00
Meta Vens
b838862b2f Serve Aetheria bundle chunks without cache republish 2026-07-20 03:06:30 +01:00
Meta Vens
c20752cb85 Keep bootstrap run records cold on restart 2026-07-20 03:00:28 +01:00
Meta Vens
63c19a8177 Persist Aetheria QUIC transport identity 2026-07-20 02:44:28 +01:00
Meta Vens
6fc92b3447 Generate Aetheria CultCache payload dispatch 2026-07-20 02:38:48 +01:00
Meta Vens
c067668308 Hydrate only daemon catalog dependencies 2026-07-20 02:31:55 +01:00
Meta Vens
a8787e914b Keep restored Aetheria state clean at boot 2026-07-20 02:24:29 +01:00
Meta Vens
02c004897c Serve committed Eve state before restart tick 2026-07-20 02:07:48 +01:00
Meta Vens
947ce78786 Bound Aetheria Ymir restart journals 2026-07-20 01:58:26 +01:00
Meta Vens
b4b16867ee Hydrate only Aetheria daemon working state 2026-07-20 01:52:05 +01:00
Meta Vens
466d2bc8ab Reuse unchanged compiled runtime catalog 2026-07-20 00:56:46 +01:00
Meta Vens
1747a8788e Make runtime catalog a typed cached authority 2026-07-20 00:39:09 +01:00
Meta Vens
46bfd7d241 Separate live readiness from durable publication 2026-07-20 00:24:04 +01:00
Meta Vens
d6ac03071d Stream Aetheria realtime SoA over QUIC 2026-07-19 22:15:50 +01:00
Meta Vens
72ce713a19 Partition provider assets for demand loading 2026-07-19 21:51:49 +01:00