{"scenario":"test/multi/attachments.test.ts::an attachment created in one vault arrives byte-identical in the other","verdict":"pass","ms":2411,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/attachments.test.ts::an attachment created in one vault is stored on the server as ciphertext the server cannot read","verdict":"pass","ms":1,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/attachments.test.ts::an attachment created in one vault is charged to the account that owns the folder","verdict":"pass","ms":0,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/attachments.test.ts::deleting an attachment removes it from the other vault and reclaims the bytes","verdict":"pass","ms":2313,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/background-pane.test.ts::a remote change to a note open in a background pane leaves note one alone when the receiving vault has only note one open","verdict":"pass","ms":6257,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/background-pane.test.ts::a remote change to a note open in a background pane still reaches the document the active pane is bound to","verdict":"pass","ms":6620,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::renaming carries a rename to the other vault, content intact","verdict":"pass","ms":1132,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::background sync delivers a note to a vault that never opens it","verdict":"pass","ms":819,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::background sync delivers a later edit made without an editor","verdict":"pass","ms":554,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::a vault that connects after the change was made receives work done while it was not syncing","verdict":"pass","ms":1984,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::presence shows the other participant when both vaults have the file open","verdict":"pass","ms":709,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::presence keeps both participants visible across a reconnection","verdict":"pass","ms":16925,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::presence rebinds the open file after sync is stopped and started","verdict":"pass","ms":81,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::presence keeps both participants visible across a rename","verdict":"pass","ms":323,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::presence identity agrees on a collaborator colour between two vaults","verdict":"pass","ms":670,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::presence identity paints the circle in the same colour the collaborator broadcast","verdict":"pass","ms":35,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::presence identity shows a remote cursor label without anyone hovering it","verdict":"pass","ms":14,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::collaborator pointers draws B's pointer on the same word in A, though the word sits elsewhere on B's screen","verdict":"pass","ms":5275,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::collaborator pointers keeps the OS cursor out of the pointer checks","verdict":"pass","ms":1128,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::collaborator pointers pins a pointer on text below the view to the bottom edge, and follows it along","verdict":"pass","ms":591,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::collaborator pointers turns the edge indicator back into a pointer once the text scrolls into view","verdict":"pass","ms":292,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::collaborator pointers pins a collaborator's off-screen text cursor to the edge too","verdict":"pass","ms":302,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/collaboration.test.ts::collaborator pointers hides pointers when showing is off, and withdraws one when sharing is off","verdict":"pass","ms":1103,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/commands.test.ts::commands, ribbon and folder menu signed out, offers only opening settings and the diagnostic log, and never a sign-out","verdict":"pass","ms":6,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/commands.test.ts::commands, ribbon and folder menu signed in, offers sharing once keys are enrolled","verdict":"pass","ms":26,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/commands.test.ts::commands, ribbon and folder menu opens Nectenda settings from the palette","verdict":"pass","ms":133,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/commands.test.ts::commands, ribbon and folder menu opens Nectenda settings from the ribbon logo's menu","verdict":"pass","ms":226,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/commands.test.ts::commands, ribbon and folder menu toggles the diagnostic log, and keeps the choice","verdict":"pass","ms":42,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/commands.test.ts::commands, ribbon and folder menu shares a folder picked from the palette, as the settings pane would","verdict":"pass","ms":391,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/commands.test.ts::commands, ribbon and folder menu offers the right folder-menu items, and members opens the members dialog","verdict":"pass","ms":563,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/compaction.test.ts::the plugin answers a compaction request shortens a log it never wrote","verdict":"pass","ms":2577,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/concurrent-seed.test.ts::two vaults that both seed a note while the server is down converges on one copy once the server returns","verdict":"pass","ms":8765,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/external-edit.test.ts::a file changed outside Obsidian during an outage does not lose the external change when the note is opened","verdict":"pass","ms":373,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/external-edit.test.ts::a file changed outside Obsidian during an outage carries the external change to the other vault once the server returns","verdict":"pass","ms":1295,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/first-sync.test.ts::joining while the server is unreachable does not blank the local file with an empty, unconfirmed document","verdict":"pass","ms":10029,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/first-sync.test.ts::joining a folder whose copy has diverged backs the local version up before the server’s wins","verdict":"pass","ms":5629,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/first-sync.test.ts::joining a folder whose copy has diverged leaves both vaults agreeing on the note afterwards","verdict":"pass","ms":24,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/first-sync.test.ts::joining while the server is up backs up a diverged local copy on a plain first sync","verdict":"pass","ms":795,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/identity.test.ts::Nectenda Cloud in a real vault gives a first-ever user an organisation of their own, with nobody to invite them","verdict":"pass","ms":2723,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/identity.test.ts::Nectenda Cloud in a real vault signs a device out everywhere when its session is ended from another device","verdict":"pass","ms":1262,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/identity.test.ts::Nectenda Cloud in a real vault holds a device slot by the roster: refused when full, freed by a remove, added from the pane","verdict":"pass","ms":3682,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/identity.test.ts::Nectenda Cloud in a real vault greets a signed-out vault with the branded sign-in screen","verdict":"pass","ms":224,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/identity.test.ts::Nectenda Cloud in a real vault signs in with an emailed code, accepts an invitation from inside Obsidian, and syncs with the owner","verdict":"pass","ms":2474,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/identity.test.ts::Nectenda Cloud in a real vault shows an editor the people and their fingerprints, read-only, and records a comparison","verdict":"pass","ms":83,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/identity.test.ts::Nectenda Cloud in a real vault lists an organisation's shared folders on its page, and refuses to share a folder twice","verdict":"pass","ms":548,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/identity.test.ts::Nectenda Cloud in a real vault presents a rotated refresh token once, however many loaders were refused together","verdict":"pass","ms":45,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/identity.test.ts::Nectenda Cloud in a real vault shows the signed-in vaults as one box of rows divided by rules","verdict":"pass","ms":359,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/identity.test.ts::Nectenda Cloud in a real vault joins a second organisation on another server by share link and syncs both at once","verdict":"pass","ms":324,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/identity.test.ts::Nectenda Cloud in a real vault keeps syncing to both servers with the identity service down","verdict":"pass","ms":1351,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/identity.test.ts::Nectenda Cloud in a real vault leaves no text sitting outside a row in the signed-in settings","verdict":"pass","ms":391,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/identity.test.ts::Nectenda Cloud in a real vault unshares a folder from the owner, and leaves every vault its notes","verdict":"pass","ms":1239,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/identity.test.ts::Nectenda Cloud in a real vault shows the organisation roster in settings, and an owner removes a member from it","verdict":"pass","ms":534,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/invite-to-folder.test.ts::inviting someone straight to a folder invites an address straight to a folder: claimed on joining, the key shared automatically, offered and added safely","verdict":"pass","ms":2085,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/invite-to-folder.test.ts::inviting someone straight to a folder refuses to share a folder key with a collaborator whose key has changed","verdict":"pass","ms":275,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/multi-pane.test.ts::two notes open at the same time keeps each note’s edits in its own document","verdict":"pass","ms":1862,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/ports.test.ts::the suite port table gives every suite an offset nothing else uses, below the sentinel","verdict":"pass","ms":3,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/ports.test.ts::the suite port table stays clear of the ephemeral range the kernel allocates from, wherever the block lands","verdict":"pass","ms":0,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/ports.test.ts::the suite port table keeps a lone run on the ports the suites always used","verdict":"pass","ms":0,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/ports.test.ts::the suite port table runs this worker on the block the global setup claimed","verdict":"pass","ms":0,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/ports.test.ts::the suite port table refuses a malformed base rather than guessing","verdict":"pass","ms":2,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/ports.test.ts::claiming a port block gives two claims on one host different blocks","verdict":"pass","ms":11,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/ports.test.ts::claiming a port block fails loudly when a pinned block is held by another run","verdict":"pass","ms":3,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/ports.test.ts::claiming a port block moves past a block the same random draw would pick, when it is held","verdict":"pass","ms":3,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/ports.test.ts::claiming a port block refuses a pinned block when a suite port in it is taken by something else","verdict":"pass","ms":6,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/ports.test.ts::claiming a port block frees the block on release, so the next run can have it","verdict":"pass","ms":3,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/recovery.test.ts::recovering a forgotten password, with a vault that must still work writes a note, and it reaches the server before anything is reset","verdict":"pass","ms":291,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/recovery.test.ts::recovering a forgotten password, with a vault that must still work recovers with the recovery key and sets a new password","verdict":"pass","ms":488,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/recovery.test.ts::recovering a forgotten password, with a vault that must still work still unwraps the folder keys with the recovered identity","verdict":"pass","ms":4,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/recovery.test.ts::recovering a forgotten password, with a vault that must still work reads the pre-reset note in a fresh vault, using only recovered material","verdict":"pass","ms":1536,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/repro-runaway.test.ts::a document after a single offline edit settles at a sane size instead of growing without bound","verdict":"pass","ms":20477,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/restart.test.ts::a server restart under load loses nothing typed on either side, and the vaults are back within seconds","verdict":"pass","ms":10325,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/secret-storage.test.ts::secret storage on Obsidian 1.9.14 (predates the API) keeps secrets out of the vault file whenever a keychain is used","verdict":"pass","ms":1033,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/secret-storage.test.ts::secret storage on Obsidian latest keeps secrets out of the vault file whenever a keychain is used","verdict":"pass","ms":751,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/startup-binding.test.ts::a file open before syncing starts, with the server down keeps the edit and delivers it when the server returns","verdict":"pass","ms":9860,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/startup-binding.test.ts::a file open before syncing starts, with the server down goes through the deferred-binding path","verdict":"pass","ms":6,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/sync-status.test.ts::the status a vault claims for a note is confirmed only for writing the other vault can then read","verdict":"pass","ms":2412,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/sync-status.test.ts::the status a vault claims for a note is never confirmed for writing made with no connection, and B does not have it","verdict":"pass","ms":4147,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/sync-status.test.ts::the header icon counts the other person in the note, and nobody when alone","verdict":"pass","ms":360,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/sync-status.test.ts::the header icon still counts one after this vault renames itself mid-session","verdict":"pass","ms":2515,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/sync-status.test.ts::the header icon switches pointer sharing from its menu exactly as the setting does","verdict":"pass","ms":419,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/sync-status.test.ts::the status icon in its three places shows the same icon, marks, label and menu in the note header, the ribbon and the status bar","verdict":"pass","ms":1069,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/sync-status.test.ts::the status icon's proportions draws the dot and the number in the same proportion to the logo, in the same place, in all three spots","verdict":"pass","ms":309,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/sync-status.test.ts::the inspector checks the disk rather than reporting what it remembers","verdict":"pass","ms":8,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/sync-status.test.ts::the inspector opens from the header menu on the note it was asked about","verdict":"pass","ms":410,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/sync-status.test.ts::a note too large to sync is named in a notice, recorded once, and listed in settings","verdict":"pass","ms":1097,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/sync-status.test.ts::a note too large to sync is forgotten, and leaves the list, once trimmed under the limit","verdict":"pass","ms":21,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/two-vaults.test.ts::two vaults through one server has both vaults syncing, from the same starting content","verdict":"pass","ms":96,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/two-vaults.test.ts::two vaults through one server carries an edit typed in A through to B","verdict":"pass","ms":932,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/two-vaults.test.ts::two vaults through one server converges when both vaults edit at once","verdict":"pass","ms":2606,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/two-vaults.test.ts::an outage with both vaults running reconciles offline edits that reached the document before the server returned","verdict":"pass","ms":3887,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/two-vaults.test.ts::an outage with both vaults running keeps an edit typed but not yet saved when the server returns","verdict":"pass","ms":2008,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/two-vaults.test.ts::files created while the server is down delivers both vaults' new notes once it returns","verdict":"pass","ms":1611,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/two-vaults.test.ts::a file deleted while the server is down removes it from the other vault once it returns","verdict":"pass","ms":2116,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/two-vaults.test.ts::a deletion racing an edit keeps the unseen edit as a conflict copy rather than discarding it","verdict":"pass","ms":1918,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/two-vaults.test.ts::a file added and then deleted while a vault was away does not resurrect it on the vault that catches up","verdict":"pass","ms":8328,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
{"scenario":"test/multi/two-vaults.test.ts::renaming a mapped folder, with the folder still syncing keeps syncing both ways, with nothing re-mapped by hand","verdict":"pass","ms":4438,"run":"942","commit":"a4e9323aaaacea01c7e6155b3d7d1089ceff984f","ref":"refs/heads/worktree-nec-69-no-flake-ledger-per-scenario-e2e-history","event":"push","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-09-28T11:05:14.413Z"}
