UPDATED DAILY FROM GITHUB RELEASES

Release Notes

Follow the latest changes across the Simulation Engine, Game API, Injury Engine, and Web App.

Simulation Engine

Simulation Engine

v0.7.27 Jul 28, 2026

fix: count zero-yard sacks in validator, player stats, and result logging (#300)

Summary

Clamped 0-yard sacks — where the pass-protection clamp caps YardsGained at 0 to prevent a safety when the offense is backed up to its own 1-yard line — were previously inferred as "not a sack" by YardsGained < 0 heuristics. This corrupted validator aggregate stats, engine player-stat attribution, and play result logging.

Changes

  • New discriminator: PassPlay.IsSack => SackResult != null — a single reliable sack signal (SackResult is only ever assigned on the genuine pass-protection sack path, never on completions, incompletions, spikes, scrambles, or interceptions).
  • Validator (AggregateStats.cs): sack classification and the sack-yards matrix now key off IsSack instead of YardsGained < 0, so clamped 0-yard sacks are counted as sacks and no longer leak into incompletions.
  • Player stats (StatsAccumulator.cs): a clamped 0-yard sack no longer credits the QB a passing attempt or the receiver a target, and now correctly credits DL Sacks/Tackles and OL SacksAllowed.
  • Result logging (PassResult.cs): clamped 0-yard sacks log as "Sacked" rather than "Incomplete".

Testing

  • 5 deterministic regression tests (seed 12345, TestFluentSeedableRandom fluent methods including the new SackYardsBucketRoll).
  • dotnet build && dotnet test: 0 warnings / 0 errors, 1982 passed, 6 skipped, 0 failed.

Notes

  • Constants (GameProbabilities.cs, SackMatrix.cs) and the clamp logic itself are intentionally unchanged.
  • Independently reviewed (Oracle): Round 1 requested engine-side changes; Round 2 approved after they were applied.

chore(main): release 0.7.27 (#305)

🤖 I have created a release beep boop

0.7.27 (2026-07-27)

Bug Fixes

  • count zero-yard sacks in validator, player stats, and result logging (#300) (f6b8bdd)
  • exclude interceptions from incomplete-pass log branch (#306) (ccf7f89)

This PR was generated with Release Please. See documentation.


fix: exclude interceptions from incomplete-pass log branch (#306)

Summary

Fixes a play-by-play logging regression introduced by #300. When PR #300 replaced the YardsGained < 0 sack heuristic with the new PassPlay.IsSack discriminator, the incomplete-vs-sack branch in PassResult.cs (!lastSegment.IsComplete && !play.IsSack) stopped excluding interceptions. As a result, a negative-yard interception return logged a spurious "Incomplete pass." line in addition to the correct interception log. The old YardsGained >= 0 predicate had accidentally suppressed this.

This is log-cosmetic only — no stat/aggregate corruption — but it produced contradictory play narration.

Changes

  • PassResult.cs: incomplete-pass branch now also guards && !play.Interception, so interception returns (including negative-yard returns) no longer emit an "Incomplete pass." log.
  • AggregateStats.cs: simplified the hoisted isSack to passPlay?.IsSack ?? false. The earlier if (play.Interception) branch already classifies interceptions before the sack else if, so the removed !Interception/!IsTouchdown/!isComplete guards are behavior-preserving for all currently-modeled plays (verified against the full suite). This also avoids masking a future strip-sack defensive TD from sack totals.

Testing

  • New deterministic regression test (seed 12345, fluent RNG): PassPlay_NegativeYardInterceptionReturn_LogsInterceptionNotIncompletePass — asserts a non-pick-six interception with negative net yards logs the interception and does not log "Incomplete pass".
  • dotnet build && dotnet test: 1983 passed / 6 skipped / 0 failed (baseline 1982 + 1 new test), 0 warnings.

Notes

  • Found via a retrospective Oracle review of #300 (posted as a comment on that PR).
  • Out of scope (pre-existing, separate ticket): strip-sack fumbles are only marked on the segment and never create a play.Fumbles entry/recovery; and PassProtectionSkillsCheckResult logs the raw unclamped sack loss.

ci: pass automation token to release-please so publish workflow triggers (#307)

Summary

Restores reliable Gridiron Engine package release automation so published engine releases can reach consumers through the NuGet feed once the required automation token is configured.

What's New

  • Improves release automation by allowing Release Please-created GitHub Releases to trigger the downstream package publish workflow.
  • Updates the Gridiron.Engine package metadata to the current authoritative version, 0.7.26.
  • Keeps future package metadata versions synchronized by marking the csproj version for Release Please updates.

Details

This uses the Release Please generic extra-files updater with the x-release-please-version annotation because the csproj version is an arbitrary metadata field rather than a standard manifest file. The publish workflow itself is unchanged.


Changelog

0.7.27 (2026-07-27)

Bug Fixes

  • count zero-yard sacks in validator, player stats, and result logging (#300) (f6b8bdd)
  • exclude interceptions from incomplete-pass log branch (#306) (ccf7f89)
v0.7.26 Jul 7, 2026

0.7.26 (2026-07-07)

Bug Fixes

  • ci: correct Release Please manifest version to match latest tag (#291) (0bdb267)
Game API

Game API

v1.0.3 Jul 30, 2026

1.0.3 (2026-07-29)

Bug Fixes

  • deps: bump Gridiron.Engine to 0.7.26 (#601) (3375df4)
v1.0.2 Jul 7, 2026

1.0.2 (2026-07-07)

Bug Fixes

  • api: mark naturally completed seasons complete (#591) (a5dcaad)
  • api: resolve AmbiguousMatchException on roster endpoint (#588) (ae21641)
v1.0.1 Jul 7, 2026

1.0.1 (2026-07-07)

Bug Fixes

  • ci: add GitHub Packages registry for NuGet Dependabot (e07787b)
  • ci: add missing Postgres connection string to rate limiting workflow (859b32d)
  • ci: add missing Postgres connection string to rate limiting workflow (7123cb2)
  • deps: bump Microsoft.Extensions.Logging.Abstractions to 10.0.3 (5899218)
v1.0.0 Jun 20, 2026

1.0.0 (2026-06-20)

⚠ BREAKING CHANGES

  • db: Existing databases must be recreated. This is acceptable as there are no production databases yet.

Features

  • #478: archive and reset player/team season stats during year-end processing (985de7d)
  • #478: Archive and reset player/team season stats during year-end processing (aaf80c8)
  • #520: contract extension offer mechanism (Wave 4 PR2) (#534) (a86fe4b)
  • #520: retirement 3-way decision tree (Wave 4 PR1) (#533) (fceac12)
  • Add Application Insights monitoring via OpenTelemetry (#145) (#456) (badab9d)
  • add async league creation workflow (#556) (b6e5958)
  • Add coaching impact on player development (#247) (#338) (6eb6ef8)
  • add CoachingGameImpactSettings entity and API (#168) (#335) (ee825e1)
  • add commissioner schedule editing with draft mode (4277453)
  • add commissioner schedule editing with draft mode (#108) (0016b84)
  • add ContractOfferController with 9 REST endpoints for contract offer management (#524) (e92b126)
  • Add debug impersonation and minimal database seed (#381) (4afce13)
  • Add draft board locking and commissioner tools (#425) (33ec9c2)
  • add dynamic league structure management endpoints (cacd4c1)
  • add dynamic league structure management endpoints (b7db760)
  • Add Fly.io containerization and deployment infrastructure (#449) (cf4cfae)
  • Add GitHub Actions for PR validation and auto-project-add (c987239)
  • add GM assignment API endpoints (#258) (415c16e)
  • add GM assignment API endpoints (#258) (b8c930a)
  • add league-based season endpoints (#281-286) (b018647)
  • add league-based season endpoints (#281-286) (9c790e7)
  • add leagueId scoping to DecrementGamesOutAsync (e57ab6f)
  • Add MVP scouting noise system (#171) (#340) (20051f3)
  • Add NFL-style hard caps to league structure validation (4482abc)
  • Add non-game injury system for practice/training/offseason (#89) (#341) (d8e7287)
  • add null safety and invalid input validation (2d33e57)
  • add null safety and invalid input validation (483f981)
  • Add OpenCode skills for API development patterns (c21c974)
  • Add optional Season parameter to CreateLeagueRequest (#458) (d914253), closes #455
  • add PlayerInjury persistence layer (b1734ca)
  • Add position-specific peak age offsets for career arc progression (#474) (64dcbf5)
  • Add POST /drafts/{draftId}/picks/{pickId}/select endpoint (#180) (#387) (9aa6a6c)
  • Add PUT /api/teams/{id}/depth-chart endpoint (#453) (#454) (89bcaf4)
  • Add PUT endpoints for conference/division/team name editing (#170) (#382) (bd4602b)
  • Add QA and testing skills (#408) (0de1a04), closes #407
  • add Scout persistence with new inheritance pattern (8d30f90)
  • add Scout persistence with new inheritance pattern (39257c9)
  • Add Season and SeasonWeek entities with database schema (17e44d2)
  • Add Season and SeasonWeek entities with database schema (#79) (dbfcb99)
  • add Serilog structured logging with correlation IDs (#508) (423d7bf)
  • add soft delete to Player, Coach, Trainer, Scout repositories (198bcd6)
  • add soft delete to Player, Coach, Trainer, Scout repositories (168704a)
  • add staff management API endpoints (ea5ba9f)
  • add staff management API endpoints (22ef696)
  • Add TeamGameStat entity and team stat aggregation (23cafa0)
  • add TeamGameStat entity and team stat aggregation (#477) (430c51d)
  • Add unauthenticated health endpoint (edad312)
  • Add unauthenticated health endpoint with DB check (8d3085e)
  • add user preferences API endpoints (0c74e36)
  • add user preferences API endpoints (#293, #294, #295) (b01af86)
  • add UserAuthorizationContext to consolidate per-request auth queries (#507) (3c02440)
  • add validation guard rails, oddball league support, and custom bracket fallback (4c9fe00)
  • api: add canonical global user inbox endpoint (#571) (54263de)
  • api: Add GET /api/players/{playerId}/contract endpoint (#368) (#372) (8710321)
  • api: Add Team Depth Chart GET endpoint (#279) (abd0302)
  • api: Enhance League Leaders with cache tokens, ranking, and tests (#369) (1143728)
  • Auto-populate players during league creation (0b0c259)
  • backend: Add Year1Draft property to League entity (#114) (#390) (6ff5d76)
  • complete CRUD endpoints for conferences, divisions, and teams (bd2ea0a)
  • complete CRUD endpoints for conferences, divisions, and teams (d1eda01)
  • dal: add Trainer persistence (e38c6d6)
  • derive IsStarted from depth chart, remove engine GamesStarted dependency (ce93998)
  • Derive IsStarted from depth chart, remove engine GamesStarted dependency (2ff3118)
  • Draft execution refactor with board-based picking (#422) (90fb773)
  • Draft System MVP with AI Simulation (#162) (#339) (0c6cf6a)
  • draft: Add PopulateDraftPoolAsync for Year 1 Draft mode (#395) (f56c525)
  • draft: Complete draft execution engine with tests and fixes (#384) (46b5b01)
  • expose player personality traits and archetype on PlayerDto (#536) (3d60ea6)
  • fa: wire FreeAgentDecisionEngine into ContractDecisionService (Wave 3 PR1) (#531) (152a556)
  • flexible playoff bracket configuration for variable league sizes (3cd8c09)
  • flexible playoff bracket configuration for variable league sizes (258a091)
  • free-agency: mid-season FA gating with TimeProvider and period-aware deadlines (#522) (#532) (02d4348)
  • Implement Injury Adjustment Factor Calculation (8cc23e0)
  • implement injury adjustment factor calculation (#229) (f6dc226)
  • implement injury-triggered archetype shifts (7aded35)
  • implement injury-triggered archetype shifts (#434) (26bdb2d)
  • implement playoff bracket generation and simulation (80cd58b)
  • implement playoff bracket generation and simulation (34236be)
  • Implement Schedule Generation Service (#80) (69538c9)
  • Implement Schedule Generation Service (#80) (1ac70b9)
  • Implement year-end retirement decisions with career arc (#311) (#344) (bd2328a)
  • Integrate progression engine into daily season simulation (#426) (#470) (5808136)
  • Make CreateLeague atomic with transaction safety and player population (#397) (b459a69), closes #122
  • Migrate from SQL Server to PostgreSQL (#414) (509f58f)
  • NFL Calendar API & Advancement Blocking Services (#409) (cd7a8f1)
  • offseason phase calendar + phase transitions (#519) (#529) (b9aa4f2)
  • persist Coach entities to database (ca00d71)
  • persist Coach entities to database (b0e97de)
  • Player Archetypes & Trait Evolution (Wave 2 - #517, #521) (#530) (966dc6c)
  • records: Complete Phase 2 - Record Book System Integration (#371) (149815d)
  • scout-integrated draft picks and auto-complete to full rosters (#512) (e2dcfa1)
  • Security hardening P0-P2 (Epic #134) (#452) (b6b597f)
  • services: Add GenerateRosterSet and FA pool population (#103) (#392) (86e5aaa)
  • support playoff configuration in league creation endpoint (e5068c6)
  • support playoff configuration in league creation endpoint (f0c20a8)
  • update Coach to flat attributes pattern (#13, #14) (df3286f)
  • update Coach to flat attributes pattern (#13, #14) (32128c5)
  • update to Gridiron.Engine v0.4.0 (7f652b1)
  • Wire advancement blocking into existing endpoints (#410) (10f70f7)
  • Wire contract financials to roster moves (#439) (cd68c97)
  • Wire contract financials to roster moves (#439) (d8fe3e9)
  • Wire up 11-archetype progression engine, replacing hardcoded 4-phase system (#428) (#457) (8140a52)

Bug Fixes

  • 137: Implement PlayerGameStat persistence and revert logic (473a387)
  • 137: Implement safe player stats persistence and revert logic (e95e62e)
  • add authorization checks to RestoreLeague and ValidateRestore (#506) (5395e58)
  • add canonical GM assignment upsert flow (1a79c89)
  • Add missing Designer.cs files for 7 migrations (#379) (#380) (8468c9b)
  • add missing Designer.cs files for personality traits and offseason phase migrations (df7af5d)
  • add missing Designer.cs files for personality traits and offseason phase migrations (fa15f10)
  • add Postgres service container to rate-limit tests workflow (#557) (265f82f)
  • add resilience to deploy workflow for serverless SQL (565fc2c)
  • add resilience to deploy workflow for serverless SQL (0c1739b)
  • Add retry logic and metrics for play-by-play save failures (#463) (67dbaf5)
  • add Serilog Application Insights sink for structured log telemetry (c6bdd49)
  • add Serilog Application Insights sink for structured log telemetry (8eba58f)
  • add UAT reset runbook and non-user wipe script (4737831)
  • add UAT reset runbook and non-user wipe script (c5f0f2f)
  • address Oracle review findings for TeamGameStat (e551353)
  • address PhD review findings for archetype shifts (8b38e02)
  • apply Oracle Postgres review findings (d355b30)
  • Auto-create user in MessageController to prevent 401 race condition (#462) (b1aa4d7)
  • Auto-create user profile on first login (#377) (#378) (f5fe8fe)
  • Block E2E test mode authentication bypass in production (#360) (cad3cea)
  • Build fresh in deploy job instead of using artifacts (#345) (2d7432e)
  • ci: pin dotnet-ef version to 8.0.0 (e87c588)
  • ci: pin dotnet-ef version to 8.0.0 (e6c2b14)
  • ci: use conventional commit prefix for Dependabot PRs (#563) (93430a4)
  • deploy only after CI passes, fix workflow_run condition (4998007)
  • deps: Update Azure.Identity from 1.7.0 to 1.17.1 (#373) (a92d8f6)
  • deps: Update Microsoft.Data.SqlClient from 5.1.1 to 6.1.4 (#374) (3c06a2a)
  • deps: Update Microsoft.Extensions.Caching.Memory from 8.0.0 to 10.0.2 (#375) (00b6d50)
  • e2e: stabilize season progression for fullstack UAT (#573) (8b94aec)
  • Extract email from preferred_username claim in Azure AD CIAM tokens (#346) (aa71778)
  • gate migration validation on PR relevance (1047b9f)
  • gate migration validation on PR relevance (256da8d)
  • harden ci deployment health checks (545385b)
  • harden ci deployment health checks (ec6e2b3)
  • increase CI simulation timeout to 300s (23619ea)
  • increase simulation integration test timeout for CI (07e6d9c)
  • install sqlcmd tools in CI for migration validation (6a24758)
  • keep validate-migrations green when skipped (3bb3ba6)
  • make all direct BeginTransactionAsync calls nesting-aware (#543) (a1f6bf5)
  • make all transactional operations compatible with NpgsqlRetryingExecutionStrategy (4ddfe18)
  • make all transactional operations compatible with NpgsqlRetryingExecutionStrategy (da5a9d3)
  • make API CORS allowlist explicit for preview auth smoke (#538) (1d2d085)
  • make archetype shift tests deterministic (M-QA-1) (6460b71)
  • make GridironTransactionManager nesting-aware to fix Year1Draft 500 error (3497cf5)
  • Make Player.LeagueId non-nullable and fix N+1 queries (#461) (33926a7)
  • migration issues and add CI validation (7382b5b)
  • migration issues and add CI validation (57575df)
  • Move GetMyTeams endpoint to UsersController to fix routing conflict (#343) (64cef91)
  • preserve null PenaltyYards in season aggregation (73db357)
  • query active league users explicitly (02d8e4e)
  • regenerate migration with proper CreateTable for season stats archive tables (903f709)
  • Remove appsettings.json copy from DataAccessLayer (7e59d6f)
  • Remove appsettings.json copy from DataAccessLayer (8f9f3df)
  • remove artifact dependency from code-coverage job (42e9d78)
  • Remove gridiron-web project from solution file (6b0d994)
  • remove Pooling=false and ClearPool from Dispose to fix ObjectDisposedException (d64e9d5)
  • remove redundant CI run on master push (671cdcc)
  • remove redundant CI run on master push (1962bc7)
  • Replace blocking async calls with PlayerGenerationData singleton (#352) (#364) (437edcb)
  • replace brittle 2s delay with polling loop in integration tests (6493e81)
  • reseed UAT resets automatically (fc3861a)
  • reseed UAT resets automatically (afe851a)
  • restore artifact upload/download for proper CI flow (0cc5e2d)
  • Restrict CORS policy to specific frontend domains (#361) (e45f758), closes #348
  • revert to NUGET_READ_TOKEN (now using repo-level secret) (cd4218c)
  • Scale ProgressionEngine for daily-tick correctness (0c5a41f)
  • Scale ProgressionEngine terms by yearFraction for daily-tick correctness (99f14c1)
  • Security hardening for draft controller (#389) (62010d9)
  • security: Update Newtonsoft.Json to 13.0.4 in Diagram project (#376) (dc734e1)
  • seed: reset fullstack local test state (#572) (1cb0a08)
  • skip all special teams plays and harden edge cases per Oracle review (5cefcf1)
  • Switch to Service Principal auth for Azure deployment (a905766)
  • Switch to Service Principal auth for Azure deployment (6aa7f2c)
  • synchronize GM role writes in UsersController (fb5409e)
  • synchronize league users and GM assignments (6506d9a)
  • update CI workflow with new project names (5e92398)
  • update CI workflow with new project names (a560ea1)
  • update Domain.csproj to engine 0.7.3 and fix deterministic test values (ad330cf)
  • Update GOD user AzureAdObjectId to match Entra CIAM (#404) (9f9b02f), closes #403
  • update integration tests for new constructor signature (9a00a23)
  • update mapper tests for slimmed Engine domain objects (859ec9a)
  • update SeasonSimulationServiceTests to match new constructor and method signature (8aad30a)
  • Update team W/L/T records during week simulation (Issue #138) (23b645e)
  • Use GITHUB_TOKEN for NuGet auth (expired PAT) (#388) (2c3f1cd)
  • use GITHUB_TOKEN for NuGet auth (org secrets don't work with private repos on free plan) (7d9fb84)
  • Use SaveChangesAsync and soft delete in PlayerGameStatRepository (82c131f)
  • Year1Draft 500 error from nested transaction (814f295)

Miscellaneous Chores

  • db: Squash all migrations into single InitialCreate (#391) (c438ec8)
Injury Engine

Injury Engine

v0.4.0 Jul 31, 2026

0.4.0 (2026-07-31)

Features

  • Add GitHub Actions for PR validation and auto-project-add (9d5f266)
  • Add OpenCode skill for injury engine development (5258564)
  • Add QA and testing skills (#16) (a93911e), closes #15

Bug Fixes

  • ci: accept full GitHub URLs in issue link check (8eb5ca5)
Web App

Web App

gridiron-web-v1.0.1 Jul 30, 2026

1.0.1 (2026-07-30)

Bug Fixes

  • ci: remediate npm audit advisories and allowlist non-applicable react-router RSC advisory (#374) (f8b8abf)
  • web: resolve react-hooks 7.1 set-state-in-effect and purity violations (#377) (a27a39c)
gridiron-web-v1.0.0 Jun 20, 2026

1.0.0 (2026-06-20)

Features

  • add 401 retry interceptor for automatic token refresh (#102) (c160b3c)
  • add active context state management (#93) (33f3104)
  • add active context state management for league/team switching (83591fe)
  • add async league creation polling flow (#330) (8469c36)
  • add auto-complete draft to full rosters UI (#270) (a0ddd7b)
  • add Cloudflare Turnstile human verification gate before Azure AD login (#305) (088e698)
  • add commissioner announcement composer (#69) (#153) (3504f78)
  • add commissioner self-assign button (#73) (772da80)
  • Add comprehensive E2E tests for Epic #49 GM Onboarding (#109) (e057fd5)
  • Add comprehensive security scanning (#196) (151b4ef)
  • add context switcher component for league/team navigation (#89) (b2159b7)
  • Add contract financials UI for roster management (#439) (8ec55c8)
  • Add contract financials UI for roster management (#439) (bc0b282)
  • add control state indicators to unified dashboard (#71) (74606f6)
  • add control state indicators to unified dashboard (#71) (26eecb5)
  • add depth-chart and league-leaders API mock routes and hooks (#101) (cdde587)
  • add E2E tests for dashboard user states and fix team navigation (#118) (58e3d6c)
  • add franchise tag UI with confirmation modal and cap impact preview (#300) (503c299)
  • add FreeAgentMarketPage for browsing and offering contracts (#296) (a04ffc0)
  • add full-stack E2E test suite with Playwright (#274) (b409d79)
  • Add GitHub Actions for PR validation and auto-project-add (20e7abf)
  • Add GM Team Management Page (a999589)
  • add GM Team Management Page (#84) (a043fe9)
  • add inbox badge with unread count (#66) (#146) (e60e4ef)
  • Add inline team name editing on league manage page (#242) (dfd5560)
  • add message detail view (#68) (#151) (6c43706)
  • add message list view (#67) (#148) (aa4dfcb)
  • add mock routes for GM onboarding flow (ec8294f)
  • add mock routes for GM onboarding flow (396c658)
  • add mock server presets for Epic #49 testing (4223aa2)
  • add pending staff offers list (#138) (#150) (64d0a77)
  • Add Pick Selection Modal for Commissioner draft override (#180) (#187) (fdd3ab4)
  • add playoff configuration to league creation wizard (de8d023)
  • add playoff configuration to league creation wizard (576f26b), closes #41
  • Add PUT endpoints for conference/division/team name editing (#170) (#174) (41cbd19)
  • Add QA and testing skills (#210) (1148e64), closes #209
  • add roster grid tabs with position-aware skill columns (#121) (7cc9a78)
  • add scenario-based E2E tests for league structure rendering (7a4d508)
  • add season length and bye week configuration to league creation (a73d0e3)
  • add season length and bye week configuration to league creation (78378ba), closes #47
  • add Season Management UI for leagues (b49c8b2)
  • add Season Management UI for leagues (305357b), closes #39
  • add staff contract offer form (#137) (#147) (69fdf5f)
  • add staff market view (#140) (#149) (ab7a76c)
  • add staff offer detail view (#139) (#152) (c90ad22)
  • Add staffProgressed and markersCrossed to AdvanceDaysResponse (#426) (#244) (c604052)
  • add Team Depth Chart Page (#85) (0b8d0d5)
  • add Team Roster Page (7fad54a)
  • add TransactionsPage UI with filtering, sorting, and pagination (#299) (e8886b1)
  • add user preferences system with theme and grid customization (#119) (7d58ccb)
  • Add Vercel React skills (react-best-practices, composition-patterns) (089606f)
  • auth: Improve MSAL authentication robustness (#202) (9b540a8)
  • Complete frontend polish — EPIC #133 (#237) (4572f95)
  • draft: Add accessibility, virtual scrolling, and tests (#184) (0f7cbd6)
  • enhance AssignGmModal with success state and tests (#63) (0ce1af2)
  • enhance AssignGmModal with success state and tests (#63) (98150ce)
  • enhance WelcomeModal for first team selection (#72) (65db700)
  • enhance WelcomeModal for first team selection (#72) (7f8181e)
  • harden first-session auth preview automation (#324) (7aea4c9)
  • implement auth polish (Epic #47) (1339b33)
  • implement Auth Polish (Epic #47) (4c320f1)
  • Initial frontend repo setup (46fd15e)
  • Inline team name editing on league manage page (#243) (3675763)
  • League Calendar UI & Commissioner Controls Enhancement (#211) (1c15882)
  • League Standings & Leaders Page (#91) (a45768d)
  • league-create: Add Setup Complete modal on structure page (#193) (d30bd64)
  • league-create: Add Year 1 Expansion Draft checkbox (#189) (#192) (efc3d42)
  • Make season year editable on league creation page (#241) (99fd80d)
  • Name new conferences and divisions based on league-wide counts (d7d0b7b)
  • Name new teams based on total league team count instead of division count (6e299c6)
  • Phase 1 & 2 - Foundation and Create League Form (90d579f), closes #6
  • Phase 3 - League Structure Editor with Auto-Save (f1577ac), closes #6
  • Phase 4 - Add comprehensive tests for LeagueStructurePage (118d2e5), closes #6
  • player: personality traits display + FA decision E2E (#280, #281) (#318) (4dc51cc)
  • polish dashboard with loading skeletons, error states, and empty states (#97) (fb1e3f4), closes #87
  • Role-Based Edit/View Mode and Read-Only Scouting (#99) (26f939a)
  • Security hardening for frontend (Epic #134) (#236) (f5f2a6d)
  • uat: operationalize local full-stack UAT suite (#348) (63662a4)
  • upgrade MSAL to v5 (msal-browser 5.6.3, msal-react 5.2.1) (#302) (795c86e)
  • web: Add Stats Tab to Player Detail View (#165) (#167) (64847a6)
  • web: migrate message inbox to global routes (#343) (c508dcc)
  • web: Player Detail View with PhD-level architecture (#166) (8e9e782)
  • web: Update Depth Chart UI and comprehensive tests (#279) (#160) (ede7719)

Bug Fixes

  • Add divisionId to all Team objects for TypeScript compliance (89e9a26)
  • Add missing API exports for createLeague, updateTeam, updateConference, updateDivision (e66490b)
  • Add seed data and state reset for MSW handlers (f38028c)
  • Add stateful league CRUD handlers for E2E tests (d1d09a9)
  • align mock routes with frontend API endpoints and enable all E2E tests (#110) (962200c)
  • api: Correct API endpoint routes and add league filtering (#183) (b157577)
  • Build app before deploying to Azure Static Web Apps (c85b199)
  • ci: skip deploy on missing secrets for Dependabot PRs (776285d)
  • ci: skip deploy on missing secrets for Dependabot PRs (e4fc245)
  • Configure Azure Static Web Apps deployment with proper CI/CD (0f883ae), closes #2
  • Correct API route mismatches with backend (b697452), closes #386
  • Correct API URL to include /api path and update error messages (033ac6e)
  • dashboard: Invalidate cache after league creation (#175) (bbc5fb7)
  • e2e: stabilize fullstack UAT follow-up (#349) (7add408)
  • e2e: use less specific selector to avoid multi-match error (bff18ba)
  • exclude test files from production build (af22ce1)
  • extend league creation request timeout (a4f099e)
  • extend league creation request timeout (b74662f)
  • Final TypeScript fixes for CI (7cfa70b)
  • Fix React Strict Mode issue in useAutoSave hook (#170) (3060a41)
  • Fix remaining test failures (3178121)
  • Fix useAutoSave and LeaguesPage tests (9c03633)
  • Import vi from vitest in LeaguesPage test (796b747)
  • Improve PickSelectionModal accessibility and behavior (#188) (8a73797)
  • preserve post-login navigation through verify flow (#326) (2988a0c)
  • Prevent unwanted login redirects on public pages (#154) (07a8465)
  • Remove duplicate export in LeagueStructurePage (e0cc661)
  • Remove totalDivisions from LeagueDetail (51c5007)
  • Remove unused imports and variables (83f581c)
  • Remove unused imports to fix ESLint errors (5bcf112)
  • Remove unused params destructuring in MSW handlers (da3bee6)
  • remove unused rerender variable in test (#63) (49138eb)
  • Remove unused variables to pass ESLint checks (ce7a047)
  • Render app even when auth redirect fails - don't block on auth errors (e0b0720)
  • Replace hardcoded dark-mode classes with design system tokens in CreateLeaguePage (#240) (6b16f30)
  • resolve npm audit high-severity vulnerabilities (7ece5d7)
  • resolve npm audit high-severity vulnerabilities (32a73bf)
  • resolve npm audit vulnerabilities (undici, flatted, handlebars, picomatch, path-to-regexp, brace-expansion) (#271) (7a4ccd8)
  • Sequence API calls to prevent race condition on first login (#385) (#238) (986992c)
  • Update all test expectations to match new implementation (8d38fa7)
  • Update E2E and unit tests to match new implementation (1b8789b)
  • Update E2E test for new league creation form (88abe02)
  • Update mock server routes to match API changes (#186) (a28b137)
  • update react-router to fix security vulnerabilities (fd22f4e)
  • Use API data for user profile display (#171) (#173) (413293b)
  • use conditional instead of invalid action parameter (274ec9e)
  • Use correct placeholder in E2E test (a74de35)
  • Use nth selector for number inputs in E2E test (45759bb)
  • Use relative API paths in MSW handlers to match client baseURL (5c65ded)
  • Wait for league name heading in E2E test (fe03bcb)