Tickets: - ci (7): #854, #855, #856, #857, #858, #859, #723 - server (9): #853, #860, #862, #863, #874, #877, #878, #789, #847 - client (6): #866, #869, #870, #872, #873, #875 - copy (3): #861, #865, #876 Themes: asset pipeline discipline, PROTOCOL_VERSION removal (D-192), D-167 HeritageRoot purge, D-032 smuggler/detective enum audit, New Game regression fix + merge-path test coverage, copy wiki residue purge, bookmark save-state, generator quality patches. Debt surfaced from Q/D-record sweep: Q-095 Commission name, D-167 and D-032 residue, plus spring-cleaning pulls from stale backlog (#789, #847, #723, #862). #868 cancelled (superseded by #874 + #875).
6.3 KiB
6.3 KiB
Sprint 37: Sweep — Server Tasks
Goal: Spring-clean accumulated debt: asset pipeline discipline, PROTOCOL_VERSION removal, D-167/D-032 dead-code purge, New Game regression fix, copy wiki residue, bookmark save-state, and generator quality patches.
Branch: sprint-37/server
Agents: Dudley (dev), Tyre (arch), Hoshe (QA)
New Tickets
| # | Title | Priority | Blocked by |
|---|---|---|---|
| #863 | Wire SelectedBookmark into SaveState | medium | — |
| #874 | Drop PROTOCOL_VERSION on server (D-192) | medium | — |
| #853 | Generator-patch follow-up: dedup, mountains, suffix, compass | medium | — |
| #860 | Resolve 21 raw-commodity / system coverage gate gaps | medium | — |
| #877 | Remove HeritageRoot type alias and Heritage enum variant (D-167) | medium | — |
| #878 | Audit and purge dead smuggler/detective character enum (D-032) | medium | — |
| #847 | Determinism smoke test for generate_atlas.py | low | — |
| #789 | fix(simulation): storyteller activation_pass log DEBUG not WARN | low | — |
| #862 | Refactor BookmarkPlugin to accept injected registry | low | — |
Use tooling/db/ticket show <id> for full details.
Key Decisions
decisions/architecture.md— D-192 (drop PROTOCOL_VERSION lockstep handshake), D-005 (IPC protocol)decisions/content.md— D-167 (corridors replace heritage roots, 2026-03-24)decisions/perception.md— D-032 (smuggler/detective enum obsolete post-D-117; D-121 culture-driven voice)
Notes
#863 — Wire SelectedBookmark into SaveState
- Add
Serialize,Deserializederives toSelectedBookmarkinserver/src/bookmark/mod.rs. - Register
SelectedBookmarkas a serializable resource inserver/src/simulation/save_state.rs. - Round-trip test: save with bookmark selected → load →
SelectedBookmarksurvives. - Update bookmark spec §4.4 (
docs/architecture/sprint-36-bookmark-spec.md) — remove the v0.2-deferred scope note. - Replaces inline TODO at
server/src/bookmark/mod.rs:95-99.
#874 — Drop PROTOCOL_VERSION on server (D-192)
- Remove:
versionfield from snapshot envelope inserver/src/bridge/types.rs,PROTOCOL_VERSIONconstant, and version stamp in encode path. - Keep all field-presence and roundtrip behavioral tests. Tautological version-literal assertions were already deleted in Sprint 36.
- Client ticket #875 is blocked by this — server PR merges first.
- After this lands, genuine schema drift surfaces as MessagePack missing-field errors downstream. That is the intended signal.
#853 — Generator-patch follow-up
- Patch
tooling/planet-gen/generate_atlas.pyandtooling/planet-gen/gemma_naming.pyfor 7 systematic issues documented indocs/design/atlas-generator-refinement-notes.md:- Cross-body city name dedup (49 collisions — 'Jade Harbor' on 20 bodies, 'Fort Iron' on 10)
- Cross-body mountain name dedup (186 bodies with empty names, 'Riverbend' on 39)
- Suffix monotony (-rant/-berg clustering)
- Compass-direction defaults — forbid 'Eastern X / Western Y' pattern in few-shot
- Cultural crossmix gap — thread corridor + cultural-history context into naming prompt
- River vocabulary bleeding from navigational terms (blocklist circumflex/contraflow)
- Unnamed infrastructure — emit
<City-A>-<City-B>convention for roads/rail at generation time
- Verification: re-run Paula's analysis script after patching; confirm collision counts drop.
#860 — Resolve 21 coverage gate gaps
make economy-dbPhase 2 coverage gate fails on 21 raw-commodity/system gaps in tier1 corp tags. The brand layer (V-B01..V-B06) passes cleanly — this is upstream.- Identify the 21 specific gaps. Either backfill tier1 corp tags or relax the gate if gaps are intentional (e.g. commodity deliberately imported from outside the Reach).
make economy-dbmust pass end-to-end before Phase 2 demand simulation can run in anger.
#877 — Remove HeritageRoot + Heritage variant (D-167)
- D-167 (2026-03-24) retired the 7 abstract heritage roots in favor of corridors. Two dead stubs remain:
pub type HeritageRoot = String;atserver/src/simulation/generator.rs:76ZonePaletteModifier::Heritage(HeritageRoot)variant atgenerator.rs:369
- Delete the type alias, drop the enum variant, remove all Heritage modifier construction sites.
- Verify no external consumer before deleting. Same pattern as D-192 cleanup.
#878 — Audit and purge D-032 dead enum
- D-032 is marked "[Obsolete post-D-117: smuggler/detective eliminated. v0.2 uses culture-driven voice per D-121; this enum is unused.]"
- Known reference sites:
server/src/bridge/types.rs,server/src/perception/observer/mod.rs,server/tests/archetype_monologue.rs, and content schemas. - Audit first — some usages may be load-bearing (e.g. a wider pattern match). Remove confirmed-dead surface only. Do not mass-delete before reading each callsite.
#847 — Determinism smoke test for generate_atlas.py
- ~60 lines of bash or pytest. Place in
tests/consistent with project test layout. - Run
generate_atlas.py --body <small-body> --force --seed 42twice; diffmarkers.jsonbyte-for-byte. - Fails if output differs. Guardrail against determinism regressions in terrain analysis, city placement, A*, and naming.
#789 — Storyteller log level fix
activation_pass: no Simmering triangles — holdingfires as WARN every few seconds during early gameplay when no NPC relationships have escalated. This is normal state, not an error condition.- Change to DEBUG or TRACE. One-line fix.
#862 — BookmarkPlugin registry injection
BookmarkPlugin::buildcallsregister_default_bookmarks(&mut registry)unconditionally — no hook for a test registry.- Proposed:
BookmarkPlugin::new(registry)injection. Default constructor still wires the canonical tycoon registry; injection variant is for tests and future TOML loading. - File:
server/src/bookmark/mod.rs:107-118. Flagged in PR #132 review; accepted as follow-up.
Dependency Chain
#874 (server PROTOCOL_VERSION drop) → unblocks #875 (client)
#877, #878, #789, #847, #862 → standalone, parallel
#863, #853, #860 → standalone, parallel
PR Workflow
tea pr create --repo jpmschweitzer/settled-reach --login schweitz \
--title "refactor(server): sprint 37 — dead code purge, protocol cleanup, generator patches" \
--description "body" \
--base main --head sprint-37/server