docs(@projects/@magic-civilization): 📝 p3-18 — record explicit-embark deletion (P3b) + P4/P5 scope

Auto-embark is now the sole embark model. Remaining: transport (P4, large fresh
Rust mechanic), GDScript mirror + vestigial-FFI trim (P5, needs build host),
end-to-end conquest demo (P6).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Natalie 2026-06-25 05:19:08 -04:00
parent dabcc6716a
commit 416c62da85

View file

@ -70,12 +70,23 @@ two-tier Civ model on the existing tree (`public/resources/techs/naval.json`):
the embark tier (mountains/volcano/ice stay blocked). So a teched frontier /
capital-march army paths across water. Tests `embark_opens_water_for_passability`
+ `embark_never_opens_non_water_impassables`; mc-ai 287 green. Commit `6b41b07f4`.
- [x] **P3b — delete the Civ-V explicit-embark model (single source).** ✅ Removed
`ActionKind::Embark/Disembark`, the 4 embark `DisabledReason`s, the amphibious
action-gen block, `handle_embark/handle_disembark` + dispatch, the dead
`UnitCapability` embark fields + all fixtures/tests. Auto-embark is now the only
embark model. mc-core 263 / mc-ai 287 / mc-turn 244 green. Commit `f830a1ce0`.
(api-gdext `legal_actions_for`/`can_invoke` keep the embark FFI inputs as
vestigial/ABI-stable — trimmed in P5.)
- [ ] **P4 — transport load/carry/unload.** Implement the `transport` keyword:
load adjacent land units (≤ capacity) onto a transport ship, they move with it,
unload onto adjacent land. Carried units protected. Unit tests.
- [ ] **P5 — GDScript pathfinder mirror.** `pathfinder.gd::_is_passable` mirrors
the embark gate (or, preferably, the GDScript movement delegates to the Rust
pathfinder so there is one implementation — Rail 1).
unload onto adjacent land. Carried units protected. Unit tests. *(Large fresh
mechanic — cargo state on MapUnit + load/unload + carry-move + combat. Pure
Rust, cargo-test verifiable.)*
- [ ] **P5 — GDScript pathfinder mirror + FFI trim.** `pathfinder.gd::_is_passable`
mirrors the embark gate (or delegates to the Rust pathfinder — Rail 1); drop the
vestigial embark inputs from `legal_actions_for`/`can_invoke` + their GDScript
callers (`unit_panel.gd`, `unit.gd`, `test_unit_actions.gd`). *(Needs the build
host: GUT + dylib; local cargo resolver panics on gdextension-api.)*
- [ ] **P6 — end-to-end.** A headless 1v1 (both sides driven) reaches a decisive
`game_over` by crossing water to capture the enemy capital — the demo that
motivated this objective.