Files
proffesor-for-testing__agen…/docs/phase2/instrumentation-schema.json
Profa 108676e602 feat: Phase 2 complete - Instrumentation, evaluation, voting, and CLI
Phase 2 Implementation (95% complete):
- All 12 planned deliverables implemented
- 5/5 validation criteria passing (VC1-VC5)
- 0 TypeScript errors, 0 critical bugs
- Comprehensive documentation (14 files)

Core Infrastructure:
- Agent lifecycle instrumentation (agent.ts, task.ts)
- Memory operation instrumentation (memory.ts) with SwarmMemoryManager integration
- Token tracking and cost calculation (CostTracker)
- 4 clause evaluators (AST, metric, pattern, semantic)
- Multi-agent voting protocol with consensus algorithms
- Distributed trace propagation with OTEL

CLI Commands (Phase 3/4 completed early):
- Telemetry: status, metrics, trace, export-prometheus
- Constitution: validate, list, show, evaluate

Validation:
- VC1: Agent trace retrieval ✅
- VC2: Token tracking ✅
- VC3: Clause evaluation ✅
- VC4: Multi-agent voting ✅
- VC5: Memory operation instrumentation ✅

Tests:
- 5 validation scripts (790+ LOC)
- 13+ unit tests
- Integration tests for SwarmMemoryManager
- All tests passing

Documentation:
- MEMORY-TS-ANALYSIS.md (10+ pages deep analysis)
- PHASE2-FINAL-STATUS.md (comprehensive status)
- BRUTAL-HONESTY-REVIEW-PHASE2.md (technical review)
- SESSION-SUMMARY.md (achievements summary)
- CLI documentation (telemetry + constitution)
- Memory instrumentation guides (integration + examples)

Files Created (60+):
- Instrumentation: 4 files (agent, task, memory, index)
- Evaluators: 6 files (AST, metric, pattern, semantic, base, index)
- Voting: 6 files (protocol, panel, consensus, orchestrator, types, index)
- Validation: 5 scripts
- Documentation: 14+ files
- Tests: 10+ test files
- CLI: 2 command files

What's Left (5%):
- CLI integration testing against real OTEL collector
- Real-world validation with production agent workflows

Ready for Phase 3: ✅ Dashboards & Visualization

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 07:52:51 +00:00

348 lines
11 KiB
JSON

