yxc20098 commited on
Commit
3fa2956
·
1 Parent(s): 01e4023

fix(scenario): coord-converge-on-target — triple-prong convergent attack (SC2 / military pincer anchor)

Browse files

Closer-look pass on the Wave-5 salvage version of this pack:

- EAST squad in hard tier was at (134,20) → out of map bounds (rush-
hour-arena is 128 wide). Earlier salvage layout (74,8)/(126,20)/
(74,32) for spawn_point 1 placed the lateral squad close enough to
the objective that a 2-squad north+south policy could win the trade
cleanly, breaking the load-bearing 'three-prong required' clause.

- Re-laid spawn_point 1 as a shifted N/W/S layout (76,5)/(72,18)/
(76,32) — same convergent shape as spawn_point 0 (70,6/66,20/70,34)
but shifted by a few cells per axis. Both layouts now keep all
three squads ~27-34 cells from the objective so a naive
simultaneous attack-move arrives together; the W-squad column and
N/S latitudes flip per seed so a memorised single-cell opening
cannot generalise.

Validated scripted (no model / network):
- intended 3-prong attack-move WINS easy/medium/hard × seeds 1..4
- stall (observe-only) LOSES on every tier × every seed
- single-squad-N (only north squad attacks) LOSES on medium/hard
× every seed (3 tanks vs 4 e3 guards is wiped)
- two-squad (north + south, lateral squad held) LOSES on medium/
hard × every seed (fact destroyed but no tanks survive in the
objective region — n=6 region threshold fails)

Tick budgets: after_ticks 4501 ≤ 93 + 90·53 = 4863 (max_turns=54),
so the deadline bites cleanly within max_turns (no DRAW degeneracy).

openra_bench/scenarios/packs/coord-converge-on-target.yaml CHANGED
@@ -44,10 +44,10 @@
44
  # attack defeated piecewise (the calibration bar still requires
45
  # simultaneous arrival).
46
  # - Enemy actors are NOT filtered by `spawn_point` (CLAUDE.md). The
47
- # hard tier varies the AGENT staging — the lateral (third) squad
48
- # starts WEST of objective in spawn 0 and EAST of objective in
49
- # spawn 1, flipping its ingress bearing while the defender
50
- # cluster stays symmetric.
51
 
52
  meta:
53
  id: coord-converge-on-target
@@ -189,57 +189,50 @@ levels:
189
 
190
  # ── HARD ─────────────────────────────────────────────────────────
191
  # +1 more controlled variable: TWO seed-driven agent spawn groups
192
- # round-robined per seed. Group 0 places the lateral (third) squad
193
- # WEST of the objective at (66,20); group 1 places it EAST of the
194
- # objective at (134,20). The defender cluster stays symmetric (4
195
- # guards, one on each cardinal face) so both spawns face the same
196
- # convergent geometry but the lateral squad's ingress bearing
197
- # flips per seed (W E). A single memorised "3-prong from W/N/S"
198
- # opening cannot generalise. NORTH and SOUTH squads are common to
199
- # both groups (placed without spawn_point but the documented
200
- # filter rule in CLAUDE.md ("if ANY agent actor declares
201
  # spawn_point, every agent actor WITHOUT spawn_point is filtered
202
- # OUT") means N/S MUST be duplicated across spawn groups; both
203
- # copies are placed at identical coords so the contract is met
204
- # without changing the geometry per seed.
205
  hard:
206
  description: >
207
  THREE squads of medium tanks (3× 2tnk each, 9 tanks total) must
208
  converge on the enemy construction yard (`fact` at ~100,20)
209
  defended by 4 leashed rocket-infantry guards (one on each
210
- cardinal face). The squad layout flips per seed: one spawn
211
- stages NORTH (~70,6) / WEST (~66,20) / SOUTH (~70,34); the
212
- other stages NORTH (~74,8) / EAST (~126,20) / SOUTH (~74,32).
213
- Both layouts are balanced equidistant (~26-34 cells per
214
- squad) so a synchronised launch arrives together. A single
215
- squad alone is
216
- destroyed by the guards; two squads converging trade out the
217
- strike force before satisfying the region threshold. Win when
218
- ≥6 of your 9 tanks are inside an 8-cell radius of (100,20) AND
219
- the yard is destroyed, before tick 4500.
 
220
  overrides:
221
  actors:
222
  # spawn_point 0 — NORTH / WEST-of-objective / SOUTH.
223
  - {type: 2tnk, owner: agent, position: [70, 6], stance: 1, count: 3, spawn_point: 0}
224
  - {type: 2tnk, owner: agent, position: [66, 20], stance: 1, count: 3, spawn_point: 0}
225
  - {type: 2tnk, owner: agent, position: [70, 34], stance: 1, count: 3, spawn_point: 0}
