Skip to content

Releases: OrgMentem/zotio

v0.15.0

Choose a tag to compare

@github-actions github-actions released this 01 Aug 15:57

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, and import file decode the failed map 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 doi previews by default and requires --yes; --max-changes is checked before the CrossRef request.
  • import file --format csljson requires --via connector instead of posting untranslated CSL fields that Zotero stores incompletely.
  • collections update sends If-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_provenance marker; result shapes and MIME types are unchanged, but library resources now adopt the 60-KB bound.
  • MCP sql renders every []byte column as text. TEXT columns stop arriving as unreadable base64; BLOB columns change from lossless base64 to a possibly lossy string — read them with hex().
  • zotio watch <resource> watches that resource instead of quietly syncing the whole library each tick.
  • collections bundle fails on a full-text read error instead of writing an incomplete synthesis.md and exiting 0.
  • zotio-mcp exits 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.mod is patch-level): 1.26.5 fixes CVE-2026-42505 in crypto/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


Curated history: CHANGELOG.md · Install: brew install orgmentem/tap/zotio

v0.14.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 07:33

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

  • 95f1a8c: docs(changelog): correct the WAL guidance and add the missing entries (@enieuwy)

Build & CI

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

Choose a tag to compare

@github-actions github-actions released this 27 Jul 06:38

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

Choose a tag to compare

@github-actions github-actions released this 23 Jul 01:20

Changelog

Features

Fixes

Documentation

  • 23d53b2: docs: brew is macOS-only; add Linux deb/rpm/apk install path (@enieuwy)

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

Choose a tag to compare

@github-actions github-actions released this 21 Jul 09:17

Changelog

Fixes

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

Choose a tag to compare

@github-actions github-actions released this 19 Jul 19:42

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

Choose a tag to compare

@github-actions github-actions released this 18 Jul 09:26

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

Choose a tag to compare

@github-actions github-actions released this 15 Jul 08:02

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

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

Choose a tag to compare

@github-actions github-actions released this 11 Jul 22:19

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

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

Choose a tag to compare

@github-actions github-actions released this 10 Jul 11:17

Changelog

Features

  • 72d5d5e: feat(mcp): version-stamp zotio-mcp and gate releases on it (@enieuwy)

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

  • 41cacf1: refactor(mcp)!: retire the typed spec-endpoint tool surface (ADR-0003) (@enieuwy)

Curated history: CHANGELOG.md · Install: brew install orgmentem/tap/zotio