{
"version": "1.0.0",
"phase": "Phase 2 - GOAP Implementation",
"action": "A4 - Agent Instrumentation",
"timestamp": "2025-11-20T00:00:00Z",
"description": "OpenTelemetry span schemas for all 18 QE agents with semantic attributes following OTEL conventions",
"memory_namespace": "aqe/phase2/instrumentation/agent-spans",
"spans": {
"agent_lifecycle": {
"spawn": {
"name": "aqe.fleet.spawn_agent",
"description": "Agent creation and initialization span",
"attributes": {
"agent.id": {
"type": "string",
"required": true,
"description": "Unique agent identifier"
},
"agent.type": {
"type": "string",
"required": true,
"description": "Agent type (e.g., test-generator, coverage-analyzer)"
},
"agent.name": {
"type": "string",
"required": true,
"description": "Human-readable agent name"
},
"agent.capabilities.count": {
"type": "number",
"required": false,
"description": "Number of capabilities"
},
"agent.capabilities.names": {
"type": "string",
"required": false,
"description": "Comma-separated capability names"
},
"fleet.id": {
"type": "string",
"required": false,
"description": "Fleet identifier"
},
"fleet.topology": {
"type": "string",
"required": false,
"description": "Fleet topology (hierarchical, mesh, star, ring)"
}
},
"events": [
{
"name": "agent.spawn.started",
"attributes": ["agent.id", "agent.type"]
},
{
"name": "agent.spawn.completed",
"attributes": ["agent.id"]
},
{
"name": "agent.spawn.failed",
"attributes": ["agent.id", "error.message"]
}
]
},
"execute": {
"name": "aqe.agent.execute_task",
"description": "Agent task execution span",
"attributes": {
"agent.id": {
"type": "string",
"required": true,
"description": "Agent identifier"
},
"agent.type": {
"type": "string",
"required": true,
"description": "Agent type"
},
"task.id": {
"type": "string",
"required": true,
"description": "Task identifier"
},
"task.type": {
"type": "string",
"required": true,
"description": "Task type (unit-test, integration-test, etc.)"
},
"task.status": {
"type": "string",
"required": true,
"description": "Task status (pending, running, completed, failed)"
},
"task.priority": {
"type": "string",
"required": false,
"description": "Task priority (low, medium, high, critical)"
},
"task.execution_time_ms": {
"type": "number",
"required": false,
"description": "Task execution time in milliseconds"
},
"task.tokens_used": {
"type": "number",
"required": false,
"description": "LLM tokens consumed"
},
"task.cost_usd": {
"type": "number",
"required": false,
"description": "Task cost in USD"
}
},
"events": [
{
"name": "agent.task.started",
"attributes": ["task.id", "task.type", "agent.id"]
},
{
"name": "agent.task.completed",
"attributes": ["task.id", "agent.id"]
},
{
"name": "agent.task.failed",
"attributes": ["task.id", "agent.id", "error.message"]
}
]
},
"status_change": {
"event": "agent.status.changed",
"description": "Agent status transition event",
"attributes": {
"agent.id": "Agent identifier",
"agent.status.old": "Previous status",
"agent.status.new": "New status"
}
},
"error": {
"event": "agent.error",
"description": "Agent error event",
"attributes": {
"agent.id": "Agent identifier",
"error.message": "Error message",
"error.stack": "Stack trace"
}
}
},
"specialized_operations": {
"test_generation": {
"name": "aqe.agent.generate_tests",
"description": "Test generation operation span",
"agent_types": ["qe-test-generator"],
"attributes": {
"qe.test_framework": {
"type": "string",
"description": "Testing framework (jest, mocha, pytest, etc.)"
},
"qe.coverage_type": {
"type": "string",
"description": "Coverage type (line, branch, function)"
},
"task.tests_generated": {
"type": "number",
"description": "Number of tests generated"
}
}
},
"coverage_analysis": {
"name": "aqe.agent.analyze_coverage",
"description": "Coverage analysis operation span",
"agent_types": ["qe-coverage-analyzer"],
"attributes": {
"qe.coverage_type": {
"type": "string",
"description": "Coverage type"
},
"qe.coverage_percent": {
"type": "number",
"description": "Coverage percentage"
},
"task.gaps_detected": {
"type": "number",
"description": "Number of coverage gaps detected"
}
}
},
"quality_validation": {
"name": "aqe.agent.validate_quality",
"description": "Quality gate validation span",
"agent_types": ["qe-quality-gate"],
"attributes": {
"qe.gate_name": {
"type": "string",
"description": "Quality gate name"
},
"qe.quality_score": {
"type": "number",
"description": "Quality score (0-100)"
},
"task.passed": {
"type": "boolean",
"description": "Whether quality gate passed"
}
}
},
"security_scan": {
"name": "aqe.agent.scan_security",
"description": "Security scanning operation span",
"agent_types": ["qe-security-scanner"],
"attributes": {
"qe.security_severity": {
"type": "string",
"description": "Severity level (info, low, medium, high, critical)"
},
"task.vulnerabilities_found": {
"type": "number",
"description": "Number of vulnerabilities detected"
}
}
},
"performance_test": {
"name": "aqe.agent.performance_test",
"description": "Performance testing operation span",
"agent_types": ["qe-performance-tester"],
"attributes": {
"qe.load_pattern": {
"type": "string",
"description": "Load pattern (constant, ramp-up, spike)"
},
"task.p95_latency_ms": {
"type": "number",
"description": "P95 latency in milliseconds"
},
"task.throughput_rps": {
"type": "number",
"description": "Throughput in requests per second"
}
}
}
},
"task_orchestration": {
"distribute": {
"name": "aqe.fleet.distribute_task",
"description": "Task distribution and orchestration span",
"attributes": {
"task.id": {
"type": "string",
"required": true,
"description": "Task identifier"
},
"task.type": {
"type": "string",
"required": true,
"description": "Task type"
},
"fleet.id": {
"type": "string",
"required": false,
"description": "Fleet identifier"
},
"fleet.agent_count": {
"type": "number",
"required": false,
"description": "Total agents in fleet"
},
"task.agents_assigned": {
"type": "number",
"required": false,
"description": "Agents assigned to this task"
}
},
"events": [
{
"name": "task.orchestration.started",
"attributes": ["task.id", "task.type"]
},
{
"name": "task.orchestration.completed",
"attributes": ["task.id"]
}
]
}
}
},
"agents_instrumented": [
"qe-test-generator",
"qe-coverage-analyzer",
"qe-quality-gate",
"qe-performance-tester",
"qe-security-scanner",
"qe-chaos-engineer",
"qe-visual-tester",
"qe-test-executor",
"qe-flaky-test-hunter",
"qe-regression-risk-analyzer",
"qe-requirements-validator",
"qe-production-intelligence",
"qe-api-contract-validator",
"qe-test-data-architect",
"qe-code-reviewer",
"qe-data-generator",
"qe-deployment-readiness",
"production-validator"
],
"integration_points": {
"base_agent": {
"file": "src/agents/BaseAgent.ts",
"hooks": [
"initialize()",
"executeTask()",
"handleError()",
"shutdown()"
],
"instrumentation": "AgentSpanManager automatically instruments all lifecycle hooks"
},
"lifecycle_manager": {
"file": "src/agents/lifecycle/AgentLifecycleManager.ts",
"hooks": [
"initialize()",
"setStatus()",
"handleFailure()"
],
"instrumentation": "Status change events recorded automatically"
},
"task_executor": {
"file": "src/agents/TestExecutorAgent.ts",
"methods": [
"executeTask()",
"runTests()",
"collectResults()"
],
"instrumentation": "TaskSpanManager traces execution with retry and timeout handling"
}
},
"usage_examples": {
"agent_spawn": "agentSpanManager.startSpawnSpan({ agentId, capabilities, fleetId, topology })",
"task_execution": "const { span, context } = taskSpanManager.startExecutionSpan({ task, parentContext })",
"with_span": "await withAgentSpan('operation_name', agentId, async () => { /* work */ })",
"decorator": "@InstrumentAgent('test_generation') async generateTests() { /* implementation */ }"
},
"context_propagation": {
"description": "All spans support parent-child relationships through OpenTelemetry context propagation",
"pattern": "Parent span context is passed via parentContext parameter, enabling distributed tracing across agent boundaries",
"example": "orchestration_span -> agent_spawn_span -> task_execution_span -> operation_span"
}
}