v0.3.11
Stabilization release.
- 📸 Queued/re-sent Telegram media are processed exactly once: persistent file_unique_id cache + completed update ledger end the replay loop (#119) — no duplicate blobs, paid vision/transcription calls or repeated turns.
- 🌙 Nightly rollup never spawns a second vault writer: a fresh retry requires terminal proof that the old turn stopped.
- 📬 Telegram offset cursor is fail-closed and written atomically; a corrupted file no longer discards the pending backlog.
- ⏰ Schedule migration hardened: per-key seeding, owned reservations, lock-checked status writes, teardown only after committed state.
- 🧠 Frontmatter parsers (TS + Python) preserve multi-paragraph values; timezone typos no longer brick every turn; run-status distinguishes corruption from fs errors; CORE clamp keeps bullets valid.
- 📄 New
documentsskill (PDF/DOCX/XLSX via pdftotext/pandoc/openpyxl) with optional vault library import. - 🛡️ Media error replies redact the bot token; security skill now honestly describes the actual runtime; docs synchronized with reality; PHILOSOPHY.md gains boundary rules.
Full details in CHANGELOG.md. Update: iva update or the /update button in Telegram.