Commit graph

2,898 commits

Author SHA1 Message Date
Meta Vens
cf6503bf4e Merge origin/master into consumable-supply 2026-10-10 14:05:56 +02:00
Meta Vens
f8f4f65299 Merge origin/master into eureka/aetheria-release-mods-in-tree 2026-10-10 13:57:37 +02:00
Meta Vens
55e607db35 Release map: allocator wiring refresh (TW1-TW6) and the lock warning (LW1-LW8)
Imagination passes (session self-2026-10-10-ag): the Duel oscillation was a
probe artifact (orbits unplaced before the zone's first tick); wiring and
envelope specs refreshed at 08d064c8; the ship-owned incoming-lock warning.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 13:37:37 +02:00
Meta Vens
2be1f8efa2 Merge origin/master into eureka/aetheria-release-mods-in-tree
AetheriaStores.Open keeps both: the registry parameter and the missing-catalog refusal.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-10 13:35:39 +02:00
Meta Vens
1f8af424bf Merge origin/master into eureka/aetheria-release-link-rig-record
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 13:14:43 +02:00
Meta Vens
577da4f75b Merge origin/master into eureka/aetheria-release-link-rig-record
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 12:31:49 +02:00
Meta Vens
08d064c8dc Merge origin/master into eureka/aetheria-release-thrust-allocator-core 2026-10-10 12:23:02 +02:00
Meta Vens
863d6c8fad ConsumableSupplyTests: 1500 station seeds, a ship hull with three interior cells, units reach the maximum on each station hull
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 11:30:46 +02:00
Meta Vens
a00054aa7e LoadoutGenerator: a station stocks its consumable before the gear
Sixteen gear picks drawn with replacement fill a shipped station hold, so a station whose roll hit
usually stored nothing (29 of 400 held one against the ruled quarter). The consumable step now runs
before the gear fill; with no consumable on offer it still draws nothing, so generation is unchanged.
Ships keep their step after OutfitEntity.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 11:09:59 +02:00
Meta Vens
1a81d07e3a ConsumableSupplyTests: shipped hulls, tight holds, two hulls per kind, 3000 ship seeds
Station and ship rates are measured per hull on two station hulls and two ship hulls with holds that
sixteen gear picks fill, on a station whose first bay refuses, and on the shipped catalog's own hulls.
The ship band is 3000 seeds so chances of .12, .15 and .05 fall outside it. These tests fail on the
generator as it stands (consumable stocked after the gear); the next commit fixes the generator.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 11:02:27 +02:00
Meta Vens
f7f6c0b98e Merge origin/master into eureka/aetheria-release-player-build
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-10 09:32:12 +02:00
Meta Vens
144b2f5b95 ThrustAllocator tests: System.Random, not CultMath.Random, in the large-hull fixture
The previous commit (8bfce189) does not build: CS0104 ambiguous Random in ThrustAllocatorTests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 09:27:59 +02:00
Meta Vens
8bfce1899e ThrustAllocator: zero intent returns exact zeros before the solve; the 1e-9 output flush is deleted (zero-intent-warm-nonzero, zero-intent-at-the-cap)
Nothing asked, nothing fired is a fact about the intent: when all three clamped intents are exactly zero Allocate returns the zeroed buffer before the solve, so a warm solve that stops at the iteration cap can no longer fire thrusters. The output flush is gone. The warm start is left at the last solved point. Tests: the two 40-thruster hulls Soul found, and a small intent still answered at any column scale. Builds untested locally; verified on Yggdrasil.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 09:08:55 +02:00
Meta Vens
7a195d2384 Pin the rig's slot 5 carry-through: C# slot numbers and Python replace_visual/replace_lines round trips
Tests only; builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:29:12 +02:00
Meta Vens
638856afc1 ShipValidationTests: a NaN Min and a NaN Max are each refused as not finite
Tests only; builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:29:11 +02:00
Meta Vens
191f1fec04 ShipRigTests: pin asymmetric reach, tagged non-joint nodes in Bind, and hull-order Rigs
Off-centre joint limits (20..50, -10..50, -50..0) so Max-Min is distinguishable from |Min|+|Max| and 2*max/2*Max; Bind walking past tagged
nodes that are not joints; Rigs and the lead mount follow hull order where it differs from name order. Tests only; builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:29:09 +02:00
Meta Vens
9ae5fbb350 AetheriaStoresTests: MissingCatalogGlobalIsLoud copies the fixture catalog and removes its global
Flushing an empty cache writes no file, so the previous fixture still hit the new missing-file refusal.
Builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:10:12 +02:00
Meta Vens
eff21e0513 ConsumableSupplyTests: spell the ruling's chances and units out instead of reading the constants
A mutant that changed a constant moved the test's expectation with it and survived (station chance 1,
ship chance 0 and 1, station units 3).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 08:02:48 +02:00
Meta Vens
8fab3052e1 ThrustAllocator: solver residue below 1e-9 is zero; zero intent after a call is exact zeros (zero-intent-warm-nonzero)
After a good call the warm start left 1e-34..1e-44 throttles on a zero-intent call. Throttles at or below ThrottleResidue return 0 on the one general path; TA-R3's warm start is kept. The test NothingAskedAfterACallFiresNothing arrived in the previous commit (22cb76e8), which therefore fails that test; this commit makes it pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:59:56 +02:00
Meta Vens
22cb76e85b ThrustAllocator tests: the drive's leak pins the sign of TA-R2's cost row (cost-row-sign-unpinned)
A cost row pulling the errors the other way lowers the pre-onset drive throttle by about 20 percent (1.30e-4 to 1.06e-4 at turn .5); the bounds sit 8 percent under the measured value.

