yxc20098 commited on
Commit
ad1da47
ยท
1 Parent(s): 32f1cfe

fix(tests): repair perception-count / playback / units-in-region / pairwise suite regressions

Browse files

Recalibrate three fixture packs after the engine balance fixes:

- perception-count-the-threat: the mid-map inner defenders were
stance:3 (AttackAnything) โ€” they hunted passing scouts up the
lane and got discovered, contaminating the perception count so an
under-scout saw 5 enemies and WON. Switched them to stance:2
(Defend): they hold their post, never advance, and a one-lane
under-scout now caps at K=3 and LOSES while the intended two-lane
scout still WINS every level/seed and over-scout still LOSES.

- perception-frontier-reading: the agent jeeps carried no explicit
stance, so an idle scout auto-advanced and a stall (observe-only)
policy self-delivered into the fog pocket and WON easy. Pinned all
agent scouts to stance:0 (HoldFire) โ€” stall now LOSES, a directed
scout WINS. Also unblocks test_pairwise (explorer vs idle).

- action-multiunit-coordination: easy's after_ticks:2401 was inert
(the engine ends the episode at tick ~2343) so a stall DREW
instead of losing โ€” tick-aligned the deadline to 2200/2201. Medium
& hard staged the fragile jeeps at y=14, routing the SE-bound
column through the NE picket where they were attrited to death,
making the 3/3/2 split unsolvable; moved the jeep spawn to y=24
so the three-way split WINS while all-east and stall still LOSE.

openra_bench/scenarios/packs/action-multiunit-coordination.yaml CHANGED
@@ -55,11 +55,16 @@ levels:
55
  all_of:
56
  - {units_in_region_gte: {x: 110, y: 6, radius: 8, n: 2}}
57
  - {units_in_region_gte: {x: 110, y: 33, radius: 8, n: 2}}
58
- - {within_ticks: 2400}
 
 
 
 
 
59
  fail_condition:
60
  any_of:
61
  - {not: {own_units_gte: 1}}
62
- - {after_ticks: 2401}
63
  max_turns: 30
64
 
65
  medium:
@@ -75,7 +80,11 @@ levels:
75
  actors:
76
  - {type: 2tnk, owner: agent, position: [5, 6], count: 3}
77
  - {type: 1tnk, owner: agent, position: [7, 10], count: 3}
78
- - {type: jeep, owner: agent, position: [5, 14], count: 2}
 
 
 
 
79
  - {type: fact, owner: enemy, position: [115, 6]} # NE corner
80
  - {type: proc, owner: enemy, position: [115, 34]} # SE corner
81
  - {type: powr, owner: enemy, position: [20, 36]} # bottom-left
@@ -127,7 +136,11 @@ levels:
127
  actors:
128
  - {type: 2tnk, owner: agent, position: [5, 6], count: 3}
129
  - {type: 1tnk, owner: agent, position: [7, 10], count: 3}
130
- - {type: jeep, owner: agent, position: [5, 14], count: 2}
 
 
 
 
131
  - {type: fact, owner: enemy, position: [115, 6]} # NE corner
132
  - {type: proc, owner: enemy, position: [115, 34]} # SE corner
133
  - {type: powr, owner: enemy, position: [20, 36]} # bottom-left
 
55
  all_of:
56
  - {units_in_region_gte: {x: 110, y: 6, radius: 8, n: 2}}
57
  - {units_in_region_gte: {x: 110, y: 33, radius: 8, n: 2}}
58
+ # within_ticks 2200 / after_ticks 2201: the engine ends this
59
+ # level's episode at tick ~2343, so the timeout fail clause
60
+ # must bite BELOW that โ€” 2401 was inert (the episode ended
61
+ # before it fired, collapsing a stall to a DRAW). The intended
62
+ # parallel split still wins by ~tick 1500, well inside 2200.
63
+ - {within_ticks: 2200}
64
  fail_condition:
65
  any_of:
66
  - {not: {own_units_gte: 1}}
67
+ - {after_ticks: 2201}
68
  max_turns: 30
69
 
70
  medium:
 
80
  actors:
81
  - {type: 2tnk, owner: agent, position: [5, 6], count: 3}
82
  - {type: 1tnk, owner: agent, position: [7, 10], count: 3}
83
+ # Jeeps staged at y=24 (south of centre) so the SE-bound
84
+ # column does NOT route past the NE picket at y=8 โ€” at y=14
85
+ # the fragile jeeps were attrited to death before reaching
86
+ # the SE region, making the 3/3/2 split unsolvable.
87
+ - {type: jeep, owner: agent, position: [5, 24], count: 2}
88
  - {type: fact, owner: enemy, position: [115, 6]} # NE corner
89
  - {type: proc, owner: enemy, position: [115, 34]} # SE corner
90
  - {type: powr, owner: enemy, position: [20, 36]} # bottom-left
 
136
  actors:
137
  - {type: 2tnk, owner: agent, position: [5, 6], count: 3}
138
  - {type: 1tnk, owner: agent, position: [7, 10], count: 3}
