Validation run 2026-09-21: user-journey scenarios on 1.0.3, then 1.0.4¶
Second device run on the private-connectivity route class, one day after the 2026-09-20 run. That run proved pairing and the two basic edit directions over the private route. This run works through what a person does with a vault in a day: creating, editing, renaming, moving and deleting notes and folders on either device, closing and reopening the app, large attachments, and recovery. It also carries the in-app plugin update: 1.0.4 published during the run, both devices took it from the community directory, and the two rename journeys that failed on 1.0.3 were re-run against it. Every scenario ran on real devices against a running server on that route, with disposable content in one test folder.
Scope, route and platform coverage are stated by class, as in the previous record. Nothing about the deployment's configuration, addresses, device identity or the user's notes is recorded here.
Devices and versions¶
| Role | Platform class | Plugin |
|---|---|---|
| Desktop | macOS desktop | 1.0.3 at the start; updated in-app to 1.0.4 during the run |
| Phone | iOS phone | 1.0.1 at the start of the run; updated in-app to 1.0.4 during the run |
Both devices sync the whole vault. The route is the private connectivity
path described in kubernetes.md. The deployment's own
configuration is private (requirement 11).
Results¶
Outcome vocabulary: PASS (behaved as documented), PASS with finding (correct end state, issue filed for the path), FAIL (data loss or wrong end state), NOT RUN (with the reason).
| # | Scenario | Outcome | Note |
|---|---|---|---|
| S1 | Create a note on the desktop | PASS | On the phone within seconds |
| S2 | Create a note on the phone | PASS | On the desktop within seconds, body intact |
| S3 | Rename the phone vault | PASS with finding | iOS shows its first-open trust prompt again; the plugin stays off until "Trust author and enable plugins" is accepted. Obsidian behaviour, documented in troubleshooting |
| S4 | Append on the desktop | PASS | |
| S5 | Append on the phone | PASS | |
| S7 | Delete a note on the desktop | PASS | Gone from the phone; desktop copy in the system trash |
| S8 | Delete a note on the phone | PASS | Desktop copy gone in about 30 s and in the desktop's system trash |
| S9 | Restore a deleted note from history (desktop) | NOT RUN to completion | The dialog steps oldest-first, 20 versions per click, no running total; the note sat hundreds of steps into the journal. #102 |
| S10 | Create a folder with 7 notes on the desktop | PASS | |
| S11 | Move a note into a subfolder from outside Obsidian (desktop) | PASS with finding | Correct end state after about 4 minutes; edits made the same way take seconds. #101 |
| S12 | Rename a note on the phone | FAIL | The desktop, receiving the rename, trashed both the old and the new name within about 10 s and the note left the phone. Same defect as J4 from the other side; both copies sit in the desktop's system trash. #96, fixed in 1.0.4 |
| S13a | 172 MB video from the desktop (under the phone ceiling) | PASS | About 2 minutes over the private route; opens on the phone |
| S13b | 874 MB video from the desktop (over the phone ceiling) | PASS with findings | Desktop converged on the full file (about 1.2 MB/s). Phone lists it under "Show remote-only files" with a Fetch button, as designed. A mid-copy snapshot was published as an intermediate version (#99) and the phone kept that truncated copy on disk after the final version went remote-only (#100) |
| S19 | Unicode and emoji in a note name | PASS | |
| S20 | .obsidian configuration is not synced |
PASS by design | |
| S21 | Nested folders with special characters, three levels | PASS | |
| S22 | Delete a 300-note folder on the desktop | PASS | Obsidian warns the folder is not empty; 300 tombstones published in about 15 s; the folder and all 300 notes are in the desktop's system trash |
| S23 | Delete a folder on the phone | NOT RUN | The test rig could not reach the folder sheet's Delete row on iOS; phone-originated deletion is covered by S8 and the sync path is per file either way |
| S24 | Same-name race: both devices create the same path while the desktop app is closed | FAIL | On relaunch the desktop's file was replaced by the phone's version. No conflict copy, nothing in the trash, never uploaded. #98 |
| S25 | Concurrent edit: desktop edits a note while its app is closed, the phone edits the same note, desktop relaunches | FAIL | The desktop's line was replaced by the phone's version with no conflict copy. #98 |
| S26 | Desktop relaunch after a note was created while the app was closed | PASS | Pushed within seconds of relaunch by the startup reconcile |
| S27 | Phone app in the background while the desktop creates a note | PASS | Appeared about 5 s after the app returned to the foreground |
| S28 | Twenty rapid saves on the desktop | PASS | Phone converged on the final body, no conflict copy |
| S32 | PNG attachment with an embed | PASS | |
| S33 | Empty note | PASS | |
| S34 | 180-character note name | PASS | |
| S35 | Dotfile inside the vault | PASS by design | Never tracked |
| S36 | Symlink inside the vault | PASS by design | Never tracked |
| S39 | 300 notes created at once on the desktop | PASS | All 300 on the phone |
| J4 | Rename a synced note (desktop) | FAIL | Deleted on every device. #96, fixed in 1.0.4 |
| U1 | In-app plugin update on the phone (Community plugins, Check for updates, Update all) | PASS | 1.0.1 to 1.0.4 found and installed within about 20 s of the directory pointer moving; the plugin stayed enabled |
| U2 | In-app plugin update on the desktop | PASS | 1.0.3 to 1.0.4; Obsidian appends a small nosourcemap marker to the installed main.js, so a byte comparison with the release asset differs by that trailer only |
| J4 (1.0.4) | Rename a synced note on the desktop, both devices on 1.0.4 | PASS | Body intact, tracked under the new name within about 10 s, nothing trashed; the phone shows the renamed note |
| S12 (1.0.4) | Rename a synced note on the phone, both devices on 1.0.4 | PASS | The desktop followed within about 10 s with the body intact. Observation: the receiving device keeps the old-name copy in its system trash. #108 |
Observations outside the numbered scenarios:
- Closing the vault window on the desktop stops sync for that vault with no notice; the dashboard's last-seen time is the only signal. Obsidian plugins only run while their vault is open. Documented in troubleshooting.
- While the history dialog was open, the status bar reported a repair error that pointed the user at connectivity and the server's scrub report; the server's scrub was clean and the cause was a device-side scheduling collision. #103
- Folders are not objects to sync. Creating an empty folder on one device never creates it on the other, and deleting a folder leaves its empty tree behind on the other device once its notes are gone. #104; the user ruled this a defect rather than a documented limit.
- The newer-version toast names the plugin last, after the version numbers, and cannot be tapped to reach Community plugins, so a reader on a phone has to find the update by hand. #105
- A delete arriving from another device is applied over a local edit that has not been pushed yet, and the edit goes to the trash with the file. Found by the 1.0.5 lane while working #98, from the same unpushed-local-content mechanism. #106
What this run proves and does not prove¶
Proven: create, edit, delete and bulk operations converge in both directions within seconds over the private route; large files take the documented per-platform path; the startup reconcile pushes work done while the app was closed; hidden paths and links stay out of sync; the in-app update path from the community directory works on both platform classes; and, with both devices on 1.0.4, renaming a synced note is a move and not a deletion in either direction.
Not proven: recovery through the history dialog on a journal of this size; folder deletion originating on the phone; behaviour with the phone offline (airplane mode was not exercised); any scenario on Android, Windows or Linux.
Findings filed from this run¶
-
96 rename deletes the note on every device (P0, fixed in 1.0.4)¶
-
98 offline edits overwritten silently on relaunch (P0, fix in progress)¶
-
99 growing-file guard published a mid-copy snapshot¶
-
100 remote-only classification leaves a stale local copy in place¶
-
101 external move takes minutes to sync¶
-
102 restore-from-history pacing¶
-
103 false repair error during the history dialog¶
-
104 empty folders are neither created nor removed on the other device¶
-
105 the newer-version toast names the plugin last and cannot be tapped¶
-
106 a remote delete is applied over an unpushed local edit¶
-
108 the receiving device keeps the old-name copy in its system trash after¶
a rename
Update every device to 1.0.4 or later before renaming notes; a device still on 1.0.3 or earlier will delete a note that another device renames. Until the fix for #98 ships, open the app on a device before editing there if the same notes were edited elsewhere while it was closed.