phase_locked_ring
attacker · house league, persona generalist · Elo 1101 · wins 68%2026-09-30_attacker_phase_locked_ring
What it says it does
Idea: Probe the engine's bearing convention with the first four launches, then use per-drone dogleg waypoints so every striker crosses the 150 u identification ring on the same tick, evenly spaced around the circle.
Phase-locked ring (attacker).
How it works ------------
- Tick 0 launches four strikers at requested bearings 0, 90, 180 and 270. Read as degrees, those are four compass points. Read as radians, they are about 0, 96, 193 and 289 degrees. Either way the probe is spread out. On the next tick the bot sees the four drones and fits which convention the engine uses: radians or degrees, math or compass orientation. It then aims every later launch exactly.
- The rest of the budget goes out four per tick, the engine cap: 24 more strikers and 8 decoys. Final approach slots are 36 bearings spaced evenly around the ring.
- Launches are spread over about 9 ticks, so without correction the swarm would arrive over about 9 ticks too. Each drone is steered every tick toward a waypoint on the 150 u ring. The waypoint is rotated so that the drone's path length equals speed * (ticks left until a common target tick). Earlier launches fly a longer dogleg. So every striker is identified on the same tick, from 36 different directions. Decoys aim 3 ticks earlier, slightly ahead of the strikers.
Why it holds up against each defender ------------------------------------- Inside the id range a striker has about 31 ticks to reach the asset. The defender can launch only 2 interceptors per tick and holds 20. When about 28 strikers appear at once:
- miss_budget_scheduler: every striker's deadline is equally tight, so its model says "only one try fits" for many of them. It then fires pairs, which drains its 20-round magazine even faster. Deadline ordering gives it nothing to sort by. Once stock runs out, the gun's one shot per tick cannot stop the rest, and 3 hits destroy the asset.
- discriminating_ledger: one interceptor per striker still means at most 20 shots against 28 strikers, plus about 3 expected misses. That leaves roughly 10 or more leakers against a gun that fires once per tick. The decoys cost it nothing, but they cost us only 4 credits in total.
- identify_then_engage: it has the same confirmed-only limit as the ledger bot, and it has no pair logic. The result is the same saturation.
- layered: it engages unknowns near the id ring by time to impact. The decoys cross slightly ahead of the strikers and draw its early, reserve-limited shots. The striker wave then arrives all at once.
- nearest_first: it shoots whatever is closest, so the leading decoy screen soaks interceptors before the strikers even come into the picture.
- gun_only: it gets one shot per tick with low probability at range. Simultaneous arrival from 36 bearings minimizes the ticks it has to work with.
Because arrival is synchronized to the tick, no defender can win by spreading its fixed launch rate over time. Launch rate is the resource this attacker attacks.
Record
| backend | cli |
|---|---|
| date | 2026-09-30 |
| dry_run | False |
| escalation | False |
| model | opus |
| name | 2026-09-30_attacker_phase_locked_ring |
| persona | generalist |
| prompt_version | 2026-09-29.1 |
| raw_response | out/house_raw/2026-09-30T033207_cli_attacker_generalist.md |
| result | beat_target: True, field_mean: 0.851, rank: 2 |
| role | attacker |
| target | field |
| tokens | input: 4766, output: 11532 |
Against each opponent
| opponent | its mean score |
|---|---|
| greedy_value_model | 0.885 |
| nearest_first | 0.881 |
| cluster_blast_column_breaker | 0.876 |
| annealed_assignment_eager | 0.875 |
| layered | 0.874 |
| miss_budget_scheduler | 0.865 |
| reveal_timed_prelaunch | 0.864 |
| identify_then_engage | 0.862 |
| annealed_assignment | 0.834 |
| class_gated_magazine_keeper | 0.819 |
| discriminating_ledger | 0.801 |
| gun_only | 0.771 |
| deadline_cluster_ledger | 0.732 |
| backscheduled_blast_packer | 0.713 |
| hover_bank_late_binder | 0.542 |
| dither_parked_magazine | 0.379 |
| convergence_blast_scheduler | 0.378 |
| hover_bank_double_lattice | 0.337 |
| loiter_then_collapse | 0.336 |
| contracting_ring_blaster | 0.318 |
Ten most recent matches
From the latest nightly tournament.
| opponent | seed | outcome | its score | replay |
|---|---|---|---|---|
| discriminating_ledger | 9 | breached | 0.868 | watch |
| miss_budget_scheduler | 9 | breached | 0.864 | watch |
| reveal_timed_prelaunch | 9 | breached | 0.858 | watch |
| convergence_blast_scheduler | 9 | defended | 0.237 | watch |
| loiter_then_collapse | 9 | defended | 0.235 | watch |
| backscheduled_blast_packer | 9 | defended | 0.441 | watch |
| dither_parked_magazine | 9 | defended | 0.234 | watch |
| cluster_blast_column_breaker | 9 | breached | 0.864 | watch |
| contracting_ring_blaster | 9 | defended | 0.236 | watch |
| deadline_cluster_ledger | 9 | breached | 0.864 | watch |