139
+ # Jeeps staged at y=24 (south of centre) so the SE-bound
140
+ # column does NOT route past the NE picket at y=8 โ€” at y=14
141
+ # the fragile jeeps were attrited to death before reaching
142
+ # the SE region, making the 3/3/2 split unsolvable.
143
+ - {type: jeep, owner: agent, position: [5, 24], count: 2}
144
  - {type: fact, owner: enemy, position: [115, 6]} # NE corner
145
  - {type: proc, owner: enemy, position: [115, 34]} # SE corner
146
  - {type: powr, owner: enemy, position: [20, 36]} # bottom-left
openra_bench/scenarios/packs/perception-count-the-threat.yaml CHANGED
@@ -140,18 +140,19 @@ levels:
140
  # scout (split N/S) clears the discovery bar.
141
  - {type: e3, owner: enemy, position: [60, 10], stance: 0, count: 3}
142
  - {type: e3, owner: enemy, position: [100, 30], stance: 0, count: 3}
143
- # Inner defender wall: stance:3 (AttackAnything) e3 missiles
144
- # parked mid-y x=50, between the north (yโ‰ˆ6-10) and south
145
- # (yโ‰ˆ30-34) scout lanes โ€” outside jeep sight=7 from either
146
- # lane (y=19/21 are 10/12 cells from y=9 and 14/12 from y=33).
147
- # A just-enough scout that stays in its lane glides past
148
- # without provoking; an OVER-scout that pulls every unit
149
- # through every fog patch (mid-map sweep) crosses the
150
- # defender wall and bleeds time AND units โ€” the over-scout
151
- # tooth bites first via clock (long detour through every
152
- # patch), and on a deeper sweep also via attrition.
153
- - {type: e3, owner: enemy, position: [50, 19], stance: 3}
154
- - {type: e3, owner: enemy, position: [50, 21], stance: 3}
 
155
  # Persistent passive marker for episode-end safety (see easy).
156
  - {type: barr, owner: enemy, position: [120, 36], stance: 0}
157
  win_condition:
@@ -198,14 +199,15 @@ levels:
198
  # (or SW) cannot generalise.
199
  - {type: e3, owner: enemy, position: [60, 10], stance: 0, count: 3}
200
  - {type: e3, owner: enemy, position: [100, 30], stance: 0, count: 3}
201
- # Inner defender wall (stance:3 AttackAnything) at mid-y
202
- # x=50 โ€” outside jeep sight=7 from y=6 (10-12 cells away)
203
- # and from y=33 (12-14 cells away). A just-enough scout
204
- # stays in its lane; an OVER-scout that runs every unit
205
- # through every fog patch bleeds time AND units crossing
206
- # this wall โ€” the over-scout teeth.
207
- - {type: e3, owner: enemy, position: [50, 19], stance: 3}
208
- - {type: e3, owner: enemy, position: [50, 21], stance: 3}
 
209
  # Persistent passive marker for episode-end safety.
210
  - {type: barr, owner: enemy, position: [120, 20], stance: 0}
211
  win_condition:
 
140
  # scout (split N/S) clears the discovery bar.
141
  - {type: e3, owner: enemy, position: [60, 10], stance: 0, count: 3}
142
  - {type: e3, owner: enemy, position: [100, 30], stance: 0, count: 3}
143
+ # Inner defender wall: stance:2 (Defend) e3 missiles parked
144
+ # mid-y x=50, between the north (yโ‰ˆ6-10) and south (yโ‰ˆ30-34)
145
+ # scout lanes. stance:2 auto-fires on an in-range foe but
146
+ # NEVER advances โ€” so the defenders hold their post and a
147
+ # just-enough scout that stays in its lane never even sees
148
+ # them (a stance:3 hunter would chase the scout up the lane
149
+ # and contaminate the perception count). An OVER-scout that
150
+ # pulls every unit through every fog patch (mid-map sweep)
151
+ # drives straight into the wall and bleeds time AND units โ€”
152
+ # the over-scout tooth bites via clock (the detour never
153
+ # finishes the count) and on a deeper sweep via attrition.
154
+ - {type: e3, owner: enemy, position: [50, 19], stance: 2}
155
+ - {type: e3, owner: enemy, position: [50, 21], stance: 2}
156
  # Persistent passive marker for episode-end safety (see easy).
157
  - {type: barr, owner: enemy, position: [120, 36], stance: 0}
158
  win_condition:
 
199
  # (or SW) cannot generalise.
200
  - {type: e3, owner: enemy, position: [60, 10], stance: 0, count: 3}
201
  - {type: e3, owner: enemy, position: [100, 30], stance: 0, count: 3}
202
+ # Inner defender wall (stance:2 Defend) at mid-y x=50. They
203
+ # hold their post and auto-fire on anything in range but
204
+ # never advance โ€” a just-enough scout that stays in its lane
205
+ # never sees them (a stance:3 hunter would chase a passing
206
+ # scout and contaminate the perception count). An OVER-scout
207
+ # that runs every unit through every fog patch bleeds time
208
+ # AND units crossing this wall โ€” the over-scout teeth.
209
+ - {type: e3, owner: enemy, position: [50, 19], stance: 2}
210
+ - {type: e3, owner: enemy, position: [50, 21], stance: 2}
211
  # Persistent passive marker for episode-end safety.
