Commit graph Aetheria/tests
Author SHA1 Message Date
Meta Vens
f85a0b0e17 Merge cut sim-contact (Soul verdict cut-sim-contact.s2)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 20:29:56 +02:00
Meta Vens
fdcd5298b1 ContactTests: add the 3000-mass Mid hull the unequal-mass tests use
The previous commit's ContactTests did not build a Mid hull, so ten tests failed on the missing hull (full run at
806641ae: 1481 passed, 10 failed). The commit builds; those ten tests are red until this one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:44:39 +02:00
Meta Vens
806641ae62 Ship contact is a restitution impulse along the normal while closing; e is GameplaySettings.ContactRestitution (.5)
Ruling ship-bounce-restitution-setting: j = -(1+e)(v_rel.n)/(1/m1+1/m2), applied only while closing. The old
exchange formula (PostCollisionVelocity) is deleted. ContactTests now pin momentum, frame shift, restitution,
no impulse while separating, slow closing, tangent of both bodies, inactive hulls, the contact point radius
and the three-body pile. Not yet built or run; verification follows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:28:29 +02:00
Meta Vens
faa05eec83 Merge cut vapour-cloud-presenter (Soul verdict cut-vapour-cloud-presenter.s2)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 06:39:33 +02:00
Meta Vens
febda87ec5 ContactTests: the docked-hull visitor is the heavy hull, which keeps closing after its first exchange
With equal masses the first exchange stops the visitor and a second contact with the docked hull cannot show.
Builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 06:33:28 +02:00
Meta Vens
8d7b90111a ContactTests: the docked-hull test closes a third ship on the carrier, so excluding the docked hull is observable
A docked hull shares its carrier's velocity, so the pair alone never closes; a visitor does expose a second contact.
Builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 06:32:58 +02:00
Meta Vens
7565458b4d ContactTests: the distant pair starts beyond the discs' reach after the tick's own movement
The pair moved 0.1 each before the contact step and so closed inside the 14.14 bound; start them 15 apart.
Builds; the first commit's only red test was this one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 06:05:48 +02:00
Meta Vens
7392bc8fe1 Ship contact is a simulation rule: Zone steps Contacts, Unity physics writes no Entity
Contacts.Step exchanges normal velocity between touching hull discs (PostCollisionVelocity moved verbatim
from ShieldManager) and publishes Zone.Contacted; ShieldManager presents it; HullCollider.OnCollisionEnter
and ShieldManager's ship-on-ship branch are deleted. Not yet built or tested (verification follows).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 05:46:32 +02:00
Meta Vens
31d19eae64 Merge eureka/aetheria-release-contact-reveals: reveals end on perception (cut-contact-reveals.r2)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 05:18:17 +02:00
Meta Vens
f1c36b4ccb Vapour clouds are drawn as fog banks: one ZoneRenderer subscription, VapourCloudInstance presenter, DrawAhead for a free body
ZoneRenderer loads and subscribes Zone.Clouds like mines and destroys a bank on removal; VapourCloudInstance
places a Fog Patch brush at DrawAhead.Position(cloud.Body, Lead) and thins its _Depth with OpacityAt. The prefab
and scene wiring follow in the next commit; this one compiles but CloudPrefab is unassigned.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 03:34:50 +02:00
Meta Vens
0af394bd4b Exact-gate departure test: the observer sits where its info per unit light is a power of two (previous commit's test does not pass)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 03:03:43 +02:00
Meta Vens
ddbd120af0 Pin the departure gate's strictness with a light exactly at the threshold
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 03:02:54 +02:00
Meta Vens
53ff5f7c01 Unreachability test: the departing ship leaves by the warp path, so its own subscriptions to the observer are not the question
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:23:33 +02:00
Meta Vens
f815406e9e Qualify ReferenceEqualityComparer (a3 commit does not build: ambiguous name)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:22:42 +02:00
Meta Vens
a23a76b608 Step-kill test lights the ship at its death; the unreachability test walks the observer's fields
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:22:12 +02:00
Meta Vens
c212ec0232 Reveal book: no scratch holds a departed entity, a destroyed lit gun is refused at the gate, one IsDestroyed rule, departure and allocation pins
Not verified yet at this commit (build and tests run next).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 02:20:46 +02:00
Meta Vens
b6262467f0 Merge cut-scenarios-smoke (verdict cut-scenarios-smoke.s2)
Scenarios.cs Tests list: kept WeaponFeel, Pursuit and Crossing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:28:05 +02:00
Meta Vens
336cf3a684 Merge cut-scenarios-crossing (verdict cut-scenarios-crossing.s3)
Scenarios.cs Tests list: kept Pursuit and Crossing both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:27:47 +02:00
Meta Vens
396c02b08f Perceived item destruction ends the reveal in the observer's Sense; moving-subject bearing pinned
Restores the Identified item-end pass and its tests (AnIdentifiedObserverSeesGearDestroyed, the flashing-gun tick case,
the Identified part of SenseAllocatesNothingOnceWarm) that 49ace47f held for this batch, and extends
AnActIsRevealedOnItsOwnTickWhateverTheListOrder to a moving subject (two velocities, both observer orders).
Builds: all commits build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:58:10 +02:00
Meta Vens
4658fa7af6 RunStartTests: the offered-gear checks read the hulls a product sells
GenerationOffersExactlyTheSoldGearSomeHullCanFit compares against LoadoutGenerator.SoldHulls; GearNoHullCanFitIsOfferedOnlyOnceAHullTakesIt
gives its scratch hull a product, since a hull no product sells is no home. The previous commit (2a943370) left both red (found by the
full run); this one is the head. Commit 2a943370 does not pass the full suite.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:51:07 +02:00
Meta Vens
2a943370ab Smoke Test Hull fixes: the home rule reads sold hulls only; command and flank geometry pinned; turret off the starboard line
LoadoutGenerator.SoldHulls is the one definition of the hulls HasHome considers (a hull some product sells); AvailableProducts and the
tests read it, so the product-less test hull gives no gear a home. TheSoldHardpointGearWithNoHomeToday describes production again.
SmokeHullCommandTests pins each added hardpoint's firing arc, armour and shape; ArcsFlanks asserts the flank hulls abeam from the
player's facing within 5 degrees; Arcs' Turret moves to (600,300). Not yet built or run at this commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:35:25 +02:00
Meta Vens
49ace47f34 Leave perceived item destruction to batch B: drop the Identified item pass and its tests from this cut
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:06:24 +02:00
Meta Vens
d03b85ea34 ContactRevealTests: departure fixtures put the ship's other light out and show exactly the authored signature
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:05:16 +02:00
Meta Vens
22296ae4eb ContactRevealTests: settle the last flash before the departure signature; identified-observer tick fixture
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:04:34 +02:00
Meta Vens
b6c2a2368b Reveal book: one gate, one removal counterpart; departure ends reveals on perception; departed subjects age out
RecordReveal gates on zone membership and EndReveals is the only way out; the observer's Zone.Entities handler no longer wipes the book and PublishInbox no longer decides membership. Zone records each removal as a one-tick Departure that each observer's Sense judges under the light-act gate; a departed subject's entries are pruned once older than BearingMemory. Unverified build at this commit (first test run follows).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:03:20 +02:00
Meta Vens
8d38409d60 Crossing: Brief says coasting pass; pin idle pass, crosser x speed, rest default
Builds (test and Brief text only; not yet run).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:48:39 +02:00
Meta Vens
043a73eb0a Smoke Test Hull: 2x2 side mounts on a two-cell margin; test classes read sold hulls only
The 1x1 Ballistic side mount tripped IsFilledByAgreesWithACellOracle (Shape.FitsWithin never places a
design whose only cell is not its origin, so Takes and the oracle disagree on a 1x1 hardpoint); the
side mounts are 2x2 now, which needs two columns of margin on each side, so every Longinus cell and
hardpoint moves right by two. The two catalog-wide tests that listed every hull now list sold hulls.
This commit does not pass the suite: GameData/Aetheria.cc still holds the previous hull until the
next commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:32:50 +02:00
Meta Vens
e8442328df Smoke Test Hull command, Weapon Feel and Arcs on the test hull (catalog not yet applied)
AetherDb smoke-hull [apply] adds a product-less Longinus copy with a 2x2 Energy and a 2x2 Ballistic
hardpoint past the bow and a 1x1 side mount on each flank. Weapon Feel (seed 107) stages it with
ChargeBlast SG, Autocannon and FastBlast+-; Arcs flies it with a mount on each flank and a Port and
Starboard hull. This commit does not build a passing suite: the scenarios name the hull and
GameData/Aetheria.cc does not hold it until the next commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:04:09 +02:00
Meta Vens
c86f28e93f MiningCut3Tests: ChunkInfo equals the bits recorded at base 12dfcef5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 20:34:59 +02:00
Meta Vens
b3c003dc3e Contact reads only the observer's book; a stale paint never recreates a reveal; Sense runs after every update; tests for the unpinned rules
- RevealsOf returns the book and nothing the subject's gear or Durability says (ruling contact-reads-book-aim-reads-live); FireControl.IsRevealed stays the live aiming read.
- PublishInbox records a paint's reveal only for an emitter still in the zone.
- Sense moves from Entity.Update to a Zone.Update phase after all entities have updated, so reveals do not depend on list order.
- ChunkInfo calls PassiveInfo(position, brightness) in the original multiplication order (PassiveInfoPerSignature becomes PassiveInfo with the signature argument).
- Tests: unseen destruction, ghost paint, Search paint reveal, no self-sense, quiet tracked ship levels, list-order independence.

Not built or run locally; verified on Yggdrasil after the next commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 20:34:58 +02:00
Meta Vens
4897d8d157 Crossing test: the crosser is placed moving across the bow, and FastBlast+- mounts forward
Not yet verified at this commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 20:13:13 +02:00
Meta Vens
4f12d581cb Crossing: the crosser starts to port at 50 m/s and the test observes the pass over simulated time; fit and hull pinned
Not yet verified at this commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 19:57:16 +02:00
Meta Vens
7ab267c314 Crossing scenario and Djinni Shakedown targets, with their staging tests
Crossing (seed 112, demo cast): the Arcs Longinus fit with plight and FastBlast+- under the Fire Control Array, a piloted
hostile Djinni crossing the bow inside 400 m, an unpiloted neutral one at 80% of plight's Range. Djinni Shakedown gains
bare Longinus targets Ahead (inside the generated Djinni's ballistic mount arc) and Abeam (outside it). CrossingConditions
and DjinniShakedownTargets read what each arena staged. Not yet verified on a full-suite run at this commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:52:35 +02:00
Meta Vens
9ccc846c1a Pursuit scenario: Cargo stages consumables; a hostile on your tail, a Mine Launcher fitted, vents and overdrives in the hold
ScenarioStage.Cargo resolves one name across equippable and consumable
designs; a consumable is built from its first available product in key
order. Pursuit (seed 111, demo cast) lists last in Scenarios.Tests.
All commits build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:41:48 +02:00
Meta Vens
b32729de22 ContactRevealTests: an Emission entry is not light; the freshest reveal gives the bearing
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:41:21 +02:00
Meta Vens
dcc6f0a7d2 ContactRevealTests: a null-item signature from a non-hull source reveals nothing
Unverified; the running verify job predates it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:31:13 +02:00
Meta Vens
e0758fdf1c ContactRevealTests: reveals by act, by paint, contact levels, lifetime and Sense allocation
Does not build or pass yet unverified: first verify run follows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:26:00 +02:00
Meta Vens
d2709d550e Sensor: one reset of the swept set; a ping belongs to its zone; PaintModeTests pin the ending step and the return inbox
The idle _reached.Clear() at the end of Execute is deleted: Ping() is the one per-ping reset
(ASecondPingCrossesTheSameShipAgain). A sweeping tick drops reached subjects that left the zone,
and a ping ends when its pinger is in another zone than it began in. New tests: the ending step's
band, every return credited, an inactive ally posted none, Deactivate clearing the inbox, a ping
ending on a zone change, and a leave-and-return subject crossed again.

Not yet verified: no verify job has run on this commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 16:42:16 +02:00
Meta Vens
0b917630ad PaintModeTests: a second ping crosses the same ship again
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 15:26:45 +02:00
Meta Vens
34a9e72ce1 PaintModeTests: the cloud fixture lives long enough that its fade does not move the zero cases, and the finished ping is read at its last radius
Opacity falls linearly over the cloud's lifetime and the receive leg takes a square root, so a thousand-second cloud turned an opaque leg's 3e-4 into a .004 credit. The finished ping's radius is 300 within float rounding, not above it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 15:25:08 +02:00
Meta Vens
86323768e0 PaintModeTests: a cloud-thinned echo reads as nothing within the cloud's own fade, not exactly zero
The cloud fades linearly over its lifetime, so an opaque cloud's two legs read 3e-5 a few ticks in. The zero cases compare within a tolerance.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 15:23:28 +02:00
Meta Vens
e1827c9db0 PaintModeTests: the swept-set and bistatic-echo rules, written against the c1d5487b sensor
Eight new tests (moving subjects, list order, stopped illuminator, bistatic oval, cloud legs, drift behind the
front, late arrival, BeamWidth key 12 and its JSON name) and the ally credit of AnAllyHearsTheReturnSilently
restated as bistatic (.21213). This commit builds; the moving-subject, list-order, stopped-illuminator, oval, cloud
and ally-echo tests are expected to fail against the Sensor of c1d5487b, which the next commit replaces.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 15:22:08 +02:00
Meta Vens
c1d5487b72 PaintModeTests: a pinging ship is not a subject of its own ping, observed through its ally
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 14:24:57 +02:00
Meta Vens
8c5825ed94 PaintModeTests: concurrent sweeps credit once per crossing; factionless ships are not allies
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 14:09:32 +02:00
Meta Vens
5731fcee94 PaintModeTests: the hull radiates nothing, so visibility is the fixture's own constant
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 14:07:47 +02:00
Meta Vens
c47ced9cfd Paints carry search or track; a ping sweep warns every ship it crosses in its beam; allies hear the return silently
LockWarning becomes PaintWarning with a PaintMode (Search for a ping sweep, Track for a lock);
Entity.IncomingLocks becomes IncomingPaints. Sensor replaces the _pingedEntities set with a stateless
crossing rule over the previous and current wavefront radius, limited to a new BeamWidth stat (key 12,
absent reads 360), and credits allied pings from the receiving sensor's own sensitivity and distance.
The HUD lock indicator follows Track paints only. Folds in the radiator sampling-instant pin.

Unverified at this commit (first build still to run).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 14:05:16 +02:00
Meta Vens
a47f967d13 Merge eureka/aetheria-release-signature-channels
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-11 13:43:49 +02:00
Meta Vens
f30c3550ab SignatureTests: the one-view check fails by assertion, not by a test-host abort (Assert.Same formatted the entity graph)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 13:24:52 +02:00
Meta Vens
4059e53351 SignatureTests: decay channels named per writer, radiator strength at a nonzero exponent and two temperatures, the view is not a Dictionary
Findings decay-channel-baseline-vacuous (expected DrivePlume, Emission, LaunchFlash per source, not a post-tick
baseline), radiator-temperature-factor-unpinned (T^2 x multiplier x emissivity at two temperatures) and
one-writer-castable (the exposed view is not a Dictionary, is the same object each read, refuses writes).
Not built locally; verified on Yggdrasil.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 13:06:27 +02:00
Meta Vens
fb0c18b4fd SignatureTests: decay test uses sources nothing rewrites (the item-swap mutant survived the first fixture)
Mutant decay-item-from-last-entry survived dc244686: the gun was the last-inserted entry, so
Values.Last().Item was its own, and every other entry was rewritten by its Execute after the
decay loop. The fixture now stops the drive and pings once, so the gun, the drive and the ping
are touched by decay alone and their three items differ. Builds.

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