v3/implementation/adrs/ADR-075-wire-learning-pipeline.md
Status: Implemented
Date: 2026-04-06
Branch: feat/wire-learning-pipeline
The learning pipeline had all building blocks (SONA, LocalReasoningBank, ONNX embeddings, trajectory recording, pattern search, file persistence) but they weren't connected end-to-end. Trajectories recorded without embeddings, so distillation produced 0 patterns. The memory bridge tried to use AgentDB's ReasoningBank/LearningSystem but they require a better-sqlite3 db handle that ControllerRegistry doesn't expose.
recordTrajectory — each step gets ONNX embedding (all-MiniLM-L6-v2, 384d) before distillationsession-start initializes SONA+ReasoningBank, post-task records trajectoriespatternsLearned and signalsProcessed to global stats| Capability | Before | After | Evidence |
|---|---|---|---|
| Trajectory recording | Worked but no patterns | 9 patterns from 3 trajectories | stats.patternsLearned: 9 |
| Embedding generation | Not called during trajectory | Auto-generated per step | ONNX all-MiniLM-L6-v2, 384d |
| Pattern search | 0 results | Correct semantic matches | "auth" → JWT pattern (0.584), "security" → SQL injection (0.661) |
| Pattern persistence | File never created | patterns.json written | persist.patternsExist: true |
| SONA coordinator | Initialized but idle | Active with trajectories | stats.sonaEnabled: true |
| Intelligence in hooks | Not wired | session-start inits, post-task records | Automatic on every session |
Hook fires (session-start / post-task)
│
├── intelligence.initializeIntelligence()
│ ├── LocalSonaCoordinator (RL, <0.05ms adaptation)
│ └── LocalReasoningBank (pattern storage + file persistence)
│
├── intelligence.recordTrajectory(steps, verdict)
│ ├── generateEmbedding(step.content) ← ONNX all-MiniLM-L6-v2
│ ├── sonaCoordinator.recordTrajectory()
│ ├── sonaCoordinator.endTrajectory() → RL reward
│ ├── sonaCoordinator.distillLearning() → EWC consolidation
│ └── reasoningBank.store(pattern) → file persistence
│
└── intelligence.findSimilarPatterns(query)
└── reasoningBank.findSimilar(embedding, {k, threshold})
v3/@claude-flow/cli/src/memory/intelligence.tsv3/@claude-flow/cli/src/memory/memory-bridge.tsv3/@claude-flow/cli/src/mcp-tools/hooks-tools.ts