v0.12.2.md
docs/release-notes/v0.12.2.md
Tesserae v0.12.2 — daemon fd-exhaustion + recency-aware ask
<!-- translations:start -->
한국어 · 中文 · 日本語 · Русский · Español · Français · Deutsch
<!-- translations:end -->
Released 2026-06-30 · PyPI · GitHub release · pip install --upgrade tesserae==0.12.2
Two bug fixes. Drop-in over v0.12.x.
tesserae engine no longer exhausts file descriptors
A long-running daemon (especially fleet mode, watching many projects) could spiral into Too many open files / unable to open database file storms that cascaded into failed compiles, an unreadable fleet registry, and codex temp-file errors — everything sharing the process file-descriptor table.
The cause: the session tailer kept every project transcript in its known set and opened each one's .jsonl (plus a sqlite connection) on every tick just to check for new bytes. With tens of thousands of finished transcripts that's tens of thousands of opens per tick — faster than the OS reclaims them. Now a cheap stat() skips the open entirely when a transcript has no new bytes, vanished files are dropped from the tracked set, and a truncated/rotated file is re-read from the start. Steady-state is ~0 opens for the idle majority; only growing transcripts are read.
tesserae ask is recency-aware
A federated ask about recent work could surface weeks-old session-synthesis nodes (titled e.g. "Review ALL improvements that were just made") at the top — they're the strongest semantic match for "recent work" yet the oldest content, and pure relevance ranking had no recency signal.
Federated recall now blends a node's relevance with a recency score so newer nodes surface: relevance still dominates (a modest 0.25 default), session nodes anchor on their session timestamps (started_at/ended_at), a node dated only in its title (2026-05-18 — …) is anchored on that date, and a genuinely undated node is treated as neutral rather than fresh. Tune or disable it with tesserae ask --recency-weight <0..1> (0 = pure relevance, the previous behavior). Compiled and exported artifacts are unaffected and stay byte-deterministic.
Upgrading from v0.12.x
Drop-in. If you run tesserae engine against many projects, this is a recommended upgrade.