# Sprint 38: Depth — Server Tasks **Goal:** Map the generation pipeline from planetary heightmaps to walkable tile environments, formally park character/apartment work behind the full cascade, and close test/infra debt from Sprint 37. **Branch:** `sprint-38/server` **Agents:** Dudley (dev), Tyre (arch), Hoshe (QA) ## New Tickets | # | Title | Priority | Blocked by | |---|-------|----------|------------| | #899 | District skeleton generator — Phase 1 implementation | high | #897 | | #885 | Multiple baseline tests panic with Bevy Resource-does-not-exist | medium | — | | #892 | Expand check-systems-db-stamp to cover naming helpers | medium | — | | #886 | Generator polish: suffix monotony auto-fix + cultural-history prompting | low | — | Use `tooling/db/ticket show ` for full details. ## Key Decisions - `decisions/architecture.md` — D-110 (signed z-levels), D-108 (MobileChunk) - Generator data model: `server/src/simulation/generator.rs` defines the full type hierarchy ## Notes **#885 — Bevy baseline panics (fix first)** - 6 tests fail on clean main with `Resource does not exist` panics. Confirmed not a sprint regression — present at commit f0465e40. - @hoshe assigned. This is the first ticket to close — other server work should not land on a broken test baseline. - Likely missing `.init_resource::()` or `.insert_resource(T::default())` calls in test setup. **#892 — Stamp expansion for naming helpers** - `tooling/check-systems-db-stamp` only tracks `generate_atlas.py` source. The naming pipeline (`gemma_naming.py`, `naming_core.py`) is not covered — changes to naming helpers won't trigger stale-stamp detection. - Add these files to the `GENERATOR_SOURCES` dict in `tooling/check-systems-db-stamp`. - Mirror the change in the `/pr-push` skill's source-file watch list. **#886 — Generator polish (suffix monotony + cultural-history)** - Follow-up to Sprint 37 #853. Two partial items remain: - §3 suffix monotony: `gemma_naming.py` detects clustering but doesn't auto-fix. Add retry logic. - §6 cultural-history prompting: explicit history context in the few-shot prompt for richer names. **#899 — District skeleton generator Phase 1 (BLOCKED by #897)** - DO NOT start until the planning ticket #897 closes and the generation cascade D-records exist. - The data model in `server/src/simulation/generator.rs` is complete: `DistrictSkeleton`, `BlockSkeleton`, `BlockPlacement`, `FloorZone`, `ZonePalette`, etc. All generation logic is stubs. - Phase 1 scope: given a city entry from `markers.json` + `planet_class` + economy node, produce a filled `DistrictSkeleton` with real block assignments, setting types, zone palettes. - No chunk-level tile generation yet — skeleton structure only. - Key integration: `chunk_streaming.rs` consumes chunk data. The skeleton feeds into chunk fill (Phase 2, future sprint). ## Dependency Chain ``` #885 (Bevy panics) → standalone, fix first #892 (stamp expansion) → standalone #886 (generator polish) → standalone #899 (district skeleton) → blocked by #897 (planning) ``` ## PR Workflow When ready to submit, create a PR with `tea` CLI: ```bash tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(simulation): sprint 38 server" --description "body" --base main --head sprint-38/server ```