212
  - {type: barr, owner: enemy, position: [120, 20], stance: 0}
213
  win_condition:
openra_bench/scenarios/packs/perception-frontier-reading.yaml CHANGED
@@ -54,8 +54,11 @@ base:
54
  termination: {max_ticks: 10000}
55
  actors:
56
  # Fast, fragile scouts spawned in the bottom-left pocket (x<25).
57
- - {type: jeep, owner: agent, position: [5, 33], count: 3}
58
- - {type: jeep, owner: agent, position: [7, 30], count: 2}
 
 
 
59
 
60
  levels:
61
  easy:
@@ -67,8 +70,8 @@ levels:
67
  enters the pocket and loses on the deadline.
68
  overrides:
69
  actors:
70
- - {type: jeep, owner: agent, position: [5, 33], count: 3}
71
- - {type: jeep, owner: agent, position: [7, 30], count: 2}
72
  # Hidden marker: a lone building in the eastern fog pocket,
73
  # well off the y=30..33 spawn rows so a fixed eastward charge
74
  # along spawn rows never reveals it.
@@ -95,8 +98,8 @@ levels:
95
  is far NE and only a deliberate split push reveals it in time.
96
  overrides:
97
  actors:
98
- - {type: jeep, owner: agent, position: [5, 33], count: 3}
99
- - {type: jeep, owner: agent, position: [7, 30], count: 2}
100
  # Decoy: passive enemy infantry parked OFF the egress lane
101
  # (high y, away from the scout corridor) โ€” pure time-bait, not
102
  # an instant-kill wall.
@@ -132,12 +135,12 @@ levels:
132
  overrides:
133
  actors:
134
  # spawn_point 0 โ€” scouts staged SW.
135
- - {type: jeep, owner: agent, position: [5, 33], count: 3, spawn_point: 0}
136
- - {type: jeep, owner: agent, position: [7, 30], count: 2, spawn_point: 0}
137
  # spawn_point 1 โ€” scouts staged NW (markers are fixed, so the
138
  # reading order that works flips by seed).
139
- - {type: jeep, owner: agent, position: [5, 6], count: 3, spawn_point: 1}
140
- - {type: jeep, owner: agent, position: [7, 9], count: 2, spawn_point: 1}
141
  # Center decoys (already-explored zone) โ€” time-bait only,
142
  # passive so they cannot instakill a passing scout.
143
  - {type: e1, owner: enemy, position: [55, 20], stance: 0, count: 3}
 
54
  termination: {max_ticks: 10000}
55
  actors:
56
  # Fast, fragile scouts spawned in the bottom-left pocket (x<25).
57
+ # stance:0 (HoldFire) โ€” an idle scout must NOT auto-advance: a
58
+ # stall policy that issues only observe() must stay parked so the
59
+ # frontier markers are discovered only by a directed move push.
60
+ - {type: jeep, owner: agent, position: [5, 33], stance: 0, count: 3}
61
+ - {type: jeep, owner: agent, position: [7, 30], stance: 0, count: 2}
62
 
63
  levels:
64
  easy:
 
70
  enters the pocket and loses on the deadline.
71
  overrides:
72
  actors:
73
+ - {type: jeep, owner: agent, position: [5, 33], stance: 0, count: 3}
74
+ - {type: jeep, owner: agent, position: [7, 30], stance: 0, count: 2}
75
  # Hidden marker: a lone building in the eastern fog pocket,
76
  # well off the y=30..33 spawn rows so a fixed eastward charge
77
  # along spawn rows never reveals it.
 
98
  is far NE and only a deliberate split push reveals it in time.
99
  overrides:
100
  actors:
101
+ - {type: jeep, owner: agent, position: [5, 33], stance: 0, count: 3}
102
+ - {type: jeep, owner: agent, position: [7, 30], stance: 0, count: 2}
103
  # Decoy: passive enemy infantry parked OFF the egress lane
104
  # (high y, away from the scout corridor) โ€” pure time-bait, not
105
  # an instant-kill wall.
 
135
  overrides:
136
  actors:
137
  # spawn_point 0 โ€” scouts staged SW.
138
+ - {type: jeep, owner: agent, position: [5, 33], stance: 0, count: 3, spawn_point: 0}
139
+ - {type: jeep, owner: agent, position: [7, 30], stance: 0, count: 2, spawn_point: 0}
140
  # spawn_point 1 โ€” scouts staged NW (markers are fixed, so the
141
  # reading order that works flips by seed).
142
+ - {type: jeep, owner: agent, position: [5, 6], stance: 0, count: 3, spawn_point: 1}
143
+ - {type: jeep, owner: agent, position: [7, 9], stance: 0, count: 2, spawn_point: 1}
144
  # Center decoys (already-explored zone) โ€” time-bait only,
145
  # passive so they cannot instakill a passing scout.
146
  - {type: e1, owner: enemy, position: [55, 20], stance: 0, count: 3}