mirror of
https://github.com/stablyai/orca.git
synced 2026-09-25 16:02:38 +00:00
test(mobile): matrix the dialog-dismiss site and name the three reaches left behind
The reply matrix drives every reply a family's base scenario scripts, and the browser dialog family scripted only the accept leg, so repointing `browser.dialogDismiss` at another method survived the whole suite. A scenario for the dismiss leg closes it; the mutation is killed now. The inventory loses five section headers that no longer list anything, and the three entries that resisted migration each carry what blocks them: a `worktree.ps` inside the history screen component's own effect, an unsubscribe closed over inside a `subscribe` callback, and a `notifications.getMissedSince` gated behind the OS notification tray and the keychain host catalog. Faking either of the last two would record device state, not a wire. Eighteen goldens move on `adapterSha256` alone: removing two inner casts from the browser and history adapters re-digests the goldens mounted through them and nothing else. All 263 were re-recorded from the pinned baseline and compare byte-identical to the previous recording apart from those headers and the new file. Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "00864bce221e5c5e72f10c30939a40b26bdb342913a59770ff8c92fc02309f27",
|
||||
"adapterSha256": "0326d26df79bf4930e2af844b07a09047f0be9bae90ab7dc2a39c330b827473b",
|
||||
"scenarioSha256": "0431ac82cbb8c60b16f4432fd0da7cff665485d668e512b20fc1168ec63db3fe",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "00864bce221e5c5e72f10c30939a40b26bdb342913a59770ff8c92fc02309f27",
|
||||
"adapterSha256": "0326d26df79bf4930e2af844b07a09047f0be9bae90ab7dc2a39c330b827473b",
|
||||
"scenarioSha256": "e97c6db772a70ee1912419ac67835b6074aaf9a341d4360389a11465f08092c5",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "2fc41099434386a9b110ad53b2ead737afad0d57a8eb48f944cf5bd77007e402",
|
||||
"adapterSha256": "6bc6da818394e2e35b873fa44bc4f2cf6ce3bcbbc3bb0a738765aaa25b884a0f",
|
||||
"scenarioSha256": "95f377bc4d8bf1248cafed26b2e9f425ad37e8d3c99e354bd6a8c67eb9bd9b1b",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"operation": "browser.page-commands",
|
||||
"family": "browser.dialog",
|
||||
"namedDeltas": [],
|
||||
"runnerVersion": 1,
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "6bc6da818394e2e35b873fa44bc4f2cf6ce3bcbbc3bb0a738765aaa25b884a0f",
|
||||
"scenarioSha256": "5071188ee492a4ced5be793b2dab32baa9750ee6535128635f274fd79198e2f1",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
"projectionVersion": 2,
|
||||
"goldenFormatVersion": 5,
|
||||
"values": {
|
||||
"9855d4ec3415": {
|
||||
"busy": false,
|
||||
"dialog": {
|
||||
"$rpc": "null"
|
||||
},
|
||||
"error": {
|
||||
"$rpc": "null"
|
||||
},
|
||||
"keyboardValue": "hello",
|
||||
"pointerModifiers": []
|
||||
},
|
||||
"be3e7ad116a5": {
|
||||
"name": "browser.dialogDismiss#1",
|
||||
"args": [
|
||||
{
|
||||
"name": "method",
|
||||
"value": "browser.dialogDismiss"
|
||||
},
|
||||
{
|
||||
"name": "params",
|
||||
"value": {
|
||||
"page": "page-1",
|
||||
"worktree": "id:worktree-1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "options",
|
||||
"value": {
|
||||
"timeoutMs": 5000
|
||||
}
|
||||
}
|
||||
],
|
||||
"settlement": {
|
||||
"status": "fulfilled",
|
||||
"startedAt": 0,
|
||||
"settledAt": 0,
|
||||
"value": {
|
||||
"id": "frame-1",
|
||||
"ok": true,
|
||||
"result": {
|
||||
"dismissed": true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"e14582853169": {
|
||||
"name": "browser.dialogDismiss#1",
|
||||
"json": "{\"id\":\"frame-1\",\"deviceToken\":\"recording-device\",\"method\":\"browser.dialogDismiss\",\"params\":{\"worktree\":\"id:worktree-1\",\"page\":\"page-1\"}}"
|
||||
},
|
||||
"eb79a9b3682a": {
|
||||
"status": "fulfilled",
|
||||
"startedAt": 0,
|
||||
"settledAt": 0,
|
||||
"value": {
|
||||
"$rpc": "undefined"
|
||||
}
|
||||
}
|
||||
},
|
||||
"recording": {
|
||||
"scenario": "browser-dialog-dismissed",
|
||||
"checkpoints": [
|
||||
{
|
||||
"id": "dismissed",
|
||||
"observation": {
|
||||
"sender": ["be3e7ad116a5"],
|
||||
"payloads": ["e14582853169"],
|
||||
"settlements": {
|
||||
"mount": "eb79a9b3682a",
|
||||
"dialog": "eb79a9b3682a"
|
||||
},
|
||||
"state": "9855d4ec3415",
|
||||
"effects": []
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "2fc41099434386a9b110ad53b2ead737afad0d57a8eb48f944cf5bd77007e402",
|
||||
"adapterSha256": "6bc6da818394e2e35b873fa44bc4f2cf6ce3bcbbc3bb0a738765aaa25b884a0f",
|
||||
"scenarioSha256": "eb2294c30af70ebc2bac092dc5105249ae8cf1941f750406622f7ff6dd70cc1b",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "2fc41099434386a9b110ad53b2ead737afad0d57a8eb48f944cf5bd77007e402",
|
||||
"adapterSha256": "6bc6da818394e2e35b873fa44bc4f2cf6ce3bcbbc3bb0a738765aaa25b884a0f",
|
||||
"scenarioSha256": "73faa87b359a11959543542016295bb6b36a10934dd99ad5c1a77a4290a608cd",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "2fc41099434386a9b110ad53b2ead737afad0d57a8eb48f944cf5bd77007e402",
|
||||
"adapterSha256": "6bc6da818394e2e35b873fa44bc4f2cf6ce3bcbbc3bb0a738765aaa25b884a0f",
|
||||
"scenarioSha256": "20779e28880cf62340bc34cef8f40a49311e11262ac069df909743da9b5500ff",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "2fc41099434386a9b110ad53b2ead737afad0d57a8eb48f944cf5bd77007e402",
|
||||
"adapterSha256": "6bc6da818394e2e35b873fa44bc4f2cf6ce3bcbbc3bb0a738765aaa25b884a0f",
|
||||
"scenarioSha256": "e1bc21248ccff45ff217e385a51618b6f5724c037bfbefa03bb76a48dd4d793b",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "00864bce221e5c5e72f10c30939a40b26bdb342913a59770ff8c92fc02309f27",
|
||||
"adapterSha256": "0326d26df79bf4930e2af844b07a09047f0be9bae90ab7dc2a39c330b827473b",
|
||||
"scenarioSha256": "efb8d1cd2a2ff0ade4cdc48a1aacec565e33b405bbe95c100b86534cdde49740",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "00864bce221e5c5e72f10c30939a40b26bdb342913a59770ff8c92fc02309f27",
|
||||
"adapterSha256": "0326d26df79bf4930e2af844b07a09047f0be9bae90ab7dc2a39c330b827473b",
|
||||
"scenarioSha256": "a5698ca720dad08561a509c9c18f7586611fc68c58bd86791f4fcefc7915ab1f",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "2fc41099434386a9b110ad53b2ead737afad0d57a8eb48f944cf5bd77007e402",
|
||||
"adapterSha256": "6bc6da818394e2e35b873fa44bc4f2cf6ce3bcbbc3bb0a738765aaa25b884a0f",
|
||||
"scenarioSha256": "9cae732e4227d4c2fe874a5fb2e104552c16cbc91b59523de8fd46454660cde8",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "2fc41099434386a9b110ad53b2ead737afad0d57a8eb48f944cf5bd77007e402",
|
||||
"adapterSha256": "6bc6da818394e2e35b873fa44bc4f2cf6ce3bcbbc3bb0a738765aaa25b884a0f",
|
||||
"scenarioSha256": "fc3411f3f4cb58b6a1338ea943f59446fda7819931814e9ab002e35e2de42462",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "2fc41099434386a9b110ad53b2ead737afad0d57a8eb48f944cf5bd77007e402",
|
||||
"adapterSha256": "6bc6da818394e2e35b873fa44bc4f2cf6ce3bcbbc3bb0a738765aaa25b884a0f",
|
||||
"scenarioSha256": "c1df871e84d4399e9a447caaff244241933c0dfc7c3d5e114d022e54b0ed7ed4",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "2fc41099434386a9b110ad53b2ead737afad0d57a8eb48f944cf5bd77007e402",
|
||||
"adapterSha256": "6bc6da818394e2e35b873fa44bc4f2cf6ce3bcbbc3bb0a738765aaa25b884a0f",
|
||||
"scenarioSha256": "74adcaa668164bc7430e9984f100988bf72975dc8ebbe6b52fac34367cf31a4d",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "2fc41099434386a9b110ad53b2ead737afad0d57a8eb48f944cf5bd77007e402",
|
||||
"adapterSha256": "6bc6da818394e2e35b873fa44bc4f2cf6ce3bcbbc3bb0a738765aaa25b884a0f",
|
||||
"scenarioSha256": "db84000f262c6812db55b5f735ab7fe32c914e9ab52b9a7ccc0c21386b782298",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "2fc41099434386a9b110ad53b2ead737afad0d57a8eb48f944cf5bd77007e402",
|
||||
"adapterSha256": "6bc6da818394e2e35b873fa44bc4f2cf6ce3bcbbc3bb0a738765aaa25b884a0f",
|
||||
"scenarioSha256": "35ef15037791fa2e87456ee4585ddaaa00fbf5cde578d7c0b5df143cd40dd9a1",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "2fc41099434386a9b110ad53b2ead737afad0d57a8eb48f944cf5bd77007e402",
|
||||
"adapterSha256": "6bc6da818394e2e35b873fa44bc4f2cf6ce3bcbbc3bb0a738765aaa25b884a0f",
|
||||
"scenarioSha256": "47868afdd6d593526ea6f0a0a1e19377ee8306ab70636f2dace0da9ef2454397",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "2fc41099434386a9b110ad53b2ead737afad0d57a8eb48f944cf5bd77007e402",
|
||||
"adapterSha256": "6bc6da818394e2e35b873fa44bc4f2cf6ce3bcbbc3bb0a738765aaa25b884a0f",
|
||||
"scenarioSha256": "c1283bbfb340e968bbd4c86ac63489995d6191290751316228d27779dc6a2c55",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"baseline": "c6a72169843ececf3a21da370ac50c5c5a4e6462",
|
||||
"lockfileSha256": "788c1234b38a61fc882fca292341fce6690deee9cc6695673b0575cf2c4cf571",
|
||||
"recorderSha256": "6145e3e91fe5b17a9262db21965a2a23535ff01bba1ec2c662e68ab8e13c24da",
|
||||
"adapterSha256": "2fc41099434386a9b110ad53b2ead737afad0d57a8eb48f944cf5bd77007e402",
|
||||
"adapterSha256": "6bc6da818394e2e35b873fa44bc4f2cf6ce3bcbbc3bb0a738765aaa25b884a0f",
|
||||
"scenarioSha256": "092777c9ce457dcae95eafbe083c70510580569ac74e31c0d4224ac94b9fad76",
|
||||
"platform": "darwin",
|
||||
"scenarioVersion": 1,
|
||||
|
||||
@@ -7902,6 +7902,46 @@
|
||||
"checkpoint": "dismissed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "browser-dialog-dismissed",
|
||||
"operation": "browser.page-commands",
|
||||
"version": 1,
|
||||
"family": "browser.dialog",
|
||||
"sites": [
|
||||
"mobile/src/browser/use-mobile-browser-request.ts",
|
||||
"mobile/src/browser/use-mobile-browser-commands.ts"
|
||||
],
|
||||
"schedules": [],
|
||||
"steps": [
|
||||
{
|
||||
"action": "mount",
|
||||
"id": "mount"
|
||||
},
|
||||
{
|
||||
"action": "dialog",
|
||||
"id": "dialog",
|
||||
"args": {
|
||||
"accept": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"complete": "browser.dialogDismiss#1",
|
||||
"params": {
|
||||
"page": "page-1",
|
||||
"worktree": "id:worktree-1"
|
||||
},
|
||||
"reply": {
|
||||
"ok": true,
|
||||
"result": {
|
||||
"dismissed": true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"checkpoint": "dismissed"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { optionalSettingsRead } from '../transport/settings-read-operations'
|
||||
import { refusedRpcMessageOrFallback } from '../transport/rpc-refusal-message'
|
||||
import { rpcPayloadMember } from '../transport/rpc-reader-payload'
|
||||
import { readAcceptedResumeList } from './resume-metadata-lists'
|
||||
import {
|
||||
readAcceptedResumeList,
|
||||
resumeFolderWorkspaceListRead,
|
||||
resumeProjectGroupListRead,
|
||||
resumeRepoListRead,
|
||||
|
||||
@@ -79,18 +79,3 @@ export const resumeWorktreeListRead = bindDeferredRpcOperation(
|
||||
read: rpcUncheckedPayloadReader('resume-worktrees')
|
||||
})
|
||||
)
|
||||
|
||||
/**
|
||||
* One list off an enrichment read. Optional-chained on purpose: main tolerated both a refusal and
|
||||
* a null result here, and folding the member read into the reader would have thrown on the latter.
|
||||
*/
|
||||
export function readAcceptedResumeList<T>(
|
||||
accepted: { accepted: false } | { accepted: true; value: unknown } | null,
|
||||
key: string
|
||||
): T[] | undefined {
|
||||
if (!accepted?.accepted) {
|
||||
return undefined
|
||||
}
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: Preserve the established response shape at this boundary.
|
||||
return (accepted.value as Record<string, T[] | undefined> | null | undefined)?.[key]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
/**
|
||||
* One list off an enrichment read in the resume sheet's metadata load.
|
||||
*
|
||||
* Optional-chained on purpose: main tolerated both a refusal and a null result here, so folding
|
||||
* the member read into the operation's own reader would have started throwing on the latter.
|
||||
*/
|
||||
export function readAcceptedResumeList<T>(
|
||||
accepted: { accepted: false } | { accepted: true; value: unknown } | null,
|
||||
key: string
|
||||
): T[] | undefined {
|
||||
if (!accepted?.accepted) {
|
||||
return undefined
|
||||
}
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: Preserve the established response shape at this boundary.
|
||||
return (accepted.value as Record<string, T[] | undefined> | null | undefined)?.[key]
|
||||
}
|
||||
@@ -243,12 +243,13 @@ export function MobileBrowserPane({
|
||||
setError('Enter a valid URL.')
|
||||
return
|
||||
}
|
||||
const result = (await sendBrowserRequest(
|
||||
const settled = await sendBrowserRequest(
|
||||
async (rpc, page, options) =>
|
||||
browserNavigate.interpret(await browserNavigate.request(rpc, { ...page, url }, options)),
|
||||
{ showBusy: true, timeoutMs: 30_000 }
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: Preserve the established response shape at this boundary.
|
||||
)) as { url?: string } | null
|
||||
)
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: Preserve the established response shape at this boundary.
|
||||
const result = settled as { url?: string } | null
|
||||
if (typeof result?.url === 'string') {
|
||||
setAddressValue(displayBrowserUrl(result.url))
|
||||
lastZoomResetUrlRef.current = result.url
|
||||
|
||||
@@ -72,13 +72,14 @@ export function agentHistoryMountAdapters(
|
||||
let worktreesLoaded = true
|
||||
let renderer: ReactTestRenderer | undefined
|
||||
function Harness() {
|
||||
observed.history = useHistory({
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the hook and its scope derivation read only these three worktree fields.
|
||||
const params = {
|
||||
hostId: HOST_ID,
|
||||
worktreeId: WORKTREE_ID,
|
||||
worktrees: WORKTREES,
|
||||
worktreesLoaded
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the hook and its scope derivation read only these three worktree fields.
|
||||
} as unknown as Parameters<typeof useHistory>[0])
|
||||
} as unknown as Parameters<typeof useHistory>[0]
|
||||
observed.history = useHistory(params)
|
||||
return null
|
||||
}
|
||||
const element = () =>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import type { Dispatch, SetStateAction } from 'react'
|
||||
import type { MountAdapter } from '../recording-scenario'
|
||||
import { hookMount, performHookAction } from '../hook-mount'
|
||||
import type { operationModuleLoader } from '../operation-module-loader'
|
||||
@@ -29,6 +30,12 @@ export function browserMountAdapters(
|
||||
let dialog: { dialogType: string; message: string } | null = null
|
||||
let keyboardValue = 'hello'
|
||||
let pointerModifiers: string[] = []
|
||||
// React's own setter shape, so the recorder reads an updater the way the hook writes one.
|
||||
const setter =
|
||||
<T>(read: () => T, write: (value: T) => void): Dispatch<SetStateAction<T>> =>
|
||||
(next) =>
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: SetStateAction's function arm is exactly this updater; the typeof check is what narrows it.
|
||||
write(typeof next === 'function' ? (next as (prev: T) => T)(read()) : next)
|
||||
let commands: ReturnType<typeof useCommands>
|
||||
const hook = hookMount(() => {
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the recorder supplies plain setters where the hook declares React dispatchers.
|
||||
@@ -36,12 +43,18 @@ export function browserMountAdapters(
|
||||
busyRef,
|
||||
client,
|
||||
pageId: PAGE_ID,
|
||||
setBusy: (next: unknown) => {
|
||||
busy = typeof next === 'function' ? next(busy) : next === true
|
||||
},
|
||||
setError: (next: unknown) => {
|
||||
error = typeof next === 'function' ? next(error) : (next as string | null)
|
||||
},
|
||||
setBusy: setter(
|
||||
() => busy,
|
||||
(value) => {
|
||||
busy = value
|
||||
}
|
||||
),
|
||||
setError: setter(
|
||||
() => error,
|
||||
(value) => {
|
||||
error = value
|
||||
}
|
||||
),
|
||||
worktreeId: WORKTREE_ID
|
||||
} as unknown as Parameters<typeof useRequest>[0])
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the recorder supplies only the refs, setters and geometry the commands hook reads.
|
||||
@@ -54,18 +67,30 @@ export function browserMountAdapters(
|
||||
pageParams,
|
||||
pointerModifiers,
|
||||
sendBrowserRequest,
|
||||
setDialog: (next: unknown) => {
|
||||
dialog = typeof next === 'function' ? next(dialog) : next
|
||||
},
|
||||
setError: (next: unknown) => {
|
||||
error = typeof next === 'function' ? next(error) : (next as string | null)
|
||||
},
|
||||
setKeyboardValue: (next: string) => {
|
||||
keyboardValue = next
|
||||
},
|
||||
setPointerModifiers: (next: unknown) => {
|
||||
pointerModifiers = typeof next === 'function' ? next(pointerModifiers) : next
|
||||
},
|
||||
setDialog: setter(
|
||||
() => dialog,
|
||||
(value) => {
|
||||
dialog = value
|
||||
}
|
||||
),
|
||||
setError: setter(
|
||||
() => error,
|
||||
(value) => {
|
||||
error = value
|
||||
}
|
||||
),
|
||||
setKeyboardValue: setter(
|
||||
() => keyboardValue,
|
||||
(value) => {
|
||||
keyboardValue = value
|
||||
}
|
||||
),
|
||||
setPointerModifiers: setter(
|
||||
() => pointerModifiers,
|
||||
(value) => {
|
||||
pointerModifiers = value
|
||||
}
|
||||
),
|
||||
zoomRef: { current: { scale: 1, offsetX: 0, offsetY: 0 } }
|
||||
} as unknown as Parameters<typeof useCommands>[0])
|
||||
})
|
||||
|
||||
@@ -53,10 +53,10 @@ export const UNVALIDATED_RPC_REQUEST_PORT_PENDING: readonly UnvalidatedRpcReques
|
||||
{ file: 'app/terminal-settings.tsx', references: 3 },
|
||||
|
||||
// src/agent-history/ — agent history loads
|
||||
// Holdout: the last reach is a worktree.ps inside the screen component's own effect, which no
|
||||
// recording can mount without a fabricated react-native view tree.
|
||||
{ file: 'src/agent-history/MobileAgentSessionHistoryPanel.tsx', references: 1 },
|
||||
|
||||
// src/browser/ — hosted browser control
|
||||
|
||||
// src/components/ — shared widgets that fetch their own data
|
||||
{ file: 'src/components/codex-reset-credit-capability.ts', references: 2 },
|
||||
{ file: 'src/components/codex-reset-credit.ts', references: 3 },
|
||||
@@ -65,8 +65,6 @@ export const UNVALIDATED_RPC_REQUEST_PORT_PENDING: readonly UnvalidatedRpcReques
|
||||
{ file: 'src/components/use-new-workspace-runtime-context.ts', references: 3 },
|
||||
{ file: 'src/components/use-new-workspace-setup-script.ts', references: 1 },
|
||||
|
||||
// src/dictation/ — dictation session control
|
||||
|
||||
// src/files/ — file read, write and preview
|
||||
{ file: 'src/files/mobile-file-mutation-ownership.ts', references: 3 },
|
||||
{ file: 'src/files/mobile-file-preview-request.ts', references: 6 },
|
||||
@@ -77,8 +75,6 @@ export const UNVALIDATED_RPC_REQUEST_PORT_PENDING: readonly UnvalidatedRpcReques
|
||||
// src/home/ — home screen host reads
|
||||
{ file: 'src/home/mobile-home-host-requests.ts', references: 5 },
|
||||
|
||||
// src/hooks/ — cross-screen data hooks
|
||||
|
||||
// src/host-screen/ — host screen catalog and actions
|
||||
{ file: 'src/host-screen/host-screen-overlays.tsx', references: 1 },
|
||||
{ file: 'src/host-screen/use-host-repo-metadata.ts', references: 1 },
|
||||
@@ -86,7 +82,11 @@ export const UNVALIDATED_RPC_REQUEST_PORT_PENDING: readonly UnvalidatedRpcReques
|
||||
{ file: 'src/host-screen/use-host-worktree-actions.ts', references: 3 },
|
||||
|
||||
// src/notifications/ — push registration and delivery
|
||||
// Holdout: the unsubscribe is a closure inside a `subscribe` callback, and subscriptions are a
|
||||
// later step; the request-only recording runner refuses to open one.
|
||||
{ file: 'src/notifications/mobile-notifications.ts', references: 1 },
|
||||
// Holdout: the send is gated behind the OS notification tray and the keychain host catalog, and
|
||||
// faking either would record a fiction of device state rather than of the wire.
|
||||
{ file: 'src/notifications/push-dismissal-reconciliation.ts', references: 2 },
|
||||
|
||||
// src/session/ — session screen: chat, diff review, PR actions, tabs
|
||||
@@ -138,8 +138,6 @@ export const UNVALIDATED_RPC_REQUEST_PORT_PENDING: readonly UnvalidatedRpcReques
|
||||
{ file: 'src/session/use-mobile-terminal-paste.ts', references: 1 },
|
||||
{ file: 'src/session/use-quick-commands.ts', references: 2 },
|
||||
|
||||
// src/settings/ — settings screen actions
|
||||
|
||||
// src/settings/ — notification display probe
|
||||
{ file: 'src/settings/notification-display-test.tsx', references: 1 },
|
||||
|
||||
@@ -186,8 +184,6 @@ export const UNVALIDATED_RPC_REQUEST_PORT_PENDING: readonly UnvalidatedRpcReques
|
||||
{ file: 'src/tasks/use-mobile-tasks-task-list-loading.tsx', references: 4 },
|
||||
{ file: 'src/tasks/use-mobile-tasks-task-pagination-actions.tsx', references: 1 },
|
||||
|
||||
// src/terminal/ — terminal input, viewport and queries
|
||||
|
||||
// src/transport/ — pairing, endpoint probing and capability reads
|
||||
{ file: 'src/transport/host-status-gates.ts', references: 1 },
|
||||
{ file: 'src/transport/mobile-relay-credential-rotation.ts', references: 2 },
|
||||
|
||||
Reference in New Issue
Block a user