Validation run 2026-09-24¶
The first sitting of a scenario battery: an iPhone and a desktop on the same network as the 2026-09-23 run, plus isolated desktop instances on loopback. This record keeps what bears on 1.1.2. The battery's other scenarios are recorded with the fixes they lead to.
Operator¶
Agent-driven, with the user unlocking the phone's screen mirroring when it locked. The phone was driven through macOS iPhone Mirroring.
Route¶
The Compose route on the same network, as in the 2026-09-23 run: the release image by its verified digest, behind the route's own TLS terminator and private certificate authority. "The server is unreachable" means the terminator was stopped, so the phone and the desktop met exactly what they meet away from home. The deployment's own name and addresses are private.
Devices¶
| Role | Platform | Obsidian | Plugin |
|---|---|---|---|
| phone | iOS | 1.13.7 | 1.1.1 from the community directory |
| desktop | macOS, an isolated Obsidian profile | 1.13.4 | the 1.1.2 build of the release pull request, copied into the vault |
Server: obsyncd 1.1.1, release commit f420d4d, image run by its verified
digest; 1.1.2 changes no server code. The phone's iOS version is not recorded
during the run. The desktop plugin was a file copy, so this run does not count
as a desktop production-path install.
The phone cannot run a build that is not in the directory, so every phone outcome below is a 1.1.1 outcome, and each 1.1.2 claim rests on the desktop.
Journeys¶
The rows are scenarios of the battery, numbered as the battery numbers them.
They are not rows of docs/validation.md, whose V and J rows were not attempted
in this run.
| # | Journey | Outcome | Note |
|---|---|---|---|
| S07 | The phone woken, and typed into at once, in a note just edited on the desktop | pass | The phone typed before the desktop's line had reached it. Both edits were merged on both devices within about 2 s at the server, with no conflict copy |
| S18 | A photo pasted into a note on the phone | pass | A 2 MB image reached the desktop within 16 s, byte-identical, rendered in the note, and uploaded once: the desktop sent nothing back |
| S21a | An edit on the phone while the server is unreachable, then the server returns | pass | The edit reached the desktop 29 s after the server returned, nothing pressed. Meanwhile the phone's 1.1.1 status read error — Server repair could not verify a retained file…, the false error 1.1.2 removes. The 1.1.2 desktop read offline — retrying 3 s after the server stopped and never showed that error |
| S21b | Obsidian force-quit and reopened on the phone while the server is unreachable | fail on 1.1.1, fixed in 1.1.2 | Obsidian stayed on "Loading plugins…" for more than three minutes, with "Reload app in Restricted Mode" as the highlighted button. The plugin's load waited for its first start. With the fix, a 1.1.2 desktop with the server unreachable finished loading in 1.7 s, against 156.3 s for the same build without it |
| — | The sync status window with a long State line, at phone width | fail on 1.1.1, fixed in 1.1.2 | Every label stood one letter to a line. With the fix, rendered in the desktop at 360 px, labels break only between words |
| X1 | Obsidian restarted on a desktop whose vault holds 29 synced files | fail on 1.1.1, fixed in 1.1.2 | With the first sync inside a waited-for onload, the start reconciled against a vault Obsidian had not listed yet: reconcile decision=start budget_files=0 and all 29 notes held back as deletions, on 3 of 3 launches. With 1.1.2, where the first sync waits for Obsidian's layout-ready signal, budget_files=29 on 5 of 5 launches, with nothing held back. On 1.1.1 the same race deleted empty folders on the other devices (#148) |
The two load times were measured from launch until Obsidian reported its
workspace layout ready with the plugin loaded (app.workspace.layoutReady),
with the terminator stopped. After the fix, the status bar reads
obsync: idle until the first request fails, and then
offline — retrying. On this network that first request timed out after
about 8 s, because nothing answers at all.
Found and filed for 1.1.3¶
-
135: two desktops typing in one note for a minute ended split, with a dozen¶
conflict copies, while both readidle. -
136: a plain
token is sent before the terminator's redirect to HTTPS.http://server address is accepted on desktop, and the setup¶ -
137: a server address with a path or a missing port, or checked before setup,¶
gets a message that does not name the fix.
What was not validated¶
- 1.1.2 on a phone: the directory ships 1.1.1 until the release. The load fix and the table fix are proven on a desktop only.
- Android, Windows and Linux: no device of those classes took part.
- The rest of the battery, which is still running.