yxc20098 commited on
Commit
4ebeee5
ยท
1 Parent(s): 6d71d3b

Defect fix: 2 of 3 packs flagged by uniqueness audit

Browse files

* spec-spy-infiltrate: stall was DRAW (spies died, engine auto-done
fired before any predicate hit). Added per-tier fail clause
'not unit_type_count_gte: {type: spy, n: 1}' so spy-death LOSSES
cleanly. Verified easy/medium/hard all stall LOSS.

* combat-naval-shore-strike: stall was WIN (destroyers on stance:2
auto-fired the shore garrison). Flipped all dd to stance:0 โ€” the
agent must explicitly attack_unit to engage. Tightened clock
(within_ticks 2699, after_ticks 2700, max_turns 32) so the fail
clause actually bites the deadline. Verified stall LOSS ร— 3 tiers.

Still pending: mid-economy-under-fire (auto-killing perimeter tank
ring needs stance:0 or geometry change).

openra_bench/scenarios/packs/combat-naval-shore-strike.yaml CHANGED
@@ -87,7 +87,7 @@ levels:
87
  when the rifleman is killed.
88
  overrides:
89
  actors:
90
- - {type: dd, owner: agent, position: [15, 20], stance: 2}
91
  - {type: e1, owner: enemy, position: [18, 20], stance: 0}
92
  # Persistent far enemy marker โ€” prevents engine auto-done
93
  # when the rifleman falls, so the win evaluator sees the
@@ -96,12 +96,12 @@ levels:
96
  win_condition:
97
  all_of:
98
  - {units_killed_gte: 1}
99
- - {within_ticks: 2700}
100
  fail_condition:
101
  any_of:
102
- - {after_ticks: 2701}
103
  - {not: {own_units_gte: 1}}
104
- max_turns: 30
105
 
106
  # โ”€โ”€ MEDIUM โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
107
  # Two destroyers, three rifle infantry on the shore. The agent
@@ -114,8 +114,8 @@ levels:
114
  y=18/20/22. Kill all three before tick 2700.
115
  overrides:
116
  actors:
117
- - {type: dd, owner: agent, position: [15, 18], stance: 2}
118
- - {type: dd, owner: agent, position: [15, 22], stance: 2}
119
  - {type: e1, owner: enemy, position: [18, 18], stance: 0}
120
  - {type: e1, owner: enemy, position: [18, 20], stance: 0}
121
  - {type: e1, owner: enemy, position: [18, 22], stance: 0}
@@ -123,12 +123,12 @@ levels:
123
  win_condition:
124
  all_of:
125
  - {units_killed_gte: 3}
126
- - {within_ticks: 2700}
127
  fail_condition:
128
  any_of:
129
- - {after_ticks: 2701}
130
  - {not: {own_units_gte: 1}}
131
- max_turns: 30
132
 
133
  # โ”€โ”€ HARD โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
134
  # Two destroyers vs four rifle infantry + one rocket soldier (e3).
@@ -144,8 +144,8 @@ levels:
144
  least one destroyer alive.
145
  overrides:
146
  actors:
147
- - {type: dd, owner: agent, position: [15, 18], stance: 2}
148
- - {type: dd, owner: agent, position: [15, 22], stance: 2}
149
  - {type: e1, owner: enemy, position: [18, 17], stance: 0}
150
  - {type: e1, owner: enemy, position: [18, 19], stance: 0}
151
  - {type: e3, owner: enemy, position: [18, 20], stance: 0}
@@ -155,9 +155,9 @@ levels:
155
  win_condition:
156
  all_of:
157
  - {units_killed_gte: 5}
158
- - {within_ticks: 2700}
159
  fail_condition:
160
  any_of:
161
- - {after_ticks: 2701}
162
  - {not: {own_units_gte: 1}}
163
- max_turns: 30
 
87
  when the rifleman is killed.
88
  overrides:
89
  actors:
90
+ - {type: dd, owner: agent, position: [15, 20], stance: 0}
91
  - {type: e1, owner: enemy, position: [18, 20], stance: 0}
92
  # Persistent far enemy marker โ€” prevents engine auto-done
93
  # when the rifleman falls, so the win evaluator sees the
 
96
  win_condition:
