v0.17.0.md
docs/release-notes/v0.17.0.md
Tesserae v0.17.0 — the compile path learns from its peers
<!-- translations:start -->
한국어 · 中文 · 日本語 · Русский · Español · Français · Deutsch
<!-- translations:end -->
Released 2026-07-09 · PyPI · GitHub release · pip install --upgrade tesserae==0.17.0
This release wires in the best ideas from a deep comparison against two sibling LLM-wiki projects — alfadur7/llm-wiki-newsroom and langchain-ai/openwiki — every one verified against what Tesserae already had before being adopted. The theme: what agents consume is now correct, fresh, and discoverable by construction.
Compiled context stops citing losers
compile_context now excludes superseded nodes and arbitration losers by default (include_superseded=True restores them). A claim that lost LLM arbitration was previously cited identically to its winner; the shared superseded_ids() helper now suppresses or flags these consistently across search_nodes, fresh_insights, and node_context too. Synthesis pages additionally verify every citation against the actual input node ids — a fabricated id now fails validation and falls back to the deterministic body.
A two-sided publication gate
Lint runs crash-safe at the tail of every compile, so lint-report.md is always fresh. tesserae compile --strict turns findings into a non-zero exit for CI — and fails closed if lint itself crashes. An opt-in lint --verify-claims goes further: it LLM-checks whether cited nodes actually support the citing sentence (capped, deterministically sampled, never a compile blocker).
The output snapshot gate
After each compile, Tesserae hashes the compiled artifacts and reports Output: changed/unchanged. Under --strict, the suspect state — inputs unchanged but output changed — fails the build: a permanent tripwire for the byte-idempotence class of bugs. A ready-to-copy CI refresh workflow lives in docs/integrations/ci-refresh.md.
Agents find the knowledge base on their own
tesserae setup now installs a marker-delimited Tesserae pointer block into the target repo's AGENTS.md/CLAUDE.md (idempotent; bails untouched on malformed or duplicated markers; coexists with other managed blocks). The wiki-root index.md was rewritten as the agent entrypoint: orientation, an MCP-first "how to query" section, the kinds table, and top communities. Community pages gain a deterministic ## Sources footer listing member source files.
Compile gets cheaper and staleness gets visible
The code graph layer now keeps a whole-layer extraction cache (.tesserae/code-graph-cache.json): when the source tree's stat manifest is unchanged, the cached graph rehydrates byte-identically instead of paying a full re-extraction walk (tens of seconds on large repos). The CLI reports reused or +added ~changed -removed delta counts. Build history records the git HEAD at compile time, and lint emits info findings for code-graph nodes whose source files changed since — plus a contradictions.md wiki page now tracks open/resolved/obsoleted claim conflicts, and graph_ppr gains exclude_direct_neighbors for Memex-style unexpected-connection discovery.
Community-summary caches also invalidate on member content digests (not just membership), so a changed description re-summarizes instead of serving a stale narrative forever.
Upgrade notes
- The first compile after upgrading reports
Output: changedonce (community pages gain Sources sections,index.mdbecomes the entrypoint); subsequent compiles are byte-stable. tesserae setup(including--yes) installs the agent pointer by default; setinstall_agent_pointer=falsein the plan to opt out.