mirror of
https://github.com/proffesor-for-testing/agentic-qe.git
synced 2026-09-19 08:45:47 +08:00
2253d05618
Remove the nested v3/ subdirectory by moving all active source code, tests, configs, and assets directly to the project root. Archive v2/ (dead code, 847MB) to v2-archive.tar.gz. Key changes: - Move v3/src/ → src/, v3/tests/ → tests/, v3/packages/ → packages/ - Move v3/tsconfig.json, v3/vitest.config.ts to root - Merge v3/package.json into root package.json (ESM, scripts, deps, exports) - Merge v3/scripts/ into scripts/, v3/implementation/ into docs/implementation/ - Update all CI workflows to remove "cd v3 &&" and v3/ path prefixes - Fix all init installer path resolution (3-level-up → 2-level-up) - Fix hooks to use "node ./dist/cli/bundle.js" instead of bare "aqe" - Update settings.json ADR/DDD directories to docs/implementation/ - Fix helper scripts (statusline, adr-compliance, ddd-tracker, guidance-hooks) - Update 58 agent definitions: aqe/v3/ → aqe/ memory namespaces - Update 15 guidance shards: v3/src/ → src/ path references - Fix sync interfaces: remove v3/ and v2/ path references - Fix test path calculations (process.cwd() + '..' no longer needed) - Fix flaky perf test threshold (500ms → 1000ms for CI environments) - Fix complexity-analyzer test to match ADR-051 keyword-based eligibility Build passes, 17,901 tests pass, CLI and MCP bundles verified. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4.3 KiB
4.3 KiB
SPEC-035-B: Causal Graph
| Field | Value |
|---|---|
| Specification ID | SPEC-035-B |
| Parent ADR | ADR-035 |
| Version | 1.0 |
| Status | Draft |
| Last Updated | 2026-01-20 |
| Author | Architecture Team |
Overview
This specification defines the Causal Graph implementation that represents learned causal relationships between test events. It supports graph traversal, reachability analysis, and transitive closure computation.
CausalGraphImpl Implementation
class CausalGraphImpl implements CausalGraph {
constructor(
public nodes: TestEventType[],
public edges: CausalEdge[]
) {}
edgesFrom(source: TestEventType): CausalEdge[] {
return this.edges.filter(e => e.source === source);
}
edgesTo(target: TestEventType): CausalEdge[] {
return this.edges.filter(e => e.target === target);
}
reachableFrom(source: TestEventType): Set<TestEventType> {
const visited = new Set<TestEventType>();
const queue: TestEventType[] = [source];
while (queue.length > 0) {
const current = queue.shift()!;
if (visited.has(current)) continue;
visited.add(current);
for (const edge of this.edgesFrom(current)) {
if (!visited.has(edge.target)) {
queue.push(edge.target);
}
}
}
return visited;
}
transitiveClosure(): CausalGraph {
// Floyd-Warshall for transitive closure
const n = this.nodes.length;
const nodeIndex = new Map(this.nodes.map((n, i) => [n, i]));
const strength: number[][] = Array(n).fill(null).map(() => Array(n).fill(0));
// Initialize with direct edges
for (const edge of this.edges) {
const i = nodeIndex.get(edge.source)!;
const j = nodeIndex.get(edge.target)!;
strength[i][j] = edge.strength;
}
// Compute transitive closure
for (let k = 0; k < n; k++) {
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
if (i !== j && i !== k && j !== k) {
const indirect = strength[i][k] * strength[k][j];
if (indirect > strength[i][j]) {
strength[i][j] = indirect;
}
}
}
}
}
// Build new graph
const newEdges: CausalEdge[] = [];
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
if (strength[i][j] > 0) {
newEdges.push({
source: this.nodes[i],
target: this.nodes[j],
strength: strength[i][j],
relation: 'causes',
});
}
}
}
return new CausalGraphImpl(this.nodes, newEdges);
}
}
Root Cause Analysis Types
export interface RootCauseAnalysis {
/** Target event being analyzed */
targetEvent: TestEventType;
/** Direct causes (one hop) */
directCauses: Array<{ event: TestEventType; strength: number }>;
/** Indirect causes (transitive) */
indirectCauses: Array<{ event: TestEventType; strength: number; path: TestEventType[] }>;
/** Optimal intervention points */
interventionPoints: TestEventType[];
/** Confidence in analysis (0-1) */
confidence: number;
}
export interface CausalSummary {
numRelationships: number;
causesCount: number;
preventsCount: number;
avgStrength: number;
eventsObserved: number;
}
Validation Rules
| Rule ID | Description | Severity |
|---|---|---|
| SPEC-035-B-001 | nodes array must not contain duplicates | Error |
| SPEC-035-B-002 | edge source/target must exist in nodes | Error |
| SPEC-035-B-003 | strength must be >= 0 | Warning |
Related Specifications
| Spec ID | Title | Relationship |
|---|---|---|
| SPEC-035-A | Causal Weight Matrix | Generates edges |
| SPEC-035-C | Discovery Engine | Uses graph |
Changelog
| Version | Date | Author | Changes |
|---|---|---|---|
| 1.0 | 2026-01-20 | Architecture Team | Initial specification |