Commit graph Aetheria/tests
Author SHA1 Message Date
Meta Vens
005e2fc57b Merge origin/master into sensor-catalog-r2 (code; catalog is master's)
Conflicts: EvasionTermTests keeps the branch's EvLonginusDrive split with master's generic
design names; AetherDb Program.cs keeps both the sensor-stat-set and generic-designs cases and
lists both in the usage line. GameData/Aetheria.cc is taken from origin/master unchanged;
sensor-stat-set apply is rerun on it in the next commit. Tests that read the sensor catalog
(TheCatalogCarriesSensorStats and the roles checks) do not pass at this commit: it builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 03:34:19 +02:00
Meta Vens
36cc37419c Sweep old design-name literals landed on master since the base (Lock On, EW 1b)
LockOn.cs hardpoint rows (Talaria, Core Power, GT 3K, FastBlast+-, Iapyx, not if i see you first, PotaT+-,
Store-All Plus) and LaunchSuppressorCatalogTests' SensorName take the generic names. Product-name literals in
CatalogRoleTests and GenericDesignsCommandTests stay: they are brands, not designs. Does not pass the scenario
tests until the catalog commit renames the designs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 01:51:55 +02:00
Meta Vens
a8394f3f92 Merge origin/master into generic-design-names
Conflicts: AetherDb usage line (kept master's list plus generic-designs [apply]), Program.cs class tail (kept the
launch-suppressor catalog and GenericDesigns both), GameData/Aetheria.cc taken from origin/master (f1642a12; the
generic-designs apply rerun follows in its own commit). The old-name sweep of the newly landed code follows separately.
This commit does not pass the generic-name tests: the catalog is master's, not yet renamed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 01:49:18 +02:00
Meta Vens
068adf0d95 Tests: the lot-derived alpha test equips its lot before the ship deploys
The first commit's test equipped the sensor after Add admitted the ship, and TryEquip refuses on a deployed ship; the lot built through ItemManager now rides Make into the mount. b63cdf5d does not pass that test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 23:32:50 +02:00
Meta Vens
b836af4850 Merge origin/master into loot-3 (second) 2026-10-13 23:30:23 +02:00
Meta Vens
b63cdf5d2b Tests: a Sensor reads its intercept factor from its lot's emission-discipline; the Longinus broadside ceiling has its own fitted factor
ASensorReadsItsInterceptFactorFromItsLotsEmissionDiscipline equips a catalog-style sensor from a lot filled at .5, .2 and .8 and reads Sensor.InterceptFactor (1, .6168, 1.5534). The Longinus half of ReachIsWhatTheShipCanDo takes LonginusBroadsideFactor (1.27, from reach 12.74 over measured 10.40) in place of the Djinni's. Builds not verified until the verify job; no catalog change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 23:15:35 +02:00
Meta Vens
78ccb81f72 Merge origin/master into loot-3
No conflicts; GameData/Aetheria.cc taken from master (loot-3 authors no catalog).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 23:13:22 +02:00
Meta Vens
5c2c11bfd0 Merge origin/master into ew-claims-in-the-book
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 22:53:15 +02:00
Meta Vens
ae8d11e3ac GenericDesignsCommandTests: import the MessagePack snapshot serializer the payload-widening helper uses
Fixes the compile break at 205c9f52 and 4d127c82 (the missing using). Builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 22:39:21 +02:00
Meta Vens
205c9f5205 Briefs, comments and tests name current gear; generic-designs lands only its own records and rewrites the last flavour and brand design texts
Scenario Briefs (Crossing, Duel, FusedRounds, LauncherAngles, StarvedReactor, WeaponFeel), scenario and test comments and test locals say the design names (Lightning Projector, Light Laser, Cell Blaster, Guided Missile Launcher, Swarm Rocket Pod, Muon Fusion Reactor, Cluster Cannon, Charged Scatter Blaster, Rugged Drive, Racing Drive) instead of the retired brand names; Crossing.PlightRange is ProjectorRange.

generic-designs: the batch carries ExpectUnchanged so every record it does not author keeps its bytes (the plain commit re-encoded four records, dropping SensorData key 7). DesignTexts rewrites Large Drive, Tractor Beam, Smoke Proximity, Smoke Delayed, Smoke Refused and Smoke Refused Charge as tech-node text; the Tractor Beam's old line moves to its product Space Tractor. smoke-rounds' authored text names Light Laser and Charged Scatter Blaster to match.

Tests: NoScenarioBriefNamesRetiredGear, TheCapacitorDesignCarriesItsRoleMap, NoDesignTextNamesAProduct, and a command test that widens every payload and checks apply changes only the three records it authors and restores the rewritten texts.

Not built or run at this commit; GameData/Aetheria.cc is regenerated in the next commit, so NoDesignTextNamesAProduct and the command test fail here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 22:34:08 +02:00
Meta Vens
64fd701920 Merge origin/master into ew-hide-launch-catalog
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 22:34:03 +02:00
Meta Vens
a345bd3dcb Loot 3 fix1: the loot-3 findings' fixtures, and the held-pose curve has one owner
PickupTests: TheBeamTakesFromWhicheverBayCanStore is a theory over which bay is full.
CapabilityPresentationSmoke: tracked ship's hull hit is drawn; a beam above the held point stays on the ground plane; a grab at the beam keeps its aim; the other entity's grab reaches its own bound beam and not this one.
FloatingItemsDrawnSmoke: a held item's label comes up; the test scene's stand-in pose equals the zone's held pose.
Zone.HeldPull is the one smoothstep of the held pose; FieldDriver's tendril and FieldTester's stand-in call it (FieldTester.PulledPosition, PullProgress), deleting the two copies.
All commits build (Unity compile and both smokes green).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 22:25:49 +02:00
Meta Vens
2cd92fe15d Tests: a consumable listener's Multiple below 1 is not clamped up
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:57:12 +02:00
Meta Vens
5309b7365e Tests: the Djinni's reach is bounded by its measured motion times the fitted ship's own factor
Replaces the allocated*1.2 ceiling, which scaled with Reach; a reach inflated 1.1x or 3x now fails on the Djinni half too. Fixes the stale comment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:56:17 +02:00
Meta Vens
9ae8cd277e EW 2 fix: wear the fixture gun to 95% range, above the fuse arming distance
A gun worn to half its range falls under the fuse's arming distance and FireControl refuses it, so the fixture never fired. At 95% the gun fires and its live range (38) still differs from its rated 40.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:56:09 +02:00
Meta Vens
ab0ab9f1af Tests: listener stacking, alpha derivation and the Djinni reach ceiling pinned (first cut, constants to be measured)
Does not carry the regenerated catalog; the Djinni factors are provisional until measured.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:44:08 +02:00
Meta Vens
18fa8a5e1d launch-suppressor: apply lands only its own records; tests pin late hiding, the rating line, linear suppression and a named observer sensor
Command: the batch carries ExpectUnchanged, so CultCache lands it onto the file as it is. A plain commit re-encoded every record through today's types (two sensors lost a retired key-7 payload and gained a trailing nil, LRMM72 and GT 3K gained a trailing nil); this one leaves every record it did not author byte-identical. A conflicting writer now fails the apply instead of being overwritten.

Tests: the mild baffle stores exactly flash x Factor and pays exactly its predicted heat for the first 30 launches of a 300 flash or 8 of a 1000 flash, then is either hidden or bright; the rating is pinned to half a kelvin either side at three heat-sink qualities; suppression and heat are checked at six flash strengths; the observer fits the named sensor 'not if i see you first'; the command test widens every payload and checks apply leaves all other records byte-identical.

This commit's GameData/Aetheria.cc pointer is the previous apply's output; the regenerated catalog follows in its own commit. Not built or run at this commit yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:37:41 +02:00
Meta Vens
01ccb32b89 EW 2 fix: the worn-gun fixture reads its live range after the gun has ticked in the test's own path
The previous commit ticked before firing and the gun never lit; the wear is attached, the gun fires, then the live range is asserted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:37:23 +02:00
Meta Vens
b6146022e7 EW 2 fix: claims fixtures see live state; hull claim guard both ways; charged multiplier once; stale gear sorts last
- Enemy and own schematic rows, and the rebuild key's Item half, are pinned by fixtures whose live range differs from the rated range and whose guns share a claimed design.
- Entity.Claim refuses a hull class on a non-hull item as it refuses a non-hull class on the hull.
- ChargedWeapon live reads (DamagePerSecond, RangeDamagePerSecond) start from the uncharged damage so the charge multiplier is applied once and a nominal weapon reads its rated figure at every charge.
- RevealedWeapons orders reveals of gear the subject no longer carries after all fitted gear, then by lot.

Builds and tests unverified at this commit; verification follows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:19:53 +02:00
Meta Vens
9b5eaa45d6 GenericDesignsCommandTests: restore of brand design text and a product-text row, and a held brand refused
Not built yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:36:15 +02:00
Meta Vens
c648416b59 Lock On test: drop the monotonic-Strength assertion, which the sim does not promise
The lock's Strength rises from its first paint to its last; it is not monotonic. Builds: yes (test-only change after 038628e9, which built and failed this assertion).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:35:22 +02:00
Meta Vens
743d62ae7e Tests for generic-designs: brands on every product, no authoring notes, renamed designs keep keys, the command's refusals and idempotence
The command's authoring-note suffix is a public constant so the catalog test reads the one literal.
Not built yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:32:21 +02:00
Meta Vens
f7cf3257d0 Sweep: every old design-name literal in C# becomes its generic name; product texts ship without the authoring notes
Scenarios, tests, AetherDb templates and name-keyed maps now resolve designs by the generic names (231 literals in 30 files);
TargetingCatalog's product texts lose the authoring note, Steadfast carries its r3 text, DragOnBreath plight's old design text.
Not built yet; tests that depend on the generic-designs command and new tests follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:29:10 +02:00
Meta Vens
90294e0fef EW 2 fix: the enemy schematic's rows, claimed class and range label are derived in ServerShared
Entity.SchematicRows(subject) owns which weapon rows a schematic shows, each row's item and
claimed design, and its range (own ship: live; any other: the claimed design's rated range).
SchematicDisplay renders SchematicRow and decides nothing. Headless tests cover default-to-truth,
a weapon claimed as another weapon, a weapon claimed as a non-weapon, own rows, and the rebuild key.

Builds on the Shared side not yet verified at this commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:21:15 +02:00
Meta Vens
038628e914 Lock On: observe "beyond its sight" in the sim's own sensing, pin the hostile's facing, stage off axis, read the lock's Strength
The Update(0) checks could not fail and the 40..200 tick window was tuning. The test now asks the hostile's
PassiveInfo for the player's signature against the detection threshold after the first real tick, asserts the
hostile has no track then, pins the facing, and asserts the Track paint's Strength rises. The hostile is staged at
(1500, 3700) facing the player. The unsound comment about the player's sight is corrected.

Builds: not yet verified (verify job follows).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:13:02 +02:00
Meta Vens
947b86f7f3 Tests: the fitted Djinni's reach ceiling is its allocated reach
The fitted Djinni's measured motion sits further below its reach than the generated one did (nose-on 1.69), so the
fixed 1.6 ceiling over measured motion was the old ship's number. The ceiling is the allocated reach with 20% to
spare, as the Longinus's is.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:11:33 +02:00
Meta Vens
de6dbce70f AetherDb launch-suppressor: two Tool designs (Launch Suppressor, Launch Baffle) and six products, with catalog and command tests
The catalog tests need the applied catalog; this commit does not pass them until the next commit lands the apply output.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:10:21 +02:00
Meta Vens
0d291a8a42 Tests: the flight fleet's Longinus is its drive train, not the Duel's loadout
The Longinus the reach test measures is fitted with the drive train the generated one carries
(EvLonginusDrive, which EvLonginus now extends); the Duel's guns and stores added mass the
reach ceilings were not measured with.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:07:08 +02:00
Meta Vens
0a4a2cf56a Tests: reuse the existing EvDjinni fit instead of a second one
The previous commit added a duplicate EvDjinni and did not build (CS0111).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:03:44 +02:00
Meta Vens
b753dbe337 Tests: the two flight tests fit their ships by name; a consumable-hosted Listener test
ReachIsWhatTheShipCanDo and TheThrustersReadLiveThrust built their ships with the
generator, whose draw follows the run's item stream and so the catalog's census; the
applied sensor catalog shifted it. They now fit the Djinni (a Talaria on each thruster
hardpoint, reactor, cockpit) and the Longinus (EvLonginus) by name. AConsumableListenerHearsAtItsMultiple
pins Entity.HearingMultiple over an active consumable's Listener.

Not yet verified.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:02:32 +02:00
Meta Vens
adb632fe3d Hull-claim test: signature strong enough to survive the one-tick exponential decay
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:58:56 +02:00
Meta Vens
a782c7d5d2 EW 2 fixes: one hull claim slot, explicit tie order, one burst divisor, fixtures that see range and live state
- Entity: delete _hullClaim; the hull's claim is the EquippedHull entry of _itemClaims, so ClaimOf(EquippedHull)
  and ClaimedHull read one slot (hull-claim-split). Claim(HullData) writes it; a non-hull claim of the hull throws.
- RevealedWeapons orders by the subject's equipment order, not dictionary slot order (tie-order-unpinned).
- InstantWeaponData.PerRound is the one burst divisor for UpdateStats and the rated read (burst-divisor-twice).
- Tests: falling-curve, Range-span, MinRange>0 fixtures and a charged weapon in the rated tests (rated-figure-range-blind);
  Combat ranks claims at the target's distance, ignores a worn target gun's live figure (live-state-unpinned),
  and takes ties in equipment order.

Not yet run; may not build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:55:18 +02:00
Meta Vens
bce2cd0154 sensor-stat-set: Lucent and Finch products for the two sensor designs; catalog test
The catalog sold only two sensor designs (DME and Miss Terri's), so brand flavour had
nothing to vary: the command adds one Lucent and one Finch product per design. Adds
TheCatalogCarriesSensorStats. Catalog not yet regenerated; not built.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:15:19 +02:00
Meta Vens
05b17ba43a Scenarios: Lock On (seed 113), a piloted hostile that closes from out of sight and locks the player
The hostile starts 4000 m ahead with no track of the player; stepped headlessly it
sees the player at tick 81 and paints a Track lock at tick 83. LockOnSituation pins
the staging, the absence of a paint at Update(0), and the lock's bearing and timing.
LockOn.cs.meta is provisional until the Unity compile on Starfire writes its own.
Builds: yes (not yet run; verification follows).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:13:59 +02:00
Meta Vens
45f98c74eb Listener gear (ListenerData, union 50), float HearingMultiple, and AetherDb sensor-stat-set
Entity.HearingMultiple is now the largest of 1 (any active sensor) and each active
listener's Multiple. sensor-stat-set authors every sensor design's InterceptFactor
as a quality-ranged emission-discipline stat plus the Passive Array and its
products. Not yet built or run; the catalog is not yet regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:10:15 +02:00
Meta Vens
24ab95af8d Loot 3 group B fix: compare FloatingBodyId with Equals (the type has no ==)
8b2eef7b did not build (CS0019 at PickupTests.cs:419); this commit builds the test project.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 18:23:40 +02:00
Meta Vens
8b2eef7b51 Loot 3 group B: PickupTests two-bay fixture and TheBeamTakesFromWhicheverBayCanStore
Spawn takes bays (default 1) and equips that many crates before Zone.Admit. The new test fills the
first bay and expects the beam to claim and land the ore in the second, pinning ruling
beam-skips-unstorable-items over bays (Select's Any over bays). Builds; test not yet run on Yggdrasil.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 18:18:23 +02:00
Meta Vens
76aeeabfca EW 2: claims ride the act into the book; schematic and AI classify from them
Signature, ActiveEmission and Reveal carry Claimed (the class the ship's EW claims for the item, the true item's data by default); Entity gains the claim slots and one write port; Contact gains Profile, derived from the ship's claimed hull once Identified; Entity.RevealedWeapons is the one classifying read for weapons. Combat and the enemy schematic read it; their reads of the target's live gear are cut. Weapons rate by their claimed design (ew-claim-weapon-measure-ruled, rated-design): WeaponData.RatedRangeDamagePerSecond runs the same per-kind formula as the live weapon. Aim, damage and physics keep the truth.

Not yet compiled or run at this commit; the Unity-only SchematicDisplay is unverified.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 18:17:14 +02:00
Meta Vens
0681d6f29b Merge fix: the contact-hud test removes through Zone.Remove (Zone.Entities is read-only on master)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 08:48:39 +02:00
Meta Vens
16466b148a Merge cut contact-hud (Soul verdicts cut-contact-hud.s1, .s2) 2026-10-13 08:48:13 +02:00
Meta Vens
a89d30376d Fix merge build: contact reveal tests remove through Zone.Remove; PickupTests settings drop the retired TargetArmorInfoThreshold
The merge commit before this does not build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 08:31:27 +02:00
Meta Vens
fbe05c7992 Merge cuts loot-1-present and loot-2 (Soul verdicts cut-loot-1-present.s1, cut-loot-2.s2)
Conflicts: Behaviors.cs keeps Union(48, PickupData) and Union(49, LaunchSuppressorData);
Zone.cs keeps the departure record on _entities with master's Visibility (emissions-heard);
ContactRevealTests.cs keeps master's removal of the emission-departure test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 08:27:47 +02:00
Meta Vens
a1d1db963f contact-hud: RevealedSubjectsListsTheBook holds two subjects at once, then one departs
Fixes finding revealed-subjects-multi-subject-unpinned.

All commits build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 08:00:26 +02:00
Meta Vens
4fba95e56f Pickup: one beam region for selection and the pre-pull cancel; selection skips what no bay can store; test gaps and the phase rule pinned
beam-corner-claim-loop: InBeam is the one region predicate; Select claims from it and the pre-pull cancel holds the item only while it stays in it (an item at 74 along, 20 off is collected, not claimed and dropped every other tick).
full-hold-regrab-pins-and-blocks: Select skips an item no cargo bay can store whole, asked of the bay's own TryFindSpace (the test TryStore opens with), per ruling beam-skips-unstorable-items; a hold that fills mid-grab still cancels at the end.
pickup-test-gaps: smoothstep pose, spin-down while the gear is inactive, Remove freeing only the removed holder's items.
phase-ticks-not-rate-invariant: the claim is corrected in the tests; each phase fires on the first tick at or after its boundary, pinned at 1/60, 1/600 and an uneven dt cycle.

Builds; not yet run (the verify job follows).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 07:43:42 +02:00
Meta Vens
ecc6f3d67d contact-hud: the new tests assert counts, not collections of entities
A failing Assert on a collection of Entity prints the whole entity graph and aborted the test host, so two hand
mutants read as a crash rather than a named failing test. Builds (test-only change).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 07:35:52 +02:00
Meta Vens
8f184a8f69 contact-hud: NothingReadsSelection reads the paint inbox on every tick
A warning lives one tick, so the end-state read could not see a paint selection wrote; a hand mutant that paints
on SetTarget survived. Builds (test-only change).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 07:30:48 +02:00
Meta Vens
4708a71a67 contact-hud: the HUD reads the player's own ContactOf and book; TargetedBy and the spotted blink go
Selection is nothing the selected ship can sense: TargetedBy, TargetedByCount, their subscriptions and the music
read of them are deleted. Indicator fills, the target panel, the compass, music and the enemy schematic rows now
read CurrentEntity's ContactOf / RevealsOf / RevealedSubjects (new, the book's keys); the schematic rows are built
by one builder from the book and rebuilt when the revealed set changes. Impact hull effect and projectile hit
effects at another ship's position draw only through ActionGameManager.DrawsAt (the player's own ship or a Tracked
contact). Builds untested in Unity at this commit; tests NothingReadsSelection and RevealedSubjectsListsTheBook.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 07:13:55 +02:00
Meta Vens
8e3dd3129d PickupTests: assert on booleans, never on an Entity (a failing Assert.Same prints the whole entity graph and crashes the test host)
Found by the mutation table: two mutants read 'Test Run Aborted' instead of naming the failing test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 07:07:03 +02:00
Meta Vens
60b5876cd9 PickupTests: bounded waits (a broken rule fails instead of hanging the run); a stray item is never even attempted
Found by the mutation table: a mutant that never claims hung the test host, and a mutant that doubled the
range survived because the observation landed between two attempts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 07:01:35 +02:00
Meta Vens
83b1b62a92 ConsumableSupplyTests: re-pin the generators' residual Random with the tractor beam's draw
The old pin (d4a27def) is exactly what this tree leaves with EquipPickup's call removed (run: passes), so the
new values differ from it only by the one product draw each generated ship makes for its beam.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 06:30:32 +02:00