Commit graph Aetheria/tests
Author SHA1 Message Date
Meta Vens
10aaa8a6ad Pin the book's edge for a departed subject and the stance of one still in the zone
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 19:02:39 +02:00
Meta Vens
2ba41373bd Bearing markers read the observer's live stance; a ship out of the zone holds no warnings
The hostility stamp (Reveal.Hostile, Contact.Hostile) is deleted: the observer knows its own
stance live. The real fault was the IFF override being dropped when its subject departs while
the book still remembers it; the override now goes when the book drops the subject (ReleaseStance),
so RememberedHostiles reads IsHostileTo. A ship removed from the zone clears its paint inbox and
incoming warnings at the owner, so the Parent == null gate in ActionGameManager is deleted.
Tests pin both stance directions after the act, the departed override hostile, the exclusive
memory window at the equality, and the empty inbox. Unbuilt until the verify job; Unity side not compiled.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 17:53:58 +02:00
Meta Vens
2ea329e6f1 Remember a hostile's stance with its sighting; pin the lapse, claim and distance rules
RememberedHostiles read the stance the freshest reveal was made under (Reveal.Hostile, surfaced as Contact.Hostile) instead of IsHostileTo now, so a hostile held by the observer's override keeps its marker and the music after it dies or warps, until the bearing lapses. The departure test no longer re-sets the override. New tests: the Detected clause for an in-zone lapsed hostile, position independence for far hostiles on three sides, a within-category lie in ClaimedClasses, and the stale warning of a docked ship. The HUD no longer collects sweeps for a docked ship, and a sweep flash resets the pooled lock indicator's motion.

