Spaces:
Running
docs: Wave 1 engine-footgun aggregation in CLAUDE.md + regen scenarios.html
Browse filesAggregates engine-quirk findings surfaced by the 10 Wave 1 parallel agents
(defense-rush-survive, strategy-trilemma, harass-response-preserve,
mid-concede-vs-hold, coordination-staggered-window, tempo-double-window,
perception-count-the-threat, navigation-confined-hard-only, plus
economy-harvest-timebox + economy-harvest-investment rebuilds):
- spawn_point filter applies ONLY to agent actors (enemies always
all-place) โ cannot vary enemy by seed via spawn_point; vary the
agent's spawn instead. Duplicate base actors across both groups.
- silo is NOT MustBeDestroyed โ using it as landmark allows
premature engine auto-done. Use barr/proc/powr/fact for anchors.
- after_ticks in a WIN clause collapses to DRAW via
ConquestVictoryConditions โ after_ticks only belongs in
fail_condition.
- move_units auto-fires regardless of stance:0 โ perception packs
with hidden enemies must set the HIDDEN actors to stance:0.
- pbox costs 600 (not 400); defense and infantry are separate
production queues; parallel-queue from turn 1 is the bar.
- place_building does NOT enforce build-adjacency.
- fact has cost 0 (not buildable via StartProduction); use proc as
second-base seed in expand-arm objectives.
- not own_units_gte:1 mis-fires turn 1 with unit-less start; use
after_ticks + not has_building:fact instead.
- Some mid-map cells silently fail enemy cluster placement; e1 may
not surface in enemy_positions on some cells, e3 does. Use e3 for
hidden clusters in perception packs.
Also regenerates docs/scenarios.html to include the 10 new packs.
- CLAUDE.md +43 -0
- docs/scenarios.html +0 -0
|
@@ -78,6 +78,49 @@ A scenario is defective if any of the following hold:
|
|
| 78 |
in range, lunges at the nearest foe within `GUARD_AGGRO โ 16`,
|
| 79 |
snaps back past `GUARD_LEASH โ 18` โ the bait-able-defender idiom
|
| 80 |
proven in #4 / #6 / #7 / #15 / #18.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 81 |
|
| 82 |
## How to validate (deterministic, no model / no network)
|
| 83 |
|
|
|
|
| 78 |
in range, lunges at the nearest foe within `GUARD_AGGRO โ 16`,
|
| 79 |
snaps back past `GUARD_LEASH โ 18` โ the bait-able-defender idiom
|
| 80 |
proven in #4 / #6 / #7 / #15 / #18.
|
| 81 |
+
- **`spawn_point` filter applies ONLY to AGENT actors** โ enemy
|
| 82 |
+
actors with no `spawn_point` ALWAYS place, regardless of the chosen
|
| 83 |
+
group (`openra-data/src/oramap.rs::expand_scenario_actors`). You
|
| 84 |
+
cannot vary enemy count/composition by seed via `spawn_point`;
|
| 85 |
+
vary the agent's spawn instead and design symmetric enemy
|
| 86 |
+
placement. If ANY agent actor declares `spawn_point`, every agent
|
| 87 |
+
actor WITHOUT `spawn_point` is filtered OUT โ so duplicate
|
| 88 |
+
base/garrison actors across BOTH spawn groups at identical coords.
|
| 89 |
+
- **`silo` is NOT MustBeDestroyed** โ using it as an objective
|
| 90 |
+
landmark allows premature engine auto-`done` when the *other*
|
| 91 |
+
MustBeDestroyed buildings fall. Use `barr` / `proc` / `powr` /
|
| 92 |
+
`fact` for landmark anchors. (Wall-as-obstacle role is fine.)
|
| 93 |
+
- **`after_ticks` in a WIN clause is structurally incompatible with
|
| 94 |
+
ConquestVictoryConditions** โ the engine auto-`done`s the second
|
| 95 |
+
the last enemy `MustBeDestroyed` building falls, before the
|
| 96 |
+
`after_ticks` window opens, collapsing the run to DRAW. `after_ticks`
|
| 97 |
+
belongs in `fail_condition`. Encode timed-arrival semantics via
|
| 98 |
+
distance/landmark positioning instead.
|
| 99 |
+
- **`move_units` auto-fires opportunistically en route** regardless
|
| 100 |
+
of agent stance (even `stance:0` HoldFire). For perception packs
|
| 101 |
+
with hidden enemies that must be discovered without combat, set
|
| 102 |
+
the HIDDEN actors to `stance:0` themselves (defender side, not
|
| 103 |
+
scout side).
|
| 104 |
+
- **`pbox` costs 600** (not the 400 some old specs assumed);
|
| 105 |
+
defense and infantry are SEPARATE production queues so an
|
| 106 |
+
efficient policy queues `build('pbox')` and `build('e1')` in
|
| 107 |
+
parallel from turn 1.
|
| 108 |
+
- **`place_building` does NOT enforce build-adjacency** โ orders
|
| 109 |
+
work at arbitrary in-bounds coords. Forward-base / far-region
|
| 110 |
+
building is solvable with a single `build + place_building`.
|
| 111 |
+
- **`fact` has cost 0** โ not buildable via `StartProduction`
|
| 112 |
+
(engine gates on `cost > 0`). Use `proc` as the "second base seed"
|
| 113 |
+
in expand-arm objectives.
|
| 114 |
+
- **`not own_units_gte:1`** mis-fires on turn 1 when the agent
|
| 115 |
+
starts unit-less (documented footgun from `economy-force-buildup`).
|
| 116 |
+
Use `after_ticks` + `not has_building:fact` for the unit-less
|
| 117 |
+
start fail clause instead.
|
| 118 |
+
- **Certain mid-map cells silently fail to place enemy clusters**
|
| 119 |
+
(e.g. `(50,20)`, `(60,28)`, `(90,30)` observed by A7); nearby
|
| 120 |
+
cells (`(60,10)`, `(100,30)`, `(50,19)/(50,21)`) work. Likewise
|
| 121 |
+
`e1` at some cells doesn't surface in `enemy_positions` โ `e3`
|
| 122 |
+
does. For perception packs, use `e3` for hidden clusters and
|
| 123 |
+
verify cluster cells on a smoke run before authoring against them.
|
| 124 |
|
| 125 |
## How to validate (deterministic, no model / no network)
|
| 126 |
|
|
The diff for this file is too large to render.
See raw diff
|
|
|