Docs: DR-039 Slice 2 (two classes) record + roadmap update

Slice 2 complete: Warrior/Ranger, DRG-asymmetric, aim-directed cone, menu picker,
class carrier via GoInGameRequest. Two VFX-polish items deferred (review-sanctioned).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-18 00:41:25 -07:00
parent 431a7e2ed9
commit d6d75b4706
3 changed files with 54 additions and 3 deletions
@@ -43,6 +43,10 @@ Ran the adversarial pre-code review (1 ground + 3 lenses: netcode/determinism ·
**Phase 1 BUILT + green (this session):** `StatIds` (CharacterId.Warrior=2/Ranger=3, AbilityId.WarriorCone=4, StatTarget.MeleeDamage=9/MeleeRange=10); `CharacterStatsRef.Id``[GhostField]` (the one re-bake); `MeleeComboSystem` folds the per-player melee mods (defensive `HasBuffer` guard → identity without seeds, so behavior-preserving). Compiles clean; **345/345 EditMode**. UNCOMMITTED (partial slice).
## Next (Slice 2 continuation)
## Slice 2 — COMPLETE + validated (2026-06-18, [[DR-039_Slice2_Two_Classes_Warrior_Ranger]])
Build the rest of Slice 2: (1) `Tuning.ClassSourceId`; (2) the Warrior cone — `PendingConeFire` + `AbilityFireSystem` Cone-archetype branch (aim-directed, cooldown both worlds, signal server-only) + `ConeFireDamageSystem`; (3) the class carrier `GoInGameRequest.ClassId` + `ClassSelection` singleton + `GoInGameClientSystem` send + `GoInGameServerSystem` class writes; (4) AbilityDatabase authoring rows (Warrior/Ranger `CharacterStatsBlob`; WarriorCone `AbilityDefBlob`, archetype Cone, wide angle in `AutoTargetConeRadians`); (5) the menu picker UI (`MainMenuController``WorldLauncher``ClassSelection`); (6) a client cone VFX + the slash-arc reading the folded melee range. Then re-bake + Play-validate (server==client, the class asymmetry, the cone, clean handshake) + class-fold/cone EditMode tests, then commit Slice 2 as one unit (DR-039). Slice 1's operator visual fun-gate also still open.
Built the whole slice across 4 committed chunks (`d9d67c4e7` `431a7e2ed`): the data layer + melee-augment routing; the class carrier (`GoInGameRequest.ClassId` + `ClassSelection` + `ClassTraits`, the review's fix for the per-world-`ConnectionConfig` blocker); the aim-directed Warrior cone (inline in `AbilityFireSystem`'s server branch, same-tick); the WarriorCone ability authored + subscene re-baked; the menu class picker. Character deltas ride replicated `StatModifier` seeds on the Default character (prediction-correct, no per-class blob churn); melee asymmetry folds in `MeleeComboSystem`. **348/348 EditMode** (+3 `ClassTraits` tests); **Warrior Play-validated end-to-end, server==client** (`AbilityRef=WarriorCone`, 4 seeds, eff MaxHP 130 / MoveSpeed 5.1 / cone dmg 22; `conns=1` — re-bake handshake intact; zero runtime errors). **Deferred (review-sanctioned polish):** the WarriorCone client VFX + the slash-arc reading the folded melee reach. **Open: the Slice 2 fun-gate** (do the classes feel distinct — operator's eyes).
## Next
Continue the roadmap: **Slice 3 — Expedition Combat Spine** (the procedural run venue). Open it with its adversarial netcode/determinism design review FIRST ([[validate-netcode-design-before-coding]]) — it's the heaviest netcode slice (reactivate `ExpeditionFieldSystem` → authored-arena pool + `ZoneEnemySpawnSystem(RegionTag{Expedition})` + the `EnemyAISystem` region-filter fix + the `ThreatDirector` mid-siege-return gate + a zone-clear reward + a replicated zone-theme byte + the required sortie→clear→return→escalated-siege loop; manage `RegionRelevancySystem` per-tick cost). Then Slice 4 (persistent meta). Operator fun-gates for Slices 1 + 2 remain open (their eyes).