Implements FED-010: Agent Spawn via Federation feature that enables spawning and managing Claude agents on remote federated Mosaic Stack instances via COMMAND message type. Features: - Federation agent command types (spawn, status, kill) - FederationAgentService for handling agent operations - Integration with orchestrator's agent spawner/lifecycle services - API endpoints for spawning, querying status, and killing agents - Full command routing through federation COMMAND infrastructure - Comprehensive test coverage (12/12 tests passing) Architecture: - Hub → Spoke: Spawn agents on remote instances - Command flow: FederationController → FederationAgentService → CommandService → Remote Orchestrator - Response handling: Remote orchestrator returns agent status/results - Security: Connection validation, signature verification Files created: - apps/api/src/federation/types/federation-agent.types.ts - apps/api/src/federation/federation-agent.service.ts - apps/api/src/federation/federation-agent.service.spec.ts Files modified: - apps/api/src/federation/command.service.ts (agent command routing) - apps/api/src/federation/federation.controller.ts (agent endpoints) - apps/api/src/federation/federation.module.ts (service registration) - apps/orchestrator/src/api/agents/agents.controller.ts (status endpoint) - apps/orchestrator/src/api/agents/agents.module.ts (lifecycle integration) Testing: - 12/12 tests passing for FederationAgentService - All command service tests passing - TypeScript compilation successful - Linting passed Refs #93 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
5.4 KiB
5.4 KiB
Issue ORCH-114: Quality Gate Callbacks
Objective
Implement quality gate callbacks that call coordinator quality gates before commit/push.
Approach
Following TDD principles:
- RED: Write tests first for quality-gates.service.ts
- GREEN: Implement minimal code to pass tests
- REFACTOR: Clean up and optimize
Key Requirements (from M6-NEW-ISSUES-TEMPLATES.md)
src/coordinator/quality-gates.service.tsimplemented- Pre-commit quality check (before git commit)
- Post-commit quality check (before git push)
- Parse quality gate response
- Block commit/push if rejected
- Return rejection details to agent
Design
Service Interface:
class QualityGatesService {
constructor(coordinatorClient: CoordinatorClientService) {}
// Pre-commit: runs before git commit
async preCommitCheck(params: PreCommitCheckParams): Promise<QualityGateResult>;
// Post-commit: runs before git push
async postCommitCheck(params: PostCommitCheckParams): Promise<QualityGateResult>;
}
Quality Gate Types:
- Pre-commit: typecheck, lint, tests
- Post-commit: coverage, build, integration tests
Integration:
- Use CoordinatorClientService.checkQuality()
- Parse response (approved/rejected)
- Return detailed rejection info to caller
Progress
- Read ORCH-114 requirements
- Review CoordinatorClientService interface
- Design quality-gates.service.ts interface
- Write tests (RED phase) - 22 comprehensive test cases
- Implement service (GREEN phase) - All tests passing
- Refactor and optimize (REFACTOR phase) - 91.66% branch coverage, 100% line coverage
- Add service to CoordinatorModule
- Create/close Gitea issue - Issue #249 created and closed
Testing Strategy
Test Scenarios
- Pre-commit approved: All gates pass
- Pre-commit rejected: Lint fails
- Post-commit approved: All gates pass
- Post-commit rejected: Coverage insufficient
- Coordinator unavailable: Service retries
- Invalid response: Error handling
- Multiple file changes: Diff summary handling
Mock Strategy
- Mock CoordinatorClientService
- Test both approval and rejection flows
- Test error propagation
- Verify proper gate type selection
Notes
CoordinatorClientService Interface
From orch-113-coordinator.md and coordinator-client.service.ts:
interface QualityCheckRequest {
taskId: string;
agentId: string;
files: string[];
diffSummary: string;
}
interface QualityCheckResponse {
approved: boolean;
gate: string;
message?: string;
details?: Record<string, unknown>;
}
class CoordinatorClientService {
async checkQuality(request: QualityCheckRequest): Promise<QualityCheckResponse>;
async isHealthy(): Promise<boolean>;
}
Quality Gate Phases
Pre-commit (before git commit):
- Runs fast gates: typecheck, lint, unit tests
- Blocks commit if any fail
- Returns detailed errors for agent to fix
Post-commit (before git push):
- Runs comprehensive gates: coverage, build, integration tests
- Blocks push if any fail
- Can include AI reviewer confirmation
Blockers
None - ORCH-113 is complete and available.
Related Issues
- ORCH-113: Coordinator API client (complete)
- ORCH-121: Mechanical quality gates (coordinator implementation)
- ORCH-116: 50% rule enforcement
Implementation Summary
Files Created
-
src/coordinator/quality-gates.service.ts (161 lines)
- QualityGatesService class with NestJS dependency injection
- Pre-commit check method (typecheck, lint, tests)
- Post-commit check method (coverage, build, integration tests)
- Comprehensive logging and error handling
-
src/coordinator/quality-gates.service.spec.ts (22 test cases)
- Pre-commit approval/rejection scenarios
- Post-commit approval/rejection scenarios
- Error handling (coordinator unavailable, network errors, timeouts)
- Response parsing and validation
- Multiple file changes handling
- Non-Error exception handling
Test Coverage
- Statements: 100%
- Branches: 91.66% (exceeds 85% requirement)
- Functions: 100%
- Lines: 100%
Module Integration
Updated coordinator.module.ts to export QualityGatesService alongside CoordinatorClientService.
Key Features
-
Pre-commit gates: Fast checks before commit
- Type checking
- Linting
- Unit tests
- Blocks commit if any fail
-
Post-commit gates: Comprehensive checks before push
- Code coverage (>= 85%)
- Build verification
- Integration tests
- AI reviewer confirmation (optional)
- Blocks push if any fail
-
Error handling: Robust retry logic
- Propagates coordinator client errors
- Handles network failures
- Timeout handling
- Non-Error exception handling
-
Response parsing: Type-safe response mapping
- Preserves all coordinator response fields
- Returns detailed rejection info
- Includes gate-specific details for debugging
Acceptance Criteria - COMPLETED
src/coordinator/quality-gates.service.tsimplemented- Pre-commit quality check (before git commit)
- Post-commit quality check (before git push)
- Parse quality gate response
- Block commit/push if rejected
- Return rejection details to agent
- Comprehensive unit tests (22 test cases)
- Test coverage >= 85% (achieved 91.66% branch, 100% line)
- NestJS service with proper dependency injection
- Integration with CoordinatorClientService