Brennan Benson
abc8386e14
fix(mobile): name a create's launch so a lost reply cannot build two workspaces ( #21137 )
...
* fix(mobile): name a create's launch so a lost reply cannot build two workspaces
`agent.launch` admits a caller-supplied `operationId` through a durable ledger, so
exactly one execution happens and every replay returns the recorded answer. No client
sent one, so the machinery was inert and the original defect was still live: mobile
retries a lost create by design, and a retried launch built a second agent in a second
workspace.
Mobile now mints an operation id per create candidate and sends it whenever the host
advertises `agent.launch.replay.v1`.
The invariant is one operation per candidate. `computeAgentLaunchFingerprint` folds
`target` whole, so the workspace name is inside the fingerprint; carrying one id across
a name-collision bump would meet its own row under a differing fingerprint and refuse
`agent_session_operation_conflict`, failing the create outright on the second candidate.
The id is therefore minted beside `clientMutationId` at the top of each loop iteration
and reused verbatim by every retry arm inside that candidate — never re-minted, since a
new id is a new operation.
Admission runs ahead of every effect, so `_invalid` / `_expired` / `_capacity` prove
nothing launched: those re-send the same candidate unnamed rather than let bookkeeping
fail a create the host would have performed. `_unknown` is the one refusal that is not
safe to re-send, and it surfaces.
Also corrects a false comment: the legacy path caches the whole launch under
`clientMutationId`, so inside its 60s window a replay adds neither a workspace nor a
surface, and outside it adds both — not "a second surface, never a second workspace".
* fix(mobile): preserve launch identity on refusals
* fix(mobile): use launch receipts to authorize replay
* test: move mobile launch replay coverage outside node project
* fix(mobile): enforce replay-safe launch delivery at the host
* test: run mobile launch contracts in mobile checks
* test: cover mobile launch contract workflow dependencies
2026-09-17 10:06:11 -07:00
..
2026-09-16 13:15:20 -07:00
2026-08-17 18:26:52 -07:00
2026-09-15 21:12:33 -04:00
2026-08-30 16:59:55 -07:00
2026-08-30 16:59:55 -07:00
2026-09-16 21:24:31 -04:00
2026-09-16 21:24:31 -04:00
2026-08-13 03:01:45 -07:00
2026-09-16 21:24:31 -04:00
2026-09-16 21:24:31 -04:00
2026-09-16 21:24:31 -04:00
2026-07-20 21:05:40 -07:00
2026-07-20 21:05:40 -07:00
2026-09-16 21:24:31 -04:00
2026-09-16 21:24:31 -04:00
2026-09-16 21:24:31 -04:00
2026-09-15 14:29:15 -04:00
2026-09-16 21:24:31 -04:00
2026-07-20 18:55:45 -07:00
2026-09-15 14:29:15 -04:00
2026-09-16 21:24:31 -04:00
2026-09-16 21:24:31 -04:00
2026-09-15 14:29:15 -04:00
2026-09-16 21:24:31 -04:00
2026-09-16 21:24:31 -04:00
2026-07-30 12:58:24 -07:00
2026-07-30 12:58:24 -07:00
2026-08-11 13:08:50 -07:00
2026-08-11 13:08:50 -07:00
2026-06-15 22:02:51 -07:00
2026-06-15 22:02:51 -07:00
2026-08-22 09:51:23 -07:00
2026-09-16 21:24:31 -04:00
2026-07-31 01:54:09 -07:00
2026-09-16 21:24:31 -04:00
2026-08-13 22:48:24 -07:00
2026-08-13 22:48:24 -07:00
2026-08-13 22:48:24 -07:00
2026-08-13 22:48:24 -07:00
2026-06-13 14:24:26 -07:00
2026-06-13 14:24:26 -07:00
2026-05-31 03:14:29 -07:00
2026-05-31 03:14:29 -07:00
2026-09-16 21:24:31 -04:00
2026-08-14 00:24:57 -07:00
2026-09-16 21:24:31 -04:00
2026-09-16 21:24:31 -04:00
2026-06-29 22:30:46 -07:00
2026-08-13 22:48:24 -07:00
2026-09-16 13:32:09 -04:00
2026-09-16 13:32:09 -04:00
2026-09-16 21:24:31 -04:00
2026-06-13 14:24:26 -07:00
2026-09-16 21:24:31 -04:00
2026-06-13 14:24:26 -07:00
2026-08-13 22:48:24 -07:00
2026-07-30 13:30:07 -07:00
2026-07-30 13:30:07 -07:00
2026-06-08 17:41:27 -07:00
2026-08-04 18:46:36 -07:00
2026-09-16 21:24:31 -04:00
2026-09-04 12:16:52 -07:00
2026-09-15 19:16:45 -04:00
2026-07-31 01:54:09 -07:00
2026-07-31 01:54:09 -07:00
2026-08-05 13:23:29 -07:00
2026-08-05 13:23:29 -07:00
2026-06-16 14:39:25 -07:00
2026-06-16 14:39:25 -07:00
2026-07-16 13:26:15 -07:00
2026-07-16 13:26:15 -07:00
2026-08-09 19:25:28 -07:00
2026-09-12 18:03:55 -07:00
2026-09-12 18:03:55 -07:00
2026-08-26 12:38:59 -07:00
2026-09-14 14:59:03 -07:00
2026-08-09 19:25:28 -07:00
2026-08-30 16:59:55 -07:00
2026-09-01 00:05:00 -07:00
2026-09-01 00:05:00 -07:00
2026-09-06 11:57:21 -07:00
2026-09-06 11:57:21 -07:00
2026-09-13 13:46:57 -07:00
2026-09-15 19:16:45 -04:00
2026-07-23 13:25:50 -07:00
2026-07-23 13:25:50 -07:00
2026-09-03 15:19:26 -07:00
2026-09-04 12:16:52 -07:00
2026-09-15 19:16:45 -04:00
2026-08-13 01:18:08 -07:00
2026-08-09 19:25:28 -07:00
2026-08-09 19:25:28 -07:00
2026-09-09 21:50:31 -07:00
2026-09-09 21:50:31 -07:00
2026-09-09 21:50:31 -07:00
2026-08-09 19:25:28 -07:00
2026-08-13 01:12:19 -07:00
2026-08-04 15:46:08 -07:00
2026-08-17 01:11:24 -07:00
2026-08-17 01:11:24 -07:00
2026-08-30 16:59:55 -07:00
2026-08-30 16:59:55 -07:00
2026-09-01 00:05:00 -07:00
2026-09-01 00:05:00 -07:00
2026-09-08 14:48:57 -04:00
2026-08-04 13:01:39 -07:00
2026-07-16 13:26:15 -07:00
2026-09-16 23:01:57 -07:00
2026-09-03 15:19:26 -07:00
2026-09-14 14:59:03 -07:00
2026-08-26 17:02:09 -07:00
2026-08-26 17:02:09 -07:00
2026-07-23 13:25:50 -07:00
2026-08-04 19:34:17 -07:00
2026-08-10 16:09:17 -07:00
2026-09-08 14:48:57 -04:00
2026-09-15 19:16:45 -04:00
2026-09-13 21:58:32 -07:00
2026-09-06 20:28:17 -07:00
2026-09-15 19:16:45 -04:00
2026-07-24 23:10:13 -07:00
2026-09-15 19:16:45 -04:00
2026-08-25 15:06:47 -07:00
2026-08-25 15:06:47 -07:00
2026-08-31 23:05:31 -07:00
2026-08-31 23:05:31 -07:00
2026-08-13 00:07:28 -07:00
2026-08-13 00:07:28 -07:00
2026-08-04 13:01:39 -07:00
2026-08-04 13:01:39 -07:00
2026-07-17 00:34:46 -07:00
2026-08-09 19:25:28 -07:00
2026-07-16 13:26:15 -07:00
2026-07-20 21:05:40 -07:00
2026-09-16 21:24:31 -04:00
2026-05-29 22:13:27 -04:00
2026-08-13 22:48:24 -07:00
2026-06-17 22:52:12 -07:00
2026-06-17 22:52:12 -07:00
2026-09-16 21:24:31 -04:00
2026-09-16 21:24:31 -04:00
2026-08-02 15:53:06 -07:00
2026-05-31 03:11:53 -07:00
2026-05-31 03:11:53 -07:00
2026-09-07 16:44:26 -04:00
2026-08-31 23:35:08 -07:00
2026-09-16 21:24:31 -04:00
2026-09-16 21:24:31 -04:00
2026-08-02 15:53:06 -07:00
2026-08-11 13:08:50 -07:00
2026-07-30 13:59:50 -07:00
2026-07-30 13:59:50 -07:00
2026-09-16 22:42:40 -07:00
2026-09-07 16:44:26 -04:00
2026-09-16 19:39:53 -04:00
2026-08-24 23:50:10 -07:00
2026-09-12 01:03:57 -04:00
2026-09-16 19:39:53 -04:00
2026-08-02 15:53:06 -07:00
2026-08-05 01:28:07 -07:00
2026-09-15 19:16:45 -04:00
2026-07-23 19:01:04 -07:00
2026-07-23 19:01:04 -07:00
2026-08-29 14:13:35 -07:00
2026-09-15 21:31:05 -04:00
2026-09-17 12:40:18 -04:00
2026-09-06 11:57:21 -07:00
2026-09-16 23:01:57 -07:00
2026-09-15 14:58:49 -07:00
2026-09-10 19:37:52 -07:00
2026-09-17 10:06:11 -07:00
2026-09-17 10:06:11 -07:00
2026-09-17 10:06:11 -07:00
2026-09-13 13:46:57 -07:00
2026-09-06 21:17:00 -07:00
2026-09-06 11:57:21 -07:00
2026-09-14 14:59:03 -07:00
2026-09-15 14:58:49 -07:00
2026-09-13 13:46:57 -07:00
2026-09-13 13:46:57 -07:00
2026-09-13 13:46:57 -07:00
2026-09-13 13:46:57 -07:00
2026-09-13 13:46:57 -07:00
2026-08-22 09:51:23 -07:00
2026-08-22 09:51:23 -07:00
2026-07-30 12:59:16 -07:00
2026-07-30 12:59:16 -07:00
2026-07-23 18:35:31 -07:00
2026-08-03 17:55:30 -07:00
2026-08-29 21:18:28 -07:00
2026-08-29 21:18:28 -07:00
2026-07-26 22:08:38 -07:00
2026-07-26 22:08:38 -07:00
2026-09-03 15:19:26 -07:00
2026-09-03 15:19:26 -07:00
2026-07-16 13:26:15 -07:00
2026-07-16 13:26:15 -07:00
2026-09-03 15:19:26 -07:00
2026-09-03 15:19:26 -07:00
2026-08-03 17:55:30 -07:00
2026-09-15 01:59:58 -07:00
2026-09-08 14:48:57 -04:00
2026-07-16 13:26:15 -07:00
2026-08-02 15:53:06 -07:00
2026-08-30 16:59:55 -07:00
2026-08-11 13:08:50 -07:00
2026-08-11 13:08:50 -07:00
2026-08-09 19:25:28 -07:00
2026-08-30 16:59:55 -07:00
2026-09-10 20:50:40 -07:00
2026-08-04 19:34:17 -07:00
2026-09-11 00:19:57 -07:00
2026-09-11 00:19:57 -07:00
2026-08-30 16:59:55 -07:00
2026-09-14 14:59:03 -07:00
2026-09-16 23:01:57 -07:00
2026-09-16 23:01:57 -07:00
2026-09-14 14:59:03 -07:00
2026-09-14 14:59:03 -07:00
2026-09-14 14:59:03 -07:00
2026-09-04 15:55:20 -07:00
2026-09-06 21:17:00 -07:00
2026-09-13 21:58:32 -07:00
2026-09-13 21:58:32 -07:00
2026-09-09 21:50:31 -07:00
2026-09-11 00:19:57 -07:00
2026-09-11 00:19:57 -07:00
2026-09-14 10:42:38 -07:00
2026-09-14 14:59:03 -07:00
2026-09-07 16:44:26 -04:00
2026-08-31 23:35:08 -07:00
2026-08-31 23:35:08 -07:00
2026-08-31 23:35:08 -07:00
2026-08-31 23:35:08 -07:00
2026-09-07 16:44:26 -04:00
2026-08-02 15:53:06 -07:00
2026-07-10 13:48:10 -07:00
2026-08-31 23:35:08 -07:00
2026-09-03 15:19:26 -07:00
2026-08-31 23:35:08 -07:00
2026-06-28 01:20:00 -07:00
2026-08-08 19:06:50 -07:00
2026-09-03 15:19:26 -07:00
2026-09-03 15:19:26 -07:00
2026-06-17 22:52:12 -07:00
2026-06-17 22:52:12 -07:00
2026-08-16 17:00:49 -07:00
2026-08-16 17:00:49 -07:00
2026-08-16 17:00:49 -07:00
2026-08-16 17:00:49 -07:00
2026-08-13 22:48:24 -07:00
2026-07-23 18:35:31 -07:00
2026-08-13 22:48:24 -07:00
2026-09-16 21:24:31 -04:00
2026-09-16 21:24:31 -04:00
2026-09-07 22:47:26 -07:00
2026-08-13 22:48:24 -07:00
2026-08-13 22:48:24 -07:00
2026-08-13 22:48:24 -07:00
2026-06-17 22:52:12 -07:00
2026-08-13 22:48:24 -07:00
2026-08-13 22:48:24 -07:00
2026-08-31 23:35:08 -07:00
2026-07-19 23:42:31 -07:00
2026-08-13 22:48:24 -07:00
2026-08-11 01:06:03 -07:00
2026-08-13 22:48:24 -07:00
2026-08-13 22:48:24 -07:00
2026-08-13 22:48:24 -07:00
2026-08-02 15:53:06 -07:00
2026-09-16 21:24:31 -04:00
2026-09-16 21:24:31 -04:00
2026-07-10 13:48:10 -07:00
2026-07-10 13:48:10 -07:00
2026-09-16 21:24:31 -04:00
2026-09-17 12:40:18 -04:00
2026-07-14 19:36:47 -07:00
2026-07-14 19:36:47 -07:00
2026-07-20 11:11:23 -07:00
2026-07-20 11:11:23 -07:00
2026-09-17 12:40:18 -04:00
2026-07-09 19:23:36 -07:00
2026-09-13 13:46:57 -07:00
2026-09-17 10:06:11 -07:00
2026-08-04 19:47:39 -07:00
2026-06-12 11:09:08 -07:00
2026-06-12 11:09:08 -07:00
2026-07-11 02:13:15 -07:00
2026-08-30 16:59:55 -07:00
2026-08-09 18:31:00 -07:00
2026-07-30 12:58:24 -07:00
2026-08-09 18:31:00 -07:00
2026-09-16 21:24:31 -04:00
2026-08-09 18:31:00 -07:00
2026-08-04 19:47:39 -07:00
2026-08-09 18:31:00 -07:00
2026-07-16 13:26:15 -07:00
2026-09-11 00:19:57 -07:00
2026-08-09 18:31:00 -07:00
2026-07-17 00:34:46 -07:00
2026-09-15 19:16:45 -04:00
2026-08-09 18:31:00 -07:00
2026-09-16 13:32:09 -04:00
2026-08-09 18:31:00 -07:00
2026-08-04 19:47:39 -07:00
2026-09-15 19:16:45 -04:00
2026-09-15 19:16:45 -04:00
2026-08-13 22:48:24 -07:00
2026-09-16 21:24:31 -04:00
2026-06-17 22:52:12 -07:00
2026-09-03 15:19:26 -07:00
2026-09-15 19:16:45 -04:00
2026-07-02 02:31:19 -07:00
2026-09-03 15:19:26 -07:00
2026-09-08 14:48:57 -04:00
2026-08-09 19:25:28 -07:00
2026-08-09 19:25:28 -07:00
2026-08-09 19:25:28 -07:00
2026-07-26 22:08:38 -07:00
2026-09-14 14:59:03 -07:00
2026-09-14 14:59:03 -07:00
2026-08-26 17:02:09 -07:00
2026-08-17 01:11:24 -07:00
2026-08-30 16:59:55 -07:00
2026-08-30 16:59:55 -07:00
2026-09-15 21:31:05 -04:00
2026-09-16 21:24:31 -04:00
2026-09-13 13:46:57 -07:00
2026-09-04 12:16:52 -07:00
2026-09-03 15:19:26 -07:00
2026-09-10 14:32:50 -07:00
2026-09-10 14:32:50 -07:00
2026-07-30 11:08:56 -07:00
2026-08-25 15:47:40 -07:00
2026-08-25 15:47:40 -07:00
2026-08-26 19:17:31 -07:00
2026-08-26 19:17:31 -07:00
2026-08-05 18:06:36 -07:00
2026-08-09 19:25:28 -07:00
2026-08-09 18:31:00 -07:00
2026-09-15 19:16:45 -04:00
2026-08-09 18:31:00 -07:00
2026-07-26 22:08:38 -07:00
2026-09-14 14:59:03 -07:00
2026-09-06 21:17:00 -07:00
2026-08-10 20:03:48 -07:00
2026-09-06 21:17:00 -07:00
2026-08-25 15:06:47 -07:00
2026-09-16 01:59:55 -04:00
2026-09-08 14:48:57 -04:00
2026-09-15 19:16:45 -04:00
2026-08-04 12:36:07 -07:00
2026-09-13 14:58:02 -07:00
2026-08-13 00:07:28 -07:00
2026-08-13 00:07:28 -07:00
2026-09-10 14:32:50 -07:00
2026-09-11 00:19:57 -07:00
2026-09-11 00:19:57 -07:00
2026-07-20 18:55:45 -07:00
2026-09-15 14:29:15 -04:00
2026-06-17 22:52:12 -07:00
2026-06-27 18:34:58 -07:00
2026-09-15 14:29:15 -04:00
2026-09-15 14:29:15 -04:00
2026-07-09 19:23:36 -07:00
2026-09-16 21:24:31 -04:00
2026-07-20 03:18:35 -07:00
2026-09-15 14:29:15 -04:00
2026-08-30 16:59:55 -07:00
2026-08-30 16:59:55 -07:00
2026-09-15 21:12:33 -04:00
2026-09-03 15:19:26 -07:00
2026-08-31 23:35:08 -07:00
2026-09-15 19:16:45 -04:00
2026-09-16 21:24:31 -04:00
2026-09-12 01:03:57 -04:00
2026-09-16 21:24:31 -04:00
2026-09-16 21:24:31 -04:00
2026-09-14 14:59:03 -07:00
2026-09-03 15:19:26 -07:00
2026-09-16 22:42:40 -07:00
2026-09-03 15:19:26 -07:00
2026-09-13 13:46:57 -07:00
2026-08-31 23:35:08 -07:00
2026-09-03 18:32:53 -07:00
2026-09-16 21:24:31 -04:00
2026-09-14 14:59:03 -07:00
2026-08-31 23:35:08 -07:00
2026-08-31 23:35:08 -07:00
2026-09-07 16:44:26 -04:00
2026-09-03 15:19:26 -07:00
2026-09-16 19:39:53 -04:00
2026-09-03 15:19:26 -07:00
2026-08-31 23:35:08 -07:00
2026-09-14 14:59:03 -07:00
2026-09-03 15:19:26 -07:00
2026-07-26 22:08:38 -07:00
2026-08-29 21:18:28 -07:00
2026-08-29 21:18:28 -07:00
2026-09-16 22:42:40 -07:00
2026-09-16 22:42:40 -07:00
2026-09-16 01:59:55 -04:00
2026-09-16 21:24:31 -04:00
2026-09-06 00:08:27 -07:00
2026-09-15 21:12:33 -04:00
2026-09-16 19:39:53 -04:00
2026-09-07 16:44:26 -04:00
2026-09-03 18:32:53 -07:00
2026-08-31 23:35:08 -07:00
2026-08-09 18:31:00 -07:00
2026-07-17 00:34:46 -07:00
2026-09-13 21:58:32 -07:00
2026-09-13 21:58:32 -07:00
2026-09-14 14:59:03 -07:00
2026-09-13 13:46:57 -07:00
2026-09-13 13:46:57 -07:00
2026-09-14 14:59:03 -07:00
2026-09-10 14:32:50 -07:00
2026-09-10 14:32:50 -07:00
2026-09-16 15:54:04 -07:00
2026-09-10 20:50:40 -07:00
2026-09-13 13:46:57 -07:00
2026-09-06 11:57:21 -07:00
2026-09-06 11:57:21 -07:00
2026-09-13 13:46:57 -07:00
2026-09-11 00:19:57 -07:00
2026-08-29 21:18:28 -07:00
2026-08-29 21:18:28 -07:00
2026-09-15 21:12:33 -04:00
2026-08-09 18:30:44 -07:00
2026-09-12 01:03:57 -04:00
2026-09-12 01:03:57 -04:00
2026-08-04 16:06:37 -07:00
2026-09-13 17:53:58 -04:00
2026-08-13 22:48:24 -07:00
2026-09-16 21:24:31 -04:00
2026-08-09 18:31:00 -07:00
2026-07-02 23:22:30 -07:00
2026-08-09 18:31:00 -07:00
2026-07-16 13:26:15 -07:00
2026-06-20 16:40:34 -07:00
2026-06-20 16:40:34 -07:00
2026-06-09 17:55:20 -07:00