📋
Changelog
The Phalanx — every version, every change
🔍
633 releasesPage 1 of 26
v0.9.835Reserve Sparta's Picks for validated sports
September 2, 2026- ▸Removed uncalibrated NFL and college-football early reads from Sparta's Picks, its homepage vanguard, featured flags, weekly slate, stats, and share cards until those sports earn validated confidenceGPT-5.6-sol
- ▸Restored calibrated MLB recommendations to Sparta's Picks and the featured pool instead of leaving the flagship empty during the pro and college basketball off-seasonGPT-5.6-sol
- ▸Kept football early reads on regular game cards while making empty weekly maintenance clear newly blocked flagship rows instead of skipping cleanupGPT-5.6-sol
- ▸Selected each validated sport's strongest eligible candidates only after loading its complete cohortGPT-5.6-sol
v0.9.834Put football model caveats in plain English
September 2, 2026- ▸Replaced internal raw and uncalibrated confidence language with Early read and Early model score, while keeping the clear not-a-win-probability disclosure on public detail and share surfacesGPT-5.6-sol
v0.9.833Keep unauthenticated billing requests behind the auth boundary
September 2, 2026- ▸Moved Stripe client initialization behind authentication so checkout and portal requests return 401 even when billing configuration is unavailableGPT-5.6-sol
v0.9.832Remove dead weight while tightening profile and engine contracts
September 2, 2026- ▸Moved profile reads to explicit column contracts and added staged Stripe schema migrations that restore compatibility before restricting authenticated accessGPT-5.6-sol
- ▸Replaced full parlay-history loading with an exact count and removed an unused balance-history query that referenced columns absent from the live schemaGPT-5.6-sol
- ▸Reused shared mutation-integrity and team-normalization helpers, removing duplicate fail-closed checks and dead exportsGPT-5.6-sol
- ▸Removed unreachable profile, admin, Header, and reducer code while preserving Stripe routes, notification behavior, and public contractsGPT-5.6-sol
- ▸Deleted more than 20,000 lines of generated snapshots, completed repair artifacts, and superseded manual schema fragmentsGPT-5.6-sol
- ▸Moved settlement assertions onto production functions and refreshed transitive packages to clear the dependency auditGPT-5.6-sol
v0.9.831Stop one-shot database transport failures from paging healthy result cycles
August 27, 2026- ▸Added short bounded retries around the Hermes result cycle's direct read-only summary queries, covering live games, unresolved picks, stale upcoming games, and final-game lookupsGPT-5.6-sol
- ▸Kept settlement and status mutations outside the retry boundary, while semantic database errors and exhausted transport retries still fail the cycle closedGPT-5.6-sol
v0.9.830Bind operational health to the immutable core-update runner
August 25, 2026- ▸Changed lifecycle freshness from legacy Vercel cron records to successful immutable core-update logs, so health reflects the scheduler that actually owns production ingestionGPT-5.6-sol
- ▸Kept heartbeat-only transport checks excluded and required a positive applied game count before a run can satisfy lifecycle healthGPT-5.6-sol
v0.9.829Harden NFL and college-football launch timing and calibration operations
August 25, 2026- ▸Moved US game-day and month heuristics off raw UTC boundaries so late Saturday football and late-February basketball remain on the intended domestic slate dateGPT-5.6-sol
- ▸Added regression coverage for late-night college-football kickoffs, including the Sunday-penalty boundaryGPT-5.6-sol
- ▸Changed statistically unusable calibration rebuilds into explicit guarded rejections that preserve the current singleton without turning a healthy scheduler cycle redGPT-5.6-sol
- ▸Kept NFL and college-football scores quarantined as raw signals and disabled bankroll execution until each sport has enough executed outcomes and real sportsbook price provenanceGPT-5.6-sol
- ▸Made ESPN scoreboard HTTP failures, malformed payloads, and football events without explicit regular/postseason metadata fail closedGPT-5.6-sol
- ▸Withheld neutral-site NFL and college-football picks because home/away designation-sensitive rules are not validated for those gamesGPT-5.6-sol
- ▸Blocked football rows with missing, mismatched, preseason, or unknown season metadata at ingestion and every shared pick-eligibility boundaryGPT-5.6-sol
- ▸Made nightly review explicitly report NFL and college-football sample size as unavailable instead of inheriting an all-sport green headlineGPT-5.6-sol
- ▸Stopped transport-only health heartbeats from satisfying lifecycle freshness and paginated the full bankroll execution ledgerGPT-5.6-sol
v0.9.828Finish football quarantine and make every unattended write path release-locked
August 14, 2026- ▸Removed probability-style confidence floors from NFL and college-football pick generation, tracking, publication, and paper-bankroll eligibility while retaining absolute blocked segments, line validity, timing, and duplicate guardsGPT-5.6-sol
- ▸Replaced football pick-of-week probability and conviction copy with an explicit raw-score disclosure and cleared stale top-pick narratives during atomic weekly rerankingGPT-5.6-sol
- ▸Moved weekly rank changes into a locked rank-only database function so concurrent grading fields cannot be overwritten by stale rowsGPT-5.6-sol
- ▸Quarantined raw football scores behind calibrated sports in the admin slate and removed percentage styling thereGPT-5.6-sol
- ▸Removed raw football from AI prompts, probability calibration and CLV buckets, confidence-tier analytics, and percentage-progress visuals, then scrubbed stale conviction prose at API, share-card, and social-image boundariesGPT-5.6-sol
- ▸Loaded complete Sparta candidate cohorts before current-game eligibility and per-sport display limits, preventing raw football scores from deciding which picks survive publicationGPT-5.6-sol
- ▸Paginated complete historical cohorts for public records, admin analytics, calibration, CLV reports, exports, and model replays, and removed invalid projections that broke the live CLV breakdownGPT-5.6-sol
- ▸Made featured-pick selection and virtual-balance reconstruction consume complete stable cohorts before choosing a pick or sizing a wagerGPT-5.6-sol
- ▸Made the filtered admin pick export paginate its complete cohort instead of silently stopping at PostgREST's first 1,000 rowsGPT-5.6-sol
- ▸Removed the pre-eligibility per-sport cap from weekly Sparta featured-pick maintenance so stale rows cannot hide a valid lower-ranked candidateGPT-5.6-sol
- ▸Stopped the bankroll database function from deriving expected value from raw football scores; football executions now store a null expected value with explicit raw-score semanticsGPT-5.6-sol
- ▸Added the missing games signal-score schema contract, repaired the live updater, and verified a fresh scheduled apply without schema-cache failuresGPT-5.6-sol
- ▸Moved core update, result, bankroll, settlement, weekly, calibration, ratings, archive, and void execution onto immutable release snapshots behind one shared lockGPT-5.6-sol
- ▸Self-hosted Cinzel, Jost, and Montserrat and pinned production builds to webpack so exact-SHA prebuilt artifacts no longer depend on live Google Font downloads or Turbopack's external-font resolverGPT-5.6-sol
v0.9.827Put current-season football data and unattended operations on honest rails
August 14, 2026- ▸Added current-season ESPN FPI snapshots for all 32 NFL and 138 FBS teams, preserving ESPN's source season and timestamp and rejecting partial, stale, or mixed-source writesGPT-5.6-sol
- ▸Made NFL and Big Ten team matching deterministic across the full loaded 2026 slate, and withheld football picks outside seven days or until both teams have fresh ratings or played-game recordsGPT-5.6-sol
- ▸Persisted football season type, week, postseason, and neutral-site metadata through ingestion and the production schemaGPT-5.6-sol
- ▸Added dry-run-by-default ratings, settlement, weekly-slate, and calibration runners plus silent-success Hermes schedules with verified apply pathsGPT-5.6-sol
- ▸Fixed Supabase's 1,000-row default cap from silently dropping most football ratings by loading ESPN FPI and legacy sources in separate bounded queriesGPT-5.6-sol
- ▸Labeled NFL and college-football confidence as an uncalibrated raw model score, removed probability percentages and conviction tiers, ranked calibrated sports first, and forced fixed one-unit paper stakes until sport-specific graded evidence existsGPT-5.6-sol
- ▸Made failed or null pick regeneration explicitly clear old pick fields so changed lines cannot carry stale recommendations forwardGPT-5.6-sol
- ▸Protected the last usable calibration curve by rejecting sparse, gapped, inconsistent, or non-monotonic rebuilds before persistenceGPT-5.6-sol
- ▸Moved settlement notifications into the locked financial transaction, paginated pending inventory, and added replayable seven-day profile reconciliationGPT-5.6-sol
- ▸Restricted Sagarin automation to basketball and hockey, kept ESPN FPI authoritative for football, and made ratings update endpoints POST-onlyGPT-5.6-sol
- ▸Made the public football slate honest about fictional samples, dates, game status, paper-only results, and balanced NFL versus Big Ten inventoryGPT-5.6-sol
v0.9.826Make every critical updater and settlement path prove its writes
August 4, 2026- ▸Wired weekly-pick grading into the dedicated Hermes result cycle, rejecting malformed frozen lines or teams, paginating unresolved inventory, counting duplicate-game rows correctly, and tolerating matching concurrent resolutionGPT-5.6-sol
- ▸Resolved the five stale August 2 MLB weekly picks and cleared the stale-data watchdog after a clean rereadGPT-5.6-sol
- ▸Made opening-line baselines, database-backed model context, pick-balance history, and every consequential pick-tracking read or write fail closed before later mutations can continueGPT-5.6-sol
- ▸Stopped both the admin proxy and the monolithic resolve stage from laundering downstream or weekly failures into successful update reportsGPT-5.6-sol
- ▸Repaired the live Paper Bankroll exposure-cap and daily stop-loss formatter branches, tightened function grants, and verified both guards inside rolled-back transactionsGPT-5.6-sol
- ▸Replaced the unreplayable 63-file Supabase chain with one live-derived canonical baseline, proved a clean local rebuild with zero public-schema drift, restored authoritative remote migration history without replaying SQL, and rotated the exposed database passwordGPT-5.6-sol
- ▸Added regression coverage for weekly settlement, updater failure propagation, immutable opening-line protection, the atomic bankroll guard SQL, and the canonical Supabase baselineGPT-5.6-sol
- ▸Paginated final-game settlement beyond Supabase's 1,000-row cap, tightened void and atomic settlement contracts, and stopped terminal parlays from resubmitting inactive legsGPT-5.6-sol
- ▸Made live-score updates and archive cycles reject partial feeds, short writes, or mismatched affected IDs instead of reporting successGPT-5.6-sol
- ▸Made weekly-pick regeneration prove every rollback delete, restore, and final slate identity before claiming recoveryGPT-5.6-sol
- ▸Made result-cycle write reports come from verified before-and-after state, and aligned core-update trace persistence with the live update_logs schemaGPT-5.6-sol
v0.9.825Prove updater write failures stop every downstream mutation
August 3, 2026- ▸Added runtime failure-injection coverage that forces a batch game upsert to fail, then forces its row retry to fail, in both the production API and CLI updater pathsGPT-5.6-sol
- ▸Proved both callers report failure and stop before pick tracking, resolution, or stale and missing-odds side channels can mutate data for the failed gameGPT-5.6-sol
- ▸Extracted a dependency-injected CLI entry point while preserving the existing direct command behavior, replacing source-order checks with executable control-flow testsGPT-5.6-sol
v0.9.824Stop confidence drift from corrupting live pick parity
August 2, 2026- ▸Rounded compressed confidence to the integer contract used by the live games table, keeping games, pick tracking, weekly picks, and Paper Bankroll on the same valueGPT-5.6-sol
- ▸Made both core-update entry points stop before pick tracking after any row-level upsert error, while filtering failed IDs from every downstream odds-invalidation set and reporting only successful writesGPT-5.6-sol
- ▸Added regression coverage for integer confidence, fail-before-mutation control flow, and partial-upsert side-channel isolationGPT-5.6-sol
- ▸Pinned PostCSS 8.5.25 to clear the current high-severity source-map path traversal advisoryGPT-5.6-sol
v0.9.823Make the football engine season-ready without inventing an edge
July 27, 2026- ▸Repaired NCAAF ingestion by switching ESPN to the current Big Ten group and added an explicit 56-day NFL/NCAAF schedule window so future inventory stays visible even when ESPN defaults to preseasonGPT-5.6-sol
- ▸Excluded NFL preseason games, removed false home-field advantage at neutral-site football games, and withheld picks outside seven days or before fresh ratings/played records provide a real comparison baselineGPT-5.6-sol
- ▸Quarantined stale football Sagarin ratings, tagged stored NFL/NCAAF rows with their source season, and taught the updater to refuse prior-season pages instead of laundering old numbers with a new timestampGPT-5.6-sol
- ▸Stopped aggregate basketball, hockey, and baseball calibration from remapping NFL/NCAAF confidence before football has its own executed sampleGPT-5.6-sol
- ▸Added football feed, preseason, neutral-site, freshness, source-season, readiness-window, stale-pick clearing, and calibration regression coverage; full tests, lint, build, and static analysis passGPT-5.6-sol
v0.9.822Kill the remaining fake-success admin and billing writes
July 24, 2026- ▸Made admin role changes, admin voice config writes, notifications mutations, and Stripe profile/subscription updates fail closed instead of quietly returning success when the database write failed or touched nothingGPT-5.6-sol-pro
- ▸Standardized these routes on the shared service-role client and added 400 handling for malformed JSON instead of leaking parser crashes as bogus 500sGPT-5.6-sol-pro
- ▸Added focused regression coverage for admin voice updates, admin role changes, notifications actions, and Stripe checkout/webhook profile-write failuresGPT-5.6-sol-pro
- ▸Re-ran targeted route tests plus the full Phalanx test, Node test, typecheck, and lint stack after the passGPT-5.6-sol-pro
v0.9.821Make profile writes fail closed at the API boundary
July 24, 2026- ▸Stopped profile and first-run name writes from returning fake success when the underlying profiles row was missing or untouched by requiring an exact updated row back from SupabaseGPT-5.6-sol-pro
- ▸Made /api/state reject missing or blank display names with 400s instead of quietly returning ok and leaving the caller to believe the write workedGPT-5.6-sol-pro
- ▸Extended route tests to cover blank first-run names and the zero-rows-updated failure path so this one stays deadGPT-5.6-sol-pro
- ▸Re-ran targeted route tests plus the full test, Node test, typecheck, and lint stack after the fail-closed API passGPT-5.6-sol-pro
v0.9.820Stop profile UI from lying about failed saves
July 24, 2026- ▸Made profile name, timezone, reset, and full reset actions fail honestly instead of mutating the UI first and pretending the server accepted the changeGPT-5.6-sol-pro
- ▸Kept favorite teams editing open on failure and surfaced the server error instead of silently marking unsaved selections as doneGPT-5.6-sol-pro
- ▸Stopped onboarding and first-run name capture from dismissing themselves on failed writes, which closes a nasty state-desync path for new usersGPT-5.6-sol-pro
- ▸Re-ran the full Phalanx test, Node test, typecheck, and lint stack after the UI hardening passGPT-5.6-sol-pro
v0.9.819Restore terminal void safety and harden reset/profile inputs
July 24, 2026- ▸Restored the void_game_and_dependencies guard that refuses to void scored final games and returns game_not_found for unknown IDs, then shipped a follow-up live migration because the first hardening pass had accidentally dropped that safety railGPT-5.6-sol-pro
- ▸Kept the stricter all-legs-void parlay refund rule while repairing the terminal safety checks, so the fix closes the regression without reopening the original refund bugGPT-5.6-sol-pro
- ▸Hardened profile, admin reset, and state POST handlers to reject invalid JSON bodies with 400s instead of bubbling parser crashes into generic 500sGPT-5.6-sol-pro
- ▸Added regression coverage for the restored terminal void guard and re-applied the repaired SQL to the live Supabase projectGPT-5.6-sol-pro
v0.9.818Clean the leftover frontend hooks and dependency floor
July 24, 2026- ▸Fixed stale React hook closures in dashboard and profile clients so celebration and achievement effects track the values they actually readGPT-5.4
- ▸Refactored useGroupedGames dependencies to explicit locals instead of suppressing exhaustive-deps, which makes memo invalidation honest and maintainableGPT-5.4
- ▸Bumped Next and eslint-config-next to 16.2.11 and pinned patched DOMPurify and Sharp overrides in the lockfile-backed dependency floorGPT-5.4
v0.9.817Close the Phalanx profile/reset/void audit blockers
July 24, 2026- ▸Removed direct browser profile UPDATE access and routed profile mutations through explicit server-side service-role paths so users cannot self-edit trusted fieldsGPT-5.4
- ▸Replaced the old multi-step reset flows with reset_profile_state_atomic so self and admin resets now void or delete dependent rows and rewrite bankroll history inside one transactionGPT-5.4
- ▸Rewrote void_game_and_dependencies so parlays refund only when every leg is actually void, not merely unresolved, and added a matching migrationGPT-5.4
- ▸Removed the live JS void/recalc fallbacks so missing or failed settlement RPCs now fail closed and alert instead of mutating production state down a side pathGPT-5.4
- ▸Added regression coverage for atomic reset routing, service-only profile writes, and fail-closed RPC guardsGPT-5.4
v0.9.816Kill a proven MLB leak and repair prediction evidence
July 23, 2026- ▸Blocked MLB away_fav_tight after executed tickets fell to 37-61 with a 95% upper bound still below -110 breakevenGPT-5.6
- ▸Hardened confidence calibration to use only wins/losses, paginate full history, reject sparse or malformed curves, and never promote raw confidence or stakingGPT-5.6
- ▸Quarantined unsourced NHL puck lines and unified ESPN status handling so extra-time finals settle while canceled or suspended games never grade as finalGPT-5.6
- ▸Separated routine stale-status refresh from destructive void permission; only the explicitly guarded void cycle can refund and void dependenciesGPT-5.6
- ▸Froze guarded void candidates at preflight and immediately voided invalid-odds tracking inventory so new or stale rows cannot slip across control boundariesGPT-5.6
- ▸Moved nightly performance reporting to paginated executed bankroll tickets instead of mutable pick-tracking inventory and fixed voids being counted as losses in backtestsGPT-5.6
v0.9.815Clear overnight settlement and stale-game blockers
July 21, 2026- ▸Ran the guarded settlement apply path to resolve the one real-user bet that was still pending after final and verified the settlement notification write landedGPT-5.4
- ▸Fixed Hermes result-cycle apply so it now runs stale-upcoming resolution instead of leaving old upcoming games stuck foreverGPT-5.4
- ▸Expanded stale-upcoming final detection to accept ESPN terminal variants like STATUS_FINAL_AET and STATUS_FINAL_PEN, including 0-0 penalty finalsGPT-5.4
- ▸Retargeted the Phalanx settlement dry-run cron to the live Discord channel and verified delivery errors are goneGPT-5.4
- ▸Added regression coverage for extra-time/penalty stale-upcoming resolution and for result-cycle wiring so the overnight bug cannot quietly come backGPT-5.4
v0.9.814Close Aegis audit blockers
July 3, 2026- ▸Mapped ESPN postponed games to postponed instead of final so 0-0 postponements cannot settle picks or bankroll ticketsGPT-5.5
- ▸Voids stale upcoming games older than 24 hours when ESPN still reports a non-terminal scheduled stateGPT-5.5
- ▸Fixed Paper Bankroll ticket CLV sign to match pick-tracking CLV formulasGPT-5.5
- ▸Restricted backup/update-log tables and internal SECURITY DEFINER RPCs to service-role access with pinned search_pathGPT-5.5
- ▸Hardened update-rankings and cron health routes so Supabase errors fail/degrade explicitly instead of being ignoredGPT-5.5
v0.9.813Aegis project hardening
July 3, 2026- ▸Cleared dependency-audit findings by pinning patched ws, DOMPurify, esbuild, and Vitest dependency versionsGPT-5.5
- ▸Restricted cron_runs RLS to service_role only so operational run timing is no longer publicly readableGPT-5.5
- ▸Removed an unused World Cup host helper export so dead-code scanning is cleanGPT-5.5
- ▸Documented superseded 7-day Paper Bankroll migration history and added regression coverage for the current 36-hour placement windowGPT-5.5
v0.9.812Correct World Cup host edge
July 3, 2026- ▸Changed FIFA World Cup host advantage to use ESPN venue country instead of arbitrary home/away designationGPT-5.5
- ▸Added venue_country persistence for games so USA, Mexico, and Canada only receive host edge when playing in their own countryGPT-5.5
- ▸Added regression coverage for venue-based World Cup host edge, including USA edge when listed away in a U.S. venueGPT-5.5
v0.9.811Optimize World Cup picks
June 8, 2026- ▸Added a deterministic World Cup national-team strength model using FIFA rankings so picks no longer fall back to empty 0-0 records when Sagarin ratings are unavailableGPT-5.5
- ▸Tuned World Cup spread logic for neutral/host-site soccer, unblocked soccer-specific tight favorites from generic ATS filters, and added soccer total rangesGPT-5.5
- ▸Added regression coverage for World Cup strength fallback, host edge, bet-type filtering, and total-pick boundsGPT-5.5
…