yxc20098 commited on
Commit
d05021a
ยท
1 Parent(s): f5d1192

docs: Wave 1 engine-footgun aggregation in CLAUDE.md + regen scenarios.html

Browse files

Aggregates 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.

Files changed (2) hide show
  1. CLAUDE.md +43 -0
  2. docs/scenarios.html +0 -0
CLAUDE.md CHANGED
@@ -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
 
docs/scenarios.html CHANGED
The diff for this file is too large to render. See raw diff