Skip to content
Mecha Skirmish / TASK-107 balance experiment resultsPrototype field notes / v0.6

TASK-107 balance experiment results

All seven phases are complete and sealed. Execution finished on 2026-09-14.

This report separates four things. Observed results come first. Statistical uncertainty, limitations, and design recommendations follow in that order.

This study changes no playable rule, catalog value, or AI default. It adopts nothing.

The confirmed result is the common melee opportunity target number 10, called tn10. The screen-selected combination did not confirm.

Governance and provenance

The frozen protocol defines every factor, cohort, metric, and selection rule.

The study source commit is c3b4ac7.

The frozen source hash is 5267032f989a0e11cd0d3b344d4d19d75d56b56d588eaf733afcc32d0a04799b. It covers 199 source members.

The protocol hash is c5e9fd0d179bbb5f2f12d5f571aadbb4156da695e0b7c7b7354840c176ef2706.

Every sealed phase records the same frozen source hash. Every report records it again.

Revision e116261 defines the playable control.

The source closure contains engine, harness, analysis, catalog, map, package, lockfile, and TypeScript configuration inputs.

The protocol is the closure's only documentation file. Other reports and design documents are outside the governed source.

Each manifest records the exact command, source hashes, catalog hashes, seed range, and expected key digest.

It embeds exact roster and refit definitions. The manifest hash protects those definitions.

Production archives use keyed gzip JSON Lines. Their receipts retain compressed, logical, key, replay, manifest, and source hashes.

Validation rejects source drift, duplicate keys, incomplete cells, invalid builds, nonfinite state, and mismatched dependencies.

The study uses the full declared scope. The timing gate made no scope reduction.

Completed baseline training

Baseline training completed all 16,800 games. Each of four shards contains 4,200 games.

The sealed archive is out/balance-experiment/study-01/baseline.json.baseline-training.phase.json.

Its SHA-256 is 37dd6864d9f0f41d7170c972858d5f51100aec010651cd98ab81146b64afccbc.

The frozen policy artifact is out/balance-experiment/study-01/baseline.json.baseline-training.policy.json.

Its SHA-256 is 12404798de4558e4fef6f7d1ee3668effbe40e42256fd26756d184e9b2555e5d.

The policy artifact contains all 84 declared map-pair policies.

Full raw event logs remain local. Across all seven phases they total 2,400,567,157 compressed bytes in 28 shards. Immutable receipts and hashes provide the portable evidence record.

Do not rewrite absolute canonical paths inside sealed evidence.

Every sealed phase

All seven phases are sealed. The seal SHA-256 is the SHA-256 of the phase archive file named in the row.

Phase Rows sealed Blocks Seeds Seal file Seal SHA-256
Baseline training 16,800 games 2 120000–120001 baseline.json.baseline-training.phase.json 37dd6864d9f0f41d7170c972858d5f51100aec010651cd98ab81146b64afccbc
Screen 23,520 games 2 130000–130001 screen.json.screen.phase.json 3cbb5f8349c638633a93d959b847fe044d90684f3ec9257ffd5ba75af527d019
Isolates 1,758,976 rows 256 101000–101255, Momentum panel 111000–111255 screen.json.isolates.phase.json 75b5d45c159e1490025748eb861306c003ca309185c6302a0a7a6f681a997758
Opening diagnostic 6,912 games 8 140000–140007 screen.json.opening.phase.json 9d1eceadf2e23371d42bb2e8eda2c3bc0fa0ea3809c198ee31e8431c38112961
Selected training 33,600 games 2 120000–120001 selected.json.selected-training.phase.json 85a023413a72e37ecf4503d9efe86e5cd872c0874ed209e4f0c712690cfa89b1
Pilot panel 12,288 games 8 310000–310007 selected.json.pilots.phase.json 390722b43161ce728cc99607fa32c6b765af0e4cae212d295b397a635b4c3c6d
Confirmation 16,128 games 16 230000–230015 confirmation.json.confirmation.phase.json a26d17fea120ec9b992f796f6a108fe8d23eb7760218d683ecd59e628c6684ba

Every phase ran in four receipted shards. Every seal lists its four receipt paths and receipt hashes.

The seed ranges are disjoint across phases. Baseline training and selected training share 120000–120001 by design, because the selected grids retrain on the original training seeds.

Five phases produced an analysis report. The two training phases produced a frozen policy artifact instead.

Phase Analysis artifact Policy basis recorded in the artifact
Baseline training baseline.json.baseline-training.policy.json 84 map-pair policies
Screen screen.json.screen.report.json frozen baseline policies
Isolates screen.json.isolates.report.json declared isolate or training policies
Opening diagnostic screen.json.opening.report.json frozen baseline policies
Selected training selected.json.selected-training.policy.json 168 map-pair policies
Pilot panel selected.json.pilots.report.json fixed aggression 0.5
Confirmation confirmation.json.confirmation.report.json own-trained candidate policies

The screen also produced the frozen selection artifact screen.json.selection.json, SHA-256 d9a4feb05f4a2416cd8e5ac017bebdd3c02aaa0bae92b53125b3437d65cad9cc.

Two supplements sit outside the frozen closure. The legal-only frontier supplement is legal-frontier-supplement.json, SHA-256 4db14f6f776bb7032d2c8d8295eedc102f3bf0a5143e110693425b0085ea950c. The First Side supplement is first-side-supplement.json, SHA-256 3515b5ca64be06922f6b893c83dca71e84d8524531f21c4c3d5e207f423f94f8, with the confirmation replication first-side-supplement-confirmation.json, SHA-256 c68d6cb0c35ea9c3d22e5f5753ff9a346bb78d48bcae09d9ca214c078f50b3cb.

The compact evidence archive is docs/tuning/evidence-study-01.tar.gz, SHA-256 1d45964a100b19ce354a2cfa6ba1c7d8fc9e976e400c190af1333a92d236c13f, 8,389,134 bytes. Its index is docs/tuning/evidence-study-01-index.json.

Phase order and exact commands

The phase order below is the order actually run. Artifact timestamps establish it.

Baseline training, the screen, the selection and the isolate runs completed on 2026-09-12. The remaining work ran on 2026-09-14 in this order.

  1. seal:opening, then report:opening.
  2. report:isolates.
  3. The four selected-training shards, then seal:selected-training.
  4. The First Side supplement on the opening seal.
  5. train:selected-training.
  6. The four pilots shards, then seal:pilots, then report:pilots.
  7. prepare for the confirmation manifest.
  8. The four confirmation shards, then seal:confirmation, then report:confirmation.
  9. The First Side supplement on the confirmation seal.
  10. The compact evidence archive.

Each manifest's commands object holds the exact command text. The commands below are quoted from those objects. Shard 0 is quoted in full. Shards 1, 2 and 3 repeat it with --shard 1, --shard 2 or --shard 3 and the matching output index.

Manifest preparation:

pnpm exec tsx cli/balance-experiment.ts 'prepare' '--out' 'out/balance-experiment/study-01/baseline.json'
pnpm exec tsx cli/balance-experiment.ts 'prepare' '--policy' 'out/balance-experiment/study-01/baseline.json.baseline-training.policy.json' '--out' 'out/balance-experiment/study-01/screen.json'
pnpm exec tsx cli/balance-experiment.ts 'prepare' '--policy' 'out/balance-experiment/study-01/baseline.json.baseline-training.policy.json' '--selection' 'out/balance-experiment/study-01/screen.json.selection.json' '--out' 'out/balance-experiment/study-01/selected.json'
pnpm exec tsx cli/balance-experiment.ts 'prepare' '--policy' 'out/balance-experiment/study-01/baseline.json.baseline-training.policy.json' '--policy' 'out/balance-experiment/study-01/selected.json.selected-training.policy.json' '--selection' 'out/balance-experiment/study-01/screen.json.selection.json' '--out' 'out/balance-experiment/study-01/confirmation.json'

Baseline training, from baseline.json:

pnpm exec tsx cli/balance-experiment.ts run --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/baseline.json' --phase baseline-training --shard 0 --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/baseline.json.baseline-training.0.jsonl.gz'
pnpm exec tsx cli/balance-experiment.ts seal --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/baseline.json' --phase baseline-training --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/baseline.json.baseline-training.0.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/baseline.json.baseline-training.1.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/baseline.json.baseline-training.2.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/baseline.json.baseline-training.3.jsonl.gz.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/baseline.json.baseline-training.phase.json'
pnpm exec tsx cli/balance-experiment.ts train --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/baseline.json' --archive '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/baseline.json.baseline-training.phase.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/baseline.json.baseline-training.policy.json'
python3 cli/analyze-balance-experiment.py report --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/baseline.json' --rows '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/baseline.json.baseline-training.phase.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/baseline.json.baseline-training.report.json'

The declared report:baseline-training command was not run. Baseline training delivers the policy artifact, not an outcome report.

Screen, from screen.json:

pnpm exec tsx cli/balance-experiment.ts run --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json' --phase screen --shard 0 --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.screen.0.jsonl.gz'
pnpm exec tsx cli/balance-experiment.ts seal --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json' --phase screen --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.screen.0.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.screen.1.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.screen.2.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.screen.3.jsonl.gz.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.screen.phase.json'
python3 cli/analyze-balance-experiment.py report --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json' --rows '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.screen.phase.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.screen.report.json'
python3 cli/analyze-balance-experiment.py select --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json' --rows '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.screen.phase.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.selection.json'

Isolates, from screen.json:

pnpm exec tsx cli/balance-experiment.ts run --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json' --phase isolates --shard 0 --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.isolates.0.jsonl.gz'
pnpm exec tsx cli/balance-experiment.ts seal --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json' --phase isolates --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.isolates.0.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.isolates.1.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.isolates.2.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.isolates.3.jsonl.gz.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.isolates.phase.json'
python3 cli/analyze-balance-experiment.py report --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json' --rows '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.isolates.phase.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.isolates.report.json'

Opening diagnostic, from screen.json:

pnpm exec tsx cli/balance-experiment.ts run --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json' --phase opening --shard 0 --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.opening.0.jsonl.gz'
pnpm exec tsx cli/balance-experiment.ts seal --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json' --phase opening --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.opening.0.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.opening.1.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.opening.2.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.opening.3.jsonl.gz.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.opening.phase.json'
python3 cli/analyze-balance-experiment.py report --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json' --rows '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.opening.phase.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/screen.json.opening.report.json'

Selected training, from selected.json:

pnpm exec tsx cli/balance-experiment.ts run --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json' --phase selected-training --shard 0 --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.selected-training.0.jsonl.gz'
pnpm exec tsx cli/balance-experiment.ts seal --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json' --phase selected-training --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.selected-training.0.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.selected-training.1.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.selected-training.2.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.selected-training.3.jsonl.gz.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.selected-training.phase.json'
pnpm exec tsx cli/balance-experiment.ts train --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json' --archive '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.selected-training.phase.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.selected-training.policy.json'
python3 cli/analyze-balance-experiment.py report --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json' --rows '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.selected-training.phase.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.selected-training.report.json'

The declared report:selected-training command was not run, for the same reason as baseline training.

Pilot panel, from selected.json:

pnpm exec tsx cli/balance-experiment.ts run --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json' --phase pilots --shard 0 --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.pilots.0.jsonl.gz'
pnpm exec tsx cli/balance-experiment.ts seal --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json' --phase pilots --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.pilots.0.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.pilots.1.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.pilots.2.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.pilots.3.jsonl.gz.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.pilots.phase.json'
python3 cli/analyze-balance-experiment.py report --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json' --rows '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.pilots.phase.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/selected.json.pilots.report.json'

Confirmation, from confirmation.json:

pnpm exec tsx cli/balance-experiment.ts run --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/confirmation.json' --phase confirmation --shard 0 --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/confirmation.json.confirmation.0.jsonl.gz'
pnpm exec tsx cli/balance-experiment.ts seal --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/confirmation.json' --phase confirmation --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/confirmation.json.confirmation.0.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/confirmation.json.confirmation.1.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/confirmation.json.confirmation.2.jsonl.gz.json' --receipt '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/confirmation.json.confirmation.3.jsonl.gz.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/confirmation.json.confirmation.phase.json'
python3 cli/analyze-balance-experiment.py report --manifest '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/confirmation.json' --rows '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/confirmation.json.confirmation.phase.json' --out '/Users/cody/Dev/mecha-skirmish/out/balance-experiment/study-01/confirmation.json.confirmation.report.json'

Each manifest also carries a validate command. It checks the manifest against the frozen source closure and the declared keys.

Experimental conditions

The primary mechanical factorial has four factors. These are TN11, Hammer2, Duelist Capacity 4, and Core Durability +2.

All 16 combinations include the control.

TN10, TN12, Duelist Capacity 5, and Core Durability +4 are separate dose singles.

Removing the Piloting pool bonus is a separate sensitivity. It does not enter the primary mechanical bundle.

Momentum, paid forms, and prospective melee threat form a separate three-factor policy panel.

The screen includes every nonempty policy subset on control mechanics and the full mechanical bundle.

Overlap removal gives 35 unique screen profiles. The isolate panel uses 21 distinct mechanical profiles.

Every option is experimental and opt-in. Absent options preserve the playable control's events and RNG state.

Catalog and roster controls

Candidate catalogs are pure clones. Each clone changes only its declared fields.

Hammer2 changes Hammer melee dice from one to two. It does not change damage, Pen, Heat, or Weight.

Core candidates add Durability to Light, Medium, and Heavy chassis only.

Capacity candidates change Duelist arm Capacity only.

Every original legal build remains unchanged. Only an illegal original enters deterministic refit selection.

The refit search evaluates all 121 ordered arm pairs. It validates the complete build and Team Cap.

Combined relevant Handling sums arms that support occupied weapon hands.

The declared ranking uses combined relevant Handling, changed arms, Weight, Durability, and lexical IDs in that order.

Frontier rows expose Capacity, combined relevant Handling, Weight, Durability, Armor, Size, equipment support, and legality.

The diagnostic no-dominance label covers Capacity, combined relevant Handling, Weight, and Durability. It ignores legality.

It does not establish a better arm or build.

Completed assembly evidence

The frozen assembly artifact is out/balance-experiment/study-01/frontiers.json.

Its SHA-256 is 49c53693c3d86848f6e66de607e71b7228e291bbff113a033625f661cb61d99b.

Condition Light Duelist refits Team Weight Legal
Control None 97 Yes
Capacity 5 Hammer support arm: Duelist to Rifle 96 Yes
Capacity 4 Greatblade support arm: Duelist to Rifle; Hammer support arm: Duelist to Pulse 95 Yes

The other six whole-game rosters remain unchanged. Every final roster refit is legal.

Only support arms change. Active weapon-source Handling stays at 1.

Greatblade keeps five melee pool dice. Hammer keeps four in control and Capacity-only profiles.

Hammer2 profiles give Hammer five melee pool dice.

Combined relevant Handling changes from 2 to 1. This ranking value is distinct from active weapon-source Handling.

All 8,712 rows remain in each frontier condition.

Condition No-dominance label Illegal within label Legal within label
Control 3,258 364 2,894
Capacity 5 3,192 422 2,770
Capacity 4 3,048 463 2,585

Each no-dominance-label count includes its listed illegal rows.

The label uses Capacity, combined relevant Handling, Weight, and Durability axes only.

Illegal rows can dominate legal rows in this diagnostic. Legal labeled rows are not a legal Pareto frontier.

One illegal Light Shortblade and Shield row uses Autocannon and Spike arms.

It dominates the legal Blade and Pulse arm row on the declared axes.

Refit selection filters legal rows separately. All row data and refit validity remain sound.

Illegal rows remain visible but cannot enter a legal refit. Armor and Size are excluded from the diagnostic comparison.

Capacity changes the assembly only. Its combat effect is reported in result family 3, and the isolates show no combat effect in either direction.

The supplement filters legal rows before applying the same four-axis dominance test.

It groups rows by catalog, body, and package.

Condition Legal rows Undominated legal rows
Control 7,826 2,894
Capacity 5 7,722 2,770
Capacity 4 7,511 2,585

These undominated counts equal the legal counts within the original no-dominance labels.

The supplement verifies that equality through a separate legal-only recomputation.

The script is out/balance-experiment/study-01/legal-frontier-supplement.py.

Its SHA-256 is 589c917aa1c906e832add0b0d1b6403c325d08b5eee79fb10e0edae695927ef0.

The output is out/balance-experiment/study-01/legal-frontier-supplement.json.

Its SHA-256 is 4db14f6f776bb7032d2c8d8295eedc102f3bf0a5143e110693425b0085ea950c.

This supplement does not enter refits, screen, selection, or confirmation.

It adds no balance verdict.

The whole-game panel uses the prior six rosters and one Light Duelist roster.

The Light Duelist roster fields Dual Blades, Great Sword, and Hammer. This gives Hammer whole-game exposure.

All whole-game cells deploy one targetable Cooling Tender for each side. Both bots use platformTargets: true.

Whole-game cells retain the baseline platform position, movement, and target selection policy.

Complete exchanges, repeated-combat fixtures, and Momentum Charge fixtures omit launch platforms.

Isolate cohorts

The complete-exchange panel reruns the 15-package round robin for every mechanical profile.

It includes 120 unordered package pairs, both initiators, and 256 seeds.

The same-weapon sensitivity adds three Light Idris against Medium Ruko comparisons and both initiators.

The matched-class panel crosses Light, Medium, and Heavy for three weapons. It includes six class pairs and both initiators.

Together, these panels give 72,192 exchanges per profile and 1,516,032 declared exchanges.

The repeated panel crosses six packages, three stock targets, and declared attack policies.

It gives 45 cells per profile and 11,520 trials per profile. The declared total is 241,920 trials.

Each repeated trial uses a clear flat board at elevation zero. Ranged distance is six and melee distance is one.

