Commit graph Aetheria/docs
Author SHA1 Message Date
Meta Vens
f446e5c2c2 Cut 8 map: a removed entity is a dead entity
The operator's play smoke crashed in LockWeapon reaching EntityInfoGathered as a
ship vanished. Cause: Cut 5.6 added death removal from the zone but not the
matching Deactivate, so a dead entity kept living subscriptions and stale
references while every survivor dropped it -- and because Zone.Update iterates a
snapshot, it still got one more Update after the world had forgotten it. Nothing
in Entity.Update consults _active.

TryDock has always paired removal with Deactivate; the death path just did half
of it. The fix is that pairing plus an _active guard, not a TryGetValue in
LockWeapon, which would silence one call site and leave every other behaviour
running on a corpse.

Also records the symptoms this does NOT explain -- the heat spike, motionless
ships and shots landing nothing -- as open, with the unclamped dt and the
unguarded division by it as the place to probe rather than patch.

And re-anchors the seven mutations stranded by the diagnostics refactor, which
rewrote the lines four harnesses pin. Two of the seven are no-op controls, so
those harnesses currently defend nothing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 00:17:25 +02:00
Meta Vens
ef223c1d9b Cut 7 amendment: the live-catalog test is the campaign's only readability check
Merging 6b and 6c bricked the catalog -- a new non-nullable float at a new
MessagePack key cannot read records written before it existed, so
AetheriaStores.Open threw and the game could not load its own data. Both
branches were green: one never opened the real catalog, the other never had the
field.

Cut 7's live-catalog test therefore has to enumerate every document type rather
than just look for a design, because a lazy read that never touches
WeaponItemData would have passed the broken merge too.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 19:13:04 +02:00
Meta Vens
3bf1e40795 Fire control Cut 6d map: where a hit lands is a dart throw, not a coin flip
Precision is currently a coin flip between landing exactly on the aimed item and
landing uniformly anywhere on the hull, so aiming at a stern thruster scatters
its misses across the bow. Operator direction: misses should cluster near what
you aimed at, like throwing a dart at the grid -- and aiming should therefore be
a real tradeoff, where a thin limb risks missing the ship entirely and centre
mass is the safe play.

One Gaussian kernel over the hull schematic answers both halves: its on-hull
mass prices the stray into HitProbability, so the risk is legible on the HUD
before the trigger, and its per-cell weights place the hit. One function, so the
probability and the placement cannot drift apart -- Cut 3's named risk was
exactly two functions answering where a shot goes.

Records the rejected draft that clamped a stray dart to the nearest hull cell,
which would have quietly removed the tradeoff, and the two consequences worth
catching early: pOnHull may double-charge with the existing pSpread term, and
every AI gates on this number so they will hold fire more once it lands.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 17:30:39 +02:00
Meta Vens
c4c241e999 Fire control Cuts 6, 6c and 7 maps
Cut 6b: the combat roll stops drawing from the shared ItemManager.Random stream
and becomes a pure function of (zone identity, shot id), so adding an NPC or
opening a shop can no longer reorder an existing fight's dice. Airburst resolves
in the simulation rather than going back into Projectile, which would be exactly
the presentation authority Cut 3 spent itself deleting.

Cut 6c: reviewing Cut 6a's landed catalog found the premium targeting system
strictly worse than the cheap one, because Resolution reads as a cost while its
name promises a benefit. Operator ruling: fix the formula, not the handle -- it
becomes reciprocal, higher stays better, no rename. Also: both designs ship from
one seller, and galaxy generation draws a random subset of factions, so ship
generation still throws in any galaxy that misses that draw.

