Changelog
zot 0.5.0
-
zotLocalQuery()waits for Zotero to finish writing. A read retries for up to 10 seconds while the desktop client holds its write lock, instead of failing at once with “database is locked”, and fails with azotLocalErrornaming that wait when the lock outlasts it. The read-only connection no longer tries to set SQLite’s synchronous mode, which raised the warning “Couldn’t set synchronous mode”.zotLocalItems(),zotLocalRecords(),zotLocalFiles()andzotStatus()read through it. - Removes
ztSemantic(), thezot semanticcommand and the semantic plane ofzotStatus()andzot doctor;zotStatus()loses itspythonPathanddbPatharguments and reports four planes. The function queried an index built by the externalzotero-mcp-serverthrough that tool’s Python interpreter, which is no longer installed. The package no longer declares a Python system requirement. - Changes the address of the public documentation to https://kanameishi.github.io/zot/ in the
URLfield, the package help page, the README and the citation.
zot 0.4.0
-
ztAttach()chooses the content type as Zotero’s desktop client does: an extension table that covers Markdown, BibTeX, plain text, HTML, CSV, JSON, office formats and images, then a text/binary sniff of the first 1024 bytes. Text files are no longer stored asapplication/octet-stream, atext/*file of valid UTF-8 is stored withcharset = "utf-8", and an empty file is refused with azotPlanError. - The guarded flow gains the
attachaction:zotPreview()validates attach rows and reports the bytes per library incounts,zotExecute()creates the attachment item, saves its key ascreated, uploads the file and confirms it, repeating only the upload when resumed, and refuses a file changed since approval.zotVerify(full = TRUE)re-reads attach rows. - Adds
ztAttachPlan(), which builds an attach plan from local files and omits files already attached to the same parent. -
zotConfig()accepts afileTransport, whichztAttach()and the attach action use, asperformerreplaces the request transport. -
zotExecute()writes new ledgers withschema = 2and identifies existing items aslibrary:key. A ledger without a schema keeps its key-only format when every id selects exactly one plan row; an ambiguous one is refused without rewriting it. -
zotRequest()retries a POST only after rate limiting (HTTP 429). A server failure on POST is returned without another write, andzotExecute()keeps that outcome as an attempt; GET and versioned PATCH keep their retries on HTTP 500, 502 and 503. -
zotVerify()also returnsunfinished, the plan ids without a done entry, andcomplete, whether all plan rows are done and none of the checked rows is unconfirmed. - The package plane of
zotStatus()gives the version without the installation path. - Adds the vignette “The zot command line”.
zot 0.3.0
-
zotPreview()refuses three plan shapes that broke execution: a create row carrying an item key, the same item twice in one library, and a payload carryingkeyorversion. Each made a batch fail or repeat silently. -
zotExecute()recalculates the plan’s digest, so a preview edited after its approval is refused instead of written under the old consent. -
zotExecute()records every row as an attempt before its effect and writes the ledger atomically, so an interrupted batch stays resumable and stops on the row whose outcome is unknown with azotLedgerError. - Verification compares
collections,tagsandrelationsas sets, so a read-back differing only in order no longer reports a successful write as failed. -
zotVerify(full = TRUE)re-reads every completed row, including creates and Trash, and returns the ledger ids that did not confirm inunconfirmed.
zot 0.2.0
- Adds batch files:
zotWriteBatch()andzotReadBatch()persist plans, previews and approvals as JSON and recalculate a preview’s digest on read. - Adds catalog reads:
zotLibraries(),zotCollections()with paths,zotItems()by key in batches of fifty, andzotListItems(), a bounded listing that refuses to exceed a declared size and detects a library version change between pages. - Adds local reads:
zotLocalRecords()with the identity fields of every record andzotLocalFiles()locating attachment files in local storage. - Adds identity helpers:
zotIdentity()maps any record shape to the fieldszotSameItem()compares, andztMatches()judges candidates against a set of records. - Adds
ztTemplate()andztCheckPayload()to validate a create payload against its item type template, andzotStatus()to probe the package, credentials, Web API, local database and semantic sidecar. - Adds the vignette “Install zot from source”.
zot 0.1.2
CRAN release: 2026-09-22
- Removes the redundant “from R” suffix from the package title.
- Makes the local item example self-contained and executable, and places the optional semantic-index example in
\donttest{}with prerequisite checks. - Extends metadata normalization to recognize multiple known source labels within one parenthetical expression, while preserving other text in parentheses.
- Improves configuration errors to identify missing arguments and their environment variables, and documents R startup configuration.
zot 0.1.1
- Changes
zotConfig()to accept a Zotero user identifier and API key explicitly, with defaults fromZOTERO_LIBRARY_IDandZOTERO_API_KEY. - Revises the package documentation to distinguish plan construction, approval records, direct write functions, ledger execution, and sampled patch verification.
- Documents interactive, scripted, automated, and agent-driven use through the same R interface.
zot 0.1.0
Initial release
- Provides Zotero Web API requests with pagination, retry handling, and versioned patch operations.
- Provides batch previews, approval records, resumable execution ledgers, and sampled verification of completed patches.
- Provides read-only local SQLite access and optional semantic-index queries.
- Provides metadata normalization, retitling and refiling plans, collection creation, bibliographic comparison, Crossref mapping, cross-library move plans, census, and file attachments.