claude-home/major-domo/release-2026.3.17.md
Cal Corum be896b4c2a
All checks were successful
Reindex Knowledge Base / reindex (push) Successful in 2s
docs: add missing description frontmatter for kb-rag indexing
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 22:30:48 -05:00

5.0 KiB

title description type domain tags
Major Domo v2 Release — 2026.3.17 Release notes for Major Domo v2 Discord bot deployment on 2026-03-17. reference server-configs
discord
major-domo
deployment
release-notes

Major Domo v2 Release — 2026.3.17

Date: 2026-03-17 Branch: next-release → main (PR #81, 33 commits) Image: manticorum67/major-domo-discordapp:latest Server: akamai (/root/container-data/major-domo) Deploy script: /mnt/NV2/Development/major-domo/discord-app-v2/.scripts/deploy.sh

Release Summary

Merged 33 commits from next-release into main. This was the first release cut since the next-release branch workflow was adopted. A merge conflict in views/trade_embed.py required manual resolution.

Merge Conflict Resolution

File: views/trade_embed.py Cause: Two divergent changes since the branch point:

  • main hotfix (e98a658): Stripped all emoji from trade embed UI, added inline validation error details to Quick Status
  • next-release refactor (858663c): Moved 42 lazy imports to top-level, which also touched this file and had emoji additions

Resolution: Kept main's hotfix (no emoji, detailed validation errors) as the authoritative version, then applied only the import refactor from next-release (hoisted lazy imports to top-level). Merged main into next-release first to resolve, then PR #81 merged cleanly.

Key Changes in This Release

Trades & Transactions

  • Trade validation now checks projected rosters (next week + pending transactions)
  • Player roster auto-detection in /trade add-player and /trade supplementary (was hardcoded to Major League, caused cascading validation errors)
  • Team-prefixed validation errors: [BSG] Too many ML players
  • Stale transaction cache fixed — TransactionBuilder re-fetches on each validation
  • Stale roster cache fixed — refreshed before validation, invalidated after submission

Scorecard Submission

  • All spreadsheet data read before any DB writes (prevents partial state on formula errors)
  • Detailed error messages shown to users instead of generic failure

Commands & Permissions

  • /injury set-new and /injury clear verify team ownership (admins bypass)
  • /admin-maintenance maintenance mode flag implemented (but see Post-Deploy Issues below)
  • Roster labels updated: Active Roster / Minor League / Injured List sections

Bug Fixes

  • Key plays score text: tied scores now show correctly
  • is_admin() helper prevents AttributeError in DM contexts

Performance & Code Quality

  • Persistent aiohttp session for Giphy (eliminates per-call TCP/DNS overhead)
  • 42 lazy imports moved to top-level across codebase
  • Deduplicated command hash logic

CI/CD

  • next-release branch now triggers Docker builds via shared docker-tags composite action

Post-Deploy Issues

1. Maintenance mode interaction_check was broken (FIXED)

Discovered immediately after deploy. RuntimeWarning in logs:

RuntimeWarning: coroutine 'CommandTree.interaction_check' was never awaited

Root cause: @self.tree.interaction_check is not a decorator — it's an async method meant to be overridden via subclassing. The check was never registered; maintenance mode was a complete no-op.

Fix: PR #83 — Created MaintenanceAwareTree(CommandTree) subclass, passed via tree_cls= to Bot constructor. Merged and redeployed same session.

Issue: #82 (closed)

2. Stale scorecards causing repeated channel updates (MITIGATED)

Discovered after deploy. The #live-sba-scores channel kept being cleared/hidden every 3 minutes despite no active games.

Root cause: scorecards.json on akamai contained 16 stale entries from March 9-17. The data/ volume is mounted :ro in docker-compose (to protect Google Sheets credentials), which silently prevents ScorecardTracker.save_data() from persisting scorecard removals. Completed games accumulate indefinitely.

Immediate fix: Cleared the file on akamai:

ssh akamai
echo '{"scorecards": {}}' > /root/container-data/major-domo/storage/scorecards.json

Permanent fix needed: Split volume mount — credentials read-only, state files writable. Also add logging to the bare except in save_data().

Issue: #85 (open)

Rollback

Previous image digest (pre-release):

manticorum67/major-domo-discordapp@sha256:8e01dd6ee78442c1bbf06f3c291c7e8694e472683defb403b70f6d1e1a5facf1

Rollback command:

ssh akamai "cd /root/container-data/major-domo && \
  docker pull manticorum67/major-domo-discordapp@sha256:8e01dd6ee78442c1bbf06f3c291c7e8694e472683defb403b70f6d1e1a5facf1 && \
  docker tag manticorum67/major-domo-discordapp@sha256:8e01dd6ee78442c1bbf06f3c291c7e8694e472683defb403b70f6d1e1a5facf1 manticorum67/major-domo-discordapp:latest && \
  docker compose up -d discord-app"

Note: Rolling back would reintroduce the broken @self.tree.interaction_check (no-op, not harmful) but would also lose all the trade validation fixes which are actively used by league GMs.