v0.8.47

OpenBMB/UltraRAGv0.8.47Jun 24, 2026by safishamsi

AI Summary

Introduces a self-improving 'work memory' system that records outcomes of Q&A sessions to generate a `LESSONS.md` file for future sessions. It also fixes extraction bugs regarding qualified class-method calls and non-hashable nodes.

Key Highlights

  • New `graphify save-result` and `graphify reflect` commands for self-improving memory.
  • Fixed Python qualified class-method calls to produce extraction edges.
  • Improved error handling for malformed extractions (non-hashable nodes).
  • Updated `graphify update` to prune removed functions without `--force`.

New Features

  • Self-improving work memory system
  • Qualified class-method call extraction
  • Safe function pruning in update

Full Release Notes

## graphify 0.8.47

### Self-improving "work memory" (#1441)
- **`graphify save-result --outcome useful|dead_end|corrected [--correction TEXT]`** records how a saved Q&A turned out.
- **`graphify reflect`** aggregates `graphify-out/memory/` into a deterministic `reflections/LESSONS.md` an agent loads next session. Source nodes are **scored, not counted** — signed and recency-decayed (configurable `--half-life-days`, default 30), so a fresh dead end outweighs a stale useful. A node is **preferred** only once corroborated by ≥`--min-corroboration` distinct results (default 2); others are **tentative**; mixed-signal nodes render once as **contested** (recency-wins). Citations whose node no longer exists in the graph are dropped, so stale lessons don't linger. Deterministic, no LLM.
- **Zero-config adoption:** the skill instructs the agent to read `LESSONS.md` at the start of graph work and to record outcomes, and the git post-commit/post-checkout hooks now auto-run `reflect` after each rebuild — so lessons stay fresh without a manual command.

### Fixes
- **Python qualified class-method calls** (`ClassName.method(...)`) now produce an EXTRACTED `calls` edge to the class-qualified method node (#1446) — previously dropped, including the common case where the called method shares its name with the caller (a viewset action delegating to a same-named service action).
- **`validate_extraction`/`build_from_json` no longer crash** on a non-hashable node `id` or edge endpoint from a malformed extraction — a single bad node no longer aborts the whole build (#1447, thanks @dschwartzi).
- **`graphify update` now prunes** a function/symbol removed from a still-present file **without `--force`** — the shrink-guard is file-aware (allows shrinkage from re-extracted/deleted files, still refuses unexplained loss).

**Install:** `uv tool install graphifyy==0.8.47`