{"scenario":"test/multi/attachments.test.ts::an attachment created in one vault arrives byte-identical in the other","verdict":"pass","ms":2162,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/attachments.test.ts::an attachment skipped on this device leaves a Download on this device button in the note, where the file would be","verdict":"pass","ms":4434,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/attachments.test.ts::deleting an attachment removes it from the other vault and reclaims the bytes","verdict":"pass","ms":2320,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":6247,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/background-pane.test.ts::a remote change to a note open in a background pane does not reach the document the active pane is bound to","verdict":"pass","ms":11408,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/bases.test.ts::a base between two vaults arrives exactly as it was written, and opens","verdict":"pass","ms":558,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/bases.test.ts::a base between two vaults keeps a formula added in one vault and a view added in the other, with no conflict copy","verdict":"pass","ms":2155,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/bases.test.ts::a base between two vaults keeps each vault's column widths","verdict":"pass","ms":1083,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/bases.test.ts::a base open in a view when a remote change arrives keeps the change the view had not saved, and the remote change, in the file and on screen","verdict":"pass","ms":1602,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/bases.test.ts::presence in a base shows each vault the other in the header, naming the view they are on, and clears it on close","verdict":"pass","ms":2345,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/bases.test.ts::focus in a base dots the shared entries, and not the vault's own note the query also finds, in a table and in cards","verdict":"pass","ms":1303,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/bases.test.ts::focus in a base outlines the row a collaborator is on in a table when the column is not a note property","verdict":"pass","ms":1287,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/bases.test.ts::focus in a base outlines the cell a collaborator is on in a table, and takes it away when they close the base","verdict":"pass","ms":1190,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/bases.test.ts::focus in a base outlines the card under a collaborator's pointer in cards","verdict":"pass","ms":1441,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/bases.test.ts::focus in a base keeps the dots on shared cards while the cards view scrolls and recycles them","verdict":"pass","ms":2643,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/bind-keystroke.test.ts::an edit made as a shared note binds reaches the file in both vaults, once","verdict":"pass","ms":3745,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/bind-keystroke.test.ts::an edit made as a shared note binds applies a deletion made as the note binds, in both vaults","verdict":"pass","ms":3102,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/bind-keystroke.test.ts::an edit made as a shared note binds keeps a collaborator's edit and the key, each once, when they cross","verdict":"pass","ms":3795,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/bind-keystroke.test.ts::an edit made as a pane binds, with another shared note open stays in its own note, once, in both vaults","verdict":"pass","ms":9562,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/bind-keystroke.test.ts::an edit made as a pane binds, with another shared note open keeps a key typed into a second pane of the bound note, once","verdict":"pass","ms":9087,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-attachments.test.ts::a canvas whose cards show a note and an image shows both in the vault that made it","verdict":"pass","ms":70,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-attachments.test.ts::a canvas whose cards show a note and an image shows both on another vault that keeps the folder at the same path","verdict":"pass","ms":87,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-attachments.test.ts::a canvas whose cards show a note and an image shows both on a vault that keeps the folder under another name","verdict":"pass","ms":75,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-attachments.test.ts::a canvas whose cards show a note and an image shows an image added while the other vault has the canvas open","verdict":"pass","ms":2100,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-attachments.test.ts::a canvas whose cards show a note and an image shows an image added while the other vault was offline","verdict":"pass","ms":2109,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-attachments.test.ts::a canvas whose cards show a note and an image carries typing in a note card live to the note's editor elsewhere, with carets both ways","verdict":"pass","ms":2690,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-attachments.test.ts::a canvas whose cards show a note and an image keeps each word once when the note is open in its pane and in a card of the same vault","verdict":"pass","ms":4563,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-attachments.test.ts::a canvas whose cards show a note and an image draws a peer's connection from its side, curved, and onto the card it snaps to","verdict":"pass","ms":2205,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-attachments.test.ts::a canvas whose cards show a note and an image draws the edges of a card a peer is dragging, following its outline","verdict":"pass","ms":877,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-attachments.test.ts::a canvas whose cards show a note and an image draws an edge a peer selected, and names a peer typing in a note card's note","verdict":"pass","ms":922,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-attachments.test.ts::a canvas whose cards show a note and an image never binds a card that shows one section of a note","verdict":"pass","ms":422,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-attachments.test.ts::a canvas whose cards show a note and an image keeps a note shown in an open canvas in sync, on disk and in its card","verdict":"pass","ms":319,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-attachments.test.ts::a canvas whose cards show a note and an image keeps both a peer's edit to a note and what was typed into its card before the card saved","verdict":"pass","ms":1442,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-attachments.test.ts::a canvas whose cards show a note and an image finds Obsidian's note card as the guard and the binding read it","verdict":"pass","ms":302,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-live.test.ts::a canvas open in two vaults at once shows a move in the other open canvas within a second, without reloading it","verdict":"pass","ms":2117,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-live.test.ts::a canvas open in two vaults at once carries a reorder alone into the other canvas","verdict":"pass","ms":277,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-live.test.ts::a canvas open in two vaults at once lets two people type in one card at once, each seeing the other's characters, none of them twice","verdict":"pass","ms":1799,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-live.test.ts::a canvas open in two vaults at once draws a peer's caret inside the card they are typing in, and takes it away when they leave the card","verdict":"pass","ms":1210,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-live.test.ts::a canvas open in two vaults at once shows who is typing in a card the viewer is only looking at, and where once the card has caught up","verdict":"pass","ms":1162,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-live.test.ts::a canvas open in two vaults at once keeps tracking a pointer moved inside a card being edited, at any zoom","verdict":"pass","ms":1259,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-live.test.ts::a canvas open in two vaults at once undoes only this user's own step, keeping a peer's change to the same node","verdict":"pass","ms":449,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-live.test.ts::a canvas open in two vaults at once shows each person's pointer and selection to the other","verdict":"pass","ms":2420,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-live.test.ts::a canvas open in two vaults at once draws a peer's move of another card while this user holds a drag, and holds back theirs of the dragged one (NEC-195)","verdict":"pass","ms":3280,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-live.test.ts::a canvas open in two vaults at once restores a kept copy over the open canvas exactly, in both vaults","verdict":"pass","ms":116,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-live.test.ts::a canvas open in two vaults at once names a note renamed in one vault by its new path on both boards, with links updated in both (canvas seed 1104)","verdict":"pass","ms":6204,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas-live.test.ts::a canvas open in two vaults at once falls back to syncing over disk, with a notice, when an internal is missing","verdict":"pass","ms":546,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas.test.ts::a canvas between two vaults arrives exactly as it was written, and opens","verdict":"pass","ms":539,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas.test.ts::a canvas between two vaults keeps two concurrent moves of different nodes, with no conflict copy","verdict":"pass","ms":2175,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas.test.ts::a canvas between two vaults merges concurrent edits to one card's text","verdict":"pass","ms":2109,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas.test.ts::a canvas between two vaults converges on one move of the same node, and keeps the other as a conflict copy","verdict":"pass","ms":2147,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas.test.ts::a canvas between two vaults brings back a node one vault deleted while the other, offline to it, moved it","verdict":"pass","ms":2114,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/canvas.test.ts::a canvas open in a view when a remote change arrives keeps the edit the view had not saved, and the remote change, in the file and on screen","verdict":"pass","ms":2611,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/collaboration.test.ts::renaming carries a rename to the other vault, content intact","verdict":"pass","ms":1084,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/collaboration.test.ts::background sync delivers a note to a vault that never opens it","verdict":"pass","ms":791,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/collaboration.test.ts::background sync delivers a later edit made without an editor","verdict":"pass","ms":534,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":1931,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/collaboration.test.ts::presence shows the other participant when both vaults have the file open","verdict":"pass","ms":674,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/collaboration.test.ts::presence keeps both participants visible across a reconnection","verdict":"pass","ms":16947,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/collaboration.test.ts::presence rebinds the open file after sync is stopped and started","verdict":"pass","ms":350,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/collaboration.test.ts::presence keeps both participants visible across a rename","verdict":"pass","ms":336,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/collaboration.test.ts::presence identity agrees on a collaborator colour between two vaults","verdict":"pass","ms":665,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/collaboration.test.ts::presence identity paints the circle in the same colour the collaborator broadcast","verdict":"pass","ms":40,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/collaboration.test.ts::presence identity shows a remote cursor label without anyone hovering it","verdict":"pass","ms":15,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":5049,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/collaboration.test.ts::collaborator pointers keeps the OS cursor out of the pointer checks","verdict":"pass","ms":1123,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":614,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/collaboration.test.ts::collaborator pointers pins a collaborator's off-screen text cursor to the edge too","verdict":"pass","ms":315,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/collaboration.test.ts::collaborator pointers hides pointers when showing is off, and withdraws one when sharing is off","verdict":"pass","ms":880,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/commands.test.ts::commands, ribbon and folder menu signed out, offers only opening settings, the diagnostic log and kept copies, and never a sign-out","verdict":"pass","ms":8,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/commands.test.ts::commands, ribbon and folder menu signed in, offers sharing once keys are enrolled","verdict":"pass","ms":31,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/commands.test.ts::commands, ribbon and folder menu opens Nectenda settings from the palette","verdict":"pass","ms":159,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/commands.test.ts::commands, ribbon and folder menu opens Nectenda settings from the ribbon logo's menu","verdict":"pass","ms":262,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/commands.test.ts::commands, ribbon and folder menu toggles the diagnostic log, and keeps the choice","verdict":"pass","ms":41,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/commands.test.ts::commands, ribbon and folder menu shows a backup Obsidian does not list, and restores it, keeping what it replaced","verdict":"pass","ms":81,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/commands.test.ts::commands, ribbon and folder menu restores an attachment's conflict copy byte for byte, keeping the bytes it replaced","verdict":"pass","ms":69,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":174,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":598,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/compaction.test.ts::the plugin answers a compaction request shortens a log it never wrote","verdict":"pass","ms":2479,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":8749,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults is written compressed by this Excalidraw release, and decodes","verdict":"pass","ms":8,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults exposes the internals the live binding reads","verdict":"pass","ms":513,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults keeps both vaults' shapes when each draws one while the other is offline","verdict":"pass","ms":2392,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults shows a shape drawn in A in B's open drawing, without a save or a reload","verdict":"pass","ms":3387,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults stays live while both draw in turn","verdict":"pass","ms":4562,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults takes a new blank drawing live at once, and stays live while both write text in it","verdict":"pass","ms":6425,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults binds a drawing with bound arrows and wrapped text, which Excalidraw recomputes as it loads, with no edit made","verdict":"pass","ms":1912,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults comes back live after an image is inserted, and never puts the image's bytes in the drawing","verdict":"pass","ms":1666,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults writes an image pasted in but not saved into both files within seconds","verdict":"pass","ms":4237,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults comes back live in both after an image is deleted and another inserted","verdict":"pass","ms":3335,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults stops showing a vault whose drawing is no longer live","verdict":"pass","ms":1601,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults keeps two drawings apart when another opens in the same tab while bound","verdict":"pass","ms":5123,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults binds a drawing opened while the other side keeps drawing, and shows each to the other within seconds","verdict":"pass","ms":4565,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults draws A's pointer on B's drawing, as an Excalidraw collaborator","verdict":"pass","ms":1340,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults keeps the losing edit of one shape, drawn in two places at once, beside it with a label","verdict":"pass","ms":2640,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults merges a drawing when it is saved, with live sync for drawings turned off","verdict":"pass","ms":1697,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults keeps no copy of an edit that a drawing not live loaded and then edited over","verdict":"pass","ms":6516,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults keeps a move made after the binding lets go when the closing tab's save lands after the reopened tab is bound","verdict":"pass","ms":4678,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults keeps a collaborator's note above the drawing when a closing tab that never showed it saves after the reopened tab is bound","verdict":"pass","ms":10112,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults keeps a collaborator's note above the drawing when a closing tab that never showed it saves before the drawing is reopened","verdict":"pass","ms":8315,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults keeps a move made during the save before binding, in a tab that switched file at once","verdict":"pass","ms":5212,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults keeps no copy of a move made during the save before binding, when the binding binds","verdict":"pass","ms":5205,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults keeps a shape added and saved just after its tab was reopened","verdict":"pass","ms":6121,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults saves an open drawing's unsaved edit as sync stops, so it is not left to Excalidraw's autosave","verdict":"pass","ms":1495,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/excalidraw.test.ts::an Excalidraw drawing in two vaults keeps a shape deleted with sync stopped deleted, after Obsidian is quit and started again","verdict":"pass","ms":6468,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/execute-once.test.ts::a script WebDriver re-sends after an error runs once through executeObsidian, and the re-send gets its own error back","verdict":"pass","ms":1548,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/execute-once.test.ts::a script WebDriver re-sends after an error runs once through a direct execute","verdict":"pass","ms":1532,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/execute-once.test.ts::a script that succeeds returns its value, awaits a promise and takes an element argument as before","verdict":"pass","ms":22,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/execute-once.test.ts::a script that succeeds runs again when called again with the same script and arguments","verdict":"pass","ms":9,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/execute-once.test.ts::a click the driver answers with an error fails, naming NEC-301 and the error, and is never re-sent","verdict":"pass","ms":2208,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/execute-once.test.ts::a click the driver answers with an error clicks once, as before, when nothing is in the way","verdict":"pass","ms":76,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":365,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":1296,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/external-edit.test.ts::a file changed outside Obsidian while its note is open keeps a remote edit the file had not received yet, and the other program's change","verdict":"pass","ms":9442,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/external-edit.test.ts::a file changed outside Obsidian while its note is open keeps typing not saved yet, and the other program's change","verdict":"pass","ms":8345,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":10036,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":5653,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":27,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":797,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/frontmatter.test.ts::a note's properties between two vaults keeps two properties changed at once in different vaults","verdict":"pass","ms":2421,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/frontmatter.test.ts::a note's properties between two vaults settles one property set in both vaults at once on a value someone chose, and keeps the other as a conflict copy","verdict":"pass","ms":2409,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/frontmatter.test.ts::a note's properties between two vaults carries a change made in the Properties panel of an open note","verdict":"pass","ms":2236,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/frontmatter.test.ts::a note's properties between two vaults shows a property changed elsewhere in the Properties panel of a note open here","verdict":"pass","ms":1916,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/frontmatter.test.ts::a note's properties between two vaults does not discard a value being typed in the panel when another vault changes it","verdict":"pass","ms":7076,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/frontmatter.test.ts::who is on which property shows a collaborator's colour on the property they focus, names it in the header, and clears it on blur and on close","verdict":"pass","ms":2820,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":3484,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":1438,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":3855,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":208,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":2547,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":94,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":597,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":392,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":537,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":578,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":1445,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":383,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":1205,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":587,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":2054,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/kanban.test.ts::a Kanban board open in two vaults opens in the Kanban view in both","verdict":"pass","ms":1043,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/kanban.test.ts::a Kanban board open in two vaults shows a card moved in one vault in the other board, without reopening it","verdict":"pass","ms":269,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/kanban.test.ts::a Kanban board open in two vaults keeps a card being edited open while a card arrives, then writes both","verdict":"pass","ms":4476,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/kanban.test.ts::a Kanban board open in two vaults shows each person in the other's board header","verdict":"pass","ms":1025,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/kanban.test.ts::a Kanban board open in two vaults outlines the card someone is editing on the other's board, and takes it off when they stop","verdict":"pass","ms":326,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/kanban.test.ts::a Kanban board open in two vaults keeps the outline on a card clicked, after the button is let go, until Escape","verdict":"pass","ms":2098,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/kanban.test.ts::a Kanban board open in two vaults outlines a list clicked on its header on the other's board, with the name","verdict":"pass","ms":361,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/kanban.test.ts::a Kanban board open in two vaults shows a card edited in one vault in the other board within a second and a half","verdict":"pass","ms":650,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/kanban.test.ts::a Kanban board open in two vaults keeps every card when an edit begins while the board is reloading a remote card","verdict":"pass","ms":947,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/markdown-links.test.ts::a note linking by a path that names the folder as its writer keeps it holds the same text in both vaults: nothing rewrites the links","verdict":"pass","ms":12,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/markdown-links.test.ts::a note linking by a path that names the folder as its writer keeps it resolves both kinds of link, and the embed, to the files in this vault's copy","verdict":"pass","ms":14,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/markdown-links.test.ts::a note linking by a path that names the folder as its writer keeps it opens the synced note when the link is clicked, and creates no file","verdict":"pass","ms":59,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/markdown-links.test.ts::a note linking by a path that names the folder as its writer keeps it shows the embedded image, and both links as resolved, when the note is read","verdict":"pass","ms":52,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/markdown-links.test.ts::a note linking by a path that names the folder as its writer keeps it shows a drawing's image, each vault's file naming it under its own name for the folder, also after its Excalidraw saves","verdict":"pass","ms":7982,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/markdown-links.test.ts::a note linking by a path that names the folder as its writer keeps it opens the synced note even where a click before the fix left an empty note at the path the link names","verdict":"pass","ms":56,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/markdown-links.test.ts::a note linking by a path that names the folder as its writer keeps it leaves the note's text alone when the linked note is renamed here, though the link then goes stale","verdict":"pass","ms":5043,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/markdown-links.test.ts::an image added to an open drawing ahead of its attachment is drawn at once, live, without a missing-image warning, and its picture loads when the file arrives","verdict":"pass","ms":4494,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/markdown-links.test.ts::the relative link format the plugin offers is advised once a folder is shared, and not set without the user","verdict":"pass","ms":14,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/markdown-links.test.ts::the relative link format the plugin offers once accepted, writes new links that resolve in a vault keeping the folder under another name","verdict":"pass","ms":22,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/markdown-links.test.ts::the relative link format the plugin offers rewrites no link already written","verdict":"pass","ms":9,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":1848,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/multi-pane.test.ts::two notes open at the same time keeps an edit typed into each of two panes of one note, once each","verdict":"pass","ms":6817,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/multi-pane.test.ts::two notes open at the same time stays bound when Obsidian reconfigures its editors","verdict":"pass","ms":1388,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/multi-pane.test.ts::two notes open at the same time leaves a tab reused for another note and switched straight back holding its own note (NEC-263)","verdict":"pass","ms":4484,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/multi-pane.test.ts::two notes open at the same time keeps a line written under an editor that let go still owing a save (NEC-213, SAFE-A19)","verdict":"pass","ms":26651,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/multi-pane.test.ts::a tab let go of before Obsidian saved a collaborator's line into it keeps the collaborator's line once when that tab is edited and never bound again","verdict":"pass","ms":13177,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/multi-pane.test.ts::a tab let go of before Obsidian saved a collaborator's line into it binds that tab again with no backup when it is typed into and activated at once","verdict":"pass","ms":10166,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's canvas, as read against 1.13.7 formats a canvas exactly as canvas-codec.ts does (the ported formatter)","verdict":"pass","ms":1036,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's canvas, as read against 1.13.7 does not rewrite a canvas that is only opened","verdict":"pass","ms":4038,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's canvas, as read against 1.13.7 reloads an open canvas when its file changes on disk, with no merge","verdict":"pass","ms":531,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's canvas internals, as read against 1.13.7 has every member canvas-internals.ts relies on","verdict":"pass","ms":538,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's canvas internals, as read against 1.13.7 updates nodes in place with importData(_, false), removing nothing, pushing no history and saving nothing","verdict":"pass","ms":928,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's canvas internals, as read against 1.13.7 undoes through applyHistory, which skips canvas.requestSave but still saves","verdict":"pass","ms":931,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's canvas internals, as read against 1.13.7 names a card editor's node through editorInfoField, and setText writes into an open card editor","verdict":"pass","ms":911,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's canvas internals, as read against 1.13.7 brings a node to the front with updateZIndex, which getData orders by","verdict":"pass","ms":533,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's canvas internals, as read against 1.13.7 marks every node a drag moves, a group's members included, and no other","verdict":"pass","ms":1437,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's bases view, as read against 1.14.4 is a TextFileView, so the guard can flush it and see what it loaded","verdict":"pass","ms":533,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's bases view, as read against 1.14.4 writes a base exactly as bases-codec.ts does","verdict":"pass","ms":1044,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's bases view, as read against 1.14.4 does not rewrite a base that is only opened","verdict":"pass","ms":4031,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's bases view, as read against 1.14.4 reloads an open base when its file changes on disk","verdict":"pass","ms":532,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's bases view, as read against 1.14.4 names the selected view in its state, and switches view through it","verdict":"pass","ms":542,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's bases layouts, as read against 1.13.7 has every member bases-internals.ts relies on, in the table layout","verdict":"pass","ms":821,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's bases layouts, as read against 1.13.7 has every member bases-internals.ts relies on, in the cards layout","verdict":"pass","ms":809,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's bases layouts, as read against 1.13.7 has every member bases-internals.ts relies on, in the list layout","verdict":"pass","ms":809,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's bases layouts, as read against 1.13.7 moves the table's active cell to the cell clicked, and names its column's property","verdict":"pass","ms":1723,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's Properties panel, as read against 1.13.7 marks each row with data-property-key, and focus inside a row finds it","verdict":"pass","ms":843,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's frontmatter, as read against 1.13.7 writes a property exactly as frontmatter-block.ts does","verdict":"pass","ms":14,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's frontmatter, as read against 1.13.7 finds the block where getFrontMatterInfo does","verdict":"pass","ms":5,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/obsidian-contract.test.ts::Obsidian's frontmatter, as read against 1.13.7 removes the block when the last property goes","verdict":"pass","ms":18,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/ports.test.ts::the suite port table gives every suite an offset nothing else uses, below the sentinel","verdict":"pass","ms":2,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/ports.test.ts::the suite port table refuses a malformed base rather than guessing","verdict":"pass","ms":1,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/ports.test.ts::claiming a port block gives two claims on one host different blocks","verdict":"pass","ms":5,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/ports.test.ts::claiming a port block fails loudly when a pinned block is held by another run","verdict":"pass","ms":2,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":2,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":1,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":1,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":293,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":468,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":1684,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/release-cancel.test.ts::starting over is announced on the other signed-in vault without a refresh, which can cancel it from settings","verdict":"pass","ms":437,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":20488,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":10044,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/seat-from-elsewhere.test.ts::a seat taken on another device adds this device to the organisation at its next refresh, and the folder it adds syncs","verdict":"pass","ms":1049,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":1118,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":951,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":9883,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":7,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":2530,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":4165,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/sync-status.test.ts::the header icon counts the other person in the note, and nobody when alone","verdict":"pass","ms":359,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/sync-status.test.ts::the header icon switches pointer sharing from its menu exactly as the setting does","verdict":"pass","ms":418,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":310,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/sync-status.test.ts::the status icon's proportions matches the size of the icons around it, in all three spots","verdict":"pass","ms":308,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/sync-status.test.ts::the status icon's proportions follows a change in icon size, logo and marks together, with no reload","verdict":"pass","ms":315,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/sync-status.test.ts::switching a place off keeps the ribbon icon gone after Obsidian redraws the ribbon","verdict":"pass","ms":207,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/sync-status.test.ts::the inspector checks the disk rather than reporting what it remembers","verdict":"pass","ms":8,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/sync-status.test.ts::the inspector opens from the header menu on the note it was asked about","verdict":"pass","ms":408,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":1094,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":35,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/two-vaults.test.ts::two vaults through one server has both vaults syncing, from the same starting content","verdict":"pass","ms":41,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/two-vaults.test.ts::two vaults through one server carries an edit typed in A through to B","verdict":"pass","ms":868,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/two-vaults.test.ts::two vaults through one server converges when both vaults edit at once","verdict":"pass","ms":2440,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":4057,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":1986,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":1603,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":1848,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":1928,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":8324,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/two-vaults.test.ts::a note edited while sync was stopped keeps the edit when sync starts again, and sends it to the other vault","verdict":"pass","ms":4104,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"scenario":"test/multi/two-vaults.test.ts::a note typed into, then renamed and typed into while sync was stopped ends under its new name only, in both vaults, with every word","verdict":"pass","ms":6756,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
{"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":4373,"run":"1539","commit":"194c0a6fd956162004cd1aab3a1f2f63083f80fa","ref":"refs/pull/312/head","event":"pull_request","runner":"ci","obsidian":"1.13.7/1.13.7","at":"2026-10-21T08:46:03.907Z"}
