test(mobile): record the host screen's worktree mutations

Review of #20705 showed the `use-host-worktree-actions.ts` holdout reason was
wrong: its only native call is the pinned-id write, and that sits behind
`if (hostId)`, so mounting with no hostId never reaches it.

Two scenarios in one new family, recorded from the pinned baseline with the call
site still on the raw port. The first drives all three sends so the reply matrix
covers each method; the second refuses `worktree.rm` to pin the row restore.

The adapter is a new module, so no existing golden's `adapterSha256` moves and
none of the 250 goldens already here is rewritten.

Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
This commit is contained in:
Jinwoo-H
2026-09-14 17:04:23 -04:00
parent d53504fd5d
commit c935ffabb0
8 changed files with 3936 additions and 0 deletions
@@ -0,0 +1,328 @@
{
"operation": "host.worktree-actions",
"family": "host.worktree-actions",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
"recorderSha256": "2e90933db32efc17d752cf5d506ecdd9ec54ce53ea30ba55021ea3d1bc1d3fb2",
"adapterSha256": "2bc320d05d944b5c47176d4462350c4825e414511af52f7743ec9b6d6ebf93c2",
"scenarioSha256": "720add498c79425ca8efc9764fd5d8307fe33bc891842604cfc899f770b79811",
"platform": "darwin",
"scenarioVersion": 1,
"projectionVersion": 2,
"goldenFormatVersion": 5,
"values": {
"04938673cbf5": {
"name": "worktree.activate#1",
"args": [
{
"name": "method",
"value": "worktree.activate"
},
{
"name": "params",
"value": {
"navigation": "caller",
"notifyClients": false,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-2",
"ok": true,
"result": {
"ok": true
}
}
}
},
"0ebfc1859f18": {
"name": "pinnedIds",
"value": ["wt-1"]
},
"2b635c2a4fbb": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-3",
"ok": true,
"result": {
"ok": true
}
}
}
},
"32f21eaae959": {
"confirmRemoveHost": false,
"lastKnownWorktrees": [
{
"displayName": "marlin",
"isPinned": true,
"repo": "repo-1",
"worktreeId": "wt-1"
}
],
"optimisticActiveWorktreeIdentity": {
"$rpc": "null"
},
"pinnedIds": ["wt-1"],
"routeActionState": {},
"worktrees": [
{
"displayName": "marlin",
"isPinned": true,
"repo": "repo-1",
"worktreeId": "wt-1"
}
]
},
"4caf7515e224": {
"name": "worktree.set#1",
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.set\",\"params\":{\"worktree\":\"id:wt-1\",\"isPinned\":true}}"
},
"56b6d4fb8c56": {
"name": "worktree.set#1",
"args": [
{
"name": "method",
"value": "worktree.set"
},
{
"name": "params",
"value": {
"isPinned": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-1",
"ok": true,
"result": {
"ok": true
}
}
}
},
"5c186d67b84c": {
"name": "lastKnownWorktrees",
"value": []
},
"69d698d4f352": {
"name": "worktree.rm#1",
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.rm\",\"params\":{\"worktree\":\"id:wt-1\",\"force\":true}}"
},
"6e959a9dd70e": {
"confirmRemoveHost": false,
"lastKnownWorktrees": [],
"optimisticActiveWorktreeIdentity": "|wt-1",
"pinnedIds": ["wt-1"],
"routeActionState": {},
"worktrees": []
},
"7b87f237a7b6": {
"name": "worktrees",
"value": [
{
"displayName": "marlin",
"isPinned": true,
"repo": "repo-1",
"worktreeId": "wt-1"
}
]
},
"9270aeb7d9c6": {
"status": "pending",
"startedAt": 0
},
"b1509905fc66": {
"name": "optimisticActiveWorktreeIdentity",
"value": "|wt-1"
},
"ba357321dd85": {
"name": "lastKnownWorktrees",
"value": [
{
"displayName": "marlin",
"isPinned": true,
"repo": "repo-1",
"worktreeId": "wt-1"
}
]
},
"bf2b36bda2d2": {
"name": "worktree.set#1",
"args": [
{
"name": "method",
"value": "worktree.set"
},
{
"name": "params",
"value": {
"isPinned": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"c3eecb0c6e96": {
"name": "worktree.activate#1",
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.activate\",\"params\":{\"worktree\":\"id:wt-1\",\"notifyClients\":false,\"navigation\":\"caller\"}}"
},
"d440bd87d1ce": {
"name": "worktrees",
"value": []
},
"e3e3c397a66a": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"eb79a9b3682a": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"$rpc": "undefined"
}
}
},
"recording": {
"scenario": "host-worktree-actions-pin-open-delete",
"checkpoints": [
{
"id": "pin-optimistic",
"observation": {
"sender": ["bf2b36bda2d2"],
"payloads": ["4caf7515e224"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a"
},
"state": "32f21eaae959",
"effects": ["7b87f237a7b6", "ba357321dd85", "0ebfc1859f18"]
}
},
{
"id": "delete-optimistic",
"observation": {
"sender": ["56b6d4fb8c56", "04938673cbf5", "e3e3c397a66a"],
"payloads": ["4caf7515e224", "c3eecb0c6e96", "69d698d4f352"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a",
"open-session": "eb79a9b3682a",
"delete": "9270aeb7d9c6"
},
"state": "6e959a9dd70e",
"effects": [
"7b87f237a7b6",
"ba357321dd85",
"0ebfc1859f18",
"b1509905fc66",
"d440bd87d1ce",
"5c186d67b84c"
]
}
},
{
"id": "settled",
"observation": {
"sender": ["56b6d4fb8c56", "04938673cbf5", "2b635c2a4fbb"],
"payloads": ["4caf7515e224", "c3eecb0c6e96", "69d698d4f352"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a",
"open-session": "eb79a9b3682a",
"delete": "eb79a9b3682a"
},
"state": "6e959a9dd70e",
"effects": [
"7b87f237a7b6",
"ba357321dd85",
"0ebfc1859f18",
"b1509905fc66",
"d440bd87d1ce",
"5c186d67b84c"
]
}
}
]
}
}
@@ -0,0 +1,189 @@
{
"operation": "host.worktree-actions",
"family": "host.worktree-actions",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
"recorderSha256": "2e90933db32efc17d752cf5d506ecdd9ec54ce53ea30ba55021ea3d1bc1d3fb2",
"adapterSha256": "2bc320d05d944b5c47176d4462350c4825e414511af52f7743ec9b6d6ebf93c2",
"scenarioSha256": "5dd5e7eabaabba1e471b13958f59891c3b28f553087c96315598c83a14ded7e7",
"platform": "darwin",
"scenarioVersion": 1,
"projectionVersion": 2,
"goldenFormatVersion": 5,
"values": {
"3fd02e693647": {
"name": "worktree.rm#1",
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.rm\",\"params\":{\"worktree\":\"id:wt-1\",\"force\":true}}"
},
"5c186d67b84c": {
"name": "lastKnownWorktrees",
"value": []
},
"8056533b940f": {
"confirmRemoveHost": false,
"lastKnownWorktrees": [],
"optimisticActiveWorktreeIdentity": {
"$rpc": "null"
},
"pinnedIds": [],
"routeActionState": {},
"worktrees": []
},
"9270aeb7d9c6": {
"status": "pending",
"startedAt": 0
},
"b569ed5b8bd2": {
"name": "worktrees",
"value": [
{
"displayName": "marlin",
"isPinned": false,
"repo": "repo-1",
"worktreeId": "wt-1"
}
]
},
"b92861217ed8": {
"name": "lastKnownWorktrees",
"value": [
{
"displayName": "marlin",
"isPinned": false,
"repo": "repo-1",
"worktreeId": "wt-1"
}
]
},
"d440bd87d1ce": {
"name": "worktrees",
"value": []
},
"e3e3c397a66a": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"e97d1f006b72": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"error": {
"code": "worktree_busy",
"message": "Worktree is busy"
},
"id": "frame-1",
"ok": false
}
}
},
"eb79a9b3682a": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"$rpc": "undefined"
}
},
"f48071bb2e8c": {
"confirmRemoveHost": false,
"lastKnownWorktrees": [
{
"displayName": "marlin",
"isPinned": false,
"repo": "repo-1",
"worktreeId": "wt-1"
}
],
"optimisticActiveWorktreeIdentity": {
"$rpc": "null"
},
"pinnedIds": [],
"routeActionState": {},
"worktrees": [
{
"displayName": "marlin",
"isPinned": false,
"repo": "repo-1",
"worktreeId": "wt-1"
}
]
}
},
"recording": {
"scenario": "host-worktree-delete-refused",
"checkpoints": [
{
"id": "delete-optimistic",
"observation": {
"sender": ["e3e3c397a66a"],
"payloads": ["3fd02e693647"],
"settlements": {
"mount": "eb79a9b3682a",
"delete": "9270aeb7d9c6"
},
"state": "8056533b940f",
"effects": ["d440bd87d1ce", "5c186d67b84c"]
}
},
{
"id": "restored",
"observation": {
"sender": ["e97d1f006b72"],
"payloads": ["3fd02e693647"],
"settlements": {
"mount": "eb79a9b3682a",
"delete": "eb79a9b3682a"
},
"state": "f48071bb2e8c",
"effects": ["d440bd87d1ce", "5c186d67b84c", "b569ed5b8bd2", "b92861217ed8"]
}
}
]
}
}
@@ -0,0 +1,998 @@
{
"operation": "host.worktree-actions",
"family": "host.worktree-actions",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
"recorderSha256": "2e90933db32efc17d752cf5d506ecdd9ec54ce53ea30ba55021ea3d1bc1d3fb2",
"adapterSha256": "2bc320d05d944b5c47176d4462350c4825e414511af52f7743ec9b6d6ebf93c2",
"scenarioSha256": "c47656a4ca21762e4b5a247ddf9a96efb746bec81e942ffa308a774bab1449e2",
"platform": "darwin",
"scenarioVersion": 1,
"projectionVersion": 2,
"goldenFormatVersion": 5,
"values": {
"04938673cbf5": {
"name": "worktree.activate#1",
"args": [
{
"name": "method",
"value": "worktree.activate"
},
{
"name": "params",
"value": {
"navigation": "caller",
"notifyClients": false,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-2",
"ok": true,
"result": {
"ok": true
}
}
}
},
"0ebfc1859f18": {
"name": "pinnedIds",
"value": ["wt-1"]
},
"11e971c034ae": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-3",
"ok": true,
"result": {
"error": {
"message": "inner refused"
},
"ok": false
}
}
}
},
"2b635c2a4fbb": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-3",
"ok": true,
"result": {
"ok": true
}
}
}
},
"2c0740d2cefb": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"error": {
"code": "refused",
"message": ""
},
"id": "frame-3",
"ok": false
}
}
},
"32f21eaae959": {
"confirmRemoveHost": false,
"lastKnownWorktrees": [
{
"displayName": "marlin",
"isPinned": true,
"repo": "repo-1",
"worktreeId": "wt-1"
}
],
"optimisticActiveWorktreeIdentity": {
"$rpc": "null"
},
"pinnedIds": ["wt-1"],
"routeActionState": {},
"worktrees": [
{
"displayName": "marlin",
"isPinned": true,
"repo": "repo-1",
"worktreeId": "wt-1"
}
]
},
"4caf7515e224": {
"name": "worktree.set#1",
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.set\",\"params\":{\"worktree\":\"id:wt-1\",\"isPinned\":true}}"
},
"4f1b109adcc0": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-3",
"ok": true,
"result": {
"error": "inner refused",
"ok": false
}
}
}
},
"56b6d4fb8c56": {
"name": "worktree.set#1",
"args": [
{
"name": "method",
"value": "worktree.set"
},
{
"name": "params",
"value": {
"isPinned": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-1",
"ok": true,
"result": {
"ok": true
}
}
}
},
"5c186d67b84c": {
"name": "lastKnownWorktrees",
"value": []
},
"60cb8c68db7d": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 0,
"settledAt": 0,
"error": {
"category": "Error",
"message": "Connection closed",
"isRpcDeliveryUnknown": true
}
}
},
"69d698d4f352": {
"name": "worktree.rm#1",
"json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.rm\",\"params\":{\"worktree\":\"id:wt-1\",\"force\":true}}"
},
"6e959a9dd70e": {
"confirmRemoveHost": false,
"lastKnownWorktrees": [],
"optimisticActiveWorktreeIdentity": "|wt-1",
"pinnedIds": ["wt-1"],
"routeActionState": {},
"worktrees": []
},
"7b87f237a7b6": {
"name": "worktrees",
"value": [
{
"displayName": "marlin",
"isPinned": true,
"repo": "repo-1",
"worktreeId": "wt-1"
}
]
},
"7ce7ff16ad9e": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"error": {
"code": "refused",
"message": "outer refused"
},
"id": "frame-3",
"ok": false
}
}
},
"86754b292acd": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"error": {
"code": "method_not_found",
"message": "Unknown method"
},
"id": "frame-3",
"ok": false
}
}
},
"909c8bc23636": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-3",
"ok": true,
"result": {
"$rpc": "null"
}
}
}
},
"9270aeb7d9c6": {
"status": "pending",
"startedAt": 0
},
"972099c06c75": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-3",
"ok": true
}
}
},
"b1509905fc66": {
"name": "optimisticActiveWorktreeIdentity",
"value": "|wt-1"
},
"b569ed5b8bd2": {
"name": "worktrees",
"value": [
{
"displayName": "marlin",
"isPinned": false,
"repo": "repo-1",
"worktreeId": "wt-1"
}
]
},
"b92861217ed8": {
"name": "lastKnownWorktrees",
"value": [
{
"displayName": "marlin",
"isPinned": false,
"repo": "repo-1",
"worktreeId": "wt-1"
}
]
},
"ba357321dd85": {
"name": "lastKnownWorktrees",
"value": [
{
"displayName": "marlin",
"isPinned": true,
"repo": "repo-1",
"worktreeId": "wt-1"
}
]
},
"bf2b36bda2d2": {
"name": "worktree.set#1",
"args": [
{
"name": "method",
"value": "worktree.set"
},
{
"name": "params",
"value": {
"isPinned": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"c3eecb0c6e96": {
"name": "worktree.activate#1",
"json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"worktree.activate\",\"params\":{\"worktree\":\"id:wt-1\",\"notifyClients\":false,\"navigation\":\"caller\"}}"
},
"ce97d2eedacb": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 0,
"settledAt": 0,
"error": {
"category": "Error",
"message": "transport failure",
"isRpcDeliveryUnknown": true
}
}
},
"cf69e8a7e125": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "rejected",
"startedAt": 0,
"settledAt": 0,
"error": {
"category": "Error",
"message": "",
"isRpcDeliveryUnknown": true
}
}
},
"d440bd87d1ce": {
"name": "worktrees",
"value": []
},
"e3e3c397a66a": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "pending",
"startedAt": 0
}
},
"eb79a9b3682a": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"$rpc": "undefined"
}
},
"faaf50dee85b": {
"confirmRemoveHost": false,
"lastKnownWorktrees": [
{
"displayName": "marlin",
"isPinned": false,
"repo": "repo-1",
"worktreeId": "wt-1"
}
],
"optimisticActiveWorktreeIdentity": "|wt-1",
"pinnedIds": ["wt-1"],
"routeActionState": {},
"worktrees": [
{
"displayName": "marlin",
"isPinned": false,
"repo": "repo-1",
"worktreeId": "wt-1"
}
]
},
"ff4c661d50a3": {
"name": "worktree.rm#1",
"args": [
{
"name": "method",
"value": "worktree.rm"
},
{
"name": "params",
"value": {
"force": true,
"worktree": "id:wt-1"
}
},
{
"name": "options",
"value": {
"$rpc": "absent"
}
}
],
"settlement": {
"status": "fulfilled",
"startedAt": 0,
"settledAt": 0,
"value": {
"id": "frame-3",
"ok": true,
"result": {
"error": "refused"
}
}
}
}
},
"recording": {
"scenario": "matrix-host.worktree-actions-worktree.rm-1",
"checkpoints": [
{
"id": "host-worktree-actions-pin-open-delete.prelude:pin-optimistic",
"observation": {
"sender": ["bf2b36bda2d2"],
"payloads": ["4caf7515e224"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a"
},
"state": "32f21eaae959",
"effects": ["7b87f237a7b6", "ba357321dd85", "0ebfc1859f18"]
}
},
{
"id": "host-worktree-actions-pin-open-delete.prelude:delete-optimistic",
"observation": {
"sender": ["56b6d4fb8c56", "04938673cbf5", "e3e3c397a66a"],
"payloads": ["4caf7515e224", "c3eecb0c6e96", "69d698d4f352"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a",
"open-session": "eb79a9b3682a",
"delete": "9270aeb7d9c6"
},
"state": "6e959a9dd70e",
"effects": [
"7b87f237a7b6",
"ba357321dd85",
"0ebfc1859f18",
"b1509905fc66",
"d440bd87d1ce",
"5c186d67b84c"
]
}
},
{
"id": "host-worktree-actions-pin-open-delete.prelude:cleanup",
"observation": {
"sender": ["56b6d4fb8c56", "04938673cbf5", "60cb8c68db7d"],
"payloads": ["4caf7515e224", "c3eecb0c6e96", "69d698d4f352"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a",
"open-session": "eb79a9b3682a",
"delete": "eb79a9b3682a"
},
"state": "6e959a9dd70e",
"effects": [
"7b87f237a7b6",
"ba357321dd85",
"0ebfc1859f18",
"b1509905fc66",
"d440bd87d1ce",
"5c186d67b84c",
"b569ed5b8bd2",
"b92861217ed8"
]
}
},
{
"id": "host-worktree-actions-pin-open-delete.normal:settled",
"observation": {
"sender": ["56b6d4fb8c56", "04938673cbf5", "2b635c2a4fbb"],
"payloads": ["4caf7515e224", "c3eecb0c6e96", "69d698d4f352"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a",
"open-session": "eb79a9b3682a",
"delete": "eb79a9b3682a"
},
"state": "6e959a9dd70e",
"effects": [
"7b87f237a7b6",
"ba357321dd85",
"0ebfc1859f18",
"b1509905fc66",
"d440bd87d1ce",
"5c186d67b84c"
]
}
},
{
"id": "host-worktree-actions-pin-open-delete.result-absent:settled",
"observation": {
"sender": ["56b6d4fb8c56", "04938673cbf5", "972099c06c75"],
"payloads": ["4caf7515e224", "c3eecb0c6e96", "69d698d4f352"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a",
"open-session": "eb79a9b3682a",
"delete": "eb79a9b3682a"
},
"state": "6e959a9dd70e",
"effects": [
"7b87f237a7b6",
"ba357321dd85",
"0ebfc1859f18",
"b1509905fc66",
"d440bd87d1ce",
"5c186d67b84c"
]
}
},
{
"id": "host-worktree-actions-pin-open-delete.result-null:settled",
"observation": {
"sender": ["56b6d4fb8c56", "04938673cbf5", "909c8bc23636"],
"payloads": ["4caf7515e224", "c3eecb0c6e96", "69d698d4f352"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a",
"open-session": "eb79a9b3682a",
"delete": "eb79a9b3682a"
},
"state": "6e959a9dd70e",
"effects": [
"7b87f237a7b6",
"ba357321dd85",
"0ebfc1859f18",
"b1509905fc66",
"d440bd87d1ce",
"5c186d67b84c"
]
}
},
{
"id": "host-worktree-actions-pin-open-delete.inner-ok-missing:settled",
"observation": {
"sender": ["56b6d4fb8c56", "04938673cbf5", "ff4c661d50a3"],
"payloads": ["4caf7515e224", "c3eecb0c6e96", "69d698d4f352"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a",
"open-session": "eb79a9b3682a",
"delete": "eb79a9b3682a"
},
"state": "6e959a9dd70e",
"effects": [
"7b87f237a7b6",
"ba357321dd85",
"0ebfc1859f18",
"b1509905fc66",
"d440bd87d1ce",
"5c186d67b84c"
]
}
},
{
"id": "host-worktree-actions-pin-open-delete.inner-false-string-error:settled",
"observation": {
"sender": ["56b6d4fb8c56", "04938673cbf5", "4f1b109adcc0"],
"payloads": ["4caf7515e224", "c3eecb0c6e96", "69d698d4f352"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a",
"open-session": "eb79a9b3682a",
"delete": "eb79a9b3682a"
},
"state": "6e959a9dd70e",
"effects": [
"7b87f237a7b6",
"ba357321dd85",
"0ebfc1859f18",
"b1509905fc66",
"d440bd87d1ce",
"5c186d67b84c"
]
}
},
{
"id": "host-worktree-actions-pin-open-delete.inner-false-object-error:settled",
"observation": {
"sender": ["56b6d4fb8c56", "04938673cbf5", "11e971c034ae"],
"payloads": ["4caf7515e224", "c3eecb0c6e96", "69d698d4f352"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a",
"open-session": "eb79a9b3682a",
"delete": "eb79a9b3682a"
},
"state": "6e959a9dd70e",
"effects": [
"7b87f237a7b6",
"ba357321dd85",
"0ebfc1859f18",
"b1509905fc66",
"d440bd87d1ce",
"5c186d67b84c"
]
}
},
{
"id": "host-worktree-actions-pin-open-delete.outer-refused:settled",
"observation": {
"sender": ["56b6d4fb8c56", "04938673cbf5", "7ce7ff16ad9e"],
"payloads": ["4caf7515e224", "c3eecb0c6e96", "69d698d4f352"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a",
"open-session": "eb79a9b3682a",
"delete": "eb79a9b3682a"
},
"state": "faaf50dee85b",
"effects": [
"7b87f237a7b6",
"ba357321dd85",
"0ebfc1859f18",
"b1509905fc66",
"d440bd87d1ce",
"5c186d67b84c",
"b569ed5b8bd2",
"b92861217ed8"
]
}
},
{
"id": "host-worktree-actions-pin-open-delete.outer-refused-no-message:settled",
"observation": {
"sender": ["56b6d4fb8c56", "04938673cbf5", "2c0740d2cefb"],
"payloads": ["4caf7515e224", "c3eecb0c6e96", "69d698d4f352"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a",
"open-session": "eb79a9b3682a",
"delete": "eb79a9b3682a"
},
"state": "faaf50dee85b",
"effects": [
"7b87f237a7b6",
"ba357321dd85",
"0ebfc1859f18",
"b1509905fc66",
"d440bd87d1ce",
"5c186d67b84c",
"b569ed5b8bd2",
"b92861217ed8"
]
}
},
{
"id": "host-worktree-actions-pin-open-delete.method-not-found:settled",
"observation": {
"sender": ["56b6d4fb8c56", "04938673cbf5", "86754b292acd"],
"payloads": ["4caf7515e224", "c3eecb0c6e96", "69d698d4f352"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a",
"open-session": "eb79a9b3682a",
"delete": "eb79a9b3682a"
},
"state": "faaf50dee85b",
"effects": [
"7b87f237a7b6",
"ba357321dd85",
"0ebfc1859f18",
"b1509905fc66",
"d440bd87d1ce",
"5c186d67b84c",
"b569ed5b8bd2",
"b92861217ed8"
]
}
},
{
"id": "host-worktree-actions-pin-open-delete.transport-rejection:settled",
"observation": {
"sender": ["56b6d4fb8c56", "04938673cbf5", "ce97d2eedacb"],
"payloads": ["4caf7515e224", "c3eecb0c6e96", "69d698d4f352"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a",
"open-session": "eb79a9b3682a",
"delete": "eb79a9b3682a"
},
"state": "faaf50dee85b",
"effects": [
"7b87f237a7b6",
"ba357321dd85",
"0ebfc1859f18",
"b1509905fc66",
"d440bd87d1ce",
"5c186d67b84c",
"b569ed5b8bd2",
"b92861217ed8"
]
}
},
{
"id": "host-worktree-actions-pin-open-delete.transport-rejection-no-message:settled",
"observation": {
"sender": ["56b6d4fb8c56", "04938673cbf5", "cf69e8a7e125"],
"payloads": ["4caf7515e224", "c3eecb0c6e96", "69d698d4f352"],
"settlements": {
"mount": "eb79a9b3682a",
"toggle-pin": "eb79a9b3682a",
"open-session": "eb79a9b3682a",
"delete": "eb79a9b3682a"
},
"state": "faaf50dee85b",
"effects": [
"7b87f237a7b6",
"ba357321dd85",
"0ebfc1859f18",
"b1509905fc66",
"d440bd87d1ce",
"5c186d67b84c",
"b569ed5b8bd2",
"b92861217ed8"
]
}
}
]
}
}
File diff suppressed because it is too large Load Diff
+113
View File
@@ -7615,6 +7615,119 @@
"checkpoint": "settled"
}
]
},
{
"id": "host-worktree-actions-pin-open-delete",
"operation": "host.worktree-actions",
"version": 1,
"family": "host.worktree-actions",
"sites": ["mobile/src/host-screen/use-host-worktree-actions.ts"],
"schedules": [],
"steps": [
{
"action": "mount",
"id": "mount"
},
{
"action": "toggle-pin",
"id": "toggle-pin"
},
{
"checkpoint": "pin-optimistic"
},
{
"complete": "worktree.set#1",
"params": {
"worktree": "id:wt-1",
"isPinned": true
},
"reply": {
"ok": true,
"result": {
"ok": true
}
}
},
{
"action": "open-session",
"id": "open-session"
},
{
"complete": "worktree.activate#1",
"params": {
"worktree": "id:wt-1",
"notifyClients": false,
"navigation": "caller"
},
"reply": {
"ok": true,
"result": {
"ok": true
}
}
},
{
"action": "delete",
"id": "delete"
},
{
"checkpoint": "delete-optimistic"
},
{
"complete": "worktree.rm#1",
"params": {
"worktree": "id:wt-1",
"force": true
},
"reply": {
"ok": true,
"result": {
"ok": true
}
}
},
{
"checkpoint": "settled"
}
]
},
{
"id": "host-worktree-delete-refused",
"operation": "host.worktree-actions",
"version": 1,
"family": "host.worktree-actions",
"sites": ["mobile/src/host-screen/use-host-worktree-actions.ts"],
"schedules": [],
"steps": [
{
"action": "mount",
"id": "mount"
},
{
"action": "delete",
"id": "delete"
},
{
"checkpoint": "delete-optimistic"
},
{
"complete": "worktree.rm#1",
"params": {
"worktree": "id:wt-1",
"force": true
},
"reply": {
"ok": false,
"error": {
"code": "worktree_busy",
"message": "Worktree is busy"
}
}
},
{
"checkpoint": "restored"
}
]
}
]
}
@@ -0,0 +1,77 @@
import type { MountAdapter } from '../recording-scenario'
import { hookMount, performHookAction } from '../hook-mount'
import { observableModel, projectObservable } from '../observable-model'
import type { operationModuleLoader } from '../operation-module-loader'
const ROW = { worktreeId: 'wt-1', displayName: 'marlin', repo: 'repo-1', isPinned: false }
/**
* The host screen's three worktree mutations: pin, delete and open.
*
* Mounted with no hostId, which is the only thing that keeps the hook off native storage: the
* pinned-id write is the sole native call and it sits behind `if (hostId)`.
*/
export function hostWorktreeActionMountAdapters(
modules: ReturnType<typeof operationModuleLoader>
): Record<string, MountAdapter> {
return {
'host.worktree-actions': (context) => {
const useActions = modules.load<
typeof import('../../../host-screen/use-host-worktree-actions')
>('mobile/src/host-screen/use-host-worktree-actions.ts').useHostWorktreeActions
const state = observableModel(context, {
newWorktreeModalRef: { current: null },
newWorktreeModalVisibleRef: { current: false },
pinnedIds: new Set<string>(),
worktrees: [ROW],
lastKnownWorktrees: [ROW],
confirmRemoveHost: false,
optimisticActiveWorktreeIdentity: null,
routeActionState: {}
})
let actions: ReturnType<typeof useActions>
const hook = hookMount(() => {
actions = useActions({
client: context.client,
connState: 'connected',
embedded: false,
fetchWorktrees: async () => {},
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the hook only forwards this to host removal, which no scenario drives.
forgetHostClient: (() => {}) as unknown as Parameters<
typeof useActions
>[0]['forgetHostClient'],
hostId: undefined,
pathname: '/h/host-1',
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: navigation is observed through the recorded sends, not the router.
router: { push: () => {}, replace: () => {} } as unknown as Parameters<
typeof useActions
>[0]['router'],
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the recorder supplies only the members the hook reads.
state: state as unknown as Parameters<typeof useActions>[0]['state']
})
})
return {
action(name) {
if (name === 'mount') {
return hook.mount()
}
if (name === 'toggle-pin') {
return performHookAction(() => actions.togglePin(ROW.worktreeId))
}
if (name === 'delete') {
return performHookAction(() => actions.handleDeleteWorktree(ROW))
}
if (name === 'open-session') {
return performHookAction(() => actions.openWorktreeSession(ROW))
}
throw new Error(`Unknown worktree action: ${name}`)
},
state: () =>
projectObservable(
Object.fromEntries(Object.entries(state).filter(([key]) => !key.endsWith('Ref')))
),
dispose: hook.unmount
}
}
}
}
@@ -1,6 +1,7 @@
import { fileInventoryMountAdapters } from './file-inventory-mount-adapters'
import { fileRequestMountAdapters } from './file-request-mount-adapters'
import { hostScreenMountAdapters } from './host-screen-mount-adapters'
import { hostWorktreeActionMountAdapters } from './host-worktree-action-mount-adapters'
import { hostedReviewMountAdapters } from './hosted-review-mount-adapters'
import { newTabAgentMountAdapters } from './new-tab-agent-mount-adapters'
import { newWorkspaceMountAdapters } from './new-workspace-mount-adapters'
@@ -22,6 +23,10 @@ export const MOUNTED_OPERATION_MODULES: readonly MountedOperationModule[] = [
{ source: 'file-inventory-mount-adapters.ts', mounts: fileInventoryMountAdapters },
{ source: 'file-request-mount-adapters.ts', mounts: fileRequestMountAdapters },
{ source: 'host-screen-mount-adapters.ts', mounts: hostScreenMountAdapters },
{
source: 'host-worktree-action-mount-adapters.ts',
mounts: hostWorktreeActionMountAdapters
},
{ source: 'hosted-review-mount-adapters.ts', mounts: hostedReviewMountAdapters },
{ source: 'new-tab-agent-mount-adapters.ts', mounts: newTabAgentMountAdapters },
{ source: 'new-workspace-mount-adapters.ts', mounts: newWorkspaceMountAdapters },