The attacker uses Medium chassis, Ruko, Targeting head, two Duelist arms, Sprint legs, and Bare back.

Targets use the stock Courier with Vex, Foreman with Ilse, and Bastion with Sato.

Every weapon uses its Standard load and unlimited ammunition. The fixture preserves Heat, damage, ammunition, and status.

Ranged policies are ordinary Fire, Aimed Core, and Aimed disarm. Melee policies are targeted Core and targeted disarm.

The attacker makes one declared legal attack per activation. It vents and ends when the declared Heat rule requires it.

The target receives passive lifecycle processing. It takes no action outside the current automatic melee response.

Trials stop at combatant destruction or 16 attacker activations.

Target-event restricted time uses the observed activation. An absent event receives the fixed horizon of 16.

Early attacker destruction does not shorten restricted time. Competing attacker death and mutual destruction remain separate.

The Momentum fixture crosses distance two and three with Momentum off and on across 256 paired seeds.

It adds 1,024 exchanges. The declared isolate maximum is 1,758,976 rows.

Whole-game cohorts

Every whole-game matchup uses seven rosters, 28 unordered pairs, three maps, and four assignment cells.

The assignments cross two physical orientations with explicit First Side A and B.

The baseline trains on a 5 by 5 aggression grid. Seeds 120000 and 120001 produced 16,800 games.

The bounded zero-sum solver freezes one sampled policy for each map and pair.

The screen transfers those baseline policies to all 35 profiles. Seeds 130000 and 130001 produced 23,520 games.

The screen is a transferred-policy diagnostic. It is not an equilibrium certification for candidate profiles.

The opening diagnostic uses eight policy profiles on control mechanics.

It covers seven mirrors, new-ranged against mobile, and legacy against Light Duelists.

Three maps, four assignments, and seeds 140000 through 140007 give 6,912 declared games.

The diagnostic records both opening rounds and completes each game for outcome collection.

After selection, the standalone and combination each train on the 5 by 5 grid.

The selected training reuses seeds 120000 and 120001. It adds 33,600 declared games.

Confirmation compares control, selected standalone, and selected combination with their own frozen policies.

Seeds 230000 through 230015 give 16,128 declared confirmation games.

The pilot panel contains 128 conditions and 12,288 declared games.

It crosses 32 pilot configurations, Momentum off and on, and two mechanical context labels.

The panel uses eight seeds, three maps, four assignments, and fixed aggression 0.5.

Paid forms and prospective melee threat stay on in both pilot mechanics contexts.

The complete declared whole-game maximum is 109,248 games. The primary whole-game subset contains 90,048.

Every row below is taken from its phase seal and its manifest. The seal SHA-256 values are in the governance section.

Phase Units Blocks Seeds Policy basis Status
Baseline training 16,800 games 2 120000–120001 5 by 5 aggression grid Complete, sealed, trained
Isolates 1,758,976 rows 256 101000–101255 and 111000–111255 Declared fixture policies Complete, sealed, reported
Opening diagnostic 6,912 games 8 140000–140007 Frozen baseline policies Complete, sealed, reported
Screen 23,520 games 2 130000–130001 Frozen baseline policies Complete, sealed, selected, reported
Selected training 33,600 games 2 120000–120001 Candidate 5 by 5 grids Complete, sealed, trained
Confirmation 16,128 games 16 230000–230015 Each condition's frozen policy Complete, sealed, reported
Pilot panel 12,288 games 8 310000–310007 Fixed aggression 0.5 Complete, sealed, reported

Every declared row ran. No phase was reduced, truncated, or resampled after inspection.

All four baseline-training shards finished with 4,200 games each.

All four screen shards finished with 5,880 games each. Screen selection is complete.

All four isolate workers finished 439,744 rows each.

All four opening-diagnostic shards finished with 1,728 games each.

All four selected-training shards finished with 8,400 games each. The training produced 168 map-pair policies.

All four pilot shards finished with 3,072 games each.

All four confirmation shards finished with 4,032 games each. Confirmation validated 252 frozen map-pair policies before the run.

The isolate Momentum panel uses seeds 111000 through 111255. Every other isolate panel uses seeds 101000 through 101255.

Policy controls

Mixed policies use a separate deterministic RNG. Policy selection never consumes combat RNG.

Matched candidates share keyed uniform variates. Each candidate maps them through its own frozen policy distribution.

The archive records every variate and selected aggression action.

Paid forms use one deterministic greedy heuristic. A successful change costs one Quick and removes Full eligibility.

The policy can switch each hand once per activation. A switch cannot enable a second Fire from that hand.

Prospective threat uses legal future contact with current movement, obstacles, occupancy, and Budget.

Diagnostics separate full-melee-capable and contact-only projections. Zero remaining Quick adds no movement threat.

Position queries use the scored future hex. The acting unit vacates its old hex and blocks its new hex.

The cache key includes the enemy, future acting hex, and relevant state. Caches expire between activations.

The attack valuation remains a legacy single-profile approximation. It ignores common-TN and Piloting-pool toggles.

Actual melee resolution applies those toggles.

Selection and confirmation

The screen ranks profiles by equally weighted distinct-opponent roster payoff spread. Lower spread ranks first.

Eligibility requires declared round, no-death, proactive-attack, and maximum First Side bias guards.

Mean rounds must not exceed control by more than 0.75.

The no-death fraction must not exceed control by more than 0.10.

Mean proactive mech attacks must reach at least 0.75 times control.

Maximum absolute First Side bias across mirror and map cells must not exceed the control maximum by more than 0.10.

Physical-side bias remains a reported audit. It is not an eligibility guard.

The standalone must contain exactly one change. The combination must contain at least two factors.

Eligible ties use fewer factors and then lexical condition ID.

If no profile passes, the fallback first minimizes failed guards. It then chooses lower spread.

Remaining ties use fewer factors, then lexical condition ID.

Any fallback receives a failed-screen exploratory label.

Selection cannot add an undeclared profile. Confirmation cannot change, replace, or extend a selected profile.

Screen selection

The screen is a selection step, not a result. Confirmation is the result. Read this section as the record of how the two candidates were chosen.

The validated selection artifact is out/balance-experiment/study-01/screen.json.selection.json.

Its SHA-256 is d9a4feb05f4a2416cd8e5ac017bebdd3c02aaa0bae92b53125b3437d65cad9cc.

Both tables in this section come from out/balance-experiment/study-01/screen.json.screen.report.json. The roster-mean table is recomputed from that report's matchup cells with the analyzer's own weighting, because the screen report holds no roster block.

The screen uses two seed blocks and fixed baseline policies. It is not a candidate-trained equilibrium.

All 35 profiles passed every declared guard.

The control maximum absolute First Side bias is 0.50, which is the metric's mathematical upper bound.

The control-relative addition of 0.10 gives an effective bound of 0.60. This guard cannot filter this screen.

Every candidate also records an actual maximum of 0.50. Passing this guard does not demonstrate fairness.

The guards.mirror.values fields are per-cell candidate-minus-control deltas. They are not actual cell biases.

The separate candidate and baseline maximum fields contain the actual maxima.

TN10 is the screen-selected standalone. It passed with a 41.67 percentage-point spread.

The control spread is 50.00 points.

The screen-selected combination is tn11+hammer2+blade-cap4+core-plus2@paid-forms.

It passed with a 48.26 percentage-point spread.

