Skip to content

v1.5.0 — The Substrate

Choose a tag to compare

@Wolfe-Jam Wolfe-Jam released this 31 May 18:48
· 57 commits to main since this release

v1.5.0 — The Substrate

The full 1.5 substrate ships clean. Four new MCP tools, a drift-detection + orchestration library, a permanent Doc Gate CI shield, and the receipts to prove it all worked.

New MCP tools (4)

  • refresh_fafm — explicit .fafm memory-layer re-grounding. Built for Grok, by request. Spec source: Grok-1 Rounds 1+2+3 (2026-05-30).
  • refresh_blend — baked-in two-intensity refresh (Cmd+R / Cmd+Shift+R analog). Both layers always fire; mode only affects fafm intensity.
  • faf_orchestrate_recommendation — heavy orchestrator composing drift detection + CheckID + repeat-offender + take-a-hint + refresh history into a structured Recommendation. Advisory only, never auto-fires (subordinate-not-daemon). Writes a receipt every call. Spec source: Grok-1 FAF-DRIFT-DETECTION-SPEC §9.5 + Appendix C.
  • faf_get_orchestration_policy — pure introspection of the effective policy without running the orchestrator. The quietest tool in the substrate. Spec source: Grok-1 Round 2 follow-up.

Library substrate

  • detectFafmDrift() — repetition-rate gauge for .fafm
  • checkId() — mechanical cross-stamp contradiction check (5 cross-checks C1–C5)
  • RepeatOffenderTracker — persistent drift-prone slot index
  • evaluateTakeAHint() — temporal escalation ladder (none/light/hard/block)
  • RefreshReceiptsLog + RecommendationReceiptsLog — append-only audit trails

Quality bar

  • 509 tests / 0 fail / 1,550 expect() calls across 24 files
  • 7 canonical types in src/types/ (single source of truth) + 10 compile-time shape assertions
  • 11 WJTTC shields (BRAKE/ENGINE/AERO/TYRE/PIT per component)
  • Doc Gate 1.5 — permanent CI shield via CheckID against THIS repo's stamps every CI run
  • 🏆 TROPHY 100% (15/15 slots) on project.faf

Bugs caught during the ship (none escaped)

8 bugs caught by the test shield + 1 caught by substrate dogfooding itself (#104refresh_faf was reading the wrong .faf for months; its WJTTC tests never exercised the no-path branch). Same pattern swept across handleFafStatus / Score / Init / List (PR #108).

Pubpro pre-publish catches

  • project.faf:33 embedded-colon YAML break (would have failed FAF Gate)
  • Windows handleFafList ' '.repeat(-1) crash (pre-existing, surfaced by new tests)
  • Tool-count cross-stamp drift (README 59 vs project.faf 55, caught by faf sync)

Hosted/local split (unchanged for v1.5)

  • Hosted (mcpaas.live/grok/mcp/v1) — WASM-pure subset only: refresh_faf + scoring + validation
  • Local (bunx grok-faf-mcp) — full capability including all 4 new tools

The honest split is intentional. Hosted = fast, auditable, WASM-pure; local = full capability including filesystem.

Receipts

13 PRs merged in the substrate arc (#93#105) + 6 PRs in the finishing pass (#106#111). 195/195 CI runs green (one Linux bun --isolate epoll flake cleared via re-run). Subordinate-not-daemon throughout.


FAF defines. MD instructs. AI codes.