Commit builds: yes (tests/Aetheria.Shared.Tests not yet run on this commit; the full run is the closing job).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:59:43 +02:00
Meta Vens
87e9bfd06b ThrustAllocator tests: a full turn against a full reverse keeps its whole yaw (error-bound-unpinned)
The turn leaves a forward error of 2, the top of TA-R2's error box; a bound of 1 or 1.5 gives yaw back.

Commit builds: yes (tests/Aetheria.Shared.Tests not yet run on this commit; the full run is the closing job).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:59:39 +02:00
Meta Vens
aa5e45a2ff ThrustAllocator tests: IterationLimit keeps the solver's iterate (iteration-limit-untested)
128 torque-free forward thrusters from a cold start reach the 100-iteration cap through the public surface; the call must keep the iterate it reached, not zero it.

Commit builds: yes (tests/Aetheria.Shared.Tests not yet run on this commit; the full run is the closing job).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:59:36 +02:00
Meta Vens
293747c5f9 ConsumableSupplyTests: pin the generator's Random after generation to the pre-consumable tree
The gated-versus-plain comparison alone cannot see an unconditional draw (both catalogs draw).
Values measured on origin/master d4a27def with the same fixture. The roll-before-availability
mutant survived the full suite without this pin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:57:32 +02:00
Meta Vens
86fb594031 Release map: vectored thruster rows (probes V1-V8, model rows, cut order)
Imagination pass (session self-2026-10-10-ag): the row gimbal is sim data,
one shared-throttle actuator per row in the allocator's single solve;
specs vector-rows-record r2 and vector-rows-allocator r1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:37:49 +02:00
Meta Vens
1047698568 Missing ship.cc fails the fixture, not the game's compose
The game treats a directory without ship.cc as not a package (TheBootCatalogIsTheShippedOneUntilAModIsInstalled), so da4d8c6c's
Compose exclusion broke that test. Reverts the Compose and ResolveCatalog change and moves the check to the one place that
holds the first-party tree to a stricter rule: TestCatalog.Resolve throws, naming each directory under GameData/Mods that
holds no ship.cc (missing-ship-cc-skipped). The GLB case change and the registry parameters stand.

