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
  • formatSymbolList helper 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 RateLimitError type replaces generic error strings for richer user-facing messages
  • FormatDuration utility for human-readable time display
  • Removed github.com/pkg/errors dependency from user_limit (replaced with stdlib fmt)

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:2 command 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)
  • tier package with Level, Config, GetConfig, CheckOrder, MaxRateWindow, String

Changed:

  • Access control migrated from flat ALLOWED_ROLES comma 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:all command 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 list command 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