Patch Notes
3.3.5 — Tier Config & List Hardening (February 26, 2026)
New:
- Tier limits configurable via environment variables (
TIER_{LEVEL}_MAX_LIST_SIZE,MAX_LISTS,RATE_WINDOW,RATE_MAX_SYMBOLS) - env.example documents all tier configuration variables with defaults
Updated:
- Global symbol total displayed inside code block as
[02] of [20]in both multi-list and single-list views - Single-list header shows
*active indicator, matching multi-list format
Fixed:
- Nil map panic in HandleList when database overview query fails (multi-list tiers during DB errors)
3.3.4 — List UI Redesign (February 24, 2026)
Updated:
- List display redesigned with monospace code block format for consistent alignment
- Multi-list tiers show all lists in a unified view with active list indicator (
*) - Symbol wrapping with indentation for clean multi-device rendering
formatSymbolListhelper for consistent column wrapping at 40-char width
Fixed:
- List layout now renders correctly across desktop and mobile Discord clients
3.3.3 — Quick Refresh (February 24, 2026)
New:
- Quick refresh command option for faster access to symbol analysis
3.3.2 — DM Subscription Verification Fix (February 24, 2026)
Fixed:
- DM context now resolves user tier by scanning roles across all bot guilds instead of requiring a guild ID
- Subscription verification works correctly in direct messages where no guild context is available
3.3.1 — Rate Limit QOL (February 23, 2026)
Updated:
- Rate limit messages now display time remaining and symbols left in user's local time
- Structured
RateLimitErrortype replaces generic error strings for richer user-facing messages FormatDurationutility for human-readable time display- Removed
github.com/pkg/errorsdependency from user_limit (replaced with stdlibfmt)
3.3.0 — Tier System & Multi-List Watchlists (February 23, 2026)
New:
- Subscription tier system: Basic (5 symbols, 1 list), Pro (10 symbols, 2 lists), Premium (20 symbols, 3 lists), OG (25 symbols, 3 lists)
- Multi-list watchlists: users can maintain separate symbol lists per tier allowance
- List switching via
/hz list list:2command parameter - Tier-aware rate limiting: window duration and symbol caps scale with subscription level
- Role-to-tier mapping via environment variables (
TIER_BASIC_ROLE,TIER_PRO_ROLE, etc.) - Database migrations for tier and multi-list schema (v4, with development/production/rollback variants)
tierpackage withLevel,Config,GetConfig,CheckOrder,MaxRateWindow,String
Changed:
- Access control migrated from flat
ALLOWED_ROLEScomma list to structured tier-role mapping - Rate limiter now parameterless (
NewUserRateLimiter()) — limits resolved dynamically from user tier at check time - List command shows capacity per-list and total across all lists
- Orchestrator symbol limits derived from tier config instead of environment variables
3.2.3 — Bug Fixes (February 21, 2026)
Fixed:
- Stocks with insufficient trading data now return a clear error message instead of failing silently
- Multi-symbol requests with a mix of valid and invalid symbols now deliver the valid results and notify about the failures
- Reduced unnecessary error logging for new user lookups (no-rows result exits early before logging)
Infrastructure:
- Migration scripts split into environment-specific versions (development/production with separate rollbacks)
- Failed order status tracking in database (FailOrder lifecycle method)
3.2.2 — User Tiers & Limits (February 16, 2026)
New:
- User tier system scaffolding with configurable limits via environment variables
- Watchlist size limits with capacity display in list output (12/25)
- Per-request symbol count enforcement on refresh
- Watchlist full notifications with actionable removal instructions
remove symbols:allcommand to clear entire watchlist in one action- Oversized watchlist detection on refresh with migration guidance for existing users
Fixed:
- Rate limiter now correctly rejects requests exceeding the symbol cap at window start (previously only enforced mid-window)
3.2.1 — Maintenance (February 15, 2026)
Changed:
- Dependency updates
- Benchmark dataset added for US stock coverage
3.2.0 — Scheduled Analysis (February 13, 2026)
New:
- Automated scheduling system for recurring analysis delivery
- Price level cache database model for persistent storage between runs
- Scheduler ORM integration (cache read/write/cleanup)
- Production-hardened scheduler with delivery manager integration
- Dead code cleanup from earlier price-level prototyping
3.1.0 — Price Levels (February 9, 2026)
New:
- Price level analysis engine (support/resistance zone detection)
- Price level overlays rendered on chart images
- Performance optimizations for price level calculations
- Timeframe-aware timescale output
3.0.0 — Architecture Rewrite (January–February 2026)
New:
- RSI (Relative Strength Index) technical indicator with per-symbol caching
- Direct message delivery system (bot DMs users privately, with subscription checks for DM access)
- Request orchestrator: order-based processing pipeline replacing sequential per-symbol execution
- Budget manager for API credit tracking and rate control
- Linear cache queue with batch processing and concurrent goroutine workers
- Progressive message queue for streaming partial results to users
- Trend signals with progress display through each analysis timeframe
- Period progress tracking per symbol/timeframe
- Symbol state management within orders
- Environment-driven configuration migration (hardcoded values moved to env vars)
Fixed:
- Queue system bug fixes across multiple iterations (alpha through v2)
- URL quality control improvements
- DM branch minor bug fixes
2.0.0 — Market Data Provider Migration (August–November 2025)
New:
- Complete migration from FMP to TwelveData for quotes, logos, and technical indicator calculations (news endpoint retained on FMP, isolated for future removal)
- Bidirectional crypto symbol normalization (handles both BTCUSD and BTC/USD input formats with backward compatibility for existing database records)
- Short-term and long-term multi-timeframe analysis output
- Chart generation via QuickChart API (candlestick charts with price data)
- Symbol add/remove compatibility layer for new data provider format
- News feed: increased article count, character limits, standardized date formatting, stripped tracking parameters from URLs
- Symbol logo caching with TTL expiration and multi-source fallback (TwelveData primary, FMP fallback toggleable)
- Private output mode: ephemeral server messages + optional DM delivery
- Improved error messaging when DM delivery encounters issues
- User settings: timezone selection (8 zones), colorblind mode support (4 modes + none)
Fixed:
- Timezone parsing in Docker containers
- Error logging bugs in data pipeline
- News endpoint returning incorrect data
- Backward compatibility with existing database symbol formats
Infrastructure:
- Go runtime upgraded from 1.24 to 1.25
1.0.0 — Initial Platform (June–August 2025)
Core Platform (June 2025):
- Discord bot foundation with slash command framework
- Symbol lookup with emoji trend output
- Price data display with individual quote support
- Dockerfile with automated amd64 container builds
- CI/CD pipeline via GitHub Actions
Server Storage — PR#4 (June 2025):
- PostgreSQL database integration for persistent user data
- User symbol watchlist with add/remove commands
- Add-symbol confirmation feedback
- Discord embed batching (enforced max 10 per message)
User Management — PR#5 (June 2025):
- User rate limiting
List Command — PR#6 (June 2025):
/hz listcommand to view saved watchlist
Look & Feel — PR#7 (July 2025):
- News section with working links and same-day timestamps
- News placeholder for improved form factor
Penny Stock Fix — PR#8 (July 2025):
- Float precision fix for crypto and stocks trading under $0.01
Multi-Security — PR#9 (July 2025):
- Proper multi-security type checking (stocks, crypto in a single query)
Ephemeral Output — PR#10 (July 2025):
- Ephemeral (private) command output so responses are only visible to the requester
Multi-Role Access — PR#11 (July 2025):
- Multiple role-based access control via comma-delimited environment configuration
ORM Overhaul — PR#12 (July–August 2025):
- Full ORM layer replacing raw SQL queries
- User settings system (private output toggle)
- Subscription management with unique constraint enforcement (fixed duplicate row bug)
- Symbol trie search for remove validation
- Command file refactoring (split monolithic commands.go into per-command files)
- Structured logging throughout command handlers
- Concurrency improvements for refresh and list operations (goroutines + mutex)
- Ephemeral tags applied consistently across all remaining responses
v1 Hotfixes (August 10, 2025):
- Removed stray ORM model definition
- Emergency hotfix for production breakage