Builds; not yet run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:35:08 +02:00
Meta Vens
1521c68a79 AetheriaStores.Open: a missing catalog throws FileNotFoundException
The test assembly registers a catalog [CultGlobal], so the global check already threw on a missing
file there and AStoreRefusesAMissingCatalog passed against the old Open (run at fe9da2e: 12 passed).
The refusal is now a FileNotFoundException naming the path, and the test pins that type, which the
global check never throws. Builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:28:04 +02:00
Meta Vens
387404c6ea AetheriaStoresTests: MissingCatalogGlobalIsLoud opens an existing empty catalog
The test relied on a read-only open of a nonexistent file yielding an empty catalog, which
AetheriaStores.Open now refuses; the fixture writes the empty catalog first. Builds; the suite is green with it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:27:31 +02:00
Meta Vens
e5a57dab9f AetheriaBuild: qualify UnityEditor.PlayerSettings (the game has a global PlayerSettings); Unity .meta files
The previous commit did not compile in Unity (CS0117 on PlayerSettings.bundleVersion); this one does,
and a batchmode run of AetheriaBuild.Build succeeded.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 07:17:13 +02:00
Meta Vens
b997b80f81 AetheriaBuild.Build: one player entry point; AetheriaStores.Open refuses a missing catalog
AetheriaBuild (Assets/Editor) sets the version, builds Addressables, builds the
Win64 player, stages GameData through PlayerStaging, publishes AetherDb to
ModTools and removes the Burst debug folder; any failure exits 1 naming the step.
PlayerStaging is Unity-free and linked into Aetheria.Shared.Tests. A read-only
AetheriaStores.Open of a nonexistent catalog throws.

Builds on the headless side; the Unity .meta files and the batchmode run follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:55:32 +02:00
Meta Vens
fe9da2e0af Test AStoreRefusesAMissingCatalog (red: AetheriaStores.Open does not yet refuse)
Builds; the new test fails against the current Open.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:52:06 +02:00
Meta Vens
d6100b18ca Route every real-catalog test reader through TestCatalog
Deletes the direct GameData/Aetheria.cc opens (FireControlCut124Tests x3, FireControlCut7Tests, MiningCut3Tests x2,
RestoredHullsTests x11) in favour of TestCatalog.Repo, and the eight copies of the shipped-assembly registry in favour of
TestCatalog.Registry() (real-catalog-readers-bypass). Pirates and Roles command tests keep copying the shipped catalog (they
rewrite a copy through AetherDb) and take only the registry.

Builds; not yet run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:50:26 +02:00
Meta Vens
da4d8c6c96 Fixture boots the game's catalog under one scoped registry; missing ship.cc is an exclusion; GLB extension is lowercase only
AetheriaStores.Open, ShipModCatalog.Compose and ResolveCatalog take an optional registry (the game passes none and keeps the
process-wide one). TestCatalog.Registry() is the shipped assembly's registry, so the test assembly's TestCatalogGlobal is no
longer a catalog global the real catalog must hold (fixture-fails-on-real-package). TestCatalog.ForRepo(root) is the one
binding Repo uses, pinned by a test over a real catalog plus a package (repo-wiring-unpinned). A package directory without
ship.cc is excluded with a reason, in Compose and so in ResolveCatalog's pre-check (missing-ship-cc-skipped). The loader takes
only a lowercase .glb, matching the case-sensitive LFS rule (lfs-glb-case).

