Releases: OrgMentem/zotio
Release list
v0.15.0
Breaking changes
Pre-1.0: breaking changes ship in a minor release. Full detail in CHANGELOG 0.15.0.
- Partial batch failures are no longer success.
items create,collections create, andimport filedecode thefailedmap Zotero returns inside an HTTP 200 and exit 13, naming the source index, status, and message of each rejected element. Scripts that only checked for exit 0 will now see failures they were blind to. import doipreviews by default and requires--yes;--max-changesis checked before the CrossRef request.import file --format csljsonrequires--via connectorinstead of posting untranslated CSL fields that Zotero stores incompletely.collections updatesendsIf-Unmodified-Since-Version, so a stale update fails instead of silently overwriting a concurrent edit.- One writer at a time. Applied writes take an installation lock (
~/.zotio/.writer.lock), or a canonical output-path lock for export snapshots, collection bundles, and vaults. Writers never queue: a second writer in the same scope exits 9 immediately with retry guidance. Reads and previews stay concurrent. See ADR-0005. - MCP results carrying library content are framed as untrusted data with a top-level
_zotio_provenancemarker; result shapes and MIME types are unchanged, but library resources now adopt the 60-KB bound. - MCP
sqlrenders every[]bytecolumn as text. TEXT columns stop arriving as unreadable base64; BLOB columns change from lossless base64 to a possibly lossy string — read them withhex(). zotio watch <resource>watches that resource instead of quietly syncing the whole library each tick.collections bundlefails on a full-text read error instead of writing an incompletesynthesis.mdand exiting 0.zotio-mcpexits 0 on SIGTERM while a client holds the SSE stream; it used to burn the 5-second drain and exit 1.- Source builds require Go 1.26.5 (
go.modis patch-level): 1.26.5 fixes CVE-2026-42505 incrypto/tls. Release artifacts were never affected.
Changelog
Features
- cf043b9: feat(concurrency): enforce the ADR-0005 single-writer contract (@enieuwy)
- 0442b74: feat(concurrency): establish cross-platform single-writer contract (@enieuwy)
- b99bef5: feat(health): color the human health report by severity (@enieuwy)
Fixes
- b942192: fix(cli): correct watch scoping, date/version parsing, tag dedupe, and silent error paths (@enieuwy)
- 1e098d1: fix(cli): honour Zotero batch failures, version preconditions, and the write gate (@enieuwy)
- ea162ec: fix(concurrency): align lock eligibility with effective profiles (@enieuwy)
- 2e1919c: fix(concurrency): close single-writer contract gaps (@enieuwy)
- 0c43453: fix(infra): close context, DOI routing, and privacy review gaps (@enieuwy)
- 79e8816: fix(infra): harden persistence, cancellation, MCP shutdown, and command capture (@enieuwy)
- 47a1b0f: fix(lint): clear golangci-lint findings from the concurrency work (@enieuwy)
- 50686e7: fix(mcp): frame native library data with provenance (@enieuwy)
Documentation
- 98b3e0c: docs: correct the release notes and write contract against the code (@enieuwy)
- a2c8589: docs: cut 0.15.0 (@enieuwy)
- c280cd7: docs: document the winget install path, correct the release runbook (@enieuwy)
- 59e5c96: docs: move preview card to the stats frame (@enieuwy)
- f6912a1: docs: record the concurrency, write-contract, and MCP framing changes (@enieuwy)
- 999d68e: docs: version-less Linux install + static preview card (@enieuwy)
Curated history: CHANGELOG.md · Install: brew install orgmentem/tap/zotio
v0.14.0
Changelog
Features
- 397c469: feat(doctor): report the store's live pragma state, and release-note the WAL change (@enieuwy)
Fixes
- ad54e9e: fix(attachments): bound upload verification to the authorized extent (@enieuwy)
- f0940b5: fix(attachments): verify the uploaded bytes against the authorized digest (@enieuwy)
- 34d95b2: fix(cliutil): guard truncateRunes against a non-positive cap (@enieuwy)
- 6969c8f: fix(cliutil): redact credentials before truncating the error body (@enieuwy)
- 4e707c5: fix(collections): do not treat a blank export page as the end of the collection (@enieuwy)
- 754b6d2: fix(collections): drop the byte-equality page guard, dedupe BibTeX keys (@enieuwy)
- d1b18ad: fix(collections): enforce the blast-radius and destructive gates, not just --yes (@enieuwy)
- 7b023ce: fix(collections): match the established exit code for a gate refusal (@enieuwy)
- 02e3d54: fix(collections): parse BibTeX before rewriting keys, reject any repeated page (@enieuwy)
- ba4dcbf: fix(collections): require --yes before create, update, or delete writes (@enieuwy)
- a3f7dc1: fix(collections): walk every page when exporting a collection (@enieuwy)
- 7018a2e: fix(deliver): clean up the spool on panic, not just on normal return (@enieuwy)
- 128c25f: fix(deliver): unique spool per run, and stop swallowing a zero-byte failure (@enieuwy)
- a70d25c: fix(mcp): bound slow readers and idle connections on the HTTP transport (@enieuwy)
- 19b2e8e: fix(mcp): close the paths that bypassed the outbound boundary (@enieuwy)
- d62cc47: fix(mcp): frame library content as data, not instructions (@enieuwy)
- d7cb047: fix(reading-list): plan add/start/done locally under --dry-run (@enieuwy)
- acc4832: fix(store): stop the read-only DSN trying to convert the journal mode (@enieuwy)
- 8e820b7: fix(store): use the DSN pragma syntax the pinned driver actually implements (@enieuwy)
- 30cc732: fix(workflow): discard the overflow prefix, and finish the release notes (@enieuwy)
- d666a98: fix(workflow): fail a step that grows past the output ceiling instead of OOMing (@enieuwy)
Documentation
Build & CI
- 660fbde: chore(release): prepare v0.14.0 (@enieuwy)
- c21d441: chore(release): re-enable the winget publisher (@enieuwy)
Other
- d12e051: perf(attachments): stop copying the upload payload a second time (@enieuwy)
- cbd0481: perf(attachments): stream the digest and the upload, stop holding the file (@enieuwy)
- ab8e7f7: perf(deliver): stream --deliver output to disk instead of the heap (@enieuwy)
- 1e329ce: perf(mcp): bound mirrored command output at the writer (@enieuwy)
Curated history: CHANGELOG.md · Install: brew install orgmentem/tap/zotio
v0.13.1
Changelog
Fixes
- 91f393e: fix: panic-safe restore of process-global CLI state in MCP mirror and workflow steps (@enieuwy)
Build & CI
- 1a30215: chore(deps): update dependency betterleaks/betterleaks to v1.7.0 (#15) (@renovate-orgmentem[bot])
- 39838a3: chore(release): prepare v0.13.1 (@enieuwy)
- cee72ac: chore: delete retired CLI Printing Press input spec (spec.yaml) (@enieuwy)
- 452012f: ci(docs): install docs toolchain from a hash-pinned lock (@enieuwy)
- 5eda9b4: ci: remove completed formula cleanup (@enieuwy)
Curated history: CHANGELOG.md · Install: brew install orgmentem/tap/zotio
v0.13.0
Changelog
Features
Fixes
Documentation
Build & CI
- 2e80239: chore(release): prepare v0.13.0 (@enieuwy)
- 846294a: ci: formula cleanup tolerates concurrent tap pushes from sibling releases (@enieuwy)
- 636f797: ci: workflow_dispatch recovery path to republish MCP Registry for an existing tag (@enieuwy)
Curated history: CHANGELOG.md · Install: brew install orgmentem/tap/zotio
v0.12.0
Changelog
Fixes
- 6ec89a4: fix: harden error handling across nine paths (@enieuwy)
- 9074395: fix: wrap both errors in defaultDBPath fallback (errorlint) (@enieuwy)
Documentation
- c1198be: docs: changelog for 0.11.1 error-handling fixes (@enieuwy)
- 39d4548: docs: drop internal tooling reference from 0.11.1 changelog (@enieuwy)
- 08e2351: docs: recut pending release as 0.12.0 — degraded-exit changes are breaking, not a patch (@enieuwy)
Build & CI
- 98c8ef5: chore(deps): update actions/checkout digest to 3d3c42e (#13) (@renovate-orgmentem[bot])
- d9a2917: chore(deps): update gcr.io/distroless/static-debian12:nonroot docker digest to f5b485e (#14) (@renovate-orgmentem[bot])
- 2976f7b: chore(deps): update github-actions to v7 (#12) (@renovate-orgmentem[bot])
- 5ee74a6: chore: pre-commit guard against internal tooling names in public prose (@enieuwy)
Curated history: CHANGELOG.md · Install: brew install orgmentem/tap/zotio
v0.11.0
Changelog
Fixes
Documentation
- 9ce52bc: docs(changelog): prepare 0.11.0 release notes (@enieuwy)
- 0d90da3: docs(readme): revise nav strip to Docs: lead-in with five distinct links (@enieuwy)
- c27f550: docs: Homebrew is macOS-only (cask), drop it from the Linux tab (@enieuwy)
- 03a9264: docs: expand install story with per-OS content tabs (@enieuwy)
- 58c06d0: docs: regenerate favicon from current neutral branding (@enieuwy)
- 1773d7c: docs: standardize contributor tier notes/ -> dev/, gitignore dev/scratch/ (@enieuwy)
Build & CI
- b090dec: chore(deps): update dependency zensical to v0.0.51 (#11) (@renovate-orgmentem[bot])
- f261a22: chore(deps): update gcr.io/distroless/static-debian12:nonroot docker digest to aef9602 (#10) (@renovate-orgmentem[bot])
- a0a826e: ci(release): drop stale Homebrew formula after cask publishes (@enieuwy)
- 9e3feb9: ci: layered local hooks, race detection, cross-build matrix, release test gate, weekly vuln scan (@enieuwy)
Other
- ba7e2e8: Fix 19 glean P2 bug findings (waves from runs 2026-07-02..07-19) (@enieuwy)
- 7ce2ee3: Fix 39 glean static-audit findings (run 20260719T035710) (@enieuwy)
- 0867af3: Fix local resolver: unescape get-by-ID path segment, reject /collections/top as local scope (@enieuwy)
- 82189ca: build: migrate Homebrew formula to cask (brews -> homebrew_casks) (@enieuwy)
- f388f3b: ci+hooks: review fixes — split-safe gofmt loop, merge/am identity wrappers, arm64 cross-build (@enieuwy)
Curated history: CHANGELOG.md · Install: brew install orgmentem/tap/zotio
v0.10.0
Changelog
Features
- 244f051: feat: animate the README wordmark (@enieuwy)
- 8a6ce0f: feat: opt-in daily update discovery surfaced in zotio doctor (@enieuwy)
- 74efc27: feat: propagate command context into client HTTP work on the CLI path (@enieuwy)
- 61e06fd: feat: split ring/letterform brand color, mirroring papio (@enieuwy)
Fixes
- 8628287: fix(lint): clear pre-existing staticcheck failures blocking CI (@enieuwy)
- 7402217: fix(mcp): route capabilities and analytics output through the command writer (@enieuwy)
- a0001df: fix: correctness and concurrency-safety fixes across store, cli, cache, mcp (@enieuwy)
- 7407788: fix: make local-mirror writes version-monotonic (@enieuwy)
- dcb0fe8: fix: surface swallowed errors across read, write, sync, and MCP paths (@enieuwy)
- 7858a81: fix: surface swallowed errors and propagate context across sync/client/store (@enieuwy)
Documentation
- 6adae8f: docs(changelog): prepare 0.10.0 release notes (@enieuwy)
- 4e13dba: docs(readme): last quick-link points to Documentation (docs home) (@enieuwy)
- 120e9f9: docs: bring guides up to date with 0.9.0 (workflows, MCP surface, ADR-0003) (@enieuwy)
- cdc4466: docs: cross-reference papio, the acquisition-side sister project (@enieuwy)
- c45fdf7: docs: lead the workflows guide with use-case recipes (@enieuwy)
- 150c764: docs: point release coordination at papio's shared release skill (@enieuwy)
Curated history: CHANGELOG.md · Install: brew install orgmentem/tap/zotio
v0.9.0
Changelog
Features
- db0a746: feat(cli): collection filing, exact-key missing-pdf scope, arXiv parent find (@enieuwy)
- 70509fd: feat(cli): exact-key scope for items enrich (@enieuwy)
- d549e4d: feat(cli): library prisma — PRISMA 2020 identification-stage reporting (@enieuwy)
- d8992bd: feat(cli): linked-file attachment mode and auditable duplicate no-op in import apply (@enieuwy)
- f5177f8: feat(cli): scoped enrichment queue and indexed collection-aware missing-pdf query (@enieuwy)
- feabb94: feat(cli): stored attachments for existing items via Web API upload protocol (@enieuwy)
- b732ee8: feat(cli): transactional workflow run — one plan, one approval, one journal run-id, resume (@enieuwy)
- 943e99f: feat(cli): workflow expressiveness — vars, inter-step dataflow, conditionals (@enieuwy)
- b22b318: feat: workflow triggers and validated MCP inline submission (@enieuwy)
Fixes
- 954eb2b: fix(cli): place container titles in item-type-valid fields (@enieuwy)
- 7be7eb7: fix(cli): send Zotero collection creates as the required JSON array (@enieuwy)
- 1dee463: fix(deps): update module golang.org/x/text to v0.40.0 (#9) (@renovate-orgmentem[bot])
- 62a7cca: fix: clear golangci-lint findings for release (@enieuwy)
- b085c89: fix: harden vault sync and local artifacts (@enieuwy)
- 51cd2a5: fix: resolve pre-release review findings across workflow, MCP, and features (@enieuwy)
Documentation
- 7a4af6e: docs: cut 0.9.0 changelog (@enieuwy)
- 6d5810a: docs: regenerate command reference for --card-style (@enieuwy)
Build & CI
- 9d2ae7a: chore(deps): update golang/govulncheck-action digest to 032d455 (#8) (@renovate-orgmentem[bot])
Curated history: CHANGELOG.md · Install: brew install orgmentem/tap/zotio
v0.8.0
Changelog
Features
- 1e05cb3: feat(cli): colored, width-aligned human output by default (@enieuwy)
- f261d5c: feat(cli): redesign wrapped SVG share card (@enieuwy)
- 328757b: feat(cli): styled stats bars and severity-colored tables; re-record demos (@enieuwy)
- e10a784: feat(cli): wrapped card styles with animated cycle; README shows card only (@enieuwy)
- c44c76d: feat(cli): wrapped year-in-review redesign; style remaining table paths (@enieuwy)
- 5cdb5b1: feat(items): add 'items similar' and enrich OA-PDF download modes (@enieuwy)
Fixes
- f39e902: fix(cli): route which through styled table; vary tour closer goal (@enieuwy)
- 85b11e4: fix(release): verify publisher and stamp containers (@enieuwy)
- 9cc1644: fix(security): enforce outbound redirect boundaries (@enieuwy)
- 938dc8a: fix(store): reconcile trashed item lifecycle (@enieuwy)
- 467c0d7: fix(store): share resource ID-override map between sync and store (@enieuwy)
Documentation
- 4e67bbb: docs(changelog): record audit-driven fixes (@enieuwy)
- 0af8d0f: docs: add Glama score badge (@enieuwy)
- 4f63f07: docs: record MCP-registry competitive scan; cite studied prior art (@enieuwy)
Build & CI
- 41250a6: chore(deps): update dependency python to 3.14 (#7) (@renovate-orgmentem[bot])
- 7606e0e: chore(deps): update dependency zensical to v0.0.50 (#6) (@renovate-orgmentem[bot])
- 2d2e10d: chore(release): prepare v0.8.0 (@enieuwy)
- 8b6f0bc: chore: add Dockerfile for Glama release build (@enieuwy)
- 51f88d0: chore: add glama.json for MCP directory claim (@enieuwy)
- ec28679: ci: auto-publish to Official MCP Registry on release (@enieuwy)
Other
Curated history: CHANGELOG.md · Install: brew install orgmentem/tap/zotio
v0.7.0
Changelog
Features
Fixes
- 5dccfd4: fix(cli): dogfood fixes from a live 804-item library (@enieuwy)
- 6319b47: fix(mcp): tighten golden-file write perms to 0600 (gosec G306) (@enieuwy)
Documentation
- 51f8ed3: docs(changelog): cut 0.7.0 (@enieuwy)
- c4c66ec: docs(notes): add CI-green pre-tag gate to release runbook (@enieuwy)
- 2b3d388: docs(readme): move live-bibliography badge from header into CI section prose (@enieuwy)
- 39e0f5e: docs: codify MCP single-surface invariant and release version-stamp check (@enieuwy)
Build & CI
- 4419140: chore(release): author winget commits as the CLA-signed account (@enieuwy)
- 318f75d: chore: go mod tidy (promote golang.org/x/text to direct) (@enieuwy)
Other
Curated history: CHANGELOG.md · Install: brew install orgmentem/tap/zotio