diff --git a/docs/design_docs/time_bound_setup_uri.md b/docs/design_docs/time_bound_setup_uri.md index 75fb9131..82ea5fa8 100644 --- a/docs/design_docs/time_bound_setup_uri.md +++ b/docs/design_docs/time_bound_setup_uri.md @@ -1,8 +1,8 @@ --- date: 2026-09-28 -commonlib-version: "0.1.31" +commonlib-version: "0.1.32" feasibility-probe-version: "0.1.27" -self-hosted-livesync-version: "1.0.30" +self-hosted-livesync-version: "1.0.32" status: implementing --- @@ -23,10 +23,10 @@ the entered passphrase. Neither the mode nor a timestamp is stored in the URI. The design is technically feasible with the existing encryption primitives. An executable protocol probe passes 22 cases against Commonlib 0.1.27 and -octagonal-wheels 0.1.54. The implementation is based on Commonlib 0.1.31. -The 0.1.32-next.0 candidate has passed local package and downstream checks; -publication, exact dependency pins, the independent Deno lockfile update, and -mobile performance validation remain outstanding. +octagonal-wheels 0.1.54. The implementation is published as Commonlib 0.1.32 +on the npm `next` tag. LiveSync pins that exact release in its npm dependency +and independent Deno tool imports. A mobile performance bound remains +outstanding. This document records the proposed key derivation and integration contract. The companion probe demonstrates them without changing an application entry point. @@ -378,19 +378,24 @@ selection-boundary handling with an injected test clock and mobile behaviour on supported runtime; do not change the host's system clock. No remote database service is needed for the protocol tests themselves. -There is no identified architectural blocker. The 0.1.31-based Commonlib -candidate passes its type, unit, boundary, release-process, and packed-package -gates. LiveSync passes source checks, the unit suite, the Obsidian plug-in -build, and the WebPeer and CLI builds against that local tarball. The complete -unit suite passed with subprocess permissions needed by its CLI installer -fixtures. Focused real-Obsidian generation checks passed on desktop and -emulated mobile, including the displayed Time-bound end, Compatible output, -and mobile touch targets. Unit and protocol tests cover window boundaries and -preserve the existing distinction between an empty passphrase and cancellation. -The WebPeer browser test confirms that its monitor remains available after the -URI window ends for a device that has already imported the URI. -The Deno generator passed against the same local packed -candidate through a temporary import map. These results do not establish a -mobile performance bound or replace validation of the published package and -its lockfiles. The first implementation changes only primary-language -resources; translation changes require separate scope. +There is no identified blocker in the Time-bound URI protocol. The Commonlib +candidate based on 0.1.31 passed its type, unit, boundary, release-process, +and packed-package gates before the 0.1.32 release. A clean `npm ci` against +the published 0.1.32 artefact and the frozen Deno tool lock resolve the same +registry integrity. +LiveSync passes its source checks, 1,023 unit tests, the Deno setup-tool suite, +the CLI setup and file-operation contract, and the WebPeer browser tests. +Focused real-Obsidian generation checks pass on desktop and emulated mobile, +including the displayed Time-bound end, Compatible output, and mobile touch +targets. Unit and protocol tests cover window boundaries and preserve the +existing distinction between an empty passphrase and cancellation. The +WebPeer browser test confirms that its monitor remains available after the URI +window ends for a device that has already imported the URI. The full two-device +CouchDB workflow remains blocked before URI generation: Commonlib 0.1.32's +new-Vault default can declare remote feature generation 13, while this branch's +received-version handler still rejects every generation above 12. The host +integration for that separate feature must precede downstream validation; +relaxing only the version check would bypass its compatibility contract. These +results do not establish a mobile performance bound. The first implementation +changes only primary-language resources; translation changes require separate +scope. diff --git a/package-lock.json b/package-lock.json index 78086c95..54b86654 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.1.29", + "@vrtmrz/livesync-commonlib": "0.1.32", "@vrtmrz/obsidian-plugin-kit": "0.1.4", "@vrtmrz/ui-interactions": "0.1.2", "diff-match-patch": "^1.0.5", @@ -4567,9 +4567,9 @@ } }, "node_modules/@vrtmrz/livesync-commonlib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/@vrtmrz/livesync-commonlib/-/livesync-commonlib-0.1.29.tgz", - "integrity": "sha512-PeBUUQNSuyS+ISPIvwK3rzaritHi0XDfNlFMOqaRpIbxGAWbWK0YDtE1Htbde3r8Lr3ZdTNjpY+Nmr//OxzgTA==", + "version": "0.1.32", + "resolved": "https://registry.npmjs.org/@vrtmrz/livesync-commonlib/-/livesync-commonlib-0.1.32.tgz", + "integrity": "sha512-gzjhd7bg+DKHhd/24WGxBM7557wsw3HJkc0YjKll1n8/8vuhqPnlLuZmM33fj+4bv9nGFUnDlnoVowpQrTns6w==", "license": "MIT", "dependencies": { "@aws-sdk/client-s3": "^3.808.0", diff --git a/package.json b/package.json index d87efd90..d1397e1e 100644 --- a/package.json +++ b/package.json @@ -183,7 +183,7 @@ "@smithy/types": "^4.14.3", "@smithy/util-retry": "^4.4.5", "@vrtmrz/browser-ui-kit": "0.1.0", - "@vrtmrz/livesync-commonlib": "0.1.29", + "@vrtmrz/livesync-commonlib": "0.1.32", "@vrtmrz/obsidian-plugin-kit": "0.1.4", "@vrtmrz/ui-interactions": "0.1.2", "diff-match-patch": "^1.0.5", diff --git a/utils/couchdb/livesync-commonlib.ts b/utils/couchdb/livesync-commonlib.ts index 16748cff..b17ec92a 100644 --- a/utils/couchdb/livesync-commonlib.ts +++ b/utils/couchdb/livesync-commonlib.ts @@ -1,5 +1,5 @@ // Keep CouchDB database-version negotiation isolated from Setup URI generation. // The exact release must match utils/livesync-commonlib-version.ts; the setup // tool suite checks every static specifier before release. -export { checkRemoteVersion } from "npm:@vrtmrz/livesync-commonlib@0.1.32-next.0/compat/pouchdb/negotiation"; -export { PouchDB } from "npm:@vrtmrz/livesync-commonlib@0.1.32-next.0/compat/pouchdb/pouchdb-browser"; +export { checkRemoteVersion } from "npm:@vrtmrz/livesync-commonlib@0.1.32/compat/pouchdb/negotiation"; +export { PouchDB } from "npm:@vrtmrz/livesync-commonlib@0.1.32/compat/pouchdb/pouchdb-browser"; diff --git a/utils/flyio/deno.lock b/utils/flyio/deno.lock index 7ca3f1f5..6b9f40b0 100644 --- a/utils/flyio/deno.lock +++ b/utils/flyio/deno.lock @@ -1,7 +1,7 @@ { "version": "5", "specifiers": { - "npm:@vrtmrz/livesync-commonlib@0.1.0-rc.4": "0.1.0-rc.4" + "npm:@vrtmrz/livesync-commonlib@0.1.32": "0.1.32" }, "npm": { "@aws-sdk/checksums@3.1000.18": { @@ -284,8 +284,8 @@ "@trystero-p2p/core" ] }, - "@vrtmrz/livesync-commonlib@0.1.0-rc.4": { - "integrity": "sha512-u4FdbjnYg7lAf38z7eUv4eq4vxEdrl4rFMxiDZiJ7T701awKiflkXGIJQnaHdLaMa3zkRBU15qqEo7GtextmlA==", + "@vrtmrz/livesync-commonlib@0.1.32": { + "integrity": "sha512-gzjhd7bg+DKHhd/24WGxBM7557wsw3HJkc0YjKll1n8/8vuhqPnlLuZmM33fj+4bv9nGFUnDlnoVowpQrTns6w==", "dependencies": [ "@aws-sdk/client-s3", "@smithy/fetch-http-handler", @@ -509,8 +509,8 @@ "whatwg-url" ] }, - "octagonal-wheels@0.1.51": { - "integrity": "sha512-KTlfqKPjobHJg/t3A539srnFf+VHr1aXkHSmsNDDpiI5UFC7FamZ95dWpJfGE2EI/HULR5hveQDgkazmz8SAcg==", + "octagonal-wheels@0.1.54": { + "integrity": "sha512-Je3ancYhjKX7UY2K19T/qTjG8C9nK8YVrACr5naIf78mN4bbjQkYyWmlj+ooifV/moWVsQrp4fEWz/7mv6It3A==", "dependencies": [ "idb" ] diff --git a/utils/livesync-commonlib-version.ts b/utils/livesync-commonlib-version.ts index a0fede53..47913bdd 100644 --- a/utils/livesync-commonlib-version.ts +++ b/utils/livesync-commonlib-version.ts @@ -2,4 +2,4 @@ // Commonlib registry release. Static npm specifiers cannot interpolate this // value, so livesync-commonlib-version.test.ts verifies the domain-specific // facades against it. -export const LIVESYNC_COMMONLIB_VERSION = "0.1.32-next.0"; +export const LIVESYNC_COMMONLIB_VERSION = "0.1.32"; diff --git a/utils/setup/livesync-commonlib.ts b/utils/setup/livesync-commonlib.ts index 154a896a..741923ff 100644 --- a/utils/setup/livesync-commonlib.ts +++ b/utils/setup/livesync-commonlib.ts @@ -5,10 +5,10 @@ export { decodeSettingsFromSetupURI, encodeTimeBoundSetupURI, isTimeBoundSetupURIUsableNow, -} from "npm:@vrtmrz/livesync-commonlib@0.1.32-next.0/setup-uri"; -export type { TimeBoundSetupURIMode } from "npm:@vrtmrz/livesync-commonlib@0.1.32-next.0/setup-uri"; -export { generateP2PRoomId } from "npm:@vrtmrz/livesync-commonlib@0.1.32-next.0/compat/common/utils"; -export { upsertRemoteConfigurationInPlace } from "npm:@vrtmrz/livesync-commonlib@0.1.32-next.0/remote-configurations"; +} from "npm:@vrtmrz/livesync-commonlib@0.1.32/setup-uri"; +export type { TimeBoundSetupURIMode } from "npm:@vrtmrz/livesync-commonlib@0.1.32/setup-uri"; +export { generateP2PRoomId } from "npm:@vrtmrz/livesync-commonlib@0.1.32/compat/common/utils"; +export { upsertRemoteConfigurationInPlace } from "npm:@vrtmrz/livesync-commonlib@0.1.32/remote-configurations"; export { createNewVaultSettings, DEFAULT_SETTINGS, @@ -16,5 +16,5 @@ export { PREFERRED_BASE, PREFERRED_JOURNAL_SYNC, PREFERRED_SETTING_SELF_HOSTED, -} from "npm:@vrtmrz/livesync-commonlib@0.1.32-next.0/settings"; -export type { ObsidianLiveSyncSettings } from "npm:@vrtmrz/livesync-commonlib@0.1.32-next.0/settings"; +} from "npm:@vrtmrz/livesync-commonlib@0.1.32/settings"; +export type { ObsidianLiveSyncSettings } from "npm:@vrtmrz/livesync-commonlib@0.1.32/settings";