Cut 7: the mutation harnesses for Cuts 1-3 that the map declared and nobody ever
wrote, plus the fifth mutation Soul left standing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 16:58:22 +02:00
Meta Vens
a44549133c Fire control Cut 5 map: the rules that landed on one path and not its twin
Soul's campaign pass confirmed eleven findings. Seven of them are code defects
of one shape -- a rule implemented on one path and left off the path beside it
-- and belong to this cut. Catalog authoring is Cut 6, alongside airburst and
the shared combat RNG; the missing mutation harnesses are Cut 7.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 15:44:36 +02:00
Meta Vens
678c1ea99a Rule fire control's forks: unaided fire is a last resort
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 07:01:37 +02:00
Meta Vens
a62d52b64e Map fire control, superseding the playground draft
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 06:36:01 +02:00
Meta Vens
8a00fc9235 Place territory after fire control in the order
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 06:23:08 +02:00
Meta Vens
41282b05a0 Target faction territory: places with jobs, not just names
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 06:20:58 +02:00
Meta Vens
5c2f9bba67 Spec the first content batch, hulls first
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 06:06:20 +02:00
Meta Vens
90e83234ed Merge authored design roles: items stop being one-dimensional
32 of 51 designs declare roles, 183 stats point at one, 28 of 37 products
author matching role quality. Adds the validation that refuses a stat
naming a role its design lacks, and roles-migrate alongside the other
catalog tools. Product means are placeholders pending operator review.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 05:03:57 +02:00
Meta Vens
c4f6029e5d Cut 7: author roles into the catalog, and the operator review table
roles-migrate apply, run once: 32 of 51 designs now declare roles (183
stats pointed at the role that governs them; the other 19 designs' kinds
either carry no quality-bearing behaviour at all, or every candidate stat
is authored flat with no observable role-vs-workmanship difference). 28 of
37 products authored matching ProductRole quality; the rest sell an
unrolled design or a design no product sells (Core Power, Industrial
Thermostatic Heater, pswarm, plight -- all already flagged unsold in the
Cut 1 census).

docs/stats-power-cut7-roles.md is the legible review table the map's O7
calls for: every design's roles and which stat took each, grouped by item
kind, plus every product's authored mean/deviation and its basis (one real
brand identity -- Arctica/Alakrita on heat efficiency, from
item-provenance-target.md -- the rest generic placeholders flagged for
operator review).

Verified before/after: AetherDb dangling/station-fit/hardpoint-fit output
is byte-identical; `loadout 1` output is byte-identical (no generation
behaviour moved); census reports 0 designs with roles and no matching
product spread; 144 Aetheria.Shared.Tests pass (was 141); the six-mutation
harness in mutation_tests_stats_power_cut8.py all behave as declared.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 05:01:43 +02:00
Meta Vens
e6609c45f3 Rule power supply a multiplier, and record Soul's power findings
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 04:58:58 +02:00
Meta Vens
08c3bb8c64 Rule the shield reserve authored, with refill and restore durations
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 02:14:49 +02:00
Meta Vens
3461eec520 Rule the panel rim held, and record what play showed
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 19:04:06 +02:00
Meta Vens
eedd309321 Record Hands' fix-up pass over Soul's Cut 1 findings
S1/S2 re-authored (Tractor Beam plus 13 curve-less designs), S5/S6 validation gaps
closed, S7's four surviving mutants pinned, S8 confirmed already correct, and the
zero-ConsumableItemData answer to Cut 0's question recorded. Also names two designs
outside the operator's named 15 (Earp, The Bat) found while enforcing the new
plateau-clamp rule -- the catalog would not open without touching them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 18:45:44 +02:00
Meta Vens
7204259ac3 Fix a mutation accidentally captured in the previous commit
f4d5659d landed with StatValidation's OptimalTemperature-bounds check replaced by
`if (false)`: the mutation harness was running concurrently against this same file
and a `git add`/`git commit` caught it mid-mutation. Restores the real check. Caught
because the harness's own "not yet reached" scars in doctrine are what prompted a
by-hand recheck of the just-committed diff rather than trusting the terminal output
that said 80/80 green a moment earlier.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 18:45:10 +02:00
Meta Vens
14a4051f75 Record Soul's Cut 1 findings and the re-authoring ruling
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 17:53:35 +02:00
Meta Vens
38aec5ddf9 Cut 1: rewrite the catalog to terms and authored R-heat
Migrated by a two-phase scratch console (neither kept): phase A dumps the
four retired exponent fields plus a curve fit (peak, optimum, near-peak
band) from the pre-Cut-1 code; phase B applies them as declared StatTerms
and authored OptimalTemperature/PlateauWidth under the new schema, in one
Commit, refusing to write anything if a single record fails to resolve.

348/348 stats and 51/51 EquippableItemData records migrated; zero
failures. AetherDb's census/factions/dangling/station-fit/hardpoint-fit/
loadout-1 are byte-identical before and after (captured with the matching
pre/post binary against the matching pre/post catalog, since neither
binary can open the other's catalog shape -- the pre-migration catalog no
longer opens under the new code, confirmed and explained in the report).

