feat(runtime): tell phones when git status changes (#39672)

* feat(runtime): tell phones when git status changes

* fix(runtime): tell phones about HEAD and packed-refs moves too

* fix(runtime): don't let a phone's status re-read join a read begun before the change

* perf(runtime): limit status-read invalidation to the checkouts an outside change touched

* fix(runtime): match a checkout's status keys under any execution host

* fix(runtime): invalidate globally while a primary checkout is unread

* test(mobile): re-record the Changes and settings goldens on the rebased main

* fix(runtime): invalidate globally while a listed checkout has no cached path

* test: follow the moved paired-client harness

* refactor(mobile): let the host list's catalog read hold the event router
This commit is contained in:
Kelvin Amoaba
2026-11-08 18:36:13 +00:00
committed by GitHub
parent 2aa47c91d2
commit f74bb65fa1
36 changed files with 11699 additions and 6581 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -4,19 +4,18 @@
"family": "git.changes-load",
"namedDeltas": [],
"values": {
"01ca1551d26f": {
"name": "git.branchCompare#1",
"ordinal": 9,
"1934c215114a": {
"name": "repo.list#1",
"ordinal": 7,
"args": [
{
"name": "method",
"value": "git.branchCompare"
"value": "repo.list"
},
{
"name": "params",
"value": {
"baseRef": "origin/dev",
"worktree": "id:repo42::/p"
"$rpc": "undefined"
}
},
{
@@ -27,34 +26,15 @@
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-5",
"ok": true,
"result": {
"entries": [
{
"added": 2,
"path": "src/app.ts",
"removed": 1,
"status": "modified"
}
],
"summary": {
"baseOid": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
"baseRef": "origin/dev",
"changedFiles": 1,
"compareRef": "feature",
"headOid": "f0e1d2c3b4a5968778695a4b3c2d1e0f98765432",
"mergeBase": "0123456789abcdef0123456789abcdef01234567",
"status": "ready"
}
}
}
"status": "pending",
"startedAt": 0
}
},
"1c2564f1daca": {
"name": "settings.get#1",
"ordinal": 4,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
},
"1d461278a0ae": {
"branchCompareState": {
"kind": "ready",
@@ -107,57 +87,13 @@
}
}
},
"2b017ef94a43": {
"name": "git.branchCompare#1",
"ordinal": 10,
"json": "{\"id\":\"frame-5\",\"deviceToken\":\"recording-device\",\"method\":\"git.branchCompare\",\"params\":{\"worktree\":\"id:repo42::/p\",\"baseRef\":\"origin/dev\"}}"
},
"38d7fa10de1a": {
"name": "worktree.show#1",
"ordinal": 7,
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.show\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"3976c7351120": {
"name": "repo.list#1",
"ordinal": 6,
"2ab4c978da8d": {
"name": "git.status#1",
"ordinal": 3,
"args": [
{
"name": "method",
"value": "repo.list"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-4",
"ok": true,
"result": {
"repos": []
}
}
}
},
"617610cd7106": {
"name": "worktree.show#1",
"ordinal": 5,
"args": [
{
"name": "method",
"value": "worktree.show"
"value": "git.status"
},
{
"name": "params",
@@ -173,23 +109,13 @@
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-3",
"ok": true,
"result": {
"worktree": {
"baseRef": "origin/dev"
}
}
}
"status": "pending",
"startedAt": 0
}
},
"680d7579d052": {
"2ca33da4d135": {
"name": "repo.list#1",
"ordinal": 6,
"ordinal": 7,
"args": [
{
"name": "method",
@@ -209,11 +135,75 @@
}
],
"settlement": {
"status": "pending",
"startedAt": 0
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-5",
"ok": true,
"result": {
"repos": []
}
}
}
},
"891438a18444": {
"5d30d477f0d5": {
"name": "git.branchCompare#1",
"ordinal": 10,
"args": [
{
"name": "method",
"value": "git.branchCompare"
},
{
"name": "params",
"value": {
"baseRef": "origin/dev",
"worktree": "id:repo42::/p"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-6",
"ok": true,
"result": {
"entries": [
{
"added": 2,
"path": "src/app.ts",
"removed": 1,
"status": "modified"
}
],
"summary": {
"baseOid": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
"baseRef": "origin/dev",
"changedFiles": 1,
"compareRef": "feature",
"headOid": "f0e1d2c3b4a5968778695a4b3c2d1e0f98765432",
"mergeBase": "0123456789abcdef0123456789abcdef01234567",
"status": "ready"
}
}
}
}
},
"5e74c6d574e1": {
"name": "git.branchCompare#1",
"ordinal": 11,
"json": "{\"id\":\"frame-6\",\"deviceToken\":\"recording-device\",\"method\":\"git.branchCompare\",\"params\":{\"worktree\":\"id:repo42::/p\",\"baseRef\":\"origin/dev\"}}"
},
"63bc0796d81c": {
"name": "settings.get#1",
"ordinal": 1,
"args": [
@@ -235,13 +225,19 @@
}
],
"settlement": {
"status": "pending",
"startedAt": 0
"status": "rejected",
"startedAt": 0,
"settledAt": 0,
"error": {
"category": "Error",
"message": "Connection closed",
"isRpcDeliveryUnknown": true
}
}
},
"8ac3c8b29916": {
"6f4a5d6a5a86": {
"name": "worktree.show#1",
"ordinal": 5,
"ordinal": 6,
"args": [
{
"name": "method",
@@ -265,6 +261,84 @@
"startedAt": 0
}
},
"71f3760dfea1": {
"name": "repo.list#1",
"ordinal": 9,
"json": "{\"id\":\"frame-5\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\"}"
},
"74d102469d68": {
"name": "worktree.show#1",
"ordinal": 6,
"args": [
{
"name": "method",
"value": "worktree.show"
},
{
"name": "params",
"value": {
"worktree": "id:repo42::/p"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-4",
"ok": true,
"result": {
"worktree": {
"baseRef": "origin/dev"
}
}
}
}
},
"76c784c63522": {
"name": "streams-registered-at-teardown",
"ordinal": 12,
"value": [
{
"cancelled": true,
"method": "runtime.clientEvents.subscribe",
"payload": "runtime.clientEvents.subscribe#1"
}
]
},
"891438a18444": {
"name": "settings.get#1",
"ordinal": 1,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"8fda864c66d6": {
"branchCompareState": {
"kind": "loading"
@@ -298,19 +372,14 @@
}
}
},
"973ac78137f2": {
"92a577a15fcc": {
"name": "git.status#1",
"ordinal": 4,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"git.status\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
"ordinal": 5,
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"git.status\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"9916ac6863ce": {
"name": "repo.list#1",
"ordinal": 8,
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\"}"
},
"9cb2ba41c834": {
"962f91336a50": {
"name": "git.status#1",
"ordinal": 2,
"ordinal": 3,
"args": [
{
"name": "method",
@@ -334,7 +403,7 @@
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-2",
"id": "frame-3",
"ok": true,
"result": {
"branch": "feature",
@@ -372,31 +441,15 @@
"kind": "loading"
}
},
"d16c7a42b81c": {
"name": "git.status#1",
"cb462f8b50a3": {
"name": "worktree.show#1",
"ordinal": 8,
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.show\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"e539e80d06e9": {
"name": "runtime.clientEvents.subscribe#1",
"ordinal": 2,
"args": [
{
"name": "method",
"value": "git.status"
},
{
"name": "params",
"value": {
"worktree": "id:repo42::/p"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"runtime.clientEvents.subscribe\",\"params\":null}"
},
"eb79a9b3682a": {
"status": "fulfilled",
@@ -405,11 +458,6 @@
"value": {
"$rpc": "undefined"
}
},
"f648b042d810": {
"name": "settings.get#1",
"ordinal": 3,
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
}
},
"recording": {
@@ -418,8 +466,8 @@
{
"id": "status-pending",
"observation": {
"sender": ["891438a18444", "d16c7a42b81c"],
"payloads": ["f648b042d810", "973ac78137f2"],
"sender": ["891438a18444", "2ab4c978da8d"],
"payloads": ["e539e80d06e9", "1c2564f1daca", "92a577a15fcc"],
"settlements": {
"mount": "eb79a9b3682a"
},
@@ -430,8 +478,14 @@
{
"id": "compare-pending",
"observation": {
"sender": ["891438a18444", "9cb2ba41c834", "8ac3c8b29916", "680d7579d052"],
"payloads": ["f648b042d810", "973ac78137f2", "38d7fa10de1a", "9916ac6863ce"],
"sender": ["891438a18444", "962f91336a50", "6f4a5d6a5a86", "1934c215114a"],
"payloads": [
"e539e80d06e9",
"1c2564f1daca",
"92a577a15fcc",
"cb462f8b50a3",
"71f3760dfea1"
],
"settlements": {
"mount": "eb79a9b3682a"
},
@@ -444,17 +498,18 @@
"observation": {
"sender": [
"891438a18444",
"9cb2ba41c834",
"617610cd7106",
"3976c7351120",
"01ca1551d26f"
"962f91336a50",
"74d102469d68",
"2ca33da4d135",
"5d30d477f0d5"
],
"payloads": [
"f648b042d810",
"973ac78137f2",
"38d7fa10de1a",
"9916ac6863ce",
"2b017ef94a43"
"e539e80d06e9",
"1c2564f1daca",
"92a577a15fcc",
"cb462f8b50a3",
"71f3760dfea1",
"5e74c6d574e1"
],
"settlements": {
"mount": "eb79a9b3682a"
@@ -462,6 +517,31 @@
"state": "1d461278a0ae",
"effects": []
}
},
{
"id": "cleanup",
"observation": {
"sender": [
"63bc0796d81c",
"962f91336a50",
"74d102469d68",
"2ca33da4d135",
"5d30d477f0d5"
],
"payloads": [
"e539e80d06e9",
"1c2564f1daca",
"92a577a15fcc",
"cb462f8b50a3",
"71f3760dfea1",
"5e74c6d574e1"
],
"settlements": {
"mount": "eb79a9b3682a"
},
"state": "1d461278a0ae",
"effects": ["76c784c63522"]
}
}
]
}
@@ -4,70 +4,17 @@
"family": "git.changes-load",
"namedDeltas": [],
"values": {
"01ca1551d26f": {
"name": "git.branchCompare#1",
"ordinal": 9,
"0aaf51212f23": {
"name": "worktree.show#2",
"ordinal": 15,
"args": [
{
"name": "method",
"value": "git.branchCompare"
"value": "worktree.show"
},
{
"name": "params",
"value": {
"baseRef": "origin/dev",
"worktree": "id:repo42::/p"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-5",
"ok": true,
"result": {
"entries": [
{
"added": 2,
"path": "src/app.ts",
"removed": 1,
"status": "modified"
}
],
"summary": {
"baseOid": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
"baseRef": "origin/dev",
"changedFiles": 1,
"compareRef": "feature",
"headOid": "f0e1d2c3b4a5968778695a4b3c2d1e0f98765432",
"mergeBase": "0123456789abcdef0123456789abcdef01234567",
"status": "ready"
}
}
}
}
},
"049ab1a02af9": {
"name": "git.status#2",
"ordinal": 11,
"args": [
{
"name": "method",
"value": "git.status"
},
{
"name": "params",
"value": {
"admissionTier": "background",
"reuseLineStats": true,
"worktree": "id:repo42::/p"
}
},
@@ -83,6 +30,43 @@
"startedAt": 3001
}
},
"11aae483d55b": {
"name": "repo.list#2",
"ordinal": 16,
"args": [
{
"name": "method",
"value": "repo.list"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 3001,
"settledAt": 3001,
"error": {
"category": "Error",
"message": "Connection closed",
"isRpcDeliveryUnknown": true
}
}
},
"1c2564f1daca": {
"name": "settings.get#1",
"ordinal": 4,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
},
"1d461278a0ae": {
"branchCompareState": {
"kind": "ready",
@@ -143,19 +127,9 @@
"$rpc": "undefined"
}
},
"2b017ef94a43": {
"name": "git.branchCompare#1",
"ordinal": 10,
"json": "{\"id\":\"frame-5\",\"deviceToken\":\"recording-device\",\"method\":\"git.branchCompare\",\"params\":{\"worktree\":\"id:repo42::/p\",\"baseRef\":\"origin/dev\"}}"
},
"38d7fa10de1a": {
"name": "worktree.show#1",
"ordinal": 7,
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.show\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"3976c7351120": {
"2ca33da4d135": {
"name": "repo.list#1",
"ordinal": 6,
"ordinal": 7,
"args": [
{
"name": "method",
@@ -179,7 +153,7 @@
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-4",
"id": "frame-5",
"ok": true,
"result": {
"repos": []
@@ -187,9 +161,9 @@
}
}
},
"546caf76908b": {
"2fcf3bf5b55a": {
"name": "git.status#2",
"ordinal": 11,
"ordinal": 13,
"args": [
{
"name": "method",
@@ -215,7 +189,7 @@
"startedAt": 3001,
"settledAt": 3001,
"value": {
"id": "frame-6",
"id": "frame-8",
"ok": true,
"result": {
"branch": "feature",
@@ -245,11 +219,6 @@
}
}
},
"55fcd35df38b": {
"name": "worktree.show#2",
"ordinal": 15,
"json": "{\"id\":\"frame-7\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.show\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"59ed9de4285b": {
"branchCompareState": {
"kind": "ready",
@@ -302,9 +271,75 @@
}
}
},
"617610cd7106": {
"5d30d477f0d5": {
"name": "git.branchCompare#1",
"ordinal": 10,
"args": [
{
"name": "method",
"value": "git.branchCompare"
},
{
"name": "params",
"value": {
"baseRef": "origin/dev",
"worktree": "id:repo42::/p"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-6",
"ok": true,
"result": {
"entries": [
{
"added": 2,
"path": "src/app.ts",
"removed": 1,
"status": "modified"
}
],
"summary": {
"baseOid": "a1b2c3d4e5f60718293a4b5c6d7e8f9012345678",
"baseRef": "origin/dev",
"changedFiles": 1,
"compareRef": "feature",
"headOid": "f0e1d2c3b4a5968778695a4b3c2d1e0f98765432",
"mergeBase": "0123456789abcdef0123456789abcdef01234567",
"status": "ready"
}
}
}
}
},
"5e74c6d574e1": {
"name": "git.branchCompare#1",
"ordinal": 11,
"json": "{\"id\":\"frame-6\",\"deviceToken\":\"recording-device\",\"method\":\"git.branchCompare\",\"params\":{\"worktree\":\"id:repo42::/p\",\"baseRef\":\"origin/dev\"}}"
},
"6bcbb73afab9": {
"name": "git.status#2",
"ordinal": 14,
"json": "{\"id\":\"frame-8\",\"deviceToken\":\"recording-device\",\"method\":\"git.status\",\"params\":{\"worktree\":\"id:repo42::/p\",\"reuseLineStats\":true,\"admissionTier\":\"background\"}}"
},
"71f3760dfea1": {
"name": "repo.list#1",
"ordinal": 9,
"json": "{\"id\":\"frame-5\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\"}"
},
"74d102469d68": {
"name": "worktree.show#1",
"ordinal": 5,
"ordinal": 6,
"args": [
{
"name": "method",
@@ -328,7 +363,7 @@
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-3",
"id": "frame-4",
"ok": true,
"result": {
"worktree": {
@@ -338,17 +373,19 @@
}
}
},
"6f512ea2abb3": {
"name": "worktree.show#2",
"7d368b32d250": {
"name": "git.status#2",
"ordinal": 13,
"args": [
{
"name": "method",
"value": "worktree.show"
"value": "git.status"
},
{
"name": "params",
"value": {
"admissionTier": "background",
"reuseLineStats": true,
"worktree": "id:repo42::/p"
}
},
@@ -364,10 +401,15 @@
"startedAt": 3001
}
},
"8329dee32b1b": {
"name": "repo.list#2",
"ordinal": 16,
"json": "{\"id\":\"frame-8\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\"}"
"871d554f0e5f": {
"name": "runtime.clientEvents.subscribe#2",
"ordinal": 12,
"json": "{\"id\":\"frame-7\",\"deviceToken\":\"recording-device\",\"method\":\"runtime.clientEvents.subscribe\",\"params\":null}"
},
"873a8baed182": {
"name": "worktree.show#2",
"ordinal": 17,
"json": "{\"id\":\"frame-9\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.show\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"891438a18444": {
"name": "settings.get#1",
@@ -395,19 +437,14 @@
"startedAt": 0
}
},
"973ac78137f2": {
"92a577a15fcc": {
"name": "git.status#1",
"ordinal": 4,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"git.status\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
"ordinal": 5,
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"git.status\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"9916ac6863ce": {
"name": "repo.list#1",
"ordinal": 8,
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\"}"
},
"9cb2ba41c834": {
"962f91336a50": {
"name": "git.status#1",
"ordinal": 2,
"ordinal": 3,
"args": [
{
"name": "method",
@@ -431,7 +468,7 @@
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-2",
"id": "frame-3",
"ok": true,
"result": {
"branch": "feature",
@@ -461,14 +498,9 @@
}
}
},
"c8ee8acc16b9": {
"name": "git.status#2",
"ordinal": 12,
"json": "{\"id\":\"frame-6\",\"deviceToken\":\"recording-device\",\"method\":\"git.status\",\"params\":{\"worktree\":\"id:repo42::/p\",\"reuseLineStats\":true,\"admissionTier\":\"background\"}}"
},
"c95a7c93e7cd": {
"a6d51875b1b0": {
"name": "repo.list#2",
"ordinal": 14,
"ordinal": 16,
"args": [
{
"name": "method",
@@ -492,6 +524,133 @@
"startedAt": 3001
}
},
"aac6d32d0fb7": {
"name": "streams-registered-at-teardown",
"ordinal": 19,
"value": [
{
"cancelled": true,
"method": "runtime.clientEvents.subscribe",
"payload": "runtime.clientEvents.subscribe#1"
},
{
"cancelled": true,
"method": "runtime.clientEvents.subscribe",
"payload": "runtime.clientEvents.subscribe#2"
}
]
},
"ade0dae5eee8": {
"name": "settings.get#1",
"ordinal": 1,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 0,
"settledAt": 3001,
"error": {
"category": "Error",
"message": "Connection closed",
"isRpcDeliveryUnknown": true
}
}
},
"cb462f8b50a3": {
"name": "worktree.show#1",
"ordinal": 8,
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.show\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"cf638e3657c3": {
"name": "repo.list#2",
"ordinal": 18,
"json": "{\"id\":\"frame-10\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\"}"
},
"d29ae612a0e8": {
"name": "repo.baseRefDefault#1",
"ordinal": 20,
"args": [
{
"name": "method",
"value": "repo.baseRefDefault"
},
{
"name": "params",
"value": {
"repo": "id:repo42"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 3001,
"settledAt": 3001,
"error": {
"category": "Error",
"message": "Client closed",
"isRpcDeliveryUnknown": false
}
}
},
"dc8375b6f1eb": {
"name": "worktree.show#2",
"ordinal": 15,
"args": [
{
"name": "method",
"value": "worktree.show"
},
{
"name": "params",
"value": {
"worktree": "id:repo42::/p"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 3001,
"settledAt": 3001,
"error": {
"category": "Error",
"message": "Connection closed",
"isRpcDeliveryUnknown": true
}
}
},
"e539e80d06e9": {
"name": "runtime.clientEvents.subscribe#1",
"ordinal": 2,
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"runtime.clientEvents.subscribe\",\"params\":null}"
},
"eb79a9b3682a": {
"status": "fulfilled",
"startedAt": 0,
@@ -499,11 +658,6 @@
"value": {
"$rpc": "undefined"
}
},
"f648b042d810": {
"name": "settings.get#1",
"ordinal": 3,
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
}
},
"recording": {
@@ -514,17 +668,18 @@
"observation": {
"sender": [
"891438a18444",
"9cb2ba41c834",
"617610cd7106",
"3976c7351120",
"01ca1551d26f"
"962f91336a50",
"74d102469d68",
"2ca33da4d135",
"5d30d477f0d5"
],
"payloads": [
"f648b042d810",
"973ac78137f2",
"38d7fa10de1a",
"9916ac6863ce",
"2b017ef94a43"
"e539e80d06e9",
"1c2564f1daca",
"92a577a15fcc",
"cb462f8b50a3",
"71f3760dfea1",
"5e74c6d574e1"
],
"settlements": {
"mount": "eb79a9b3682a"
@@ -538,19 +693,21 @@
"observation": {
"sender": [
"891438a18444",
"9cb2ba41c834",
"617610cd7106",
"3976c7351120",
"01ca1551d26f",
"049ab1a02af9"
"962f91336a50",
"74d102469d68",
"2ca33da4d135",
"5d30d477f0d5",
"7d368b32d250"
],
"payloads": [
"f648b042d810",
"973ac78137f2",
"38d7fa10de1a",
"9916ac6863ce",
"2b017ef94a43",
"c8ee8acc16b9"
"e539e80d06e9",
"1c2564f1daca",
"92a577a15fcc",
"cb462f8b50a3",
"71f3760dfea1",
"5e74c6d574e1",
"871d554f0e5f",
"6bcbb73afab9"
],
"settlements": {
"mount": "eb79a9b3682a",
@@ -566,23 +723,25 @@
"observation": {
"sender": [
"891438a18444",
"9cb2ba41c834",
"617610cd7106",
"3976c7351120",
"01ca1551d26f",
"546caf76908b",
"6f512ea2abb3",
"c95a7c93e7cd"
"962f91336a50",
"74d102469d68",
"2ca33da4d135",
"5d30d477f0d5",
"2fcf3bf5b55a",
"0aaf51212f23",
"a6d51875b1b0"
],
"payloads": [
"f648b042d810",
"973ac78137f2",
"38d7fa10de1a",
"9916ac6863ce",
"2b017ef94a43",
"c8ee8acc16b9",
"55fcd35df38b",
"8329dee32b1b"
"e539e80d06e9",
"1c2564f1daca",
"92a577a15fcc",
"cb462f8b50a3",
"71f3760dfea1",
"5e74c6d574e1",
"871d554f0e5f",
"6bcbb73afab9",
"873a8baed182",
"cf638e3657c3"
],
"settlements": {
"mount": "eb79a9b3682a",
@@ -592,6 +751,41 @@
"state": "59ed9de4285b",
"effects": []
}
},
{
"id": "cleanup",
"observation": {
"sender": [
"ade0dae5eee8",
"962f91336a50",
"74d102469d68",
"2ca33da4d135",
"5d30d477f0d5",
"2fcf3bf5b55a",
"dc8375b6f1eb",
"11aae483d55b",
"d29ae612a0e8"
],
"payloads": [
"e539e80d06e9",
"1c2564f1daca",
"92a577a15fcc",
"cb462f8b50a3",
"71f3760dfea1",
"5e74c6d574e1",
"871d554f0e5f",
"6bcbb73afab9",
"873a8baed182",
"cf638e3657c3"
],
"settlements": {
"mount": "eb79a9b3682a",
"leave": "eb79a9b3682a",
"return": "1ebd23509cad"
},
"state": "59ed9de4285b",
"effects": ["aac6d32d0fb7"]
}
}
]
}
@@ -4,6 +4,164 @@
"family": "git.changes-load",
"namedDeltas": [],
"values": {
"049ab1a02af9": {
"name": "git.status#2",
"ordinal": 11,
"args": [
{
"name": "method",
"value": "git.status"
},
{
"name": "params",
"value": {
"admissionTier": "background",
"reuseLineStats": true,
"worktree": "id:repo42::/p"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 3001
}
},
"0aaf51212f23": {
"name": "worktree.show#2",
"ordinal": 15,
"args": [
{
"name": "method",
"value": "worktree.show"
},
{
"name": "params",
"value": {
"worktree": "id:repo42::/p"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 3001
}
},
"11aae483d55b": {
"name": "repo.list#2",
"ordinal": 16,
"args": [
{
"name": "method",
"value": "repo.list"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 3001,
"settledAt": 3001,
"error": {
"category": "Error",
"message": "Connection closed",
"isRpcDeliveryUnknown": true
}
}
},
"1934c215114a": {
"name": "repo.list#1",
"ordinal": 7,
"args": [
{
"name": "method",
"value": "repo.list"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"19ca3e1a1f83": {
"name": "source-control.action-error",
"ordinal": 19,
"value": {
"message": {
"$rpc": "null"
}
}
},
"1a6e003b2d53": {
"name": "repo.baseRefDefault#2",
"ordinal": 23,
"args": [
{
"name": "method",
"value": "repo.baseRefDefault"
},
{
"name": "params",
"value": {
"repo": "id:repo42"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 3001,
"settledAt": 3001,
"error": {
"category": "Error",
"message": "Client closed",
"isRpcDeliveryUnknown": false
}
}
},
"1c2564f1daca": {
"name": "settings.get#1",
"ordinal": 4,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
},
"1ebd23509cad": {
"status": "fulfilled",
"startedAt": 3001,
@@ -45,42 +203,18 @@
}
}
},
"37c6af2ac5fd": {
"name": "source-control.action-error",
"ordinal": 17,
"value": {
"message": {
"$rpc": "null"
}
}
},
"38d7fa10de1a": {
"334b41f87c41": {
"name": "worktree.show#1",
"ordinal": 7,
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.show\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"4ad21925feec": {
"name": "git.status#3",
"ordinal": 12,
"json": "{\"id\":\"frame-6\",\"deviceToken\":\"recording-device\",\"method\":\"git.status\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"55fcd35df38b": {
"name": "worktree.show#2",
"ordinal": 15,
"json": "{\"id\":\"frame-7\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.show\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"680d7579d052": {
"name": "repo.list#1",
"ordinal": 6,
"args": [
{
"name": "method",
"value": "repo.list"
"value": "worktree.show"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
"worktree": "id:repo42::/p"
}
},
{
@@ -91,13 +225,128 @@
}
],
"settlement": {
"status": "pending",
"startedAt": 0
"status": "rejected",
"startedAt": 0,
"settledAt": 3001,
"error": {
"category": "Error",
"message": "Connection closed",
"isRpcDeliveryUnknown": true
}
}
},
"6f512ea2abb3": {
"name": "worktree.show#2",
"47e21717f87b": {
"name": "git.status#2",
"ordinal": 12,
"json": "{\"id\":\"frame-7\",\"deviceToken\":\"recording-device\",\"method\":\"git.status\",\"params\":{\"worktree\":\"id:repo42::/p\",\"reuseLineStats\":true,\"admissionTier\":\"background\"}}"
},
"5186330278c2": {
"name": "repo.baseRefDefault#1",
"ordinal": 22,
"args": [
{
"name": "method",
"value": "repo.baseRefDefault"
},
{
"name": "params",
"value": {
"repo": "id:repo42"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 3001,
"settledAt": 3001,
"error": {
"category": "Error",
"message": "Client closed",
"isRpcDeliveryUnknown": false
}
}
},
"594138f50a6c": {
"name": "git.status#3",
"ordinal": 13,
"args": [
{
"name": "method",
"value": "git.status"
},
{
"name": "params",
"value": {
"worktree": "id:repo42::/p"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 3001,
"settledAt": 3001,
"value": {
"id": "frame-8",
"ok": true,
"result": {
"branch": "feature",
"entries": [
{
"added": 4,
"area": "staged",
"path": "src/app.ts",
"removed": 1,
"status": "modified"
},
{
"area": "staged",
"oldPath": "src/older.ts",
"path": "src/old.ts",
"status": "renamed"
}
],
"head": "head-oid",
"upstreamStatus": {
"ahead": 1,
"behind": 0,
"hasUpstream": true,
"upstreamName": "origin/feature"
}
}
}
}
},
"6c43b34c4a02": {
"name": "streams-registered-at-teardown",
"ordinal": 21,
"value": [
{
"cancelled": true,
"method": "runtime.clientEvents.subscribe",
"payload": "runtime.clientEvents.subscribe#1"
},
{
"cancelled": true,
"method": "runtime.clientEvents.subscribe",
"payload": "runtime.clientEvents.subscribe#2"
}
]
},
"6f4a5d6a5a86": {
"name": "worktree.show#1",
"ordinal": 6,
"args": [
{
"name": "method",
@@ -118,13 +367,18 @@
],
"settlement": {
"status": "pending",
"startedAt": 3001
"startedAt": 0
}
},
"8329dee32b1b": {
"name": "repo.list#2",
"ordinal": 16,
"json": "{\"id\":\"frame-8\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\"}"
"71f3760dfea1": {
"name": "repo.list#1",
"ordinal": 9,
"json": "{\"id\":\"frame-5\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\"}"
},
"873a8baed182": {
"name": "worktree.show#2",
"ordinal": 17,
"json": "{\"id\":\"frame-9\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.show\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"891438a18444": {
"name": "settings.get#1",
@@ -152,51 +406,14 @@
"startedAt": 0
}
},
"8ac3c8b29916": {
"name": "worktree.show#1",
"92a577a15fcc": {
"name": "git.status#1",
"ordinal": 5,
"args": [
{
"name": "method",
"value": "worktree.show"
},
{
"name": "params",
"value": {
"worktree": "id:repo42::/p"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"git.status\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"973ac78137f2": {
"962f91336a50": {
"name": "git.status#1",
"ordinal": 4,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"git.status\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"978dd753935a": {
"status": "fulfilled",
"startedAt": 3001,
"settledAt": 3001,
"value": true
},
"9916ac6863ce": {
"name": "repo.list#1",
"ordinal": 8,
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\"}"
},
"9cb2ba41c834": {
"name": "git.status#1",
"ordinal": 2,
"ordinal": 3,
"args": [
{
"name": "method",
@@ -220,7 +437,7 @@
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-2",
"id": "frame-3",
"ok": true,
"result": {
"branch": "feature",
@@ -250,19 +467,20 @@
}
}
},
"afafd4479aaf": {
"name": "git.status#2",
"978dd753935a": {
"status": "fulfilled",
"startedAt": 3001,
"settledAt": 3001,
"value": true
},
"98c69a10bff1": {
"name": "runtime.clientEvents.subscribe#2",
"ordinal": 10,
"json": "{\"id\":\"frame-5\",\"deviceToken\":\"recording-device\",\"method\":\"git.status\",\"params\":{\"worktree\":\"id:repo42::/p\",\"reuseLineStats\":true,\"admissionTier\":\"background\"}}"
"json": "{\"id\":\"frame-6\",\"deviceToken\":\"recording-device\",\"method\":\"runtime.clientEvents.subscribe\",\"params\":null}"
},
"b0f8e731cf5e": {
"name": "source-control.status-load-success",
"ordinal": 18,
"value": {}
},
"b5e0097ad800": {
"a5741a8e4ef9": {
"name": "git.status#2",
"ordinal": 9,
"ordinal": 11,
"args": [
{
"name": "method",
@@ -284,13 +502,43 @@
}
],
"settlement": {
"status": "pending",
"startedAt": 3001
"status": "fulfilled",
"startedAt": 3001,
"settledAt": 3001,
"value": {
"id": "frame-7",
"ok": true,
"result": {
"branch": "feature",
"entries": [
{
"added": 4,
"area": "unstaged",
"path": "src/app.ts",
"removed": 1,
"status": "modified"
},
{
"area": "staged",
"oldPath": "src/older.ts",
"path": "src/old.ts",
"status": "renamed"
}
],
"head": "head-oid",
"upstreamStatus": {
"ahead": 1,
"behind": 0,
"hasUpstream": true,
"upstreamName": "origin/feature"
}
}
}
}
},
"c95a7c93e7cd": {
"a6d51875b1b0": {
"name": "repo.list#2",
"ordinal": 14,
"ordinal": 16,
"args": [
{
"name": "method",
@@ -314,20 +562,18 @@
"startedAt": 3001
}
},
"d43019a946a2": {
"name": "git.status#2",
"ordinal": 9,
"ade0dae5eee8": {
"name": "settings.get#1",
"ordinal": 1,
"args": [
{
"name": "method",
"value": "git.status"
"value": "settings.get"
},
{
"name": "params",
"value": {
"admissionTier": "background",
"reuseLineStats": true,
"worktree": "id:repo42::/p"
"$rpc": "undefined"
}
},
{
@@ -338,47 +584,70 @@
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 3001,
"status": "rejected",
"startedAt": 0,
"settledAt": 3001,
"value": {
"id": "frame-5",
"ok": true,
"result": {
"branch": "feature",
"entries": [
{
"added": 4,
"area": "unstaged",
"path": "src/app.ts",
"removed": 1,
"status": "modified"
},
{
"area": "staged",
"oldPath": "src/older.ts",
"path": "src/old.ts",
"status": "renamed"
}
],
"head": "head-oid",
"upstreamStatus": {
"ahead": 1,
"behind": 0,
"hasUpstream": true,
"upstreamName": "origin/feature"
}
}
"error": {
"category": "Error",
"message": "Connection closed",
"isRpcDeliveryUnknown": true
}
}
},
"e86a19054cce": {
"b06ca46466ca": {
"name": "git.status#3",
"ordinal": 11,
"ordinal": 14,
"json": "{\"id\":\"frame-8\",\"deviceToken\":\"recording-device\",\"method\":\"git.status\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"bf019629baab": {
"name": "repo.list#1",
"ordinal": 7,
"args": [
{
"name": "method",
"value": "git.status"
"value": "repo.list"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 0,
"settledAt": 3001,
"error": {
"category": "Error",
"message": "Connection closed",
"isRpcDeliveryUnknown": true
}
}
},
"cb462f8b50a3": {
"name": "worktree.show#1",
"ordinal": 8,
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.show\",\"params\":{\"worktree\":\"id:repo42::/p\"}}"
},
"cf638e3657c3": {
"name": "repo.list#2",
"ordinal": 18,
"json": "{\"id\":\"frame-10\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\"}"
},
"dc8375b6f1eb": {
"name": "worktree.show#2",
"ordinal": 15,
"args": [
{
"name": "method",
"value": "worktree.show"
},
{
"name": "params",
@@ -394,40 +663,21 @@
}
],
"settlement": {
"status": "fulfilled",
"status": "rejected",
"startedAt": 3001,
"settledAt": 3001,
"value": {
"id": "frame-6",
"ok": true,
"result": {
"branch": "feature",
"entries": [
{
"added": 4,
"area": "staged",
"path": "src/app.ts",
"removed": 1,
"status": "modified"
},
{
"area": "staged",
"oldPath": "src/older.ts",
"path": "src/old.ts",
"status": "renamed"
}
],
"head": "head-oid",
"upstreamStatus": {
"ahead": 1,
"behind": 0,
"hasUpstream": true,
"upstreamName": "origin/feature"
}
}
"error": {
"category": "Error",
"message": "Connection closed",
"isRpcDeliveryUnknown": true
}
}
},
"e539e80d06e9": {
"name": "runtime.clientEvents.subscribe#1",
"ordinal": 2,
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"runtime.clientEvents.subscribe\",\"params\":null}"
},
"eb79a9b3682a": {
"status": "fulfilled",
"startedAt": 0,
@@ -436,10 +686,10 @@
"$rpc": "undefined"
}
},
"f648b042d810": {
"name": "settings.get#1",
"ordinal": 3,
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
"f0a6f14b92e4": {
"name": "source-control.status-load-success",
"ordinal": 20,
"value": {}
}
},
"recording": {
@@ -450,23 +700,25 @@
"observation": {
"sender": [
"891438a18444",
"9cb2ba41c834",
"8ac3c8b29916",
"680d7579d052",
"b5e0097ad800",
"e86a19054cce",
"6f512ea2abb3",
"c95a7c93e7cd"
"962f91336a50",
"6f4a5d6a5a86",
"1934c215114a",
"049ab1a02af9",
"594138f50a6c",
"0aaf51212f23",
"a6d51875b1b0"
],
"payloads": [
"f648b042d810",
"973ac78137f2",
"38d7fa10de1a",
"9916ac6863ce",
"afafd4479aaf",
"4ad21925feec",
"55fcd35df38b",
"8329dee32b1b"
"e539e80d06e9",
"1c2564f1daca",
"92a577a15fcc",
"cb462f8b50a3",
"71f3760dfea1",
"98c69a10bff1",
"47e21717f87b",
"b06ca46466ca",
"873a8baed182",
"cf638e3657c3"
],
"settlements": {
"mount": "eb79a9b3682a",
@@ -475,7 +727,7 @@
"stage": "978dd753935a"
},
"state": "215256dcc66d",
"effects": ["37c6af2ac5fd", "b0f8e731cf5e"]
"effects": ["19ca3e1a1f83", "f0a6f14b92e4"]
}
},
{
@@ -483,23 +735,25 @@
"observation": {
"sender": [
"891438a18444",
"9cb2ba41c834",
"8ac3c8b29916",
"680d7579d052",
"d43019a946a2",
"e86a19054cce",
"6f512ea2abb3",
"c95a7c93e7cd"
"962f91336a50",
"6f4a5d6a5a86",
"1934c215114a",
"a5741a8e4ef9",
"594138f50a6c",
"0aaf51212f23",
"a6d51875b1b0"
],
"payloads": [
"f648b042d810",
"973ac78137f2",
"38d7fa10de1a",
"9916ac6863ce",
"afafd4479aaf",
"4ad21925feec",
"55fcd35df38b",
"8329dee32b1b"
"e539e80d06e9",
"1c2564f1daca",
"92a577a15fcc",
"cb462f8b50a3",
"71f3760dfea1",
"98c69a10bff1",
"47e21717f87b",
"b06ca46466ca",
"873a8baed182",
"cf638e3657c3"
],
"settlements": {
"mount": "eb79a9b3682a",
@@ -508,7 +762,44 @@
"stage": "978dd753935a"
},
"state": "215256dcc66d",
"effects": ["37c6af2ac5fd", "b0f8e731cf5e"]
"effects": ["19ca3e1a1f83", "f0a6f14b92e4"]
}
},
{
"id": "cleanup",
"observation": {
"sender": [
"ade0dae5eee8",
"962f91336a50",
"334b41f87c41",
"bf019629baab",
"a5741a8e4ef9",
"594138f50a6c",
"dc8375b6f1eb",
"11aae483d55b",
"5186330278c2",
"1a6e003b2d53"
],
"payloads": [
"e539e80d06e9",
"1c2564f1daca",
"92a577a15fcc",
"cb462f8b50a3",
"71f3760dfea1",
"98c69a10bff1",
"47e21717f87b",
"b06ca46466ca",
"873a8baed182",
"cf638e3657c3"
],
"settlements": {
"mount": "eb79a9b3682a",
"leave": "eb79a9b3682a",
"return": "1ebd23509cad",
"stage": "978dd753935a"
},
"state": "215256dcc66d",
"effects": ["19ca3e1a1f83", "f0a6f14b92e4", "6c43b34c4a02"]
}
}
]
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -4,197 +4,14 @@
"family": "settings.repo-metadata",
"namedDeltas": [],
"values": {
"1681ec001eef": {
"name": "host.platform#1",
"ordinal": 5,
"args": [
{
"name": "method",
"value": "host.platform"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"23e43ee36880": {
"091af476e5cc": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 3,
"args": [
{
"name": "method",
"value": "ssh.listTargetSummaries"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-2",
"ok": true,
"result": {
"targets": [
{
"id": "ssh-1",
"label": "SSH"
}
]
}
}
}
"ordinal": 9,
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"ssh.listTargetSummaries\"}"
},
"2c7d0be09df6": {
"name": "settings.get#1",
"ordinal": 4,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-3",
"ok": true,
"result": {
"settings": {
"defaultTuiAgent": "codex",
"disabledTuiAgents": ["claude"],
"hostSettingOverrides": {},
"prBotAuthorOverrides": ["bot-user"],
"visibleTaskProviders": ["github", "linear"]
}
}
}
}
},
"36f133fb62a2": {
"name": "settings.get#1",
"ordinal": 4,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"4256aff920c3": {
"name": "repo.list#1",
"ordinal": 1,
"args": [
{
"name": "method",
"value": "repo.list"
},
{
"name": "params",
"value": {
"afterSnapshotId": {
"$rpc": "null"
}
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-1",
"ok": true,
"result": {
"repos": [
{
"connectionId": {
"$rpc": "null"
},
"displayName": "Local",
"id": "repo-1"
},
{
"connectionId": "ssh-1",
"displayName": "Remote",
"id": "repo-2"
}
]
}
}
}
},
"6329121e40fe": {
"name": "repoHostIdByRepoId",
"ordinal": 7,
"value": [
["repo-1", "local"],
["repo-2", "ssh:ssh-1"]
]
},
"63eb42c118e7": {
"20200b8feac4": {
"name": "host.platform#1",
"ordinal": 5,
"ordinal": 6,
"args": [
{
"name": "method",
@@ -218,7 +35,7 @@
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-4",
"id": "frame-5",
"ok": true,
"result": {
"platform": "linux"
@@ -226,6 +43,74 @@
}
}
},
"21069b5e026b": {
"name": "streams-registered-at-teardown",
"ordinal": 15,
"value": [
{
"cancelled": true,
"method": "runtime.clientEvents.subscribe",
"payload": "runtime.clientEvents.subscribe#1"
}
]
},
"353f0cb8ea69": {
"name": "settings.get#1",
"ordinal": 5,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"564f54c8d902": {
"name": "host.platform#1",
"ordinal": 6,
"args": [
{
"name": "method",
"value": "host.platform"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"56ab81cb67dc": {
"name": "hostLabelById",
"ordinal": 13,
"value": [["ssh:ssh-1", "SSH"]]
},
"68916f125c3c": {
"desktopRepos": [
{
@@ -269,29 +154,165 @@
["repo-2", "ssh:ssh-1"]
]
},
"8b618db22116": {
"7999924c608c": {
"name": "settings.get#1",
"ordinal": 9,
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
},
"91e7f4ef9a77": {
"name": "hostPlatform",
"ordinal": 13,
"value": "linux"
},
"c1246f5792ee": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 8,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"ssh.listTargetSummaries\"}"
},
"c1d6fc758acc": {
"name": "host.platform#1",
"ordinal": 10,
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"host.platform\"}"
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
},
"cd9f1e701ac7": {
"80e40a970f99": {
"name": "host.platform#1",
"ordinal": 11,
"json": "{\"id\":\"frame-5\",\"deviceToken\":\"recording-device\",\"method\":\"host.platform\"}"
},
"84c1dde54c62": {
"name": "hostHealthById",
"ordinal": 12,
"value": []
},
"8cfdd18c5fe6": {
"name": "repoHostIdByRepoId",
"ordinal": 8,
"value": [
["repo-1", "local"],
["repo-2", "ssh:ssh-1"]
]
},
"8e76374272ce": {
"name": "settings.get#1",
"ordinal": 5,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-4",
"ok": true,
"result": {
"settings": {
"defaultTuiAgent": "codex",
"disabledTuiAgents": ["claude"],
"hostSettingOverrides": {},
"prBotAuthorOverrides": ["bot-user"],
"visibleTaskProviders": ["github", "linear"]
}
}
}
}
},
"913d2a349d4d": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 4,
"args": [
{
"name": "method",
"value": "ssh.listTargetSummaries"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-3",
"ok": true,
"result": {
"targets": [
{
"id": "ssh-1",
"label": "SSH"
}
]
}
}
}
},
"b2746491ac07": {
"name": "repo.list#1",
"ordinal": 2,
"args": [
{
"name": "method",
"value": "repo.list"
},
{
"name": "params",
"value": {
"afterSnapshotId": {
"$rpc": "null"
}
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-2",
"ok": true,
"result": {
"repos": [
{
"connectionId": {
"$rpc": "null"
},
"displayName": "Local",
"id": "repo-1"
},
{
"connectionId": "ssh-1",
"displayName": "Remote",
"id": "repo-2"
}
]
}
}
}
},
"beb4ddf549da": {
"name": "repo.list#1",
"ordinal": 3,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\",\"params\":{\"afterSnapshotId\":null}}"
},
"e7b605a67b1f": {
"name": "desktopRepos",
"ordinal": 6,
"ordinal": 7,
"value": [
{
"displayName": "Local",
@@ -307,16 +328,6 @@
}
]
},
"d9c464d0dc78": {
"name": "hostLabelById",
"ordinal": 12,
"value": [["ssh:ssh-1", "SSH"]]
},
"e2881f748a46": {
"name": "hostHealthById",
"ordinal": 11,
"value": []
},
"eb79a9b3682a": {
"status": "fulfilled",
"startedAt": 0,
@@ -325,10 +336,15 @@
"$rpc": "undefined"
}
},
"f2274efe8aa6": {
"name": "repo.list#1",
"ordinal": 2,
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\",\"params\":{\"afterSnapshotId\":null}}"
"eef1ee3c2773": {
"name": "runtime.clientEvents.subscribe#1",
"ordinal": 1,
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"runtime.clientEvents.subscribe\",\"params\":null}"
},
"f9193cae5824": {
"name": "hostPlatform",
"ordinal": 14,
"value": "linux"
}
},
"recording": {
@@ -337,32 +353,70 @@
{
"id": "settings-pending",
"observation": {
"sender": ["4256aff920c3", "23e43ee36880", "36f133fb62a2", "1681ec001eef"],
"payloads": ["f2274efe8aa6", "c1246f5792ee", "8b618db22116", "c1d6fc758acc"],
"sender": ["b2746491ac07", "913d2a349d4d", "353f0cb8ea69", "564f54c8d902"],
"payloads": [
"eef1ee3c2773",
"beb4ddf549da",
"091af476e5cc",
"7999924c608c",
"80e40a970f99"
],
"settlements": {
"mount": "eb79a9b3682a",
"load": "eb79a9b3682a"
},
"state": "68916f125c3c",
"effects": ["cd9f1e701ac7", "6329121e40fe"]
"effects": ["e7b605a67b1f", "8cfdd18c5fe6"]
}
},
{
"id": "settled",
"observation": {
"sender": ["4256aff920c3", "23e43ee36880", "2c7d0be09df6", "63eb42c118e7"],
"payloads": ["f2274efe8aa6", "c1246f5792ee", "8b618db22116", "c1d6fc758acc"],
"sender": ["b2746491ac07", "913d2a349d4d", "8e76374272ce", "20200b8feac4"],
"payloads": [
"eef1ee3c2773",
"beb4ddf549da",
"091af476e5cc",
"7999924c608c",
"80e40a970f99"
],
"settlements": {
"mount": "eb79a9b3682a",
"load": "eb79a9b3682a"
},
"state": "6d43117882f3",
"effects": [
"cd9f1e701ac7",
"6329121e40fe",
"e2881f748a46",
"d9c464d0dc78",
"91e7f4ef9a77"
"e7b605a67b1f",
"8cfdd18c5fe6",
"84c1dde54c62",
"56ab81cb67dc",
"f9193cae5824"
]
}
},
{
"id": "cleanup",
"observation": {
"sender": ["b2746491ac07", "913d2a349d4d", "8e76374272ce", "20200b8feac4"],
"payloads": [
"eef1ee3c2773",
"beb4ddf549da",
"091af476e5cc",
"7999924c608c",
"80e40a970f99"
],
"settlements": {
"mount": "eb79a9b3682a",
"load": "eb79a9b3682a"
},
"state": "6d43117882f3",
"effects": [
"e7b605a67b1f",
"8cfdd18c5fe6",
"84c1dde54c62",
"56ab81cb67dc",
"f9193cae5824",
"21069b5e026b"
]
}
}
@@ -4,6 +4,11 @@
"family": "settings.repo-metadata",
"namedDeltas": [],
"values": {
"091af476e5cc": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 9,
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"ssh.listTargetSummaries\"}"
},
"0fd72e1aba93": {
"desktopRepos": [
{
@@ -49,9 +54,63 @@
["repo-3", "ssh:ssh-1"]
]
},
"1681ec001eef": {
"name": "host.platform#1",
"12ba3f41d4db": {
"name": "hostPlatform",
"ordinal": 14,
"value": "darwin"
},
"13397c3d4e28": {
"name": "settings.get#1",
"ordinal": 5,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-4",
"ok": true,
"result": {
"settings": {
"defaultTuiAgent": "codex",
"disabledTuiAgents": [],
"hostSettingOverrides": {}
}
}
}
}
},
"21069b5e026b": {
"name": "streams-registered-at-teardown",
"ordinal": 15,
"value": [
{
"cancelled": true,
"method": "runtime.clientEvents.subscribe",
"payload": "runtime.clientEvents.subscribe#1"
}
]
},
"2864022c20ef": {
"name": "host.platform#1",
"ordinal": 6,
"args": [
{
"name": "method",
@@ -70,127 +129,22 @@
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"1c76208c9beb": {
"name": "hostPlatform",
"ordinal": 13,
"value": "darwin"
},
"23e43ee36880": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 3,
"args": [
{
"name": "method",
"value": "ssh.listTargetSummaries"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-2",
"id": "frame-5",
"ok": true,
"result": {
"targets": [
{
"id": "ssh-1",
"label": "SSH"
}
]
"platform": "darwin"
}
}
}
},
"2cf345170cd3": {
"name": "repo.list#1",
"ordinal": 1,
"args": [
{
"name": "method",
"value": "repo.list"
},
{
"name": "params",
"value": {
"afterSnapshotId": {
"$rpc": "null"
}
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-1",
"ok": true,
"result": {
"repos": [
{
"badgeColor": "#123456",
"connectionId": {
"$rpc": "null"
},
"displayName": "Lucide",
"id": "repo-1",
"repoIcon": {
"name": "Rocket",
"type": "lucide"
}
},
{
"connectionId": "ssh-1",
"displayName": "Emoji",
"id": "repo-2",
"repoIcon": {
"emoji": "🐳",
"type": "emoji"
}
},
{
"displayName": "Avatar",
"executionHostId": "ssh:ssh-1",
"id": "repo-3",
"repoIcon": {
"label": "acme/orca",
"source": "github",
"src": "https://github.com/acme.png?size=64",
"type": "image"
}
}
]
}
}
}
},
"36f133fb62a2": {
"353f0cb8ea69": {
"name": "settings.get#1",
"ordinal": 4,
"ordinal": 5,
"args": [
{
"name": "method",
@@ -214,9 +168,9 @@
"startedAt": 0
}
},
"5d8efd873525": {
"51f04c7a4983": {
"name": "desktopRepos",
"ordinal": 6,
"ordinal": 7,
"value": [
{
"badgeColor": "#123456",
@@ -253,9 +207,9 @@
}
]
},
"6134cf1a642b": {
"564f54c8d902": {
"name": "host.platform#1",
"ordinal": 5,
"ordinal": 6,
"args": [
{
"name": "method",
@@ -275,22 +229,29 @@
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-4",
"ok": true,
"result": {
"platform": "darwin"
}
}
"status": "pending",
"startedAt": 0
}
},
"8b618db22116": {
"56ab81cb67dc": {
"name": "hostLabelById",
"ordinal": 13,
"value": [["ssh:ssh-1", "SSH"]]
},
"7999924c608c": {
"name": "settings.get#1",
"ordinal": 9,
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
"ordinal": 10,
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
},
"80e40a970f99": {
"name": "host.platform#1",
"ordinal": 11,
"json": "{\"id\":\"frame-5\",\"deviceToken\":\"recording-device\",\"method\":\"host.platform\"}"
},
"84c1dde54c62": {
"name": "hostHealthById",
"ordinal": 12,
"value": []
},
"910617d262f4": {
"desktopRepos": [
@@ -334,42 +295,13 @@
["repo-3", "ssh:ssh-1"]
]
},
"b536bda0aa88": {
"name": "repoHostIdByRepoId",
"ordinal": 7,
"value": [
["repo-1", "local"],
["repo-2", "ssh:ssh-1"],
["repo-3", "ssh:ssh-1"]
]
},
"c1246f5792ee": {
"913d2a349d4d": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 8,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"ssh.listTargetSummaries\"}"
},
"c1d6fc758acc": {
"name": "host.platform#1",
"ordinal": 10,
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"host.platform\"}"
},
"d9c464d0dc78": {
"name": "hostLabelById",
"ordinal": 12,
"value": [["ssh:ssh-1", "SSH"]]
},
"e2881f748a46": {
"name": "hostHealthById",
"ordinal": 11,
"value": []
},
"e5a64dcd2008": {
"name": "settings.get#1",
"ordinal": 4,
"args": [
{
"name": "method",
"value": "settings.get"
"value": "ssh.listTargetSummaries"
},
{
"name": "params",
@@ -392,15 +324,99 @@
"id": "frame-3",
"ok": true,
"result": {
"settings": {
"defaultTuiAgent": "codex",
"disabledTuiAgents": [],
"hostSettingOverrides": {}
}
"targets": [
{
"id": "ssh-1",
"label": "SSH"
}
]
}
}
}
},
"beb4ddf549da": {
"name": "repo.list#1",
"ordinal": 3,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\",\"params\":{\"afterSnapshotId\":null}}"
},
"c042445bb597": {
"name": "repo.list#1",
"ordinal": 2,
"args": [
{
"name": "method",
"value": "repo.list"
},
{
"name": "params",
"value": {
"afterSnapshotId": {
"$rpc": "null"
}
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-2",
"ok": true,
"result": {
"repos": [
{
"badgeColor": "#123456",
"connectionId": {
"$rpc": "null"
},
"displayName": "Lucide",
"id": "repo-1",
"repoIcon": {
"name": "Rocket",
"type": "lucide"
}
},
{
"connectionId": "ssh-1",
"displayName": "Emoji",
"id": "repo-2",
"repoIcon": {
"emoji": "🐳",
"type": "emoji"
}
},
{
"displayName": "Avatar",
"executionHostId": "ssh:ssh-1",
"id": "repo-3",
"repoIcon": {
"label": "acme/orca",
"source": "github",
"src": "https://github.com/acme.png?size=64",
"type": "image"
}
}
]
}
}
}
},
"d4ee33c46b05": {
"name": "repoHostIdByRepoId",
"ordinal": 8,
"value": [
["repo-1", "local"],
["repo-2", "ssh:ssh-1"],
["repo-3", "ssh:ssh-1"]
]
},
"eb79a9b3682a": {
"status": "fulfilled",
"startedAt": 0,
@@ -409,10 +425,10 @@
"$rpc": "undefined"
}
},
"f2274efe8aa6": {
"name": "repo.list#1",
"ordinal": 2,
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\",\"params\":{\"afterSnapshotId\":null}}"
"eef1ee3c2773": {
"name": "runtime.clientEvents.subscribe#1",
"ordinal": 1,
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"runtime.clientEvents.subscribe\",\"params\":null}"
}
},
"recording": {
@@ -421,32 +437,70 @@
{
"id": "settings-pending",
"observation": {
"sender": ["2cf345170cd3", "23e43ee36880", "36f133fb62a2", "1681ec001eef"],
"payloads": ["f2274efe8aa6", "c1246f5792ee", "8b618db22116", "c1d6fc758acc"],
"sender": ["c042445bb597", "913d2a349d4d", "353f0cb8ea69", "564f54c8d902"],
"payloads": [
"eef1ee3c2773",
"beb4ddf549da",
"091af476e5cc",
"7999924c608c",
"80e40a970f99"
],
"settlements": {
"mount": "eb79a9b3682a",
"load": "eb79a9b3682a"
},
"state": "910617d262f4",
"effects": ["5d8efd873525", "b536bda0aa88"]
"effects": ["51f04c7a4983", "d4ee33c46b05"]
}
},
{
"id": "settled",
"observation": {
"sender": ["2cf345170cd3", "23e43ee36880", "e5a64dcd2008", "6134cf1a642b"],
"payloads": ["f2274efe8aa6", "c1246f5792ee", "8b618db22116", "c1d6fc758acc"],
"sender": ["c042445bb597", "913d2a349d4d", "13397c3d4e28", "2864022c20ef"],
"payloads": [
"eef1ee3c2773",
"beb4ddf549da",
"091af476e5cc",
"7999924c608c",
"80e40a970f99"
],
"settlements": {
"mount": "eb79a9b3682a",
"load": "eb79a9b3682a"
},
"state": "0fd72e1aba93",
"effects": [
"5d8efd873525",
"b536bda0aa88",
"e2881f748a46",
"d9c464d0dc78",
"1c76208c9beb"
"51f04c7a4983",
"d4ee33c46b05",
"84c1dde54c62",
"56ab81cb67dc",
"12ba3f41d4db"
]
}
},
{
"id": "cleanup",
"observation": {
"sender": ["c042445bb597", "913d2a349d4d", "13397c3d4e28", "2864022c20ef"],
"payloads": [
"eef1ee3c2773",
"beb4ddf549da",
"091af476e5cc",
"7999924c608c",
"80e40a970f99"
],
"settlements": {
"mount": "eb79a9b3682a",
"load": "eb79a9b3682a"
},
"state": "0fd72e1aba93",
"effects": [
"51f04c7a4983",
"d4ee33c46b05",
"84c1dde54c62",
"56ab81cb67dc",
"12ba3f41d4db",
"21069b5e026b"
]
}
}
File diff suppressed because it is too large Load Diff
@@ -4,192 +4,14 @@
"family": "settings.repo-metadata",
"namedDeltas": [],
"values": {
"1681ec001eef": {
"name": "host.platform#1",
"ordinal": 5,
"args": [
{
"name": "method",
"value": "host.platform"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"23e43ee36880": {
"091af476e5cc": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 3,
"args": [
{
"name": "method",
"value": "ssh.listTargetSummaries"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-2",
"ok": true,
"result": {
"targets": [
{
"id": "ssh-1",
"label": "SSH"
}
]
}
}
}
"ordinal": 9,
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"ssh.listTargetSummaries\"}"
},
"36f133fb62a2": {
"name": "settings.get#1",
"ordinal": 4,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"4256aff920c3": {
"name": "repo.list#1",
"ordinal": 1,
"args": [
{
"name": "method",
"value": "repo.list"
},
{
"name": "params",
"value": {
"afterSnapshotId": {
"$rpc": "null"
}
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-1",
"ok": true,
"result": {
"repos": [
{
"connectionId": {
"$rpc": "null"
},
"displayName": "Local",
"id": "repo-1"
},
{
"connectionId": "ssh-1",
"displayName": "Remote",
"id": "repo-2"
}
]
}
}
}
},
"527f30910a99": {
"name": "settings.get#1",
"ordinal": 4,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"error": {
"code": "refused",
"message": "settings refused"
},
"id": "frame-3",
"ok": false
}
}
},
"6329121e40fe": {
"name": "repoHostIdByRepoId",
"ordinal": 7,
"value": [
["repo-1", "local"],
["repo-2", "ssh:ssh-1"]
]
},
"63eb42c118e7": {
"20200b8feac4": {
"name": "host.platform#1",
"ordinal": 5,
"ordinal": 6,
"args": [
{
"name": "method",
@@ -213,7 +35,7 @@
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-4",
"id": "frame-5",
"ok": true,
"result": {
"platform": "linux"
@@ -221,6 +43,74 @@
}
}
},
"21069b5e026b": {
"name": "streams-registered-at-teardown",
"ordinal": 15,
"value": [
{
"cancelled": true,
"method": "runtime.clientEvents.subscribe",
"payload": "runtime.clientEvents.subscribe#1"
}
]
},
"353f0cb8ea69": {
"name": "settings.get#1",
"ordinal": 5,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"564f54c8d902": {
"name": "host.platform#1",
"ordinal": 6,
"args": [
{
"name": "method",
"value": "host.platform"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"56ab81cb67dc": {
"name": "hostLabelById",
"ordinal": 13,
"value": [["ssh:ssh-1", "SSH"]]
},
"68916f125c3c": {
"desktopRepos": [
{
@@ -264,29 +154,160 @@
["repo-2", "ssh:ssh-1"]
]
},
"8b618db22116": {
"7999924c608c": {
"name": "settings.get#1",
"ordinal": 9,
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
},
"91e7f4ef9a77": {
"name": "hostPlatform",
"ordinal": 13,
"value": "linux"
},
"c1246f5792ee": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 8,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"ssh.listTargetSummaries\"}"
},
"c1d6fc758acc": {
"name": "host.platform#1",
"ordinal": 10,
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"host.platform\"}"
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
},
"cd9f1e701ac7": {
"80e40a970f99": {
"name": "host.platform#1",
"ordinal": 11,
"json": "{\"id\":\"frame-5\",\"deviceToken\":\"recording-device\",\"method\":\"host.platform\"}"
},
"84c1dde54c62": {
"name": "hostHealthById",
"ordinal": 12,
"value": []
},
"8cfdd18c5fe6": {
"name": "repoHostIdByRepoId",
"ordinal": 8,
"value": [
["repo-1", "local"],
["repo-2", "ssh:ssh-1"]
]
},
"913d2a349d4d": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 4,
"args": [
{
"name": "method",
"value": "ssh.listTargetSummaries"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-3",
"ok": true,
"result": {
"targets": [
{
"id": "ssh-1",
"label": "SSH"
}
]
}
}
}
},
"b2746491ac07": {
"name": "repo.list#1",
"ordinal": 2,
"args": [
{
"name": "method",
"value": "repo.list"
},
{
"name": "params",
"value": {
"afterSnapshotId": {
"$rpc": "null"
}
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-2",
"ok": true,
"result": {
"repos": [
{
"connectionId": {
"$rpc": "null"
},
"displayName": "Local",
"id": "repo-1"
},
{
"connectionId": "ssh-1",
"displayName": "Remote",
"id": "repo-2"
}
]
}
}
}
},
"beb4ddf549da": {
"name": "repo.list#1",
"ordinal": 3,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\",\"params\":{\"afterSnapshotId\":null}}"
},
"d2b9a3a50f2e": {
"name": "settings.get#1",
"ordinal": 5,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"error": {
"code": "refused",
"message": "settings refused"
},
"id": "frame-4",
"ok": false
}
}
},
"e7b605a67b1f": {
"name": "desktopRepos",
"ordinal": 6,
"ordinal": 7,
"value": [
{
"displayName": "Local",
@@ -302,16 +323,6 @@
}
]
},
"d9c464d0dc78": {
"name": "hostLabelById",
"ordinal": 12,
"value": [["ssh:ssh-1", "SSH"]]
},
"e2881f748a46": {
"name": "hostHealthById",
"ordinal": 11,
"value": []
},
"eb79a9b3682a": {
"status": "fulfilled",
"startedAt": 0,
@@ -320,10 +331,15 @@
"$rpc": "undefined"
}
},
"f2274efe8aa6": {
"name": "repo.list#1",
"ordinal": 2,
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\",\"params\":{\"afterSnapshotId\":null}}"
"eef1ee3c2773": {
"name": "runtime.clientEvents.subscribe#1",
"ordinal": 1,
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"runtime.clientEvents.subscribe\",\"params\":null}"
},
"f9193cae5824": {
"name": "hostPlatform",
"ordinal": 14,
"value": "linux"
}
},
"recording": {
@@ -332,32 +348,70 @@
{
"id": "settings-pending",
"observation": {
"sender": ["4256aff920c3", "23e43ee36880", "36f133fb62a2", "1681ec001eef"],
"payloads": ["f2274efe8aa6", "c1246f5792ee", "8b618db22116", "c1d6fc758acc"],
"sender": ["b2746491ac07", "913d2a349d4d", "353f0cb8ea69", "564f54c8d902"],
"payloads": [
"eef1ee3c2773",
"beb4ddf549da",
"091af476e5cc",
"7999924c608c",
"80e40a970f99"
],
"settlements": {
"mount": "eb79a9b3682a",
"load": "eb79a9b3682a"
},
"state": "68916f125c3c",
"effects": ["cd9f1e701ac7", "6329121e40fe"]
"effects": ["e7b605a67b1f", "8cfdd18c5fe6"]
}
},
{
"id": "settled",
"observation": {
"sender": ["4256aff920c3", "23e43ee36880", "527f30910a99", "63eb42c118e7"],
"payloads": ["f2274efe8aa6", "c1246f5792ee", "8b618db22116", "c1d6fc758acc"],
"sender": ["b2746491ac07", "913d2a349d4d", "d2b9a3a50f2e", "20200b8feac4"],
"payloads": [
"eef1ee3c2773",
"beb4ddf549da",
"091af476e5cc",
"7999924c608c",
"80e40a970f99"
],
"settlements": {
"mount": "eb79a9b3682a",
"load": "eb79a9b3682a"
},
"state": "6d43117882f3",
"effects": [
"cd9f1e701ac7",
"6329121e40fe",
"e2881f748a46",
"d9c464d0dc78",
"91e7f4ef9a77"
"e7b605a67b1f",
"8cfdd18c5fe6",
"84c1dde54c62",
"56ab81cb67dc",
"f9193cae5824"
]
}
},
{
"id": "cleanup",
"observation": {
"sender": ["b2746491ac07", "913d2a349d4d", "d2b9a3a50f2e", "20200b8feac4"],
"payloads": [
"eef1ee3c2773",
"beb4ddf549da",
"091af476e5cc",
"7999924c608c",
"80e40a970f99"
],
"settlements": {
"mount": "eb79a9b3682a",
"load": "eb79a9b3682a"
},
"state": "6d43117882f3",
"effects": [
"e7b605a67b1f",
"8cfdd18c5fe6",
"84c1dde54c62",
"56ab81cb67dc",
"f9193cae5824",
"21069b5e026b"
]
}
}
@@ -4,69 +4,14 @@
"family": "settings.repo-metadata",
"namedDeltas": [],
"values": {
"1681ec001eef": {
"name": "host.platform#1",
"ordinal": 5,
"args": [
{
"name": "method",
"value": "host.platform"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"1de2f04dfab9": {
"name": "repoHostIdByRepoId",
"ordinal": 7,
"value": [
["repo-1", "ssh:ssh-1"],
["repo-2", "ssh:ssh-1"]
]
},
"36f133fb62a2": {
"name": "settings.get#1",
"ordinal": 4,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"491fca75475a": {
"091af476e5cc": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 3,
"ordinal": 9,
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"ssh.listTargetSummaries\"}"
},
"1f47015009f3": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 4,
"args": [
{
"name": "method",
@@ -90,9 +35,242 @@
"startedAt": 0
}
},
"864673b0a9cf": {
"353f0cb8ea69": {
"name": "settings.get#1",
"ordinal": 5,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"455c68e82d1a": {
"name": "host.platform#1",
"ordinal": 6,
"args": [
{
"name": "method",
"value": "host.platform"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 0,
"settledAt": 0,
"error": {
"category": "Error",
"message": "Connection closed",
"isRpcDeliveryUnknown": true
}
}
},
"564f54c8d902": {
"name": "host.platform#1",
"ordinal": 6,
"args": [
{
"name": "method",
"value": "host.platform"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"5679e01933fd": {
"name": "settings.get#1",
"ordinal": 5,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 0,
"settledAt": 0,
"error": {
"category": "Error",
"message": "Connection closed",
"isRpcDeliveryUnknown": true
}
}
},
"76c784c63522": {
"name": "streams-registered-at-teardown",
"ordinal": 12,
"value": [
{
"cancelled": true,
"method": "runtime.clientEvents.subscribe",
"payload": "runtime.clientEvents.subscribe#1"
}
]
},
"7999924c608c": {
"name": "settings.get#1",
"ordinal": 10,
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
},
"80e40a970f99": {
"name": "host.platform#1",
"ordinal": 11,
"json": "{\"id\":\"frame-5\",\"deviceToken\":\"recording-device\",\"method\":\"host.platform\"}"
},
"81f29611a1a7": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 4,
"args": [
{
"name": "method",
"value": "ssh.listTargetSummaries"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 0,
"settledAt": 0,
"error": {
"category": "Error",
"message": "Connection closed",
"isRpcDeliveryUnknown": true
}
}
},
"a2dee1d972b1": {
"name": "repoHostIdByRepoId",
"ordinal": 8,
"value": [
["repo-1", "ssh:ssh-1"],
["repo-2", "ssh:ssh-1"]
]
},
"beb4ddf549da": {
"name": "repo.list#1",
"ordinal": 3,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\",\"params\":{\"afterSnapshotId\":null}}"
},
"d23c5c4cde9a": {
"desktopRepos": [
{
"displayName": "Remote",
"executionHostId": "ssh:ssh-1",
"id": "repo-1",
"path": "repo-1"
},
{
"displayName": "Remote folder",
"executionHostId": "ssh:ssh-1",
"id": "repo-2",
"path": "repo-2"
}
],
"repoHostIdByRepoId": [
["repo-1", "ssh:ssh-1"],
["repo-2", "ssh:ssh-1"]
]
},
"d5c3c484609c": {
"name": "desktopRepos",
"ordinal": 7,
"value": [
{
"displayName": "Remote",
"executionHostId": "ssh:ssh-1",
"id": "repo-1",
"path": "repo-1"
},
{
"displayName": "Remote folder",
"executionHostId": "ssh:ssh-1",
"id": "repo-2",
"path": "repo-2"
}
]
},
"eb79a9b3682a": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"$rpc": "undefined"
}
},
"eef1ee3c2773": {
"name": "runtime.clientEvents.subscribe#1",
"ordinal": 1,
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"runtime.clientEvents.subscribe\",\"params\":null}"
},
"f406aa4c909d": {
"name": "repo.list#1",
"ordinal": 2,
"args": [
{
"name": "method",
@@ -118,7 +296,7 @@
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-1",
"id": "frame-2",
"ok": true,
"result": {
"repos": [
@@ -136,72 +314,6 @@
}
}
}
},
"8b618db22116": {
"name": "settings.get#1",
"ordinal": 9,
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
},
"9fedfbd941ff": {
"name": "desktopRepos",
"ordinal": 6,
"value": [
{
"displayName": "Remote",
"executionHostId": "ssh:ssh-1",
"id": "repo-1",
"path": "repo-1"
},
{
"displayName": "Remote folder",
"executionHostId": "ssh:ssh-1",
"id": "repo-2",
"path": "repo-2"
}
]
},
"c1246f5792ee": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 8,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"ssh.listTargetSummaries\"}"
},
"c1d6fc758acc": {
"name": "host.platform#1",
"ordinal": 10,
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"host.platform\"}"
},
"d23c5c4cde9a": {
"desktopRepos": [
{
"displayName": "Remote",
"executionHostId": "ssh:ssh-1",
"id": "repo-1",
"path": "repo-1"
},
{
"displayName": "Remote folder",
"executionHostId": "ssh:ssh-1",
"id": "repo-2",
"path": "repo-2"
}
],
"repoHostIdByRepoId": [
["repo-1", "ssh:ssh-1"],
["repo-2", "ssh:ssh-1"]
]
},
"eb79a9b3682a": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"$rpc": "undefined"
}
},
"f2274efe8aa6": {
"name": "repo.list#1",
"ordinal": 2,
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\",\"params\":{\"afterSnapshotId\":null}}"
}
},
"recording": {
@@ -210,14 +322,39 @@
{
"id": "single-host-without-label-lookups",
"observation": {
"sender": ["864673b0a9cf", "491fca75475a", "36f133fb62a2", "1681ec001eef"],
"payloads": ["f2274efe8aa6", "c1246f5792ee", "8b618db22116", "c1d6fc758acc"],
"sender": ["f406aa4c909d", "1f47015009f3", "353f0cb8ea69", "564f54c8d902"],
"payloads": [
"eef1ee3c2773",
"beb4ddf549da",
"091af476e5cc",
"7999924c608c",
"80e40a970f99"
],
"settlements": {
"mount": "eb79a9b3682a",
"load": "eb79a9b3682a"
},
"state": "d23c5c4cde9a",
"effects": ["9fedfbd941ff", "1de2f04dfab9"]
"effects": ["d5c3c484609c", "a2dee1d972b1"]
}
},
{
"id": "cleanup",
"observation": {
"sender": ["f406aa4c909d", "81f29611a1a7", "5679e01933fd", "455c68e82d1a"],
"payloads": [
"eef1ee3c2773",
"beb4ddf549da",
"091af476e5cc",
"7999924c608c",
"80e40a970f99"
],
"settlements": {
"mount": "eb79a9b3682a",
"load": "eb79a9b3682a"
},
"state": "d23c5c4cde9a",
"effects": ["d5c3c484609c", "a2dee1d972b1", "76c784c63522"]
}
}
]
@@ -4,189 +4,14 @@
"family": "settings.repo-metadata",
"namedDeltas": [],
"values": {
"1681ec001eef": {
"name": "host.platform#1",
"ordinal": 5,
"args": [
{
"name": "method",
"value": "host.platform"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"23e43ee36880": {
"091af476e5cc": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 3,
"args": [
{
"name": "method",
"value": "ssh.listTargetSummaries"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-2",
"ok": true,
"result": {
"targets": [
{
"id": "ssh-1",
"label": "SSH"
}
]
}
}
}
"ordinal": 9,
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"ssh.listTargetSummaries\"}"
},
"36f133fb62a2": {
"name": "settings.get#1",
"ordinal": 4,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"383152061aaf": {
"name": "settings.get#1",
"ordinal": 4,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 0,
"settledAt": 0,
"error": {
"category": "Error",
"message": "settings disconnected",
"isRpcDeliveryUnknown": true
}
}
},
"4256aff920c3": {
"name": "repo.list#1",
"ordinal": 1,
"args": [
{
"name": "method",
"value": "repo.list"
},
{
"name": "params",
"value": {
"afterSnapshotId": {
"$rpc": "null"
}
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-1",
"ok": true,
"result": {
"repos": [
{
"connectionId": {
"$rpc": "null"
},
"displayName": "Local",
"id": "repo-1"
},
{
"connectionId": "ssh-1",
"displayName": "Remote",
"id": "repo-2"
}
]
}
}
}
},
"6329121e40fe": {
"name": "repoHostIdByRepoId",
"ordinal": 7,
"value": [
["repo-1", "local"],
["repo-2", "ssh:ssh-1"]
]
},
"63eb42c118e7": {
"20200b8feac4": {
"name": "host.platform#1",
"ordinal": 5,
"ordinal": 6,
"args": [
{
"name": "method",
@@ -210,7 +35,7 @@
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-4",
"id": "frame-5",
"ok": true,
"result": {
"platform": "linux"
@@ -218,6 +43,74 @@
}
}
},
"21069b5e026b": {
"name": "streams-registered-at-teardown",
"ordinal": 15,
"value": [
{
"cancelled": true,
"method": "runtime.clientEvents.subscribe",
"payload": "runtime.clientEvents.subscribe#1"
}
]
},
"353f0cb8ea69": {
"name": "settings.get#1",
"ordinal": 5,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"564f54c8d902": {
"name": "host.platform#1",
"ordinal": 6,
"args": [
{
"name": "method",
"value": "host.platform"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"56ab81cb67dc": {
"name": "hostLabelById",
"ordinal": 13,
"value": [["ssh:ssh-1", "SSH"]]
},
"68916f125c3c": {
"desktopRepos": [
{
@@ -261,29 +154,125 @@
["repo-2", "ssh:ssh-1"]
]
},
"8b618db22116": {
"7999924c608c": {
"name": "settings.get#1",
"ordinal": 9,
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
},
"91e7f4ef9a77": {
"name": "hostPlatform",
"ordinal": 13,
"value": "linux"
},
"c1246f5792ee": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 8,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"ssh.listTargetSummaries\"}"
},
"c1d6fc758acc": {
"name": "host.platform#1",
"ordinal": 10,
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"host.platform\"}"
"json": "{\"id\":\"frame-4\",\"deviceToken\":\"recording-device\",\"method\":\"settings.get\"}"
},
"cd9f1e701ac7": {
"80e40a970f99": {
"name": "host.platform#1",
"ordinal": 11,
"json": "{\"id\":\"frame-5\",\"deviceToken\":\"recording-device\",\"method\":\"host.platform\"}"
},
"84c1dde54c62": {
"name": "hostHealthById",
"ordinal": 12,
"value": []
},
"8cfdd18c5fe6": {
"name": "repoHostIdByRepoId",
"ordinal": 8,
"value": [
["repo-1", "local"],
["repo-2", "ssh:ssh-1"]
]
},
"913d2a349d4d": {
"name": "ssh.listTargetSummaries#1",
"ordinal": 4,
"args": [
{
"name": "method",
"value": "ssh.listTargetSummaries"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-3",
"ok": true,
"result": {
"targets": [
{
"id": "ssh-1",
"label": "SSH"
}
]
}
}
}
},
"b2746491ac07": {
"name": "repo.list#1",
"ordinal": 2,
"args": [
{
"name": "method",
"value": "repo.list"
},
{
"name": "params",
"value": {
"afterSnapshotId": {
"$rpc": "null"
}
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-2",
"ok": true,
"result": {
"repos": [
{
"connectionId": {
"$rpc": "null"
},
"displayName": "Local",
"id": "repo-1"
},
{
"connectionId": "ssh-1",
"displayName": "Remote",
"id": "repo-2"
}
]
}
}
}
},
"beb4ddf549da": {
"name": "repo.list#1",
"ordinal": 3,
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\",\"params\":{\"afterSnapshotId\":null}}"
},
"e7b605a67b1f": {
"name": "desktopRepos",
"ordinal": 6,
"ordinal": 7,
"value": [
{
"displayName": "Local",
@@ -299,16 +288,6 @@
}
]
},
"d9c464d0dc78": {
"name": "hostLabelById",
"ordinal": 12,
"value": [["ssh:ssh-1", "SSH"]]
},
"e2881f748a46": {
"name": "hostHealthById",
"ordinal": 11,
"value": []
},
"eb79a9b3682a": {
"status": "fulfilled",
"startedAt": 0,
@@ -317,10 +296,47 @@
"$rpc": "undefined"
}
},
"f2274efe8aa6": {
"name": "repo.list#1",
"ordinal": 2,
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"repo.list\",\"params\":{\"afterSnapshotId\":null}}"
"eef1ee3c2773": {
"name": "runtime.clientEvents.subscribe#1",
"ordinal": 1,
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"runtime.clientEvents.subscribe\",\"params\":null}"
},
"ef11a2e4f9d5": {
"name": "settings.get#1",
"ordinal": 5,
"args": [
{
"name": "method",
"value": "settings.get"
},
{
"name": "params",
"value": {
"$rpc": "undefined"
}
},
{
"name": "options",
"value": {
"failWhenDisconnected": true
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 0,
"settledAt": 0,
"error": {
"category": "Error",
"message": "settings disconnected",
"isRpcDeliveryUnknown": true
}
}
},
"f9193cae5824": {
"name": "hostPlatform",
"ordinal": 14,
"value": "linux"
}
},
"recording": {
@@ -329,32 +345,70 @@
{
"id": "settings-pending",
"observation": {
"sender": ["4256aff920c3", "23e43ee36880", "36f133fb62a2", "1681ec001eef"],
"payloads": ["f2274efe8aa6", "c1246f5792ee", "8b618db22116", "c1d6fc758acc"],
"sender": ["b2746491ac07", "913d2a349d4d", "353f0cb8ea69", "564f54c8d902"],
"payloads": [
"eef1ee3c2773",
"beb4ddf549da",
"091af476e5cc",
"7999924c608c",
"80e40a970f99"
],
"settlements": {
"mount": "eb79a9b3682a",
"load": "eb79a9b3682a"
},
"state": "68916f125c3c",
"effects": ["cd9f1e701ac7", "6329121e40fe"]
"effects": ["e7b605a67b1f", "8cfdd18c5fe6"]
}
},
{
"id": "settled",
"observation": {
"sender": ["4256aff920c3", "23e43ee36880", "383152061aaf", "63eb42c118e7"],
"payloads": ["f2274efe8aa6", "c1246f5792ee", "8b618db22116", "c1d6fc758acc"],
"sender": ["b2746491ac07", "913d2a349d4d", "ef11a2e4f9d5", "20200b8feac4"],
"payloads": [
"eef1ee3c2773",
"beb4ddf549da",
"091af476e5cc",
"7999924c608c",
"80e40a970f99"
],
"settlements": {
"mount": "eb79a9b3682a",
"load": "eb79a9b3682a"
},
"state": "6d43117882f3",
"effects": [
"cd9f1e701ac7",
"6329121e40fe",
"e2881f748a46",
"d9c464d0dc78",
"91e7f4ef9a77"
"e7b605a67b1f",
"8cfdd18c5fe6",
"84c1dde54c62",
"56ab81cb67dc",
"f9193cae5824"
]
}
},
{
"id": "cleanup",
"observation": {
"sender": ["b2746491ac07", "913d2a349d4d", "ef11a2e4f9d5", "20200b8feac4"],
"payloads": [
"eef1ee3c2773",
"beb4ddf549da",
"091af476e5cc",
"7999924c608c",
"80e40a970f99"
],
"settlements": {
"mount": "eb79a9b3682a",
"load": "eb79a9b3682a"
},
"state": "6d43117882f3",
"effects": [
"e7b605a67b1f",
"8cfdd18c5fe6",
"84c1dde54c62",
"56ab81cb67dc",
"f9193cae5824",
"21069b5e026b"
]
}
}
@@ -26,7 +26,7 @@ import { useHostQuery } from '../query/host-query'
import { hostReadClient } from '../query/host-read-client'
import { hostScopeKey } from '../query/host-query-key'
import { isHostNotConnectedError } from '../query/host-query-errors'
import { refetchHostQueryAfterInFlight, useHostEventRouter } from '../query/host-event-router'
import { refetchHostQueryAfterInFlight } from '../query/host-event-router'
import {
isHostListQuery,
HOST_LIST_BACKSTOP_POLL_MS,
@@ -97,7 +97,6 @@ export function useHostWorktreeCatalog(args: {
}, [])
)
const subscribed = embedded || focused
useHostEventRouter(hostId, client)
const host = { hostId: hostId ?? '', client }
// The host's sidebar feed replaces the poll: its notices say when a row changed.
+14 -6
View File
@@ -5,14 +5,19 @@ import {
subscribeSharedClientEvents,
type SharedClientEvent
} from '../transport/connection/shared-client-events'
import type { HostQuerySignal } from './host-query'
import { hostScopeKey } from './host-query-key'
import type { HostQuerySignal, HostSignalEvent } from './host-query'
import { hostScopeKey, type HostQueryKey } from './host-query-key'
function signalOf(query: Query): HostQuerySignal | undefined {
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: hostQueryOptions writes `signal` from the family's HostQuerySignal.
return query.meta?.signal as HostQuerySignal | undefined
}
function targetOf(query: Query): HostQueryKey[3] {
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: signalledQueries scans only host-scoped keys, which hostQueryKey builds.
return (query.queryKey as HostQueryKey)[3]
}
const trailingReads = new WeakMap<QueryClient, Set<string>>()
function trailingReadsOf(queryClient: QueryClient): Set<string> {
@@ -55,12 +60,12 @@ function startHostEventRouter(
// When the stream last said it was live; a replayed ready may have missed events since.
let readyAt = 0
const floorTimers = new Map<string, ReturnType<typeof setTimeout>>()
const signalledQueries = (matches: (signal: HostQuerySignal) => boolean): Query[] =>
const signalledQueries = (matches: (signal: HostQuerySignal, query: Query) => boolean): Query[] =>
queryClient.getQueryCache().findAll({
queryKey: hostScopeKey(hostId),
predicate: (query) => {
const signal = signalOf(query)
return signal !== undefined && matches(signal)
return signal !== undefined && matches(signal, query)
}
})
const markStale = (query: Query): Promise<void> =>
@@ -121,8 +126,11 @@ function startHostEventRouter(
// The shared stream opens again by itself; its next ready re-reads what was missed.
return
}
const eventType = event.type
for (const query of signalledQueries((signal) => signal.events.includes(eventType))) {
const signalled: HostSignalEvent = event
const named = (signal: HostQuerySignal, query: Query): boolean =>
signal.events.includes(signalled.type) &&
(signal.matches?.(signalled, targetOf(query)) ?? true)
for (const query of signalledQueries(named)) {
onChange(query)
}
}
+9 -1
View File
@@ -14,6 +14,7 @@ import {
import type { RuntimeClientEventStreamMessage } from '../../../src/shared/runtime-client-events'
import type { RpcClient } from '../transport/rpc/rpc-client-contract'
import { useHostConnectionInvalidation } from './host-connection-invalidation'
import { useHostEventRouter } from './host-event-router'
import {
hostQueryKey,
type HostQueryKey,
@@ -45,9 +46,13 @@ export type HostQuery<TInput extends HostQueryParams, TData> = {
persist?: HostQueryPersist<TData>
}
export type HostSignalEvent = Exclude<RuntimeClientEventStreamMessage, { type: 'ready' | 'end' }>
export type HostQuerySignal = {
events: readonly Exclude<RuntimeClientEventStreamMessage['type'], 'ready' | 'end'>[]
events: readonly HostSignalEvent['type'][]
floorMs?: number
// Narrows a listed event to the queries it names; without it every query in the family is stale.
matches?: (event: HostSignalEvent, target: HostQueryTarget) => boolean
}
type HostQueryFetch<TInput extends HostQueryParams, TData> = (
@@ -177,6 +182,8 @@ export function useHostQuery<TInput extends HostQueryParams, TData>(
const { hostId, client } = host
const enabled = client !== null && options?.enabled !== false
useHostConnectionInvalidation(hostId, enabled ? client : null)
// A screen alone on its page has no host list to keep the router; its signalled reads hold one.
useHostEventRouter(hostId, enabled && query.signal ? client : null)
// Same options object while nothing changed (target and input count by value), so TanStack's per-render setOptions is a no-op.
const keyHash = hashKey([target, input])
const queryOptions = useMemo((): UseQueryOptions<TData, Error, TData, HostQueryKey> => {
@@ -202,6 +209,7 @@ export function useHostQueries<TInput extends HostQueryParams, TData, TCombined>
): TCombined {
const { hostId, client } = host
useHostConnectionInvalidation(hostId, client)
useHostEventRouter(hostId, query.signal ? client : null)
const keyHash = hashKey([target, inputs])
const queries = useMemo(
() => inputs.map((input) => observerOptions(query, client, hostId, target, input)),
@@ -1,6 +1,9 @@
import * as z from 'zod'
import { translate } from '../i18n/mobile-i18n'
import { defineHostQuery } from '../query/host-query'
import { LOCAL_EXECUTION_HOST_ID } from '../../../src/shared/execution-host'
import { getRepoIdFromWorktreeId, worktreeIdsEqual } from '../../../src/shared/worktree/id'
import { defineHostQuery, type HostSignalEvent } from '../query/host-query'
import type { HostQueryTarget } from '../query/host-query-key'
import type { RpcClient } from '../transport/rpc/rpc-client-contract'
import {
gitStatusHostPayloadSchema,
@@ -55,11 +58,25 @@ async function readGitStatus(
}
}
// No desktop signal for working-tree edits yet, so focus and foreground revalidate once older than 3 s.
// The desktop's own repos only: its watcher never sees a relayed server's.
function namesThisStatus(event: HostSignalEvent, target: HostQueryTarget): boolean {
if (event.type !== 'gitStatusChanged' || target.exec !== LOCAL_EXECUTION_HOST_ID) {
return false
}
const worktreeId = target.worktree ?? ''
if (getRepoIdFromWorktreeId(worktreeId) !== event.repoId) {
return false
}
return event.worktreeIds?.some((id) => worktreeIdsEqual(id, worktreeId)) ?? true
}
// Commits, staging and checkouts signal; working-tree edits, SSH and serve don't, so focus and foreground still revalidate once older than 3 s.
export const gitStatusQuery = defineHostQuery({
family: 'git.status',
staleTime: 3_000,
refetchOnWindowFocus: true,
// A rebase or an agent's commits can signal several times a second.
signal: { events: ['gitStatusChanged'], floorMs: 1_000, matches: namesThisStatus },
// Rows from an earlier launch are shown but unconfirmed, so that first read runs at full priority.
fetch: (
client,
@@ -116,13 +116,13 @@ export const BRIDGED_PARITY_EXCLUSIONS: Readonly<Partial<Record<BridgedParityCla
// Pin strict History verdicts and unchanged legacy counts in both directions.
export const BRIDGED_PARITY_BASELINE: Readonly<Record<BridgedParityClass | 'identical', number>> = {
identical: 388,
identical: 385,
'reply-meta-required': 0,
'result-absent-settlement': 332,
'result-absent-settlement': 328,
'result-absent-observation': 6,
'result-absent-stream-release': 1,
'params-undefined': 27,
'write-ordinal': 23,
'write-ordinal': 30,
unclassified: 0
}
@@ -167,6 +167,13 @@ export const BRIDGED_PARITY_MEMBERS: Readonly<
'matrix-session.diff-review-git.status-1',
'matrix-session.diff-review-repo.list-1',
'matrix-session.diff-review-worktree.show-1',
'sc-changes-loaded',
'sc-changes-return-from-memory',
'sc-changes-write-reads-live',
'matrix-git.changes-load-git.branchcompare-1',
'matrix-git.changes-load-git.status-1',
'matrix-git.changes-load-repo.list-1',
'matrix-git.changes-load-worktree.show-1',
'aivault-history-scan-association',
'aivault-history-scan-fulfilled',
'aivault-history-scan-refresh',
@@ -1,12 +1,20 @@
import type { GitDiffResult } from '../../../shared/git/diff/git-diff-compare-types'
import type { GitStatusResult } from '../../../shared/git/status/git-status-types'
import { InFlightPromiseDedupe } from '../../../shared/in-flight-promise-dedupe'
import { clearGitStatusLineStatsCache } from '../../../shared/git/status/git-status-line-stats-cache'
import {
clearGitStatusLineStatsCache,
clearGitStatusLineStatsCacheKey,
clearGitStatusLineStatsCacheKeysWhere
} from '../../../shared/git/status/git-status-line-stats-cache'
import { invalidateGitBranchLineTotalInFlight } from '../../../shared/git/status/git-branch-line-total'
import { GitStatusReadLeaseOwner } from '../../../shared/git/status/git-status-read-lease-owner'
import { invalidateGitUpstreamStatusReads } from './upstream'
import { clearSubmodulePathsCache } from './submodule-paths'
import { resolvedUpstreamNameCache } from './resolved-upstream-name-cache'
import {
getStatusLineStatsCacheKey,
isStatusKeyForWorktreePath
} from './status-branch-line-total-input'
import {
FILE_DIFF_CACHE_LIMITS,
NUMSTAT_CACHE_LIMITS,
@@ -36,6 +44,24 @@ export function invalidateGitReadCaches(): void {
resolvedUpstreamNameCache.clear()
}
// A change made outside Orca: later status reads must neither join a read begun before it nor reuse its line counts.
// `null` means the changed checkouts are unknown.
export function invalidateGitStatusReads(worktreePaths: readonly string[] | null): void {
if (worktreePaths === null) {
statusReadLeaseOwner.invalidate()
clearGitStatusLineStatsCache()
return
}
for (const worktreePath of worktreePaths) {
// Any execution host: a Windows-path repo may read status through WSL Git.
const forPath = (key: string): boolean => isStatusKeyForWorktreePath(key, worktreePath)
statusReadLeaseOwner.invalidateWhere(forPath)
clearGitStatusLineStatsCacheKeysWhere(forPath)
// Also fences a first native count still in flight, which has no cache entry yet.
clearGitStatusLineStatsCacheKey(getStatusLineStatsCacheKey(worktreePath))
}
}
export async function runWithGitReadCacheInvalidation<T>(run: () => Promise<T>): Promise<T> {
invalidateGitReadCaches()
try {
@@ -52,6 +52,12 @@ export function createBranchLineTotalInput(
}
}
/** True for a status key (line-stats or read lease) of `worktreePath` under any execution host. */
export function isStatusKeyForWorktreePath(key: string, worktreePath: string): boolean {
const scoped = key.slice(key.indexOf('\0') + 1)
return scoped === worktreePath || scoped.startsWith(`${worktreePath}\0`)
}
export function getStatusLineStatsCacheKey(
worktreePath: string,
options: GitRuntimeOptions = {}
+3 -4
View File
@@ -48,11 +48,10 @@ export async function getStatus(
)
}
// Led by the worktree's line-stats key so an outside change can detach just that checkout's reads.
function getStatusReadKey(worktreePath: string, options: GetStatusOptions): string {
const limit = resolveGitStatusLimit(options.limit)
return stableInFlightKey([
worktreePath,
options.wslDistro ?? '',
return `${getStatusLineStatsCacheKey(worktreePath, options)}\0${stableInFlightKey([
options.admissionTier ?? 'status',
options.includeIgnored === true,
options.includeLineStats !== false,
@@ -63,7 +62,7 @@ function getStatusReadKey(worktreePath: string, options: GetStatusOptions): stri
limit,
// Filtering options affect which rows survive and must participate in the cache key.
options.sharedLinkPaths ?? []
])
])}`
}
/** Hide only configured, real, untracked shared symlinks; directory-only Git ignore rules cannot hide them. */
@@ -4,7 +4,7 @@ import { notifyWorktreesChanged } from './worktree-remote'
type WorktreeCatalogRemoteClientNotifier = Pick<
OrcaRuntimeService,
'notifyWorktreeCatalogChangedForRemoteClients'
'notifyWorktreeCatalogChangedForRemoteClients' | 'notifyGitStatusChangedForRemoteClients'
>
let remoteClientNotifier: WorktreeCatalogRemoteClientNotifier | null = null
@@ -27,3 +27,14 @@ export function notifyWatchedWorktreeCatalogChanged(
console.error('[worktrees] failed to notify remote clients of watched catalog change', error)
}
}
export function notifyGitStatusChangedForRemoteClients(
repoId: string,
worktreePaths: readonly string[] | null
): void {
try {
remoteClientNotifier?.notifyGitStatusChangedForRemoteClients(repoId, worktreePaths)
} catch (error) {
console.error('[worktrees] failed to notify remote clients of git status change', error)
}
}
@@ -0,0 +1,141 @@
import type * as WorktreeScanCacheModule from '../../../git/worktrees/catalog/worktree-scan-cache'
import type * as WorktreeListingModule from '../../../git/worktrees/catalog/worktree-listing'
import { BrowserWindow } from 'electron'
import { afterEach, expect, it, vi } from 'vitest'
import { listWorktrees } from '../../../git/worktrees/catalog/worktree-scan-cache'
import { listWorktreesStrict } from '../../../git/worktrees/catalog/worktree-listing'
import { getStatusLineStatsCacheKey } from '../../../git/source-control/status-branch-line-total-input'
import { OrcaRuntimeService } from '../../../runtime/orca-runtime'
import { partialRuntimeStore } from '../../../runtime/orca-runtime-tests/runtime-store-partial-fixture'
import { makeStore } from '../../../runtime/client/navigation/paired-client-navigation-test-harness'
import type { RuntimeClientEvent } from '../../../../shared/runtime-client-events'
import {
applyCachedGitStatusLineStats,
storeGitStatusLineStats
} from '../../../../shared/git/status/git-status-line-stats-cache'
import { setWorktreeCatalogRemoteClientNotifier } from '../../watched-worktree-catalog-notification'
import {
scheduleWorktreeBaseNotification,
type WorktreeBaseNotificationWatch
} from './worktree-base-directory-notifications'
import { createWorktreeHeadIdentityRefreshState } from './worktree-head-identity-refresh'
import {
EMPTY_HEAD_IDENTITY_SCOPE,
headIdentityScopeForEntry
} from './worktree-head-identity-scope'
vi.mock('electron', () => ({
BrowserWindow: class {
webContents = { send: vi.fn() }
isDestroyed(): boolean {
return false
}
}
}))
vi.mock('../../../git/worktrees/catalog/worktree-scan-cache', async (importOriginal) => ({
...(await importOriginal<typeof WorktreeScanCacheModule>()),
listWorktrees: vi.fn()
}))
vi.mock('../../../git/worktrees/catalog/worktree-listing', async (importOriginal) => ({
...(await importOriginal<typeof WorktreeListingModule>()),
listWorktreesStrict: vi.fn()
}))
// A watched common dir whose memo knows the linked checkout /tmp/feature.
function watchWithFeatureCheckout(): WorktreeBaseNotificationWatch {
const headIdentityRefresh = createWorktreeHeadIdentityRefreshState()
headIdentityRefresh.cache.entries.set('feature', {
worktreePath: '/tmp/feature',
head: 'b',
branch: 'refs/heads/feature'
})
return {
key: 'git-common:/tmp/repo/.git',
kind: 'git-common',
path: '/tmp/repo/.git',
repos: new Map(),
mainWindow: new BrowserWindow(),
notifyTimer: null,
pendingStructureRepoIds: new Set(),
pendingGitStatusRepoIds: new Set(),
pendingHeadIdentityRepoIds: new Set(),
pendingHeadIdentityScope: EMPTY_HEAD_IDENTITY_SCOPE,
pendingGitStatusScope: EMPTY_HEAD_IDENTITY_SCOPE,
headIdentityRefresh,
disposed: false
}
}
afterEach(() => {
vi.useRealTimers()
setWorktreeCatalogRemoteClientNotifier(null)
})
it('tells paired clients which worktree an index change touched', async () => {
const listing = [
{
path: '/tmp/repo',
head: 'a',
branch: 'refs/heads/main',
isBare: false,
isMainWorktree: true
},
{
path: '/tmp/feature',
head: 'b',
branch: 'refs/heads/feature',
isBare: false,
isMainWorktree: false
}
]
vi.mocked(listWorktrees).mockResolvedValue(listing)
vi.mocked(listWorktreesStrict).mockResolvedValue(listing)
// The harness store holds repo-1 at /tmp/repo.
const runtime = new OrcaRuntimeService(partialRuntimeStore(makeStore()))
setWorktreeCatalogRemoteClientNotifier(runtime)
await runtime.listManagedWorktrees('repo-1')
const events: RuntimeClientEvent[] = []
runtime.onClientEvent((event) => events.push(event))
const watch = watchWithFeatureCheckout()
vi.useFakeTimers()
scheduleWorktreeBaseNotification(watch, {
gitStatusRepoIds: ['repo-1'],
gitStatusScope: headIdentityScopeForEntry('feature')
})
await vi.advanceTimersByTimeAsync(250)
expect(events.filter((event) => event.type === 'gitStatusChanged')).toEqual([
{ type: 'gitStatusChanged', repoId: 'repo-1', worktreeIds: ['repo-1::/tmp/feature'] }
])
})
it("drops reused line counts for the checkout an index change touched, not another repo's", async () => {
const counted = [{ path: 'a.txt', status: 'modified', area: 'staged', added: 3, removed: 1 }]
const touched = getStatusLineStatsCacheKey('/tmp/feature')
const otherRepo = getStatusLineStatsCacheKey('/tmp/other-repo')
for (const cacheKey of [touched, otherRepo]) {
storeGitStatusLineStats({ cacheKey, head: 'h', entries: counted, now: 0 })
}
const reusable = (cacheKey: string): boolean =>
applyCachedGitStatusLineStats({
cacheKey,
head: 'h',
entries: [{ path: 'a.txt', status: 'modified', area: 'staged' }],
now: 0
})
vi.useFakeTimers()
scheduleWorktreeBaseNotification(watchWithFeatureCheckout(), {
gitStatusRepoIds: ['repo-1'],
gitStatusScope: headIdentityScopeForEntry('feature')
})
await vi.advanceTimersByTimeAsync(250)
expect({ touched: reusable(touched), otherRepo: reusable(otherRepo) }).toEqual({
touched: false,
otherRepo: true
})
})
@@ -1,4 +1,5 @@
import type { BrowserWindow } from 'electron'
import { basename } from 'node:path'
import type { WorktreeBaseCollectedChanges } from './worktree-base-directory-change-collector'
import type { WorktreeBaseWatchTarget } from './worktree-base-directory-event-filter'
import {
@@ -11,9 +12,16 @@ import {
mergeHeadIdentityScopes,
type WorktreeHeadIdentityScope
} from './worktree-head-identity-scope'
import { cachedWorktreePathsForScope } from './worktree-head-identity-cached-paths'
import {
allCachedWorktreePaths,
cachedWorktreePathsForScope
} from './worktree-head-identity-cached-paths'
import { invalidateGitStatusReads } from '../../../git/source-control/git-read-cache-invalidation'
import { notifyWorktreeGitStatusMetadataChanged } from '../../worktree-remote'
import { notifyWatchedWorktreeCatalogChanged } from '../../watched-worktree-catalog-notification'
import {
notifyGitStatusChangedForRemoteClients,
notifyWatchedWorktreeCatalogChanged
} from '../../watched-worktree-catalog-notification'
export type WorktreeBaseNotificationWatch = WorktreeBaseWatchTarget & {
mainWindow: BrowserWindow
@@ -41,6 +49,22 @@ export function supportsWorktreeHeadIdentityRefresh(watch: WorktreeBaseNotificat
return watch.kind === 'git-common'
}
// Structural and unattributed bursts may touch any checkout of this common dir, but no other repo's.
function changedWorktreePaths(
watch: WorktreeBaseNotificationWatch,
structural: boolean,
attributed: string[] | null
): string[] | null {
if (!structural && attributed) {
return attributed
}
if (!supportsWorktreeHeadIdentityRefresh(watch)) {
return null
}
// Like the head reader: only a `.git` common dir has a primary checkout.
return allCachedWorktreePaths(watch.headIdentityRefresh.cache, basename(watch.path) === '.git')
}
export function scheduleWorktreeBaseNotification(
watch: WorktreeBaseNotificationWatch,
changes: Partial<WorktreeBaseCollectedChanges>
@@ -90,12 +114,24 @@ export function scheduleWorktreeBaseNotification(
const gitStatusWorktreePaths = supportsWorktreeHeadIdentityRefresh(watch)
? cachedWorktreePathsForScope(watch.headIdentityRefresh.cache, watch.pendingGitStatusScope)
: null
const changedPaths = changedWorktreePaths(
watch,
pendingStructure.length > 0,
gitStatusWorktreePaths
)
clearPendingWorktreeBaseNotifications(watch)
if (pendingStructure.length > 0 || sourceControlRepoIds.size > 0) {
// Staging can keep a file's status letters, and a phone's re-read must not join a read begun before the change.
invalidateGitStatusReads(changedPaths)
}
for (const repoId of pendingStructure) {
notifyWatchedWorktreeCatalogChanged(watch.mainWindow, repoId)
// The renderer re-reads status on worktrees:changed; phones' Changes doesn't, and HEAD or packed-refs moves arrive only here.
notifyGitStatusChangedForRemoteClients(repoId, null)
}
for (const repoId of sourceControlRepoIds) {
notifyWorktreeGitStatusMetadataChanged(watch.mainWindow, repoId, gitStatusWorktreePaths)
notifyGitStatusChangedForRemoteClients(repoId, gitStatusWorktreePaths)
}
if (
supportsWorktreeHeadIdentityRefresh(watch) &&
@@ -34,3 +34,19 @@ export function cachedWorktreePathsForScope(
}
return paths
}
/** Every checkout of the common dir, or null while the memo may lack one (an unread listing, primary or entry). */
export function allCachedWorktreePaths(
cache: WorktreeHeadIdentityCache,
hasPrimary: boolean
): string[] | null {
if (
cache.entryNames === null ||
(hasPrimary && cache.primary === null) ||
cache.entryNames.some((name) => !cache.entries.has(name))
) {
return null
}
const linked = [...cache.entries.values()].map((identity) => identity.worktreePath)
return cache.primary ? [cache.primary.worktreePath, ...linked] : linked
}
@@ -214,7 +214,7 @@ describe('external worktree discovery for paired clients', () => {
break
}
}
expect(observed).toEqual(['worktreesChanged', 'reposChanged'])
expect(observed).toEqual(['worktreesChanged', 'gitStatusChanged', 'reposChanged'])
}
for (const [index, session] of sessions.slice(0, 2).entries()) {
@@ -1,4 +1,10 @@
import { getRepoRoutingConnectionId } from '../../../../shared/execution-host'
import {
getRepoExecutionHostId,
getRepoRoutingConnectionId
} from '../../../../shared/execution-host'
import type { Repo } from '../../../../shared/repo-types'
import { normalizeRuntimePathForComparison } from '../../../../shared/cross-platform-path'
import { composeWorktreeId } from '../../../../shared/worktree/id'
import { OrcaRuntimeWithGetStatus } from '../../hosts/runtime-status'
export abstract class RuntimeWorkspaceCatalogEvents extends OrcaRuntimeWithGetStatus {
@@ -21,11 +27,50 @@ export abstract class RuntimeWorkspaceCatalogEvents extends OrcaRuntimeWithGetSt
// Catalog changes need fresh Git scans; metadata-only edits do not.
notifyWorktreeCatalogChangedForRemoteClients(repoId: string): void {
this.invalidateWorktreeScanCacheForRepo(repoId)
const matchingRepos = this.store?.getRepos().filter((repo) => repo.id === repoId) ?? []
if (matchingRepos.length !== 1 || getRepoRoutingConnectionId(matchingRepos[0])) {
if (this.soleLocalRepo(repoId)) {
this.notifyWorktreesChangedForRemoteClients(repoId)
}
}
/** The base-dir watcher saw index, HEAD or ref moves; `worktreePaths` null means any checkout. */
notifyGitStatusChangedForRemoteClients(
repoId: string,
worktreePaths: readonly string[] | null
): void {
const repo = this.soleLocalRepo(repoId)
if (!repo) {
return
}
this.notifyWorktreesChangedForRemoteClients(repoId)
const worktreeIds = worktreePaths && this.listedWorktreeIds(repo, worktreePaths)
this.emitClientEvent({ type: 'gitStatusChanged', repoId, ...(worktreeIds && { worktreeIds }) })
}
// Watcher events carry only a repo id, so one shared with an SSH repo would be owner-blind.
private soleLocalRepo(repoId: string): Repo | null {
const matchingRepos = this.store?.getRepos().filter((repo) => repo.id === repoId) ?? []
return matchingRepos.length === 1 && !getRepoRoutingConnectionId(matchingRepos[0])
? matchingRepos[0]
: null
}
// Ids spelled as clients listed them; an unlisted path may be another spelling of any checkout, so name none.
private listedWorktreeIds(repo: Repo, paths: readonly string[]): string[] | null {
const scan = this.worktreeScanCache.get(`${repo.id}\0${getRepoExecutionHostId(repo)}`)
const listed = new Map(
(scan?.listing ?? scan?.result)?.worktrees.map((worktree) => [
normalizeRuntimePathForComparison(worktree.path),
worktree.path
])
)
const ids: string[] = []
for (const path of paths) {
const listedPath = listed.get(normalizeRuntimePathForComparison(path))
if (listedPath === undefined) {
return null
}
ids.push(composeWorktreeId(repo.id, listedPath))
}
return ids
}
// Host repo IPC bypasses runtime methods; invalidate paired clients without duplicating local repos:changed (#11994).
@@ -305,6 +305,12 @@ export function clearGitStatusLineStatsCache(): void {
resetGitStatusLineStatsWriteGenerations()
}
export function clearGitStatusLineStatsCacheKeysWhere(matches: (key: string) => boolean): void {
Array.from(lineStatsByWorktree.keys())
.filter(matches)
.forEach((key) => clearGitStatusLineStatsCacheKey(key))
}
export function clearGitStatusLineStatsCacheKey(
cacheKey: string,
writeToken?: GitStatusLineStatsWriteToken
@@ -64,10 +64,16 @@ export class GitStatusReadLeaseOwner<T> {
}
invalidate(): void {
this.invalidateWhere(() => true)
}
// Later leases start fresh; callers already holding a detached read keep it.
invalidateWhere(matches: (key: string) => boolean): void {
for (const [key, entry] of this.entries) {
this.detach(key, entry)
if (matches(key)) {
this.detach(key, entry)
}
}
this.entries.clear()
}
private createLease(
+2
View File
@@ -23,6 +23,8 @@ export type RuntimeClientEvent =
| { type: 'nativeChatCiResultLinesChanged'; ciResultLines: boolean }
/** The Workspace options UI state changed; a mirroring phone re-reads it. */
| { type: 'workspaceViewChanged' }
// Index, HEAD or refs moved in a watched local repo; without `worktreeIds` any of its checkouts may have changed.
| { type: 'gitStatusChanged'; repoId: string; worktreeIds?: string[] }
| {
type: 'worktreesChanged'
repoId: string