mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-11-06 16:28:18 +00:00
Releasing 1.0.45
This commit is contained in:
1 parent
beb6a6bc7d
commit
1fd4c947be
18 files changed
+157
-107
No files matched your search
@@ -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.
|
- 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.
|
- 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 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
|
### Logging & Debugging
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
LiveSync 1.0.38 with Commonlib 0.1.42. Local validation evidence and platform
|
||||||
limits are recorded in the design document.
|
limits are recorded in the design document.
|
||||||
|
|
||||||
The maintained design now also describes an unreleased Journal and P2P
|
The maintained design also records the Journal and P2P extension, the move to
|
||||||
extension and the move to General Settings. The decision below retains the
|
General Settings, and new-environment defaults included in Self-hosted LiveSync
|
||||||
initial CouchDB support boundary and original acceptance date.
|
1.0.45 with Commonlib 0.3.2. The decision below retains the initial CouchDB
|
||||||
|
support boundary and original acceptance date.
|
||||||
|
|
||||||
## Context
|
## 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;
|
ambiguous file or parent-directory candidates before database reconstruction;
|
||||||
it does not claim to detect physical aliases which a host does not expose.
|
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
|
The later Journal and P2P extension uses NFC for newly generated CLI settings
|
||||||
and Obsidian manual onboarding. It retains legacy defaults for stored settings
|
and Obsidian manual onboarding. It retains legacy defaults for stored settings
|
||||||
|
|||||||
@@ -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
|
consume the same effective differences. The P2P transport retains its separate
|
||||||
policy: ordinary representation and case differences warn without rejecting
|
policy: ordinary representation and case differences warn without rejecting
|
||||||
transfer, while its existing passphrase and peer checks still apply. Path
|
transfer, while its existing passphrase and peer checks still apply. Path
|
||||||
identity has a separate required check: both peers must use the same version,
|
identity has a separate required check: both peers must use the same
|
||||||
and a version mismatch rejects before replication. Commonlib `0.3.0` includes
|
version, and a version mismatch rejects before replication. Commonlib `0.3.0`
|
||||||
NFC protocol support for Journal and P2P, but the matching CLI and Obsidian host
|
includes NFC protocol support for Journal and P2P. Matching CLI and Obsidian
|
||||||
adoption remains an unreleased extension tracked by
|
host adoption is included in Self-hosted LiveSync `1.0.45` with Commonlib
|
||||||
[the Unicode path identity design](unicode_path_identity.md). Sharing
|
`0.3.2`, as described in the [Unicode path identity
|
||||||
assessment does not make the central replication policy appropriate for every
|
design](unicode_path_identity.md). Sharing assessment does not make the central
|
||||||
transport.
|
replication policy appropriate for every transport.
|
||||||
|
|
||||||
## Host responsibilities
|
## Host responsibilities
|
||||||
|
|
||||||
|
|||||||
@@ -25,19 +25,22 @@ release.
|
|||||||
Commonlib `0.3.0` publishes the Journal and P2P path-identity protocol
|
Commonlib `0.3.0` publishes the Journal and P2P path-identity protocol
|
||||||
extension. The matching Self-hosted LiveSync CLI and Obsidian host adoption,
|
extension. The matching Self-hosted LiveSync CLI and Obsidian host adoption,
|
||||||
including moving the setting to General Settings and defaulting new
|
including moving the setting to General Settings and defaulting new
|
||||||
synchronisation environments to NFC, remains an unreleased candidate tracked
|
synchronisation environments to NFC, is included in Self-hosted LiveSync
|
||||||
by [pull request #1309](https://github.com/vrtmrz/obsidian-livesync/pull/1309).
|
`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.
|
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
|
Commonlib `0.3.1` publishes the shared storage-path contract, including
|
||||||
its Unicode resolver and typed physical-I/O ports. The LiveSync candidate
|
its Unicode resolver and typed physical-I/O ports. The LiveSync CLI adopts
|
||||||
adopts the shared resolver and typed physical-I/O ports in the CLI. Obsidian
|
the shared resolver and typed physical-I/O ports, while Obsidian adopts
|
||||||
adopts shared namespace and comparison helpers while retaining its Vault APIs
|
shared namespace and comparison helpers and retains its Vault APIs and
|
||||||
and existing alias-guard policy. Each NFC scan retains one comparison-policy
|
existing alias-guard policy. These host changes are included in Self-hosted
|
||||||
snapshot; directory and permission errors propagate instead of producing a
|
LiveSync `1.0.45` with Commonlib `0.3.2`. Each NFC scan retains one
|
||||||
successful partial scan. LiveSync's host adoption remains unreleased. The
|
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
|
[developer guide](../../devs.md#file-path-handling) links the Commonlib design
|
||||||
and ADR.
|
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. |
|
| 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. |
|
| 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. |
|
| 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. |
|
| 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
|
## Initial settings and existing environments
|
||||||
|
|
||||||
The unreleased extension uses version `1` for newly generated CLI settings and
|
Self-hosted LiveSync `1.0.45` uses version `1` for newly generated CLI settings
|
||||||
Obsidian manual onboarding. Stored settings and old Setup URIs with no path
|
and Obsidian manual onboarding. Stored settings and old Setup URIs with no
|
||||||
version retain `0`. Commonlib's shared settings defaults remain `0`, so this
|
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
|
host policy does not extend to WebApp or WebPeer. An absent settings file alone
|
||||||
does not establish that an existing local database is new.
|
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
|
CLI invocation, the command must fail with a clear remediation message rather
|
||||||
than report success after cancellation.
|
than report success after cancellation.
|
||||||
|
|
||||||
The unreleased CLI correction for #1304 always retains the Rebuilder's selected
|
The CLI correction for #1304 is included in Self-hosted LiveSync `1.0.44` and
|
||||||
local database suffix after successful `fetch` or `rebuild`. `--write-settings`
|
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
|
still controls other lasting settings changes. Earlier versions required that
|
||||||
option to retain the database selection; omitting it could reopen the previous
|
option to retain the database selection; omitting it could reopen the previous
|
||||||
database on the next invocation. The examples retain the option for compatibility.
|
database on the next invocation. The examples retain the option for compatibility.
|
||||||
@@ -232,11 +236,11 @@ updates and deletions.
|
|||||||
|
|
||||||
## Compatibility matrix
|
## 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 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 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 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 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 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. |
|
| 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. |
|
| `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. |
|
| 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
|
- URI round trips, checkpoint invalidation across path versions, and
|
||||||
explicit Legacy/NFC admission by `DirectFileManipulator` in Commonlib `0.3.1`,
|
explicit Legacy/NFC admission by `DirectFileManipulator` in Commonlib `0.3.1`,
|
||||||
including rejection of a populated database in the opposite mode. Journal and
|
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
|
P2P protocol support is published in Commonlib `0.3.0`; matching CLI and
|
||||||
Obsidian host adoption and end-to-end checks remain unreleased;
|
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
|
- refusal for ambiguous file or parent-directory candidates before local or
|
||||||
remote reset, preserving both databases on rejection, within the paths
|
remote reset, preserving both databases on rejection, within the paths
|
||||||
returned by each host's supported listing; and
|
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.
|
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
|
### Journal and P2P validation evidence
|
||||||
`0.2.3` candidate and real Obsidian `1.12.7`. The Self-hosted LiveSync extension
|
|
||||||
remains unreleased. The initial checks covered:
|
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
|
- real S3-compatible Journal transfer with and without E2EE and Path
|
||||||
Obfuscation, including restart, logical rename and deletion, both conflict
|
Obfuscation, including restart, logical rename and deletion, both conflict
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
|
|
||||||
Implementation note: the receive-failure correction and single-Journal skip
|
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).
|
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
|
The Self-hosted LiveSync UI and CLI recovery actions are included in
|
||||||
is Commonlib's
|
Self-hosted LiveSync 1.0.45 with Commonlib 0.3.2. The owning contract is in
|
||||||
[Journal receive failures and recovery](https://github.com/vrtmrz/livesync-commonlib/blob/main/docs/journal-receive-recovery.md).
|
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,
|
The receiver acknowledges successful processing, stops on failure by default,
|
||||||
and retries from that Journal with the same database. Explicit skipping does
|
and retries from that Journal with the same database. Explicit skipping does
|
||||||
not establish Vault reflection success. The host action names one stopped
|
not establish Vault reflection success. The host action names one stopped
|
||||||
|
|||||||
+1
-1
@@ -51,7 +51,7 @@ Compare the recovered files with the preserved originals, including the affected
|
|||||||
|
|
||||||
## Migrate to Unicode NFC path identity
|
## 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.
|
This migration reconstructs the databases from one authoritative Vault. It does not rewrite document IDs in place or rename files.
|
||||||
|
|
||||||
|
|||||||
@@ -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).
|
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
|
## 1.0.38
|
||||||
|
|
||||||
17th October, 2026
|
17th October, 2026
|
||||||
|
|||||||
+1
-1
@@ -242,7 +242,7 @@ Show verbose log. Please enable when you report the logs
|
|||||||
|
|
||||||
Setting key: pathNormalizationVersion
|
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.
|
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
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"id": "obsidian-livesync",
|
"id": "obsidian-livesync",
|
||||||
"name": "Self-hosted LiveSync",
|
"name": "Self-hosted LiveSync",
|
||||||
"version": "1.0.44",
|
"version": "1.0.45",
|
||||||
"minAppVersion": "1.7.2",
|
"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.",
|
"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",
|
"author": "vorotamoroz",
|
||||||
|
|||||||
Generated
+5
-5
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "obsidian-livesync",
|
"name": "obsidian-livesync",
|
||||||
"version": "1.0.44",
|
"version": "1.0.45",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "obsidian-livesync",
|
"name": "obsidian-livesync",
|
||||||
"version": "1.0.44",
|
"version": "1.0.45",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"src/apps/cli",
|
"src/apps/cli",
|
||||||
@@ -11660,7 +11660,7 @@
|
|||||||
},
|
},
|
||||||
"src/apps/cli": {
|
"src/apps/cli": {
|
||||||
"name": "self-hosted-livesync-cli",
|
"name": "self-hosted-livesync-cli",
|
||||||
"version": "1.0.44-cli",
|
"version": "1.0.45-cli",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@aws-crypto/sha256-js": "5.2.0",
|
"@aws-crypto/sha256-js": "5.2.0",
|
||||||
"chokidar": "^4.0.0",
|
"chokidar": "^4.0.0",
|
||||||
@@ -11686,7 +11686,7 @@
|
|||||||
},
|
},
|
||||||
"src/apps/webapp": {
|
"src/apps/webapp": {
|
||||||
"name": "livesync-webapp",
|
"name": "livesync-webapp",
|
||||||
"version": "1.0.44-webapp",
|
"version": "1.0.45-webapp",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"octagonal-wheels": "0.1.56"
|
"octagonal-wheels": "0.1.56"
|
||||||
},
|
},
|
||||||
@@ -11698,7 +11698,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"src/apps/webpeer": {
|
"src/apps/webpeer": {
|
||||||
"version": "1.0.44-webpeer",
|
"version": "1.0.45-webpeer",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"octagonal-wheels": "0.1.56"
|
"octagonal-wheels": "0.1.56"
|
||||||
},
|
},
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "obsidian-livesync",
|
"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.",
|
"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",
|
"main": "main.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -446,8 +446,9 @@ The CLI uses the same settings format as the Obsidian plug-in. Create a `.livesy
|
|||||||
#### Unicode path identity
|
#### Unicode path identity
|
||||||
|
|
||||||
The `pathNormalizationVersion` setting controls how file paths identify
|
The `pathNormalizationVersion` setting controls how file paths identify
|
||||||
Metadata documents. CouchDB support is released; the unreleased extension also
|
Metadata documents. CouchDB support was first released in Self-hosted LiveSync
|
||||||
supports Object Storage and P2P. An absent value or `0` keeps the legacy
|
`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
|
identity. Version `1` uses Unicode Normalization Form C (NFC) for Metadata IDs
|
||||||
and path comparison keys. It does not rewrite `Metadata.path`, rename existing
|
and path comparison keys. It does not rewrite `Metadata.path`, rename existing
|
||||||
files, or change Chunks or file content. `handleFilenameCaseSensitive` remains
|
files, or change Chunks or file content. `handleFilenameCaseSensitive` remains
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "self-hosted-livesync-cli",
|
"name": "self-hosted-livesync-cli",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.0.44-cli",
|
"version": "1.0.45-cli",
|
||||||
"main": "dist/index.cjs",
|
"main": "dist/index.cjs",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ Automated browser coverage uses Chromium. Other browsers, background execution,
|
|||||||
|
|
||||||
## Path identity compatibility
|
## 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
|
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
|
for NFC resolution. Commonlib provides that adapter, but WebApp has not yet
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "livesync-webapp",
|
"name": "livesync-webapp",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.0.44-webapp",
|
"version": "1.0.45-webapp",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "Browser-based Self-hosted LiveSync using FileSystem API",
|
"description": "Browser-based Self-hosted LiveSync using FileSystem API",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "webpeer",
|
"name": "webpeer",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.0.44-webpeer",
|
"version": "1.0.45-webpeer",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
+56
-50
@@ -12,49 +12,86 @@ Earlier releases remain available in the 1.0 release history, the 1.0 preview hi
|
|||||||
|
|
||||||
## Unreleased
|
## 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.
|
## 1.0.45
|
||||||
- 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.
|
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
|
### Fixed
|
||||||
|
|
||||||
#### Object Storage
|
#### 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.
|
- Journal receive failures now stop replication instead of silently passing over records which could not be decoded, processed, or saved. (#1318)
|
||||||
- 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.
|
- After correcting the cause, retry replication with the same local database to receive the failed Journal again.
|
||||||
- **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.
|
- 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
|
#### Synchronisation
|
||||||
|
|
||||||
- We can synchronise and Fetch an encrypted CouchDB remote when the Internal API retains responses from before a Rebuild. (#1234)
|
- 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)
|
||||||
- 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.
|
- Reads use a cache query parameter based on the current start-up and Security 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.
|
- **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
|
#### 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.
|
- 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. Operations already running retain their normal completion or failure path.
|
- 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
|
#### 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!
|
- 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)
|
||||||
- Hebrew interface messages also display their referenced labels correctly.
|
|
||||||
|
#### 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
|
### 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
|
#### 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
|
## 1.0.44
|
||||||
|
|
||||||
@@ -286,34 +323,3 @@ This has turned into a slightly larger set of changes overall, but I have finall
|
|||||||
### CLI
|
### CLI
|
||||||
|
|
||||||
- Unreadable or malformed device-local state now stops initialisation instead of being treated as empty. Existing valid state files keep their format.
|
- 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
@@ -55,5 +55,6 @@
|
|||||||
"1.0.41": "1.7.2",
|
"1.0.41": "1.7.2",
|
||||||
"1.0.42": "1.7.2",
|
"1.0.42": "1.7.2",
|
||||||
"1.0.43": "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"
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user