felt/.planning/phases/01-tournament-engine/01-05-SUMMARY.md
Mikkel Georgsen 1978d3d421 docs(01-05): complete Blind Structure + Chip Sets + Templates plan
- SUMMARY.md with self-check passed
- STATE.md updated: plan 6 of 14, 36% progress, 4 decisions added
- ROADMAP.md updated: 5/14 plans complete
- REQUIREMENTS.md: 15 requirements marked complete (BLIND-01-06, CHIP-01-04, FIN-01,02,05,06,10)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 04:02:11 +01:00

6.6 KiB

phase plan subsystem tags requires provides affects tech-stack key-files key-decisions patterns-established requirements-completed duration completed
01-tournament-engine 05 api, database, template
go
crud
blind-structure
chip-set
payout
buyin
wizard
tournament-template
chi
libsql
phase provides
01-tournament-engine (Plan A) Project scaffold, chi router, middleware, store layer
phase provides
01-tournament-engine (Plan B) Database schema with all building block tables
ChipSet CRUD service with denomination management
BlindStructure CRUD service with level validation
PayoutStructure CRUD service with bracket/tier nesting and 100% sum validation
BuyinConfig CRUD service with rake split validation
TournamentTemplate CRUD service with FK validation and expanded view
Structure wizard algorithm (geometric progression, denomination snapping, break insertion)
4 built-in blind structures (Turbo, Standard, Deep Stack, WSOP-style)
Built-in payout structure with 4 entry-count brackets
4 built-in buy-in configs with rake splits
4 built-in tournament templates composing all above
Full REST API for all building blocks and templates
tournament-lifecycle
frontend-templates
clock-engine
added patterns
Service-per-entity CRUD pattern with *sql.DB injection
Transaction-based create/update with nested entity replacement
FK reference validation before template creation
Expanded view pattern (GetTemplate vs GetTemplateExpanded)
Seed migration with INSERT OR IGNORE for idempotent built-in data
created modified
internal/template/chipset.go
internal/template/payout.go
internal/template/buyin.go
internal/template/tournament.go
internal/blind/structure.go
internal/blind/wizard.go
internal/blind/templates.go
internal/server/routes/templates.go
internal/store/migrations/005_builtin_templates.sql
internal/blind/wizard_test.go
internal/template/tournament_test.go
internal/server/server.go
Seed data uses INSERT OR IGNORE with explicit IDs for idempotent re-runs
Wizard generates preview-only levels (not auto-saved) for TD review
BB ante used in WSOP-style template (separate from standard ante field)
Payout brackets must be contiguous ranges (no gaps between min/max entries)
Service CRUD pattern: NewXService(db) with Create/Get/List/Update/Delete/Duplicate
Nested entity pattern: replace-all on update (delete children, re-insert)
Route registration: Register(chi.Router) method for modular route mounting
BLIND-01
BLIND-02
BLIND-03
BLIND-04
BLIND-05
BLIND-06
CHIP-01
CHIP-02
CHIP-03
CHIP-04
FIN-01
FIN-02
FIN-05
FIN-06
FIN-10
10min 2026-03-01

Plan 05: Blind Structure + Chip Sets + Templates Summary

Full CRUD for all building blocks (chip sets, blind structures, payouts, buy-ins) with 4 built-in tournament templates, structure wizard algorithm, and REST API endpoints

Performance

  • Duration: 10 min
  • Started: 2026-03-01T02:48:52Z
  • Completed: 2026-03-01T02:58:52Z
  • Tasks: 2
  • Files modified: 12

Accomplishments

  • Complete CRUD services for all 5 building block types with validation, duplication, and builtin protection
  • Structure wizard generates blind structures from high-level inputs (player count, chips, duration, denominations) using geometric progression with denomination snapping
  • 4 built-in tournament templates (Turbo, Standard, Deep Stack, WSOP-style) with matching blind structures, buy-in configs, and shared payout structure
  • Full REST API with admin-gated mutations and floor-accessible reads
  • Comprehensive test suites for wizard (6 tests) and templates (7 tests), all passing

Task Commits

Each task was committed atomically:

  1. Task E1: Building block CRUD and API routes - 99545bd (feat)
  2. Task E2: Built-in templates, seed data, wizard tests, template tests - 7dbb4ca (feat)

Files Created/Modified

  • internal/template/chipset.go - ChipSet CRUD service with denomination management
  • internal/template/payout.go - PayoutStructure CRUD with bracket/tier nesting and 100% sum validation
  • internal/template/buyin.go - BuyinConfig CRUD with rake split validation
  • internal/template/tournament.go - TournamentTemplate CRUD with FK validation, expanded view, SaveAsTemplate
  • internal/blind/structure.go - BlindStructure CRUD with level validation (contiguous positions, SB < BB)
  • internal/blind/wizard.go - Structure wizard: geometric progression, denomination snapping, break insertion, chip-up markers
  • internal/blind/templates.go - Built-in level definitions (Turbo, Standard, Deep Stack, WSOP-style)
  • internal/server/routes/templates.go - REST API handlers for all building blocks and templates
  • internal/store/migrations/005_builtin_templates.sql - Seed data for 4 blind structures, 1 payout structure, 4 buy-in configs, 4 tournament templates
  • internal/blind/wizard_test.go - Wizard tests: standard, player counts, denomination alignment, short/long, invalid inputs
  • internal/template/tournament_test.go - Template tests: create, invalid FK, expanded, save-as, duplicate, delete-builtin, list
  • internal/server/server.go - Wired template routes into protected API group

Decisions Made

  • Seed data uses INSERT OR IGNORE with explicit integer IDs for idempotent migration re-runs
  • Wizard generates preview-only levels (not auto-saved) so the TD can review and adjust before saving
  • WSOP-style blind structure uses BB ante (separate field from standard ante) starting at level 4
  • Payout bracket validation enforces contiguous entry count ranges with no gaps
  • All built-in entities use is_builtin=1 flag -- cannot be deleted but can be duplicated

Deviations from Plan

None - plan executed exactly as written.

Issues Encountered

  • Pre-existing test failure in cmd/leaf/main_test.go (missing clockRegistry parameter from Plan D) -- out of scope, not caused by this plan

User Setup Required

None - no external service configuration required.

Next Phase Readiness

  • All building blocks have full CRUD with API endpoints -- ready for frontend template management UI
  • Tournament templates compose building blocks by reference -- ready for tournament creation flow
  • Structure wizard is functional -- ready for frontend wizard UI
  • Built-in templates exist on first boot -- ready for template-first tournament creation

Self-Check: PASSED

All 11 created files verified on disk. Both task commits (99545bd, 7dbb4ca) found in git log.


Phase: 01-tournament-engine Completed: 2026-03-01