Phase 0 Assessment Summary: - Comprehensive codebase architecture review completed - 107 PHP files analysed across Core\Api and Core\Website\Api namespaces - Identified critical dependency blocker: host-uk/core package not found - Documented all architectural patterns, security features, and test coverage - Cannot run tests/lint/analysis until dependency resolved Key Findings: - ✅ Excellent architecture: event-driven, two-namespace design - ✅ Comprehensive test coverage: ~6,500 lines across 11 feature test files - ✅ Strong security: bcrypt hashing, IP whitelisting, HMAC-SHA256 webhooks - ✅ Production-ready rate limiting: sliding window with burst allowance - ✅ Sophisticated OpenAPI documentation: 819-line builder with attributes - ❌ BLOCKER: composer install fails (missing host-uk/core dependency) Deliverables: - FINDINGS.md: 15-section comprehensive assessment report - TODO-PHASE1.md: Dependency resolution roadmap with 7 tasks Architecture Highlights: - Event-driven boot system ($listens array pattern) - Immutable result objects (RateLimitResult) - IP restriction service (IPv4/IPv6/CIDR support) - Webhook delivery with exponential backoff - OpenAPI attribute-based documentation Test Coverage (cannot execute): - ApiKeySecurityTest (14.8 KB) - bcrypt, rotation, scopes - WebhookDeliveryTest (24.9 KB) - HMAC signatures, retries - RateLimitingTest (28.6 KB) - tier-based, burst allowance - ApiScopeEnforcementTest (29.8 KB) - wildcards, inheritance - OpenApiDocumentationComprehensiveTest (41.3 KB) - spec generation Next Steps (Phase 1): 1. Resolve host-uk/core dependency (path repo/private registry) 2. Add require-dev dependencies (Pest, Pint, PHPStan) 3. Run test suite and establish baseline 4. Document lint/static analysis results 5. Proceed to Phase 2 improvements Co-Authored-By: Clotho <clotho@lthn.ai>
5.8 KiB
Phase 1: Dependency Resolution + Test Baseline
Created: 20 February 2026 Agent: Clotho Related: Issue #1, FINDINGS.md
Critical Blocker: Missing Dependency
Issue
composer install fails because host-uk/core package cannot be found:
{
"require": {
"host-uk/core": "@dev" // ← NOT FOUND
}
}
Impact
- ❌ Cannot install vendor dependencies
- ❌ Cannot run tests (
vendor/bin/pest) - ❌ Cannot run linter (
vendor/bin/pint) - ❌ Cannot run static analysis (
vendor/bin/phpstan) - ❌ No development environment
Phase 1 Tasks
Task 1: Resolve host-uk/core Dependency
Priority: CRITICAL Estimated Time: 1-2 hours (depending on approach)
Choose ONE approach:
Option A: Path Repository (Monorepo)
If host-uk/core exists locally (e.g., ../core/):
-
Update
composer.json:{ "repositories": [ { "type": "path", "url": "../core" } ], "require": { "host-uk/core": "@dev" } } -
Run
composer install --no-interaction
Option B: Private Composer Registry
If using Satis or Private Packagist:
-
Update
composer.json:{ "repositories": [ { "type": "composer", "url": "https://composer.example.com/" } ] } -
Configure credentials if needed
-
Run
composer install --no-interaction
Option C: Symlink Development (Temporary)
- Clone
host-uk/coreto../core - Use Option A (path repository)
Acceptance Criteria:
- ✅
composer installcompletes successfully - ✅
vendor/directory created - ✅
composer.lockgenerated - ✅ No dependency errors
Task 2: Add Missing Dev Dependencies
Priority: HIGH Estimated Time: 15 minutes
Current composer.json is missing require-dev section.
Action:
Add to composer.json:
{
"require-dev": {
"pestphp/pest": "^2.0",
"pestphp/pest-plugin-laravel": "^2.0",
"laravel/pint": "^1.0",
"phpstan/phpstan": "^1.10",
"orchestra/testbench": "^9.0",
"mockery/mockery": "^1.6",
"nunomaduro/collision": "^8.0"
}
}
Then run:
composer update --no-interaction
Acceptance Criteria:
- ✅ All dev tools installed
- ✅
vendor/bin/pestavailable - ✅
vendor/bin/pintavailable - ✅
vendor/bin/phpstanavailable
Task 3: Establish Test Baseline
Priority: HIGH Estimated Time: 30 minutes
Once dependencies are resolved, run full test suite:
vendor/bin/pest --testdox
Expected Results (from FINDINGS.md):
- 11 feature test files
- ~50-70 test cases
- All tests passing (as of January 2026)
Document:
- Total tests run
- Pass/fail count
- Execution time
- Any failures (unexpected)
Output to: BASELINE-TESTS.md
Task 4: Establish Lint Baseline
Priority: MEDIUM Estimated Time: 15 minutes
Run code style checker:
vendor/bin/pint --test
Expected Results:
- 0 violations (code follows PSR-12)
- No formatting changes needed
If violations found:
vendor/bin/pint --dirty # Fix changed files only
Document:
- Violations found (if any)
- Files affected
- Auto-fix results
Output to: BASELINE-LINT.md
Task 5: Establish Static Analysis Baseline
Priority: MEDIUM Estimated Time: 30 minutes
Run PHPStan analysis:
vendor/bin/phpstan analyse --memory-limit=512M
Expected Issues (from TODO.md):
- Array shape types in resources
- Missing return types
- Property type declarations
Document:
- Current PHPStan level
- Total errors found
- Error categories
- Plan to reach Level 5
Output to: BASELINE-PHPSTAN.md
Task 6: Commit Baseline Files
Priority: HIGH Estimated Time: 15 minutes
Commit all baseline documentation:
git add composer.json composer.lock
git add BASELINE-*.md
git commit -m "chore: establish test, lint, and static analysis baselines (#1)
- Add require-dev dependencies (Pest, Pint, PHPStan)
- Run full test suite: XX tests passing
- Run code linter: 0 violations
- Run static analysis: XX errors at level X
- Document baseline results for future comparison
Co-Authored-By: Clotho <clotho@lthn.ai>"
Acceptance Criteria:
- ✅
composer.lockcommitted - ✅ Baseline documents committed
- ✅ Conventional commit message
- ✅ References issue #1
Task 7: Update Documentation
Priority: LOW Estimated Time: 15 minutes
Update README.md with setup instructions:
Add section:
## Development Setup
### Prerequisites
- PHP 8.2+
- Composer 2.0+
- Access to `host-uk/core` package (see below)
### Installation
1. Clone repository:
bash
git clone <repo-url>
cd php-api
2. Install dependencies:
bash
composer install
3. Run tests:
bash
vendor/bin/pest
4. Run linter:
bash
vendor/bin/pint --test
5. Run static analysis:
bash
vendor/bin/phpstan analyse
Phase 1 Completion Criteria
- ✅
composer installworks without errors - ✅ All test suites pass
- ✅ Lint baseline documented
- ✅ Static analysis baseline documented
- ✅
composer.lockcommitted - ✅ Baseline files committed
- ✅ README updated with setup instructions
After Phase 1
Proceed to Phase 2 based on TODO.md priorities:
High Priority (Phase 2):
- Fix PHPStan Level 5 errors
- Add missing test coverage (usage alerts)
- API versioning support
Medium Priority (Phase 3):
- Response caching optimisation
- N+1 query elimination
- Webhook analytics dashboard
See TODO.md for full roadmap.
Next Actions:
- Team chooses dependency resolution strategy (Option A/B/C)
- Update
composer.jsonaccordingly - Run through Tasks 1-7
- Mark Phase 1 complete
- Begin Phase 2
Estimated Total Time: 3-4 hours (excluding dependency setup decision time)