Merge pull request #1322 from vrtmrz/1_0_45

Releasing 1.0.45
This commit is contained in:
vorotamoroz authored and GitHub committed 2026-11-06 01:08:14 +09:00
commit 192d3ab39f
18 files changed
+157 -107

No files matched your search

+1 -1
View File
@@ -277,7 +277,7 @@ Commonlib owns the typed English fallback for messages requested by its services
- New path boundaries use `FilePath`, `DocumentPath`, `StoragePath`, and domain-specific `PathComparisonKey` from `@vrtmrz/livesync-commonlib/storage`. Original paths retain spelling; comparison keys are never converted back into filenames.
- Parse original document input and route its namespace before storage access. `splitDocumentPath` and `joinDocumentPath` retain one recognised namespace; `DocumentPath` excludes legacy comparison keys. Existing `FilePathWithPrefix`, `FilePathWithPrefixLC`, and `DocumentID` remain at compatibility boundaries.
- The CLI uses Commonlib's `UnicodeResolvingNodeStorageAdapter` and one strict resolver per NFC directory scan. Only absence becomes a missing file; permission and enumeration failures propagate. Obsidian keeps its own Vault APIs and alias guard, whose fixed case-insensitive NFC policy is independent of the selected database identity mode.
- The [Commonlib storage-path design](https://github.com/vrtmrz/livesync-commonlib/blob/main/docs/design_docs/storage_path_resolution.md) and [ADR](https://github.com/vrtmrz/livesync-commonlib/blob/main/docs/adr/2026_11_shared_storage_path_resolution.md) define the contract published in Commonlib `0.3.1`. LiveSync's CLI resolver and Obsidian comparison-helper adoption remain unreleased. WebApp and Bridge NFC enablement remain separate work.
- The [Commonlib storage-path design](https://github.com/vrtmrz/livesync-commonlib/blob/main/docs/design_docs/storage_path_resolution.md) and [ADR](https://github.com/vrtmrz/livesync-commonlib/blob/main/docs/adr/2026_11_shared_storage_path_resolution.md) define the contract published in Commonlib `0.3.1`. LiveSync's CLI resolver and Obsidian comparison-helper adoption are included in Self-hosted LiveSync `1.0.45` with Commonlib `0.3.2`. WebApp and Bridge NFC enablement remain separate work.
### Logging & Debugging
+7 -4
View File
@@ -13,9 +13,10 @@ Accepted on 2026-10-17. Unicode NFC path identity was released in Self-hosted
LiveSync 1.0.38 with Commonlib 0.1.42. Local validation evidence and platform
limits are recorded in the design document.
The maintained design now also describes an unreleased Journal and P2P
extension and the move to General Settings. The decision below retains the
initial CouchDB support boundary and original acceptance date.
The maintained design also records the Journal and P2P extension, the move to
General Settings, and new-environment defaults included in Self-hosted LiveSync
1.0.45 with Commonlib 0.3.2. The decision below retains the initial CouchDB
support boundary and original acceptance date.
## Context
@@ -106,7 +107,9 @@ preflight uses the supported host listing and local Metadata. It refuses
ambiguous file or parent-directory candidates before database reconstruction;
it does not claim to detect physical aliases which a host does not expose.
## Unreleased extension: defaults for new environments
<a id="unreleased-extension-defaults-for-new-environments"></a>
## Journal and P2P extension: defaults for new environments
The later Journal and P2P extension uses NFC for newly generated CLI settings
and Obsidian manual onboarding. It retains legacy defaults for stored settings
+7 -7
View File
@@ -36,13 +36,13 @@ The central replication gate, mismatch dialogues, and RedFlag Fetch preparation
consume the same effective differences. The P2P transport retains its separate
policy: ordinary representation and case differences warn without rejecting
transfer, while its existing passphrase and peer checks still apply. Path
identity has a separate required check: both peers must use the same version,
and a version mismatch rejects before replication. Commonlib `0.3.0` includes
NFC protocol support for Journal and P2P, but the matching CLI and Obsidian host
adoption remains an unreleased extension tracked by
[the Unicode path identity design](unicode_path_identity.md). Sharing
assessment does not make the central replication policy appropriate for every
transport.
identity has a separate required check: both peers must use the same
version, and a version mismatch rejects before replication. Commonlib `0.3.0`
includes NFC protocol support for Journal and P2P. Matching CLI and Obsidian
host adoption is included in Self-hosted LiveSync `1.0.45` with Commonlib
`0.3.2`, as described in the [Unicode path identity
design](unicode_path_identity.md). Sharing assessment does not make the central
replication policy appropriate for every transport.
## Host responsibilities
+33 -26
View File
@@ -25,19 +25,22 @@ release.
Commonlib `0.3.0` publishes the Journal and P2P path-identity protocol
extension. The matching Self-hosted LiveSync CLI and Obsidian host adoption,
including moving the setting to General Settings and defaulting new
synchronisation environments to NFC, remains an unreleased candidate tracked
by [pull request #1309](https://github.com/vrtmrz/obsidian-livesync/pull/1309).
The original dates and reviewed versions above remain the historical baseline.
synchronisation environments to NFC, is included in Self-hosted LiveSync
`1.0.45` with Commonlib `0.3.2`. The development candidate was tracked by [pull request #1309](https://github.com/vrtmrz/obsidian-livesync/pull/1309);
the original dates and reviewed versions above remain the historical baseline.
## Unreleased shared storage boundary
<a id="unreleased-shared-storage-boundary"></a>
## Shared storage boundary
Commonlib `0.3.1` publishes the shared storage-path contract, including
its Unicode resolver and typed physical-I/O ports. The LiveSync candidate
adopts the shared resolver and typed physical-I/O ports in the CLI. Obsidian
adopts shared namespace and comparison helpers while retaining its Vault APIs
and existing alias-guard policy. Each NFC scan retains one comparison-policy
snapshot; directory and permission errors propagate instead of producing a
successful partial scan. LiveSync's host adoption remains unreleased. The
its Unicode resolver and typed physical-I/O ports. The LiveSync CLI adopts
the shared resolver and typed physical-I/O ports, while Obsidian adopts
shared namespace and comparison helpers and retains its Vault APIs and
existing alias-guard policy. These host changes are included in Self-hosted
LiveSync `1.0.45` with Commonlib `0.3.2`. Each NFC scan retains one
comparison-policy snapshot; directory and permission errors propagate
instead of producing a successful partial scan. The
[developer guide](../../devs.md#file-path-handling) links the Commonlib design
and ADR.
@@ -47,7 +50,7 @@ and ADR.
| --- | --- |
| Logical identity | Version `1` uses NFC for Metadata ID and path comparison keys. Existing case handling remains a separate rule. Missing and `0` retain legacy behaviour. |
| Stored paths and content | Keep the spelling in `Metadata.path` and existing physical Vault names. NFC does not change Chunk IDs or content. |
| Maintained hosts and transports | CLI and Obsidian with CouchDB are released; their Journal and P2P host adoption remains unreleased. See the support matrix below. |
| Maintained hosts and transports | CLI and Obsidian with CouchDB were first released in Self-hosted LiveSync `1.0.38`; their Journal and P2P host support is included in `1.0.45` with Commonlib `0.3.2`. See the support matrix below. |
| Other consumers | Direct-file access and other host adapters are covered separately below; shared path primitives alone do not enable NFC in an application. |
| Migration | Rebuild both databases from one complete authoritative Vault, then Fetch each remaining client. Do not rewrite IDs or merge histories in place. |
@@ -84,9 +87,9 @@ store.
## Initial settings and existing environments
The unreleased extension uses version `1` for newly generated CLI settings and
Obsidian manual onboarding. Stored settings and old Setup URIs with no path
version retain `0`. Commonlib's shared settings defaults remain `0`, so this
Self-hosted LiveSync `1.0.45` uses version `1` for newly generated CLI settings
and Obsidian manual onboarding. Stored settings and old Setup URIs with no
path version retain `0`. Commonlib's shared settings defaults remain `0`, so this
host policy does not extend to WebApp or WebPeer. An absent settings file alone
does not establish that an existing local database is new.
@@ -200,8 +203,9 @@ preflight failure. If a required setup decision cannot be made in a headless
CLI invocation, the command must fail with a clear remediation message rather
than report success after cancellation.
The unreleased CLI correction for #1304 always retains the Rebuilder's selected
local database suffix after successful `fetch` or `rebuild`. `--write-settings`
The CLI correction for #1304 is included in Self-hosted LiveSync `1.0.44` and
always retains the Rebuilder's selected local database suffix after successful
`fetch` or `rebuild`. `--write-settings`
still controls other lasting settings changes. Earlier versions required that
option to retain the database selection; omitting it could reopen the previous
database on the next invocation. The examples retain the option for compatibility.
@@ -232,11 +236,11 @@ updates and deletions.
## Compatibility matrix
| Host or API | Published baseline | Unreleased or host-specific status |
| Host or API | Published baseline | Current support or host-specific status |
| --- | --- | --- |
| CLI and Obsidian with CouchDB | NFC identity is supported from Self-hosted LiveSync `1.0.38` with Commonlib `0.1.42`. | Commonlib `0.3.1` publishes the shared storage-path contract. LiveSync's CLI adoption of the shared resolver and typed physical-I/O ports, and its Obsidian adoption of shared namespace and comparison helpers, remain unreleased. |
| CLI and Obsidian with Journal | Commonlib `0.3.0` publishes the NFC protocol support. | Matching LiveSync host adoption remains an unreleased candidate tracked by [pull request #1309](https://github.com/vrtmrz/obsidian-livesync/pull/1309). Update and migrate every client before using version `1`. |
| CLI and Obsidian with P2P | Commonlib `0.3.0` publishes the NFC protocol support. | Matching LiveSync host adoption remains an unreleased candidate. All peers must use the same path version; P2P warns and continues for ordinary representation or case differences. |
| CLI and Obsidian with CouchDB | NFC identity is supported from Self-hosted LiveSync `1.0.38` with Commonlib `0.1.42`. | Commonlib `0.3.1` publishes the shared storage-path contract; LiveSync's CLI resolver and Obsidian namespace and comparison-helper adoption are included in Self-hosted LiveSync `1.0.45` with Commonlib `0.3.2`. |
| CLI and Obsidian with Journal | Commonlib `0.3.0` publishes the NFC protocol support. | Matching host adoption is included in Self-hosted LiveSync `1.0.45` with Commonlib `0.3.2`. Update and migrate every client before using version `1`. |
| CLI and Obsidian with P2P | Commonlib `0.3.0` publishes the NFC protocol support. | Matching host adoption is included in Self-hosted LiveSync `1.0.45` with Commonlib `0.3.2`. All peers must use the same path version; P2P warns and continues for ordinary representation or case differences. |
| Bridge | The published baseline uses Legacy version `0`. | The Bridge integration is an unreleased candidate with explicit per-peer opt-in to version `1`; every peer in a group must use the same version. Its ordinary case mismatch check remains enabled unless the Bridge-wide `disableCheckingConfigMismatch: true` override disables that case check. The override does not bypass a path-version mismatch. |
| `DirectFileManipulator` | Commonlib `0.3.1` accepts explicit `pathNormalizationVersion` values `0` or `1`, defaults to Legacy (`0`), and rejects a populated database in the opposite mode. | This admission setting does not resolve physical paths; callers own physical path resolution and migration. |
| WebApp | Legacy version `0` only. | WebApp remains Legacy-only and rejects an explicit version `1` at startup. The browser resolver primitive does not enable NFC in WebApp. |
@@ -298,8 +302,9 @@ The implementation acceptance matrix covers:
- URI round trips, checkpoint invalidation across path versions, and
explicit Legacy/NFC admission by `DirectFileManipulator` in Commonlib `0.3.1`,
including rejection of a populated database in the opposite mode. Journal and
P2P protocol support is published in Commonlib `0.3.0`, while matching CLI and
Obsidian host adoption and end-to-end checks remain unreleased;
P2P protocol support is published in Commonlib `0.3.0`; matching CLI and
Obsidian host adoption is included in Self-hosted LiveSync `1.0.45` with
Commonlib `0.3.2`;
- refusal for ambiguous file or parent-directory candidates before local or
remote reset, preserving both databases on rejection, within the paths
returned by each host's supported listing; and
@@ -339,11 +344,13 @@ the current NFC document, its active state, and its stored path. The existing
content, creation-time, physical-name, update, and deletion checks also passed.
### Unreleased Journal and P2P validation
<a id="unreleased-journal-and-p2p-validation"></a>
The extension was initially checked on Linux with a locally packed Commonlib
`0.2.3` candidate and real Obsidian `1.12.7`. The Self-hosted LiveSync extension
remains unreleased. The initial checks covered:
### Journal and P2P validation evidence
The host adoption is included in Self-hosted LiveSync `1.0.45` with Commonlib
`0.3.2`. Initial checks were run on Linux with a locally packed Commonlib
`0.2.3` candidate and real Obsidian `1.12.7`. They covered:
- real S3-compatible Journal transfer with and without E2EE and Path
Obfuscation, including restart, logical rename and deletion, both conflict
+4 -3
View File
@@ -2,9 +2,10 @@
Implementation note: the receive-failure correction and single-Journal skip
API are published in [Commonlib 0.3.2](https://github.com/vrtmrz/livesync-commonlib/releases/tag/0.3.2).
The Self-hosted LiveSync host action remains unreleased. The owning contract
is Commonlib's
[Journal receive failures and recovery](https://github.com/vrtmrz/livesync-commonlib/blob/main/docs/journal-receive-recovery.md).
The Self-hosted LiveSync UI and CLI recovery actions are included in
Self-hosted LiveSync 1.0.45 with Commonlib 0.3.2. The owning contract is in
Commonlib's [Journal receive failures and
recovery](https://github.com/vrtmrz/livesync-commonlib/blob/main/docs/journal-receive-recovery.md).
The receiver acknowledges successful processing, stops on failure by default,
and retries from that Journal with the same database. Explicit skipping does
not establish Vault reflection success. The host action names one stopped
+1 -1
View File
@@ -51,7 +51,7 @@ Compare the recovered files with the preserved originals, including the affected
## Migrate to Unicode NFC path identity
Use this coordinated migration when CLI and Obsidian clients should identify composed and decomposed Unicode spellings as the same path. Existing settings and old Setup URIs retain version `0`, which preserves legacy identity. The unreleased extension defaults new CLI settings and Obsidian manual onboarding to version `1`; this does not migrate an existing database. CouchDB support is released; Object Storage and P2P support belong to the unreleased extension described in the [Unicode path identity design](design_docs/unicode_path_identity.md).
Use this coordinated migration when CLI and Obsidian clients should identify composed and decomposed Unicode spellings as the same path. Existing settings and old Setup URIs retain version `0`, which preserves legacy identity. Self-hosted LiveSync `1.0.45` defaults new CLI settings and Obsidian manual onboarding to version `1`; this does not migrate an existing database. CouchDB support was first released in `1.0.38`; Object Storage and P2P support are included in `1.0.45` with Commonlib `0.3.2`, as described in the [Unicode path identity design](design_docs/unicode_path_identity.md).
This migration reconstructs the databases from one authoritative Vault. It does not rewrite document IDs in place or rename files.
+31
View File
@@ -2,6 +2,37 @@
This document contains earlier published releases from the 1.0 line of the [current Self-hosted LiveSync release history](../../updates.md). Beta and release-candidate builds published before 1.0.0 are recorded in the [1.0 preview history](1.0-previews.md). Earlier release lines continue in the [0.25 history](0.25.md) and the [legacy history](legacy.md).
## 1.0.39
20th October, 2026
I have been finding troubleshooting difficult, so I decided to go back to basics and prepare the tools we need.
### Synchronisation
#### Fixed
- We can migrate to NFC path identity when deletion or rename history would otherwise block Rebuild or Fetch. (#1259)
- Logical deletions without unresolved conflicts no longer block operations which replace the local database. Conflicting histories and ambiguous current files still require review.
### Diagnostics
- We can inspect file differences and current conflicts across the local database, CouchDB, and the Vault without changing databases or settings.
- Integrity inspection compares Metadata for normal files and checks content for suspect groups. **Include remote database** is enabled by default and can be cleared for one run. Reports distinguish an excluded remote from an unavailable source and retain the evidence collected so far.
- We can share reports using pseudonyms and find the affected files locally for follow-up.
- Integrity and Usage offer original names or pseudonyms before each run, and omit file contents and credentials in both modes. Path pseudonyms use a random public salt for each report; revision pseudonyms retain their generation number.
- The Hatch lookup searches current Vault paths and local Metadata for normal files. It preserves separate document IDs for the same path and can prepare a report for the selected document using the original salt. Public salts permit guessed-path checks.
- We can follow progress in large inspections and stop work when enough evidence has been collected.
- Integrity shows counts and a gauge for each stage, reduces remote requests with bulk reads and bounded concurrency, and logs read and request timings. Usage shows revision discovery with a growing total, followed by cancellable accounting.
- Closing a follow-up dialogue stops further reads after the active read settles. Complete Usage reports retain the existing TSV columns; partial reports use JSON to retain their status and reasons.
- We can read and share large Integrity reports more easily.
- Compact Markdown retains every observation and its follow-up references, with state counts, a review index, and a field guide. It includes available size, modification-time, Chunk-reference, and case/NFC evidence without additional database or Vault reads. JSON retains the full structure.
- Markdown reports use a collapsible code block for sharing in issues. Review candidates indicate where to investigate; they do not establish corruption, and unchecked content remains distinct from healthy content.
- We can find reporting actions more easily in Hatch and keep report controls visible in smaller windows.
- The five reporting tools are grouped separately from checks, recovery, and reset operations. Name and format choices remain visible, and the report preview resizes around the controls.
- We can request and provide targeted troubleshooting evidence through the issue-reporting guide.
- Direct links cover Integrity, Usage, pseudonym lookup, and follow-up reports, with request examples for issue discussions.
## 1.0.38
17th October, 2026
+1 -1
View File
@@ -242,7 +242,7 @@ Show verbose log. Please enable when you report the logs
Setting key: pathNormalizationVersion
Version `0` preserves legacy file identity. Existing settings and Setup URIs which omit this field retain version `0`. New CLI settings and Obsidian manual onboarding use version `1` in the unreleased extension. On first manual setup or an unconfigured CLI's initial Fetch, an existing CouchDB or Object Storage declaration takes precedence; an unavailable or unsupported declaration stops setup. P2P Setup URIs carry the selected version; manual P2P setup requires matching settings on every peer. Version `1` uses Unicode NFC when deriving document IDs, so equivalent composed and decomposed paths identify the same file across the CLI and Obsidian. Existing physical file names are retained. CouchDB support is released. The unreleased extension also supports Object Storage and P2P for the maintained CLI and Obsidian hosts. This is a common local database setting, independently of the active transport.
Version `0` preserves legacy file identity. Existing settings and Setup URIs which omit this field retain version `0`. New CLI settings and Obsidian manual onboarding use version `1` in Self-hosted LiveSync `1.0.45`. On first manual setup or an unconfigured CLI's initial Fetch, an existing CouchDB or Object Storage declaration takes precedence; an unavailable or unsupported declaration stops setup. P2P Setup URIs carry the selected version; manual P2P setup requires matching settings on every peer. Version `1` uses Unicode NFC when deriving document IDs, so equivalent composed and decomposed paths identify the same file across the CLI and Obsidian. Existing physical file names are retained. CouchDB support was first released in Self-hosted LiveSync `1.0.38`. Object Storage and P2P support for the maintained CLI and Obsidian hosts is included in Self-hosted LiveSync `1.0.45` with Commonlib `0.3.2`. This is a common local database setting, independently of the active transport.
Version `1` requires a coordinated migration: set it on the source client before Rebuild, then set it on each remaining client before Fetch. Changing the setting alone does not migrate existing Metadata. Follow [Migrate to Unicode NFC path identity](recovery.md#migrate-to-unicode-nfc-path-identity) for the complete procedure. Do not resume a version `0` client against the migrated remote.
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "obsidian-livesync",
"name": "Self-hosted LiveSync",
"version": "1.0.44",
"version": "1.0.45",
"minAppVersion": "1.7.2",
"description": "Community implementation of self-hosted livesync. Reflect your vault changes to some other devices immediately. Please make sure to disable other synchronize solutions to avoid content corruption or duplication.",
"author": "vorotamoroz",
+5 -5
View File
@@ -1,12 +1,12 @@
{
"name": "obsidian-livesync",
"version": "1.0.44",
"version": "1.0.45",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "obsidian-livesync",
"version": "1.0.44",
"version": "1.0.45",
"license": "MIT",
"workspaces": [
"src/apps/cli",
@@ -11660,7 +11660,7 @@
},
"src/apps/cli": {
"name": "self-hosted-livesync-cli",
"version": "1.0.44-cli",
"version": "1.0.45-cli",
"dependencies": {
"@aws-crypto/sha256-js": "5.2.0",
"chokidar": "^4.0.0",
@@ -11686,7 +11686,7 @@
},
"src/apps/webapp": {
"name": "livesync-webapp",
"version": "1.0.44-webapp",
"version": "1.0.45-webapp",
"dependencies": {
"octagonal-wheels": "0.1.56"
},
@@ -11698,7 +11698,7 @@
}
},
"src/apps/webpeer": {
"version": "1.0.44-webpeer",
"version": "1.0.45-webpeer",
"dependencies": {
"octagonal-wheels": "0.1.56"
},
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "obsidian-livesync",
"version": "1.0.44",
"version": "1.0.45",
"description": "Reflect your vault changes to some other devices immediately. Please make sure to disable other synchronize solutions to avoid content corruption or duplication.",
"main": "main.js",
"type": "module",
+3 -2
View File
@@ -446,8 +446,9 @@ The CLI uses the same settings format as the Obsidian plug-in. Create a `.livesy
#### Unicode path identity
The `pathNormalizationVersion` setting controls how file paths identify
Metadata documents. CouchDB support is released; the unreleased extension also
supports Object Storage and P2P. An absent value or `0` keeps the legacy
Metadata documents. CouchDB support was first released in Self-hosted LiveSync
`1.0.38`; Object Storage and P2P support is included in Self-hosted LiveSync
`1.0.45` with Commonlib `0.3.2`. An absent value or `0` keeps the legacy
identity. Version `1` uses Unicode Normalization Form C (NFC) for Metadata IDs
and path comparison keys. It does not rewrite `Metadata.path`, rename existing
files, or change Chunks or file content. `handleFilenameCaseSensitive` remains
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "self-hosted-livesync-cli",
"private": true,
"version": "1.0.44-cli",
"version": "1.0.45-cli",
"main": "dist/index.cjs",
"type": "module",
"scripts": {
+1 -1
View File
@@ -28,7 +28,7 @@ Automated browser coverage uses Chromium. Other browsers, background execution,
## Path identity compatibility
WebApp currently supports **Legacy path identity** (`pathNormalizationVersion: 0`) only. **Unicode NFC path identity** (`1`) is not yet supported. WebApp rejects NFC settings before creating its services or opening its local database; it reports the reason and leaves the Vault files and settings unchanged. Use legacy identity in WebApp's `.livesync/settings.json` and on every client sharing its CouchDB database or P2P group, including new CLI and Obsidian environments which default to NFC.
WebApp currently supports **Legacy path identity** (`pathNormalizationVersion: 0`) only. **Unicode NFC path identity** (`1`) is not yet supported. WebApp rejects NFC settings before creating its services or opening its local database; it reports the reason and leaves the Vault files and settings unchanged. Use legacy identity in WebApp's `.livesync/settings.json` and on every client sharing its CouchDB database or P2P group, including CLI settings and Obsidian manual onboarding from Self-hosted LiveSync `1.0.45`, which default to NFC.
The File System Access API can supply the directory listings and handles needed
for NFC resolution. Commonlib provides that adapter, but WebApp has not yet
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "livesync-webapp",
"private": true,
"version": "1.0.44-webapp",
"version": "1.0.45-webapp",
"type": "module",
"description": "Browser-based Self-hosted LiveSync using FileSystem API",
"scripts": {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "webpeer",
"private": true,
"version": "1.0.44-webpeer",
"version": "1.0.45-webpeer",
"type": "module",
"scripts": {
"dev": "vite",
+56 -50
View File
@@ -12,49 +12,86 @@ Earlier releases remain available in the 1.0 release history, the 1.0 preview hi
## Unreleased
- Unicode NFC path identity can be used with Object Storage and P2P on CLI and Obsidian clients. The setting is available under General Settings → File identity. Existing databases require a coordinated Rebuild and Fetch; physical file names and Chunk IDs stay unchanged. All P2P participants must be updated and migrated.
- New CLI settings and Obsidian manual onboarding use NFC. Existing settings and old Setup URIs retain legacy identity; initial central-remote setup follows the remote declaration. Existing databases still require the migration above.
- Object Storage checks the selected identity before Fetch replaces the local database and before ordinary remote administration changes its milestone. Rebuild preserves the old identity until the remote journals have been deleted.
## 1.0.45
5th November, 2026
Some of my recent replies have been sporting the Codex icon. Rest assured: I simply ask Codex to polish my English and discreetly intercept the occasional ill-judged remark before I post.
### New Feature
#### Synchronisation
- We can recognise equivalent composed and decomposed Unicode file names as the same file when synchronising through Object Storage or P2P. (#1309)
- Select **Unicode NFC path identity** under **General Settings** → **File identity**. Supported by the CLI and Obsidian; physical file names and Chunk IDs remain unchanged.
- To migrate a Legacy database, update every participating client, stop synchronisation and editing, and preserve a complete, backed-up authoritative Vault, unique edits, and required history. Resolve colliding names before Rebuild on the source and Fetch on the remaining devices. With P2P, Rebuild prepares only the source database; keep that device online for Fetch.
- New CLI settings and Obsidian manual setup use NFC. Existing settings and older Setup URIs retain Legacy identity; initial CouchDB or Object Storage setup follows the remote's declared identity.
- Object Storage remotes with existing Journals but no compatibility declaration also require Rebuild, even in Legacy mode.
### Fixed
#### Object Storage
- Failed Journal writes now stop replication instead of silently passing over missing records. After correcting the cause, the next replication with the same local database retries the failed Journal.
- If a Journal cannot be recovered and missing content or history is acceptable, **Maintenance → Syncing → Skip stopped Journal and resume** asks for confirmation of its exact key and failure stage, then skips only that Journal and resumes receipt. The next Journal failure still stops replication. The action does not add a persistent ignore setting.
- **Reset journal received history** replays Journals which remain available remotely, except those sent by this device. It cannot recreate missing remote Journals; earlier failures already silently acknowledged also require this explicit replay.
- Journal receive failures now stop replication instead of silently passing over records which could not be decoded, processed, or saved. (#1318)
- After correcting the cause, retry replication with the same local database to receive the failed Journal again.
- If a Journal cannot be recovered and missing content or history is acceptable, use **Maintenance** → **Syncing** → **Skip stopped Journal and resume**. The confirmation identifies its exact key and failure stage. Only that Journal is skipped; the next failure still stops receipt.
- Journals already passed over by an earlier version require **Reset journal received history** to be replayed. This re-reads Journals still available remotely, except those sent by this device, and cannot recreate missing remote Journals.
- A remote-only Rebuild resends the local database even when the Object Storage remote is already empty and this device retains its earlier transfer progress.
#### Synchronisation
- We can synchronise and Fetch an encrypted CouchDB remote when the Internal API retains responses from before a Rebuild. (#1234)
- Metadata and Chunk reads use a cache URL derived from the startup time and Security Seed together. The URL remains stable within the same startup and Seed.
- The advanced CouchDB setting **Use headers only for HTTP cache control (compatibility)** is disabled by default. Enable it only if your server or proxy rejects the additional query parameter; affected native caches may then reuse stale encrypted responses after Rebuild.
- CouchDB synchronisation and Fetch no longer fail with decryption errors caused by stale encrypted responses in the Internal API cache after a Rebuild or plug-in restart. (#1234)
- Reads use a cache query parameter based on the current start-up and Security Seed.
- **Use headers only for HTTP cache control (compatibility)** under **Power users** → **CouchDB Connection Tweak** is disabled by default. Enable it only if the server or proxy rejects the additional query parameter; affected native caches may then reuse stale encrypted responses after Rebuild.
#### Conflict resolution
- Disabling or reloading the plug-in no longer causes a secondary error when pending work writes to the log. Logs arriving after the log display closes go to Obsidian's console.
- Open conflict dialogues for ordinary files close immediately, and queued checks report cancellation. Operations already running retain their normal completion or failure path.
- Disabling or reloading the plug-in no longer causes a secondary error when pending work writes to the log. Late logs remain available in Obsidian's console.
- Open conflict dialogues for ordinary files close immediately, and queued checks report cancellation.
#### WebApp
#### Settings
- The experimental WebApp stops before opening its database or processing files when its settings select unsupported NFC path identity. It reports the Legacy-only requirement and preserves the selected Vault files and settings. This does not migrate an NFC database to Legacy identity.
- The English description of **Do not split chunks in the background** now correctly states that enabling the setting moves Chunk splitting to the UI thread. (#1313)
#### Translations
- The notice shown when a translation is available now displays the **Display Language** setting label correctly in English, French, Hebrew, Russian, and Simplified Chinese. (#1298) Thank you to @cwatanab for the contribution!
- Hebrew interface messages also display their referenced labels correctly.
- The notice shown when a translation is available now displays the **Display Language** setting label correctly in English, French, Hebrew, Russian, and Simplified Chinese. Hebrew interface messages also display their referenced labels correctly. (#1298)
#### WebApp
- The experimental WebApp rejects unsupported NFC path identity before opening its database or processing Vault files, preserving the selected files and settings.
- WebApp remains Legacy-only. Changing the setting does not migrate an NFC database.
### Improved
#### Translations
- More of the interface is available in Japanese, including dialogue buttons, Vault history, SyncGuard, inspection reports, and Fetch restart confirmations. Japanese setup and settings guides have also been refreshed. (#1317)
### CLI
#### New Feature
- We can resume Object Storage receipt after deliberately skipping one unrecoverable Journal with `journal-skip <journal-key>`.
- Retry `sync` with `--debug` to inspect the stopped Journal key and failure stage. The command retries replication first and skips only the supplied Journal if it remains stopped.
- Use this only when missing content or history is acceptable. The next Journal failure still stops receipt.
#### Fixed
- CLI `fetch` and `rebuild` no longer replay pending file updates from the previous database during startup. The saved queue is discarded only after the local database reset succeeds.
- `fetch` and `rebuild` no longer replay pending file updates from the previous database at start-up. The old pending updates are discarded only after the local database reset succeeds.
- `fetch` and `daemon` can write received files to the Vault when `handleFilenameCaseSensitive` is enabled. The CLI detects whether the Vault filesystem distinguishes letter case. (#1319)
- NFC file lookups and directory scans report permission and I/O failures. Unreadable files are no longer treated as absent, and incomplete scans no longer count as successful.
- CLI `fetch` and `daemon` can write received files to the Vault when `handleFilenameCaseSensitive` is enabled. The CLI now detects whether the Vault filesystem distinguishes letter case. (#1319)
### Miscellaneous
- Commonlib warnings now appear on stderr without `--debug`, so deliberately skipped Journals and other important notices remain visible during ordinary CLI use.
- Updated dependencies.
- NFC file lookups and directory scans report permission and I/O failures instead of treating unreadable files as absent or returning a successful partial scan. A scan retains the comparison settings with which it began.
### Acknowledgements
Thank you for your contributions!
- @cwatanab, for improving Japanese translations and documentation, correcting translated labels, and correcting the Chunk splitting setting description (#1298, #1313, #1317).
## 1.0.44
@@ -286,34 +323,3 @@ This has turned into a slightly larger set of changes overall, but I have finall
### CLI
- Unreadable or malformed device-local state now stops initialisation instead of being treated as empty. Existing valid state files keep their format.
## 1.0.39
20th October, 2026
I have been finding troubleshooting difficult, so I decided to go back to basics and prepare the tools we need.
### Synchronisation
#### Fixed
- We can migrate to NFC path identity when deletion or rename history would otherwise block Rebuild or Fetch. (#1259)
- Logical deletions without unresolved conflicts no longer block operations which replace the local database. Conflicting histories and ambiguous current files still require review.
### Diagnostics
- We can inspect file differences and current conflicts across the local database, CouchDB, and the Vault without changing databases or settings.
- Integrity inspection compares Metadata for normal files and checks content for suspect groups. **Include remote database** is enabled by default and can be cleared for one run. Reports distinguish an excluded remote from an unavailable source and retain the evidence collected so far.
- We can share reports using pseudonyms and find the affected files locally for follow-up.
- Integrity and Usage offer original names or pseudonyms before each run, and omit file contents and credentials in both modes. Path pseudonyms use a random public salt for each report; revision pseudonyms retain their generation number.
- The Hatch lookup searches current Vault paths and local Metadata for normal files. It preserves separate document IDs for the same path and can prepare a report for the selected document using the original salt. Public salts permit guessed-path checks.
- We can follow progress in large inspections and stop work when enough evidence has been collected.
- Integrity shows counts and a gauge for each stage, reduces remote requests with bulk reads and bounded concurrency, and logs read and request timings. Usage shows revision discovery with a growing total, followed by cancellable accounting.
- Closing a follow-up dialogue stops further reads after the active read settles. Complete Usage reports retain the existing TSV columns; partial reports use JSON to retain their status and reasons.
- We can read and share large Integrity reports more easily.
- Compact Markdown retains every observation and its follow-up references, with state counts, a review index, and a field guide. It includes available size, modification-time, Chunk-reference, and case/NFC evidence without additional database or Vault reads. JSON retains the full structure.
- Markdown reports use a collapsible code block for sharing in issues. Review candidates indicate where to investigate; they do not establish corruption, and unchecked content remains distinct from healthy content.
- We can find reporting actions more easily in Hatch and keep report controls visible in smaller windows.
- The five reporting tools are grouped separately from checks, recovery, and reset operations. Name and format choices remain visible, and the report preview resizes around the controls.
- We can request and provide targeted troubleshooting evidence through the issue-reporting guide.
- Direct links cover Integrity, Usage, pseudonym lookup, and follow-up reports, with request examples for issue discussions.
+2 -1
View File
@@ -55,5 +55,6 @@
"1.0.41": "1.7.2",
"1.0.42": "1.7.2",
"1.0.43": "1.7.2",
"1.0.44": "1.7.2"
"1.0.44": "1.7.2",
"1.0.45": "1.7.2"
}