Record workspace draft context repair QA

This commit is contained in:
Mohamed Boudra
2026-09-09 19:16:05 +02:00
parent 678aef4c5d
commit 3f4fb2e67a
8 changed files with 278 additions and 1 deletions
+18 -1
View File
@@ -2,7 +2,8 @@
Contribution: Christoph Leiter's [PR #2986](https://github.com/getpaseo/paseo/pull/2986).
Baseline: current main `433e67b18b7964a92d593bdc78c518143accfc8b`.
Verified implementation: `9457bb6f4053b6ab36e7eabcae0a2902176635c8`.
Original recorded implementation: `9457bb6f4053b6ab36e7eabcae0a2902176635c8`.
Latest verified implementation: `1b96fa4fdcf147f7d412f210ff45170a9112da8d`.
These are recorded Chromium interactions with the real Expo app and isolated Linux daemons.
Workspace registry updates, git worktree creation, uploaded files, and shell terminals are real.
@@ -32,6 +33,22 @@ then opening the new workspace reveals `captured: Hello from the navigation guar
![Chosen workspace remains active](focus-preserved.png)
![New terminal has received the submitted prompt](terminal-started.png)
## Context ownership repair verification
The latest head also preserves a newer fork draft's setup and chat-history context,
including context-only edits that do not change the text version. Cleanup captures
ownership before workspace creation begins. A regression using the previous head's
background helper fails; all seven cleanup tests pass on the repair.
All ten browser journeys were rerun together and recorded on this repair:
[complete results](context-e2e.txt), [newer-draft recording](after-context-repair-newer-draft.webm).
These recordings repeat the real-daemon method and platform/provider limitations above.
The fork context race is verified through the real draft stores in the focused unit test;
the browser newer-draft journey covers text preservation.
[Context regression before](context-red.txt), [after](context-green.txt),
[typecheck](context-typecheck.txt), [lint](context-lint.txt), [format](context-format.txt).
## Results
- Current-main baseline: both original local journeys fail on the wrong final route.
Binary file not shown.
+85
View File
@@ -0,0 +1,85 @@
> @getpaseo/app@0.8.0-beta.1 test:e2e
> playwright test --project=browser e2e/browser/new-workspace-navigation-guard.spec.ts --retries=0 --output=../../.dev/qa-2986/context-fix-results
(node:2099649) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2099649) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
[metro] (node:2100598) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
[metro] (Use `node --trace-warnings ...` to show where the warning was created)
[metro] Starting project at <checkout>/packages/app
[metro] Using src/app as the root directory for Expo Router.
[metro] Experimental Expo Autolinking module resolver is enabled.
[metro] React Compiler enabled
[metro] Metro is running in CI mode, reloads are disabled. Remove CI=true to enable watch mode.
[metro] Starting Metro Bundler
[metro] Waiting on http://localhost:45237
[metro] Logs for your project will appear below.
[metro] | (node:2102687) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
[metro] | (Use `node --trace-warnings ...` to show where the warning was created)
[metro] Web packages/app/index.ts ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░ 97.6% (5002/5062)
[metro] Web Bundled 2609ms packages/app/index.ts (5129 modules)
[e2e] Metro warmed on port 45237
Running 10 tests using 1 worker
(node:2104797) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2104797) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
[e2e] Worker 0 daemon started on port 38113, home: <checkout>/.dev/qa-2986/context-fix/worker-0
[metro] Web packages/app/index.ts ░░░░░░░░░░░░░░░░ 0.0% (0/1)
[metro] Web Bundled 175ms packages/app/index.ts (1 module)
[metro] LOG [web] Logs will appear in the browser console
[metro] Web Bundled 52ms packages/app/src/attachments/web/indexeddb-attachment-store.ts (1 module)
✓ 1 [browser] › e2e/browser/new-workspace-navigation-guard.spec.ts:8:9 › Delayed workspace creation › chat: keeps the workspace chosen during creation (14.4s)
[metro] Web packages/app/index.ts ░░░░░░░░░░░░░░░░ 0.0% (0/1)
[metro] Web Bundled 192ms packages/app/index.ts (1 module)
[metro] Web Bundled 5ms packages/app/src/attachments/web/indexeddb-attachment-store.ts (1 module)
[metro] LOG [web] Logs will appear in the browser console
✓ 2 [browser] › e2e/browser/new-workspace-navigation-guard.spec.ts:11:9 › Delayed workspace creation › worktree chat: keeps the workspace chosen during creation (14.3s)
[metro] Web packages/app/index.ts ░░░░░░░░░░░░░░░░ 0.0% (0/1)
[metro] Web Bundled 192ms packages/app/index.ts (1 module)
[metro] Web Bundled 11ms packages/app/src/attachments/web/indexeddb-attachment-store.ts (1 module)
[metro] LOG [web] Logs will appear in the browser console
✓ 3 [browser] › e2e/browser/new-workspace-navigation-guard.spec.ts:14:9 › Delayed workspace creation › chat: opens the created workspace when the user stays (13.7s)
[metro] Web packages/app/index.ts ░░░░░░░░░░░░░░░░ 0.0% (0/1)
[metro] Web Bundled 343ms packages/app/index.ts (1 module)
[metro] Web Bundled 6ms packages/app/src/attachments/web/indexeddb-attachment-store.ts (1 module)
[metro] LOG [web] Logs will appear in the browser console
✓ 4 [browser] › e2e/browser/new-workspace-navigation-guard.spec.ts:8:9 › Delayed workspace creation › terminal: keeps the workspace chosen during creation (15.4s)
[metro] Web packages/app/index.ts ░░░░░░░░░░░░░░░░ 0.0% (0/1)
[metro] Web Bundled 230ms packages/app/index.ts (1 module)
[metro] Web Bundled 7ms packages/app/src/attachments/web/indexeddb-attachment-store.ts (1 module)
[metro] LOG [web] Logs will appear in the browser console
✓ 5 [browser] › e2e/browser/new-workspace-navigation-guard.spec.ts:11:9 › Delayed workspace creation › worktree terminal: keeps the workspace chosen during creation (14.0s)
[metro] Web packages/app/index.ts ░░░░░░░░░░░░░░░░ 0.0% (0/1)
[metro] Web Bundled 171ms packages/app/index.ts (1 module)
[metro] Web Bundled 5ms packages/app/src/attachments/web/indexeddb-attachment-store.ts (1 module)
[metro] LOG [web] Logs will appear in the browser console
✓ 6 [browser] › e2e/browser/new-workspace-navigation-guard.spec.ts:14:9 › Delayed workspace creation › terminal: opens the created workspace when the user stays (12.6s)
[metro] Web packages/app/index.ts ░░░░░░░░░░░░░░░░ 0.0% (0/1)
[metro] Web Bundled 214ms packages/app/index.ts (1 module)
[metro] Web Bundled 8ms packages/app/src/attachments/web/indexeddb-attachment-store.ts (1 module)
[metro] LOG [web] Logs will appear in the browser console
✓ 7 [browser] › e2e/browser/new-workspace-navigation-guard.spec.ts:8:9 › Delayed workspace creation › empty: keeps the workspace chosen during creation (13.4s)
[metro] Web packages/app/index.ts ░░░░░░░░░░░░░░░░ 0.0% (0/1)
[metro] Web Bundled 225ms packages/app/index.ts (1 module)
[metro] Web Bundled 7ms packages/app/src/attachments/web/indexeddb-attachment-store.ts (1 module)
[metro] LOG [web] Logs will appear in the browser console
✓ 8 [browser] › e2e/browser/new-workspace-navigation-guard.spec.ts:11:9 › Delayed workspace creation › worktree empty: keeps the workspace chosen during creation (13.7s)
[metro] Web packages/app/index.ts ░░░░░░░░░░░░░░░░ 0.0% (0/1)
[metro] Web Bundled 179ms packages/app/index.ts (1 module)
[metro] Web Bundled 5ms packages/app/src/attachments/web/indexeddb-attachment-store.ts (1 module)
[metro] LOG [web] Logs will appear in the browser console
✓ 9 [browser] › e2e/browser/new-workspace-navigation-guard.spec.ts:14:9 › Delayed workspace creation › empty: opens the created workspace when the user stays (12.9s)
[metro] Web packages/app/index.ts ░░░░░░░░░░░░░░░░ 0.0% (0/1)
[metro] Web Bundled 282ms packages/app/index.ts (1 module)
[metro] Web Bundled 5ms packages/app/src/attachments/web/indexeddb-attachment-store.ts (1 module)
[metro] LOG [web] Logs will appear in the browser console
✓ 10 [browser] › e2e/browser/new-workspace-navigation-guard.spec.ts:19:7 › Delayed workspace creation › preserves a newer draft opened while creation is pending (15.9s)
[e2e] Worker 0 daemon stopped
[e2e] Metro stopped
10 passed (2.5m)
+39
View File
@@ -0,0 +1,39 @@
> paseo@0.8.0-beta.1 format
> oxfmt .
(node:2132879) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2132992) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2132926) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2133009) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2132958) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2132952) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2132991) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2132920) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2132939) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2132928) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2132986) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2132927) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2132945) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2133003) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2132990) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2132965) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
(node:2132919) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
Finished in 1933ms on 4424 files using 16 threads.
+17
View File
@@ -0,0 +1,17 @@
> @getpaseo/app@0.8.0-beta.1 test
> vitest run src/screens/new-workspace/background-handoff.test.ts --bail=1
(node:2135683) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
RUN v4.1.7 <checkout>/packages/app
(node:2135794) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
Test Files 1 passed (1)
Tests 7 passed (7)
Start at 19:13:25
Duration 1.22s (transform 773ms, setup 33ms, import 1.07s, tests 8ms, environment 0ms)
+6
View File
@@ -0,0 +1,6 @@
> paseo@0.8.0-beta.1 lint
> oxlint
Found 0 warnings and 0 errors.
Finished in 1.3s on 4146 files with 177 rules using 16 threads.
+54
View File
@@ -0,0 +1,54 @@
> @getpaseo/app@0.8.0-beta.1 test
> vitest run src/screens/new-workspace/background-handoff.baseline.test.ts --bail=1
(node:2177266) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
RUN v4.1.7 <checkout>/packages/app
(node:2177513) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
stderr | src/screens/new-workspace/background-handoff.baseline.test.ts
[DraftStore] Failed to persist draft checkpoint ReferenceError: window is not defined
at <checkout>/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.js:69:52
at <checkout>/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.js:39:21
at new Promise (<anonymous>)
at createPromise (<checkout>/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.js:37:10)
at Object.setItem (<checkout>/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.js:69:12)
at Object.setItem (<checkout>/packages/app/src/storage/validated-persist-storage.ts:39:28)
at flush (<checkout>/packages/app/src/stores/draft-store/persistence.ts:73:21)
at Object.setItem (<checkout>/packages/app/src/stores/draft-store/persistence.ts:85:16)
at setItem (<checkout>/node_modules/zustand/esm/middleware.mjs:358:20)
at Function.api.setState (<checkout>/node_modules/zustand/esm/middleware.mjs:366:12)
❯ |unit| src/screens/new-workspace/background-handoff.baseline.test.ts (1 test | 1 failed) 7ms
× preserves context added to a newer draft without editing its text 3ms
⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯
FAIL |unit| src/screens/new-workspace/background-handoff.baseline.test.ts > createWorkspaceAgentInBackground > preserves context added to a newer draft without editing its text
AssertionError: Target cannot be null or undefined.
❯ src/screens/new-workspace/background-handoff.baseline.test.ts:70:83
68| });
69| });
70| expect(useWorkspaceAttachmentsStore.getState().attachmentsByScope[…
| ^
71| expect(useWorkspaceDraftSubmissionStore.getState().setupByDraftId[…
72| "/work/new-repo",
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯
Test Files 1 failed (1)
Tests 1 failed (1)
Start at 19:14:12
Duration 1.14s (transform 716ms, setup 40ms, import 996ms, tests 7ms, environment 0ms)
npm error Lifecycle script `test` failed with error:
npm error code 1
npm error path <checkout>/packages/app
npm error workspace @getpaseo/app@0.8.0-beta.1
npm error location <checkout>/packages/app
npm error command failed
npm error command sh -c vitest run src/screens/new-workspace/background-handoff.baseline.test.ts --bail=1
+59
View File
@@ -0,0 +1,59 @@
> paseo@0.8.0-beta.1 typecheck
> npm run typecheck --workspaces --if-present
> @getpaseo/expo-two-way-audio@0.8.0-beta.1 typecheck
> tsgo --noEmit
> @getpaseo/highlight@0.8.0-beta.1 typecheck
> tsgo --noEmit
> @getpaseo/plugin@0.8.0-beta.1 typecheck
> tsgo --noEmit && tsgo -p tsconfig.examples.json --noEmit
> @getpaseo/protocol@0.8.0-beta.1 pretypecheck
> npm run generate:validators
> @getpaseo/protocol@0.8.0-beta.1 generate:validators
> node scripts/generate-validation-aot.mjs
(node:2135571) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
(Use `node --trace-warnings ...` to show where the warning was created)
generated src/generated/validation/ws-outbound.aot.ts from codegen/ws-outbound.compile.ts (WSOutboundMessageSchema)
> @getpaseo/protocol@0.8.0-beta.1 typecheck
> tsgo --noEmit
> @getpaseo/client@0.8.0-beta.1 typecheck
> tsgo --noEmit
> @getpaseo/server@0.8.0-beta.1 typecheck
> tsgo -p tsconfig.server.typecheck.json --noEmit
> @getpaseo/app@0.8.0-beta.1 typecheck
> tsgo --noEmit
> @getpaseo/relay@0.8.0-beta.1 typecheck
> tsgo --noEmit
> @getpaseo/website@0.8.0-beta.1 typecheck
> tsgo --noEmit
> @getpaseo/desktop@0.8.0-beta.1 typecheck
> tsgo --noEmit -p tsconfig.json
> @getpaseo/cli@0.8.0-beta.1 typecheck
> tsgo --noEmit