All commits build; not yet run (verification job follows).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:50:18 +02:00
Meta Vens
30d027195b Research: prior art on thrust allocation with vectored thrusters
Serves follow-ups vectored-thruster-rows and gimballed-thrusters: virtual
actuators, nonlinear and cascaded allocation, rate and gimbal limits as
per-tick bounds, the zero-thrust singularity, games, shared-angle rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 06:50:05 +02:00
Meta Vens
ff1f5e9ebd Merge remote-tracking branch 'origin/master' into eureka/aetheria-release-mods-in-tree 2026-10-10 06:46:41 +02:00
Meta Vens
30c008d7a8 Merge origin/master into eureka/aetheria-release-modifier-stacking 2026-10-10 06:26:08 +02:00
Meta Vens
e8d42df258 ConsumableSupplyTests: ship hull with two interior cells (cargo bay and capacitor)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:56:45 +02:00
Meta Vens
e71540be5b Merge origin/master into eureka/aetheria-release-vapour-cloud
Behaviors.cs union list: keep Union(41, ThrottleLockData) from master and
Union(42, VapourDumpData) from this cut; no key renumbered. All commits build
as a merge result only after the verify job.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-10 05:51:04 +02:00
Meta Vens
87528dbda4 ConsumableSupplyTests: a station roll can also stock a single unit
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:47:37 +02:00
Meta Vens
a5aac29055 ConsumableSupplyTests: roomy holds (gear stock draws 16 with replacement), drop the probe, pin the station maximum
Commit 54d200ec before this is a diagnostic probe (builds, test deliberately red).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:47:11 +02:00
Meta Vens
54d200ec60 probe
x
2026-10-10 05:37:21 +02:00
Meta Vens
562de34c4e ShipRigTests: the Max-180 boundary joint needs one degree of reach for its 1 degree arc
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:36:32 +02:00
Meta Vens
c2e46a4637 ConsumableSupplyTests: count consumables in docking-bay holds too (a station's first bay is its dock)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:34:47 +02:00
Meta Vens
7b73e51346 Consumable supply: scarce stock at stations and on ships through the one availability rule
LoadoutGenerator.AvailableProducts and RandomProducts now range over CraftedItemData; only
equippable gear needs a hull home. StockConsumables is the last step of GenerateShipLoadout and
GenerateStationLoadout: it draws nothing when no consumable is on offer. Unbuilt/untested at
this commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:32:50 +02:00
Meta Vens
77e441df31 StatResolver tests: keep the boost gear online with the entity's override so the modifiers execute
The first commit's gear modifiers never executed (test gear has no heat response, so it read offline). Builds; the first commit's new tests fail without this.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:32:45 +02:00
Meta Vens
11a7843c61 StatResolver tests: boosts on one stat multiply, constants add, gear and consumable share the rule
Pins ruling boost-stacking-multiply through the production path (gear and consumable StatModifierData on a ship, read via EquippedItem.Evaluate): TwoScalesOnOneStatMultiply, AConsumableBoostMultipliesWithGear, TwoConstantsOnOneStatAdd. Tests only; no production change. Not yet run; the commit is unverified.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:30:38 +02:00
Meta Vens
b623d519f7 ThrottleLock tests: pin the exact tick the lock ends, as a function of Duration
Replaces TheLockHoldsThroughMostOfItsDurationAndEndsAfter with a theory over Duration 1 and 2 at 0.25 s ticks. Builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:26:51 +02:00
Meta Vens
1be1023558 Merge origin/master into throttle-lock 2026-10-10 05:26:11 +02:00
Meta Vens
9e516d06d9 Rig in the visual record: ShipAuthoring.Joints, ShipAnchor.Joint, reach check, Bind and ShipModPlan.Rigs
Deletes the articulation anchor role. Adds ShipJoint (key 5 Joints), ShipAnchor.Joint (key 5),
the judge's joint-shape, mount-on-joint and yaw-reach checks over RigChains, Bind's GLB checks
(ReadNodeIds returns the nearest tagged ancestor), and ShipModPlan.Rigs. Presentation only:
arc stays HardpointData.FiringArc and traverse WeaponData.Tracking (ruling mount-arc-gun-traverse).
Not yet built or run when committed; the verification commit follows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:23:02 +02:00
Meta Vens
d4a27def37 Merge origin/master into eureka/aetheria-release-consumable-host
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:12:57 +02:00
Meta Vens
8755da5ecb Release map: articulated mounts re-mapped to the hardpoint-arc ruling
Imagination r2 re-map (session self-2026-10-10-ag): the sim already carries
per-hardpoint arc and weapon traverse; links are rig only. Target doc moves
articulated weapon mounts into scope under ruling mount-arc-gun-traverse.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 05:12:27 +02:00