Files
gogobee/CHANGES_24H.md
prosolis 4e412219f3 WIP: in-flight combat/expedition/flavor changes
Bundle of uncommitted working-tree edits across combat engine, expedition
cycle, flavor pools, and TwinBee/zone narration. Includes new files:
combat_debug.go, dnd_boss_consumables.go, dnd_dex_floor.go, plus
CHANGES_24H.md and REBALANCE_NOTES.md scratch notes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 21:59:19 -07:00

8.7 KiB
Raw Blame History

24-Hour Change Summary — 2026-05-08 → 2026-05-09

139 commits since midnight 2026-05-09 plus an active uncommitted set. Grouped by theme below; commit hashes in parentheses for traceability.


1. Phase L — Legacy AdventureCharacter retirement (final wave)

The multi-day plan to retire AdvCharacter/CombatLevel/combat_engine reached its close-out. After today, dnd_character + player_meta are the canonical stores; the legacy table is cold and gated behind GOGOBEE_LEGACY_PURGE.

  • L2 — Arena boss flow (62eed7a3b4dfa4): extracted renderBossOutcome, added ZoneArena synthetic ID, built boss-shaped arena bestiary, wired ARENA_BOSS_FLOW, migrated arena counters/render/tier-gates to DnDCharacter+player_meta, then ripped the legacy arena combat path — boss flow is now the only path.
  • L3 (d300008): co-op dungeons deleted; in-flight runs auto-refunded on startup.
  • L4aL4f (730f165c719b30): per-feature dual-write + reader flips off AdvCharacter — hospital, rival, masterwork, pet, housing, render/twinbee. DisplayName migration scaffold (5000c3d, cc6fb7d) preceded the L5 work.
  • L5aL5h (79e5d191c7939c): final teardown sub-phases — skills, babysit, NPC counters, streak/lifecycle, death state, misc fields, mass DnDCharacter backfill, then saveAdvCharacter fan-outs to player_meta. Table goes cold.
  • L5 close-out (36e14c6, c0f03a4, 5d98e56, 9d6e8f6, c8849fd, 35fa2b8): §7.4 doc reconciled, last 3 CombatLevel readers retired, loader rewired with bootstrap, redundant dual-writes dropped, !expedition list forked off zoneCmdList, and the daily report migrated to a D&D-native renderer with unified activity source.

Memory state: project_phase_L_progress.md now reads "deployed to prod; legacy table cold; operator can flip GOGOBEE_LEGACY_PURGE=1 anytime."

2. Phase G — Branching zone graphs (greenfield rebuild)

End-to-end shipped today. Old linear room-sequence model retired in favor of explicit graph nodes per zone.

  • G1G4 (a413c92): schema, graph types, legacy compiler, run-state dual-write.
  • G5 (2d249d7): navigation surface gated behind GOGOBEE_BRANCHING_ZONES=1.
  • G6 (893d3da): dependent surfaces re-keyed onto graph nodes.
  • G7 (90ff766, b3d3db9): Crypt of Valdris POC graph; empty columns collapse in !zone map.
  • G8aG8i (9312ef5304ad27): all 9 zones authored with deliberately varied map shapes (per playtester feedback that uniform shapes felt rote) — Goblin Warrens diamond, Forest Shadows asymmetric fork, Sunken Temple sequential, Manor Blackspire stacked 3-way, Underforge late triple fork, Feywild woven, Dragon's Lair converging+capstone, Abyss Portal three sequential, Underdark convergent triangle.
  • G9aG9c (103cf30, a5c0a83, 7ec78f3): feature flag removed, current_room/room_seq_json no longer persisted, legacy columns dropped behind a purge gate.

Memory: project_phase_G_progress.md — G1G8 shipped; G9 column purge / merge to main complete this session.

3. Hospital flavor + economy

  • 2454f5f: revival cost cut to 5k/level + new CHA-based haggle roll (!hospital).
  • 374d5ea, b8e8f99, 97e4a50: discharge-bill descriptor variety (USA-standards quip, prep fix, "a lot" swap).
  • Merge: feat/hospital-bill-flavor → main (3446103).

4. Misc admin / UX

  • 8e8d378: Space inviter now DMs admin to confirm invites for Space-less local users; merged via 86c6736.
  • 3cf83e3: !eurogrant admin command for granting EUR balance.

5. Combat — Sudden Death + HP precision

  • de02907: Sudden Death phase added to all combat. Tiebreak now uses absolute HP (was % of max — fixed an edge case where a wounded high-HP fighter would lose to an undamaged low-HP enemy).
  • c5217e9: wounded-carry HP display fixed (the "100/100 instead of 100/123" bug); auto-crit narration cleaned.
  • 9ce82f7: round half-up on HP wound persistence to fix the 101→100 round-trip drift through the dndChar HP scale. This was the patch that exposed the deeper dual-scale problem fixed by today's session work below.

