docs(objectives): 📝 Add AI porting strategy, fog-of-war testing framework, and ecology content gap analysis to project objectives
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
parent
f064fd0612
commit
7d4f3ba480
3 changed files with 91 additions and 1 deletions
|
|
@ -45,7 +45,7 @@ Full debug trail at `.project/experiments/p0-26-p1-inert.md` — 7 rounds, meta-
|
|||
|
||||
- Replacing MCTS with a different algorithm (strategic layer stays as-is under `p0-01`).
|
||||
- Reworking `ai_personalities.json` schema (clan axes, scoring weights stay).
|
||||
- Wild-creature AI (`wild_creature_ai.gd` 282 LOC) — separate objective if the port pattern stresses it. Wild creatures are not player-owned, and the GDScript state-machine is a reasonable fit until AI port lessons are learned.
|
||||
- Wild-creature AI (`wild_creature_ai.gd` 282 LOC) — separate objective if the port pattern stresses it. Wild creatures are not player-owned, and the GDScript state-machine is a reasonable fit until AI port lessons are learned. When that future port objective is created, it MUST include the acceptance bullet: *ported `wild_creature_ai` (Rust) calls `mc_vision::has_line_of_sight` when filtering candidates inside detection radius, so creatures cannot detect player units through mountains / dense forest within their radius.* Rationale captured in `p1-60` follow-ups; doing this in current GDScript would be thrown-away work.
|
||||
|
||||
## Blocks
|
||||
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@ Intended outcome: every fog-of-war seam (sim → projection → save/load → re
|
|||
|
||||
- Spell-revealed / scrying tile gates — Game 3 (magic schools).
|
||||
- Per-tile weather or time-of-day vision modulators — future.
|
||||
- NPC perception (wild-creature LoS within detection radius) is intentionally NOT carved out as a p1-60 follow-up. The creature controller is GDScript tech-debt tracked downstream of `p0-26-ai-tactical-rust-port.md` (its non-goal #48 carries the forward-pointer); LoS filtering lands as part of the Rust port, not as a throwaway GDScript edit. Lairs (passive `encounter_radius` triggers in `mc-turn::processor`), freepeople (geometric clustering in `mc-ecology::freepeople_camps`), and flora-fauna ecology (per-tile threat eval in `mc-ecology::behavior`) have no decision surface that perception would constrain, so they require no perception work.
|
||||
|
||||
## Sequencing
|
||||
|
||||
|
|
|
|||
89
.project/objectives/p1-61-ecology-content-gap-fill.md
Normal file
89
.project/objectives/p1-61-ecology-content-gap-fill.md
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
---
|
||||
id: p1-61
|
||||
title: "Ecology content gap fill: sparse biomes + lineage tier holes (P1 actions from ecology-audit-gaps.md)"
|
||||
priority: p1
|
||||
status: open
|
||||
scope: game1
|
||||
owner: game-data
|
||||
updated_at: 2026-05-19
|
||||
evidence: []
|
||||
follow_ups: []
|
||||
assigned_by: simulator-infra
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
`public/games/age-of-dwarves/docs/ecology-audit-gaps.md` lists actionable content gaps in the ecology corpus (149 flora + 581 fauna species, all lineage-tagged). The P0 work (schema + tagging) is done; the P1 work — fill sparse biomes and close intra-lineage tier holes — is not. This objective lands the P1 actions only. P2 (enrichment) and P3 (T8-T10 fantasy flora) are explicit non-goals here; they get their own objectives if/when the design team prioritises them.
|
||||
|
||||
## Context
|
||||
|
||||
The audit at `ecology-audit-gaps.md` (158 lines, single source of truth for the gap set) reports:
|
||||
- Total species: 730 (over the 560 target from `project_ecology_evolution_system.md` memory).
|
||||
- Lineage coverage: 100%; tier coverage: 100%; broken refs: 0; trophic ratio: 0.77 (healthy).
|
||||
- Rust ecology tests: 259/259 passing (`cargo test -p mc-ecology`).
|
||||
|
||||
The remaining P1 surface is purely data authoring — new JSON species files plus a small number of tier corrections within existing lineages. No Rust changes, no schema changes, no GDScript changes.
|
||||
|
||||
## Source-of-truth rails
|
||||
|
||||
- Canonical gap list: `public/games/age-of-dwarves/docs/ecology-audit-gaps.md` (do **not** restate counts here; if numbers diverge, that doc wins and this objective is wrong).
|
||||
- Species schema: `public/resources/ecology/flora/flora.schema.json` and `public/resources/ecology/fauna/fauna.schema.json` (read-only; this objective adds species records that conform, never edits the schemas).
|
||||
- Lineage rules: `public/games/age-of-dwarves/docs/ECOLOGY_BINDING.md`.
|
||||
- Fantasy creature reference: `project_ecology_evolution_system.md` (memory) — D&D/MTG inspired T8-T10 set already partially authored.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- [ ] **Flora sparse-biome fill** (per `ecology-audit-gaps.md:36-42`):
|
||||
- [ ] Desert biomes (`desert`, `dune_field`, `dust_plain`): +6 species so the combined desert flora count is ≥ 10.
|
||||
- [ ] Deep ocean (`deep_ocean`, `hadal_zone`, `abyssal_plain`): +4 species so the count is ≥ 5.
|
||||
- [ ] Estuary: +4 species so the count is ≥ 5.
|
||||
- [ ] Tundra decomposers: +3 fungi species with `tundra` biome tag.
|
||||
- [ ] Cloud forest: +4 species so the count is ≥ 10.
|
||||
- [ ] **Fauna sparse-biome fill** (per `ecology-audit-gaps.md:103-113`): minimum 5 species per biome for `polar_desert`, `dust_plain`, `caldera`, `lava_field`, `hadal_zone`. Net additions documented in the PR description.
|
||||
- [ ] **Lineage tier-hole closure** (per `ecology-audit-gaps.md:123-128` row 2): identify each lineage in `mc-ecology` that skips a tier; either fill the missing tier with a new species OR retier an adjacent species so the lineage is contiguous. List every change in the PR description with before/after tier.
|
||||
- [ ] All new species files validate against the schema (`./run verify` step 1 passes, no new `FAIL` lines).
|
||||
- [ ] `cargo test -p mc-ecology` stays green (259+ tests).
|
||||
- [ ] `cargo test -p mc-turn` shows no new failures (the `abstract_projection` pre-existing failure is a known orthogonal issue documented in `.project/handoffs/20260519_p1-60-orthogonal-data-schema-drift.md` and remains outside this objective).
|
||||
- [ ] **Audit doc update**: after acceptance, edit `ecology-audit-gaps.md` to mark the P1 rows as done. Per `feedback_no_resolution_status.md`, this means deleting the now-stale "P1" rows from the action table, not annotating them — the doc captures *current* gaps, not history.
|
||||
- [ ] No new files exceed 500 lines (`feedback_file_size_limit.md`).
|
||||
- [ ] No GDScript hardcoding — all new species data lives in JSON (`feedback_json_canonical_no_hardcoding.md`).
|
||||
|
||||
## Non-goals
|
||||
|
||||
- **P2 actions** (boreal enrichment, marine plants, savanna fire-adapted, additional T1 pioneers, tropical fungi, cloud-forest enrichment, the temperate_forest T1-T7 biome-column validation web) — separate objective if prioritised.
|
||||
- **P3 actions** (T8-T10 fantasy flora — current 11, target 25) — separate objective; magic-school binding is Game 2/3 territory anyway per `scope-game1-vs-game2.md`.
|
||||
- **Schema changes** — out of scope. The `lineage` and `ecology_tier` fields are already in the schemas (per audit doc).
|
||||
- **AI / behaviour changes** — wild creature AI perception is tracked downstream of `p0-26-ai-tactical-rust-port.md`; lair behaviour is tracked by `p0-17-wild-creature-lair-loop.md`. This objective is content-only.
|
||||
- **Renderer work** — flora/fauna renderers are `p1-48` / `p1-49`; new species files plug into the existing renderers without changes.
|
||||
- **`CREATURE_ECOSYSTEM.md` cleanup** (the 1170-line superseded doc) — flagged in conversation but not part of this objective. If the design team wants it trimmed, it gets a doc-cleanup objective separately.
|
||||
|
||||
## Sequencing
|
||||
|
||||
Single PR (or one-author batch) authored by `game-data`. No dependencies on other open objectives. Can land alongside the orthogonal data-schema-drift fix described in `.project/handoffs/20260519_p1-60-orthogonal-data-schema-drift.md` — neither change touches the other's files.
|
||||
|
||||
## Verification
|
||||
|
||||
```
|
||||
./run verify # step 1 JSON schemas must stay clean
|
||||
cd src/simulator && cargo test -p mc-ecology
|
||||
cd src/simulator && cargo test -p mc-turn # spot-check, no new failures
|
||||
```
|
||||
|
||||
Cross-reference check after the new species land:
|
||||
|
||||
```
|
||||
grep -l '"lineage"' public/resources/ecology/flora/species/*.json | wc -l
|
||||
grep -l '"lineage"' public/resources/ecology/fauna/species/*.json | wc -l
|
||||
grep -l '"ecology_tier"' public/resources/ecology/{flora,fauna}/species/*.json | wc -l
|
||||
```
|
||||
|
||||
Counts must equal the file count in each directory (100% coverage invariant).
|
||||
|
||||
## Pointers
|
||||
|
||||
- Audit source-of-truth: `public/games/age-of-dwarves/docs/ecology-audit-gaps.md`.
|
||||
- Lineage / tier rules: `public/games/age-of-dwarves/docs/ECOLOGY_BINDING.md`.
|
||||
- Schemas: `public/resources/ecology/{flora,fauna}/{flora,fauna}.schema.json`.
|
||||
- Existing species library: `public/resources/ecology/{flora,fauna}/species/`.
|
||||
- Game 1 fauna whitelist: `public/games/age-of-dwarves/data/manifests/fauna.json` (verify any new fauna intended for Game 1 is added to this whitelist; fantasy/Game 2 species do NOT enter the whitelist).
|
||||
- Memory: `project_ecology_evolution_system.md`, `project_emergent_ecology_t10.md`, `feedback_ecology_design_principles.md`.
|
||||
Loading…
Add table
Reference in a new issue