Skip to content

v0.2.0 — Runs unattended

Choose a tag to compare

@renezander030 renezander030 released this 28 Aug 18:04
· 5 commits to main since this release

v0.1.0 was read-first and human-gated, but it assumed a human at the keyboard: output was decorated text, a refused write still exited 0, configuration errors surfaced as tracebacks mid-run, and a half-finished ingest could not resume. This release makes the tool safe to hand to a cron job or an agent.

Breaking

  • kg prints JSON on stdout by default. Pass -H/--human for the previous output. Failures go to stderr and never appear on stdout as a success-shaped object.
  • kg propose enforces the group allow-list. A fact addressed to a group graph.groups does not declare is refused with exit code 2 and is not queued. Reads always enforced this; the write path did not.
  • server.transport: streamable-http requires server.auth.token (16+ characters). An unauthenticated network transport exposed every configured group.
  • A known embedding model whose width disagrees with embedder.dimensions is now a configuration error — for example nomic-embed-text with 1536. The mismatch was silent and corrupted every embedding it wrote.
  • kg-ingest and kg-workspace also default to JSON and accept -H.

Added

  • kg doctor [--offline] — preflight for configuration, workspace, backend, LLM and embedder. The embedder check calls the live endpoint and compares the real vector width against the configured one.
  • kg verify [--offline] — asserts the six read tools are registered, that no write tool is exposed (a negative control), and that live retrieval works.
  • kg export [group ...] [--output PATH] — a backend-independent JSONL snapshot written from the graphiti models. Embeddings are omitted because they are derived from the text, and restoring them under a different model would be silently wrong.
  • reranker: configuration — passthrough (default, no extra model call), bge (local, uv sync --extra rerank), openai, gemini. Upstream ships these cross-encoders; there was no way to select one.
  • config/ollama.example.yaml — a fully local profile: local model, local embedder, embedded Ladybug backend, no API key.
  • Resumable ingestion via a content-keyed ledger, so re-running a file ingests only what has not landed. --no-resume ignores it.
  • Per-record fault isolation in ingestion: one failing episode no longer costs the batch. --fail-fast restores the old behaviour; --skip-invalid tolerates malformed lines.

Fixed

  • kg-workspace drain archived a proposal even when its ingestion did not succeed, losing it. It now archives only what landed and leaves the rest approved for the next drain.
  • The proposal queue rejected group names that graph.groups accepts (lowercase-only, no dots). A configurable group is now always proposable.
  • kg doctor reports the resolved absolute Ladybug path.