# Phase 3 Implementation: Server Plane ## Delivered in this phase - Tenant-aware server registry controller behavior via request tenant context. - Agent session heartbeat intake endpoint and session repository boundary. - Job dispatch endpoint with command type allowlist and idempotent envelope fields. - Redis Streams queue adapter for Go orchestration layer. ## Files added/updated - `panel-api/app/Modules/Server/ServerRepository.php` - `panel-api/app/Modules/Agents/AgentSessionRepository.php` - `panel-api/app/Modules/Jobs/JobController.php` - `panel-api/app/Modules/Jobs/CommandOrchestrator.php` - `panel-api/app/Http/Middleware/ResolveTenantContext.php` - `panel-api/routes/api_v1/servers.php` - `panel-api/routes/api_v1/jobs.php` - `control-plane-go/internal/orchestration/redis_stream_queue.go` ## API additions - `POST /api/v1/servers/{server}/heartbeat` - `POST /api/v1/jobs/dispatch` ## Notes - Persistence adapters remain intentionally thin to keep boundary clear for full Eloquent integration. - Queue adapter is production-aligned with Redis Streams and can be swapped with NATS without controller changes.