37 items fitted from an authored curve; 14 had none and got a full-range
plateau (reproducing the old "always full performance" behavior exactly).
281 of 348 stats evaluate identically at quality .5/full durability/optimum;
67 diverge upward (toward Max), the intended balance change Cut 0 flagged --
max delta ~73 units on a 750000-1750000 stat. Full table:
docs/stats-power-cut1-migration.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 17:18:24 +02:00
Meta Vens
41514bb571 Make plateau width the operational-lifespan lever
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 16:28:23 +02:00
Meta Vens
9d6cc50a9f Record Cut 0's landing and the at-optimum divergence R-heat must settle
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 16:21:13 +02:00
Meta Vens
c9eafe1dfa Author heat response as min, max, optimum and plateau width
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 15:49:22 +02:00
Meta Vens
4f01eca5d1 Rule stats first, and replace the heat curve with a range and falloffs
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 15:43:57 +02:00
Meta Vens
f45fefef75 Map the stats authority and the power bus
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 15:07:19 +02:00
Meta Vens
acb2fef930 Record Cut 3's landing, the Penrose floor and the pooling trap
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 13:53:00 +02:00
Meta Vens
4f84470d54 Record Cut 2's landing, the measured radii and the space mismatch
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 06:46:04 +02:00
Meta Vens
808692b002 Write the negent weapon concept: ammunition is the ship's heat
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 06:32:19 +02:00
Meta Vens
3423dfb354 Rule negentropy gear as consumable-fed, wearing through the existing thermal path
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 06:26:00 +02:00
Meta Vens
a463028a65 Record Cut 1's landing and the Penrose density question
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 06:10:39 +02:00
Meta Vens
e3c9eca2fd Record the pre-impact commit window in fire control's scope
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 06:05:29 +02:00
Meta Vens
545f81d58e Rule the commit window as the source of anticipation
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 06:05:02 +02:00
Meta Vens
af67ee3466 Contract shield and pickup presentations, anticipation included
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 06:01:30 +02:00
Meta Vens
f3a02712e1 Rule the scene rig as operator-driven, with a batchmode check
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 05:50:03 +02:00
Meta Vens
70bcdf7617 Rule Penrose sizing into Cut 1 and the envelope as derived
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 05:43:34 +02:00
Meta Vens
1ff21f176f Remap the shield as an interceptor spawning panels on the hull envelope
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 05:39:25 +02:00
Meta Vens
482229d1e3 Record where the Addressables cuts landed, misattributed moves included
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 05:08:53 +02:00
Meta Vens
1fdf815111 Map the shield panel onto the built-in pipeline and the absorb event
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 04:47:36 +02:00
Meta Vens
092b745b78 Rule the Aetheria site as the download page owner
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 22:21:19 +02:00
Meta Vens
2c2b92579f Map build delivery, and narrow the Idunn invariant to services
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 22:00:45 +02:00
Meta Vens
6dc1860770 Target a public build download served from Yggdrasil
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 21:42:17 +02:00
Meta Vens
1428ada3cd Repair the Addressables map after a bad sed prefixed every line
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 19:33:50 +02:00
Meta Vens
78fd617cdd Restore the escaped dot in the corrected grep
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 19:33:24 +02:00
Meta Vens
3744ee16da Fix a control character in the corrected grep
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 19:33:06 +02:00
Meta Vens
45406df974 Rule sub-asset references as Addressables guid[name] keys
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 19:32:53 +02:00
Meta Vens
dcf1881db7 Rule Addressables Q1 and sweep the settings map onto asset GUIDs
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 18:36:59 +02:00
Meta Vens
b6a27e733d Note stale CultLib worktrees carrying the path attribute
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 18:26:48 +02:00
Meta Vens
45941f597d Map engine asset references onto Addressables GUIDs
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 18:26:26 +02:00
Meta Vens
f13a3356e5 Rule settings-map forks: Addressables GUIDs for engine assets, defaults for the rest
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 18:09:42 +02:00
Meta Vens
0c62abb0ea Record the passed play smoke and the master merge
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 18:02:24 +02:00
Meta Vens
38eb9ca50d Record that the content pass consolidates designs through roles
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 17:49:14 +02:00