Profile Spread Round delta No-death delta Activity ratio Failed guards
control 50.00 pp +0.000 +0.00 pp 1.000 None
tn11 54.86 pp +0.100 +0.00 pp 0.998 None
hammer2 53.47 pp -0.012 +0.00 pp 0.995 None
tn11+hammer2 53.47 pp +0.055 +0.00 pp 0.990 None
blade-cap4 50.69 pp -0.009 +0.00 pp 0.998 None
tn11+blade-cap4 55.56 pp +0.088 +0.00 pp 0.997 None
hammer2+blade-cap4 52.78 pp -0.016 +0.00 pp 0.993 None
tn11+hammer2+blade-cap4 54.17 pp +0.051 +0.00 pp 0.991 None
core-plus2 52.08 pp +0.152 +0.15 pp 1.057 None
tn11+core-plus2 50.00 pp +0.249 +0.15 pp 1.057 None
hammer2+core-plus2 56.94 pp +0.147 +0.15 pp 1.054 None
tn11+hammer2+core-plus2 52.78 pp +0.196 +0.15 pp 1.055 None
blade-cap4+core-plus2 51.39 pp +0.147 +0.15 pp 1.056 None
tn11+blade-cap4+core-plus2 50.69 pp +0.250 +0.15 pp 1.057 None
hammer2+blade-cap4+core-plus2 56.94 pp +0.146 +0.15 pp 1.053 None
tn11+hammer2+blade-cap4+core-plus2 53.13 pp +0.195 +0.15 pp 1.054 None
tn10 41.67 pp +0.031 +0.00 pp 0.985 None
tn12 44.44 pp +0.086 -0.15 pp 0.999 None
blade-cap5 50.00 pp +0.000 +0.00 pp 1.000 None
core-plus4 55.56 pp +0.257 +0.45 pp 1.113 None
pilot-pool-off 56.94 pp +0.076 -0.15 pp 1.011 None
control@momentum 50.00 pp +0.000 +0.00 pp 1.000 None
control@paid-forms 52.08 pp -0.001 -0.60 pp 1.053 None
control@momentum+paid-forms 52.08 pp -0.001 -0.60 pp 1.053 None
control@prospective-melee-threat 59.03 pp +0.161 +4.91 pp 0.957 None
control@momentum+prospective-melee-threat 59.03 pp +0.161 +4.91 pp 0.957 None
control@paid-forms+prospective-melee-threat 59.03 pp +0.155 +4.61 pp 1.006 None
control@momentum+paid-forms+prospective-melee-threat 59.03 pp +0.155 +4.61 pp 1.006 None
tn11+hammer2+blade-cap4+core-plus2@momentum 53.13 pp +0.195 +0.15 pp 1.054 None
tn11+hammer2+blade-cap4+core-plus2@paid-forms 48.26 pp +0.164 -0.45 pp 1.104 None
tn11+hammer2+blade-cap4+core-plus2@momentum+paid-forms 48.26 pp +0.164 -0.45 pp 1.104 None
tn11+hammer2+blade-cap4+core-plus2@prospective-melee-threat 57.64 pp +0.347 +5.36 pp 1.008 None
tn11+hammer2+blade-cap4+core-plus2@momentum+prospective-melee-threat 57.64 pp +0.347 +5.36 pp 1.008 None
tn11+hammer2+blade-cap4+core-plus2@paid-forms+prospective-melee-threat 53.47 pp +0.333 +5.21 pp 1.053 None
tn11+hammer2+blade-cap4+core-plus2@momentum+paid-forms+prospective-melee-threat 53.47 pp +0.333 +5.21 pp 1.053 None

Round and no-death values are changes from control. No-death changes and spreads use percentage points.

Activity is the candidate-to-control proactive mech attack ratio. Values are rounded for display.

Roster Control mean TN10 mean Selected combination mean
Legacy 52.08% 52.78% 50.69%
New ranged 67.36% 66.67% 65.28%
New melee 29.17% 26.39% 29.86%
Transformers 17.36% 25.00% 18.75%
Mobile 58.33% 56.25% 59.72%
Heavy anchor 59.72% 61.11% 58.68%
Light Duelists 65.97% 61.81% 67.01%

These means weight the six distinct opponents and three maps equally.

Every matched pair that differs only by Momentum is bit-identical in headlines, matchups, mirrors, and per-map cells. The 35 profiles hold 27 distinct conditions. 5,376 of the 23,520 screen games carry no new information.

The protocol declares Momentum a negative control in the seven primary rosters, because the mixed pilot trio leaves D3 inactive. The opening review adds a needed qualification. Pilot Ruko Han carries the Momentum Ability and is fielded on every board. The engine gate also requires a move of three or more hexes. The zero is therefore two gates, not an absent carrier.

Two seed blocks do not support a significance claim. Every screen interval is the range of three resample patterns. The screen does not confirm either selection.

Neither selection changes a playable rule or default.

The screen's own numbers did not survive confirmation intact. Control's screen spread of 50.00 pp rose to 57.99 pp at confirmation with the same seven rosters. The 50.00 pp figure came from two blocks at eight games per cell, and the policy variate key contains the phase, so the screen and confirmation drew different aggression actions. Do not quote 50.00 pp as the study's baseline.

Confirmation: the primary result

Confirmation is the study's primary result. Every number in this section comes from out/balance-experiment/study-01/confirmation.json.confirmation.report.json.

The one exception is the roster-mean table. That report holds no roster block, so the roster means are recomputed from its 84 matchup cells with the analyzer's own weighting: distinct opponents only, the reverse cell mirrored as one minus the rate, six opponents and three maps weighted equally.

Confirmation ran three conditions on 16 fresh seed blocks, seeds 230000 through 230015. Each condition played 5,376 games, for 16,128 rows. Each condition covers 84 matchup cells at 64 games each. Each condition holds 21 mirror cells.

Each arm used its own trained aggression policy. Control used the frozen baseline grid. tn10 and the combination used the selected-training grid.

The policy uniform is keyed without the condition. All three arms consumed the same variate in the same cell. The pairing is per game, not only per block.

The preregistered selection metric is roster payoff spread. Spread is the maximum minus the minimum of the seven roster means. Smaller is more even.

Spread

Condition Spread Paired difference from control ci95 Blocks
control 57.99 pp 0.00 pp [0.00, 0.00] 16
tn10 48.35 pp −9.64 pp [−14.41, −3.99] 16
tn11+hammer2+blade-cap4+core-plus2@paid-forms 60.16 pp +2.17 pp [−1.48, +5.82] 16

tn10 confirmed. Its interval excludes zero in the smaller-is-better direction. The screen predicted −8.33 pp. Confirmation gives −9.64 pp on fresh seeds and its own trained policy. Direction and size both replicate.

The combination did not confirm. Its interval includes zero and its point estimate is in the wrong direction. Spread increased by 2.17 pp. Its screen estimate was −1.74 pp with an interval of [−1.74, +1.39] pp that already included zero. The sign flipped between selection and confirmation.

The spread levels of 57.99 pp, 48.35 pp and 60.16 pp are bare point estimates. No spread level anywhere in the study carries an interval.

Sixteen blocks give 300,540,195 distinct resample patterns. The bootstrap draws 4,000 of them. The percentile grid is limited by the repetition count, not by block combinatorics.

Roster means

Each mean is the roster's payoff share over six distinct opponents and three maps, mirrors excluded. Each column sums to 350.00 pp.

Roster Control tn10 Change Combination Change
legacy 52.60 pp 53.13 pp +0.52 pp 55.30 pp +2.69 pp
new-ranged 59.98 pp 67.80 pp +7.81 pp 59.72 pp −0.26 pp
new-melee 29.17 pp 30.47 pp +1.30 pp 29.86 pp +0.69 pp
transformers 15.97 pp 19.44 pp +3.47 pp 17.36 pp +1.39 pp
mobile 52.86 pp 50.95 pp −1.91 pp 55.64 pp +2.78 pp
heavy-anchor 65.45 pp 61.98 pp −3.47 pp 54.60 pp −10.85 pp
light-duelists 73.96 pp 66.23 pp −7.73 pp 77.52 pp +3.56 pp

No per-roster interval exists. The confirmation report holds no roster block. These means and their changes are point estimates. The finest paired intervals in the file are the 84 matchup cells.

tn10 compresses by reordering, not by a uniform squeeze. The floor rises 3.47 pp. The ceiling falls 7.73 pp, and new-ranged replaces light-duelists as the top roster at 67.80 pp.

The combination moves the two ends in opposite amounts. The floor rises 1.39 pp and the ceiling rises 3.56 pp. Its largest roster effect is heavy-anchor at −10.85 pp. That move is interior, so the selection metric cannot see it.

Headline metrics that moved

Each difference is the candidate minus control on 16 blocks. Every interval listed here excludes zero. Counts are per game unless marked pp.

Metric Control tn10 change ci95
payoff 44.98 pp +3.34 pp [+2.18, +4.46]
noDeath 3.85 pp +0.32 pp [+0.06, +0.58]
rounds 6.243 +0.039 [+0.001, +0.077]
meleeStarts 4.041 +0.262 [+0.180, +0.346]
parries 9.661 +3.029 [+2.696, +3.389]
shieldParries 3.177 +0.435 [+0.358, +0.511]
firstDeathRestrictedTime 3.482 +0.048 [+0.028, +0.068]
heatAdded 25.015 −0.357 [−0.565, −0.153]
limb:movement 1.036 −0.031 [−0.058, −0.007]
limb:survivedNextActivation 71.19 pp −1.31 pp [−2.66, −0.04]

tn10 left these flat: wipes, part disables, proactive attacks, ending heat, First Side payoff, side A payoff, limb activations, limb attack, limb support, limb maintenance-only, and limb censoring.

Two tn10 exclusions are narrow. The rounds lower endpoint is +0.001297 rounds. The limb:survivedNextActivation upper endpoint is −0.000430, which is −0.0430 pp. Both exclude zero only at full precision.