97
  all_of:
98
  - {units_killed_gte: 1}
99
+ - {within_ticks: 2699}
100
  fail_condition:
101
  any_of:
102
+ - {after_ticks: 2700}
103
  - {not: {own_units_gte: 1}}
104
+ max_turns: 32
105
 
106
  # โ”€โ”€ MEDIUM โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
107
  # Two destroyers, three rifle infantry on the shore. The agent
 
114
  y=18/20/22. Kill all three before tick 2700.
115
  overrides:
116
  actors:
117
+ - {type: dd, owner: agent, position: [15, 18], stance: 0}
118
+ - {type: dd, owner: agent, position: [15, 22], stance: 0}
119
  - {type: e1, owner: enemy, position: [18, 18], stance: 0}
120
  - {type: e1, owner: enemy, position: [18, 20], stance: 0}
121
  - {type: e1, owner: enemy, position: [18, 22], stance: 0}
 
123
  win_condition:
124
  all_of:
125
  - {units_killed_gte: 3}
126
+ - {within_ticks: 2699}
127
  fail_condition:
128
  any_of:
129
+ - {after_ticks: 2700}
130
  - {not: {own_units_gte: 1}}
131
+ max_turns: 32
132
 
133
  # โ”€โ”€ HARD โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
134
  # Two destroyers vs four rifle infantry + one rocket soldier (e3).
 
144
  least one destroyer alive.
145
  overrides:
146
  actors:
147
+ - {type: dd, owner: agent, position: [15, 18], stance: 0}
148
+ - {type: dd, owner: agent, position: [15, 22], stance: 0}
149
  - {type: e1, owner: enemy, position: [18, 17], stance: 0}
150
  - {type: e1, owner: enemy, position: [18, 19], stance: 0}
151
  - {type: e3, owner: enemy, position: [18, 20], stance: 0}
 
155
  win_condition:
156
  all_of:
157
  - {units_killed_gte: 5}
158
+ - {within_ticks: 2699}
159
  fail_condition:
160
  any_of:
161
+ - {after_ticks: 2700}
162
  - {not: {own_units_gte: 1}}
163
+ max_turns: 32
openra_bench/scenarios/packs/spec-spy-infiltrate.yaml CHANGED
@@ -95,7 +95,10 @@ levels:
95
  all_of:
96
  - {buildings_discovered_gte: 4}
97
  - {within_ticks: 2000}
98
- fail_condition: {after_ticks: 2001}
 
 
 
99
  max_turns: 25
100
 
101
  # โ”€โ”€ MEDIUM โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
@@ -120,7 +123,10 @@ levels:
120
  all_of:
121
  - {buildings_discovered_gte: 6}
122
  - {within_ticks: 3000}
123
- fail_condition: {after_ticks: 3001}
 
 
 
124
  max_turns: 35
125
 
126
  # โ”€โ”€ HARD โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
@@ -151,5 +157,8 @@ levels:
151
  all_of:
152
  - {buildings_discovered_gte: 7}
153
  - {within_ticks: 4000}
154
- fail_condition: {after_ticks: 4001}
 
 
 
155
  max_turns: 50
 
95
  all_of:
96
  - {buildings_discovered_gte: 4}
97
  - {within_ticks: 2000}
98
+ fail_condition:
99
+ any_of:
100
+ - {after_ticks: 2001}
101
+ - not: {unit_type_count_gte: {type: spy, n: 1}}
102
  max_turns: 25
103
 
104
  # โ”€โ”€ MEDIUM โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 
123
  all_of:
124
  - {buildings_discovered_gte: 6}
125
  - {within_ticks: 3000}
126
+ fail_condition:
127
+ any_of:
128
+ - {after_ticks: 3001}
129
+ - not: {unit_type_count_gte: {type: spy, n: 1}}
130
  max_turns: 35
131
 
132
  # โ”€โ”€ HARD โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
 
157
  all_of:
158
  - {buildings_discovered_gte: 7}
159
  - {within_ticks: 4000}
160
+ fail_condition:
161
+ any_of:
162
+ - {after_ticks: 4001}
163
+ - not: {unit_type_count_gte: {type: spy, n: 1}}
164
  max_turns: 50