Adv 2.0 L5 close-out: loader rewire + adventure_characters purge gate

Rewires loadAdvCharacter / createAdvCharacter to source from player_meta,
drops every legacy-table fallback in the loadXxxState helpers, and adds a
GOGOBEE_LEGACY_PURGE=1 gate to drop the now-cold adventure_characters
table. Schema CREATE removed and column migrations tolerate the missing
table so the purge stays sticky across reboots.

§7.4 of the migration plan is reconciled to document that
player_meta.combat_level stays — combat_stats.go consumes it via the
overlay and is shared infrastructure, not legacy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
prosolis
2026-05-09 12:43:25 -07:00
parent 36e14c6084
commit c0f03a41b5
14 changed files with 201 additions and 2601 deletions

View File

@@ -413,7 +413,7 @@ func (p *AdventurePlugin) midnightReset() error {
// from concurrent writers (e.g. reminder fire loop).
var resetErr error
for attempt := 0; attempt < 3; attempt++ {
if resetErr = resetAllAdvDailyActions(); resetErr == nil {
if resetErr = resetAllPlayerMetaDailyActions(); resetErr == nil {
break
}
slog.Warn("adventure: daily action reset failed, retrying", "attempt", attempt+1, "err", resetErr)
@@ -422,10 +422,6 @@ func (p *AdventurePlugin) midnightReset() error {
if resetErr != nil {
return fmt.Errorf("reset daily actions after 3 attempts: %w", resetErr)
}
// Adv 2.0 Phase L5d — parallel reset on player_meta during dual-write soak.
if err := resetAllPlayerMetaDailyActions(); err != nil {
slog.Error("player_meta: daily action reset failed", "err", err)
}
// Prune expired buffs
if err := pruneAdvExpiredBuffs(); err != nil {