Metric Control Combination change ci95
noDeath 3.85 pp +1.90 pp [+1.41, +2.36]
wipe 51.17 pp −9.02 pp [−10.75, −7.18]
rounds 6.243 +0.180 [+0.143, +0.217]
proactiveAttacks 14.713 +1.862 [+1.738, +1.998]
meleeStarts 4.041 +0.418 [+0.325, +0.510]
parries 9.661 +1.499 [+1.192, +1.811]
partDisables 6.003 +0.071 [+0.007, +0.132]
firstDeathRestrictedTime 3.482 +0.300 [+0.270, +0.330]
heatAdded 25.015 +4.613 [+4.370, +4.852]
endingHeat 9.483 +1.572 [+1.437, +1.709]
firstSidePayoff 50.07 pp +1.79 pp [+0.24, +3.16]
formChanges 0.000 +0.357 [+0.351, +0.364]
limb:activations 1.239 +0.117 [+0.077, +0.156]
limb:attack 0.555 +0.099 [+0.071, +0.125]
limb:movement 1.036 +0.071 [+0.030, +0.110]
limb:support 0.705 +0.042 [+0.013, +0.071]
limb:noLaterActivationCensored 5.08 pp +1.33 pp [+0.56, +2.17]
limb:survivedNextActivation 71.19 pp +3.90 pp [+2.63, +5.20]

The combination left payoff, shield parries, side A payoff and limb maintenance-only flat.

Read the two candidates plainly. tn10 buys evenness with defence. Parries rise by about three per game and no-death games rise slightly. Lethality does not change, because wipes and part disables do not move. Turn-order fairness does not change.

The combination trades a wider roster spread and a stronger turn-order advantage for markedly fewer wipes and a longer, hotter, busier game.

The limb: denominators are themselves outcomes. They are 7,003 records under control, 6,972 under tn10, and 7,707 under the combination. The combination produces about 10 percent more limb-agency observations, so its limb: differences mix a rate change with a composition change.

Five headline metrics are constant at zero in all three conditions. They are field repair, riposte, scramble, ability momentum, and Momentum dice. Three are null by instrumentation: Pace, Deadeye, and threat-changed choices.

formChanges is zero in control and in tn10. The transformers roster is the only roster with form-capable equipment. It never changed form in 10,752 games, while setting the floor of the primary metric in every arm.

First Side and mirrors at confirmation

Control First Side payoff by map, 1,792 games per map. The levels carry no interval.

Map Control First Side payoff Control side A payoff
Quarry 49.94 pp 50.61 pp
Causeway 52.23 pp 50.67 pp
Foundry 48.05 pp 50.50 pp

Control overall First Side payoff is 50.07 pp. Control overall side A payoff is 50.60 pp. The per-map range is 4.18 pp.

Paired First Side differences by map, 16 blocks:

Map tn10 change ci95 Combination change ci95
Quarry −0.59 pp [−3.43, +2.18] −1.17 pp [−4.02, +1.40]
Causeway −2.01 pp [−5.47, +1.28] +4.80 pp [+3.18, +6.36]
Foundry +0.28 pp [−2.46, +3.01] +1.73 pp [−2.40, +5.80]

The combination's Causeway First Side share is 57.03 pp. Its overall First Side share is 51.86 pp, and that difference also excludes zero.

The 21 mirror cells hold 64 games each. The mirror statistic is the absolute distance from 0.5, with the direction discarded.

Statistic Control tn10 Combination
Maximum First Side magnitude 0.3750 0.3438 0.5000
Cells at the 0.500 ceiling 0 0 3
Cells at or above 0.250 5 3 8
Maximum physical magnitude 0.0938 0.1250 0.1563

Three mirror cells under the combination are 64-to-0 First Side sweeps. They are causeway/heavy-anchor, causeway/light-duelists, and quarry/transformers. All three carry a physical magnitude of exactly 0.0, which is the signature of a pure turn-order lock. Control's ceiling at the same resolution is 0.3750, which is 56 games to 8 in one cell.

Those three cells appear in the matchup table as perfectly even 0.5000 cells with [0.00, 0.00] intervals. The four balanced assignments cancel the sweep exactly. A reader of the matchup table alone will record them as the three most even cells in the study.

The protocol does not re-run the screen guards at confirmation. Re-evaluated on confirmation numbers the rounds guard, the no-death guard and the activity guard pass for both candidates. The mirror guard passes for tn10 at 0.3438 against control's 0.3750. The combination reaches 0.5000 against control's 0.3750, which is 12.5 pp against a 10 pp allowance, so it would fail.

Confirmation carries no interaction result

The confirmation report has no matchedFactorInteractions block. The analyzer emits that block only for the screen phase.

The absence is structural, not an omission. The confirmed standalone is not a component of the confirmed combination. tn10 and tn11 are different doses of the same lever. The protocol's ABC − AC − BC + C form is not computable from three arms without matched component-alone backgrounds.

No factor inside the combination can be credited or blamed from confirmation. The screen block remains the study's only interaction evidence.

Turn-order fairness

Turn-order fairness is reported from the opening diagnostic, the confirmation phase, and the First Side supplement. The supplement sits outside the frozen source closure. It is descriptive, and it did not influence selection.

Sources for this section: screen.json.opening.report.json, confirmation.json.confirmation.report.json, first-side-supplement.json for the opening, and first-side-supplement-confirmation.json for the replication. Every level with an interval comes from a supplement. Every level without one comes from a frozen report.

The screen's First Side guard was uninformative. Control's maximum absolute mirror bias was 0.50, which is the metric's mathematical ceiling. Six of 21 control mirror cells were swept 8 games to 0 by turn order at eight games per cell. All six had a physical bias of exactly 0.000, so side A split evenly while the first mover took every game.

The opening diagnostic was built as the substitute. Control's First Side share by map, 288 games per map, with the supplement's whole-block interval:

Map Opening control First Side share Block interval Blocks Games
Quarry 58.68 pp [53.1, 64.9] 8 288
Foundry 44.10 pp [39.6, 48.6] 8 288
Causeway 39.24 pp [31.6, 47.2] 8 288
Pooled 47.34 pp [43.3, 51.0] 8 864

Those intervals come from the supplement, not from the frozen analyzer. The opening report itself attaches no interval to any First Side level.

On confirmation's 16 fresh seed blocks with trained policies the map-level effects do not replicate:

Map Confirmation control First Side share Block interval Blocks Games
Quarry 49.9 pp [47.9, 52.1] 16 1,792
Foundry 48.0 pp [45.4, 50.8] 16 1,792
Causeway 52.2 pp [49.7, 54.6] 16 1,792
Pooled 50.1 pp [48.7, 51.3] 16 5,376

All four intervals cover even.

Pooled over mirrors only, where roster advantage is absent, part of the effect persists. First-mover share by map, opening then confirmation:

Map Opening mirrors, 8 blocks Confirmation mirrors, 16 blocks
Quarry 64.3 pp 54.9 pp
Foundry 44.2 pp 42.9 pp
Causeway 35.7 pp 48.2 pp

These mirror pools are point estimates. The supplement publishes no interval for the mirror pool.

Quarry first-mover and Foundry second-mover persist attenuated. Causeway does not replicate.

Specific roster-by-map cells replicate across both designs. Light-duelists on Quarry gives the first mover 0.88 in both, at 32 games then 64. Heavy-anchor on Causeway is strongly second-mover in both, 0.00 then 0.19. New-melee on Foundry reads 0.12 then 0.19.

Two cells flip. Legacy on Quarry reads 0.75 then 0.34. New-ranged on Quarry reads 0.62 then 0.44.

Read this as a roster-by-map effect concentrated in mirrors. It is not a map constant. The opening design amplified it, because seven of its nine pairings are mirrors and it transferred baseline policies. Confirmation covers 28 pairings with own-trained policies and dilutes the effect to even at the map level.

The candidates differ. tn10 is even on every map. The combination gives the first mover 57.0 pp on Causeway, interval [55.1, 58.8], and 51.9 pp pooled, interval [50.2, 53.6].

In the opening, all six mirror cells at a share of zero or one are second-mover sweeps. causeway/heavy-anchor is swept in all four distinct arms. quarry/transformers is swept in the two paid-forms arms.

The opening report has no per-assignment cell. The rows contain the orientation and the First Side letter. The frozen aggregator never keys on them.

Results by experiment family

Each family states its phase and its block count beside every number. A screen number on two blocks is not upgraded to a finding.

1. Melee opportunity target and Piloting-pool sensitivity

Source: screen.json.isolates.report.json for the isolates, confirmation.json.confirmation.report.json for the whole game.

Control sets no common target number. The melee threshold is the defender's Evasion. The dose conditions replace it with a flat number.

All 15 exchange packages have Evasion 11. In the exchange panel control therefore is TN 11, and tn11 is bit-identical to control across all 240 exchange cells and all 29 metrics. Any statement that tn11 did nothing is about the fixture, not the rule.

In the class panel control's thresholds are Evasion 14 for Light, 12 for Medium, and 9 for Heavy.

Exchange panel, 256 blocks, 61,440 rows per condition. Paired differences from control:

Metric Control tn12 change ci95 tn10 change ci95
initiator usable offensive dice 2.144 −0.179 [−0.206, −0.153] +0.171 [+0.147, +0.196]
defender usable offensive dice 2.155 −0.174 [−0.192, −0.156] +0.175 [+0.159, +0.192]
initiator parried incoming strikes 0.659 −0.065 [−0.074, −0.057] +0.071 [+0.062, +0.080]
defender parried incoming strikes 1.104 −0.094 [−0.105, −0.083] +0.084 [+0.074, +0.095]
initiator zero available response 4.58 pp +1.85 pp [+1.20, +2.53] −1.80 pp [−2.37, −1.25]
initiator accepted strikes 0.594 −0.021 [−0.036, −0.007] +0.018 [+0.004, +0.032]
initiator body damage dealt 3.325 −0.068 [−0.144, +0.006] +0.063 [−0.008, +0.135]
fighter0 alive 86.56 pp +0.26 pp [−0.10, +0.64] −0.18 pp [−0.56, +0.18]
mutual survival 75.21 pp +0.33 pp [−0.32, +0.98] −0.24 pp [−0.88, +0.39]

The dose response is monotone and nearly antisymmetric about control on every dice-availability and traffic metric. It does not reach lethality. No exchange survival interval excludes zero, and no damage-dealt interval excludes zero. Usable shield dice are exactly unchanged at every dose.

The class panel is the only panel that separates Light, Medium and Heavy. Its cell splits carry no interval. Under control a Light initiator deals 11.27 body damage to a Heavy defender and kills it 31.77 percent of the time. A Heavy initiator deals 0.91 to a Light defender and kills it 8.98 percent of the time. The cross-class death gap is 22.8 pp against the Heavy.

Every dose closes that gap. tn12 leaves −2.1 pp, tn11 leaves −0.5 pp, and tn10 leaves +3.4 pp. Heavy-defender deaths fall from 31.77 percent to 15.76, 17.58 and 21.88 percent. Light-defender deaths rise from 8.98 percent to 17.84, 18.10 and 18.49 percent.

The gap closes by killing Heavies less, not by killing Lights more. Class-panel mutual survival rises at every dose: +0.52 pp [−0.39, +1.39] at tn12, +1.55 pp [+0.40, +2.66] at tn11, +1.49 pp [+0.31, +2.65] at tn10. Damage dealt falls on both sides at every dose.

tn10 raises class-panel usable offensive dice by +0.540 [+0.491, +0.588] and defender parries by +0.313 [+0.291, +0.336]. The extra dice arrive on defence as well as offence, and parries rise faster than strikes.

pilot-pool-off is bit-identical to control in all 240 exchange cells and all 36 class cells. The toggle bites only where a pilot has Piloting 2 or more. No pilot in those two panels does.

Whole game: the screen ranked tn10 first at 41.67 pp on two blocks. Confirmation gives −9.64 pp [−14.41, −3.99] on 16 blocks. tn10 is confirmed on the preregistered metric. It evens the field through defence and reordering, not through melee lethality.

2. Hammer opportunity increase

Source: screen.json.isolates.report.json, 256 blocks.

hammer2 changes exactly 30 of the 240 exchange cells and 6 of the 45 repeated cells. The sensitivity and class panels are bit-identical, because the Hammer is not in them.

The 30 changed exchange cells are a clean subset with equal denominators, so the panel interval rescales exactly by 8. The rescaled 256-block paired intervals for that subset:

Metric Difference ci95
initiator usable offensive dice +0.271 [+0.240, +0.302]
defender usable offensive dice +0.326 [+0.284, +0.371]
initiator accepted strikes −0.082 [−0.105, −0.058]
defender accepted strikes −0.056 [−0.093, −0.019]
fighter0 alive +2.20 pp [+0.81, +3.61]
fighter0 core lost −0.351 [−0.494, −0.201]
initiator body damage dealt −0.201 [−0.413, +0.013]
mutual survival +1.15 pp [−1.03, +3.32]

Recast onto the Hammer side, as point estimates over the 30 cells with no interval at that cut: the Hammer deals 1.006 more body damage, its opponent deals 1.269 less, the Hammer dies 7.85 pp less often, and its opponent dies 6.71 pp more often.

The Hammer was weak to begin with. Over the 28 non-mirror exchange cells in which each package appears, it ranks 13th of 15 on damage dealt at 1.879 and last of 15 on net kill differential at −0.189. Under hammer2 it moves to 9th on damage at 2.958 and 10th on net at −0.033. It stays below the midpoint.

In the six repeated-panel Hammer cells, restricted time-to-kill moves +0.47 against the Courier under the Core policy, +0.20 against the Foreman, and −0.22 against the Bastion. Attacker death against the Bastion falls 3.9 pp under the Core policy and 4.7 pp under the disarm policy.

Whole game: the screen scored hammer2 at 53.47 pp on two blocks, worse than control. It was never confirmed alone. It entered confirmation only inside the failed combination. No whole-game claim can be made for it.

Source: frontiers.json, legal-frontier-supplement.json, screen.json.isolates.report.json, screen.json.screen.report.json.

The isolates contain no evidence about Capacity in either direction. blade-cap4 is bit-identical to control across all 327 of its cells, on every metric of every cell. Those 327 are 240 exchange, 6 sensitivity, 36 class, and 45 repeated. So is blade-cap5.

The inertness propagates through the whole factorial. Each blade-cap4 combination equals its blade-cap4-free twin exactly. The 16-cell mechanical cube therefore holds 8 distinct profiles in this phase.

The reason is in the fixtures. Every build used in the isolate fixtures already fits inside Capacity 4, so Capacity 5 and Capacity 4 produce the same builds and the same RNG stream.

Assembly is where Capacity does something. Only the Light Duelists roster needed refits. Team Weight falls from 97 to 96 to 95. Only support arms change. Active weapon-source Handling stays at 1.

Whole game: the screen scored blade-cap4 at 50.69 pp and blade-cap5 at 50.00 pp, both on two blocks. Neither entered confirmation alone.

The legal-only frontier supplement is descriptive. It adds no balance verdict.

The family is inconclusive.

4. Core Durability and disarm timing

Source: screen.json.isolates.report.json, repeated panel, 256 blocks, 11,520 rows per condition.

Keep the two time series apart. Restricted time assigns the fixed horizon of 16 activations when the event never happens. Observed conditional time uses only the trials where the event happened. They are not the same statistic.

Metric Control core-plus2 change ci95 core-plus4 change ci95
core event activation, conditional 4.051 +0.406 [+0.387, +0.426] +0.808 [+0.779, +0.835]
disarm event activation, conditional 2.871 +0.122 [+0.098, +0.147] +0.240 [+0.206, +0.275]
core timing, restricted 5.061 +0.355 [+0.322, +0.386] +0.705 [+0.660, +0.749]
disarm timing, restricted 10.848 −0.167 [−0.191, −0.143] −0.290 [−0.322, −0.259]
weapon disabled 39.25 pp +1.65 pp [+1.41, +1.88] +2.98 pp [+2.66, +3.29]
core destroyed 91.55 pp +0.15 pp [−0.10, +0.40] +0.30 pp [−0.03, +0.65]
attacker destroyed 8.28 pp −0.23 pp [−0.48, +0.01] −0.52 pp [−0.85, −0.20]
alive at the horizon 0.17 pp +0.08 pp [+0.03, +0.14] +0.22 pp [+0.14, +0.30]
activations 4.069 +0.423 [+0.406, +0.441] +0.865 [+0.840, +0.891]
attacks 3.440 +0.312 [+0.299, +0.325] +0.635 [+0.618, +0.653]
vents 0.629 +0.111 [+0.104, +0.119] +0.230 [+0.218, +0.241]
target core lost 12.301 +1.921 [+1.897, +1.945] +3.875 [+3.839, +3.913]

On the like-for-like conditional scale, plus two Core lengthens killing by 0.406 activations and disabling by 0.122. The ratio is about 3.3. Plus four roughly doubles both, so the dose response is close to linear.

The restricted disarm clock moves the opposite way. Longer fights let more disarms land inside the horizon, so weaponDisabled rises by 1.65 pp.

The 16-activation cap almost never binds. Alive-at-the-horizon is 0.17 percent panel-wide under control. It is nonzero in only two cells.

Attacker death is the real competing outcome. It is 8.28 percent panel-wide, and 30 to 79 percent in every melee cell against the Courier. In those cells the restricted time of 8.6 to 13.5 activations is dominated by the no-event rule, while the observed conditional time is 2.4 to 4.1 and is conditional on the attacker surviving.

Whole game: Core +2 was never confirmed alone. It entered confirmation only inside the failed combination. The combination's wipe fall of 9.02 pp cannot be attributed to it.

5. Momentum, paid forms, and prospective melee threat

Sources: screen.json.opening.report.json at 8 blocks, screen.json.screen.report.json at 2 blocks, screen.json.isolates.report.json at 256 blocks, selected.json.pilots.report.json at 8 blocks, confirmation.json.confirmation.report.json at 16 blocks.

Melee Momentum never fired in any whole game. The counter reads zero in all 6,912 opening games, all 23,520 screen games, and all 16,128 confirmation games. The rule was enabled in the arms that declare it, and pilot Ruko Han carries the Momentum Ability on every board.

The isolate Momentum panel is the only isolate place it fired. Three of the four cells are bit-identical. Only charge-3 with Momentum on differs. That matches the declared design, because the two-hex row is the eligibility control and the disabled-rule row is the option control.

