The tactical-mode port: the engine now covers both of upstream's engagement
plans. Orbit-mode behavior is unchanged — the orbit fixtures regenerate
byte-identically (their _meta.source_commit pin advances to upstream
843a2c5, the commit that introduced tactical mode without touching orbit
behavior).
Added
- Tactical mode in the engine (
src/engine/tactical.tsplus a
mode: "orbit" | "tactical"argument onSimulation/runEngagement,
mirroring the browser'sresetSim(seed, mode)): the multi-FPV sortie
stream — per-seed launch plans and aim points, per-airframe EMCON keying,
the pilot-station launch scheduler with commit holds, the strike/hunter
FSM sharing the orbit attack run, and the sim's own STALEMATE end state
(outcome reasonpackages_expended). Both modes share every RNG draw
through emplacement; tactical results add the objective, per-airframe
package state, sortie tallies and the killer id. modeinput on the tools:run_engagement,sweep_seedsand
compare_configsacceptmode("orbit" default);TACTICAL.*overrides
(package size, pilot stations, reserve-or-retask, launch spacing,
objective geometry — including the booleanRESERVE_HUNTER) join the
validated parameter table andget_config_schema;describe_modelgains
atactical_modesection; sweeps over tactical results add per-side
strikes_delivereddistributions.- Second golden-fixture set (
test/fixtures/golden-seeds-tactical.json,
the six featured tactical seeds) with matching golden-master tests, and
tactical coverage in the fixture generator. Parity for the port was
additionally cross-checked against the vm-run original browser sim over
seeds 1–500: outcomes, event logs, fix floats and per-airframe positions
all match exactly, reproducing the documented 27% / 15% / 58% split.
Changed
- CI: the
upstream-driftgate now regenerates and compares BOTH fixture
sets, so a tactical-behavior change upstream (or an engine regression in
either mode) is caught the same way orbit drift always was.
Docs
- README, DESIGN_NOTES.md and the pinned
docs/upstream/DESIGN_NOTES.md
copy re-synced for the two-mode era (SNAPSHOT.mdpin:843a2c5).