Skip to content

v1.5.0: controlled vocabulary, single write path

Choose a tag to compare

@ygtalp ygtalp released this 31 Jul 05:59
· 3 commits to main since this release

Schema and packaging release. The graph gets a controlled vocabulary and a single validated write path; the sdist stops shipping the test suite.

Known issue in this version. Sparse retrieval is degraded by a term-ID defect that produces no error and is hidden by RRF fusion — measured on a real vault at MRR 0.16 where it should be 0.63. You will not notice it from search results. Fixed in 2.0.0; see the postmortem. If you are installing fresh, install 2.0.1 instead.

Why this release exists

A real vault reached 46 entity types and 66 relation types across 173 entities. Two causes.

entityType was answering two questions at once — what role does this node play, and what subject is it about — so the list grew by one entry per topic. Splitting subject into its own domain field collapses the type list to ten and keeps it there.

Non-canonical relation types were accepted with a warning. Nothing acted on the warning, so 56 one-off types accumulated unnoticed. The graph stayed writable and stopped being queryable.

Breaking

Existing vaults must be migrated before this version can write to them.

python -m rawthink_mcp.migrate --guess-domains --heal-dangling          # dry run
python -m rawthink_mcp.migrate --guess-domains --heal-dangling --apply

A timestamped backup is taken before anything is written.

Highlights

  • record(), record_decision() and revise() — one validated, all-or-nothing write path. record_decision stores what was rejected, which is the part that exists nowhere else once the code is written.
  • entityType closed to ten roles; domain, visibility and observation kind added.
  • Unknown relation types are rejected rather than warned about.
  • search_nodes is bounded and reports total_matched, so a truncated result is visible.
  • Tool profiles: recall (4 tools, ~900 tokens), record (5, ~1750), full (17, ~4200).
  • serverInfo.version reports the package version instead of FastMCP's.
  • The published 0.1.4 sdist contained tests/, whose fixtures hardcoded personal entity names and session dates. pyproject.toml now has an explicit allowlist and the evaluation set loads from RAWTHINK_EVAL_GT.

Full detail in CHANGELOG.md.