The panel headline pools the two distances, so it is exactly half the Charge-3 effect. Doubling gives the exact Charge-3 paired interval on 256 blocks:

Metric Charge 3, Momentum off Charge-3 difference ci95
target alive 78.13 pp −3.52 pp [−9.77, +2.73]
target core lost 4.742 +0.422 [−0.355, +1.160]
mutual survival 73.05 pp −3.91 pp [−10.94, +3.13]

Every Momentum interval includes zero. The point estimates go the expected way. At 256 blocks and one exchange per block, none of it separates from zero.

The pilot panel is the only place Momentum fired in whole games. It produced 117 melee Momentum dice across 12,288 games, all from Mika Rell and Ruko Han on the candidate side. The fixed opponent's control Ruko produced none in 6,144 games, so Momentum stays a true negative control on the opponent side. Turning the rule on moved no payoff interval off zero. The largest effect is +3.12 pp with an interval of [0.00, +7.29].

The Momentum counter measures the melee variant only. ability:momentum is a literal copy of momentumDice. The live ranged Momentum bonus is applied in every arm and never counted. Do not read a zero there as proof that the Ability did not fire.

Paid forms have a real mechanical surface in the whole-game panels. Form changes rise to 0.357 per game [+0.351, +0.364] inside the combination at confirmation. In the opening they rise 0.368 per game [+0.340, +0.394]. Opening heat added rises 2.536 [+2.078, +2.969], parries fall 1.167 [−1.631, −0.709], shield parries fall 0.600 [−0.692, −0.508], melee starts fall 0.167 [−0.286, −0.039], and wipes fall 3.0 pp [−5.0, −1.0].

The transformers roster is the only roster with form-capable weapons. It never changed form in control or in tn10, across 10,752 confirmation games, and it sets the floor of the primary metric in every arm. With paid forms on, it gains only 1.39 pp.

Prospective melee threat is in no confirmed candidate. The screen scored it at 59.03 pp spread, which is 9.03 pp worse than control on two blocks. In the opening, 8 blocks, it cuts melee starts 0.684 [−0.860, −0.532], parries 1.966 [−2.590, −1.417], shield parries 0.743 [−1.126, −0.323], part disables 0.362 [−0.447, −0.279], and proactive attacks 0.525 [−0.727, −0.337]. It raises no-death games 5.3 pp [+3.8, +6.5], first-death restricted time 0.307 [+0.264, +0.355], and rounds 0.142 [+0.043, +0.243].

The factor's own decision counter is measured in the opening phase only. It is derived from opening counterfactual rows, so it is null in the screen, pilot and confirmation reports by construction. In the opening it is the least distinguishable number in its own table: −0.012 [−0.031, +0.001] under paid forms and +0.005 [−0.060, +0.065] under prospective threat. It counts changed decisions per game and has no decision denominator.

6. Pilot stats and ability access

Source: selected.json.pilots.report.json, 8 blocks, 12,288 games.

These are controlled diagnostics against one fixed opponent at fixed aggression 0.5. They are not equilibrium, not a faction rank, and not a both-sides result.

The 128 condition blocks carry no interval. The pilots phase has no condition named control, so every headline paired interval, the spread, and the mirrors are null. Every interval quoted here comes from the controlled contrasts block, which contrasts four axes and never compares one faction to another.

Native stats matter for two trios. Normalizing to 1/1/1 costs FSU payoff −0.198 [−0.333, −0.083] in the control arm and −0.135 [−0.219, −0.052] in the selected arm. Yutani shows the same sign in both arms and clears zero only in the selected arm at −0.125 [−0.281, −0.010]. Hauer, Dioscuri and B&B span zero in both arms.

FSU's result is confounded. It is the only trio with a live intra-trio Bond on the board, Marrow and Ruko. Its stats and abilities contrasts sit on top of a plus die no other trio receives.

Losing the ability package costs payoff with an interval excluding zero for Yutani and B&B in both arms, and for FSU in the selected arm. Yutani reads −0.188 [−0.281, −0.094] in the control arm and −0.188 [−0.344, −0.042] in the selected arm. B&B reads −0.135 [−0.250, −0.031] and −0.115 [−0.198, −0.042]. Their proactive attacks fall about 1.3 to 1.7 per game, with intervals excluding zero.

Yutani and B&B are exactly the two trios that carry Pace. Pace has no proc counter.

The Yutani subsets resolve onto Pace. Every subset that contains the Pace pilot is statistically indistinguishable from the full trio on payoff. Every subset that lacks him is clearly below it. Subset minus all three, control mechanics, native stats, Momentum off, which is the same slice as the two paragraphs above:

Subset Active abilities Payoff difference ci95
none None −0.188 [−0.281, −0.094]
Mika Momentum −0.135 [−0.229, −0.052]
Tavi Scramble −0.198 [−0.344, −0.073]
Mika and Tavi Momentum, Scramble −0.167 [−0.260, −0.083]
Vex Pace −0.094 [−0.219, +0.042]
Mika and Vex Momentum, Pace −0.010 [−0.063, +0.052]
Tavi and Vex Scramble, Pace −0.031 [−0.167, +0.135]

The point estimates are identical on the Momentum-on slice. Only the interval endpoints differ.

Removing Scramble alone or Momentum alone costs nothing detectable. The subsets are implemented as per-pilot toggles. They coincide with Pace, Momentum and Scramble only because each Yutani pilot owns exactly one of the three.

52 of the 128 contexts are byte-identical to another context once the condition-derived labels are neutralized. The 128 labelled contexts reduce to 76 distinct game sets, in 40 singletons, 32 pairs, 2 groups of four and 2 groups of eight, so 4,992 of the 12,288 games are exact re-simulations. Most of those pairs are the legitimate Momentum-off and Momentum-on twins where no Momentum pilot is active. The cross-faction collapses are not legitimate: 8 of the 64 pilot-configuration cells duplicate another cell. Hauer and Dioscuri are the same games once stats are normalized. Hauer, Dioscuri, B&B and Yutani are all the same games at normalized stats with abilities off. The cause is that pilot Initiative never reaches combat.

Paid forms had no mechanical surface in this panel. Form changes are exactly zero in all 128 contexts, because the fixed loadout has no mode-switching weapon.

Rounds is at its cap in essentially every game, between 6.927 and 7.000. It is not a pacing result here.

The mechanical arm makes games busier and less lethal without moving the result. The slice is the 40 mechanics-axis contrasts at the two declared ability levels, all abilities off and all abilities on: 5 trios by 2 stat levels by 2 ability levels by 2 Momentum levels. Payoff intervals exclude zero in only 5 of those 40 cells, and with opposite signs. No-death games rise in 27 of 40 with intervals excluding zero, and never fall. Proactive attacks rise in 31 of 40 and never fall. Wipes fall in 6 of 40 and never rise.

Measurements and uncertainty

Melee isolates report offensive and shield opportunities separately. Zero response means neither kind is available.

Defender participation requires an accepted strike or parry. Shield parries count.

Repeated trials report destruction, disable, Heat, attacks, vents, action cost, restricted time, and competing outcomes.

Whole games report payoff, rounds, no-death games, wipes, first death, part loss, and proactive attacks.

They also report melee starts, parries, form changes, Momentum dice, threat-changed choices, Heat, and explicit ability events.

Part-loss agency uses part_destroyed events for arms and Legs.

It measures survival to another own activation, later activations, action categories, and maintenance-only activations.

Off-turn reactions do not count as own-activation activity. Missing later activations remain censored.

Opening diagnostics retain trajectories, legal alternatives, scored destinations, cover, sight, threats, contact, attacks, and scoring.

Pilot ability measures require explicit events. Unsupported ability counters remain null.

Intervals use 4,000 complete-seed bootstrap resamples with seed 9123001.

Each resample keeps maps, pairs, assignments, policies, candidates, and counterfactuals linked inside its seed block.

Variable-denominator metrics pool numerators and denominators before division. Zero-observation blocks stay in every resample.

Undefined denominator comparisons remain null. Reports retain observed denominators and valid-resample counts.

What the intervals are, and what they are not

Every interval in every report is a paired candidate-minus-control interval. Control's own interval is identically [0.00, 0.00] by construction.

spread.ci95 is the interval of the paired difference. It is never the interval of the spread level. The two sit next to each other in the artifact and are easy to confuse. Control's [0.00, 0.00] is the giveaway. No spread level anywhere in this study carries an interval.

No per-roster interval exists in any report. Roster means and their changes are point estimates.

The resolution of an interval follows its block count. The block counts below come from each phase's own report artifact.

Phase Blocks Distinct resample patterns available
Isolates 256 far above the 4,000 repetitions
Confirmation 16 300,540,195, so the 4,000 repetitions are the binding limit
Opening diagnostic 8 6,435
Pilot panel 8 6,435
Screen 2 3
Baseline and selected training 2 3

