docs(03): capture phase context
Phase 03: visual-flattening - Implementation decisions documented - Phase boundary established
This commit is contained in:
65
.planning/phases/03-visual-flattening/03-CONTEXT.md
Normal file
65
.planning/phases/03-visual-flattening/03-CONTEXT.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# Phase 3: Visual Flattening - Context
|
||||
|
||||
**Gathered:** 2026-01-18
|
||||
**Status:** Ready for planning
|
||||
|
||||
<domain>
|
||||
## Phase Boundary
|
||||
|
||||
Transform semantic items (games, travel, custom) into display rows, sorted deterministically by sortOrder within each day. This phase provides the row-to-semantic translation needed for Phase 4 drag interaction.
|
||||
|
||||
</domain>
|
||||
|
||||
<decisions>
|
||||
## Implementation Decisions
|
||||
|
||||
### Sort boundaries
|
||||
- sortOrder = 0 is the first game position; negatives appear before games, positives appear after/between
|
||||
- Purely sequential sorting within a day — no time-of-day grouping (morning/afternoon/evening)
|
||||
- No visual indicator at the boundary between pre-game items and games
|
||||
- Items just flow in sortOrder order; games are distinguished by their visual style
|
||||
|
||||
### Section structure
|
||||
- Day headers display day number + date (e.g., "Day 1 - Jan 15" or "Day 1 (Wed, Jan 15)")
|
||||
- Headers scroll with content — not sticky
|
||||
- Empty days show the day header with no rows beneath (don't skip empty days)
|
||||
|
||||
### Item differentiation
|
||||
- **Games:** Sport-colored accent (left border or icon matching sport: MLB=red, NBA=orange, NHL=blue)
|
||||
- **Travel segments:** Subtle/muted style — gray text, smaller row, less prominent than games
|
||||
- **Custom items:** Note icon + text indicating user-added item
|
||||
- **Drag affordance:** Drag handle icon (three-line grip) on draggable items
|
||||
|
||||
### Edge case handling
|
||||
- Ties shouldn't occur — system always assigns unique sortOrder when positioning items
|
||||
- No special visual treatment for items at first/last position in a day
|
||||
- Days with only games can still receive drops (between games, subject to Phase 2 constraints)
|
||||
- Flattening is a pure function — stateless, same input always produces same output
|
||||
|
||||
### Claude's Discretion
|
||||
- Whether to use UITableView sections or inline day headers (based on drag-drop requirements)
|
||||
- Whether travel/custom items can use sortOrder in the 100-1540 range (based on Phase 2 constraint logic)
|
||||
- Exact styling details (spacing, typography, border thickness)
|
||||
- Tiebreaker for identical sortOrder (by item type priority: games > travel > custom) if it ever occurs despite unique assignment
|
||||
|
||||
</decisions>
|
||||
|
||||
<specifics>
|
||||
## Specific Ideas
|
||||
|
||||
- "New items added to specific positions should get unique sortOrder values" — the system should proactively avoid ties rather than handling them after the fact
|
||||
- Sport colors should match existing SportsTime app patterns for consistency
|
||||
|
||||
</specifics>
|
||||
|
||||
<deferred>
|
||||
## Deferred Ideas
|
||||
|
||||
None — discussion stayed within phase scope
|
||||
|
||||
</deferred>
|
||||
|
||||
---
|
||||
|
||||
*Phase: 03-visual-flattening*
|
||||
*Context gathered: 2026-01-18*
|
||||
Reference in New Issue
Block a user