A running log of patches, features, and improvements deployed to the Chaos League network.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
PI expiry reconciliation (Phase 3 enhancement) - Route group + auth strategy for /sponsor (Phase 6, S2-2) - Payment method onboarding in BidPanel (Phase 6, S2-3) - Cosmetic: brainstorm doc ASCII block language tags - Fix critic-v2 priority list: mark S2-1/S2-6/S2-7/S2-8 resolved, keep only S2-2 and S2-3 as open items Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: update DEFERRED.md with round 7 findings Add 3 implementation fixes to address during build: - InventoryItem.status missing 'resolving' in API type - S33/S36 missing dependency on S14/S44 (payment onboarding) - URL construction should use URL API in checkout session Add 3 cosmetic items: - Monetization analysis: code fence tag + table sort - Security doc: markdown blank lines - Critic-v2: S2-6/S2-7/S2-8 body sections need RESOLVED markers Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: apply critic final-review findings — S1+S2 spec fixes Resolves all S1 blockers and S2 warnings from the internal blind-spot critic review: S1-1/S1-2: Added full SQL DDL for place_sponsor_bid + raise_sponsor_bid RPCs (auth guard, SELECT FOR UPDATE, REVOKE/GRANT FROM PUBLIC) S1-3: Escalated S10b to HOTFIX priority in tasks.md with corrected sponsor_events RLS policy spec (remove OR auth.uid() IS NULL bypass) S2-1: Added ORDER BY amount_cents DESC, created_at ASC tiebreaker to Section 2.3 docs and settle_auction() Python code S2-2: cta_url fallback changed to 'https://chaosleague.io' (never blank); brand DELETE FK violation (SQLSTATE 23503) handling documented as 409 S2-3: Fixed analytics JOIN chain (sponsor_campaigns.sponsor_brand_id → sponsor_brands.user_id — no sponsor_profile_id column exists) S2-4: UNIQUE constraint split into two partial UNIQUE indexes — card rows include sport, module_slot rows exclude sport (prevents duplicate slots) generate_module_inventory upsert on_conflict updated to match S2-5: Stuck-resolving inventory recovery path added to DEFERRED.md S2-6: SponsorSlot.tsx typed interface prerequisite added to Section 8.3 S2-7: CI if: always() replaced with sync-step success/skipped; Stripe key masking instruction added S2-8: is_highest computation rule added to UserBid interface (Section 4.5) S2-9: proposal.md acceptance criteria updated with module qualifier S2-10: S61b task added for pre-existing sponsor_campaigns column governance Final review doc updated with PASS verdict and resolution status for all items. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: add blank lines around DEFERRED.md headings (MD022 markdownlint) Fixes CodeRabbit round 8 finding: all ### headings must be surrounded by blank lines per markdownlint MD022 rule. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: address CodeRabbit round 9 — 4 findings - design.md: Add 'resolving' to InventoryItem.status union with filter note - design.md: Replace string concatenation with URL API for success/cancel_url - tasks.md: Add S14 dependency to S33 (marketplace); add S14 + S44 to S36 (BidPanel) - tasks.md: Extend S28 with pre-capture PI validity check spec (validate status == 'requires_capture' + capture_method == 'manual' before capture) - docs/plans: Add 'text' lang tag to 3 ASCII art fenced blocks (markdownlint) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: address CodeRabbit round 10 — cosmetic/duplicate findings - sponsor-protocol-security.md: Add blank lines around ### headings and fenced code blocks (MD022/MD031) — 21 new blank lines added - monetization-analysis.md: Add 'text' lang tag to creator flywheel block - monetization-analysis.md: Re-sort Top 20 placement table by Total column descending (ranks 8-18 were out of order) Note: 'settling' → 'resolving' finding is a false positive — security doc already uses 'resolving' (was fixed in earlier round). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: address CodeRabbit round 11 — 2 critical + 2 duplicate fixes CRITICAL fixes: - design.md: Fix Python SyntaxError — backslash continuation cannot precede inline comment; changed to parenthesized implicit continuation for settle_auction() bids query - design.md: Add SET search_path=public + REVOKE/GRANT to claim_expired_auctions RPC (matches security pattern of place_sponsor_bid and raise_sponsor_bid — service_role only, prevents name resolution attack) Duplicate/cosmetic fixes: - proposal.md: Add blank lines around all ### headings (MD022 — 13 new lines) - critic-v2.md: Mark S2-6/S2-7/S2-8 as STATUS: RESOLVED (alignment with current spec state, reducing stale-finding confusion) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: CR round 12 — reconciliation gates, security/critic doc cleanup, design constraints Round 12 actionable fixes: - DEFERRED.md: gate resolving->expired behind Stripe PI + campaign reconciliation checks - final-review.md: convert S1 blockers to resolved historical entries (consistent PASS verdict) - security.md: add STATUS: RESOLVED to all four S1 items and resolved S2-1/S2-6/S2-9 - critic-v2.md: move S2-6/7/8 full narratives to Resolved/Historical appendix; fix hyphen - monetization-analysis.md: rename heading (drop 'No Engineering Required'); casino compliance - design.md: add bid_count+1 in raise_sponsor_bid UPDATE; stripe_payment_intent_id CHECK - proposal.md: add PI authorization expiry / 7-day cap acceptance criterion - 2026-02-25-sponsor-protocol-design.md: MD031 blank line before SQL fenced block Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: CR round 13 — security matrix, Stripe capture_before, phase heading spacing - security.md: update RLS matrix, data governance, USD/Cred, and summary sections to reflect all four S1 RESOLVED; remaining open items clearly labeled - monetization-analysis.md:165: add compliance gate to casino:sponsored-pool prose - 2026-02-25-sponsor-protocol-design.md: add blank lines after all Phase headings (MD022) - DEFERRED.md: replace hardcoded 7-day PI expiry with charge.capture_before live field - proposal.md: replace hardcoded '7 days' with capture_before / max_auth_window - tasks.md:26: clarify 'transaction types' = chaos_feed only, not SPONSOR_BID_* - tasks.md S28: add capture_before timestamp precheck (3rd validation criterion) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: CR round 14 — GRANT/REVOKE signatures, webhook semantics, logger, requires_capture - design.md: add parenthesized signatures to all GRANT/REVOKE statements (claim_expired_auctions(), place_sponsor_bid(UUID,UUID,UUID,INT,TEXT), raise_sponsor_bid(UUID,UUID,INT,TEXT)) — PostgreSQL requires these to resolve function - design.md: expand webhook Response comment with correct 400/500/200 semantics per failure mode - design.md: add 'import logging' + 'logger = logging.getLogger(__name__)' before resolve_auctions - security.md: mark S2-7 RESOLVED (task S17 implements 10 bids/hr limit, HTTP 429) - DEFERRED.md: fix requires_capture semantics — authorization pending, not charged; attempt capture first - proposal.md: seed data criterion 15+ rows -> 9+ rows (3 modules x 3 placements, Casino/Gauntlet deferred) - final-review.md: note GRANT/REVOKE signature fix in S1-2 resolution entry Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: CR round 15 — add design.md syntax verification note to final-review verdict Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: CR round 16 — capture_before field path, trigger race lock, webhook semantics, resolved-item cleanup - DEFERRED.md: fix charge.capture_before → latest_charge.payment_method_details.card.capture_before with card_present fallback and amount_capturable==0 as tertiary check - DEFERRED.md: mark InventoryItem.status 'resolving' and URL construction items as RESOLVED - design.md: fix BidHistoryEntry.bidder_display_name fallback chain comment - design.md: add pg_advisory_xact_lock per-user serialization to enforce_max_sponsor_brands trigger - design.md: correct webhook response semantics (Stripe retries on any non-2xx including 400) - security.md: correct sponsor_profiles_public view column list (account-level only) - final-review.md: label Summary as historical context with [RESOLVED] markers on S1 blockers - proposal.md: narrow scope statement to currently-built modules (Oracle/HH/Audit) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Dark Ops Command Center (#268) * feat: Game Projection Engine integration specs + best practices addendums - Feature coverage matrix for all 5 modules - Interconnection map showing data flow - Best practices addendums for Casino, Oracle, Precision, Accuracy - Precision module playground and spec * feat: Dashboard Redesign v2 - Dark Ops Command Center - Add TopNavBridge component with Cred/CP stats - Add BottomDock navigation with 5 CHAOS modules - Implement 12-column responsive grid layout - Create CHAOS-first dashboard cards: * IdentityCard (CP rank, accuracy, Ghost Slips) * CHAOSStanding (league position, module breakdown) * TheLabCard (module performance metrics) * TreasuryWidget (Cred balance, transactions) - Add game module widgets: * HeadhuntersWidget (pick slots) * OracleWidget (matchup spreads) * PrecisionWidget (stat predictions) * SurvivorWidget (ALIVE/ELIMINATED status) * CasinoWidget (prop markets) - Add FantasyIntelBar for imported leagues - Add WeeklyPulse (Fraud/Tactician/Ice Cold) - Add WireFeed live activity stream - Add ChaosTerminal chat component - Update design tokens with Dark Ops color system - Add scanline background effect * refactor: Rename Precision module to Audit - Rename PrecisionWidget → AuditWidget - Update color tokens: precision-blue → audit-cyan - Update BottomDock navigation - Update CHAOSStanding module breakdown - Update WireFeed event types - All components now use cyan color scheme * fix: wire dashboard widgets to real data, add Coming Soon overlays - Remove all mock/hardcoded data from 12 dashboard widgets (-1,440 lines net) - Wire Oracle widget to getGames() API with loading/error states - Wire Headhunters widget to /api/headhunters/picks with 3-slot display - Wire Treasury, Identity, CHAOS Standing, The Lab, Fantasy Intel Bar to server-side getDashboardData() props (zero client fetches) - Add ComingSoonOverlay component for 5 unbuilt modules: Audit, Gauntlet, Weekly Pulse, Wire Feed, Chaos Terminal - Delete dead PrecisionWidget.tsx duplicate (renamed to Audit) - Remove CasinoWidget import (build blocker fix) - Fix BottomDock: 6 items → 5 (remove Casino) - Fix InviteButton touch target: 32px → 44px (WCAG) - Fix scanline opacity: 0.015 → 0.02 - Add error boundaries at dashboard and league route levels Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: address CodeRabbit review findings on PR #268 - Remove unnecessary "use client" from 5 static Coming Soon widgets (AuditWidget, SurvivorWidget, WeeklyPulse, WireFeed, ChaosTerminal) - Fix FantasyIntelBar setState-in-effect lint error (use lazy initializer) - Simplify isGhost prop (always false after redirect guard) - Fix pre-existing ChaosTerminal missing leagueId prop in global dashboard Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: correct moduleStandings shape mismatch and null platform guard - Fix Critical: moduleStandings query returns { metric_value, team: { id } } not { points, team_id } — was causing all standings to be undefined - Fix Minor: add null coalescing for league.platform to prevent runtime crash Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: guard against NaN week query param Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Rewrites the Bolt performance agent configuration to use the Jules directed mode workflow (BUILD/CHECK/SCAN).
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Maintenance update.
Launched the foundational Next.js architecture featuring a real-time league dashboard, the Infamy analysis engine, and native Sleeper API connectivity.
Enhanced backend observability with SyncLogger and added core frontend infrastructure for user settings and league growth.
Maintenance update.
Fixed duplicate league entries via smart deduplication, updated Active Season to be system-driven (no more hardcoding), and enhanced the wallet activation UI.
implemented league audit with luck scoring and infamy, added ledger components for wallet and betting analytics, and enhanced the dashboard with new widgets.
Maintenance update.
Maintenance update.
Added detailed tooltips and glossary definitions for all Chaos Badges (Fraud Win, Tragic Loss, etc.) to help you understand your accolades.
Launched Weekly Survivor Pools. Eliminated teams can now buy back in using Cred for a shot at the 'Zombie' title.
A new unified dashboard to view your Cred balance, earnings, and transaction history across all your leagues in one place.
Earn daily free Cred just by logging in. Shadow Players can now accumulate wealth to bet on leagues they don't own.
Visual 'Share Cards' for your league's history. Show off your league's Chaos Score and viral stats to the world.