Every screen interval is the range of three numbers. With two blocks the resampler has exactly three distinct patterns: block 0 twice, one of each, and block 1 twice. The 2.5 and 97.5 percentiles land on the extremes. A screen ci95 is therefore the range of the block-0 estimate, the pooled estimate and the block-1 estimate. It is not a confidence interval.

In the screen report, 2,292 of 4,550 condition-level intervals and 157 of 324 interaction intervals are zero-width. 167 condition-level intervals and 3 interaction intervals exclude zero only because they are zero-width, which means the two blocks happened to agree. Zero width is never precision.

Four screen exclusions are floating-point artifacts. Interactions 6, 27 and 30 on spread have an upper endpoint near −1e-16. Interaction 16 on rounds has a lower endpoint near +9e-16. None of them excludes zero.

In the confirmation report, 182 of 399 intervals are zero-width, and 130 of those are control's structural self-comparison. 23 matchup intervals have exactly one endpoint at 0.0 and do not exclude zero. The confirmation file carries no floating-point residual and no reversed endpoint.

Every interval inside one report shares one resample matrix. The bootstrap weights are cached on the block count and the repetition count and seeded once. All metrics, conditions, maps and cells in a report draw from the same 4,000 patterns. The intervals are mutually correlated. They are not independent statements.

Isolate intervals are panel-wide. The isolate cell table is a descriptive audit with no intervals. Where the changed cells are a clean subset of a panel with equal denominators, the panel interval rescales exactly. This report rescales by 8 for the 30 Hammer exchange cells and by 2 for the Charge-3 contrast, and says so at each use.

Interactions exist only in the screen block. Eight of its 36 rows are identically zero, so the effective count is 26. Rows 27 and 30, and rows 33 and 36, are exact duplicates of each other.

Limitations

Read every limitation below beside the numbers it governs.

  • Screen intervals rest on two seed blocks. Each one is the range of three resample patterns, and about half are zero-width. A screen number is never a finding on its own.
  • spread.ci95 is the interval of the paired difference, never of the level. No spread level anywhere in this study carries an interval. The screen's 50.00 pp control spread and confirmation's 57.99 pp are both bare point estimates.
  • No per-roster interval exists in any report. Every roster mean and every roster change is a point estimate. The finest paired intervals at confirmation are the 84 matchup cells.
  • Only confirmation and the isolates give a real interval base. Confirmation has 16 blocks and the isolates have 256. The opening and pilot panels have 8 each. The screen and both training phases have 2 each.
  • Interactions exist only in the screen block, and the effective count is 26 of 36. Confirmation carries no interaction result. tn10 is not a component of the combination, because tn11 is a different dose of the same lever. Nothing in the combination can be credited or blamed from confirmation.
  • Instrumentation nulls. ability:pace and ability:deadeye are hardcoded null in the observer, although both Abilities execute in the engine. threatChangedChoices is derived from opening counterfactual rows and is null in every other phase. ability:momentum is a duplicate column of momentumDice. ability:riposte and ability:scramble read zero in the whole-game panels for want of a carrier. ability:fieldRepair is instrumented and carried, and reads zero across all 6,912 opening games. Pace is the largest visible pilot effect in the study and it is the one Ability with no counter at all.
  • The Momentum counter measures the melee variant only. The live ranged Momentum bonus is applied in every arm and is never counted. A zero in that column is not evidence that the Ability did not fire.
  • Duplicate contexts. Eight of the 35 screen profiles are bit-identical to another profile, leaving 27 distinct conditions and 5,376 uninformative games. Four of the eight opening arms are exact duplicates, so 3,456 of 6,912 opening games are re-runs. The 128 pilot contexts reduce to 76 distinct game sets, so 4,992 of 12,288 pilot games are re-simulations. Three of the 15 exchange packages are one fixture profile. Exchange and class mirror cells are exact label swaps, not independent replicates.
  • Every interval inside one report shares one cached resample matrix. The intervals in a report are mutually correlated, not independent statements.
  • Three axes are inert where they were measured. blade-cap4 and blade-cap5 change nothing in any isolate cell, so the 16-cell cube holds 8 distinct profiles there. tn11 is bit-identical to control in the exchange panel, because control's threshold there is already Evasion 11. pilot-pool-off is bit-identical to control in the exchange and class panels, because no pilot in them has Piloting 2 or more.
  • The limb: denominators are endogenous. They are 7,003, 6,972 and 7,707 records at confirmation. Those differences mix a rate change with a composition change. The pooled-ratio rule is applied correctly. The interpretation caveat is separate.
  • payoff is not a fairness statistic. It is the mean payoff of the manifest-earlier roster across unordered pairs. Control's level is a listing artifact.
  • The confirmation table is partly saturated. Eleven of the 63 non-mirror control cells are 64-to-0 sweeps, 9 under tn10 and 10 under the combination. Single cells can therefore move by 45 to 58 pp.
  • The mirror statistic discards direction. It is the absolute distance from 0.5. A swept mirror cell shows as a magnitude with no side attached.
  • No guard reads the mirror physical axis. In the screen report that axis reaches its 0.500 ceiling in 15 of the 35 conditions, every time in the same cell, foundry/new-ranged. All 15 are members of the core-plus2 family, and they include the selected combination. A physical magnitude of 0.500 means side A won that mirror cell 8 games to 0. Physical-side bias is a reported audit only; the mirror guard reads First Side alone.
  • The screen First Side guard had no filtering power. Its effective bound of 0.60 exceeds the metric's mathematical ceiling of 0.50, and control itself reached the ceiling in six of 21 cells at eight games per cell.
  • The First Side analysis on the level comes from a supplement outside the frozen source closure. It is descriptive. It did not influence selection, and it cannot retrospectively repair the screening guard.
  • The opening report has no per-assignment cell. The rows carry the orientation and the First Side letter. The frozen aggregator drops them.
  • The pilot panel is a controlled diagnostic. It uses fixed aggression 0.5 against one fixed opponent, with no trained policy. It is not equilibrium, not a faction rank, and not a both-sides result. FSU is the only trio with a live Bond on the board, so its contrasts are confounded.
  • Paid forms had no mechanical surface in the pilot panel. Form changes are exactly zero in all 12,288 pilot games, because the fixed loadout has no mode-switching weapon.
  • The aggression grid bounds every trained policy. Its equilibrium does not establish optimal play. Screen candidates received no training of their own, so the screen ranks transferred baseline-policy performance only. The baseline and selected grids use two training seed blocks, and game count does not increase that independent training sample.
  • The seven-roster panel cannot certify balance outside its declared opponents, maps, builds, and bot policies.
  • Bot limitations, verbatim from the protocol's own limits array, recorded in every report:
    1. Declared bot grid only; no human-counterplay or optimal-play claim.
    2. Paid forms use the existing single-profile attack-value approximation; melee TN and Piloting-pool toggles apply in resolution but not that valuation.
    3. Unsupported ability-use counters remain null.
  • Simulation does not establish human counterplay, optimal form play, optimal AI, or a universal part price.
  • The study does not authorize a pilot nerf or a faction tier.

Recommendations: the study adopts nothing

This study adopts nothing automatically. A passing candidate still requires a separate playable-default decision. BUG-017, TASK-082 and TASK-099 are unchanged by this study.

  1. tn10 is the only candidate supported on the preregistered metric. Send it to the separate playable-default decision. Carry this caveat with it: tn10 evens the roster field through defence and reordering, not through melee lethality, so it does not by itself meet the design goal that closing distance should mean lethality.
  2. Do not adopt the combination. If fewer wipes and longer games are wanted, test Core +2 standalone in a confirmation-grade design. The isolates point at it. The whole-game evidence cannot attribute it.
  3. Hammer +1 die is real in isolation and unconfirmed in whole games. Confirm it alone if Hammer viability is a goal.
  4. Drop Capacity from the next study unless a fixture that actually exercises it exists.
  5. Treat turn order as a roster-by-map problem in mirrors. A follow-up mirror study needs at least 64 games per cell and intervals on the level. A design lever such as the second player choosing the deployment side in mirrors is a decision for the owner, not a study result.
  6. Fix the tooling before any further rule test. Instrument Pace, Deadeye and ranged Momentum. Add per-roster and per-assignment intervals. Replace the ceiling-bound mirror guard with a First Side share and an interval. Label duplicate contexts.
  7. Keep the open items open. BUG-017 stays open. TASK-082's human playtest requirement is untouched. TASK-099's Bow-role work is not closed by this.

Any adoption must update the rulebook, GDD, README, cited tuning notes, and register separately.

Evidence

The compact evidence archive is docs/tuning/evidence-study-01.tar.gz. Its index is docs/tuning/evidence-study-01-index.json. Its companion is evidence-study-01-archive.md.

The archive holds 59 files at 342,070,366 bytes. It excludes 28 raw replay shards at 2,400,567,157 bytes. The index records the original path, byte count, and SHA-256 of every excluded shard.

The raw shards are preserved locally under out/balance-experiment/study-01/. That directory is outside version control.

Metadata alone cannot independently validate full phases without the raw replay logs.