Skip to content

v3.12.0

Choose a tag to compare

@github-actions github-actions released this 04 Jul 00:41

Changed

  • Rules-block diet + drift gate (ADR-0036). The managed memory-rules
    block — paid every session in every project by every wired agent — trimmed
    ES 9,746 → 7,979 chars (−18.1%) / EN 9,484 → 7,743 (−18.4%) (~440
    tokens/session) with zero rules dropped (Trust section byte-identical)
    and two rules rescued from a silently-diverged docs variant ("never
    claim to have persisted" when no vault MCP responds; "memory://… is IDE
    memory, not the vault"). The redundant long-form tool catalogue defers to
    the tool descriptions (canonical since ADR-0035). Three new build gates in
    memory-rules-budget.test.mjs: size budget, 13 load-bearing rule phrases
    per language that must survive any trim, and a drift assertion pinning
    AGENTS.md + both docs install pages to the canonical source (they had
    drifted for months under a "keep in sync" comment). Re-run
    create-obsidian-memory (or --rules) to refresh installed blocks.

  • Fixed-cost diet: schema budget gate + compact KG defaults + compressed
    session hook (ADR-0035).
    The per-session cost every wired agent pays
    before calling anything: tool descriptions + server instructions trimmed
    10,226 → 7,641 chars (−25%, ~−650 tokens/session/agent) — operator prose
    cut, usage guidance and security semantics kept verbatim — and a new
    schema-budget.test.mjs fails the build if schema text regrows past
    8,000 chars (or any single description past 450). vault_relations /
    vault_observations MCP default limit drops 200→50 (filter by
    category/tag/note instead). The SessionStart hook now compresses the
    curated index (100 chars per bullet, word-boundary cut; over-cap prose
    dropped whole) instead of blindly truncating at 4,000: measured on the
    reference vault, −21% chars with +70% more pointers visible (23 → 39 of
    63 — the old cut left 40 entries invisible). Re-run create-obsidian-memory
    to refresh installed hooks.

  • Compact search wire format + MCP default limit 20→10 (ADR-0034). The
    mission "make Fable 5 cost like Sonnet 5" (~70% cut) on the memory path:
    vault_hybrid_search / vault_fts_search hits now carry only what an agent
    acts on (path, heading/title, snippet, 5-decimal score) — the
    mostly-null ranking diagnostics (bm25_rank, vector_rank, graph_rank,
    rerank_score, raw bm25, 19-digit mtime_ns, full-precision score) cost
    ~20 tokens/hit and ship only under the new explain: true param /
    --explain CLI flag. The MCP default limit drops 20→10 (resolves the
    ADR-0032 deferral; tool descriptions now teach 3–5 for targeted recall).
    Measured on real-vault recalls: −37.8% wire cost on the default call,
    −60% on a broad query that hit the old cap. bench-tokens gains a wire
    arm
    that counts the exact compact JSON response (overhead charged, not
    hidden): median wire savings vs whole-note reads = 62% at k=3 / 37% at k=5,
    100% answered — CI-gated via the new --assert-wire-savings 0.30. Breaking
    only for consumers that parsed the diagnostic fields (none in-repo; pass
    explain: true to get them back).

  • Managed rules block: "Keep it cheap (tokens)" grew from a one-liner into a
    distilled token-discipline section (ES/EN, ADR-0032)
    — terse-output rules
    from caveman (no filler/tool-call narration/log dumps; technical terms,
    commands and exact errors always verbatim; plain prose returns for
    security warnings, irreversible confirmations and order-sensitive sequences)
    and the YAGNI ladder from ponytail (reuse → stdlib → platform → installed
    dep → one line → minimal code; never simplify validation, data-loss error
    handling or security; non-trivial logic leaves one runnable check). Plus the
    measured limit guidance: pass a low limit (3–5) on targeted recalls.
    Synced across memory-rules.mjs, AGENTS.md and docs/{es,en}/install.md.

  • Memory report notice now carries the compression-safety rule (from
    caveman-compress's safety tests): when condensing notes, compress prose only —
    never drop decisions, gotchas, commands, or exact error strings.

Added

  • vault_edit_file now rejects self-paste frontmatter duplication (ADR-0033).
    Found via a vault-hygiene pass: a past corrupt edit had triplicated a project
    note by pasting its own YAML frontmatter (and the rest of the file) back into
    its body, growing it to ~53K tokens undetected until a manual audit. The
    guard is a targeted, deterministic check — if applying an edit's newText
    would increase how many times the note's own frontmatter block occurs, the
    whole call is rejected and the file is left untouched. 3 new tests in
    vault-fs.test.mjs.
  • Token-economy benchmark, measured and CI-gated (ADR-0032). The kit's token
    claim ("passage-first reads beat whole-note reads") is now a number, not an
    assertion: bench-tokens / json-bench-tokens compare the top-k
    heading + snippet passages vault_hybrid_search returns against every
    ground-truth note read whole, over a new realistically-sized fixture
    (evals/tokens/, 16 labelled queries). Methodology distilled from the two
    tools evaluated in ADR-0032: caveman's honest control arm (the whole-note arm
    pays zero discovery cost, so savings are a floor; median/min/max/stdev
    reported, ~4 bytes/token estimator on both arms) and ponytail's completeness
    gate (savings only count when every relevant note surfaces in the top-k).
    Measured at k=5: 100% answered, median savings 47%, aggregate 56% — and the
    per-kind breakdown keeps the honest counterpoint visible (small <2 KB notes
    are cheaper read whole). CI gates at --assert-savings 0.40 --assert-answered 0.95; 6 new tests in test_bench_tokens.py also pin that
    a lower k saves strictly more without losing answers.