6. Today's session (uncommitted as of writing)

6a. Combat HP unification — kill the dual scale

Drift bug 9ce82f7 only papered over: combat ran on 50 + CombatLevel*2 + equip + arena_sets + housing (~123 for an L8 char) and bridged to dnd_character.hp_max (~78) via percentage scaling each fight. Now:

  • New CombatStats.HPBonus int field captures the equipment / arena-set / housing HP buff as an absolute number (legacyTotal (50 + CombatLevel*2)) — DerivePlayerStats keeps writing it for tests, but production combat ignores its MaxHP.
  • applyDnDPlayerLayer now reseats stats.MaxHP = c.HPMax + stats.HPBonus. Single canonical HP scale; gear/arena/housing buffs preserved as a flat add-on.
  • applyDnDHPScaling is a direct integer copy: wounded entry = c.HPCurrent + HPBonus (no percent math, no dndWoundFloor).
  • persistDnDHPAfterCombat is a direct integer copy: clamps endHP to [0, c.HPMax]. Gear cushion is fight-only, doesn't carry over.
  • Penalty zone HP scaling moved from before to after applyDnDPlayerLayer so the penalty applies on the unified scale.
  • Dropped the unused legacyStartHP parameter from persistDnDHPAfterCombat.
  • Stale "legacy HP / legacy combat-engine" comments swept; dndWoundFloor constant deleted.

Files: combat_engine.go, combat_stats.go, combat_bridge.go, dnd_combat.go, dnd_zone_combat.go + tests (dnd_plugs_test.go, dnd_combat_test.go, dnd_audit_fixes_test.go, dnd_proddb_integration_test.go).

Memory: project_unify_combat_hp.md flipped to shipped.

6b. Stats card cleanup

!stats (super-stats EX+α) now drops two stale references:

  • The "Combat Lv.X (XP)" column — legacy combat_level from player_meta is no longer rendered (the survivor in adventure_render.go reads from dndLevel and is correct under the unified model).
  • The "🤖 Lost to TwinBee: N times" line — entire bot_defeats block dropped.

Files: stats.go.

6c. Zone combat consumables wiring

Bug: runZoneCombat (zone elite/boss + arena + expedition path) never loaded, selected, or applied consumables — players' healing potions / wards / damage tonics sat in inventory while they died at 21/56 → 0/56 to a Wight.

  • Wired loadConsumableInventorySelectConsumablesApplyConsumableModsinjectConsumableEventsremoveAdvInventoryItem into runZoneCombat, mirroring runDungeonCombat's shape.
  • Added allowSkipTrivial bool parameter to SelectConsumables. Zone/arena pass false (those are never chump fights, and the legacy threat assessor underestimates d20 lethality — one nat-20 streak ends the run). Dungeon path keeps true so trivial rooms still skip.

Files: dnd_zone_combat.go, combat_bridge.go, adventure_consumables.go (+test).

6d. TwinBee voice — surgical third-person trim

User flagged TwinBee flavor as overusing third-person self-reference ("TwinBee X. TwinBee Y. TwinBee Z." density across the same entry). Sweep across 14 flavor files, surgical rule: trim only entries with 3+ "TwinBee" mentions or genuine subject-stack tics; leave 12 mentions alone; never switch to first-person "I"; preserve all jokes/references/length.

File Entries trimmed
twinbee_gm_flavor.go 7
twinbee_expedition_flavor.go 17
twinbee_resource_flavor.go 5
6 of 11 zone_*flavor.go files 1 each
zone_dragons_lair, zone_underdark, zone_forest_shadows, zone_goblin_warrens, +1 0 (already sparse)

~35 entries touched out of ~600+. Memory: new feedback_twinbee_voice.md documents the rule for future authoring; the // DO NOT REWRITE headers on flavor files now treated as soft (override required for sweeps, but standing for incidental edits).


Headline numbers

  • 139 commits since midnight 2026-05-09 (most landed before this session).
  • Two long-running phases closed today: Phase L (legacy adv-character retirement) and Phase G (branching zone graphs).
  • One new refactor shipped this session: combat HP unification — round-trip drift gone, single canonical HP scale.
  • Two production bugs fixed this session: stats card stale columns; zone combat consumables not firing.
  • One creative QA pass: ~35 TwinBee flavor entries trimmed across 14 files.

Next on deck

  • Per project_consumable_crafting.md: foraging-level auto-crafting consumables from ingredients.
  • Per project_adv_dm_window_tiers.md: split advDMResponseWindow into high-pri vs low-pri constants.
  • Per project_human_race_bonus.md: wire Human race's floating +1 stat bonus.
  • Phase G done → optional GOGOBEE_LEGACY_PURGE=1 flip whenever operator wants the cold table gone.