v3.10.16
ruvnet/ruflov3.10.16May 30, 2026by ruvnet
AI Summary
This release (v3.10.16) combines two major updates: Round B completes the trajectory pipeline wiring for hooks (post-edit and post-command now feed the trajectory pipeline, and trajectory-end now updates globalStats), while Round C introduces structured distillation with a new 4-field schema module, a 30-pair trajectory corpus, and an MRR benchmark harness that shows a 41.8% improvement in MRR (0.0964 to 0.1367).
Key Highlights
- Trajectory pipeline now wired into hooks_post-edit and hooks_post-command for synthesizing one-step trajectories from edit/command outcomes
- hooks_intelligence_trajectory-end now updates globalStats with learning.globalStatsTrajectoriesDelta
- New structured-distill.ts module with 4-field schema (summary/detail/labels/paths) and embedding-ready serialiser
- MRR benchmark shows +41.8% improvement (0.0964→0.1367) using distilled trajectories vs raw
- Every handler now returns explicit learningPath and note naming what fired
New Features
- Trajectory pipeline integration for post-edit and post-command hooks
- globalStats now updated by hooks_intelligence_trajectory-end
- New src/memory/structured-distill.ts module with 4-field schema
- New bench/trajectory-mrr-corpus.json with 30 paired (raw, query) trajectories
- New scripts/benchmark-trajectory-mrr.mjs benchmark harness with ONNX embedder support
- Learning path tracking with explicit 'trajectory-pipeline' or 'recorded-only' return values
- 12 new tests (9 schema + 3 wiring tests) - full suite passes 135/135
Full Release Notes
Two SOTA-direction rounds packaged together. **Round B — finishes the #2245 wiring story** (closes the "wiring side" gap left in ADR-074/ADR-075) - `hooks_post-edit` now feeds the trajectory pipeline (synthesises a one-step trajectory from the edit outcome). - `hooks_post-command` does the same for command outcomes. - `hooks_intelligence_trajectory-end` ALSO bumps `globalStats` (was only feeding sonaCoordinator); response includes `learning.globalStatsTrajectoriesDelta`. - Every handler returns `learningPath: 'trajectory-pipeline' | 'recorded-only'` + an explicit `note` naming what fired. **Round C — Structured Distillation (#2241 §SOTA, arXiv:2603.13017)** - New module `src/memory/structured-distill.ts` — 4-field schema (`summary` / `detail` / `labels` / `paths`), rule-based deterministic extractor, embedding-ready serialiser that puts high-signal tokens at the front. - New corpus `bench/trajectory-mrr-corpus.json` — 30 paired (raw, query) trajectories. - New MRR harness `scripts/benchmark-trajectory-mrr.mjs` — bridge ONNX embedder with hash-deterministic fallback (clearly warned as degraded). **Measured proof** (bridge ONNX, Xenova/all-MiniLM-L6-v2, N=30): | Metric | Raw | Distilled | Δ | |---|---:|---:|---:| | MRR | 0.0964 | **0.1367** | **+0.0403 (+41.8%)** | | Direction | — | — | ✅ distilled better | Direction matches arXiv:2603.13017 (+0.014 absolute on a 214K paper corpus); relative delta is larger here because the small curated corpus benefits more from labels-and-paths-first ordering. **Honest:** a rule-based distiller cannot deliver the paper's 11× byte compression (current ratio: 0.74× — distilled is 35% bigger). The schema, corpus, harness, and serialiser are in place so a future round can plug in a learned distiller as a drop-in extractor swap and pick up that compression number while keeping this MRR direction. **Tests:** 9 schema tests + 3 Round B wiring tests = 12 new. Affected suite 135/135. **Install:** `npx ruflo@3.10.16`