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`