astria 1.0.7: a judge over the LLM, a viewer you can drill into
1.0.7 adds a calibrated second opinion over every LLM extraction, rewrites the HTML export around drill-down, and tightens retrieval for prose corpora and qualified names. Install or upgrade with npm install -g @nodesify/astria.
Jev: a judge layer over any backend
Semantic enrichment already required an explicit backend — that doesn't change. What's new is --judge jev: a TypeSafe System One decision model that doesn't generate extractions, it judges them. The engine (Claude, any OpenAI-compatible endpoint, or Gemini) still produces every node and edge; the judge then re-chooses relations and node types from the schema allowlists, drops edges it doesn't believe in, and stamps each surviving semantic edge with a calibrated existence probability in confidence_score — semantic edges previously carried a null score.
Two economics features fall out of the same layer. A trivial-file gate batches keep/drop judgments (~1 billed request per 50 files) so empty config files never cost an engine call, and per-file verification replaces the old lossy relates_to clamps with real relations from the allowlist. Judge calls count toward ASTRIA_LLM_BUDGET and fingerprint into the extraction cache, so changing judge configuration invalidates cached extractions honestly. See the semantic enrichment guide.
An HTML viewer built for drill-down
export --format html is now a self-contained canvas viewer: it opens as community bubbles sized by membership, click a bubble to expand its members, click a member to focus its 1-hop neighborhood with relation-labeled, directional links. Search covers symbols, files, and community names. The layout is fully precomputed — no physics, only what's on screen gets drawn — so large graphs open instantly even in sandboxed previewers. Edges carry their kind now, so the focus panel tells you how two nodes are connected, not just that they are.
Retrieval that respects scope
Two ranking changes land for query quality. Question terms now score against each node's scope-qualified id — BaseCommand.get_usage is reachable through src_click_core_basecommand::get_usage even when every same-name symbol shares one bare label — and the IDF pre-pass counts document bodies, so terms that are common in prose ("group", "friends" in transcripts) stop acting as rare discriminators. On the full LoCoMo set (1,977 questions, structural only): recall@1 63.5% → 66.1%, MRR 0.717 → 0.736.
This release also records the project's first blind answer-correctness measurement: both astria and the original Graphify answered the same 35 rubric-grounded questions, graded without tool identity — astria 100% PASS, Graphify 77.1% PASS / 20% FAIL (single judge, single run; not a statistical claim). The same pairs re-graded by an independent promptfoo/OpenRouter judge agreed on the ordering.
Smaller and steadier
astria hook installwrites v4 hooks that rebuild quietly and skip graphs published less than 10 minutes ago (update . --quiet --if-stale 10) — a burst of commits rebuilds once instead of per commit.- The symbol-tree export now upholds the same labels-as-text safety property as the bubble viewer, with tests pinning it.
- Every documentation surface was audited against the code, and the docs-sync CI check now works in both directions — phantom relations, undocumented flags, and unread environment variables are mechanically rejected going forward.
Full detail in the changelog.