3.2 KiB
3.2 KiB
| id | title | priority | status | scope | owner | updated_at | evidence | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| p0-35 | Ecology telemetry instrumentation — flora canopy / undergrowth fields in turn_stats.jsonl | p1 | done | game1 | shipwright | 2026-04-18 |
|
Summary
turn_stats.jsonl currently emits aggregate.total_combats, player_stats.*.tier_peak etc. (per p0-25) but no flora/ecology fields. p0-30 / p0-31 bullets about "flora canopy values evolve in turn_stats.jsonl" cannot empirically close without these fields.
This objective adds per-turn ecology telemetry so future batches can cite canopy evolution as evidence of a working Rust ecology tick.
Scope reduced from P0 to P1 because:
- The p0-25 gate bullets (tier_peak, peak_unit_tier, wonder_count, combats, cities_founded) already confirm the game plays to victory under the Rust ecology path (smoke5 batch 2026-04-17: 8/10 seeds reached
outcome: victory, combats 131–1686, tier_peak 2–6). - Canopy instrumentation is a dev-tool nicety, not a shipping gate. Game 1 ships without it; follow-up lands pre-EA-polish.
Acceptance
- ✓
turn_stats.jsonlper-turn record gainsecology.flora_canopy_mean: f32+ecology.flora_canopy_delta: f32. Authored inauto_play.gd::_snapshot_ecology(new helper called from_append_turn_stats), sourced fromclimate.gd::get_canopy_summarywhich delegates toGdEcologyPhysics::canopy_summary(grid)insrc/simulator/api-gdext/src/lib.rs:229-267. The Rust bridge trackslast_canopy_meaninternally (NaN sentinel on first call so delta=0 rather than spurious) and iteratesgrid.tilesfiltering viaBiomeTag::IsWater. Schema update attools/schemas/autoplay/turn-stats-line.json:70-84. Canopy actually evolves:climate.gd:94-101now runsGdEcologyPhysics.process_step(_grid, 1.0)afterGdClimatePhysics.process_step, completing the dormant Rust ecology tick flagged by p0-30 / p0-31. - ✓
tools/autoplay-report.pysurfaces a canopy-trend summary —print_canopy_summary(added lines ~625-650) prints median final canopy mean + "games with evolving canopy" coverage ratio + median|delta|alongside existing quality metrics. - ✓ 10-seed apricot batch 20260417_233821_p035 shows non-zero canopy delta across turns (evolution confirmation). Per-seed (final turn_stats line): seed1 canopy=0.001311 delta=2.96e-05, seed2 0.003196/6.4e-05, seed3 0.005081/4.66e-05, seed4 0.004762/2.63e-05, seed5 0.002774/5.88e-05, seed6 0.002670/4.62e-05, seed7 0.001702/3.32e-05, seed8 0.000520/8.95e-06, seed9 0.002154/4.34e-05, seed10 0.001874/3.31e-05. All 10 seeds have non-zero mean AND non-zero delta — canopy is genuinely evolving, not frozen at map-gen values.
- ✓ Re-promote
p0-30-ecology-double-tick-fix.mdbullet 4 ✓ — see its updated acceptance citing the same batch.
Non-goals
- Per-tile canopy export (memory/size concern) — global or per-player averages only.
- Historical canopy replay tooling — post-EA polish.
Depends on
p0-31(Rust ecology path re-enabled). ✅ done via smoke5.