226
- # spawn_point 1 — NORTH / EAST-of-objective / SOUTH.
227
- # NORTH and SOUTH are duplicated at identical coords so the
228
- # spawn-filter rule (CLAUDE.md) doesn't drop them from group 1;
229
- # the WEST squad is relocated to EAST at (134,20) — equidistant
230
- # from the objective on the opposite bearing, flipping the
231
- # lateral ingress direction. The seed-chosen ingress geometry
232
- # cannot be memorised: a fixed "drive west squad east" opening
233
- # is wrong half the seeds.
234
- # NORTH and SOUTH in group 1 are pulled in slightly to
235
- # (74, 8) / (74, 32) so their distance to the objective (~29
236
- # cells) closely matches the EAST squad's distance from
237
- # (126, 20) (~26 cells) — a naive simultaneous launch from
238
- # group 1 has all three squads arrive together (group 0
239
- # already balanced at ~34 from each of W / N / S).
240
- - {type: 2tnk, owner: agent, position: [74, 8], stance: 1, count: 3, spawn_point: 1}
241
- - {type: 2tnk, owner: agent, position: [126, 20], stance: 1, count: 3, spawn_point: 1}
242
- - {type: 2tnk, owner: agent, position: [74, 32], stance: 1, count: 3, spawn_point: 1}
243
  # The OBJECTIVE.
244
  - {type: fact, owner: enemy, position: [100, 20]}
245
  # 4 guards: one on each cardinal face. Symmetric: equally
 
44
  # attack defeated piecewise (the calibration bar still requires
45
  # simultaneous arrival).
46
  # - Enemy actors are NOT filtered by `spawn_point` (CLAUDE.md). The
47
+ # hard tier varies the AGENT staging — both groups share the
48
+ # 3-prong N/W/S shape, but staging cells are shifted (the W-squad
49
+ # column flips by ~6 cells and the N/S latitudes shift) — while
50
+ # the defender cluster stays symmetric.
51
 
52
  meta:
53
  id: coord-converge-on-target
 
189
 
190
  # ── HARD ─────────────────────────────────────────────────────────
191
  # +1 more controlled variable: TWO seed-driven agent spawn groups
192
+ # round-robined per seed. Both groups share the 3-prong N/W/S
193
+ # convergent shape, but the staging cells are shifted between
194
+ # groups (group 0: 70,6/66,20/70,34; group 1: 76,5/72,18/76,32);
195
+ # the W-squad column flips by ~6 cells and the N/S latitudes shift
196
+ # so a memorised single-cell opening cannot generalise across
197
+ # seeds. The defender cluster stays symmetric (4 guards, one on
198
+ # each cardinal face) so both spawns face the same convergent
199
+ # geometry. Per CLAUDE.md, "if ANY agent actor declares
 
200
  # spawn_point, every agent actor WITHOUT spawn_point is filtered
201
+ # OUT", so every agent actor declares its spawn_point and the two
202
+ # full squad layouts are listed explicitly.
 
203
  hard:
204
  description: >
205
  THREE squads of medium tanks (3× 2tnk each, 9 tanks total) must
206
  converge on the enemy construction yard (`fact` at ~100,20)
207
  defended by 4 leashed rocket-infantry guards (one on each
208
+ cardinal face). The squad staging cells flip per seed: one
209
+ spawn stages NORTH (~70,6) / WEST (~66,20) / SOUTH (~70,34);
210
+ the other stages a shifted variant NORTH (~76,5) / WEST
211
+ (~72,18) / SOUTH (~76,32). Both layouts are balanced
212
+ equidistant (~27-34 cells per squad) so a synchronised launch
213
+ arrives together; a memorised single-cell opening cannot
214
+ generalise. A single squad alone is destroyed by the guards;
215
+ two squads converging trade out the strike force before
216
+ satisfying the region threshold. Win when ≥6 of your 9 tanks
217
+ are inside an 8-cell radius of (100,20) AND the yard is
218
+ destroyed, before tick 4500.
219
  overrides:
220
  actors:
221
  # spawn_point 0 — NORTH / WEST-of-objective / SOUTH.
222
  - {type: 2tnk, owner: agent, position: [70, 6], stance: 1, count: 3, spawn_point: 0}
223
  - {type: 2tnk, owner: agent, position: [66, 20], stance: 1, count: 3, spawn_point: 0}
224
  - {type: 2tnk, owner: agent, position: [70, 34], stance: 1, count: 3, spawn_point: 0}
225
+ # spawn_point 1 — shifted N/W/S layout: NORTH (76,5), WEST
226
+ # (72,18), SOUTH (76,32). Same convergent shape as group 0
227
+ # but the staging cells are shifted (per-seed start
228
+ # variation), keeping all three squads approximately
229
+ # equidistant (~27-28 cells) from the objective so the
230
+ # naive simultaneous launch still arrives together. The W
231
+ # squad's exact column / latitude flips per seed, so a
232
+ # memorised opening cannot generalise across seeds.
233
+ - {type: 2tnk, owner: agent, position: [76, 5], stance: 1, count: 3, spawn_point: 1}
234
+ - {type: 2tnk, owner: agent, position: [72, 18], stance: 1, count: 3, spawn_point: 1}
235
+ - {type: 2tnk, owner: agent, position: [76, 32], stance: 1, count: 3, spawn_point: 1}
 
 
 
 
 
 
236
  # The OBJECTIVE.
237
  - {type: fact, owner: enemy, position: [100, 20]}
238
  # 4 guards: one on each cardinal face. Symmetric: equally