- Implement ProjectController with CRUD, status transitions, estimate/forecast - Add ProjectService with state machine validation - Extract ProjectStatusService for reusable state machine logic - Add ProjectPolicy for role-based authorization - Create ProjectSeeder with test data - Implement frontend project management UI with modal forms - Add projectService API client - Complete all 9 incomplete unit tests (ProjectModelTest, ProjectForecastTest, ProjectPolicyTest) - Fix E2E test timing issues with loading state waits - Add Scribe API documentation annotations - Improve forecasted effort validation messages with detailed feedback Test Results: - Backend: 49 passed (182 assertions) - Frontend Unit: 32 passed - E2E: 134 passed (Chromium + Firefox) Phase 3 Refactor: - Extract ProjectStatusService for state machine - Optimize project list query with status joins - Improve forecasted effort validation messages Phase 4 Document: - Add Scribe annotations to ProjectController - Generate API documentation
58 KiB
Tasks - SDD + TDD Workflow
Status: Foundation + Authentication + Team Member Mgmt COMPLETED
Last Updated: 2026-02-18
Summary
| Phase | Status | Progress | Notes |
|---|---|---|---|
| Foundation | ✅ Complete | 100% | All infrastructure, models, UI components, and pages created |
| Authentication | ✅ Complete | 100% | Core auth working - all tests passing |
| Team Member Mgmt | ✅ Complete | 100% | All 4 phases done (Tests, Implementation, Refactor, Docs) - A11y fixed |
| Project Lifecycle | ✅ Complete | 100% | All phases complete, 49 backend + 134 E2E tests passing |
| Capacity Planning | ⚪ Not Started | 0% | - |
| Resource Allocation | ⚪ Not Started | 0% | Placeholder page exists |
| Actuals Tracking | ⚪ Not Started | 0% | Placeholder page exists |
| Utilization Calc | ⚪ Not Started | 0% | - |
| Allocation Validation | ⚪ Not Started | 0% | - |
| Role-Based Access | ⚪ Not Started | 0% | - |
| Master Data Mgmt | ⚪ Not Started | 0% | Placeholder page exists |
| Forecast Reporting | ⚪ Not Started | 0% | Placeholder page exists |
| Utilization Reporting | ⚪ Not Started | 0% | Placeholder page exists |
| Cost Reporting | ⚪ Not Started | 0% | Placeholder page exists |
| Allocation Reporting | ⚪ Not Started | 0% | Placeholder page exists |
| Variance Reporting | ⚪ Not Started | 0% | Placeholder page exists |
Test Results (2026-02-19)
| Suite | Tests | Status |
|---|---|---|
| Backend (PHPUnit) | 49 passed | ✅ |
| Frontend Unit (Vitest) | 32 passed | ✅ |
| E2E (Playwright) | 134 passed | ✅ |
| Total | 215/215 | 100% |
All tests passing with no skipped or incomplete
Completed Archived Changes
| Change | Description | Date |
|---|---|---|
p00-api-documentation |
API documentation with Laravel Scribe | 2026-02-18 |
p01-ui-foundation |
UI foundation (types, stores, themes, navigation config) | 2026-02-18 |
p02-app-layout |
App layout components (Sidebar, TopBar, AppLayout) | 2026-02-18 |
p03-dashboard-enhancement |
Dashboard with StatCards and PageHeader | 2026-02-18 |
p04-content-patterns |
Content patterns (LoadingState, EmptyState, DataTable, FilterBar) | 2026-02-18 |
p05-page-migrations |
Page migrations (Team, Projects, placeholder pages) | 2026-02-18 |
Next Steps
- Phase 3: Refactor - Extract ProjectStatusService, optimize queries
- Phase 4: Document - Add Scribe annotations to ProjectController
- Implement Capacity Planning - Monthly capacity per team member
- Implement Resource Allocation - Assign members to projects
Issues Resolved
| Issue | Description | Resolution |
|---|---|---|
| #22 | E2E: Team Members page tests failing | Added seed data helper, improved selectors |
| #23 | A11y: Modal backdrop missing keyboard handler | Added onkeydown and role="button" |
| #24 | Vitest timeout in build verification | Increased timeouts, documented known issue |
Foundation Phase (Prerequisites) ✓ COMPLETED
All foundation work completed through archived changes:
p00-api-documentation- API documentation with Scribep01-ui-foundation- UI foundation (types, stores, theme system)p02-app-layout- App layout components (Sidebar, TopBar, AppLayout)p03-dashboard-enhancement- Dashboard enhancement with StatCardsp04-content-patterns- Content patterns (LoadingState, EmptyState, DataTable, FilterBar)p05-page-migrations- Page migrations (Team, Projects, placeholder pages)
1. Project Setup & Infrastructure ✓
Goal: Establish development environment and project structure
Status: Completed via p00-p05
- 1.1 Create Docker Compose configuration (frontend, backend, postgres, redis containers)
- 1.2 Configure Dockerfile for Laravel backend (PHP 8.4-FPM, use :latest tag)
- 1.3 Configure Dockerfile for SvelteKit frontend (Node:latest)
- 1.4 Set up volume mounts for code (hot reload) and data (PostgreSQL, Redis)
- 1.5 Configure environment variables (.env files for frontend and backend)
- 1.6 Test Docker Compose startup (all 4 containers running)
- 1.7 Configure Nginx Proxy Manager routes (/api/* → Laravel, /* → SvelteKit)
2. Backend Foundation (Laravel) ✓
Goal: Initialize Laravel with required dependencies
Status: Completed via p00
- 2.1 Initialize Laravel 12 (latest) project with required dependencies
- 2.2 Install tymon/jwt-auth, predis/predis
- 2.3 Install pestphp/pest, laravel/pint for testing and linting
- 2.4 Configure PostgreSQL connection in config/database.php
- 2.5 Configure Redis connection for cache and sessions
- 2.6 Set up JWT authentication configuration (60min access, 7day refresh)
- 2.7 Configure CORS for SvelteKit frontend origin
- 2.8 Create API route structure (api.php)
3. Frontend Foundation (SvelteKit) ✓
Goal: Initialize SvelteKit with required dependencies
Status: Completed via p01-p05
- 3.1 Initialize SvelteKit project with TypeScript
- 3.2 Install Tailwind CSS and DaisyUI
- 3.3 Install Recharts, TanStack Table (@tanstack/svelte-table)
- 3.4 Install Superforms (sveltekit-superforms) and Zod
- 3.5 Install Vitest and Playwright for testing
- 3.6 Configure Tailwind with DaisyUI theme
- 3.7 Create API client service (fetch wrapper with JWT token handling)
- 3.8 Create auth store (Svelte store for user, token management)
- 3.9 Create layout components (+layout.svelte, navigation)
- 3.10 Install Lucide icons (
lucide-svelte) - 3.11 Create layout types (
SidebarState,NavItem,NavSection,Theme) - 3.12 Create layout store with localStorage persistence
- 3.13 Create period store for global month selection
- 3.14 Create navigation configuration
4. Database Schema & Migrations ✓
Goal: Create database structure
Status: Completed
- 4.1 Create migration: roles table (id, name, description)
- 4.2 Create migration: project_statuses table (id, name, order, is_active, is_billable)
- 4.3 Create migration: project_types table (id, name, description)
- 4.4 Create migration: team_members table (id UUID, name, role_id, hourly_rate, active)
- 4.5 Create migration: projects table (id UUID, code unique, title, status_id, type_id, approved_estimate, forecasted_effort JSON)
- 4.6 Create migration: allocations table (id UUID, project_id, team_member_id, month, allocated_hours)
- 4.7 Create migration: actuals table (id UUID, project_id, team_member_id, month, hours_logged)
- 4.8 Create migration: holidays table (id UUID, date, name, description)
- 4.9 Create migration: ptos table (id UUID, team_member_id, start_date, end_date, reason, status)
- 4.10 Create migration: users table (id UUID, name, email, password, role enum)
- 4.11 Add indexes (composite on allocations/actuals for project+month, member+month)
- 4.12 Run migrations and verify schema
5. Database Seeders ✓
Goal: Populate master data
Status: Completed
- 5.1 Create seeder: roles (Frontend Dev, Backend Dev, QA, DevOps, UX, PM, Architect)
- 5.2 Create seeder: project_statuses (13 statuses with correct order)
- 5.3 Create seeder: project_types (Project, Support)
- 5.4 Create seeder: users (create superuser account for testing)
- 5.5 Run seeders and verify master data populated
6. Laravel Models & Relationships ✓
Goal: Create Eloquent models with relationships
Status: Completed
- 6.1 Create TeamMember model with role relationship
- 6.2 Create Project model with status, type relationships, casts for forecasted_effort JSON
- 6.3 Create Allocation model with project, team_member relationships
- 6.4 Create Actual model with project, team_member relationships
- 6.5 Create Role, ProjectStatus, ProjectType models
- 6.6 Create Holiday, PTO models
- 6.7 Create User model with JWT authentication traits
- 6.8 Define model factories for testing (TeamMemberFactory, ProjectFactory, etc.)
7. UI Components ✓ (New - from p02-p05)
Goal: Create reusable UI component library
Status: Completed via p02-p05
- 7.1 Create Sidebar component with three states (expanded, collapsed, hidden)
- 7.2 Create TopBar component with breadcrumbs, month selector, user menu
- 7.3 Create AppLayout wrapper component
- 7.4 Create PageHeader component with title, description, actions
- 7.5 Create StatCard component with trend indicators
- 7.6 Create LoadingState component with skeleton patterns
- 7.7 Create EmptyState component
- 7.8 Create FilterBar component
- 7.9 Create DataTable component with TanStack Table integration
8. Page Structure ✓ (New - from p03-p05)
Goal: Create page structure and routes
Status: Completed via p03-p05
- 8.1 Create Dashboard page with KPI cards and quick actions
- 8.2 Create Team Members page with DataTable
- 8.3 Create Projects page with status badges
- 8.4 Create Allocations placeholder page
- 8.5 Create Actuals placeholder page
- 8.6 Create Reports placeholder pages (forecast, utilization, costs, variance, allocation)
- 8.7 Create Admin placeholder pages (settings, master-data)
- 8.8 Polish login page with centered layout
Capability 1: Authentication ✓ MOSTLY COMPLETE
Spec: specs/authentication/spec.md
Scenarios: 10
Status: Phase 1 & 2 complete (8/10 E2E tests passing). API docs generated via p00.
Phase 1: Write Pending Tests (RED) ✓
Goal: Create all failing tests from spec scenarios
Status: Tests written, 8/10 E2E passing
E2E Tests (Playwright)
- 1.1.1 E2E test: Successful login issues JWT tokens ✓
- 1.1.2 E2E test: Invalid credentials rejected ✓
- 1.1.3 E2E test: Missing email or password validation ✓
- 1.1.4 E2E test: Token refresh with valid refresh token (timing issue - redirects to /login)
- 1.1.5 E2E test: Token refresh with invalid/expired token rejected ✓
- 1.1.6 E2E test: Logout invalidates refresh token ✓
- 1.1.7 E2E test: Access protected route with valid token (timing issue - redirects to /login)
- 1.1.8 E2E test: Access protected route without token rejected ✓
- 1.1.9 E2E test: Access protected route with expired token rejected ✓
- 1.1.10 E2E test: Token auto-refresh on 401 response ✓
STATUS: 8/10 E2E tests passing (80%). Remaining failures are timing/race condition issues in auth state synchronization after page reload.
API Tests (Pest)
- 1.1.11 Write API test: POST /api/auth/login with valid credentials ✓
- 1.1.12 Write API test: POST /api/auth/login with invalid credentials ✓
- 1.1.13 Write API test: POST /api/auth/login with missing fields ✓
- 1.1.14 Write API test: POST /api/auth/refresh with valid token ✓
- 1.1.15 Write API test: POST /api/auth/refresh with invalid token ✓
- 1.1.16 Write API test: POST /api/auth/logout invalidates token ✓
- 1.1.17 Write API test: JWT middleware allows valid token ✓
- 1.1.18 Write API test: JWT middleware rejects missing token ✓
- 1.1.19 Write API test: JWT middleware rejects expired token ✓
- 1.1.20 Write API test: JWT token has correct claims and TTL ✓
Unit Tests (Backend)
- 1.1.21 Write unit test: JwtService generates valid tokens
- 1.1.22 Write unit test: JwtService validates tokens correctly
- 1.1.23 Write unit test: JwtService extracts claims from token
- 1.1.24 Write unit test: AuthController login validates input
- 1.1.25 Write unit test: AuthController logout clears Redis
Component Tests (Frontend)
- 1.1.26 Write component test: LoginForm renders with email/password fields ✓
- 1.1.27 Write component test: LoginForm validates required fields ✓
- 1.1.28 Write component test: LoginForm submits with credentials ✓
- 1.1.29 Write component test: LoginForm displays error on invalid login ✓
Unit Tests (Frontend)
- 1.1.30 Write unit test: auth store manages tokens ✓
- 1.1.31 Write unit test: auth store persists to localStorage ✓
- 1.1.32 Write unit test: API client adds Authorization header ✓
- 1.1.33 Write unit test: API client handles 401 with refresh ✓
Phase 2: Implement (GREEN) ✓
Goal: Enable tests one by one, write minimal code to pass
Status: Implementation complete
Backend Implementation
- 1.2.1 Enable test 1.1.11: Implement AuthController::login() - validate credentials, generate JWT
- 1.2.2 Enable test 1.1.12: Add credential validation error handling
- 1.2.3 Enable test 1.1.13: Add request validation (email, password required)
- 1.2.4 Enable test 1.1.14: Implement token refresh endpoint
- 1.2.5 Enable test 1.1.15: Add refresh token validation
- 1.2.6 Enable test 1.1.16: Implement logout with Redis token invalidation
- 1.2.7 Enable test 1.1.17-1.1.19: Implement JWT middleware
- 1.2.8 Enable test 1.1.20: Configure JWT TTL (60min access, 7day refresh)
Frontend Implementation
- 1.2.9 Enable test 1.1.1: Create login page with form
- 1.2.10 Enable test 1.1.2-1.1.3: Add form validation with Zod
- 1.2.11 Enable test 1.1.4-1.1.6: Implement auth API client methods
- 1.2.12 Enable test 1.1.7-1.1.9: Add protected route guards
- 1.2.13 Enable test 1.1.10: Implement token auto-refresh interceptor
Phase 3: Refactor ✓ COMPLETE
Goal: Clean code while keeping all tests green
Status: All refactoring tasks completed
-
1.3.1 Extract JwtService from AuthController ✓
- Created
app/Services/JwtService.phpwith all JWT-related functionality - Refactored
AuthControllerto use dependency injection - Added token validation and claims extraction methods
- Made TTL constants configurable via class constants
- Improved error message consistency in validation responses
- Created
-
1.3.2 Improve error message consistency ✓
- Added centralized ERROR_MESSAGES object in auth store
- Created
getErrorMessage()helper to map errors consistently - Improved error messages in AuthController responses
-
1.3.3 Optimize token generation performance ✓
- JwtService uses efficient base64url encoding methods
- Token ID generation uses
uniqid()with entropy - Redis operations are minimal and targeted
-
1.3.4 Refactor auth store for better state management ✓
- Implemented proper state machine with
AuthStatustype - Separated concerns:
userstore andauthstate store - Added derived stores:
isAuthenticated,isLoading,authError,userRole - Improved action functions with consistent error handling
- Added helper functions for role checking
- Implemented proper state machine with
-
1.3.5 Add loading states to login form ✓
- Login form already supported
isLoadingprop - Updated login page to use new derived stores (
$isLoading,$authError) - Added
clearAuthError()call before login attempt - Login button shows spinner and "Logging in..." text during auth
- Login form already supported
Phase 4: Document ✓
Goal: Generate API documentation
Status: Completed via p00
- 1.4.1 Add Scribe annotations to AuthController
- 1.4.2 Generate API documentation
- 1.4.3 Verify documentation accessible at /api/documentation
Capability 2: Team Member Management
Spec: specs/team-member-management/spec.md Scenarios: 8
Phase 1: Write Pending Tests (RED)
E2E Tests (Playwright)
- 2.1.1 Write E2E test: Create team member with valid data (test.fixme)
- 2.1.2 Write E2E test: Reject team member with invalid hourly rate (test.fixme)
- 2.1.3 Write E2E test: Reject team member with missing required fields (test.fixme)
- 2.1.4 Write E2E test: View all team members list (test.fixme)
- 2.1.5 Write E2E test: Filter active team members only (test.fixme)
- 2.1.6 Write E2E test: Update team member details (test.fixme)
- 2.1.7 Write E2E test: Deactivate team member preserves data (test.fixme)
- 2.1.8 Write E2E test: Cannot delete team member with allocations (test.fixme)
API Tests (Pest)
- 2.1.9 Write API test: POST /api/team-members creates member (->todo)
- 2.1.10 Write API test: Validate hourly_rate > 0 (->todo)
- 2.1.11 Write API test: Validate required fields (->todo)
- 2.1.12 Write API test: GET /api/team-members returns all members (->todo)
- 2.1.13 Write API test: Filter by active status (->todo)
- 2.1.14 Write API test: PUT /api/team-members/{id} updates member (->todo)
- 2.1.15 Write API test: Deactivate sets active=false (->todo)
- 2.1.16 Write API test: DELETE rejected if allocations exist (->todo)
Unit Tests (Backend)
- 2.1.17 Write unit test: TeamMember model validation (->todo)
- 2.1.18 Write unit test: TeamMemberPolicy authorization (->todo)
- 2.1.19 Write unit test: Cannot delete with allocations constraint (->todo)
Component Tests (Frontend)
- 2.1.20 Write component test: TeamMemberList displays data (skip)
- 2.1.21 Write component test: TeamMemberForm validation (skip)
- 2.1.22 Write component test: Active toggle works (skip)
Commit: test(team-member): Add pending tests for all scenarios
Phase 2: Implement (GREEN) ✓ COMPLETE
- 2.2.1 Enable tests 2.1.9-2.1.11: Implement TeamMemberController::store()
- 2.2.2 Enable tests 2.1.12-2.1.13: Implement TeamMemberController::index() with filters
- 2.2.3 Enable tests 2.1.14-2.1.15: Implement TeamMemberController::update()
- 2.2.4 Enable test 2.1.16: Implement delete constraint check
- 2.2.5 Enable tests 2.1.1-2.1.8: Create team members UI (list, form, filters)
Commits:
feat(team-member): Implement CRUD endpointsfeat(team-member): Add team member management UI
Phase 3: Refactor ✓ COMPLETE
- 2.3.1 Extract TeamMemberService from controller
- 2.3.2 Optimize list query with eager loading
- 2.3.3 Add currency formatting to hourly rate display
Commit: refactor(team-member): Extract service, optimize queries
Phase 4: Document ✓ COMPLETE
- 2.4.1 Add Scribe annotations to TeamMemberController
- 2.4.2 Generate API documentation
- 2.4.3 Verify all tests pass
Commit: docs(team-member): Update API documentation
Capability 3: Project Lifecycle Management
Spec: specs/project-lifecycle/spec.md Scenarios: 12
Phase 1: Write Pending Tests (RED) ✓ COMPLETE
E2E Tests (Playwright)
- 3.1.1 Write E2E test: Create project with unique code (test.fixme)
- 3.1.2 Write E2E test: Reject duplicate project code (test.fixme)
- 3.1.3 Write E2E test: Valid status transitions (test.fixme)
- 3.1.4 Write E2E test: Invalid status transitions rejected (test.fixme)
- 3.1.5 Write E2E test: Estimate approved requires approved_estimate > 0 (test.fixme)
- 3.1.6 Write E2E test: Workflow progression through all statuses (test.fixme)
- 3.1.7 Write E2E test: Estimate rework path (test.fixme)
- 3.1.8 Write E2E test: Project on hold preserves allocations (test.fixme)
- 3.1.9 Write E2E test: Cancelled project prevents new allocations (test.fixme)
- 3.1.10 Write E2E test: Set approved estimate (test.fixme)
- 3.1.11 Write E2E test: Update forecasted effort (test.fixme)
- 3.1.12 Write E2E test: Validate forecasted effort equals approved estimate (test.fixme)
API Tests (Pest)
- 3.1.13 Write API test: POST /api/projects creates project (->todo)
- 3.1.14 Write API test: Project code must be unique (->todo)
- 3.1.15 Write API test: Status transition validation (->todo)
- 3.1.16 Write API test: Estimate approved requires estimate value (->todo)
- 3.1.17 Write API test: Full workflow state machine (->todo)
- 3.1.18 Write API test: PUT /api/projects/{id}/status transitions (->todo)
- 3.1.19 Write API test: PUT /api/projects/{id}/estimate sets approved (->todo)
- 3.1.20 Write API test: PUT /api/projects/{id}/forecast updates effort (->todo)
- 3.1.21 Write API test: Validate forecasted sum equals approved (->todo)
Unit Tests (Backend)
- 3.1.22 Write unit test: Project status state machine (->todo)
- 3.1.23 Write unit test: ProjectPolicy ownership checks (->todo)
- 3.1.24 Write unit test: Forecasted effort validation (->todo)
Component Tests (Frontend)
- 3.1.25 Write component test: ProjectList displays with status (skip)
- 3.1.26 Write component test: ProjectForm with status dropdown (skip)
- 3.1.27 Write component test: Status transition UI (skip)
- 3.1.28 Write component test: Forecasted effort editor (skip)
Commit: test(project): Add pending tests for all lifecycle scenarios
Phase 2: Implement (GREEN) ✓ COMPLETE
- 3.2.1 Enable tests 3.1.13-3.1.14: Implement ProjectController::store()
- 3.2.2 Enable tests 3.1.15-3.1.18: Implement status state machine
- 3.2.3 Enable tests 3.1.19-3.1.21: Implement estimate and forecast endpoints
- 3.2.4 Enable tests 3.1.1-3.1.12: Create project management UI (30/30 E2E tests passing)
Commits:
feat(project): Implement project CRUD with unique code validationfeat(project): Add status state machine workflowfeat(project): Implement estimate and forecast managementfeat(project): Add project lifecycle UI
Phase 3: Refactor ✓ COMPLETE
- 3.3.1 Extract ProjectStatusService for state machine
- 3.3.2 Optimize project list query with status joins
- 3.3.3 Improve forecasted effort validation messages
Commit: refactor(project): Extract status service, optimize queries
Phase 4: Document ✓ COMPLETE
- 3.4.1 Add Scribe annotations to ProjectController
- 3.4.2 Generate API documentation
- 3.4.3 Verify all tests pass
Commit: docs(project): Update API documentation
Capability 4: Capacity Planning
Spec: specs/capacity-planning/spec.md Scenarios: 10
Phase 1: Write Pending Tests (RED)
E2E Tests (Playwright)
- 4.1.1 Write E2E test: Calculate capacity for full month (test.fixme)
- 4.1.2 Write E2E test: Calculate capacity with half-day availability (test.fixme)
- 4.1.3 Write E2E test: Calculate capacity with PTO (test.fixme)
- 4.1.4 Write E2E test: Calculate capacity with holidays (test.fixme)
- 4.1.5 Write E2E test: Calculate capacity with mixed availability (test.fixme)
- 4.1.6 Write E2E test: Calculate team capacity sum (test.fixme)
- 4.1.7 Write E2E test: Exclude inactive from team capacity (test.fixme)
- 4.1.8 Write E2E test: Calculate possible revenue (test.fixme)
- 4.1.9 Write E2E test: View capacity calendar (test.fixme)
- 4.1.10 Write E2E test: Edit availability in calendar (test.fixme)
API Tests (Pest)
- 4.1.11 Write API test: GET /api/capacity calculates individual (->todo)
- 4.1.12 Write API test: Capacity accounts for availability (->todo)
- 4.1.13 Write API test: Capacity subtracts PTO (->todo)
- 4.1.14 Write API test: Capacity subtracts holidays (->todo)
- 4.1.15 Write API test: GET /api/capacity/team sums active members (->todo)
- 4.1.16 Write API test: GET /api/capacity/revenue calculates possible (->todo)
- 4.1.17 Write API test: POST /api/holidays creates holiday (->todo)
- 4.1.18 Write API test: POST /api/ptos creates PTO request (->todo)
Unit Tests (Backend)
- 4.1.19 Write unit test: CapacityService calculates working days (->todo)
- 4.1.20 Write unit test: CapacityService applies availability (->todo)
- 4.1.21 Write unit test: CapacityService handles PTO (->todo)
- 4.1.22 Write unit test: CapacityService handles holidays (->todo)
- 4.1.23 Write unit test: CapacityService calculates revenue (->todo)
- 4.1.24 Write unit test: Redis caching for capacity (->todo)
Component Tests (Frontend)
- 4.1.25 Write component test: CapacityCalendar displays month (skip)
- 4.1.26 Write component test: Availability editor toggles values (skip)
- 4.1.27 Write component test: CapacitySummary shows totals (skip)
Commit: test(capacity): Add pending tests for all planning scenarios
Phase 2: Implement (GREEN)
- 4.2.1 Enable tests 4.1.19-4.1.24: Implement CapacityService
- 4.2.2 Enable tests 4.1.11-4.1.16: Implement capacity endpoints
- 4.2.3 Enable tests 4.1.17-4.1.18: Implement holiday and PTO endpoints
- 4.2.4 Enable tests 4.1.1-4.1.10: Create capacity planning UI
Commits:
feat(capacity): Implement capacity calculation servicefeat(capacity): Add capacity, holiday, and PTO endpointsfeat(capacity): Create capacity planning calendar UI
Phase 3: Refactor
- 4.3.1 Optimize capacity calculation with caching
- 4.3.2 Extract WorkingDaysCalculator utility
- 4.3.3 Improve calendar performance with virtualization
Commit: refactor(capacity): Optimize calculations, extract utilities
Phase 4: Document
- 4.4.1 Add Scribe annotations to capacity endpoints
- 4.4.2 Generate API documentation
- 4.4.3 Verify all tests pass
Commit: docs(capacity): Update API documentation
Capability 5: Resource Allocation
Spec: specs/resource-allocation/spec.md Scenarios: 10
Phase 1: Write Pending Tests (RED)
E2E Tests (Playwright)
- 5.1.1 Write E2E test: Allocate hours to project (test.fixme)
- 5.1.2 Write E2E test: Allocate zero hours (test.fixme)
- 5.1.3 Write E2E test: Reject negative hours (test.fixme)
- 5.1.4 Write E2E test: View allocation matrix (test.fixme)
- 5.1.5 Write E2E test: Show allocation totals (test.fixme)
- 5.1.6 Write E2E test: Show utilization percentage (test.fixme)
- 5.1.7 Write E2E test: Update allocated hours (test.fixme)
- 5.1.8 Write E2E test: Delete allocation (test.fixme)
- 5.1.9 Write E2E test: Bulk allocation operations (test.fixme)
- 5.1.10 Write E2E test: Navigate between months (test.fixme)
API Tests (Pest)
- 5.1.11 Write API test: POST /api/allocations creates allocation (->todo)
- 5.1.12 Write API test: Validate hours >= 0 (->todo)
- 5.1.13 Write API test: GET /api/allocations returns matrix (->todo)
- 5.1.14 Write API test: PUT /api/allocations/{id} updates (->todo)
- 5.1.15 Write API test: DELETE /api/allocations/{id} removes (->todo)
- 5.1.16 Write API test: POST /api/allocations/bulk creates multiple (->todo)
Unit Tests (Backend)
- 5.1.17 Write unit test: AllocationPolicy authorization (->todo)
- 5.1.18 Write unit test: Allocation validation service (->todo)
- 5.1.19 Write unit test: Cache invalidation on mutation (->todo)
Component Tests (Frontend)
- 5.1.20 Write component test: AllocationMatrix displays grid (skip)
- 5.1.21 Write component test: Inline editing updates values (skip)
- 5.1.22 Write component test: Totals calculate correctly (skip)
- 5.1.23 Write component test: Color indicators show correctly (skip)
Commit: test(allocation): Add pending tests for all allocation scenarios
Phase 2: Implement (GREEN)
- 5.2.1 Enable tests 5.1.17-5.1.19: Implement allocation validation service
- 5.2.2 Enable tests 5.1.11-5.1.16: Implement AllocationController
- 5.2.3 Enable tests 5.1.1-5.1.10: Create allocation matrix UI
Commits:
feat(allocation): Implement allocation validation servicefeat(allocation): Add allocation CRUD and bulk endpointsfeat(allocation): Create allocation matrix UI with inline editing
Phase 3: Refactor
- 5.3.1 Optimize matrix query with single aggregated query
- 5.3.2 Extract AllocationMatrixCalculator
- 5.3.3 Improve bulk update performance
Commit: refactor(allocation): Optimize matrix queries, extract calculator
Phase 4: Document
- 5.4.1 Add Scribe annotations to AllocationController
- 5.4.2 Generate API documentation
- 5.4.3 Verify all tests pass
Commit: docs(allocation): Update API documentation
Capability 6: Actuals Tracking
Spec: specs/actuals-tracking/spec.md Scenarios: 8
Phase 1: Write Pending Tests (RED)
E2E Tests (Playwright)
- 6.1.1 Write E2E test: Log hours for current month (test.fixme)
- 6.1.2 Write E2E test: Reject negative hours (test.fixme)
- 6.1.3 Write E2E test: Reject future month hours (test.fixme)
- 6.1.4 Write E2E test: Incremental weekly updates (test.fixme)
- 6.1.5 Write E2E test: Replace monthly total (test.fixme)
- 6.1.6 Write E2E test: View actuals matrix (test.fixme)
- 6.1.7 Write E2E test: Show actuals vs allocations (test.fixme)
- 6.1.8 Write E2E test: Reject hours to inactive projects (test.fixme)
API Tests (Pest)
- 6.1.9 Write API test: POST /api/actuals logs hours (->todo)
- 6.1.10 Write API test: Validate hours >= 0 (->todo)
- 6.1.11 Write API test: Reject future month (->todo)
- 6.1.12 Write API test: PUT /api/actuals/{id} updates (->todo)
- 6.1.13 Write API test: GET /api/actuals returns matrix (->todo)
- 6.1.14 Write API test: Reject inactive projects (->todo)
Unit Tests (Backend)
- 6.1.15 Write unit test: ActualPolicy developer-only access (->todo)
- 6.1.16 Write unit test: Month validation (->todo)
- 6.1.17 Write unit test: Project status validation (->todo)
Component Tests (Frontend)
- 6.1.18 Write component test: ActualsMatrix displays data (skip)
- 6.1.19 Write component test: Variance highlighting works (skip)
- 6.1.20 Write component test: Developer sees only own actuals (skip)
Commit: test(actuals): Add pending tests for all tracking scenarios
Phase 2: Implement (GREEN)
- 6.2.1 Enable tests 6.1.15-6.1.17: Implement ActualPolicy and validation
- 6.2.2 Enable tests 6.1.9-6.1.14: Implement ActualController
- 6.2.3 Enable tests 6.1.1-6.1.8: Create actuals tracking UI
Commits:
feat(actuals): Implement actuals validation and policiesfeat(actuals): Add actuals logging endpointsfeat(actuals): Create actuals tracking UI with variance display
Phase 3: Refactor
- 6.3.1 Extract ActualsValidationService
- 6.3.2 Optimize actuals aggregation queries
- 6.3.3 Improve variance calculation performance
Commit: refactor(actuals): Extract validation service, optimize queries
Phase 4: Document
- 6.4.1 Add Scribe annotations to ActualController
- 6.4.2 Generate API documentation
- 6.4.3 Verify all tests pass
Commit: docs(actuals): Update API documentation
Capability 7: Utilization Calculations
Spec: specs/utilization-calculations/spec.md Scenarios: 8
Phase 1: Write Pending Tests (RED)
E2E Tests (Playwright)
- 7.1.1 Write E2E test: Calculate running utilization YTD (test.fixme)
- 7.1.2 Write E2E test: Running utilization at start of year (test.fixme)
- 7.1.3 Write E2E test: Calculate overall utilization monthly (test.fixme)
- 7.1.4 Write E2E test: Full utilization 100% (test.fixme)
- 7.1.5 Write E2E test: Over-utilization >100% (test.fixme)
- 7.1.6 Write E2E test: Display utilization alongside capacity (test.fixme)
- 7.1.7 Write E2E test: Color-code utilization levels (test.fixme)
- 7.1.8 Write E2E test: Optimal utilization 80-100% green (test.fixme)
API Tests (Pest)
- 7.1.9 Write API test: GET /api/utilization/running calculates YTD (->todo)
- 7.1.10 Write API test: GET /api/utilization/overall calculates monthly (->todo)
- 7.1.11 Write API test: Utilization includes in allocation response (->todo)
Unit Tests (Backend)
- 7.1.12 Write unit test: UtilizationService calculates running (->todo)
- 7.1.13 Write unit test: UtilizationService calculates overall (->todo)
- 7.1.14 Write unit test: UtilizationService handles edge cases (->todo)
- 7.1.15 Write unit test: Color coding logic (->todo)
Component Tests (Frontend)
- 7.1.16 Write component test: UtilizationBadge shows percentage (skip)
- 7.1.17 Write component test: Color coding applies correctly (skip)
Commit: test(utilization): Add pending tests for all calculation scenarios
Phase 2: Implement (GREEN)
- 7.2.1 Enable tests 7.1.12-7.1.15: Implement UtilizationService
- 7.2.2 Enable tests 7.1.9-7.1.11: Add utilization to responses
- 7.2.3 Enable tests 7.1.1-7.1.8: Add utilization display UI
Commits:
feat(utilization): Implement utilization calculation servicefeat(utilization): Add utilization data to API responsesfeat(utilization): Add utilization display with color coding
Phase 3: Refactor
- 7.3.1 Optimize utilization calculations with caching
- 7.3.2 Extract UtilizationFormatter
- 7.3.3 Improve calculation performance for large datasets
Commit: refactor(utilization): Optimize calculations, extract formatter
Phase 4: Document
- 7.4.1 Add utilization to API response documentation
- 7.4.2 Verify all tests pass
Commit: docs(utilization): Document utilization calculations
Capability 8: Allocation Validation
Spec: specs/allocation-validation/spec.md Scenarios: 10
Phase 1: Write Pending Tests (RED)
E2E Tests (Playwright)
- 8.1.1 Write E2E test: Detect over-allocation RED indicator (test.fixme)
- 8.1.2 Write E2E test: Over-allocation threshold warning (test.fixme)
- 8.1.3 Write E2E test: Detect under-allocation YELLOW indicator (test.fixme)
- 8.1.4 Write E2E test: Under-allocation warning message (test.fixme)
- 8.1.5 Write E2E test: Display optimal allocation GREEN (test.fixme)
- 8.1.6 Write E2E test: Within tolerance GREEN (test.fixme)
- 8.1.7 Write E2E test: Person under capacity no warning (test.fixme)
- 8.1.8 Write E2E test: Person at capacity optimal (test.fixme)
- 8.1.9 Write E2E test: Person over capacity RED warning (test.fixme)
- 8.1.10 Write E2E test: Person over capacity blocks save (test.fixme)
API Tests (Pest)
- 8.1.11 Write API test: Validation detects over-allocation (->todo)
- 8.1.12 Write API test: Validation detects under-allocation (->todo)
- 8.1.13 Write API test: Validation allows within tolerance (->todo)
- 8.1.14 Write API test: Validation blocks person over capacity (->todo)
Unit Tests (Backend)
- 8.1.15 Write unit test: AllocationValidationService detects over (->todo)
- 8.1.16 Write unit test: AllocationValidationService detects under (->todo)
- 8.1.17 Write unit test: Tolerance calculation (5%) (->todo)
- 8.1.18 Write unit test: Person capacity validation (->todo)
Component Tests (Frontend)
- 8.1.19 Write component test: Validation indicators display (skip)
- 8.1.20 Write component test: Warning messages show correctly (skip)
Commit: test(validation): Add pending tests for all validation scenarios
Phase 2: Implement (GREEN)
- 8.2.1 Enable tests 8.1.15-8.1.18: Implement AllocationValidationService
- 8.2.2 Enable tests 8.1.11-8.1.14: Add validation to allocation endpoints
- 8.2.3 Enable tests 8.1.1-8.1.10: Add validation indicators to UI
Commits:
feat(validation): Implement allocation validation servicefeat(validation): Add validation to allocation endpointsfeat(validation): Add validation indicators to allocation UI
Phase 3: Refactor
- 8.3.1 Extract ValidationResult object
- 8.3.2 Optimize validation queries
- 8.3.3 Improve error message formatting
Commit: refactor(validation): Extract result object, optimize queries
Phase 4: Document
- 8.4.1 Document validation rules in API docs
- 8.4.2 Verify all tests pass
Commit: docs(validation): Document allocation validation rules
Capability 9: Role-Based Access Control
Spec: specs/role-based-access/spec.md Scenarios: 12
Phase 1: Write Pending Tests (RED)
E2E Tests (Playwright)
- 9.1.1 Write E2E test: Superuser full access (test.fixme)
- 9.1.2 Write E2E test: Manager creates own project (test.fixme)
- 9.1.3 Write E2E test: Manager views all projects read-only (test.fixme)
- 9.1.4 Write E2E test: Manager allocates own team member (test.fixme)
- 9.1.5 Write E2E test: Manager cannot allocate other team (test.fixme)
- 9.1.6 Write E2E test: Manager approves own estimate (test.fixme)
- 9.1.7 Write E2E test: Developer views own allocations (test.fixme)
- 9.1.8 Write E2E test: Developer logs own hours (test.fixme)
- 9.1.9 Write E2E test: Developer cannot log others hours (test.fixme)
- 9.1.10 Write E2E test: Top Brass views all reports (test.fixme)
- 9.1.11 Write E2E test: Top Brass read-only access (test.fixme)
- 9.1.12 Write E2E test: Unauthorized access rejected (test.fixme)
API Tests (Pest)
- 9.1.13 Write API test: Superuser bypasses all checks (->todo)
- 9.1.14 Write API test: Manager policy allows own project (->todo)
- 9.1.15 Write API test: Manager policy denies other project edit (->todo)
- 9.1.16 Write API test: Manager policy allows own team allocation (->todo)
- 9.1.17 Write API test: Developer policy allows own actuals (->todo)
- 9.1.18 Write API test: Developer policy denies others actuals (->todo)
- 9.1.19 Write API test: Top Brass policy allows read all (->todo)
- 9.1.20 Write API test: JWT middleware rejects invalid token (->todo)
Unit Tests (Backend)
- 9.1.21 Write unit test: TeamMemberPolicy all scenarios (->todo)
- 9.1.22 Write unit test: ProjectPolicy all scenarios (->todo)
- 9.1.23 Write unit test: AllocationPolicy all scenarios (->todo)
- 9.1.24 Write unit test: ActualPolicy all scenarios (->todo)
Component Tests (Frontend)
- 9.1.25 Write component test: UI hides elements by role (skip)
- 9.1.26 Write component test: Read-only mode for Top Brass (skip)
Commit: test(rbac): Add pending tests for all access control scenarios
Phase 2: Implement (GREEN)
- 9.2.1 Enable tests 9.1.21-9.1.24: Implement all policies
- 9.2.2 Enable tests 9.1.13-9.1.20: Add middleware and authorization
- 9.2.3 Enable tests 9.1.1-9.1.12: Add role-based UI guards
Commits:
feat(rbac): Implement TeamMember, Project, Allocation, Actual policiesfeat(rbac): Add role middleware and authorization checksfeat(rbac): Add role-based UI guards and visibility
Phase 3: Refactor
- 9.3.1 Extract common authorization logic to base policy
- 9.3.2 Optimize policy checks with caching
- 9.3.3 Improve error messages for forbidden actions
Commit: refactor(rbac): Extract base policy, optimize checks
Phase 4: Document
- 9.4.1 Document RBAC rules in API docs
- 9.4.2 Create RBAC matrix documentation
- 9.4.3 Verify all tests pass
Commit: docs(rbac): Document role-based access control
Capability 10: Master Data Management
Spec: specs/master-data-management/spec.md Scenarios: 12
Phase 1: Write Pending Tests (RED)
E2E Tests (Playwright)
- 10.1.1 Write E2E test: Superuser creates role (test.fixme)
- 10.1.2 Write E2E test: Superuser updates role (test.fixme)
- 10.1.3 Write E2E test: Cannot delete role in use (test.fixme)
- 10.1.4 Write E2E test: Superuser creates custom status (test.fixme)
- 10.1.5 Write E2E test: Set status billable flag (test.fixme)
- 10.1.6 Write E2E test: Reorder statuses (test.fixme)
- 10.1.7 Write E2E test: Superuser creates project type (test.fixme)
- 10.1.8 Write E2E test: Set type billable flag (test.fixme)
- 10.1.9 Write E2E test: View roles list (test.fixme)
- 10.1.10 Write E2E test: View statuses list (test.fixme)
- 10.1.11 Write E2E test: View types list (test.fixme)
- 10.1.12 Write E2E test: Non-superuser denied access (test.fixme)
API Tests (Pest)
- 10.1.13 Write API test: POST /api/roles creates role (->todo)
- 10.1.14 Write API test: PUT /api/roles/{id} updates (->todo)
- 10.1.15 Write API test: DELETE /api/roles/{id} rejected if in use (->todo)
- 10.1.16 Write API test: POST /api/project-statuses creates (->todo)
- 10.1.17 Write API test: PUT /api/project-statuses/{id}/order reorders (->todo)
- 10.1.18 Write API test: POST /api/project-types creates (->todo)
- 10.1.19 Write API test: Superuser only access (->todo)
Unit Tests (Backend)
- 10.1.20 Write unit test: Role deletion constraint (->todo)
- 10.1.21 Write unit test: Status ordering logic (->todo)
- 10.1.22 Write unit test: Master data caching (->todo)
Component Tests (Frontend)
- 10.1.23 Write component test: MasterDataList displays (skip)
- 10.1.24 Write component test: Reorder drag-and-drop (skip)
Commit: test(master-data): Add pending tests for all management scenarios
Phase 2: Implement (GREEN)
- 10.2.1 Enable tests 10.1.20-10.1.22: Implement validation and caching
- 10.2.2 Enable tests 10.1.13-10.1.19: Implement MasterDataController
- 10.2.3 Enable tests 10.1.1-10.1.12: Create master data management UI
Commits:
feat(master-data): Implement master data validation and cachingfeat(master-data): Add roles, statuses, types management endpointsfeat(master-data): Create master data management UI
Phase 3: Refactor
- 10.3.1 Extract MasterDataService
- 10.3.2 Optimize master data caching strategy
- 10.3.3 Improve reordering performance
Commit: refactor(master-data): Extract service, optimize caching
Phase 4: Document
- 10.4.1 Add Scribe annotations to MasterDataController
- 10.4.2 Generate API documentation
- 10.4.3 Verify all tests pass
Commit: docs(master-data): Update API documentation
Capability 11: Forecast Reporting
Spec: specs/forecast-reporting/spec.md Scenarios: 8
Phase 1: Write Pending Tests (RED)
E2E Tests (Playwright)
- 11.1.1 Write E2E test: View 3-month forecast (test.fixme)
- 11.1.2 Write E2E test: Forecast includes variance indicators (test.fixme)
- 11.1.3 Write E2E test: Filter forecast by project status (test.fixme)
- 11.1.4 Write E2E test: Filter forecast by project type (test.fixme)
- 11.1.5 Write E2E test: Filter forecast by team member (test.fixme)
- 11.1.6 Write E2E test: Filter forecast by role (test.fixme)
- 11.1.7 Write E2E test: Calculate monthly revenue forecast (test.fixme)
- 11.1.8 Write E2E test: Calculate total period revenue (test.fixme)
API Tests (Pest)
- 11.1.9 Write API test: GET /api/reports/forecast returns data (->todo)
- 11.1.10 Write API test: Filter by project status (->todo)
- 11.1.11 Write API test: Filter by project type (->todo)
- 11.1.12 Write API test: Filter by team member (->todo)
- 11.1.13 Write API test: Revenue calculation correct (->todo)
- 11.1.14 Write API test: Redis caching works (->todo)
Unit Tests (Backend)
- 11.1.15 Write unit test: ForecastReportService aggregates (->todo)
- 11.1.16 Write unit test: Revenue calculation (->todo)
- 11.1.17 Write unit test: Variance indicators (->todo)
Component Tests (Frontend)
- 11.1.18 Write component test: ForecastTable displays (skip)
- 11.1.19 Write component test: Revenue chart renders (skip)
- 11.1.20 Write component test: Filters work correctly (skip)
Commit: test(forecast): Add pending tests for all reporting scenarios
Phase 2: Implement (GREEN)
- 11.2.1 Enable tests 11.1.15-11.1.17: Implement ForecastReportService
- 11.2.2 Enable tests 11.1.9-11.1.14: Implement forecast endpoint
- 11.2.3 Enable tests 11.1.1-11.1.8: Create forecast report UI
Commits:
feat(forecast): Implement forecast report servicefeat(forecast): Add forecast report endpoint with cachingfeat(forecast): Create forecast report UI with charts
Phase 3: Refactor
- 11.3.1 Optimize forecast query performance
- 11.3.2 Extract ForecastCalculator
- 11.3.3 Improve chart rendering performance
Commit: refactor(forecast): Optimize queries, extract calculator
Phase 4: Document
- 11.4.1 Add Scribe annotations to ReportController
- 11.4.2 Generate API documentation
- 11.4.3 Verify all tests pass
Commit: docs(forecast): Update API documentation
Capability 12: Utilization Reporting
Spec: specs/utilization-reporting/spec.md Scenarios: 8
Phase 1: Write Pending Tests (RED)
E2E Tests (Playwright)
- 12.1.1 Write E2E test: View team utilization report (test.fixme)
- 12.1.2 Write E2E test: Utilization trend visualization (test.fixme)
- 12.1.3 Write E2E test: Filter utilization by team member (test.fixme)
- 12.1.4 Write E2E test: Filter utilization by role (test.fixme)
- 12.1.5 Write E2E test: Compare planned vs actual utilization (test.fixme)
- 12.1.6 Write E2E test: Utilization variance report (test.fixme)
- 12.1.7 Write E2E test: Over-delivery variance (test.fixme)
- 12.1.8 Write E2E test: Utilization distribution chart (test.fixme)
API Tests (Pest)
- 12.1.9 Write API test: GET /api/reports/utilization returns data (->todo)
- 12.1.10 Write API test: Filter by team member (->todo)
- 12.1.11 Write API test: Filter by role (->todo)
- 12.1.12 Write API test: Planned vs actual comparison (->todo)
- 12.1.13 Write API test: Redis caching works (->todo)
Unit Tests (Backend)
- 12.1.14 Write unit test: UtilizationReportService aggregates (->todo)
- 12.1.15 Write unit test: Trend calculation (->todo)
- 12.1.16 Write unit test: Distribution calculation (->todo)
Component Tests (Frontend)
- 12.1.17 Write component test: UtilizationTable displays (skip)
- 12.1.18 Write component test: Trend chart renders (skip)
- 12.1.19 Write component test: Distribution chart renders (skip)
Commit: test(utilization-report): Add pending tests for all reporting scenarios
Phase 2: Implement (GREEN)
- 12.2.1 Enable tests 12.1.14-12.1.16: Implement UtilizationReportService
- 12.2.2 Enable tests 12.1.9-12.1.13: Implement utilization endpoint
- 12.2.3 Enable tests 12.1.1-12.1.8: Create utilization report UI
Commits:
feat(utilization-report): Implement utilization report servicefeat(utilization-report): Add utilization report endpointfeat(utilization-report): Create utilization report UI with charts
Phase 3: Refactor
- 12.3.1 Optimize utilization aggregation queries
- 12.3.2 Extract UtilizationTrendCalculator
- 12.3.3 Improve chart interactivity
Commit: refactor(utilization-report): Optimize queries, extract calculator
Phase 4: Document
- 12.4.1 Document utilization report endpoint
- 12.4.2 Verify all tests pass
Commit: docs(utilization-report): Update API documentation
Capability 13: Cost Reporting
Spec: specs/cost-reporting/spec.md Scenarios: 8
Phase 1: Write Pending Tests (RED)
E2E Tests (Playwright)
- 13.1.1 Write E2E test: View monthly cost report (test.fixme)
- 13.1.2 Write E2E test: Cost breakdown by project (test.fixme)
- 13.1.3 Write E2E test: Filter cost by project type (test.fixme)
- 13.1.4 Write E2E test: Group cost by client (test.fixme)
- 13.1.5 Write E2E test: Cost report for team member (test.fixme)
- 13.1.6 Write E2E test: Cost report for role (test.fixme)
- 13.1.7 Write E2E test: Calculate possible revenue (test.fixme)
- 13.1.8 Write E2E test: Calculate revenue gap (test.fixme)
API Tests (Pest)
- 13.1.9 Write API test: GET /api/reports/cost returns data (->todo)
- 13.1.10 Write API test: Filter by project type (->todo)
- 13.1.11 Write API test: Group by client (->todo)
- 13.1.12 Write API test: Calculate possible revenue (->todo)
- 13.1.13 Write API test: Calculate revenue gap (->todo)
- 13.1.14 Write API test: Redis caching works (->todo)
Unit Tests (Backend)
- 13.1.15 Write unit test: CostReportService aggregates (->todo)
- 13.1.16 Write unit test: Possible revenue calculation (->todo)
- 13.1.17 Write unit test: Revenue gap calculation (->todo)
Component Tests (Frontend)
- 13.1.18 Write component test: CostTable displays (skip)
- 13.1.19 Write component test: Revenue chart renders (skip)
- 13.1.20 Write component test: Gap analysis displays (skip)
Commit: test(cost): Add pending tests for all reporting scenarios
Phase 2: Implement (GREEN)
- 13.2.1 Enable tests 13.1.15-13.1.17: Implement CostReportService
- 13.2.2 Enable tests 13.1.9-13.1.14: Implement cost endpoint
- 13.2.3 Enable tests 13.1.1-13.1.8: Create cost report UI
Commits:
feat(cost): Implement cost report servicefeat(cost): Add cost report endpointfeat(cost): Create cost report UI with gap analysis
Phase 3: Refactor
- 13.3.1 Optimize cost aggregation queries
- 13.3.2 Extract RevenueCalculator
- 13.3.3 Improve gap visualization
Commit: refactor(cost): Optimize queries, extract calculator
Phase 4: Document
- 13.4.1 Document cost report endpoint
- 13.4.2 Verify all tests pass
Commit: docs(cost): Update API documentation
Capability 14: Allocation Reporting
Spec: specs/allocation-reporting/spec.md Scenarios: 8
Phase 1: Write Pending Tests (RED)
E2E Tests (Playwright)
- 14.1.1 Write E2E test: View allocation report for month (test.fixme)
- 14.1.2 Write E2E test: Allocation report with totals (test.fixme)
- 14.1.3 Write E2E test: Show utilization percentages (test.fixme)
- 14.1.4 Write E2E test: Show project allocation percentage (test.fixme)
- 14.1.5 Write E2E test: Filter allocation by team member (test.fixme)
- 14.1.6 Write E2E test: Filter allocation by role (test.fixme)
- 14.1.7 Write E2E test: Filter allocation by project status (test.fixme)
- 14.1.8 Write E2E test: Multi-month view option (test.fixme)
API Tests (Pest)
- 14.1.9 Write API test: GET /api/reports/allocation returns matrix (->todo)
- 14.1.10 Write API test: Include utilization percentages (->todo)
- 14.1.11 Write API test: Filter by team (->todo)
- 14.1.12 Write API test: Filter by project status (->todo)
- 14.1.13 Write API test: Multi-month aggregation (->todo)
- 14.1.14 Write API test: Redis caching works (->todo)
Unit Tests (Backend)
- 14.1.15 Write unit test: AllocationReportService aggregates (->todo)
- 14.1.16 Write unit test: Matrix formatting (->todo)
- 14.1.17 Write unit test: Multi-month calculation (->todo)
Component Tests (Frontend)
- 14.1.18 Write component test: AllocationReportTable displays (skip)
- 14.1.19 Write component test: Totals calculate correctly (skip)
- 14.1.20 Write component test: Multi-month toggle works (skip)
Commit: test(allocation-report): Add pending tests for all reporting scenarios
Phase 2: Implement (GREEN)
- 14.2.1 Enable tests 14.1.15-14.1.17: Implement AllocationReportService
- 14.2.2 Enable tests 14.1.9-14.1.14: Implement allocation report endpoint
- 14.2.3 Enable tests 14.1.1-14.1.8: Create allocation report UI
Commits:
feat(allocation-report): Implement allocation report servicefeat(allocation-report): Add allocation report endpointfeat(allocation-report): Create allocation report UI
Phase 3: Refactor
- 14.3.1 Optimize matrix generation queries
- 14.3.2 Extract AllocationMatrixFormatter
- 14.3.3 Improve multi-month view performance
Commit: refactor(allocation-report): Optimize queries, extract formatter
Phase 4: Document
- 14.4.1 Document allocation report endpoint
- 14.4.2 Verify all tests pass
Commit: docs(allocation-report): Update API documentation
Capability 15: Variance Reporting
Spec: specs/variance-reporting/spec.md Scenarios: 8
Phase 1: Write Pending Tests (RED)
E2E Tests (Playwright)
- 15.1.1 Write E2E test: View monthly variance report (test.fixme)
- 15.1.2 Write E2E test: Positive variance over-delivery (test.fixme)
- 15.1.3 Write E2E test: Negative variance under-delivery (test.fixme)
- 15.1.4 Write E2E test: Project variance summary (test.fixme)
- 15.1.5 Write E2E test: Person variance summary (test.fixme)
- 15.1.6 Write E2E test: Consistent over-delivery pattern (test.fixme)
- 15.1.7 Write E2E test: Filter variance by date range (test.fixme)
- 15.1.8 Write E2E test: Filter variance by project (test.fixme)
API Tests (Pest)
- 15.1.9 Write API test: GET /api/reports/variance returns data (->todo)
- 15.1.10 Write API test: Calculate variance correctly (->todo)
- 15.1.11 Write API test: Flag over-delivery patterns (->todo)
- 15.1.12 Write API test: Filter by date range (->todo)
- 15.1.13 Write API test: Filter by project (->todo)
- 15.1.14 Write API test: Redis caching works (->todo)
Unit Tests (Backend)
- 15.1.15 Write unit test: VarianceReportService calculates (->todo)
- 15.1.16 Write unit test: Pattern detection (->todo)
- 15.1.17 Write unit test: Aggregation by project/person (->todo)
Component Tests (Frontend)
- 15.1.18 Write component test: VarianceTable displays (skip)
- 15.1.19 Write component test: Color coding works (skip)
- 15.1.20 Write component test: Trend chart renders (skip)
Commit: test(variance): Add pending tests for all reporting scenarios
Phase 2: Implement (GREEN)
- 15.2.1 Enable tests 15.1.15-15.1.17: Implement VarianceReportService
- 15.2.2 Enable tests 15.1.9-15.1.14: Implement variance endpoint
- 15.2.3 Enable tests 15.1.1-15.1.8: Create variance report UI
Commits:
feat(variance): Implement variance report servicefeat(variance): Add variance report endpointfeat(variance): Create variance report UI with pattern detection
Phase 3: Refactor
- 15.3.1 Optimize variance calculation queries
- 15.3.2 Extract VarianceCalculator
- 15.3.3 Improve pattern detection algorithm
Commit: refactor(variance): Optimize queries, extract calculator
Phase 4: Document
- 15.4.1 Document variance report endpoint
- 15.4.2 Verify all tests pass
Commit: docs(variance): Update API documentation
Final Phase: Polish & Documentation
16. API Documentation (Backend)
- 16.1 Add Scribe annotations to all controllers (verify complete)
- 16.2 Configure Scribe (scribe.php config file)
- 16.3 Generate API documentation (php artisan scribe:generate)
- 16.4 Verify SwaggerUI accessible at /api/documentation
- 16.5 Add example requests and responses to documentation
- 16.6 Add authentication section to API docs
Commit: docs(api): Complete API documentation
17. Testing & Code Quality
- 17.1 Run full test suite (unit + feature + E2E) - all must pass
- 17.2 Generate code coverage report (verify >70%)
- 17.3 Run PHPStan static analysis (level 5+)
- 17.4 Run Laravel Pint and fix all issues
- 17.5 Run ESLint and fix all issues
- 17.6 Run Prettier formatting
- 17.7 Configure pre-commit hooks (husky + lint-staged)
- 17.8 Run security audit (composer audit, npm audit)
- 17.9 Fix all security vulnerabilities
Commits:
chore(quality): Fix linting and static analysis issueschore(quality): Configure pre-commit hookschore(security): Fix audit vulnerabilities
18. Polish & UX
- 18.1 Add loading states (spinners, skeleton loaders)
- 18.2 Add error states (toast notifications, error pages)
- 18.3 Add empty states (no data placeholders)
- 18.4 Implement form validation feedback (inline errors, success messages)
- 18.5 Add confirmation modals for destructive actions (delete)
- 18.6 Implement responsive design (mobile-friendly tables, navigation)
- 18.7 Add keyboard shortcuts (ESC to close modals, etc.)
- 18.8 Add accessibility features (ARIA labels, focus management)
- 18.9 Test in multiple browsers (Chrome, Firefox, Safari)
Commits:
feat(ui): Add loading and error statesfeat(ui): Add responsive designfeat(ui): Add accessibility improvements
19. Documentation & Deployment
- 19.1 Write README.md with setup instructions
- 19.2 Document environment variables (.env.example files)
- 19.3 Create Quick Start guide for managers (capacity → allocate → reports)
- 19.4 Document API authentication flow
- 19.5 Create deployment guide (Docker Compose production setup)
- 19.6 Add health check endpoints (/api/health)
- 19.7 Configure logging (Laravel logs to stdout, Svelte client errors to console)
- 19.8 Test full deployment workflow (fresh Docker Compose up)
- 19.9 Create superuser via seeder for initial login
- 19.10 Verify Nginx Proxy Manager routing
Commits:
docs: Add README and setup instructionsdocs: Add deployment guidefeat(ops): Add health check endpoints
20. Final Verification
- 20.1 Run full test suite (unit + feature + E2E) and verify all pass
- 20.2 Verify code coverage >70%
- 20.3 Run linters and fix all issues
- 20.4 Test complete user flow: capacity → allocate → log actuals → reports
- 20.5 Verify RBAC working for all 4 personas
- 20.6 Verify Redis caching working (check cache hit rate)
- 20.7 Verify API documentation accessible and accurate
- 20.8 Verify Docker Compose startup works cleanly
- 20.9 Verify database migrations and seeders work
- 20.10 Conduct final security review (no secrets in code, HTTPS enforced)
Commit: chore: Final verification complete
Summary
Total Capabilities: 15
Total Scenarios: ~100
Total Tasks: ~650 (reorganized from 328)
Test Coverage by Type:
- E2E Tests (Playwright): ~120 tests (8 per capability avg)
- API Tests (Pest): ~150 tests (10 per capability avg)
- Unit Tests (Backend): ~150 tests (10 per capability avg)
- Component Tests (Frontend): ~60 tests (4 per capability avg)
- Unit Tests (Frontend): ~120 tests (8 per capability avg)
SDD + TDD Workflow Applied:
Each capability follows the 4-phase cycle:
- RED: Write all pending tests from spec scenarios
- GREEN: Enable tests one by one, implement minimal code
- REFACTOR: Clean code while tests stay green
- DOCUMENT: Generate API docs, verify coverage
Commit Message Convention:
test(<capability>): Add pending tests for...feat(<capability>): Implement...refactor(<capability>): ...docs(<capability>): ...