docs(17-02): complete InitiativeCard & InitiativeList plan
Tasks completed: 2/2 - InitiativeCard component with status, progress, and actions - InitiativeList component with loading/empty/error states and filtering SUMMARY: .planning/phases/17-initiative-dashboard/17-02-SUMMARY.md
This commit is contained in:
@@ -272,7 +272,7 @@ Plans:
|
||||
|
||||
Plans:
|
||||
- [x] 17-01: StatusBadge & ProgressBar Components
|
||||
- [ ] 17-02: TBD
|
||||
- [x] 17-02: InitiativeCard & InitiativeList Components
|
||||
- [ ] 17-03: TBD
|
||||
- [ ] 17-04: TBD
|
||||
|
||||
@@ -342,7 +342,7 @@ Phases execute in numeric order: 1 → 1.1 → 2 → 3 → 4 → 5 → 6 → 7
|
||||
| 14. Parallel Phase Execution | v1.3 | 8/8 | Complete | 2026-02-02 |
|
||||
| 15. Frontend Wireframes | v1.3 | 3/3 | Complete | 2026-02-02 |
|
||||
| 16. Frontend Scaffold | v2.0 | 5/5 | Complete | 2026-02-04 |
|
||||
| 17. Initiative Dashboard | v2.0 | 1/4 | In progress | - |
|
||||
| 17. Initiative Dashboard | v2.0 | 2/4 | In progress | - |
|
||||
| 18. Initiative Detail | v2.0 | 0/? | Not started | - |
|
||||
| 19. Agent Inbox | v2.0 | 0/? | Not started | - |
|
||||
| 20. Real-time Subscriptions | v2.0 | 0/? | Not started | - |
|
||||
|
||||
@@ -10,18 +10,18 @@ See: .planning/PROJECT.md (updated 2026-02-04)
|
||||
## Current Position
|
||||
|
||||
Phase: 17 of 21 (Initiative Dashboard)
|
||||
Plan: 1 of 4 in current phase
|
||||
Plan: 3 of 4 in current phase
|
||||
Status: In progress
|
||||
Last activity: 2026-02-04 - Completed 17-01-PLAN.md
|
||||
Last activity: 2026-02-04 - Completed 17-03-PLAN.md
|
||||
|
||||
Progress: █████████░ 96%
|
||||
Progress: █████████░ 97%
|
||||
|
||||
## Performance Metrics
|
||||
|
||||
**Velocity:**
|
||||
- Total plans completed: 63
|
||||
- Total plans completed: 64
|
||||
- Average duration: 3 min
|
||||
- Total execution time: 175 min
|
||||
- Total execution time: 177 min
|
||||
|
||||
**By Phase (v1.0):**
|
||||
|
||||
@@ -194,6 +194,8 @@ Recent decisions affecting current work:
|
||||
- 17-01: Use className overrides on stock shadcn Badge (no new variants)
|
||||
- 17-01: Generic string status prop for StatusBadge (not tied to specific type)
|
||||
- 17-01: Dashboard components live in packages/web/src/components/ (not ui/)
|
||||
- 17-02: SerializedInitiative type for tRPC Date→string serialization (wire format differs from DB schema)
|
||||
- 17-02: Per-card phase stats fetch via trpc.listPhases (N+1 acceptable for v1)
|
||||
|
||||
### Pending Todos
|
||||
|
||||
@@ -216,5 +218,5 @@ None.
|
||||
## Session Continuity
|
||||
|
||||
Last session: 2026-02-04
|
||||
Stopped at: Completed 17-01-PLAN.md
|
||||
Stopped at: Completed 17-02-PLAN.md
|
||||
Resume file: None
|
||||
|
||||
106
.planning/phases/17-initiative-dashboard/17-02-SUMMARY.md
Normal file
106
.planning/phases/17-initiative-dashboard/17-02-SUMMARY.md
Normal file
@@ -0,0 +1,106 @@
|
||||
---
|
||||
phase: 17-initiative-dashboard
|
||||
plan: 02
|
||||
subsystem: ui
|
||||
tags: [react, trpc, shadcn, lucide-react, tailwind]
|
||||
|
||||
# Dependency graph
|
||||
requires:
|
||||
- phase: 17-01
|
||||
provides: StatusBadge and ProgressBar components
|
||||
- phase: 16-03
|
||||
provides: tRPC client wiring
|
||||
provides:
|
||||
- InitiativeCard component with status, progress, and actions
|
||||
- InitiativeList component with loading/empty/error states and filtering
|
||||
- SerializedInitiative type for tRPC wire format
|
||||
affects: [17-03, 17-04, 18]
|
||||
|
||||
# Tech tracking
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns:
|
||||
- "SerializedInitiative type for tRPC Date→string serialization"
|
||||
- "Per-card phase stats query (N+1 acceptable for v1)"
|
||||
|
||||
key-files:
|
||||
created:
|
||||
- packages/web/src/components/InitiativeCard.tsx
|
||||
- packages/web/src/components/InitiativeList.tsx
|
||||
modified: []
|
||||
|
||||
key-decisions:
|
||||
- "SerializedInitiative type instead of raw Initiative (tRPC serializes Date to string)"
|
||||
- "Per-card phase stats fetch via trpc.listPhases (N+1 acceptable for v1 dashboard)"
|
||||
|
||||
patterns-established:
|
||||
- "tRPC wire types need serialized equivalents for Date fields"
|
||||
|
||||
# Metrics
|
||||
duration: 2min
|
||||
completed: 2026-02-04
|
||||
---
|
||||
|
||||
# Phase 17 Plan 02: InitiativeCard & InitiativeList Summary
|
||||
|
||||
**InitiativeCard with self-contained phase stats and InitiativeList with tRPC queries, status filtering, and loading/empty/error states**
|
||||
|
||||
## Performance
|
||||
|
||||
- **Duration:** 2 min
|
||||
- **Started:** 2026-02-04T20:03:14Z
|
||||
- **Completed:** 2026-02-04T20:04:59Z
|
||||
- **Tasks:** 2
|
||||
- **Files modified:** 2
|
||||
|
||||
## Accomplishments
|
||||
- InitiativeCard renders name, StatusBadge, ProgressBar, phase count, View button, Spawn Architect dropdown, and more actions menu
|
||||
- Each card self-contained: fetches own phase stats via trpc.listPhases
|
||||
- InitiativeList fetches initiatives with optional status filter, handles all four states (loading, error, empty, populated)
|
||||
- Responsive layout: stacks vertically on mobile, hides phase count text on small screens
|
||||
|
||||
## Task Commits
|
||||
|
||||
Each task was committed atomically:
|
||||
|
||||
1. **Task 1: Create InitiativeCard component** - `ec93835` (feat)
|
||||
2. **Task 2: Create InitiativeList component** - `895c964` (feat)
|
||||
|
||||
## Files Created/Modified
|
||||
- `packages/web/src/components/InitiativeCard.tsx` - Single initiative row with status, progress, actions, and self-contained phase stats query
|
||||
- `packages/web/src/components/InitiativeList.tsx` - Initiative list with tRPC data fetching, status filtering, and loading/empty/error states
|
||||
|
||||
## Decisions Made
|
||||
- 17-02: SerializedInitiative type instead of raw Initiative type from schema (tRPC serializes Date to string over JSON wire format)
|
||||
- 17-02: Per-card phase stats query via trpc.listPhases (N+1 acceptable for v1 with small initiative counts)
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
### Auto-fixed Issues
|
||||
|
||||
**1. [Rule 3 - Blocking] Created SerializedInitiative type for tRPC Date serialization**
|
||||
- **Found during:** Task 2 (InitiativeList)
|
||||
- **Issue:** tRPC serializes Date to string over JSON. Initiative type has Date fields (createdAt, updatedAt) but tRPC query returns string. Type mismatch blocked compilation.
|
||||
- **Fix:** Created SerializedInitiative interface with string date fields, used in both InitiativeCard and InitiativeList props
|
||||
- **Files modified:** packages/web/src/components/InitiativeCard.tsx
|
||||
- **Verification:** npx tsc --noEmit passes
|
||||
- **Committed in:** 895c964 (Task 2 commit)
|
||||
|
||||
---
|
||||
|
||||
**Total deviations:** 1 auto-fixed (1 blocking)
|
||||
**Impact on plan:** Necessary for TypeScript compilation. No scope creep.
|
||||
|
||||
## Issues Encountered
|
||||
None
|
||||
|
||||
## User Setup Required
|
||||
None - no external service configuration required.
|
||||
|
||||
## Next Phase Readiness
|
||||
- Card and list components ready for page integration in Plan 03
|
||||
- SerializedInitiative type established for consistent tRPC wire format usage
|
||||
|
||||
---
|
||||
*Phase: 17-initiative-dashboard*
|
||||
*Completed: 2026-02-04*
|
||||
Reference in New Issue
Block a user