Run the actual Adventure module against a copy of the prod DB with no
Matrix client, to smoke-test before deploy.
- expedition-sim: -real-user @mxid runs an EXISTING character loaded from
-data's gogobee.db instead of a synthetic build. SimRunner gains
PrepareRealCharacter (heals to full + tops up bankroll; keeps real
race/class/subclass/level/gear/spells).
- plugin.SendReply now honors the MessageSink like SendMessage/SendDM.
Reply-based handlers (duels, !town, !rivals, !achievements) previously
bypassed the capture seam and hit a nil client under the sink. Prod
behavior is unchanged (sink is nil in production).
- exercise_prod_test.go (build tag: prodexercise) drives every N-series
feature — world boss, duels, Shadow, Renown, achievements, journal,
town registries, vault, gifting — against a prod DB copy with all
outbound messages captured. Gated on GOGOBEE_PROD_DB_DIR; never runs in
normal CI.
Claude-Session: https://claude.ai/code/session_017mEwUmmS7aQTP2NQXj6rUa