Aetheria/tests
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Meta Vens 9a82b76390 Pin fire-control arc rules and the headless engagement
One check per rule Cut 1 lands, each with a stated mutation that would
defeat it: mount direction follows the item's authored rotation and not
the hull's facing (ArcFollowsMountRotation), FiringArc is a full width so
the boundary sits at half of it (ArcBoundaryIsHalfWidth), the arc test is
planar per R7 (ArcIsPlanar), and a per-hardpoint override wins over the
default while an authored 0 still means "use the default" rather than a
zero-width arc (HardpointOverrideBeatsDefault).

CombatStateStepsHeadless is the cut's real deliverable: a Minion with a
target in range steps through two Zone.Update ticks without Combat.cs
throwing (the KeyNotFoundException this cut exists to unbreak), and the
fight actually decides to fire, not just avoids a crash.

Builds its own hull/catalog rather than reusing IffAndCombatTests'
private BuildWorld/NewShip (fixed to one hardpoint) -- and along the way,
surfaces three catalog-authoring gotchas any headless-combat fixture
needs: Mass defaults to 0 (NaNs UpdateTemperature via ThermalMass),
default temperature bounds [0,100] don't cover wherever the heat model
settles, and Entity._orderedEquipment is only ever populated by TryEquip
so an entity that never equips anything throws on its first Update.

docs/fire-control-cut.md, Cut 1.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 07:38:06 +02:00
..
Aetheria.Shared.Tests Pin fire-control arc rules and the headless engagement 2026-09-19 07:38:06 +02:00
mutation_tests.py Un-clobber the item-provenance mutation harness; own file for this cut 2026-09-18 05:07:23 +02:00
mutation_tests_addressables_cut.py Un-clobber the item-provenance mutation harness; own file for this cut 2026-09-18 05:07:23 +02:00
mutation_tests_condition_ratio_cut8.py Cut 8: pin ConditionRatio -- perfect/dead/durability/heat/power/force-unchanged 2026-09-19 04:41:43 +02:00
mutation_tests_shield_panel_cut1.py Add the Cut 1 batchmode probe and its mutation harness 2026-09-18 06:08:24 +02:00
mutation_tests_shield_panel_cut2.py Fix ShieldManager's missing-envelope fallback regression 2026-09-18 06:45:07 +02:00
mutation_tests_shield_panel_cut3.py Add the Cut 3 batchmode probe and its mutation harness 2026-09-18 13:51:44 +02:00
mutation_tests_shield_reserve.py Pin the shield reserve ruling: 7 rules, each with a mutation 2026-09-19 02:46:26 +02:00
mutation_tests_stats_power_cut0.py Cut 0: pin the collapsed evaluation path's agreements and disagreements 2026-09-18 16:19:33 +02:00
mutation_tests_stats_power_cut1.py Cut 1: close S5/S6's validation gaps, pin S7's surviving mutants 2026-09-18 18:42:10 +02:00
mutation_tests_stats_power_cut2.py Pin Gate 1, Gate 2 and F8's mutant fix with tests and mutations 2026-09-18 20:42:05 +02:00
mutation_tests_stats_power_cut3.py F8: re-anchor cut3/cut4 mutation harnesses after later cuts moved their code 2026-09-19 06:02:08 +02:00
mutation_tests_stats_power_cut4.py F8: re-anchor cut3/cut4 mutation harnesses after later cuts moved their code 2026-09-19 06:02:08 +02:00
mutation_tests_stats_power_cut5.py Mutation harness for Cut 5's tier rules 2026-09-19 02:58:55 +02:00
mutation_tests_stats_power_cut6.py Resolve request/brownout conflict: evaluate power requests nominally 2026-09-19 06:58:57 +02:00
mutation_tests_stats_power_cut7.py Pin Cut 7's brownout rules: BrownoutTests.cs 2026-09-19 04:11:00 +02:00
mutation_tests_stats_power_cut8.py Cut 7: refuse a stat naming a role its design lacks 2026-09-19 05:01:17 +02:00
mutation_tests_stats_power_nominal_request.py Resolve request/brownout conflict: evaluate power requests nominally 2026-09-19 06:58:57 +02:00