Files
settled-reach/docs/sprints/sprint-22/joint.md
T
jpmschweitzerandClaude Opus 4.6 bccdcfcdcb docs(docs): add frontmatter to all sprint briefings
Standardized YAML frontmatter on all 115 sprint briefing files across
sprints 1-26 with title, description, type, status, sprint number, and
team fields.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 00:15:45 +01:00

93 lines
4.6 KiB
Markdown

---
title: "Sprint 22 — Joint Briefing"
description: "Fog regression fix coordination, triangle pressure threshold, entanglement config sync"
type: sprint
status: archived
sprint: 22
team: "joint"
---
# Sprint 22: Wire — Joint / Integration
**Goal:** Fix the fog regression, wire the authored Sova content into a production population and triangle set, and activate the contamination pacing layer that gives the vertical slice its 30-minute shape.
**Agents:** All implementation agents (Dudley, Tyre, Hoshe, Stig, Araminta, Justine)
---
## Pre-Sprint Actions
These must happen at sprint start, before implementation tickets begin:
| Action | Owner | Blocks |
|--------|-------|--------|
| Resolve Q-017 (triangle pressure threshold) | Gestalt + Paula (planning) | #254 |
| Confirm struct name for `EntanglementConfig` | Dudley + Stig sync | #175, #176 |
| Confirm `world_seed` field in startup IPC message | Tyre | #175, #178 |
If Q-017 is not resolved within the first two days of the sprint, implement #254 with a `CONTAMINATION_DELAY_TICKS = 1800` timer fallback and a `CONFRONTATION_THRESHOLD = 75` constant placeholder. Do not block the sprint on the discussion.
---
## Cross-Team Dependencies
| Dependency | Direction | Notes |
|------------|-----------|-------|
| `EntanglementConfig` struct definition | Server (#176) → Client (#175) | Server defines, client adds seed-carrying protocol field |
| `world_seed` in startup IPC message | Client (#175) → Server (#176) | Client sends seed; server uses it to seed `SimRng` and sample `EntanglementConfig` |
| Fog architecture fixed | Client (#569) → Visual (#563) | Araminta must not touch `fog.gdshader` until Stig's #569 is in review |
---
## Sprint Completion Proof
The sprint is done when all of the following are observable:
1. **Fog renders correctly.** Boot the client, walk around the Gauntlet. The forward cone has a smooth gradient edge (no tile-stepping). Tiles left behind the player show underlying art at ~25-30% fog overlay. Never-visited tiles are solid near-black. Araminta's zone temperature tints are visible in previously-explored areas.
2. **Production world boots.** Start the server without the `gauntlet` feature (or with a `--production` flag). The server logs show 17+ NPC entities spawned from `content/campaigns/main/`. No panic. No assertion failures.
3. **Triangles exist.** After production boot, a debug query (or test) confirms 5 `TriangleState` entities: 3 flagged as active forks, 2 as passive tensions. All have valid NPC role assignments.
4. **Contamination fires.** A test running 1801+ ticks asserts `ContaminationActive` is set and at least one `TriangleState::pressure > 0`.
5. **Seed determinism holds.** Two server boots with the same `world_seed` produce identical `EntanglementConfig` values. Different seeds produce different values.
6. **CI green.** `make ci` passes on all branches. No regressions.
---
## Test Plan Alignment (D-030)
Sprint 22 is in D-030 Phase 2 (sprint 3-4 scope: integration tests + information boundary negative tests). The new tests in this sprint:
- **#176:** Integration test — production boot spawns 17+ NPCs. (Phase 2 integration test)
- **#188:** Assertion test — 5 triangle entities with correct classifications post-boot. (Phase 2 integration test)
- **#254:** Timer test — 1801-tick simulation asserts `ContaminationActive`. (Phase 2 integration test)
- **#509:** Fuzzy test — 50-seed map invariant sweep. (Phase 2, borderline Phase 3)
- **#178:** Determinism test — same seed = same `EntanglementConfig`. (Phase 1 determinism, retroactive)
Hoshe owns acceptance test definition for #176, #188, #254. Coordinate with Dudley on world setup for integration tests — reuse the `AppBuilder` pattern from existing integration tests in `server/tests/`.
---
## Open Questions
| ID | Question | Blocks | Action |
|----|----------|--------|--------|
| Q-017 | Triangle pressure threshold | #254 | Resolve at sprint start. Fallback: timer + constant if unresolved in 2 days. |
| Q-020 | Multi-entity collision resolution | none this sprint | Tracked, not blocking. |
---
## PR Merge Order
To avoid conflicts on shared files (`fog.gdshader`, `bridge/types.rs`):
1. Server PRs (#565, #567, #509, #512) — merge first, no client/visual conflicts.
2. Server PR (#176#188#254 chain) — merge when chain is complete.
3. Client PR (#569 fog fix) — merge after server PRs are in.
4. Client PR (#175 + #178 seed config) — can merge alongside #569.
5. Visual PR (#563 fog tuning) — merge last, after client #569 is in main.
6. CI PR (#568 symlink removal) — merge anytime, no conflicts.