=== android-install-base.log === $ node scripts/mobile-native-client.ts ensure android --session azure-proof-36148-android --metro '[URL redacted] ⊘ cache disabled Using cached client android[path redacted] Installing into agent-device session azure-proof-36148-android... Installed: com.t3tools.t3code.dev Opened: com.t3tools.t3code.dev Session state: [path redacted] Leased device: Pixel 9, 36, virtual Installed into session azure-proof-36148-android in 29s (local). {"status":"installed","source":"local","fingerprint":"[long value redacted]","session":"azure-proof-36148-android","seconds":29} === android-install-head.log === $ node scripts/mobile-native-client.ts ensure android --session azure-proof-36148-android --metro '[URL redacted] ⊘ cache disabled Using cached client android[path redacted] Installing into agent-device session azure-proof-36148-android... Installed: com.t3tools.t3code.dev Opened: com.t3tools.t3code.dev Session state: [path redacted] Leased device: Pixel 9, 36, virtual Installed into session azure-proof-36148-android in 39s (local). {"status":"installed","source":"local","fingerprint":"[long value redacted]","session":"azure-proof-36148-android","seconds":39} === android-prepare.log === $ node scripts/mobile-native-client.ts ensure android --prepare ⊘ cache disabled Using cached client android[path redacted] Client ready for android (local); lease a device and install. {"status":"ready","source":"local","fingerprint":"[long value redacted]"} === base-metro.log === ~[path redacted]$ APP_VARIANT=development expo start --dev-client --scheme t3code-dev --lan --port 8081 ⊘ cache disabled Starting project at [path redacted] ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded React Compiler enabled Expo Autolinking module resolution enabled Starting Metro Bundler ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded Skipping TypeScript setup: EXPO_NO_TYPESCRIPT_SETUP is enabled. Waiting on [URL redacted] An update for expo is available: 58.0.23 → ~58.0.25 26 other packages may need updating. Run npx expo install --check for details. Logs for your project will appear below. ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded | (node:294969) 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) WARN Attempted to import the module "[path redacted]" which is not listed in the "exports" of "[path redacted]" under the requested subpath "./crypto.js". Falling back to file-based resolution. Consider updating the call site or asking the package maintainer(s) to expose this API. Android Bundled 2846ms apps[path redacted] (5044 modules) WARN Require cycle: ..[path redacted] -> ..[path redacted] -> ..[path redacted] Require cycles are allowed, but can result in uninitialized values. Consider refactoring to remove the need for a cycle. LOG 📦 PDFCompressor: Native streaming compression available WARN statusBarTranslucent value is ignored when using react-native-edge-to-edge Android Bundled 1449ms node_modules[path redacted] (859 modules) Android Bundled 2464ms node_modules[path redacted] (933 modules) WARN [Reanimated] Dependencies should only be used on the web and are always ignored on native. Check DevTools to see the offending code. Android Bundled 1099ms apps[path redacted] (911 modules) Android Bundled 1289ms apps[path redacted] (1051 modules) Android Bundled 2101ms node_modules[path redacted][long value redacted][path redacted] (907 modules) WARN [Reanimated] Dependencies should only be used on the web and are always ignored on native. Check DevTools to see the offending code. Android Bundled 1388ms node_modules[path redacted][long value redacted][path redacted] (911 modules) ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded WARN Attempted to import the module "[path redacted]" which is not listed in the "exports" of "[path redacted]" under the requested subpath "./crypto.js". Falling back to file-based resolution. Consider updating the call site or asking the package maintainer(s) to expose this API. iOS Bundled 2415ms apps[path redacted] (4768 modules) iOS Bundled 1265ms apps[path redacted] (1071 modules) iOS Bundled 1249ms node_modules[path redacted] (855 modules) iOS Bundled 2202ms node_modules[path redacted] (932 modules) WARN Require cycle: ..[path redacted] -> ..[path redacted] -> ..[path redacted] Require cycles are allowed, but can result in uninitialized values. Consider refactoring to remove the need for a cycle. WARN [Reanimated] Dependencies should only be used on the web and are always ignored on native. Check DevTools to see the offending code. iOS Bundled 1074ms apps[path redacted] (910 modules) iOS Bundled 1000ms apps[path redacted] (1071 modules) WARN SafeAreaView has been deprecated and will be removed in a future release. Please use 'react-native-safe-area-context' instead. See [URL redacted] iOS Bundled 1139ms node_modules[path redacted][long value redacted][path redacted] (911 modules) WARN 🟡 Failed to load available audio tracks for [URL redacted] Error: Error Domain=CoreMediaErrorDomain Code=-12667 "HTTP 203: (unhandled)" UserInfo={NSDescription=HTTP 203: (unhandled), NSURL=[URL redacted] AVErrorFailedDependenciesKey=( WARN 🟡 "assetProperty_AssetType", WARN 🟡 "assetProperty_Tracks", WARN 🟡 MediaSelectionArray, WARN 🟡 ExtendedMediaSelectionArray, WARN 🟡 "assetProperty_TrackReferences", WARN 🟡 "assetProperty_AlternateTrackGroups", WARN 🟡 LocalizedMSODisplayNames, WARN 🟡 CustomMediaSelectionScheme WARN 🟡 )} WARN 🟡 Failed to load available subtitle tracks for [URL redacted] Error: Error Domain=CoreMediaErrorDomain Code=-12667 "HTTP 203: (unhandled)" UserInfo={NSDescription=HTTP 203: (unhandled), NSURL=[URL redacted] AVErrorFailedDependenciesKey=( WARN 🟡 "assetProperty_AssetType", WARN 🟡 "assetProperty_Tracks", WARN 🟡 MediaSelectionArray, WARN 🟡 ExtendedMediaSelectionArray, WARN 🟡 "assetProperty_TrackReferences", WARN 🟡 "assetProperty_AlternateTrackGroups", WARN 🟡 LocalizedMSODisplayNames, WARN 🟡 CustomMediaSelectionScheme WARN 🟡 )} WARN 🟡 Failed to load available audio tracks for [URL redacted] Error: Error Domain=CoreMediaErrorDomain Code=-12667 "HTTP 203: (unhandled)" UserInfo={NSDescription=HTTP 203: (unhandled), NSURL=[URL redacted] AVErrorFailedDependenciesKey=( WARN 🟡 "assetProperty_AssetType", WARN 🟡 "assetProperty_Tracks", WARN 🟡 MediaSelectionArray, WARN 🟡 ExtendedMediaSelectionArray, WARN 🟡 "assetProperty_TrackReferences", WARN 🟡 "assetProperty_AlternateTrackGroups", WARN 🟡 LocalizedMSODisplayNames, WARN 🟡 CustomMediaSelectionScheme WARN 🟡 )} WARN 🟡 Failed to load available subtitle tracks for [URL redacted] Error: Error Domain=CoreMediaErrorDomain Code=-12667 "HTTP 203: (unhandled)" UserInfo={NSDescription=HTTP 203: (unhandled), NSURL=[URL redacted] AVErrorFailedDependenciesKey=( WARN 🟡 "assetProperty_AssetType", WARN 🟡 "assetProperty_Tracks", WARN 🟡 MediaSelectionArray, WARN 🟡 ExtendedMediaSelectionArray, WARN 🟡 "assetProperty_TrackReferences", WARN 🟡 "assetProperty_AlternateTrackGroups", WARN 🟡 LocalizedMSODisplayNames, WARN 🟡 CustomMediaSelectionScheme WARN 🟡 )} === base-server.log === $ node scripts/dev-runner.ts dev --host [IP redacted] ⊘ cache disabled [09:09:18.642] INFO (#1): [dev-runner] mode=dev source=worktree [path redacted] serverPort=16416 webPort=8376 baseDir=[path redacted] [warm-dep-cache] web dependency cache is warm ~[path redacted]$ vp dev ⊘ cache disabled ~[path redacted]$ node --watch --watch-path=src --watch-path=..[path redacted] --watch-path=package.json src/bin.ts ⊘ cache disabled VITE+ v1.4.0 ready in 828 ms ➜ Local: [URL redacted] ➜ press h + enter to show help [09:09:26.769] INFO (#33): Agent scopes are on { slice: 'app-t3code-agents.slice', high: 10326347776, max: 12576599040, oomPolicy: true } [09:09:26.893] INFO (#91): Running database migrations [09:09:27.144] INFO (#91): Migrations ran successfully migrations: [ '1_OrchestrationEvents', '2_OrchestrationCommandReceipts', '3_CheckpointDiffBlobs', '4_ProviderSessionRuntime', '5_Projections', '[long value redacted]', '[long value redacted]', '8_ProjectionThreadActivitySequence', '9_ProviderSessionRuntimeMode', '10_ProjectionThreadsRuntimeMode', '[long value redacted]', '12_ProjectionThreadsInteractionMode', '13_ProjectionThreadProposedPlans', '[long value redacted]', '[long value redacted]', '16_CanonicalizeModelSelections', '17_ProjectionThreadsArchivedAt', '18_ProjectionThreadsArchivedAtIndex', '19_ProjectionSnapshotLookupIndexes', '20_AuthAccessManagement', '21_AuthSessionClientMetadata', '22_AuthSessionLastConnectedAt', '23_ProjectionThreadShellSummary', '[long value redacted]', '[long value redacted]', '[long value redacted]', '27_ProviderSessionRuntimeInstanceId', '[long value redacted]', '[long value redacted]', '[long value redacted]', [credential-bearing line redacted] '32_AuthPairingProofKeyThumbprint', '33_ProjectionThreadsSettled', '34_ProjectionThreadsSnoozed', '[long value redacted]', '36_ProjectionThreadsPinned', '37_ProjectionTurnsKeysetIndex', '38_ProjectionThreadsPinOrderKey', '[long value redacted]', '40_ProjectionProjectFaviconPath', '41_AuthSessionClientConnection', '[long value redacted]', '43_ProjectionThreadsUnsettledAt', '[long value redacted]', '45_ProjectionProjectsAutoPull', '[long value redacted]', '47_ProjectionProjectIcon', '[long value redacted]', '49_ProjectionThreadsActiveOrderKey', '50_ProjectionThreadPullRequests', '51_ProjectionThreadMessageContext', '52_ProjectionThreadTitleState', '53_PullRequestFilesViewed', '[long value redacted]', '55_OrchestrationV2', '56_RemoveRedundantProjectionIndexes', '57_ScheduledTaskWebhooks', '58_WebhookRelayDeliveries', '59_McpAppModelContext', '60_ThreadSnapshotWindowIndexes', '61_PullRequestReviewGuides', '62_ThreadFailureLookupIndex', '63_DropUnusedV1Projections', '[long value redacted]', '65_CodexUsageNativeTurnIndex', '66_RepairClientSettlementTimestamps', '67_WebhookDedupe', '68_ShellStopRequestIndex', '69_ThreadMessageSearch', '70_PeerLinks', '71_PeerLinkFence', '72_WaitingLinkRequestIndex', '73_ActiveTurnItemIndexes', '[long value redacted]', '75_SubagentDeliveryState', '76_ProjectionProjectsPinArchive', '77_RepairBooleanSettledOverride', '[long value redacted]', '79_DelegatedRecoveryIndexes', '80_ScheduledTaskThreadMode', '81_ProjectionMessageSearchText', '82_TurnItemConversationIndex', '83_CommandReadIndexes', '84_LastExecutedRunIndex', '85_TurnItemCounts', '86_QueuedTurnInputIndex', '87_ProjectionProjectsCustomTitle', '88_TurnItemTypeStatusIndex', '89_ShellThreadReadIndexes', '90_AuthConnectDevices', '91_AuthConnectDeniedRequests' ] [09:09:27.156] WARN (#110): process group metrics are not exported: sample failed ResourceTelemetryRefreshFailed: Resource telemetry operation 'refresh' failed. at file://[path redacted] at file://[path redacted] at Array.map () at file://[path redacted] at file://[path redacted] { [cause]: NativeTelemetryUnavailable: Resource monitor is unavailable: sidecar is not running at file://[path redacted] } operation: refresh [09:09:27.654] INFO (#607): Listening on [URL redacted] [09:09:27.666] INFO (#604): agent activity publishing standby; waiting for T3 Connect link reconciliation [09:09:27.710] WARN (#961): Threads without a project are off because the T3 home [path redacted] is inside the Git repository [path redacted] If that repository was created by mistake, move [path redacted] out of the way; otherwise point T3CODE_HOME (or --base-dir) at a folder outside it. Then restart T3 Code. [09:09:27.777] INFO (#604): V2 orchestration recovery completed { terminalizedRuns: 0, stoppedSessions: 0, closedRequests: 0, retiredEffects: 0, requeuedEffects: 0 } [credential-bearing line redacted] [credential-bearing line redacted] [09:09:37.235] INFO (#1479) http.span=10ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:09:37.276] INFO (#1493) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:09:37.305] INFO (#1503) http.span=16ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:10:54.906] INFO (#1948) http.span=4ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:10:55.119] INFO (#1951) http.span=9ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:10:55.297] INFO (#1954) http.span=2ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:10:55.376] INFO (#1955) http.span=4ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:10:55.492] INFO (#1963) http.span=33ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:10:55.929] INFO (#2119) http.span=2ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:10:56.116] INFO (#2233) http.span=2ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:10:56.375] INFO (#2412) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:13:09.740] INFO (#3391) http.span=5ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:13:09.763] INFO (#3408) http.span=5ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:13:09.827] INFO (#3423) http.span=55ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:16:28.707] INFO (#4662) http.span=5102ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:16:29.269] INFO (#4823) http.span=37ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:16:29.529] INFO (#4821) http.span=306ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:20:36.291] INFO (#6430) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:20:36.517] INFO (#6435) http.span=7ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:20:36.874] INFO (#6438) http.span=4ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:20:37.501] INFO (#6442) http.span=4ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:20:37.785] INFO (#6445) http.span=7ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:20:38.540] INFO (#6652) http.span=11ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:20:38.806] INFO (#6661) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:20:38.853] INFO (#6674) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:20:40.433] INFO (#6909) http.span=186ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:22:29.300] INFO (#1958) http.span=693851ms: Sent HTTP response http.method: GET http.url: /ws http.status: 101 [09:23:02.770] INFO (#7872) http.span=264ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:23:04.789] INFO (#7819) http.span=2850ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:25:51.833] INFO (#6464) http.span=313889ms: Sent HTTP response http.method: GET http.url: /ws http.status: 101 [09:27:15.827] INFO (#9385) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:27:15.995] INFO (#9388) http.span=2ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:27:16.198] INFO (#9391) http.span=9ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:27:16.755] INFO (#9592) http.span=2ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:27:57.445] INFO (#9425) http.span=41114ms: InterruptError: All fibers interrupted without error at server.runServerCommand (file://[path redacted]) at server.runServerCommand (definition) (file://[path redacted]) at server.runDefaultServerCommand (file://[path redacted]) at server.runDefaultServerCommand (definition) (file://[path redacted]) { [cause]: InterruptCause: The fiber was interrupted by: at fiber (#10018) at server.runServerCommand (file://[path redacted]) at server.runServerCommand (definition) (file://[path redacted]) at server.runDefaultServerCommand (file://[path redacted]) at server.runDefaultServerCommand (definition) (file://[path redacted]) } http.method: GET http.url: /ws http.status: 503 [09:27:57.456] INFO (#27): V2 orchestration shutdown reconciliation completed { terminalizedRuns: 0, stoppedSessions: 0, closedRequests: 0, retiredEffects: 0, requeuedEffects: 0 } [09:27:57.460] WARN (#1234): keep-awake run event stream failed { cause: 'InterruptError: All fibers interrupted without error\n' + ' at serverActivation.forkParkedFiber (file://[path redacted])\n' + ' at serverActivation.forkParkedFiber (definition) (file://[path redacted])\n' + ' at server.runServerCommand (file://[path redacted])\n' + ' at server.runServerCommand (definition) (file://[path redacted])\n' + ' at server.runDefaultServerCommand (file://[path redacted])\n' + ' at server.runDefaultServerCommand (definition) (file://[path redacted]) {\n' + ' [cause]: InterruptCause: The fiber was interrupted by:\n' + ' at fiber (unknown)\n' + '}' } === head-metro.log === ~[path redacted]$ APP_VARIANT=development expo start --dev-client --scheme t3code-dev --lan --port 8082 ⊘ cache disabled Starting project at [path redacted] ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded React Compiler enabled Expo Autolinking module resolution enabled Starting Metro Bundler ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded Skipping TypeScript setup: EXPO_NO_TYPESCRIPT_SETUP is enabled. Waiting on [URL redacted] An update for expo is available: 58.0.23 → ~58.0.25 26 other packages may need updating. Run npx expo install --check for details. Logs for your project will appear below. ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded | (node:318864) 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) WARN Attempted to import the module "[path redacted]" which is not listed in the "exports" of "[path redacted]" under the requested subpath "./crypto.js". Falling back to file-based resolution. Consider updating the call site or asking the package maintainer(s) to expose this API. | (node:318864) 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:318864) 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) Android Bundled 1818ms apps[path redacted] (5045 modules) WARN Require cycle: ..[path redacted] -> ..[path redacted] -> ..[path redacted] Require cycles are allowed, but can result in uninitialized values. Consider refactoring to remove the need for a cycle. LOG 📦 PDFCompressor: Native streaming compression available WARN statusBarTranslucent value is ignored when using react-native-edge-to-edge Android Bundled 900ms node_modules[path redacted] (859 modules) Android Bundled 1793ms node_modules[path redacted] (933 modules) WARN [Reanimated] Dependencies should only be used on the web and are always ignored on native. Check DevTools to see the offending code. Android Bundled 706ms apps[path redacted] (911 modules) Android Bundled 679ms node_modules[path redacted][long value redacted][path redacted] (907 modules) Android Bundled 1286ms apps[path redacted] (1051 modules) Android Bundled 694ms node_modules[path redacted][long value redacted][path redacted] (911 modules) ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded ✅ Clerk iOS plugin loaded ✅ Clerk Android plugin loaded WARN Attempted to import the module "[path redacted]" which is not listed in the "exports" of "[path redacted]" under the requested subpath "./crypto.js". Falling back to file-based resolution. Consider updating the call site or asking the package maintainer(s) to expose this API. iOS Bundled 1200ms apps[path redacted] (4713 modules) iOS Bundled 1133ms apps[path redacted] (1071 modules) WARN Require cycle: ..[path redacted] -> ..[path redacted] -> ..[path redacted] Require cycles are allowed, but can result in uninitialized values. Consider refactoring to remove the need for a cycle. iOS Bundled 1369ms node_modules[path redacted] (855 modules) iOS Bundled 2537ms node_modules[path redacted] (932 modules) WARN [Reanimated] Dependencies should only be used on the web and are always ignored on native. Check DevTools to see the offending code. iOS Bundled 715ms apps[path redacted] (1071 modules) WARN SafeAreaView has been deprecated and will be removed in a future release. Please use 'react-native-safe-area-context' instead. See [URL redacted] iOS Bundled 1253ms node_modules[path redacted][long value redacted][path redacted] (911 modules) === head-server.log === $ node scripts/dev-runner.ts dev --host [IP redacted] ⊘ cache disabled [09:21:25.899] INFO (#1): [dev-runner] mode=dev source=worktree [path redacted] serverPort=16464 webPort=8424 baseDir=[path redacted] [warm-dep-cache] web dependency cache is warm ~[path redacted]$ vp dev ⊘ cache disabled ~[path redacted]$ node --watch --watch-path=src --watch-path=..[path redacted] --watch-path=package.json src/bin.ts ⊘ cache disabled VITE+ v1.4.0 ready in 798 ms ➜ Local: [URL redacted] ➜ press h + enter to show help [09:21:34.874] INFO (#33): Agent scopes are on { slice: 'app-t3code-agents.slice', high: 10326347776, max: 12576599040, oomPolicy: true } [09:21:35.085] INFO (#91): Running database migrations [09:21:35.499] INFO (#91): Migrations ran successfully migrations: [ '1_OrchestrationEvents', '2_OrchestrationCommandReceipts', '3_CheckpointDiffBlobs', '4_ProviderSessionRuntime', '5_Projections', '[long value redacted]', '[long value redacted]', '8_ProjectionThreadActivitySequence', '9_ProviderSessionRuntimeMode', '10_ProjectionThreadsRuntimeMode', '[long value redacted]', '12_ProjectionThreadsInteractionMode', '13_ProjectionThreadProposedPlans', '[long value redacted]', '[long value redacted]', '16_CanonicalizeModelSelections', '17_ProjectionThreadsArchivedAt', '18_ProjectionThreadsArchivedAtIndex', '19_ProjectionSnapshotLookupIndexes', '20_AuthAccessManagement', '21_AuthSessionClientMetadata', '22_AuthSessionLastConnectedAt', '23_ProjectionThreadShellSummary', '[long value redacted]', '[long value redacted]', '[long value redacted]', '27_ProviderSessionRuntimeInstanceId', '[long value redacted]', '[long value redacted]', '[long value redacted]', [credential-bearing line redacted] '32_AuthPairingProofKeyThumbprint', '33_ProjectionThreadsSettled', '34_ProjectionThreadsSnoozed', '[long value redacted]', '36_ProjectionThreadsPinned', '37_ProjectionTurnsKeysetIndex', '38_ProjectionThreadsPinOrderKey', '[long value redacted]', '40_ProjectionProjectFaviconPath', '41_AuthSessionClientConnection', '[long value redacted]', '43_ProjectionThreadsUnsettledAt', '[long value redacted]', '45_ProjectionProjectsAutoPull', '[long value redacted]', '47_ProjectionProjectIcon', '[long value redacted]', '49_ProjectionThreadsActiveOrderKey', '50_ProjectionThreadPullRequests', '51_ProjectionThreadMessageContext', '52_ProjectionThreadTitleState', '53_PullRequestFilesViewed', '[long value redacted]', '55_OrchestrationV2', '56_RemoveRedundantProjectionIndexes', '57_ScheduledTaskWebhooks', '58_WebhookRelayDeliveries', '59_McpAppModelContext', '60_ThreadSnapshotWindowIndexes', '61_PullRequestReviewGuides', '62_ThreadFailureLookupIndex', '63_DropUnusedV1Projections', '[long value redacted]', '65_CodexUsageNativeTurnIndex', '66_RepairClientSettlementTimestamps', '67_WebhookDedupe', '68_ShellStopRequestIndex', '69_ThreadMessageSearch', '70_PeerLinks', '71_PeerLinkFence', '72_WaitingLinkRequestIndex', '73_ActiveTurnItemIndexes', '[long value redacted]', '75_SubagentDeliveryState', '76_ProjectionProjectsPinArchive', '77_RepairBooleanSettledOverride', '[long value redacted]', '79_DelegatedRecoveryIndexes', '80_ScheduledTaskThreadMode', '81_ProjectionMessageSearchText', '82_TurnItemConversationIndex', '83_CommandReadIndexes', '84_LastExecutedRunIndex', '85_TurnItemCounts', '86_QueuedTurnInputIndex', '87_ProjectionProjectsCustomTitle', '88_TurnItemTypeStatusIndex', '89_ShellThreadReadIndexes', '90_AuthConnectDevices', '91_AuthConnectDeniedRequests' ] [09:21:35.511] WARN (#110): process group metrics are not exported: sample failed ResourceTelemetryRefreshFailed: Resource telemetry operation 'refresh' failed. at file://[path redacted] at file://[path redacted] at Array.map () at file://[path redacted] at file://[path redacted] { [cause]: NativeTelemetryUnavailable: Resource monitor is unavailable: sidecar is not running at file://[path redacted] } operation: refresh [09:21:36.181] INFO (#606): Listening on [URL redacted] [09:21:36.207] INFO (#603): agent activity publishing standby; waiting for T3 Connect link reconciliation [09:21:36.274] WARN (#965): Threads without a project are off because the T3 home [path redacted] is inside the Git repository [path redacted] If that repository was created by mistake, move [path redacted] out of the way; otherwise point T3CODE_HOME (or --base-dir) at a folder outside it. Then restart T3 Code. [09:21:36.388] INFO (#603): V2 orchestration recovery completed { terminalizedRuns: 0, stoppedSessions: 0, closedRequests: 0, retiredEffects: 0, requeuedEffects: 0 } [credential-bearing line redacted] [credential-bearing line redacted] [09:21:58.419] INFO (#1533) http.span=9ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:21:58.435] INFO (#1545) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:21:58.454] INFO (#1555) http.span=11ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:21:59.244] INFO (#1640) http.span=7ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:21:59.264] INFO (#1655) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:21:59.317] INFO (#1670) http.span=44ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:23:52.676] INFO (#2352) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:23:52.974] INFO (#2357) http.span=6ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:23:53.241] INFO (#2360) http.span=1ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:23:53.305] INFO (#2361) http.span=3ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:23:53.407] INFO (#2369) http.span=9ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:23:53.705] INFO (#2586) http.span=2ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:23:53.880] INFO (#2589) http.span=2ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:23:53.959] INFO (#2602) http.span=2ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:24:51.306] INFO (#3170) http.span=4488ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:24:51.840] INFO (#3317) http.span=290ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:24:51.842] INFO (#3327) http.span=247ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:24:53.044] INFO (#3324) http.span=1454ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:24:53.044] INFO (#3333) http.span=1440ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:24:54.376] INFO (#3374) http.span=1589ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:24:54.376] INFO (#3381) http.span=1435ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:24:54.399] INFO (#3400) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 206 [09:26:02.668] INFO (#3776) http.span=1631ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:26:02.688] INFO (#3796) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 206 [09:26:45.211] INFO (#4010) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 206 [09:27:58.653] INFO (#4542) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:27:58.814] INFO (#4545) http.span=4ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:27:59.009] INFO (#4548) http.span=5ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:27:59.167] INFO (#4549) http.span=4ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:27:59.337] INFO (#4558) http.span=7ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:27:59.911] INFO (#4728) http.span=8ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:28:00.094] INFO (#4731) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:28:00.105] INFO (#4734) http.span=4ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:31:38.859] INFO (#6260) http.span=277ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:31:39.953] INFO (#6251) http.span=1552ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:31:39.954] INFO (#6258) http.span=1373ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:32:24.036] INFO (#6771) http.span=4ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:32:24.037] INFO (#6774) http.span=2ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:32:24.297] INFO (#6769) http.span=268ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:32:26.601] INFO (#6724) http.span=3023ms: Sent HTTP response http.method: POST http.url: [path redacted] http.status: 200 [09:32:28.182] INFO (#6824) http.span=1498ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 206 [09:32:28.811] INFO (#6842) http.span=308ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 206 [09:32:28.821] INFO (#6848) http.span=2ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 206 [09:32:29.402] INFO (#6851) http.span=157ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 206 [09:33:00.099] INFO (#7040) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 206 [09:33:00.724] INFO (#7045) http.span=309ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 206 [09:33:00.730] INFO (#7049) http.span=3ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 206 [09:33:01.217] INFO (#7054) http.span=155ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 206 [09:35:16.733] INFO (#7984) http.span=1759ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:35:16.733] INFO (#7989) http.span=1756ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:35:17.343] INFO (#8012) http.span=43ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:39:26.381] INFO (#9966) http.span=1911ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:39:26.383] INFO (#9971) http.span=1902ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:39:27.577] INFO (#9999) http.span=607ms: Sent HTTP response http.method: GET http.url: [path redacted] http.status: 200 [09:40:24.592] INFO (#4593) http.span=745112ms: Sent HTTP response http.method: GET http.url: /ws http.status: 101 [09:40:30.696] INFO (#2364) http.span=997307ms: InterruptError: All fibers interrupted without error at server.runServerCommand (file://[path redacted]) at server.runServerCommand (definition) (file://[path redacted]) at server.runDefaultServerCommand (file://[path redacted]) at server.runDefaultServerCommand (definition) (file://[path redacted]) { [cause]: InterruptCause: The fiber was interrupted by: at fiber (#10386) at server.runServerCommand (file://[path redacted]) at server.runServerCommand (definition) (file://[path redacted]) at server.runDefaultServerCommand (file://[path redacted]) at server.runDefaultServerCommand (definition) (file://[path redacted]) } http.method: GET http.url: /ws http.status: 503 [09:40:30.715] INFO (#27): V2 orchestration shutdown reconciliation completed { terminalizedRuns: 0, stoppedSessions: 0, closedRequests: 0, retiredEffects: 0, requeuedEffects: 0 } [09:40:30.720] WARN (#1251): keep-awake run event stream failed { cause: 'InterruptError: All fibers interrupted without error\n' + ' at serverActivation.forkParkedFiber (file://[path redacted])\n' + ' at serverActivation.forkParkedFiber (definition) (file://[path redacted])\n' + ' at server.runServerCommand (file://[path redacted])\n' + ' at server.runServerCommand (definition) (file://[path redacted])\n' + ' at server.runDefaultServerCommand (file://[path redacted])\n' + ' at server.runDefaultServerCommand (definition) (file://[path redacted]) {\n' + ' [cause]: InterruptCause: The fiber was interrupted by:\n' + ' at fiber (unknown)\n' + '}' } === ios-manual-install-base.log === $ node scripts/mobile-native-client.ts ensure ios --session azure-proof-36148-ios ⊘ cache disabled Using cached client ios[path redacted] Installing into agent-device session azure-proof-36148-ios... Installed: com.t3tools.t3code.dev Installed into session azure-proof-36148-ios in 38s (local). Open it with Metro: --metro http://:8081. {"status":"installed","source":"local","fingerprint":"[long value redacted]","session":"azure-proof-36148-ios","seconds":38} === ios-manual-install-head.log === $ node scripts/mobile-native-client.ts ensure ios --session azure-proof-36148-ios ⊘ cache disabled Using cached client ios[path redacted] Installing into agent-device session azure-proof-36148-ios... Installed: com.t3tools.t3code.dev Installed into session azure-proof-36148-ios in 23s (local). Open it with Metro: --metro http://:8081. {"status":"installed","source":"local","fingerprint":"[long value redacted]","session":"azure-proof-36148-ios","seconds":23} === ios-manual-prepare.log === $ node scripts/mobile-native-client.ts ensure ios --prepare ⊘ cache disabled Using cached client ios[path redacted] Client ready for ios (local); lease a device and install. {"status":"ready","source":"local","fingerprint":"[long value redacted]"} === ios-video-encode.log === === native-upload-error.log === === prove-ios1.log === $ node scripts/prove-scenario.ts scripts[path redacted] --base [long value redacted] --head [long value redacted] --upload-command 'ghdrop upload' ⊘ cache disabled Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 3h ago) Lockfile is up to date, resolution step is skipped Packages are hard linked from the content-addressable store to the virtual store. Content-addressable store is at: [path redacted] Virtual store is at: node_modules/.pnpm Progress: resolved 1122, reused 1121, downloaded 0, added 1106 Progress: resolved 1742, reused 1741, downloaded 0, added 1730 Packages: +1779 [long value redacted] Progress: resolved 1779, reused 1775, downloaded 0, added 1779, done Agent skills awaiting approval: e2e. Run "pnpm approve" to review them. . prepare$ vp config --no-agent . prepare: Done devDependencies: + @coderabbitai/config 1.2.0 + @effect/tsgo 0.67.1 + @shadcn/lint 0.1.5 + @types/node 24.12.4 + knip 6.34.0 + vite-plus 1.4.0 Done in 3.7s using pnpm v12.14.0 RUN e2e v0.23.0 [path redacted] run [long value redacted] · targets: web, ios ℹ leasing 1 ios device(s) from simlock ℹ simlock (1 of 1): preparing the ios dev client ℹ simlock: leased e36ac2734e4442d788357f0a9a69956c ℹ booting [long value redacted] (1 of 1) === prove-ios2.log === $ node scripts/prove-scenario.ts scripts[path redacted] --base [long value redacted] --head [long value redacted] --upload-command 'ghdrop upload' ⊘ cache disabled Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 3h ago) Lockfile is up to date, resolution step is skipped Packages are hard linked from the content-addressable store to the virtual store. Content-addressable store is at: [path redacted] Virtual store is at: node_modules/.pnpm Progress: resolved 714, reused 714, downloaded 0, added 699 Progress: resolved 1305, reused 1305, downloaded 0, added 1290 Progress: resolved 1772, reused 1772, downloaded 0, added 1772 Packages: +1779 [long value redacted] Progress: resolved 1779, reused 1775, downloaded 0, added 1779, done Agent skills awaiting approval: e2e. Run "pnpm approve" to review them. . prepare$ vp config --no-agent . prepare: Done devDependencies: + @coderabbitai/config 1.2.0 + @effect/tsgo 0.67.1 + @shadcn/lint 0.1.5 + @types/node 24.12.4 + knip 6.34.0 + vite-plus 1.4.0 Done in 5.1s using pnpm v12.14.0 RUN e2e v0.23.0 [path redacted] run [long value redacted] · targets: web, ios ℹ leasing 1 ios device(s) from simlock ℹ simlock (1 of 1): preparing the ios dev client ℹ simlock: leased 14026a227cd24b02bbab1fbaf5c96b5f ℹ booting [long value redacted] (1 of 1) ℹ [long value redacted] com.t3tools.t3code.dev did not open (open com.t3tools.t3code.dev failed: Simulator device failed to launch com.t3tools.t3code.dev. Hint: The app bundle is not installed on this simulator. Run install before open.); the first attempt opens it ✓ mobile engine for target "ios" prepared 107.32s ✓ target "ios" command at [URL redacted] ready 5.20s × |ios| [long value redacted] > Private Azure linked GIF appears in the native PR description 205.60s → operation timed out ❯ |ios| [long value redacted] (1 test | 1 failed) 205.60s ℹ simlock: released 1 device(s) ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ FAIL |ios| [long value redacted] > Private Azure linked GIF appears in the native PR description ACTION_FAILED: operation timed out ❯ trace .e2e[path redacted] ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ Test Files 1 failed | 0 passed (1) Tests 1 failed | 0 passed (1) Cleanup 1 cleanup failure: CLEANUP_TIMEOUT: stopping the video timed out Start at 09:09:03 Duration 213.53s (3m 34s, startup 5.20s) Traces .e2e[path redacted] (1 page, trace.md in each test's directory) Markdown .e2e[path redacted] Failed × |ios| [long value redacted] > Private Azure linked GIF appears in the native PR description ACTION_FAILED: operation timed out trace .e2e[path redacted] Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 3h ago) Lockfile is up to date, resolution step is skipped Packages are hard linked from the content-addressable store to the virtual store. Content-addressable store is at: [path redacted] Virtual store is at: node_modules/.pnpm Progress: resolved 570, reused 570, downloaded 0, added 555 Progress: resolved 1214, reused 1214, downloaded 0, added 1199 Progress: resolved 1774, reused 1774, downloaded 0, added 1766 Packages: +1779 [long value redacted] Progress: resolved 1779, reused 1775, downloaded 0, added 1779, done Agent skills awaiting approval: e2e. Run "pnpm approve" to review them. . prepare$ vp config --no-agent . prepare: Done devDependencies: + @coderabbitai/config 1.2.0 + @effect/tsgo 0.67.1 + @shadcn/lint 0.1.5 + @types/node 24.12.4 + knip 6.34.0 + vite-plus 1.4.0 Done in 5.3s using pnpm v12.14.0 RUN e2e v0.23.0 [path redacted] run [long value redacted] · targets: web, ios ℹ leasing 1 ios device(s) from simlock ℹ simlock (1 of 1): preparing the ios dev client ℹ simlock: leased c745279db5924e0b947b3bcec24e4612 ℹ booting [long value redacted] (1 of 1) ℹ [long value redacted] com.t3tools.t3code.dev did not open (open com.t3tools.t3code.dev failed: Simulator device failed to launch com.t3tools.t3code.dev. Hint: The app bundle is not installed on this simulator. Run install before open.); the first attempt opens it ✓ mobile engine for target "ios" prepared 90.44s ✓ target "ios" command at [URL redacted] ready 10.84s × |ios| [long value redacted] > Private Azure linked GIF appears in the native PR description 48.96s → device.installApp exceeded its timeout of 30000ms ❯ |ios| [long value redacted] (1 test | 1 failed) 48.96s ℹ simlock: released 1 device(s) ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ FAIL |ios| [long value redacted] > Private Azure linked GIF appears in the native PR description ACTION_FAILED: device.installApp exceeded its timeout of 30000ms ❯ trace .e2e[path redacted] ❯ video .e2e[path redacted] ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ Test Files 1 failed | 0 passed (1) Tests 1 failed | 0 passed (1) Start at 09:14:22 Duration 61.58s (1m 2s, startup 10.84s) Traces .e2e[path redacted] (1 page, trace.md in each test's directory) Markdown .e2e[path redacted] Failed × |ios| [long value redacted] > Private Azure linked GIF appears in the native PR description ACTION_FAILED: device.installApp exceeded its timeout of 30000ms trace .e2e[path redacted] { "scenario": "Private Azure linked GIF appears in the native PR description", "failsOnBase": false, "passesOnHead": false, "couldNotRun": "scenario", "baseSha": "[long value redacted]", "headSha": "[long value redacted]", "verdict": "Not proven: the scenario could not run on base `a35fd81174` (ACTION_FAILED: operation timed out). The app ran and the scenario stopped before its assertion: fix the scenario and run it again.", "steps": { "base": [ { "step": "device.installApp [path redacted]", "status": "passed" }, { "step": "device.openLink [URL redacted]", "status": "passed" }, { "step": "device.alert accept", "status": "passed" }, { "step": "expect.toBeVisible getByRole(\"button\", name: \"Add environment\")", "status": "passed" }, { "step": "device.openLink [URL redacted]", "status": "passed" }, { "step": "device.alert accept", "status": "failed" }, { "step": "locator.tap getByText(\"PRs\")", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.waitFor getByText(\"Demo of the change.\") → visible", "status": "passed" }, { "step": "expect.toBeVisible getByRole(\"image\", name: \"demo.gif\")", "status": "passed" }, { "step": "app.screenshot ios-azure-description", "status": "failed" } ], "head": [ { "step": "device.installApp [path redacted]", "status": "failed" } ] }, "captures": [], "videos": [ "[path redacted]" ], "markdown": "### Scenario: Private Azure linked GIF appears in the native PR description\n\n**Not proven: the scenario could not run on base `a35fd81174` (ACTION_FAILED: operation timed out). The app ran and the scenario stopped before its assertion: fix the scenario and run it again.**\n\n| | Base `a35fd81174` | Head `00e6ea9971` |\n| --- | --- | --- |\n| Result | ⚠️ could not run
ACTION_FAILED: operation timed out | ⚠️ could not run
ACTION_FAILED: device.installApp exceeded its timeout of 30000ms |\n", "base": { "sha": "[long value redacted]", "status": "error", "stopped": "scenario", "title": "Private Azure linked GIF appears in the native PR description", "message": "ACTION_FAILED: operation timed out", "steps": [ { "step": "device.installApp [path redacted]", "status": "passed" }, { "step": "device.openLink [URL redacted]", "status": "passed" }, { "step": "device.alert accept", "status": "passed" }, { "step": "expect.toBeVisible getByRole(\"button\", name: \"Add environment\")", "status": "passed" }, { "step": "device.openLink [URL redacted]", "status": "passed" }, { "step": "device.alert accept", "status": "failed" }, { "step": "locator.tap getByText(\"PRs\")", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.waitFor getByText(\"Demo of the change.\") → visible", "status": "passed" }, { "step": "expect.toBeVisible getByRole(\"image\", name: \"demo.gif\")", "status": "passed" }, { "step": "app.screenshot ios-azure-description", "status": "failed" } ], "captures": [], "videos": [] }, "head": { "sha": "[long value redacted]", "status": "error", "stopped": "scenario", "title": "Private Azure linked GIF appears in the native PR description", "message": "ACTION_FAILED: device.installApp exceeded its timeout of 30000ms", "steps": [ { "step": "device.installApp [path redacted]", "status": "failed" } ], "captures": [], "videos": [ "[path redacted]" ] } } === prove-run1.log === $ node scripts/prove-scenario.ts scripts[path redacted] --base [long value redacted] --head [long value redacted] --upload-command 'ghdrop upload' ⊘ cache disabled Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 2h ago) Lockfile is up to date, resolution step is skipped Packages are hard linked from the content-addressable store to the virtual store. Content-addressable store is at: [path redacted] Virtual store is at: node_modules/.pnpm Progress: resolved 1007, reused 1007, downloaded 0, added 991 Progress: resolved 1774, reused 1774, downloaded 0, added 1773 Packages: +1779 [long value redacted] Progress: resolved 1779, reused 1775, downloaded 0, added 1779, done Agent skills awaiting approval: e2e. Run "pnpm approve" to review them. . prepare$ vp config --no-agent . prepare: Done devDependencies: + @coderabbitai/config 1.2.0 + @effect/tsgo 0.67.1 + @shadcn/lint 0.1.5 + @types/node 24.12.4 + knip 6.34.0 + vite-plus 1.4.0 Done in 3.6s using pnpm v12.14.0 RUN e2e v0.23.0 [path redacted] run [long value redacted] · targets: web, ios ✓ target "web" command at [URL redacted] ready 7.08s × |web| [long value redacted] > Private Azure PR description displays linked GIF and playable video 38.91s → expect.poll(...).toBe(...) timed out after 15000 ms ❯ |web| [long value redacted] (1 test | 1 failed) 38.91s ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ FAIL |web| [long value redacted] > Private Azure PR description displays linked GIF and playable video ASSERTION_FAILED: expect.poll(...).toBe(...) timed out after 15000 ms last: expected false to be true ❯ [long value redacted] 12| await screen.getByText("Demo of the change.", {exact:true}).waitFor… 13| await app.screenshot("azure-description"); 14| await expect.poll(() => browser.evaluate(() => [...document.querySe… | ^ 15| await expect.poll(() => browser.evaluate(() => [...document.querySe… 16| await browser.evaluate(async () => { const video = document.querySe… ❯ at [URL redacted] ❯ app 4 errors logged × network error: GET [URL redacted] × network error: GET [URL redacted] × network error: GET [URL redacted] 1 more app error logged ❯ trace .e2e[path redacted] ❯ video .e2e[path redacted] ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ Test Files 1 failed | 0 passed (1) Tests 1 failed | 0 passed (1) Start at 08:59:07 Duration 46.77s (startup 7.08s) Traces .e2e[path redacted] (1 page, trace.md in each test's directory) Screenshots .e2e[path redacted] Markdown .e2e[path redacted] Failed × |web| [long value redacted] > Private Azure PR description displays linked GIF and playable video ASSERTION_FAILED: expect.poll(...).toBe(...) timed out after 15000 ms trace .e2e[path redacted] Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 2h ago) Lockfile is up to date, resolution step is skipped Packages are hard linked from the content-addressable store to the virtual store. Content-addressable store is at: [path redacted] Virtual store is at: node_modules/.pnpm Progress: resolved 1009, reused 1009, downloaded 0, added 994 Progress: resolved 1758, reused 1758, downloaded 0, added 1750 Packages: +1779 [long value redacted] Progress: resolved 1779, reused 1775, downloaded 0, added 1779, done Agent skills awaiting approval: e2e. Run "pnpm approve" to review them. . prepare$ vp config --no-agent . prepare: Done devDependencies: + @coderabbitai/config 1.2.0 + @effect/tsgo 0.67.1 + @shadcn/lint 0.1.5 + @types/node 24.12.4 + knip 6.34.0 + vite-plus 1.4.0 Done in 3.6s using pnpm v12.14.0 RUN e2e v0.23.0 [path redacted] run [long value redacted] · targets: web, ios ✓ target "web" command at [URL redacted] ready 8.84s ✓ |web| [long value redacted] > Private Azure PR description displays linked GIF and playable video 29.08s ✓ |web| [long value redacted] (1 test) 29.08s Test Files 1 passed (1) Tests 1 passed (1) Start at 09:00:05 Duration 39.59s (startup 8.84s) Traces .e2e[path redacted] (1 page, trace.md in each test's directory) Screenshots .e2e[path redacted] .e2e[path redacted] Markdown .e2e[path redacted] { "scenario": "Private Azure PR description displays linked GIF and playable video", "failsOnBase": true, "passesOnHead": true, "couldNotRun": null, "baseSha": "[long value redacted]", "headSha": "[long value redacted]", "verdict": "Proven: the scenario fails on base `a35fd81174` and passes on head `00e6ea9971`.", "steps": { "base": [ { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.waitFor getByText(\"Demo of the change.\") → visible", "status": "passed" }, { "step": "app.screenshot azure-description", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" } ], "head": [ { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.waitFor getByText(\"Demo of the change.\") → visible", "status": "passed" }, { "step": "app.screenshot azure-description", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot azure-video-seeked", "status": "passed" } ] }, "captures": [ "[path redacted]", "[path redacted]", "[path redacted]", "[path redacted]" ], "videos": [ "[path redacted]", "[path redacted]" ], "markdown": "### Scenario: Private Azure PR description displays linked GIF and playable video\n\n**Proven: the scenario fails on base `a35fd81174` and passes on head `00e6ea9971`.**\n\n| | Base `a35fd81174` | Head `00e6ea9971` |\n| --- | --- | --- |\n| Result | ❌ failed
ASSERTION_FAILED: expect.poll(...).toBe(...) timed out after 15000 ms
last: expected false to be true | ✅ passed |\n| azure description | ![Base a35fd81174: azure description]([URL redacted] | ![Head 00e6ea9971: azure description]([URL redacted] |\n| failure | ![Base a35fd81174: failure]([URL redacted] | |\n| azure video seeked | | ![Head 00e6ea9971: azure video seeked]([URL redacted] |\n", "base": { "sha": "[long value redacted]", "status": "failed", "title": "Private Azure PR description displays linked GIF and playable video", "message": "ASSERTION_FAILED: expect.poll(...).toBe(...) timed out after 15000 ms\nlast: expected false to be true", "steps": [ { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.waitFor getByText(\"Demo of the change.\") → visible", "status": "passed" }, { "step": "app.screenshot azure-description", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" } ], "captures": [ "[path redacted]", "[path redacted]" ], "videos": [ "[path redacted]" ] }, "head": { "sha": "[long value redacted]", "status": "passed", "title": "Private Azure PR description displays linked GIF and playable video", "steps": [ { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.waitFor getByText(\"Demo of the change.\") → visible", "status": "passed" }, { "step": "app.screenshot azure-description", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot azure-video-seeked", "status": "passed" } ], "captures": [ "[path redacted]", "[path redacted]" ], "videos": [ "[path redacted]" ] } } === prove-run2.log === $ node scripts/prove-scenario.ts scripts[path redacted] --base [long value redacted] --head [long value redacted] --upload-command 'ghdrop upload' ⊘ cache disabled Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 3h ago) Lockfile is up to date, resolution step is skipped Packages are hard linked from the content-addressable store to the virtual store. Content-addressable store is at: [path redacted] Virtual store is at: node_modules/.pnpm Progress: resolved 661, reused 661, downloaded 0, added 646 Progress: resolved 1230, reused 1230, downloaded 0, added 1214 Progress: resolved 1762, reused 1762, downloaded 0, added 1757 Packages: +1779 [long value redacted] Progress: resolved 1779, reused 1775, downloaded 0, added 1779, done Agent skills awaiting approval: e2e. Run "pnpm approve" to review them. . prepare$ vp config --no-agent . prepare: Done devDependencies: + @coderabbitai/config 1.2.0 + @effect/tsgo 0.67.1 + @shadcn/lint 0.1.5 + @types/node 24.12.4 + knip 6.34.0 + vite-plus 1.4.0 Done in 5s using pnpm v12.14.0 RUN e2e v0.23.0 [path redacted] run [long value redacted] · targets: web, ios ✓ target "web" command at [URL redacted] ready 8.72s × |web| [long value redacted] > Private Azure PR description displays linked GIF and playable video 52.77s → expect.poll(...).toBe(...) timed out after 15000 ms ❯ |web| [long value redacted] (1 test | 1 failed) 52.77s ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ FAIL |web| [long value redacted] > Private Azure PR description displays linked GIF and playable video ASSERTION_FAILED: expect.poll(...).toBe(...) timed out after 15000 ms last: expected false to be true ❯ [long value redacted] 13| await screen.getByText("Demo of the change.", {exact:true}).waitFor… 14| try { 15| await expect.poll(() => browser.evaluate(() => [...document.query… | ^ 16| await expect.poll(() => browser.evaluate(() => [...document.query… 17| } finally { ❯ at [URL redacted] ❯ app 4 errors logged × network error: GET [URL redacted] × network error: GET [URL redacted] × network error: GET [URL redacted] 1 more app error logged ❯ trace .e2e[path redacted] ❯ video .e2e[path redacted] ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ Test Files 1 failed | 0 passed (1) Tests 1 failed | 0 passed (1) Start at 09:02:15 Duration 62.83s (1m 3s, startup 8.72s) Traces .e2e[path redacted] (1 page, trace.md in each test's directory) Screenshots .e2e[path redacted] Markdown .e2e[path redacted] Failed × |web| [long value redacted] > Private Azure PR description displays linked GIF and playable video ASSERTION_FAILED: expect.poll(...).toBe(...) timed out after 15000 ms trace .e2e[path redacted] Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 3h ago) Lockfile is up to date, resolution step is skipped Packages are hard linked from the content-addressable store to the virtual store. Content-addressable store is at: [path redacted] Virtual store is at: node_modules/.pnpm Progress: resolved 965, reused 965, downloaded 0, added 950 Progress: resolved 1740, reused 1740, downloaded 0, added 1730 Packages: +1779 [long value redacted] Progress: resolved 1779, reused 1775, downloaded 0, added 1779, done Agent skills awaiting approval: e2e. Run "pnpm approve" to review them. . prepare$ vp config --no-agent . prepare: Done devDependencies: + @coderabbitai/config 1.2.0 + @effect/tsgo 0.67.1 + @shadcn/lint 0.1.5 + @types/node 24.12.4 + knip 6.34.0 + vite-plus 1.4.0 Done in 3.6s using pnpm v12.14.0 RUN e2e v0.23.0 [path redacted] run [long value redacted] · targets: web, ios ✓ target "web" command at [URL redacted] ready 4.92s ✓ |web| [long value redacted] > Private Azure PR description displays linked GIF and playable video 25.81s ✓ |web| [long value redacted] (1 test) 25.81s Test Files 1 passed (1) Tests 1 passed (1) Start at 09:03:30 Duration 31.58s (startup 4.92s) Traces .e2e[path redacted] (1 page, trace.md in each test's directory) Screenshots .e2e[path redacted] .e2e[path redacted] .e2e[path redacted] Markdown .e2e[path redacted] { "scenario": "Private Azure PR description displays linked GIF and playable video", "failsOnBase": true, "passesOnHead": true, "couldNotRun": null, "baseSha": "[long value redacted]", "headSha": "[long value redacted]", "verdict": "Proven: the scenario fails on base `a35fd81174` and passes on head `00e6ea9971`.", "steps": { "base": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.waitFor getByText(\"Demo of the change.\") → visible", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot azure-description", "status": "passed" } ], "head": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.waitFor getByText(\"Demo of the change.\") → visible", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot azure-description", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot azure-video-seeked", "status": "passed" }, { "step": "locator.tap getByRole(\"image\", name: \"demo.gif\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot azure-linked-thumbnail-expanded", "status": "passed" } ] }, "captures": [ "[path redacted]", "[path redacted]", "[path redacted]", "[path redacted]", "[path redacted]" ], "videos": [ "[path redacted]", "[path redacted]" ], "markdown": "### Scenario: Private Azure PR description displays linked GIF and playable video\n\n**Proven: the scenario fails on base `a35fd81174` and passes on head `00e6ea9971`.**\n\n| | Base `a35fd81174` | Head `00e6ea9971` |\n| --- | --- | --- |\n| Result | ❌ failed
ASSERTION_FAILED: expect.poll(...).toBe(...) timed out after 15000 ms
last: expected false to be true | ✅ passed |\n| azure description | ![Base a35fd81174: azure description]([URL redacted] | ![Head 00e6ea9971: azure description]([URL redacted] |\n| failure | ![Base a35fd81174: failure]([URL redacted] | |\n| azure video seeked | | ![Head 00e6ea9971: azure video seeked]([URL redacted] |\n| azure linked thumbnail expanded | | ![Head 00e6ea9971: azure linked thumbnail expanded]([URL redacted] |\n", "base": { "sha": "[long value redacted]", "status": "failed", "title": "Private Azure PR description displays linked GIF and playable video", "message": "ASSERTION_FAILED: expect.poll(...).toBe(...) timed out after 15000 ms\nlast: expected false to be true", "steps": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.waitFor getByText(\"Demo of the change.\") → visible", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot azure-description", "status": "passed" } ], "captures": [ "[path redacted]", "[path redacted]" ], "videos": [ "[path redacted]" ] }, "head": { "sha": "[long value redacted]", "status": "passed", "title": "Private Azure PR description displays linked GIF and playable video", "steps": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.waitFor getByText(\"Demo of the change.\") → visible", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot azure-description", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot azure-video-seeked", "status": "passed" }, { "step": "locator.tap getByRole(\"image\", name: \"demo.gif\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot azure-linked-thumbnail-expanded", "status": "passed" } ], "captures": [ "[path redacted]", "[path redacted]", "[path redacted]" ], "videos": [ "[path redacted]" ] } } === regression-final-run.log === $ node scripts/prove-scenario.ts scripts[path redacted] --base [long value redacted] --head [long value redacted] --upload-command 'ghdrop upload' ⊘ cache disabled Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 3h ago) Lockfile is up to date, resolution step is skipped Packages are hard linked from the content-addressable store to the virtual store. Content-addressable store is at: [path redacted] Virtual store is at: node_modules/.pnpm Progress: resolved 941, reused 940, downloaded 0, added 925 Progress: resolved 1727, reused 1727, downloaded 0, added 1716 Packages: +1779 [long value redacted] Progress: resolved 1779, reused 1775, downloaded 0, added 1779, done Agent skills awaiting approval: e2e. Run "pnpm approve" to review them. . prepare$ vp config --no-agent . prepare: Done devDependencies: + @coderabbitai/config 1.2.0 + @effect/tsgo 0.67.1 + @shadcn/lint 0.1.5 + @types/node 24.12.4 + knip 6.34.0 + vite-plus 1.4.0 Done in 3.7s using pnpm v12.14.0 RUN e2e v0.23.0 [path redacted] run [long value redacted] · targets: web, ios ✓ target "web" command at [URL redacted] ready 6.33s ✓ |web| [long value redacted] > GitHub and GitLab images still render and expand in a PR gallery 22.95s ✓ |web| [long value redacted] (1 test) 22.95s Test Files 1 passed (1) Tests 1 passed (1) Start at 09:41:38 Duration 30.55s (startup 6.33s) Traces .e2e[path redacted] (1 page, trace.md in each test's directory) Screenshots .e2e[path redacted] .e2e[path redacted] .e2e[path redacted] Markdown .e2e[path redacted] Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 3h ago) Lockfile is up to date, resolution step is skipped Packages are hard linked from the content-addressable store to the virtual store. Content-addressable store is at: [path redacted] Virtual store is at: node_modules/.pnpm Progress: resolved 580, reused 580, downloaded 0, added 565 Progress: resolved 957, reused 957, downloaded 0, added 943 Progress: resolved 1375, reused 1375, downloaded 0, added 1359 Progress: resolved 1741, reused 1741, downloaded 0, added 1726 Packages: +1779 [long value redacted] Progress: resolved 1779, reused 1775, downloaded 0, added 1779, done Agent skills awaiting approval: e2e. Run "pnpm approve" to review them. . prepare$ vp config --no-agent . prepare: Done devDependencies: + @coderabbitai/config 1.2.0 + @effect/tsgo 0.67.1 + @shadcn/lint 0.1.5 + @types/node 24.12.4 + knip 6.34.0 + vite-plus 1.4.0 Done in 7.9s using pnpm v12.14.0 RUN e2e v0.23.0 [path redacted] run [long value redacted] · targets: web, ios ✓ target "web" command at [URL redacted] ready 10.06s ✓ |web| [long value redacted] > GitHub and GitLab images still render and expand in a PR gallery 33.73s ✓ |web| [long value redacted] (1 test) 33.73s Test Files 1 passed (1) Tests 1 passed (1) Start at 09:42:32 Duration 45.34s (startup 10.06s) Traces .e2e[path redacted] (1 page, trace.md in each test's directory) Screenshots .e2e[path redacted] .e2e[path redacted] .e2e[path redacted] Markdown .e2e[path redacted] { "scenario": "GitHub and GitLab images still render and expand in a PR gallery", "failsOnBase": false, "passesOnHead": true, "couldNotRun": null, "baseSha": "[long value redacted]", "headSha": "[long value redacted]", "verdict": "Not proven: the scenario passes on base `a35fd81174` too, so it does not reproduce the bug.", "steps": { "base": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.scrollIntoView getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "locator.scrollIntoView locator(\"img[alt=\\\"GitLab image\\\"]\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-gitlab-inline", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Next media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot gitlab-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Previous media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" } ], "head": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.scrollIntoView getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "locator.scrollIntoView locator(\"img[alt=\\\"GitLab image\\\"]\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-gitlab-inline", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Next media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot gitlab-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Previous media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" } ] }, "captures": [ "[path redacted]", "[path redacted]", "[path redacted]", "[path redacted]", "[path redacted]", "[path redacted]" ], "videos": [ "[path redacted]", "[path redacted]" ], "markdown": "### Scenario: GitHub and GitLab images still render and expand in a PR gallery\n\n**Not proven: the scenario passes on base `a35fd81174` too, so it does not reproduce the bug.**\n\n| | Base `a35fd81174` | Head `00e6ea9971` |\n| --- | --- | --- |\n| Result | ✅ passed | ✅ passed |\n| github gitlab inline | ![Base a35fd81174: github gitlab inline]([URL redacted] | ![Head 00e6ea9971: github gitlab inline]([URL redacted] |\n| github expanded gallery | ![Base a35fd81174: github expanded gallery]([URL redacted] | ![Head 00e6ea9971: github expanded gallery]([URL redacted] |\n| gitlab expanded gallery | ![Base a35fd81174: gitlab expanded gallery]([URL redacted] | ![Head 00e6ea9971: gitlab expanded gallery]([URL redacted] |\n", "base": { "sha": "[long value redacted]", "status": "passed", "title": "GitHub and GitLab images still render and expand in a PR gallery", "steps": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.scrollIntoView getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "locator.scrollIntoView locator(\"img[alt=\\\"GitLab image\\\"]\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-gitlab-inline", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Next media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot gitlab-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Previous media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" } ], "captures": [ "[path redacted]", "[path redacted]", "[path redacted]" ], "videos": [ "[path redacted]" ] }, "head": { "sha": "[long value redacted]", "status": "passed", "title": "GitHub and GitLab images still render and expand in a PR gallery", "steps": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.scrollIntoView getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "locator.scrollIntoView locator(\"img[alt=\\\"GitLab image\\\"]\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-gitlab-inline", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Next media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot gitlab-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Previous media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" } ], "captures": [ "[path redacted]", "[path redacted]", "[path redacted]" ], "videos": [ "[path redacted]" ] } } === regression-run.log === $ node scripts/prove-scenario.ts scripts[path redacted] --base [long value redacted] --head [long value redacted] --upload-command 'ghdrop upload' ⊘ cache disabled Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 3h ago) Lockfile is up to date, resolution step is skipped Packages are hard linked from the content-addressable store to the virtual store. Content-addressable store is at: [path redacted] Virtual store is at: node_modules/.pnpm Progress: resolved 954, reused 954, downloaded 0, added 941 Progress: resolved 1749, reused 1749, downloaded 0, added 1738 Packages: +1779 [long value redacted] Progress: resolved 1779, reused 1775, downloaded 0, added 1779, done Agent skills awaiting approval: e2e. Run "pnpm approve" to review them. . prepare$ vp config --no-agent . prepare: Done devDependencies: + @coderabbitai/config 1.2.0 + @effect/tsgo 0.67.1 + @shadcn/lint 0.1.5 + @types/node 24.12.4 + knip 6.34.0 + vite-plus 1.4.0 Done in 3.7s using pnpm v12.14.0 RUN e2e v0.23.0 [path redacted] run [long value redacted] · targets: web, ios ✓ target "web" command at [URL redacted] ready 5.68s × |web| [long value redacted] > GitHub and GitLab images still render and expand in a PR gallery 47.18s → locator matched no nodes within getByRole("image", name: "GitHub image") ❯ |web| [long value redacted] (1 test | 1 failed) 47.18s ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ FAIL |web| [long value redacted] > GitHub and GitLab images still render and expand in a PR gallery LOCATOR_NOT_FOUND: locator matched no nodes within getByRole("image", name: "GitHub image") ❯ [long value redacted] ❯ at [URL redacted] ❯ app 5 errors, 1 warning logged × console error: WebSocket connection to '[URL redacted] × network error: GET [URL redacted] × network error: GET [URL redacted] 2 more app errors logged ❯ trace .e2e[path redacted] ❯ video .e2e[path redacted] ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ Test Files 1 failed | 0 passed (1) Tests 1 failed | 0 passed (1) Start at 09:15:56 Duration 53.83s (startup 5.68s) Traces .e2e[path redacted] (1 page, trace.md in each test's directory) Markdown .e2e[path redacted] Failed × |web| [long value redacted] > GitHub and GitLab images still render and expand in a PR gallery LOCATOR_NOT_FOUND: locator matched no nodes within getByRole("image", name: "GitHub image") trace .e2e[path redacted] Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 3h ago) Lockfile is up to date, resolution step is skipped Packages are hard linked from the content-addressable store to the virtual store. Content-addressable store is at: [path redacted] Virtual store is at: node_modules/.pnpm Progress: resolved 998, reused 998, downloaded 0, added 984 Progress: resolved 1722, reused 1722, downloaded 0, added 1713 Packages: +1779 [long value redacted] Progress: resolved 1779, reused 1775, downloaded 0, added 1779, done Agent skills awaiting approval: e2e. Run "pnpm approve" to review them. . prepare$ vp config --no-agent . prepare: Done devDependencies: + @coderabbitai/config 1.2.0 + @effect/tsgo 0.67.1 + @shadcn/lint 0.1.5 + @types/node 24.12.4 + knip 6.34.0 + vite-plus 1.4.0 Done in 4.1s using pnpm v12.14.0 RUN e2e v0.23.0 [path redacted] run [long value redacted] · targets: web, ios ✓ target "web" command at [URL redacted] ready 6.02s × |web| [long value redacted] > GitHub and GitLab images still render and expand in a PR gallery 50.75s → locator matched no nodes within getByRole("image", name: "GitHub image") ❯ |web| [long value redacted] (1 test | 1 failed) 50.75s ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ FAIL |web| [long value redacted] > GitHub and GitLab images still render and expand in a PR gallery LOCATOR_NOT_FOUND: locator matched no nodes within getByRole("image", name: "GitHub image") ❯ [long value redacted] ❯ at [URL redacted] ❯ app 3 errors, 1 warning logged × console error: WebSocket connection to '[URL redacted] × network error: GET [URL redacted] × network error: GET [URL redacted] ❯ trace .e2e[path redacted] ❯ video .e2e[path redacted] ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ Test Files 1 failed | 0 passed (1) Tests 1 failed | 0 passed (1) Start at 09:17:03 Duration 58.02s (startup 6.02s) Traces .e2e[path redacted] (1 page, trace.md in each test's directory) Markdown .e2e[path redacted] Failed × |web| [long value redacted] > GitHub and GitLab images still render and expand in a PR gallery LOCATOR_NOT_FOUND: locator matched no nodes within getByRole("image", name: "GitHub image") trace .e2e[path redacted] { "scenario": "GitHub and GitLab images still render and expand in a PR gallery", "failsOnBase": false, "passesOnHead": false, "couldNotRun": "scenario", "baseSha": "[long value redacted]", "headSha": "[long value redacted]", "verdict": "Not proven: the scenario could not run on base `a35fd81174` (LOCATOR_NOT_FOUND: locator matched no nodes within getByRole(\"image\", name: \"GitHub image\")). The app ran and the scenario stopped before its assertion: fix the scenario and run it again.", "steps": { "base": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.scrollIntoView getByRole(\"image\", name: \"GitHub image\")", "status": "failed" } ], "head": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.scrollIntoView getByRole(\"image\", name: \"GitHub image\")", "status": "failed" } ] }, "captures": [ "[path redacted]", "[path redacted]" ], "videos": [ "[path redacted]", "[path redacted]" ], "markdown": "### Scenario: GitHub and GitLab images still render and expand in a PR gallery\n\n**Not proven: the scenario could not run on base `a35fd81174` (LOCATOR_NOT_FOUND: locator matched no nodes within getByRole(\"image\", name: \"GitHub image\")). The app ran and the scenario stopped before its assertion: fix the scenario and run it again.**\n\n| | Base `a35fd81174` | Head `00e6ea9971` |\n| --- | --- | --- |\n| Result | ⚠️ could not run
LOCATOR_NOT_FOUND: locator matched no nodes within getByRole(\"image\", name: \"GitHub image\") | ⚠️ could not run
LOCATOR_NOT_FOUND: locator matched no nodes within getByRole(\"image\", name: \"GitHub image\") |\n| failure | ![Base a35fd81174: failure]([URL redacted] | ![Head 00e6ea9971: failure]([URL redacted] |\n", "base": { "sha": "[long value redacted]", "status": "error", "stopped": "scenario", "title": "GitHub and GitLab images still render and expand in a PR gallery", "message": "LOCATOR_NOT_FOUND: locator matched no nodes within getByRole(\"image\", name: \"GitHub image\")", "steps": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.scrollIntoView getByRole(\"image\", name: \"GitHub image\")", "status": "failed" } ], "captures": [ "[path redacted]" ], "videos": [ "[path redacted]" ] }, "head": { "sha": "[long value redacted]", "status": "error", "stopped": "scenario", "title": "GitHub and GitLab images still render and expand in a PR gallery", "message": "LOCATOR_NOT_FOUND: locator matched no nodes within getByRole(\"image\", name: \"GitHub image\")", "steps": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.scrollIntoView getByRole(\"image\", name: \"GitHub image\")", "status": "failed" } ], "captures": [ "[path redacted]" ], "videos": [ "[path redacted]" ] } } === regression-run2.log === $ node scripts/prove-scenario.ts scripts[path redacted] --base [long value redacted] --head [long value redacted] --upload-command 'ghdrop upload' ⊘ cache disabled Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 3h ago) Lockfile is up to date, resolution step is skipped Packages are hard linked from the content-addressable store to the virtual store. Content-addressable store is at: [path redacted] Virtual store is at: node_modules/.pnpm Progress: resolved 219, reused 219, downloaded 0, added 204 Progress: resolved 394, reused 394, downloaded 0, added 379 Progress: resolved 492, reused 492, downloaded 0, added 477 Progress: resolved 574, reused 574, downloaded 0, added 559 Progress: resolved 630, reused 630, downloaded 0, added 615 Progress: resolved 1143, reused 1143, downloaded 0, added 1128 Progress: resolved 1635, reused 1635, downloaded 0, added 1624 Progress: resolved 1775, reused 1775, downloaded 0, added 1773 Packages: +1779 [long value redacted] Progress: resolved 1779, reused 1775, downloaded 0, added 1779, done Agent skills awaiting approval: e2e. Run "pnpm approve" to review them. . prepare$ vp config --no-agent . prepare: Done devDependencies: + @coderabbitai/config 1.2.0 + @effect/tsgo 0.67.1 + @shadcn/lint 0.1.5 + @types/node 24.12.4 + knip 6.34.0 + vite-plus 1.4.0 Done in 11.7s using pnpm v12.14.0 RUN e2e v0.23.0 [path redacted] run [long value redacted] · targets: web, ios ✓ target "web" command at [URL redacted] ready 13.10s ✓ |web| [long value redacted] > GitHub and GitLab images still render and expand in a PR gallery 29.81s ✓ |web| [long value redacted] (1 test) 29.81s Test Files 1 passed (1) Tests 1 passed (1) Start at 09:18:36 Duration 45.06s (startup 13.10s) Traces .e2e[path redacted] (1 page, trace.md in each test's directory) Screenshots .e2e[path redacted] .e2e[path redacted] .e2e[path redacted] Markdown .e2e[path redacted] Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 3h ago) Lockfile is up to date, resolution step is skipped Packages are hard linked from the content-addressable store to the virtual store. Content-addressable store is at: [path redacted] Virtual store is at: node_modules/.pnpm Progress: resolved 854, reused 854, downloaded 0, added 839 Progress: resolved 1415, reused 1415, downloaded 0, added 1399 Progress: resolved 1770, reused 1770, downloaded 0, added 1758 Packages: +1779 [long value redacted] Progress: resolved 1779, reused 1775, downloaded 0, added 1779, done Agent skills awaiting approval: e2e. Run "pnpm approve" to review them. . prepare$ vp config --no-agent . prepare: Done devDependencies: + @coderabbitai/config 1.2.0 + @effect/tsgo 0.67.1 + @shadcn/lint 0.1.5 + @types/node 24.12.4 + knip 6.34.0 + vite-plus 1.4.0 Done in 5.2s using pnpm v12.14.0 RUN e2e v0.23.0 [path redacted] run [long value redacted] · targets: web, ios ✓ target "web" command at [URL redacted] ready 7.58s ✓ |web| [long value redacted] > GitHub and GitLab images still render and expand in a PR gallery 26.91s ✓ |web| [long value redacted] (1 test) 26.91s Test Files 1 passed (1) Tests 1 passed (1) Start at 09:19:39 Duration 35.78s (startup 7.58s) Traces .e2e[path redacted] (1 page, trace.md in each test's directory) Screenshots .e2e[path redacted] .e2e[path redacted] .e2e[path redacted] Markdown .e2e[path redacted] { "scenario": "GitHub and GitLab images still render and expand in a PR gallery", "failsOnBase": false, "passesOnHead": true, "couldNotRun": null, "baseSha": "[long value redacted]", "headSha": "[long value redacted]", "verdict": "Not proven: the scenario passes on base `a35fd81174` too, so it does not reproduce the bug.", "steps": { "base": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.scrollIntoView getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "locator.scrollIntoView locator(\"img[alt=\\\"GitLab image\\\"]\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-gitlab-inline", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Next media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot gitlab-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Previous media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" } ], "head": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.scrollIntoView getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "locator.scrollIntoView locator(\"img[alt=\\\"GitLab image\\\"]\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-gitlab-inline", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Next media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot gitlab-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Previous media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" } ] }, "captures": [ "[path redacted]", "[path redacted]", "[path redacted]", "[path redacted]", "[path redacted]", "[path redacted]" ], "videos": [ "[path redacted]", "[path redacted]" ], "markdown": "### Scenario: GitHub and GitLab images still render and expand in a PR gallery\n\n**Not proven: the scenario passes on base `a35fd81174` too, so it does not reproduce the bug.**\n\n| | Base `a35fd81174` | Head `00e6ea9971` |\n| --- | --- | --- |\n| Result | ✅ passed | ✅ passed |\n| github gitlab inline | ![Base a35fd81174: github gitlab inline]([URL redacted] | ![Head 00e6ea9971: github gitlab inline]([URL redacted] |\n| github expanded gallery | ![Base a35fd81174: github expanded gallery]([URL redacted] | ![Head 00e6ea9971: github expanded gallery]([URL redacted] |\n| gitlab expanded gallery | ![Base a35fd81174: gitlab expanded gallery]([URL redacted] | ![Head 00e6ea9971: gitlab expanded gallery]([URL redacted] |\n", "base": { "sha": "[long value redacted]", "status": "passed", "title": "GitHub and GitLab images still render and expand in a PR gallery", "steps": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.scrollIntoView getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "locator.scrollIntoView locator(\"img[alt=\\\"GitLab image\\\"]\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-gitlab-inline", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Next media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot gitlab-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Previous media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" } ], "captures": [ "[path redacted]", "[path redacted]", "[path redacted]" ], "videos": [ "[path redacted]" ] }, "head": { "sha": "[long value redacted]", "status": "passed", "title": "GitHub and GitLab images still render and expand in a PR gallery", "steps": [ { "step": "browser.setViewport ", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open [path redacted]", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /pull-requests", "status": "passed" }, { "step": "locator.tap getByText(\"Repro attachments\").first()", "status": "passed" }, { "step": "locator.scrollIntoView getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "locator.scrollIntoView locator(\"img[alt=\\\"GitLab image\\\"]\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-gitlab-inline", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Preview GitHub image\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot github-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Next media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot gitlab-expanded-gallery", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Previous media\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" } ], "captures": [ "[path redacted]", "[path redacted]", "[path redacted]" ], "videos": [ "[path redacted]" ] } }