docs(contract): a refactoring plan - the wire is a contract, and every rule has one home
docs(latency): an epic for a unit-decision budget the worst case honours
docs(candidates): note that the four-verb generator flag is gone
docs(training): the ablation run properly, and what absorbed the column
docs(puzzles): an epic for recorded positions the bot must not get wrong
docs(browser): an epic for seating sds on lance.blue and then in the browser
docs(plan): remove references to nonexistent complete/ directory.
docs(readme): clarify that matches are not guaranteed deterministic
docs(readme): correct default bot in example command
docs(readme): remove stale WIP marker from docs section
docs(readme): correct default bot in example command
docs(melee): phaseName() already gives PHYSICAL its own tally
docs(README): document the ineligible_bot reference bot
docs(performance): remove references to removed candidate cap
docs(training): reflect that units report uncapped candidates
docs(harness): stop pointing SeededRandom's javadoc at a command that isn't there
fix(harness): main did not build, and its weights had two keys twice
feat(estimator): the choice-model spike behind the epic's numbers
fix(harness): a movement row with no tactic is refused before the binary is asked
docs(harness): CLAUDE.md carries the test-threads flag now, so tick it
docs(c3): no network has ever been formed in a match here
test(infantry): a Gauss and an LB 20-X in the resolved shots, and two platoons to choose between
docs(harness): why a bounded column pools badly, with p_kill's bands
feat(tactics)!: the precedence order is scarcest first
docs(harness): the stalling scenario fields artillery contrary to intent
fix(harness): a candidate that does not carry a column is not a reading
feat(tactics): the lance table says who took each formation's lances
feat(c3): sds scenarios --c3 writes a networked suite
docs(c3): what the jar says, and why the network belongs in the scenario
fix(melee): a target that has not finished moving is not a target
feat(ev): a missile shot at an AMS carrier takes four off its cluster roll
docs(c3): no network has ever been formed in a match here
fix(artillery): an artillery cannon's direct hit is its rack size
docs(features): a preferred mode must leave the to-hit alone
feat(training): bench the current-basis vector too, and it is another null
fix(harness): main did not compile after the swarm offer landed
test(harness): pin the recording, including the failure path
docs(melee): the push acceptance scenario, and what the probes settled
docs(harness): drop the counts of commands, bots and basis columns
docs(unit-types): the vehicle gap re-measured, and what is left of the column
docs(harness): the compression item fired twice more before it was closed
docs(battle-armor): what refused the movement orders, and what it cost
perf(melee): do not quote a charge at a target no run reaches
docs(battle-armor): why no squad would play, and what it was
test(tactics): a tactic nothing can reach, found by recomputing the set
docs(tactics): what twenty thousand random lances came out as
feat(tactics)!: a formation can offer nothing, and say why
test(ev): pin that a declaration puts the concentrated guns first
docs(ev): three armour types reduce damage per weapon, not per location
docs(infantry): a platoon is a headcount, not a body plan
feat(features): the movement corpus records a helicopter that flies
feat(features): a torso-mounted cockpit is a fact about a design, not a plan
docs(artillery): artillery is three modes across two weapon families
fix(artillery): an artillery piece is not a shot the bot can declare
fix(harness): a round report that cannot be formatted must not hang the seat
docs(candidates): the key collapse is worth 1.7-2.1x at the lookup, ~5% of the sweep
feat(protocol): count what a match actually did, not what defaulted
feat(features): force_share_destroyed, and retire the invented scalar
docs(harness): remove the git cherry entry, which does not survive its own test
docs(shape): a feature's weight is a curve, not a number
docs(unit-types): the ruling on pricing a location, and the differential that cannot be computed
feat(melee)!: attacker_self_damage
docs(harness): what the unbounded test run cost, and why clippy keeps -j 2
feat(melee): the bot can swing the hatchet it is carrying
fix(unit-types): a vehicle has no heat scale, and now says so
fix(features): one denominator for value_destroyed, not one per phase
docs(unit-types): destroyLocation on a game-less entity, a negative result
docs(harness): a clean rebase is a statement about text
docs(unit-types): the calibration measured, and not confirmed
feat(unit-types)!: expected_criticals is optional, and a vehicle has none
feat(protocol): a refused move is answered again, not overruled
test(candidates): record the corpus with the turn cost the wire now carries
fix(candidates): expected_criticals through the mean fast path
perf(candidates): collapse a stand without a Vec per column
docs(features): a file with a regeneration command is not a file to edit
feat(protocol): a refused move is answered again, not overruled
docs(training): the asymmetric corpus was replaced, not reconstructed
docs(unit-types): (c) for a vehicle, and what the zero sweep could not find
docs(candidates): what the half() and store chain is made of, and what came off
fix(training): a matching basis is not evidence two corpora are comparable
docs(candidates): where the sweep spends its time, by ablation
test(candidates): decompose the sweep by replayed ablation
perf(candidates): mix the fast key instead of SipHashing it
feat(harness): kill your own match containers, not everyone's
fix(features): rebase onto main, and restore what the merge dropped
docs(harness): -j 2 never bounded a test run
docs(tactics): the firing phase measures the basis, not the tactics
test(battle-armor): pin the expected_damage seam melee opened
feat(tactics): load a fitted tactic weighting, and scope what is left
feat(harness): report both statistics and flag their disagreement
docs(los): why a region test cannot beat one bit per pair
docs(candidates): the line memo did not pay, and why
docs(protocol): a weapon is its properties, never its name
docs(harness): the control for the seat split, 19-18
perf(candidates): answer a volley without building its key
feat(candidates)!: backing up is the default, and its rules are measured
docs(candidates): three quarters of pairs never reach the weapon walk
docs(los): correct the end-to-end figure to what the mechanism predicts
perf(candidates): time the benchmarks on CPU, not on the wall
docs(tactics): what would make advance orderable, and what blocks it