Skip to content

v0.6.0: prune rule-edge fix, tool descriptions, opt-in Jev judgments

Latest

Choose a tag to compare

@stevepridemore stevepridemore released this 27 Oct 21:28
4b658c7

Minor release. Fixes graph_prune execute so it keeps the rule edges its preview says it keeps, corrects four tool descriptions, and adds two opt-in features that use TypeSafe's Jev model.

Upgrade note: earlier prune runs may have removed edges on rules

Before this release, graph_prune with mode: "execute" didn't apply the rule-subtype exemption that the preview applies. An execute run could delete a weak edge touching a subtype: "rule" node, even when the preview had just listed that edge as kept. Rule nodes themselves were never pruned. If you have run prune in execute mode, including from the weekly maintenance job, check your rule nodes for missing edges. Restore any you need from a graph_export backup, or re-assert them with graph_relate.

To upgrade: docker compose pull && docker compose up -d, or pin MCP_IMAGE_TAG=v0.6.0.

Fixes

  • graph_prune execute spares rule edges (#50). The delete now uses the same predicate as the preview. A regression test covers it.
  • Tool descriptions (#50) now match what the tools return:
    • graph_decay returns totals, and rules are exempt.
    • graph_validate lists the checks it actually runs, including isolated entities.
    • graph_search returns an error when the embedder is unavailable.
    • graph_communities documents its real output shape and ordering.

New: optional Jev judgments (#51)

TypeSafe's Jev returns typed judgments (a choice, a probability, a score) instead of text, at $0.042 per million input tokens with free output. Both features are off by default. Each has its own cost cap, and anything that looks like a personal identifier (email address, SSN, date of birth, card number) is never sent.

  • Verb selection (JEV_VERB_SELECT=on). When graph_relate is about to store an edge as RELATED_TO, Jev picks a documented verb. It only does this when the writer asked for RELATED_TO, or for a verb outside the vocabulary. The answer is checked against RELATIONSHIP_TYPES, and ALIAS_OF, CONTRADICTS and SUPERSEDES are never chosen. Low confidence, a verb that doesn't fit the source node's type, a timeout, an error or a spent cap all keep RELATED_TO. Relabelled edges record verb_selected_by, verb_selection_confidence and verb_requested. Capped at $0.05 a day per server process by default.
  • Duplicate check (JEV_DUPLICATE_CHECK=on). After each completed nightly API-runner dream, the runner judges graph_merge_suggestions candidates using their descriptions, aliases and relationships. It appends each verdict to logs/jev-duplicates.jsonl. Log-only: nothing is merged or aliased. Capped at $0.02 per run by default. To run it on its own: docker compose run --rm graph-dream node dist/dream-runner/index.js --job duplicates.

Turning them on

  1. Put your TypeSafe key in a file outside the repo.
  2. In .env, set JEV_API_KEY_HOST_FILE to that file's path. Compose mounts it read-only into graph-memory-mcp and graph-dream, and sets JEV_API_KEY_FILE for you. Outside compose, set JEV_API_KEY_FILE directly.
  3. Add JEV_VERB_SELECT=on and/or JEV_DUPLICATE_CHECK=on.
  4. Run docker compose up -d.

All settings are in .env.example and in docs/DREAM_PROCESS.md under "Jev judgments".