Untested here: the Unity-side changes (ActionGameManager) have no headless test and no compile has run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 16:12:44 +02:00
Meta Vens
2b726a998b Pin the claimed-class order: reveals made in reverse name order list by name
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 14:11:56 +02:00
Meta Vens
0debeab1b3 Bearing-marker tests: restate the stance after a departure, bring the claimer into hearing
A departure drops the observer's IFF override (it lasts the sitting), so the departed-hostile case re-sets it to stand for faction-derived hostility; the gun reveal in the claim fixture needs the target within the Eye's hearing. The previous commit's two new tests fail.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 14:08:06 +02:00
Meta Vens
7b12fbe417 Bearing markers for remembered hostile contacts, labelled with their claimed classes, and a sweep flash per ping
Entity.RememberedHostiles and ClaimedClasses derive from the book; music and the new markers share RememberedHostiles. Markers sit on the remembered bearing, never the subject's position; Search warnings are collected per tick into sweep flashes. Unity code is not compiled in this commit's verification (dotnet tests only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 13:54:43 +02:00
Meta Vens
3300e16e25 Rerun range-falloff apply on master's catalog; RangeFalloffTests reads the generic missile rack name
Catalog (GameData/Aetheria.cc, LFS): master's blob 00c59a64 re-saved by `AetherDb range-falloff apply` -> sha256 7c9cf240ab5e64973603fe3fe5cadaddfeb620ecb75b0ffae9cc2d84ad72bc9f.
Dry run: 27 weapon records to rewrite. A second apply left the bytes unchanged. Decoded against master's: 273 keys equal, schemas
equal, exactly 27 weapon records' payload differs, nothing else.
The test fix renames the design literal SRMM72 to Short-Range Missile Rack (generic-design-names table).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 10:15:15 +02:00
Meta Vens
97b7566ee9 Merge origin/master into damage-falloff
Conflicts: FusedRounds scenario brief and fixture comment, SmokeRoundsSteppedTests, and AetherDb's usage line keep both sides, with
DeathCluster renamed Cluster Cannon. GameData/Aetheria.cc is master's blob; range-falloff is rerun on it in the next commit.
This commit's catalog does not carry the falloff stats, so CatalogRole/falloff catalog tests do not pass here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 09:54:44 +02:00
Meta Vens
aff6086c01 Mines are flat by data: refuse falloff on a mine layer, Lay reads no factor; clamp test
A mine layer carries no EffectiveRange or DamageAtMaxRange (StatValidation.ValidateMineLayerFlat, run wherever the other catalog rules run), so RangeFactor is 1 inside its gate for the mine, the AI and the panel without any reader branching on type; Lay's damage is the weapon's damage again. Adds a test that fails without Deliver's min(reach, MaxRange) clamp. Not built or tested yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 09:06:20 +02:00
Meta Vens
0c5d1f36d2 Test: a targeted fused round reads the falloff at its planned burst point, not the target's distance now
The fire-reads-fire-range mutant survived the first table: no test separated BurstReach from FireRange for a round Fire delivers.
Both commits build (verified on Yggdrasil, Aetheria.Shared.Tests).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 07:05:11 +02:00
Meta Vens
b713c42503 Read the range factor where the delivery point is decided; mines and unauthored stats go through the one function
A no-lock fused round reads RangeFactor in CommitBurst at the distance it travelled to the hull it stops on; every round whose point
Solve plans reads it once at Fire (PendingShot.DeliveredAtCommit says which). Lay reads it at its own distance 0. PerformanceStat.Evaluate
no longer interpolates a single-value span, so an unauthored +infinity stat evaluates unequipped. Tests: the round that stops short, the
Fused Rounds hull ahead, a mine layer's authored ranges, the group pick at the target's real distance, unequipped SRMM72/Mine Launcher.
Not yet built (verify job follows).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 06:49:56 +02:00
Meta Vens
66d069890a Merge origin/master into inspection-scanner
Behaviors.cs union list keeps sensor-catalog's ListenerData at 50 and
this cut's ScannerData at 51. No old design-name literal on the branch.
Commit builds unverified until the merge verify job.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 05:21:37 +02:00
Meta Vens
521cb6b9d5 Planar-distance test: the target stands in a gravity well, so space and plane disagree
Units cannot be lifted by hand (Entity.Update resets Position.y to the zone's height), so the first version of the test never put the target off the plane. The zone's depth now does it, and the Dart claim's Range is set between the two distances.

Builds: yes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 04:49:06 +02:00
Meta Vens
7d2443b511 Fused Rounds: the fragile hull sits inside the DeathCluster's effective range; the smoke round follows the first damage
Falloff made the DeathCluster too slow at the old Fragile position (443 m, past its 308 m effective range). Fragile moves to (80, 240), 253 m on the same bearing, and the scenario test asserts it against the weapon's evaluated EffectiveRange. Inside effective range the kill takes about 2.35 s whatever the distance and a Smoke Proximity round flies 1.75 s, so the round is fired once the hull has lost half its durability; the scenario Brief says the same. Probe: lead 0 landed 1.75 / dead 2.35; lead 1.0 dead 2.35 before the round.

Builds: yes. Not run yet (verified at the final job).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 04:43:16 +02:00
Meta Vens
e3f65c894f Combat measures the gate's planar distance: a test that fails when it measures space
The planar-distance mutant survived the first mutation table; no test put a target off the ground plane.

Builds: yes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 04:37:47 +02:00
Meta Vens
7633408fee Merge remote-tracking branch 'origin/master' into eureka/aetheria-release-sensor-catalog-r2 2026-10-14 04:24:44 +02:00
Meta Vens
0a3636a4b1 Scanner tests: a broken scan resumes from what decayed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 04:24:05 +02:00
Meta Vens
b26fbbaa95 Scanner decays from the zone clock, not tick order; revert the consumable reorder
bdc8f1d0 ran Execute before the always-updated pass in ConsumableItemEffect.Update; that moved StatModifier timing for every consumable (TheOverdriveLocksAndBoosts failed). The scan's decay is now derived from the zone clock since the last held tick (Scanner.Progress, one site), so it is the same on the tick it breaks for an equipment host and a consumable host, and Scanner is no longer an IAlwaysUpdatedBehavior. The pilot-path test attaches a task-less Agent: a patrolling Minion needs zone orbits. bdc8f1d0 does not pass its own suite; this commit is the intended state.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 04:23:13 +02:00
Meta Vens
cef4f0a746 AI test authors the live gun's damage, cooldown and ranges; Fused Rounds keeps its original Fragile position
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 04:06:25 +02:00
Meta Vens
d095d9bd61 AI test: report the live gun's range figures when the optimum is wrong
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 04:04:17 +02:00
Meta Vens
bdc8f1d048 Scanner tests: the pilot-path test steps both ships together and pins no scan before ScanTime
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 04:04:11 +02:00
Meta Vens
26d0e66ff5 Scanner fix batch: consumable hosts decay on the same tick; hostility, pilot-path, consumable and wire-key-51 tests
ConsumableItemEffect.Update now runs Execute before the always-updated pass, as EquippedItem.Update does, so a consumable-hosted scanner decays on the tick the scan breaks. Tests: AScanReadsNoHostility (hostile/friendly, honest/lying), AScanTakesTheSamePathForAnyPilot (AI-agent ship and agentless ship), AConsumableScannerDecaysOnTheSameTick, ScannerDataRoundTripsAsUnionKey51. Not yet verified at this commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 04:03:20 +02:00
Meta Vens
f03811a40f TheAIHoldsAtItsEffectiveRange authors the live gun's Range too
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 04:00:16 +02:00
Meta Vens
5cbc555e4a TheAIHoldsAtItsEffectiveRange authors the live gun's falloff
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 04:00:06 +02:00
Meta Vens
ac1a5d29ed Fused Rounds: Fragile sits inside the DeathCluster's effective range; the AI test refreshes the gun's stats
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 03:57:58 +02:00
Meta Vens
ca810b9b1a TheAIHoldsAtItsEffectiveRange samples over the evaluated stats
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 03:55:29 +02:00
Meta Vens
3ca3fcde7b TheAIHoldsAtItsEffectiveRange lets the Online change land between toggles
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 03:52:32 +02:00
Meta Vens
6c924e79e0 TheAIHoldsAtItsEffectiveRange toggles Enabled, the writable source of Online
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 03:50:10 +02:00
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
a7f149d61d Merge remote-tracking branch 'origin/master' into eureka/aetheria-fauna-flow-field 2026-10-14 03:25:26 +02:00
Meta Vens
aed269ad94 Fire clamps the delivery range to Range; smoke-rounds keeps the template's falloff ratio; fixtures follow the gate
Not yet verified together.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 03:04:45 +02:00
Meta Vens
6025009b24 range-falloff: rewrite only stale records; EffectiveRange joins the Range role; fixture fixes
EffectiveRange takes Range's role in the roles maps; the lock weapon's array
header grows to 37 with the weapon base's new keys; the AI test builds its
gun's effective range in the encounter fixture. Not yet verified.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:44:45 +02:00
Meta Vens
b026ea6eb6 Scanner tests: add the third ship before the scan so no zero-dt tick scans untracked 2026-10-14 02:41:58 +02:00
Meta Vens
4bcf5aa61a wip diag2 2026-10-14 02:36:08 +02:00
Meta Vens
9c5e53e88e wip diag 2026-10-14 02:33:20 +02:00
Meta Vens
b5573e9b28 Scanner tests: the scanner ship carries no sensor, so its AI cannot ping beside the scan
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:27:19 +02:00
Meta Vens
5e0ec92509 Damage falloff: effective range and damage at max range replace DamageCurve
WeaponData.RangeFactor is the one function of damage over range: 0 outside
[MinRange, Range], 1 up to EffectiveRange, one lerp to DamageAtMaxRange.
DamageCurve (key 7, retired) and its formula parameters, CurveField's
BezierCurve path, and every fixture curve line are deleted. Fire freezes
damage times the factor at BurstReach; the AI's DPS reads, Combat's optimum
sampling and the properties panel chart read the same function. AetherDb
gains range-falloff (command only; the catalog is re-saved in a later commit).
Cut and wiring land in one commit rather than two; this commit has not been
built yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:16:04 +02:00
Meta Vens
86843648a7 Add the inspection scanner: a held scan on a tracked target reveals all its gear
Scanner (ScannerData, Union 51) builds Progress while the ship's Target is tracked within Range, paints the target (PaintMode.Scan), emits at Range / InterceptFactor and decays in IAlwaysUpdatedBehavior.Update when not held. At 1 Entity.RecordInspection records every fitted non-hull non-destroyed item through RecordReveal with channel null and the subject's claim. Reveal.Channel and RecordReveal take SignatureChannel?. Scanner.cs.meta is hand-written with a fresh guid; Unity has not compiled this yet. Builds on the headless test project only if the next verify says so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 02:07:17 +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
5f5a1e4d48 FlowFieldTests: the unfolded-law oracle skips the field's degenerate origin
The first version compared at the origin, where the field is a zero cross product and the double oracle is NaN; the test failed on a correct tree. This commit builds and passes; the previous one's FoldedScrollIsTheUnfoldedLawAtAnyAge fails.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 23:43:23 +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
819bd79424 FlowFieldSceneVerify: the flow as ARPG.unity runs it; parity check on a ramp height and the noise clock
FlowFieldSceneVerify opens ARPG.unity before anything touches the project's types, drives VolumeSampling and Stardust
Start/Update with a zone attached, and asserts no exception or logged error, FLOW_GLOBAL and FLOW_SLOPE enabled,
_FlowAmplitude non-zero, the stardust buffer changing with the flow and freezing with a paused zone, the noise clock,
and CloudShader pass 0 carrying the FLOW_* keywords. FlowFieldParityVerify now binds a ramp height so FLOW_SLOPE and its
pragma matter, and checks the noise follows _NebulaNoiseTime. The mutation harness runs both checks, with six new mutants.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 23:25:45 +02:00
Meta Vens
b155003689 Flow: keywords created on first use, strict [0,1) phases, nebula noise on the flow clock, fold-law and cycle tests
VolumeSampling created its flow keywords in static field initializers, which a scene runs inside a MonoBehaviour
construction where Unity refuses GlobalKeyword.Create; they are now created lazily from LowerFlow. FlowField.Scroll and
Cycle return phases strictly below 1. The nebula noise reads _NebulaNoiseTime (zone time) instead of _Time.y. New
FlowFieldTests pin the per-octave fold to the unfolded law across wraps, the cycle at days of zone time, and the phase edge.
The Unity checks for these are in the next commit; this one builds, its parity check does not yet read the noise clock.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 23:25:44 +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