php-framework/TODO.md
Clotho 742e53a9e3 docs(#2): add phase 0 assessment findings and TODO
- Add comprehensive FINDINGS.md documenting:
  - Environment assessment (PHP 8.3.6, missing extensions)
  - Test suite results (197 tests passing, 11.6% coverage)
  - Code quality analysis (Pint , PHPStan Level 1 )
  - Architecture patterns (event-driven, frontages, L1 packages)
  - Test coverage gaps by package
  - Security observations and risks
  - Dependency concerns (PHP version mismatch with psalm)

- Add detailed TODO.md with phased improvement plan:
  - Phase 1: Fix failing tests  COMPLETE
  - Phase 2: Increase coverage to 80%+ (446 hours)
  - Phase 3: Increase PHPStan to level 6+ (73 hours)
  - Phase 4: Security review (113 hours)
  - Total effort: 632 hours (~16 weeks)

All tests passing (197/197), zero lint issues, zero static analysis
errors at current configuration. Critical gaps identified in CDN,
Media, SEO, Storage, and Config packages.

Co-Authored-By: Clotho <clotho@lthn.ai>
2026-02-20 02:02:26 +00:00

551 lines
13 KiB
Markdown

# TODO: Core PHP Framework Quality Improvement Plan
**Repository**: core/php-framework
**Branch**: dev
**Assessment Date**: 2026-02-20
**Agent**: Clotho
## Executive Summary
The framework is in **good baseline health**:
- ✅ All 197 tests pass
- ✅ Zero lint issues (Pint)
- ✅ Zero static analysis errors (PHPStan Level 1)
- ⚠️ Test coverage: 11.6% (63 test files / 542 PHP files)
- ⚠️ PHPStan running at Level 1 (lowest)
## Phase 1: Fix Failing Tests
**Status**: ✅ COMPLETE
All 197 tests pass successfully:
- 197 tests, 393 assertions
- No failures, no errors
- 1 PHPUnit warning (code coverage driver not available)
**Action Items**: None required - all tests passing.
---
## Phase 2: Increase Coverage to 80%+
**Current Coverage**: 11.6% (63/542 files)
**Target Coverage**: 80% (434 files need tests)
**Priority**: High
### Phase 2A: Critical Business Packages (Priority 1)
These packages are business-critical and require immediate test coverage:
#### 2A.1 CDN Package (20 files, 0% coverage)
**Impact**: Infrastructure for asset delivery
**Files**:
- \`src/Core/Cdn/Services/BunnyCdnService.php\`
- \`src/Core/Cdn/Services/FluxCdnService.php\`
- \`src/Core/Cdn/Services/StorageOffload.php\`
- \`src/Core/Cdn/Console/\` (4 commands)
- \`src/Core/Cdn/Middleware/\` (2 middleware)
**Test Types Needed**:
- Unit tests for services
- Integration tests for storage offload
- Feature tests for console commands
- HTTP tests for middleware
**Estimated Effort**: 40 hours
**Files to Create**: \`src/Core/Cdn/Tests/Feature/\`, \`src/Core/Cdn/Tests/Unit/\`
---
#### 2A.2 Config System (36 files, 3% coverage)
**Impact**: Core configuration management
**Current**: 1 test file for 36 files
**Files**:
- \`src/Core/Config/Services/ConfigService.php\`
- \`src/Core/Config/Services/ConfigResolver.php\`
- \`src/Core/Config/Models/\` (4 models)
- \`src/Core/Config/Console/\` (8 commands)
**Test Types Needed**:
- Unit tests for ConfigService and ConfigResolver
- Model tests for ConfigKey, ConfigValue, ConfigProfile, ConfigVersion
- Feature tests for console commands
- Integration tests for config resolution
**Estimated Effort**: 60 hours
**Files to Create**: Expand \`src/Core/Config/Tests/\`
---
#### 2A.3 Media/Image Processing (23 files, 0% coverage)
**Impact**: Content handling and user uploads
**Files**:
- \`src/Core/Media/Image/ImageOptimizer.php\`
- \`src/Core/Media/Conversion/\` (5 files)
- \`src/Core/Media/Thumbnail/\` (4 files)
- \`src/Core/Media/Temp/\` (2 files)
**Test Types Needed**:
- Unit tests for image optimisation
- Integration tests for conversion pipeline
- Feature tests for thumbnail generation
- Unit tests for temporary file handling
**Estimated Effort**: 45 hours
**Files to Create**: \`src/Core/Media/Tests/Feature/\`, \`src/Core/Media/Tests/Unit/\`
---
#### 2A.4 SEO System (19 files, 0% coverage)
**Impact**: Business visibility and search rankings
**Files**:
- \`src/Core/Seo/OgImage/\` (4 files)
- \`src/Core/Seo/Schema/\` (5 files)
- \`src/Core/Seo/Sitemap/\` (3 files)
**Test Types Needed**:
- Unit tests for OG image generation
- Unit tests for schema validation
- Integration tests for sitemap generation
- HTTP tests for controllers
**Estimated Effort**: 35 hours
**Files to Create**: \`src/Core/Seo/Tests/Feature/\`, \`src/Core/Seo/Tests/Unit/\`
---
#### 2A.5 Storage/Caching (9 files, 0% coverage)
**Impact**: Performance and reliability
**Files**:
- \`src/Core/Storage/Cache/ResilientRedisStore.php\`
- \`src/Core/Storage/Cache/TieredCache.php\`
- \`src/Core/Storage/CircuitBreaker/\` (3 files)
**Test Types Needed**:
- Unit tests for resilient Redis store
- Integration tests for tiered caching
- Unit tests for circuit breaker pattern
- Performance tests for cache warming
**Estimated Effort**: 30 hours
**Files to Create**: \`src/Core/Storage/Tests/Feature/\`, \`src/Core/Storage/Tests/Unit/\`
---
### Phase 2B: Infrastructure Packages (Priority 2)
#### 2B.1 Activity Logging (8 files, 0% coverage)
**Impact**: Audit trail and compliance
**Estimated Effort**: 15 hours
#### 2B.2 Helpers (16 files, 0% coverage)
**Impact**: Widely used utility functions
**Estimated Effort**: 25 hours
#### 2B.3 Search (7 files, 0% coverage)
**Impact**: User-facing functionality
**Estimated Effort**: 15 hours
#### 2B.4 Language/Translation (15 files, 0% coverage)
**Impact**: i18n support
**Estimated Effort**: 20 hours
#### 2B.5 Events System (16 files, 0% coverage)
**Impact**: Core lifecycle events
**Estimated Effort**: 25 hours
---
### Phase 2C: Supporting Components (Priority 3)
#### 2C.1 Headers/Security (11 files, 0% coverage)
**Estimated Effort**: 18 hours
#### 2C.2 Console Commands (7 files, 0% coverage)
**Estimated Effort**: 12 hours
#### 2C.3 Database/Seeders (7 files, 0% coverage)
**Estimated Effort**: 12 hours
#### 2C.4 Mail System (5 files, 0% coverage)
**Estimated Effort**: 10 hours
#### 2C.5 Validation Rules (2 files, 0% coverage)
**Estimated Effort**: 5 hours
#### 2C.6 Encryption/Crypt (2 files, 0% coverage)
**Estimated Effort**: 5 hours
---
### Phase 2D: Improve Existing Coverage
#### 2D.1 Bouncer (14 files, 21% coverage)
**Current**: 3 test files
**Target**: 11 more test files
**Estimated Effort**: 20 hours
#### 2D.2 Front Package (266 files, 0.4% coverage)
**Note**: Many are Blade components that may not need unit tests
**Strategy**: Focus on feature tests for key flows
**Estimated Effort**: 40 hours (selective testing)
#### 2D.3 Input (2 files, 50% coverage)
**Current**: 1 test file
**Target**: 1 more test file
**Estimated Effort**: 2 hours
#### 2D.4 Service (9 files, 33% coverage)
**Current**: 3 test files
**Target**: 6 more test files
**Estimated Effort**: 12 hours
---
### Phase 2 Summary
**Total Estimated Effort**: 446 hours (~11 weeks at 40 hrs/week)
**Recommended Approach**:
1. Start with Phase 2A (critical packages) - 210 hours
2. Move to Phase 2B (infrastructure) - 100 hours
3. Complete Phase 2C (supporting) - 62 hours
4. Finish with Phase 2D (improve existing) - 74 hours
**Success Metrics**:
- Achieve 80%+ test coverage
- All critical business logic covered
- Integration tests for key workflows
- Performance tests for caching/optimisation
---
## Phase 3: Fix All PHPStan Errors
**Current Level**: 1 (lowest)
**Current Errors**: 0
**Target Level**: 6+ (recommended for production)
**Priority**: Medium
### Phase 3A: Gradually Increase PHPStan Level
#### 3A.1 Run PHPStan at Level 2
**Action**: Update \`phpstan.neon\` to \`level: 2\` and fix errors
**Estimated Errors**: 50-100 (typical for level increase)
**Estimated Effort**: 10 hours
#### 3A.2 Run PHPStan at Level 3
**Action**: Update to \`level: 3\` and fix errors
**Estimated Errors**: 30-60
**Estimated Effort**: 8 hours
#### 3A.3 Run PHPStan at Level 4
**Action**: Update to \`level: 4\` and fix errors
**Estimated Errors**: 20-40
**Estimated Effort**: 8 hours
#### 3A.4 Run PHPStan at Level 5
**Action**: Update to \`level: 5\` and fix errors
**Estimated Errors**: 15-30
**Estimated Effort**: 10 hours
#### 3A.5 Run PHPStan at Level 6+
**Action**: Update to \`level: 6\` or higher and fix errors
**Estimated Errors**: 10-25
**Estimated Effort**: 12 hours
---
### Phase 3B: Remove Ignored Error Categories
**Current Ignored Errors**:
\`\`\`
- '#Unsafe usage of new static#'
- '#env\\(\\).*outside of the config directory#'
- identifier: larastan.noEnvCallsOutsideOfConfig
- identifier: trait.unused
- identifier: class.notFound
- identifier: function.deprecated
- identifier: method.notFound
\`\`\`
**Action Items**:
1. Review each ignored category
2. Fix underlying issues
3. Remove from ignore list
4. Re-enable strict checking
**Estimated Effort**: 15 hours
---
### Phase 3C: Remove Excluded Paths
**Current Excluded Paths**:
\`\`\`
- src/Core/Activity
- src/Core/Config/Tests
- src/Core/Input/Tests
- src/Core/Tests
- src/Core/Bouncer/Tests
- src/Core/Bouncer/Gate/Tests
- src/Core/Service/Tests
- src/Core/Front/Tests
- src/Mod/Trees
\`\`\`
**Action**: Remove exclusions and fix errors in excluded paths
**Estimated Effort**: 10 hours
---
### Phase 3 Summary
**Total Estimated Effort**: 73 hours (~2 weeks)
**Recommended Approach**:
1. Complete Phase 2A (critical test coverage) first
2. Incrementally increase PHPStan levels
3. Fix errors at each level before proceeding
4. Remove ignored categories and exclusions last
**Success Metrics**:
- PHPStan Level 6+ with zero errors
- No ignored error categories
- No excluded paths
- Strict type checking enabled
---
## Phase 4: Security Review
**Priority**: High
**Prerequisites**: Phase 2A complete (critical packages tested)
### Phase 4A: Input Validation & Sanitisation
#### 4A.1 Review Input Handling
**Files to Review**:
- \`src/Core/Input/Sanitiser.php\` ✅ (has tests)
- All controllers and form requests
- API endpoints
**Security Checks**:
- XSS prevention
- SQL injection prevention
- Command injection prevention
- Path traversal prevention
- Mass assignment protection
**Estimated Effort**: 20 hours
---
#### 4A.2 Review File Upload Handling
**Files to Review**:
- \`src/Core/Media/\` (all file handling)
- Upload controllers
- Storage configuration
**Security Checks**:
- File type validation
- File size limits
- Malicious file detection
- Storage path security
- CDN upload security
**Estimated Effort**: 15 hours
---
### Phase 4B: Authentication & Authorisation
#### 4B.1 Review Bouncer/Gate System
**Files to Review**:
- \`src/Core/Bouncer/\` (all files)
- \`src/Core/Bouncer/Gate/\` (all files)
**Security Checks**:
- Authorisation logic correctness
- Privilege escalation prevention
- Session security
- CSRF protection
**Estimated Effort**: 15 hours
---
#### 4B.2 Review Authentication Flows
**Files to Review**:
- Login controllers
- Password reset flows
- API authentication
**Security Checks**:
- Brute force protection
- Password strength requirements
- Token expiration
- Multi-factor authentication support
**Estimated Effort**: 10 hours
---
### Phase 4C: Data Security
#### 4C.1 Review Encryption
**Files to Review**:
- \`src/Core/Crypt/\` (all files)
- Any encrypted data storage
**Security Checks**:
- Encryption algorithm strength
- Key management
- Secure random generation
- No hardcoded secrets
**Estimated Effort**: 8 hours
---
#### 4C.2 Review Data Exposure
**Files to Review**:
- API responses
- Error messages
- Log files
- Debug output
**Security Checks**:
- No sensitive data in logs
- No stack traces in production
- API response sanitisation
- Database query obfuscation
**Estimated Effort**: 12 hours
---
### Phase 4D: Infrastructure Security
#### 4D.1 Review Headers & CORS
**Files to Review**:
- \`src/Core/Headers/\` (all files)
- CORS middleware
- CSP configuration
**Security Checks**:
- Security headers present
- CSP properly configured
- CORS restrictions
- XSS protection headers
**Estimated Effort**: 8 hours
---
#### 4D.2 Review CDN Security
**Files to Review**:
- \`src/Core/Cdn/\` (all files)
**Security Checks**:
- Signed URLs for private assets
- Token validation
- Rate limiting
- Hotlink protection
**Estimated Effort**: 10 hours
---
### Phase 4E: Dependency Security
#### 4E.1 Review Composer Dependencies
**Action**: Run \`composer audit\` and review
**Files**: \`composer.json\`, \`composer.lock\`
**Security Checks**:
- Known vulnerabilities in dependencies
- Outdated packages
- Security advisories
- Roave security-advisories integration ✅ (already present)
**Estimated Effort**: 5 hours
---
#### 4E.2 Update Vulnerable Dependencies
**Action**: Update packages with known vulnerabilities
**Estimated Effort**: 10 hours
---
### Phase 4 Summary
**Total Estimated Effort**: 113 hours (~3 weeks)
**Recommended Approach**:
1. Start with Phase 4A (input validation) - critical
2. Move to Phase 4B (auth/authz) - high priority
3. Complete Phase 4C (data security)
4. Review Phase 4D (infrastructure)
5. Finish with Phase 4E (dependencies)
**Success Metrics**:
- All inputs validated and sanitised
- No authorisation bypasses
- Encryption properly implemented
- Security headers configured
- Zero high-severity vulnerabilities
- Security audit report created
---
## Phase 5: Performance Optimisation (Future)
**Priority**: Low
**Prerequisites**: Phases 1-4 complete
### Potential Areas:
- Cache optimisation (already has resilient Redis)
- Query optimisation
- Asset optimisation
- CDN configuration tuning
- Database indexing review
**Estimated Effort**: TBD (requires profiling first)
---
## Appendix: Reference Implementation
The **Trees Module** (\`src/Mod/Trees/\`) serves as an excellent reference for test implementation:
- **Coverage**: 47% (9 tests for 19 files)
- **Test Types**: Feature tests, API tests, queue tests, integration tests
- **Pattern**: Co-located tests in \`Tests/Feature/\` directory
- **Quality**: Well-structured, comprehensive assertions
**Recommendation**: Use Trees module as template when implementing tests for Core packages.
---
## Summary Timeline
| Phase | Effort | Duration | Priority |
|-------|--------|----------|----------|
| Phase 1 | 0 hrs | ✅ Complete | High |
| Phase 2A | 210 hrs | 5-6 weeks | High |
| Phase 2B | 100 hrs | 2-3 weeks | Medium |
| Phase 2C | 62 hrs | 1-2 weeks | Medium |
| Phase 2D | 74 hrs | 2 weeks | Low |
| Phase 3 | 73 hrs | 2 weeks | Medium |
| Phase 4 | 113 hrs | 3 weeks | High |
| **Total** | **632 hrs** | **~16 weeks** | - |
**Recommended Execution Order**:
1. Phase 2A (Critical coverage) - 6 weeks
2. Phase 4A-4B (Critical security) - 2 weeks
3. Phase 3 (PHPStan improvements) - 2 weeks
4. Phase 2B-2D (Complete coverage) - 5 weeks
5. Phase 4C-4E (Complete security) - 1 week
**Total Realistic Timeline**: ~16 weeks (4 months) with one full-time developer.