From 602dfd7d373fd089db1b636a483291557c235f97 Mon Sep 17 00:00:00 2001 From: vorotamoroz Date: Wed, 4 Nov 2026 05:12:24 +0000 Subject: [PATCH] Adopt published Commonlib 0.3.1 storage contracts --- devs.md | 2 +- docs/design_docs/unicode_path_identity.md | 30 +++++++++++------------ package-lock.json | 8 +++--- package.json | 2 +- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/devs.md b/devs.md index f690d765..09425052 100644 --- a/devs.md +++ b/devs.md @@ -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 this unreleased boundary. WebApp and Bridge NFC enablement remains 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 remain unreleased. WebApp and Bridge NFC enablement remain separate work. ### Logging & Debugging diff --git a/docs/design_docs/unicode_path_identity.md b/docs/design_docs/unicode_path_identity.md index 65a7bac2..088ca89c 100644 --- a/docs/design_docs/unicode_path_identity.md +++ b/docs/design_docs/unicode_path_identity.md @@ -31,14 +31,15 @@ The original dates and reviewed versions above remain the historical baseline. ## Unreleased shared storage boundary -The current LiveSync candidate adopts Commonlib's shared Unicode resolver and -typed physical-I/O ports in the CLI, and shared namespace and comparison -helpers in Obsidian 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. -These additions are unreleased and do not change the support status of a -published host. The [developer guide](../../devs.md#file-path-handling) links -the Commonlib design and ADR. +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 +[developer guide](../../devs.md#file-path-handling) links the Commonlib design +and ADR. ## Scope @@ -233,11 +234,11 @@ updates and deletions. | Host or API | Published baseline | Unreleased 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`. | The shared resolver and typed path ports are in the current LiveSync candidate; they are not part of a published Commonlib package yet. | +| 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. | | 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` | The published Commonlib baseline refuses a remote which declares `nfc-path-identity-v1`. | An unpublished addition accepts explicit `pathNormalizationVersion` values `0` or `1`, defaulting to `0`, and rejects a populated database in the opposite mode. This admission setting does not provide physical-path resolution. | +| `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. | | WebPeer | A vaultless P2P utility, not a filesystem host. | No NFC filesystem support is implied by its P2P role. | | Older client without this feature | Can use a legacy database. | Cannot join a database declaring `nfc-path-identity-v1`. | @@ -295,11 +296,10 @@ The implementation acceptance matrix covers: version-`0` clients against an NFC database, and enforcement when ordinary mismatch warnings are disabled; - URI round trips, checkpoint invalidation across path versions, and - rejection by the published Direct file access baseline; the unpublished - `DirectFileManipulator` addition covers explicit Legacy/NFC admission. - 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; + 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; - 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 diff --git a/package-lock.json b/package-lock.json index f761aa67..9a6a2ba3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "@smithy/types": "^4.14.3", "@smithy/util-retry": "^4.4.5", "@vrtmrz/browser-ui-kit": "0.1.0", - "@vrtmrz/livesync-commonlib": "0.3.0", + "@vrtmrz/livesync-commonlib": "0.3.1", "@vrtmrz/obsidian-plugin-kit": "0.1.7", "@vrtmrz/ui-interactions": "0.1.2", "@vrtmrz/value-store": "0.1.0", @@ -4065,9 +4065,9 @@ } }, "node_modules/@vrtmrz/livesync-commonlib": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@vrtmrz/livesync-commonlib/-/livesync-commonlib-0.3.0.tgz", - "integrity": "sha512-Nllw7AUwpV5ljtMqjRplqb0HPXY5ZfYj9pf4ZP0pBHtz9+7jOSFNqDhSVOAehYlJJaLcVJBnModicAUxT9urNw==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@vrtmrz/livesync-commonlib/-/livesync-commonlib-0.3.1.tgz", + "integrity": "sha512-/vm/5MEiFIS1mEfW/+kPaqbx/cpgXlEl+uQHTm5ClHxNZ/umARuxXZX33TlxFpVimLVjYPRQ97XSZAz5HKy8vw==", "license": "MIT", "dependencies": { "@aws-crypto/sha256-js": "5.2.0", diff --git a/package.json b/package.json index 29b025ec..9f81a6ef 100644 --- a/package.json +++ b/package.json @@ -211,7 +211,7 @@ "@smithy/types": "^4.14.3", "@smithy/util-retry": "^4.4.5", "@vrtmrz/browser-ui-kit": "0.1.0", - "@vrtmrz/livesync-commonlib": "0.3.0", + "@vrtmrz/livesync-commonlib": "0.3.1", "@vrtmrz/obsidian-plugin-kit": "0.1.7", "@vrtmrz/ui-interactions": "0.1.2", "@vrtmrz/value-store": "0.1.0",