GitHub check

256 KB of 387 KB loaded Download the full log (387 KB)
131 KB of earlier output not loaded
 appendTerminalOutput (8)
     โœ“ stays bounded across many appends of huge output, including one endless line 935ms
 โœ“ src/sourceControl.test.ts (11 tests) 9ms
 โœ“ src/imageDimensions.test.ts (8 tests) 8ms

~/packages/provider-grok$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ gnome-extension/feedbackGeometry.test.js (7 tests) 7ms
 โœ“ src/app/DesktopUserData.test.ts (2 tests) 46ms
 โœ“ src/permissions/MacSettingsWindow.test.ts (2 tests) 25ms
 โœ“ src/remote.test.ts (10 tests) 14ms
 โœ“ src/preview/WebviewPreferences.test.ts (2 tests) 2ms
 โœ“ src/KeyedLock.test.ts (4 tests) 12ms
 โœ“ src/ipc/methods/localEnvironment.test.ts (1 test) 11ms
 โœ“ src/logging.test.ts (3 tests) 37ms
 โœ“ ../../native/kde-snap-shot/src/feedbackGeometry.test.ts (2 tests) 33ms

 RUN  v5.0.5 /home/runner/_work/t3code/t3code/packages/provider-grok

 โœ“ src/app/DesktopPreReadyFileSystem.test.ts (1 test) 38ms
 โœ“ src/snapShot/WindowsCaptureFeedback.test.ts (1 test) 5ms
 โœ“ src/composerContextLegacySend.test.ts (8 tests) 32ms
 โœ“ src/ipc/methods/sshEnvironment.test.ts (1 test) 16ms
 โœ“ src/preview/RecordingInput.test.ts (2 tests) 2ms
 โœ“ src/promptLinks.test.ts (8 tests) 25ms
 โœ“ src/preview/AnnotationKeyboard.test.ts (1 test) 3ms
 โœ“ src/preview/AnnotationIds.test.ts (1 test) 10ms

 Test Files  103 passed (103)
      Tests  837 passed (837)
   Start at  05:21:20
   Duration  17.48s (import 48%, transform 25%, tests 14%, setup 12%, worker 1%)

     Import  520 modules were evaluated 6430 times ยท 47.62s total, 48% of tracked time
             ~4.77s faster with isolate: false โ€” shared modules are evaluated once per worker instead of once per file
             learn more: https://vitest.dev/guide/improving-performance#test-isolation

 โœ“ src/composerContextClipboard.test.ts (6 tests) 365ms
   โœ“ composerContextClipboard (6)
     โœ“ round-trips selections larger than two million characters 332ms

~/packages/source-control-gitlab$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/server/usage.test.ts (9 tests) 33ms
 โœ“ src/schemaJson.test.ts (8 tests) 18ms
 โœ“ src/codexAuthHandoff.test.ts (6 tests) 15ms
 โœ“ src/orchestrationV2BoundedSnapshot.test.ts (3 tests) 7ms

 RUN  v5.0.5 /home/runner/_work/t3code/t3code/packages/source-control-gitlab

 โœ“ src/devHome.test.ts (5 tests) 42ms
 โœ“ src/threadFindText.test.ts (8 tests) 56ms
 โœ“ src/orchestrationTiming.test.ts (11 tests) 8ms
 โœ“ src/threadLinks.test.ts (8 tests) 7ms
 โœ“ src/Net.test.ts (4 tests) 34ms
 โœ“ src/fileLinks.test.ts (18 tests) 5ms
 โœ“ src/gitPatchPath.test.ts (22 tests) 13ms
 โœ“ src/hostClassification.test.ts (10 tests) 10ms
 โœ“ src/composerTrigger.test.ts (25 tests) 17ms
 โœ“ src/path.test.ts (11 tests) 6ms
 โœ“ src/semver.test.ts (7 tests) 10ms
 โœ“ src/relayTracing.test.ts (2 tests) 6ms
 โœ“ src/server/bitbucketPullRequestJson.test.ts (22 tests) 34ms
 โœ“ src/codexArtifactTemplates.test.ts (9 tests) 12ms
 โœ“ src/markdownPipeline.test.ts (3 tests) 53ms
 โœ“ src/orchestrationV2Timeline.test.ts (12 tests) 6ms
 โœ“ src/server/xaiAcpExtension.test.ts (52 tests) 37ms
 โœ“ src/toolActivity.test.ts (4 tests) 5ms
 โœ“ src/server/BitbucketPullRequestProvider.test.ts (18 tests) 51ms
 โœ“ src/server/BitbucketPullRequestApi.test.ts (23 tests) 79ms

 Test Files  3 passed (3)
      Tests  63 passed (63)
   Start at  05:21:37
   Duration  2.09s (transform 51%, import 39%, setup 7%, tests 3%)


~/packages/provider-cursor$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/cliArgs.test.ts (8 tests) 3ms
 โœ“ src/filePreview.test.ts (13 tests) 19ms
 โœ“ src/codexFileCitations.test.ts (5 tests) 16ms
 โœ“ src/composerPullRequestMatches.test.ts (3 tests) 20ms
 โœ“ src/threadReference.test.ts (5 tests) 9ms
 โœ“ src/cliRelease.test.ts (3 tests) 3ms
 โœ“ src/connectAuth.test.ts (3 tests) 7ms

 RUN  v5.0.5 /home/runner/_work/t3code/t3code/packages/provider-cursor

 โœ“ src/searchRanking.test.ts (3 tests) 9ms
 โœ“ src/delimitedPreview.test.ts (8 tests) 880ms
   โœ“ delimited file previews (8)
     โœ“ bounds rows, columns and cell length and reports partial content 869ms
 โœ“ src/relayAuth.test.ts (2 tests) 4ms
 โœ“ src/desktopBootstrapToken.test.ts (3 tests) 3ms
 โœ“ src/usageFormat.test.ts (4 tests) 23ms
 โœ“ src/favicon.test.ts (6 tests) 2ms
 โœ“ src/cloneUrl.test.ts (3 tests) 5ms
 โœ“ src/githubMarkdownLinks.test.ts (3 tests) 24ms
 โœ“ src/desktopAppControl.test.ts (2 tests) 3ms
 โœ“ src/server/skills.test.ts (6 tests) 54ms
 โœ“ src/server/gitLabMergeRequestJson.test.ts (29 tests) 46ms
 โœ“ src/server/acpSupport.test.ts (8 tests) 23ms
 โœ“ src/thirdPartyLicenses.test.ts (2 tests) 4ms
 โœ“ src/oauthScope.test.ts (3 tests) 3ms
 โœ“ src/schemaYaml.test.ts (2 tests) 19ms
 โœ“ src/server/GitLabPullRequestProvider.test.ts (7 tests) 17ms
 โœ“ src/server/GitLabPullRequestCli.test.ts (42 tests) 92ms
 โœ“ src/server/GitLabCli.test.ts (5 tests) 52ms
 โœ“ src/server/GitLabPullRequestCli.legacy.test.ts (14 tests) 41ms
 โœ“ src/server/GitLabSourceControlProvider.test.ts (12 tests) 28ms

 Test Files  6 passed (6)
      Tests  109 passed (109)
   Start at  05:21:38
   Duration  2.08s (transform 56%, import 36%, setup 5%, tests 3%)

 โœ“ src/t3McpToolPresentation.test.ts (2 tests) 16ms

~/packages/client-runtime$ vp test run โŠ˜ cache disabled
 โœ“ src/relayUrl.test.ts (4 tests) 10ms
 โœ“ src/AgentScope.test.ts (1 test) 9ms
 โœ“ src/server/skills.test.ts (5 tests) 62ms
 โœ“ src/providerAuthReturnUrl.test.ts (5 tests) 3ms
 โœ“ src/threadSearch.test.ts (2 tests) 2ms
 โœ“ src/video.test.ts (2 tests) 5ms

 RUN  v5.0.5 /home/runner/_work/t3code/t3code/packages/client-runtime

 โœ“ src/terminalLabels.test.ts (2 tests) 6ms
 โœ“ src/relayJwt.test.ts (1 test) 3ms
 โœ“ src/relaySigning.test.ts (1 test) 9ms
 โœ“ src/changedFileKind.test.ts (5 tests) 4ms
 โœ“ src/telemetryId.test.ts (1 test) 5ms
 โœ“ src/t3ProjectFile.test.ts (2 tests) 5ms

 Test Files  90 passed (90)
      Tests  1008 passed | 2 skipped (1010)
   Start at  05:21:30
   Duration  10.48s (import 42%, transform 29%, setup 15%, tests 13%, worker 1%)

     Import  349 modules were evaluated 2805 times ยท 24.08s total, 42% of tracked time
             ~2.24s faster with isolate: false โ€” shared modules are evaluated once per worker instead of once per file
             learn more: https://vitest.dev/guide/improving-performance#test-isolation


~/packages/tailscale$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/server/accountUsage.test.ts (9 tests) 575ms
 โœ“ src/server/driver.test.ts (4 tests) 74ms

 Test Files  5 passed (5)
      Tests  79 passed (79)
   Start at  05:21:37
   Duration  3.48s (transform 63%, import 30%, setup 5%, tests 2%)


~/packages/effect-acp$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled

 RUN  v5.0.5 /home/runner/_work/t3code/t3code/packages/tailscale


 RUN  v5.0.5 /home/runner/_work/t3code/t3code/packages/effect-acp

 โœ“ src/server/usageLimits.test.ts (9 tests) 82ms
 โœ“ src/tailscale.test.ts (7 tests) 18ms

 Test Files  1 passed (1)
      Tests  7 passed (7)
   Start at  05:21:41
   Duration  366ms (import 49%, transform 23%, setup 21%, tests 6%, worker 1%)


~/packages/effect-codex-app-server$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/server/auth.test.ts (10 tests) 50ms
 โœ“ src/server/CursorAgentSdk.test.ts (1 test) 20ms
 โœ“ src/server/textGeneration.test.ts (8 tests) 61ms

 RUN  v5.0.5 /home/runner/_work/t3code/t3code/packages/effect-codex-app-server

 โœ“ src/server/transportFailure.test.ts (10 tests) 11ms
 โœ“ src/_internal/stdio.test.ts (1 test) 14ms
 โœ“ src/schema.test.ts (2 tests) 15ms
 โœ“ src/errors.test.ts (6 tests) 53ms
 โœ“ src/server/status.test.ts (8 tests) 29ms
 โœ“ src/server/CursorSdk.test.ts (2 tests) 14ms
 โœ“ src/agent.test.ts (6 tests) 49ms
 โœ“ src/server/accountCache.test.ts (2 tests) 2ms
 โœ“ src/server/driver.test.ts (2 tests) 47ms
 โœ“ src/server/adapter.test.ts (15 tests) 123ms
 โœ“ src/_internal/stdio.test.ts (1 test) 12ms
 โœ“ src/_internal/shared.test.ts (4 tests) 20ms
 โœ“ src/server/credentialStore.test.ts (5 tests) 27ms
 โœ“ src/server/CursorSdkCatalog.test.ts (1 test) 7ms

 Test Files  14 passed (14)
      Tests  87 passed (87)
   Start at  05:21:39
   Duration  2.91s (transform 47%, import 38%, setup 8%, tests 7%)


~/packages/provider-acp-registry$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/authorization/layer.test.ts (23 tests) 164ms

 RUN  v5.0.5 /home/runner/_work/t3code/t3code/packages/provider-acp-registry

 โœ“ src/protocol.test.ts (15 tests) 61ms
 โœ“ src/connection/supervisor.test.ts (30 tests) 254ms
 โœ“ src/state/runtime.test.ts (23 tests) 188ms
 โœ“ src/protocol.test.ts (21 tests) 791ms
   โœ“ effect-acp protocol (21)
     โœ“ does not emit a second process-exit error after a decode failure 383ms
 โœ“ src/schema.test.ts (4 tests) 19ms
 โœ“ src/rpc/session.test.ts (14 tests) 340ms
 โœ“ src/connection/registry.test.ts (41 tests) 350ms
 โœ“ src/client.test.ts (2 tests) 194ms

 Test Files  5 passed (5)
      Tests  26 passed (26)
   Start at  05:21:41
   Duration  1.49s (transform 43%, import 37%, setup 11%, tests 8%, worker 1%)


~/packages/provider-core$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/state/server.test.ts (19 tests) 46ms
 โœ“ src/state/threads-sync.test.ts (36 tests) 300ms

 RUN  v5.0.5 /home/runner/_work/t3code/t3code/packages/provider-core

 โœ“ src/operations/commands.test.ts (14 tests) 31ms
 โœ“ src/state/shell-sync.test.ts (6 tests) 116ms
 โœ“ src/voice-input/controller.test.ts (22 tests) 27ms
 โœ“ src/server/usageLimits.test.ts (7 tests) 3ms
 โœ“ src/state/pullRequests.test.ts (56 tests) 1376ms
   โœ“ returns a successful mutation when source invalidation stalls 1026ms
 โœ“ src/state/vcs.test.ts (9 tests) 124ms
 โœ“ src/state/environmentHttpAuth.test.ts (32 tests) 181ms
 โœ“ src/state/orchestrationV2Projection.test.ts (15 tests) 19ms
 โœ“ src/server/ModelCatalog.test.ts (4 tests) 4ms
 โœ“ src/server/AcpRegistryRuntimeCoordinator.test.ts (7 tests) 32ms
 โœ“ src/state/vcsAction.test.ts (9 tests) 54ms
 โœ“ src/connection/onboarding.test.ts (13 tests) 143ms
 โœ“ src/server/authenticationState.test.ts (3 tests) 72ms
 โœ“ src/state/entities.test.ts (16 tests) 8ms
 โœ“ src/relay/managedRelay.test.ts (7 tests) 111ms
 โœ“ src/state/threadCommands.test.ts (22 tests) 80ms
 โœ“ src/relay/discovery.test.ts (7 tests) 41ms
 โœ“ src/server/AcpRegistrySupport.test.ts (31 tests) 538ms
 โœ“ src/server/auth.test.ts (5 tests) 47ms
 โœ“ src/state/threads-atoms.test.ts (4 tests) 102ms
 โœ“ src/server/notification.test.ts (4 tests) 3ms
 โœ“ src/server/attachmentPrompt.test.ts (2 tests) 9ms
 โœ“ src/connection/routes.test.ts (19 tests) 16ms
 โœ“ src/server/providerAuthFlow.test.ts (17 tests) 59ms
 โœ“ src/server/failure.test.ts (10 tests) 33ms
 โœ“ src/server/managedProvider.test.ts (9 tests) 56ms
 โœ“ src/rpc/client.test.ts (8 tests) 50ms
 โœ“ src/server/snapshotProbe.test.ts (7 tests) 28ms
 โœ“ src/device/stream.test.ts (14 tests) 56ms
 โœ“ src/server/maintenanceResolver.test.ts (52 tests) 139ms
 โœ“ src/server/mcpSession.test.ts (2 tests) 5ms
 โœ“ src/state/threadShell.test.ts (9 tests) 59ms
 โœ“ src/server/driver.test.ts (9 tests) 11ms

 Test Files  5 passed (5)
      Tests  55 passed (55)
   Start at  05:21:43
   Duration  3.19s (transform 59%, import 30%, tests 6%, setup 4%)

 โœ“ src/server/processGroup.test.ts (2 tests) 20ms
 โœ“ src/server/instanceEnvironment.test.ts (4 tests) 15ms

~/packages/provider-acp$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/platform/storageDocument.test.ts (13 tests) 23ms
 โœ“ src/server/collectStreamText.test.ts (2 tests) 8ms
 โœ“ src/state/projectGrouping.test.ts (20 tests) 15ms
 โœ“ src/state/fileMetadata.test.ts (11 tests) 165ms
 โœ“ src/server/mcpToolPresentation.test.ts (4 tests) 7ms
 โœ“ src/server/threadTitleContext.test.ts (2 tests) 9ms

 RUN  v5.0.5 /home/runner/_work/t3code/t3code/packages/provider-acp

 โœ“ src/state/threadWorkflows.test.ts (21 tests) 10ms
 โœ“ src/state/commandPermissions.test.ts (14 tests) 64ms
 โœ“ src/server/textGenerationUtils.test.ts (3 tests) 16ms
 โœ“ src/server/stderr.test.ts (2 tests) 9ms
 โœ“ src/server/textGenerationPrompts.test.ts (1 test) 3ms

 Test Files  17 passed (17)
      Tests  132 passed (132)
   Start at  05:21:43
   Duration  3.08s (transform 47%, import 40%, setup 10%, tests 3%)

 โœ“ src/connection/resolver.test.ts (6 tests) 55ms
 โœ“ src/state/threadExecution.test.ts (11 tests) 30ms

~/packages/source-control-github$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/state/threadRelationships.test.ts (11 tests) 12ms
 โœ“ src/state/threadHistoryMerge.test.ts (7 tests) 5ms
 โœ“ src/mcpApps/host.test.ts (9 tests) 7ms

 RUN  v5.0.5 /home/runner/_work/t3code/t3code/packages/source-control-github

 โœ“ src/server/clientPolicy.test.ts (13 tests) 30ms
 โœ“ src/server/sessionConfig.test.ts (6 tests) 7ms
 โœ“ src/server/mcpOverAcpBridge.test.ts (3 tests) 71ms
 โœ“ src/connection/outdatedHostUpdate.test.ts (3 tests) 76ms
 โœ“ src/state/shellReducer.test.ts (14 tests) 5ms
 โœ“ src/state/threadDetail.test.ts (14 tests) 39ms
 โœ“ src/client.test.ts (26 tests) 5371ms
   โœ“ effect-acp client (19)
     โœ“ transforms fragmented stdout before parsing and preserves UTF-8 346ms
     โœ“ preserves stdout transform errors without logging rejected input 393ms
     โœ“ reports idle child termination and rejects later requests and notifications 430ms
     โœ“ initializes, prompts, receives updates, and handles permission requests 472ms
     โœ“ returns structured invalid params without exposing values from typed extension request payloads 512ms
     โœ“ preserves ACP v2 structured diff semantics 510ms
     โœ“ does not turn unsupported ACP v2 auth methods into agent login 559ms
     โœ“ preserves registry env-var authentication extensions 500ms
     โœ“ replays buffered notifications to handlers registered after they arrive 452ms
     โœ“ routes MCP-over-ACP connect, message, notification, and disconnect callbacks 486ms
     โœ“ preserves future content and session-update variants 533ms

 Test Files  6 passed (6)
      Tests  62 passed (62)
   Start at  05:21:41
   Duration  6.35s (tests 60%, transform 19%, import 16%, setup 4%)


~/packages/provider-muse$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/server/runtimeModel.test.ts (47 tests) 550ms
 โœ“ src/state/threadSort.test.ts (21 tests) 154ms
 โœ“ src/state/threadSnoozed.test.ts (20 tests) 20ms
 โœ“ src/state/projectCommands.test.ts (4 tests) 49ms
 โœ“ src/server/gitHubPullRequestJson.test.ts (49 tests) 37ms
stdout | src/state/serverUsage.test.ts > keeps the cached usage summary when the awaited refresh fails
[05:21:48.362] WARN (#49): Could not refresh slow usage sources. {
  errorType: 'error',
  errorName: 'UsageReadError',
  errorTag: 'UsageReadError',
  stack: '    at /home/runner/_work/t3code/t3code/packages/client-runtime/src/state/serverUsage.test.ts:289:21\n' +
    '    at Generator.next (<anonymous>)\n' +
    '    at ~effect/Effect/successCont (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:979:28)\n' +
    '    at ~effect/Effect/evaluate (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:991:25)\n' +
    '    at FiberImpl.runLoop (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:453:97)\n' +
    '    at FiberImpl.evaluate (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:402:23)\n' +
    '    at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:2474:9\n' +
    '    at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:2526:19\n' +
    '    at Module.<anonymous> (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:2537:31)\n' +
    '    at Array.<anonymous> (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@effect+vitest@4.0.5_patch_hash=2731c9c3761c595f25ddc625a7d61ca376b389d5b3049ecb837c894_729be65b0f3c6bde0309e4457c6d9256/node_modules/@effect/vitest/dist/internal/internal.js:26:31)'
}

 โœ“ src/state/serverUsage.test.ts (2 tests) 42ms

 RUN  v5.0.5 /home/runner/_work/t3code/t3code/packages/provider-muse

 โœ“ src/state/terminalSession.test.ts (9 tests) 47ms
 โœ“ src/operations/commands.performance.test.ts (1 test) 192ms
 โœ“ src/server/nativeLogging.test.ts (3 tests) 20ms
 โœ“ src/platform/shellCacheEncoding.test.ts (5 tests) 309ms
 โœ“ src/state/subagentRuntime.test.ts (11 tests) 19ms
 โœ“ src/authorization/remote.test.ts (5 tests) 28ms
 โœ“ src/state/threadRequests.test.ts (10 tests) 23ms
 โœ“ src/server/usageLimits.test.ts (4 tests) 6ms
 โœ“ src/work-log/commandLabel.test.ts (61 tests) 85ms
 โœ“ src/state/usage.test.ts (8 tests) 9ms
 โœ“ src/state/boundedThreadSnapshotHttp.test.ts (5 tests) 65ms
 โœ“ src/server/sdk.test.ts (12 tests) 154ms
 โœ“ src/server/gitHubGraphQlClient.test.ts (9 tests) 76ms
 โœ“ src/relay/managedRelayState.test.ts (4 tests) 32ms
 โœ“ src/server/itemPresentation.test.ts (6 tests) 13ms
 โœ“ src/device/duoControl.test.ts (12 tests) 23ms
 โœ“ src/server/GitHubCredentials.test.ts (5 tests) 69ms
 โœ“ src/server/GitHubRest.test.ts (8 tests) 89ms
 โœ“ src/device/duoViewer.test.ts (2 tests) 17ms
 โœ“ src/projectFaviconCache.test.ts (8 tests) 177ms
 โœ“ src/server/githubStackActions.test.ts (9 tests) 93ms
 โœ“ src/pullRequestQuery.test.ts (17 tests) 25ms
 โœ“ src/server/GitHubPullRequestProvider.test.ts (17 tests) 45ms
 โœ“ src/server/protocol.test.ts (1 test) 4ms
 โœ“ src/state/threadSubagents.test.ts (7 tests) 10ms
 โœ“ src/work-log/presentation.test.ts (16 tests) 15ms
 โœ“ src/state/itemSupport.test.ts (2 tests) 3ms
 โœ“ src/server/gitHubRepositoryResolution.test.ts (3 tests) 7ms
 โœ“ src/server/GitHubQuota.test.ts (4 tests) 21ms
 โœ“ src/connection/diagnosis.test.ts (7 tests) 10ms
 โœ“ src/server/GitHubPullRequestApi.test.ts (105 tests) 705ms
 โœ“ src/server/modelCatalog.test.ts (1 test) 6ms
 โœ“ src/connection/presentation.test.ts (4 tests) 4ms
 โœ“ src/preview/serverBrowserStream.test.ts (5 tests) 8ms
 โœ“ src/state/presentation.test.ts (3 tests) 13ms
 โœ“ src/server/usage.test.ts (12 tests) 40ms
 โœ“ src/pullRequestMarkdown.test.ts (15 tests) 6ms
 โœ“ src/server/maintenance.test.ts (3 tests) 37ms
 โœ“ src/device/phoneViewer.test.ts (1 test) 30ms
 โœ“ src/server/textGeneration.test.ts (8 tests) 49ms
 โœ“ src/pullRequestLinkInput.test.ts (14 tests) 7ms
 โœ“ src/state/projectEntities.test.ts (2 tests) 15ms
 โœ“ src/server/clientTerminals.test.ts (10 tests) 3589ms
   โœ“ AcpClientTerminals (9)
     โœ“ bounds unreleased terminal handles without invalidating existing ids 2921ms

 Test Files  7 passed (7)
      Tests  84 passed (84)
   Start at  05:21:46
   Duration  4.36s (tests 46%, transform 32%, import 15%, setup 7%)

 โœ“ src/server/status.test.ts (3 tests) 193ms

~/oxlint-plugin-t3code$ vp test run --config ../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/device/avcConfig.test.ts (8 tests) 5ms
 โœ“ src/server/adapter.test.ts (39 tests) 196ms

 Test Files  10 passed (10)
      Tests  89 passed (89)
   Start at  05:21:48
   Duration  2.64s (transform 55%, import 32%, setup 8%, tests 5%)


~/packages/ssh$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/platform/orchestrationCache.test.ts (3 tests) 12ms
 โœ“ src/handoff.test.ts (8 tests) 3ms
 โœ“ src/providerSkills.test.ts (6 tests) 3ms
 โœ“ src/state/threadFeedback.test.ts (4 tests) 3ms

 RUN  v5.0.5 /home/runner/_work/t3code/t3code/oxlint-plugin-t3code


 RUN  v5.0.5 /home/runner/_work/t3code/t3code/packages/ssh

 โœ“ src/reviewGuideTour.test.ts (7 tests) 8ms
 โœ“ src/threadPullRequestCompatibility.test.ts (10 tests) 8ms
 โœ“ src/device/phoneScene.test.ts (8 tests) 106ms
 โœ“ src/state/usageProgress.test.ts (4 tests) 3ms
 โœ“ src/operations/projects.test.ts (6 tests) 9ms
 โœ“ src/device/phoneInteraction.test.ts (4 tests) 15ms
 โœ“ src/device/model.test.ts (4 tests) 12ms
 โœ“ src/auth.test.ts (2 tests) 53ms
 โœ“ src/device/duoScene.test.ts (2 tests) 37ms
stdout | src/command.test.ts > ssh command > preserves process output: default head
[05:21:52.078] WARN (#40): ssh.command.failed {
  alias: 'synthetic-fixture',
  hostname: 'synthetic-fixture',
  username: null,
  port: null,
  command: [
    'ssh',
    '-o',
    'BatchMode=yes',
    '-o',
    'ConnectTimeout=10',
    '--',
    'synthetic-fixture'
  ],
  exitCode: 1,
  stdout: 'HEAD\n' +
    'verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbo\n' +
    '[truncated]',
  stderr: ''
}

 โœ“ src/server/GitHubSourceControlProvider.test.ts (29 tests) 2138ms
   โœ“ keeps Enterprise operations on the selected remote: git@code.example.test:team/project.git 629ms
   โœ“ keeps Enterprise operations on the selected remote: ssh://git@code.example.test/team/project.git 653ms
   โœ“ keeps Enterprise operations on the selected remote: https://code.example.test/team/project.git 640ms

 Test Files  10 passed (10)
      Tests  238 passed (238)
   Start at  05:21:47
   Duration  4.75s (transform 50%, import 28%, tests 16%, setup 5%)

stdout | src/command.test.ts > ssh command > preserves process output: opt-in tail
[05:21:52.134] WARN (#53): ssh.command.failed {
  alias: 'synthetic-fixture',
  hostname: 'synthetic-fixture',
  username: null,
  port: null,
  command: [
    'ssh',
    '-o',
    'BatchMode=yes',
    '-o',
    'ConnectTimeout=10',
    '--',
    'synthetic-fixture'
  ],
  exitCode: 1,
  stdout: '[truncated]\n' +
    'bose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix verbose-prefix {"credential":"[redacted]"}\n' +
    'PANIC: emulator SDK is broken\n',
  stderr: 'stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure stderr failure '
}

 โœ“ src/config.test.ts (4 tests) 90ms

~/scripts$ vp test run --config ../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/command.test.ts (7 tests) 281ms
 โœ“ src/state/attachments.test.ts (3 tests) 18ms
 โœ“ src/state/filesystem.test.ts (8 tests) 11ms
 โœ“ src/tunnel.test.ts (7 tests) 179ms

 Test Files  4 passed (4)
      Tests  20 passed (20)
   Start at  05:21:51
   Duration  1.01s (import 38%, transform 24%, tests 23%, setup 15%, worker 1%)

 โœ“ src/connection/errors.test.ts (5 tests) 5ms

~/apps/mobile$ vp test run --project unit --project react โŠ˜ cache disabled
 โœ“ src/t3ToolSummary.test.ts (3 tests) 9ms

 RUN  v5.0.5 /home/runner/_work/t3code/t3code/scripts

 โœ“ src/mediaSource.test.ts (8 tests) 16ms

 RUN  v5.0.5 /home/runner/_work/t3code/t3code/apps/mobile

 โœ“ src/state/sharedSettings.test.ts (9 tests) 18ms
 โœ“ src/state/threadSearch.test.ts (4 tests) 82ms
 โœ“ src/state/turnItemPresentation.test.ts (2 tests) 3ms
 โœ“ src/work-log/toolPresentation.test.ts (4 tests) 7ms
 โœ“ src/connection/compatibility.test.ts (4 tests) 16ms
 โœ“ src/device/streamFrames.test.ts (1 test) 7ms
 โœ“ lib/third-party-licenses.test.ts (19 tests) 189ms
 โœ“ src/state/providerInstanceDisplay.test.ts (10 tests) 12ms
 โœ“ src/device/modelScene.test.ts (2 tests) 23ms
 โœ“ src/promptLinks.test.ts (3 tests) 9ms
 โœ“ notify-discord-release.test.ts (15 tests) 226ms
 โœ“ src/state/serverConfigProjection.test.ts (2 tests) 3ms
 โœ“ src/state/queryPersistence.test.ts (3 tests) 52ms
 โœ“ src/device/deviceMotion.test.ts (2 tests) 8ms
 โœ“  react  src/native/NativeHeaderToolbar.test.tsx (4 tests) 80ms
 โœ“ src/state/customSnooze.test.ts (11 tests) 9ms
 โœ“ src/state/threadInbox.test.ts (2 tests) 3ms
 โœ“ legend-list-initial-reveal.test.ts (10 tests) 58ms
 โœ“  react  src/components/ui/Dialog.android.test.tsx (1 test) 116ms
 โœ“ merge-update-manifests.test.ts (5 tests) 21ms
 โœ“ src/state/usageAccess.test.ts (8 tests) 12ms
 โœ“ src/state/auth.test.ts (2 tests) 3ms
 โœ“ dev-runner.test.ts (31 tests) 349ms
 โœ“ src/errors/safeLog.test.ts (2 tests) 18ms
 โœ“ build-npm-launcher.test.ts (1 test) 960ms
   โœ“ build-npm-launcher (1)
     โœ“ publishes a launcher that downloads, verifies, caches, and runs the release executable 933ms
 โœ“ src/markdownImages.test.ts (12 tests) 11ms
 โœ“ src/work-log/itemDetail.test.ts (2 tests) 4ms
 โœ“ lib/cli-external-packages.test.ts (10 tests) 801ms
   โœ“ external package dependency closure (1)
     โœ“ keeps every runtime dependency of an external package external too 751ms
 โœ“ src/filePreview.test.ts (3 tests) 65ms
 โœ“ lib/dev-share.test.ts (5 tests) 20ms
 โœ“ update-release-package-versions.test.ts (3 tests) 95ms
 โœ“ src/errors/transport.test.ts (3 tests) 9ms
 โœ“ src/state/threadHistoryController.test.ts (1 test) 15ms
 โœ“ src/mediaReference.test.ts (7 tests) 4ms
 โœ“ lib/public-config.test.ts (1 test) 5ms
 โœ“ src/relay/errorPresentation.test.ts (3 tests) 10ms
 โœ“ mock-update-server.test.ts (2 tests) 114ms
 โœ“ src/userMessage.test.ts (3 tests) 8ms
 โœ“ lib/resolve-catalog.test.ts (2 tests) 2ms
 โœ“ src/device/duoSnap.test.ts (1 test) 10ms
 โœ“ mobile-native-client.test.ts (2 tests) 81ms
 โœ“ src/state/assets.test.ts (1 test) 12ms
 โœ“ src/state/commandOutput.test.ts (1 test) 5ms
 โœ“ src/device/renderScheduler.test.ts (1 test) 5ms
 โœ“ src/device/androidFoldScene.test.ts (1 test) 83ms
 โœ“ lib/build-target-arch.test.ts (1 test) 6ms
 โœ“ mobile-showcase.test.ts (3 tests) 7ms
 โœ“ sync-reference-repos.test.ts (2 tests) 39ms
 โœ“ src/work-log/scrollAnchor.test.ts (1 test) 2ms
 โœ“ src/errors/errorTrace.test.ts (2 tests) 11ms
 โœ“ resolve-previous-release-tag.test.ts (3 tests) 6ms
 โœ“ src/environment/endpoint.test.ts (1 test) 5ms
 โœ“ src/state/archivedThreads.test.ts (1 test) 8ms
 โœ“ lib/icon-export.test.ts (1 test) 6ms
 โœ“ src/secretRequest.test.ts (2 tests) 14ms

 Test Files  120 passed (120)
      Tests  1121 passed (1121)
   Start at  05:21:40
   Duration  16.33s (import 50%, transform 29%, setup 12%, tests 8%, worker 1%)

     Import  492 modules were evaluated 8723 times ยท 46.61s total, 50% of tracked time
             ~5.27s faster with isolate: false โ€” shared modules are evaluated once per worker instead of once per file
             learn more: https://vitest.dev/guide/improving-performance#test-isolation

 โœ“ mobile-native-static-check.test.ts (2 tests) 7ms

 โœ“  react  src/features/settings/components/BranchNamingSettings.test.tsx (4 tests) 43ms
 โœ“  react  src/state/use-selected-thread-git-actions.test.tsx (1 test) 37ms
 โœ“ build-desktop-artifact.test.ts (42 tests) 3381ms
   โœ“ build-desktop-artifact (40)
     โœ“ rejects overlapping builds from another process until restoration finishes 1816ms
     โœ“ builds web, server and desktop with the resolved version, restores changed manifests and preserves edits to matching ones 443ms
 โœ“  unit  src/lib/threadActivity.test.ts (35 tests) 64ms
 โœ“  unit  src/lib/modelOptions.test.ts (29 tests) 17ms
 โœ“  unit  src/features/threads/threadListV2.test.ts (56 tests) 83ms
 โœ“  unit  src/state/thread-outbox.test.ts (35 tests) 71ms
 โœ“  unit  src/features/agent-awareness/remoteRegistration.test.ts (15 tests) 326ms
 โœ“  react  src/features/settings/SettingsServerControlsRouteScreen.test.tsx (1 test) 30ms
stderr | src/state/use-composer-drafts.test.ts > mobile composer drafts > restores deleted file chips and releases undo history (uploaded: false)
[composer-attachments] could not remove local file TypeError: file.delete is not a function
    at removePersistedComposerAttachmentFile (/home/runner/_work/t3code/t3code/apps/mobile/src/lib/composerImages.ts:223:12)
    at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    at releaseUnusedComposerAttachmentFiles (/home/runner/_work/t3code/t3code/apps/mobile/src/state/use-composer-drafts.ts:924:5)

Sourcemap for "/home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-file-system@58.0.9_expo@58.0.14_react-native@0.88.0_@babel+core@7.29.7_supports-co_dba9ef97a37b898651a8aa6fe892beee/node_modules/expo-file-system/build/index.js" points to missing source files
 โœ“  unit  src/lib/composerFiles.test.ts (36 tests) 29ms
Sourcemap for "/home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-file-system@58.0.9_expo@58.0.14_react-native@0.88.0_@babel+core@7.29.7_supports-co_dba9ef97a37b898651a8aa6fe892beee/node_modules/expo-file-system/build/Paths.js" points to missing source files
Sourcemap for "/home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-file-system@58.0.9_expo@58.0.14_react-native@0.88.0_@babel+core@7.29.7_supports-co_dba9ef97a37b898651a8aa6fe892beee/node_modules/expo-file-system/build/Directory.js" points to missing source files
Sourcemap for "/home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-file-system@58.0.9_expo@58.0.14_react-native@0.88.0_@babel+core@7.29.7_supports-co_dba9ef97a37b898651a8aa6fe892beee/node_modules/expo-file-system/build/ExpoFileSystem.js" points to missing source files
Sourcemap for "/home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-modules-core@58.0.22_patch_hash=f0b0fd100550ed76e5c25b4d13eb7c9ff62825f8f197c53edf_6a1c9e707e4caac0e11bcdf133fd5ef6/node_modules/expo-modules-core/build/index.js" points to missing source files
Sourcemap for "/home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-modules-core@58.0.22_patch_hash=f0b0fd100550ed76e5c25b4d13eb7c9ff62825f8f197c53edf_6a1c9e707e4caac0e11bcdf133fd5ef6/node_modules/expo-modules-core/build/ts-declarations/global.js" points to missing source files
Sourcemap for "/home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-modules-core@58.0.22_patch_hash=f0b0fd100550ed76e5c25b4d13eb7c9ff62825f8f197c53edf_6a1c9e707e4caac0e11bcdf133fd5ef6/node_modules/expo-modules-core/build/ts-declarations/EventEmitter.js" points to missing source files
Sourcemap for "/home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-modules-core@58.0.22_patch_hash=f0b0fd100550ed76e5c25b4d13eb7c9ff62825f8f197c53edf_6a1c9e707e4caac0e11bcdf133fd5ef6/node_modules/expo-modules-core/build/ts-declarations/NativeModule.js" points to missing source files
Sourcemap for "/home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-modules-core@58.0.22_patch_hash=f0b0fd100550ed76e5c25b4d13eb7c9ff62825f8f197c53edf_6a1c9e707e4caac0e11bcdf133fd5ef6/node_modules/expo-modules-core/build/ts-declarations/SharedObject.js" points to missing source files
Sourcemap for "/home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-modules-core@58.0.22_patch_hash=f0b0fd100550ed76e5c25b4d13eb7c9ff62825f8f197c53edf_6a1c9e707e4caac0e11bcdf133fd5ef6/node_modules/expo-modules-core/build/ts-declarations/SharedRef.js" points to missing source files
Sourcemap for "/home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-modules-core@58.0.22_patch_hash=f0b0fd100550ed76e5c25b4d13eb7c9ff62825f8f197c53edf_6a1c9e707e4caac0e11bcdf133fd5ef6/node_modules/expo-modules-core/build/sweet/setUpJsLogger.fx.js" points to missing source files
Sourcemap for "/home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-modules-core@58.0.22_patch_hash=f0b0fd100550ed76e5c25b4d13eb7c9ff62825f8f197c53edf_6a1c9e707e4caac0e11bcdf133fd5ef6/node_modules/expo-modules-core/build/errors/CodedError.js" points to missing source files
Sourcemap for "/home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-modules-core@58.0.22_patch_hash=f0b0fd100550ed76e5c25b4d13eb7c9ff62825f8f197c53edf_6a1c9e707e4caac0e11bcdf133fd5ef6/node_modules/expo-modules-core/build/requireNativeModule.js" points to missing source files
stderr | src/state/use-composer-drafts.test.ts > mobile composer drafts > restores deleted file chips and releases undo history (uploaded: false)
[composer-attachments] could not remove local file Error [RolldownError]: Parse failure: Parse failed with 1 error:
Flow is not supported
1: /**
   ^
2:  * Copyright (c) Meta Platforms, Inc. and affiliates.
 โœ“  unit  src/lib/attachmentUpload.test.ts (28 tests) 38ms
3:  *
At file: /@fs/home/runner/_work/t3code/t3code/node_modules/.pnpm/react-native@0.88.0_@babel+core@7.29.7_supports-color@8.1.1__@react-native+metro-config_4bbd3f1473e0b719a3b6bb196a69f292/node_modules/react-native/index.js:1:0
    at error (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/rolldown/shared/logs-D6uA606S.mjs:166:24)
    at normalizeParseError (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/rolldown/parse-ast-index.mjs:25:9)
    at wrap (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/rolldown/parse-ast-index.mjs:5:39)
    at parseAstAsync (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/rolldown/parse-ast-index.mjs:54:9)
    at async ssrTransformScript (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/chunks/node.js:21140:9)
    at async loadAndTransform (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/chunks/node.js:25564:64) {
  cause: undefined,
  __vitest_rollup_error__: {
    plugin: undefined,
    id: '/@fs/home/runner/_work/t3code/t3code/node_modules/.pnpm/react-native@0.88.0_@babel+core@7.29.7_supports-color@8.1.1__@react-native+metro-config_4bbd3f1473e0b719a3b6bb196a69f292/node_modules/react-native/index.js',
    loc: {
      line: 1,
      column: 0,
      file: '/@fs/home/runner/_work/t3code/t3code/node_modules/.pnpm/react-native@0.88.0_@babel+core@7.29.7_supports-color@8.1.1__@react-native+metro-config_4bbd3f1473e0b719a3b6bb196a69f292/node_modules/react-native/index.js'
    },
    frame: '1  |  /**\n' +
      '   |  ^\n' +
      '2  |   * Copyright (c) Meta Platforms, Inc. and affiliates.\n' +
      '3  |   *'
  },
  runnerError: Error: RunnerError
      at reviveInvokeError (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:553:64)
      at Object.invoke (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:568:33)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async VitestModuleRunner.getModuleInformation (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:1217:7)
      at async request (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:1234:83)
      at /home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-modules-core@58.0.22_patch_hash=f0b0fd100550ed76e5c25b4d13eb7c9ff62825f8f197c53edf_6a1c9e707e4caac0e11bcdf133fd5ef6/node_modules/expo-modules-core/build/requireNativeModule.ts:1:1
      at async VitestModuleEvaluator._runInlinedModule (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/module-evaluator.js:261:4)
      at async VitestModuleRunner.directRequest (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:1277:59)
      at async VitestModuleRunner.cachedRequest (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:1184:73)
      at /home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-modules-core@58.0.22_patch_hash=f0b0fd100550ed76e5c25b4d13eb7c9ff62825f8f197c53edf_6a1c9e707e4caac0e11bcdf133fd5ef6/node_modules/expo-modules-core/build/sweet/sweet/setUpJsLogger.fx.ts:2:1
}
[composer-attachments] could not remove local file Error [RolldownError]: Parse failure: Parse failed with 1 error:
Flow is not supported
1: /**
   ^
2:  * Copyright (c) Meta Platforms, Inc. and affiliates.
3:  *
At file: /@fs/home/runner/_work/t3code/t3code/node_modules/.pnpm/react-native@0.88.0_@babel+core@7.29.7_supports-color@8.1.1__@react-native+metro-config_4bbd3f1473e0b719a3b6bb196a69f292/node_modules/react-native/index.js:1:0
    at error (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/rolldown/shared/logs-D6uA606S.mjs:166:24)
    at normalizeParseError (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/rolldown/parse-ast-index.mjs:25:9)
    at wrap (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/rolldown/parse-ast-index.mjs:5:39)
    at parseAstAsync (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/rolldown/parse-ast-index.mjs:54:9)
    at async ssrTransformScript (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/chunks/node.js:21140:9)
    at async loadAndTransform (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/chunks/node.js:25564:64) {
  cause: undefined,
  __vitest_rollup_error__: {
    plugin: undefined,
    id: '/@fs/home/runner/_work/t3code/t3code/node_modules/.pnpm/react-native@0.88.0_@babel+core@7.29.7_supports-color@8.1.1__@react-native+metro-config_4bbd3f1473e0b719a3b6bb196a69f292/node_modules/react-native/index.js',
    loc: {
      line: 1,
      column: 0,
      file: '/@fs/home/runner/_work/t3code/t3code/node_modules/.pnpm/react-native@0.88.0_@babel+core@7.29.7_supports-color@8.1.1__@react-native+metro-config_4bbd3f1473e0b719a3b6bb196a69f292/node_modules/react-native/index.js'
    },
    frame: '1  |  /**\n' +
      '   |  ^\n' +
      '2  |   * Copyright (c) Meta Platforms, Inc. and affiliates.\n' +
      '3  |   *'
  },
  runnerError: Error: RunnerError
      at reviveInvokeError (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:553:64)
      at Object.invoke (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:568:33)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async VitestModuleRunner.getModuleInformation (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:1217:7)
      at async request (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:1234:83)
      at /home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-modules-core@58.0.22_patch_hash=f0b0fd100550ed76e5c25b4d13eb7c9ff62825f8f197c53edf_6a1c9e707e4caac0e11bcdf133fd5ef6/node_modules/expo-modules-core/build/requireNativeModule.ts:1:1
      at async VitestModuleEvaluator._runInlinedModule (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/module-evaluator.js:261:4)
      at async VitestModuleRunner.directRequest (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:1277:59)
      at async VitestModuleRunner.cachedRequest (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:1184:73)
      at /home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-modules-core@58.0.22_patch_hash=f0b0fd100550ed76e5c25b4d13eb7c9ff62825f8f197c53edf_6a1c9e707e4caac0e11bcdf133fd5ef6/node_modules/expo-modules-core/build/sweet/sweet/setUpJsLogger.fx.ts:2:1
}

stderr | src/state/use-composer-drafts.test.ts > mobile composer drafts > restores deleted file chips and releases undo history (uploaded: true)
[composer-attachments] could not verify incoming share ownership {
  _tag: 'IncomingShareStorageError',
  operation: 'load',
  shareId: null,
  cause: Error [RolldownError]: Parse failure: Parse failed with 1 error:
  Flow is not supported
  1: /**
     ^
  2:  * Copyright (c) Meta Platforms, Inc. and affiliates.
  3:  *
  At file: /@fs/home/runner/_work/t3code/t3code/node_modules/.pnpm/react-native@0.88.0_@babel+core@7.29.7_supports-color@8.1.1__@react-native+metro-config_4bbd3f1473e0b719a3b6bb196a69f292/node_modules/react-native/index.js:1:0
      at error (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/rolldown/shared/logs-D6uA606S.mjs:166:24)
      at normalizeParseError (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/rolldown/parse-ast-index.mjs:25:9)
      at wrap (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/rolldown/parse-ast-index.mjs:5:39)
      at parseAstAsync (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/rolldown/parse-ast-index.mjs:54:9)
      at async ssrTransformScript (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/chunks/node.js:21140:9)
      at async loadAndTransform (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/chunks/node.js:25564:64) {
    cause: undefined,
    __vitest_rollup_error__: {
      plugin: undefined,
      id: '/@fs/home/runner/_work/t3code/t3code/node_modules/.pnpm/react-native@0.88.0_@babel+core@7.29.7_supports-color@8.1.1__@react-native+metro-config_4bbd3f1473e0b719a3b6bb196a69f292/node_modules/react-native/index.js',
      loc: [Object],
      frame: '1  |  /**\n' +
        '   |  ^\n' +
        '2  |   * Copyright (c) Meta Platforms, Inc. and affiliates.\n' +
        '3  |   *'
    },
    runnerError: Error: RunnerError
        at reviveInvokeError (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:553:64)
        at Object.invoke (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:568:33)
        at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
        at async VitestModuleRunner.getModuleInformation (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:1217:7)
 โœ“ knip-schemas.test.ts (1 test) 6859ms
        at async request (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:1234:83)
   โœ“ allows types and schemas through the real Knip CLI without hiding runtime or file findings 6858ms
        at /home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-modules-core@58.0.22_patch_hash=f0b0fd100550ed76e5c25b4d13eb7c9ff62825f8f197c53edf_6a1c9e707e4caac0e11bcdf133fd5ef6/node_modules/expo-modules-core/build/requireNativeModule.ts:1:1
        at async VitestModuleEvaluator._runInlinedModule (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/module-evaluator.js:261:4)
        at async VitestModuleRunner.directRequest (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:1277:59)
        at async VitestModuleRunner.cachedRequest (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@voidzero-dev+vite-plus-core@1.3.0_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@volar+_298b27adb89a86e0d0a0a5c4125affc4/node_modules/@voidzero-dev/vite-plus-core/dist/vite/node/module-runner.js:1184:73)
        at /home/runner/_work/t3code/t3code/node_modules/.pnpm/expo-modules-core@58.0.22_patch_hash=f0b0fd100550ed76e5c25b4d13eb7c9ff62825f8f197c53edf_6a1c9e707e4caac0e11bcdf133fd5ef6/node_modules/expo-modules-core/build/sweet/sweet/setUpJsLogger.fx.ts:2:1
  }
}


 Test Files  21 passed (21)
      Tests  161 passed (161)
   Start at  05:21:52
   Duration  7.77s (tests 45%, import 25%, transform 16%, setup 13%)

    Isolate  21 workers spawned ยท ~215ms startup each (spawn + environment, per file)
             at least ~430ms faster with isolate: false โ€” reuses workers across files instead of one per file

 โœ“  unit  src/features/sharing/incoming-share-model.test.ts (19 tests) 16ms

stderr | src/state/use-composer-drafts.test.ts > mobile composer drafts > preserves saved drafts and attachment files when the draft read fails
[composer-drafts] failed to hydrate drafts {
  _tag: 'ComposerDraftPersistenceError',
  operation: 'read',
  directory: 'composer-drafts',
  fileName: 'drafts.json',
  cause: Error: storage unavailable
      at /home/runner/_work/t3code/t3code/apps/mobile/src/state/use-composer-drafts.test.ts:1977:45
      at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2886:64
      at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:1632:35
      at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:26
      at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3338:20
      at new Promise (<anonymous>)
      at runWithCancel (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3333:10)
      at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3318:20
      at new Promise (<anonymous>)
      at runWithTimeout (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3276:10)
}

stderr | src/state/use-composer-drafts.test.ts > mobile composer drafts > preserves saved drafts and attachment files when the draft read fails
[composer-drafts] failed to hydrate drafts {
  _tag: 'ComposerDraftPersistenceError',
  operation: 'read',
  directory: 'composer-drafts',
  fileName: 'drafts.json',
  cause: Error: storage unavailable
      at /home/runner/_work/t3code/t3code/apps/mobile/src/state/use-composer-drafts.test.ts:1977:45
      at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2886:64
      at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:1632:35
      at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:26
      at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3338:20
      at new Promise (<anonymous>)
      at runWithCancel (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3333:10)
      at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3318:20
      at new Promise (<anonymous>)
      at runWithTimeout (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3276:10)
}

stderr | src/state/use-composer-drafts.test.ts > mobile composer drafts > preserves saved drafts and attachment files when the draft decode fails
[composer-drafts] failed to hydrate drafts {
  _tag: 'ComposerDraftPersistenceError',
  operation: 'decode',
  directory: 'composer-drafts',
  fileName: 'drafts.json',
  cause: {
    _tag: 'SchemaError',
    message: 'Expected 1\n  at ["schemaVersion"]'
  }
}

stderr | src/state/use-composer-drafts.test.ts > mobile composer drafts > preserves saved drafts and attachment files when the draft decode fails
[composer-drafts] failed to hydrate drafts {
  _tag: 'ComposerDraftPersistenceError',
  operation: 'decode',
  directory: 'composer-drafts',
  fileName: 'drafts.json',
  cause: {
    _tag: 'SchemaError',
    message: 'Expected 1\n  at ["schemaVersion"]'
  }
}

stderr | src/state/use-thread-outbox-drain.test.ts > thread outbox drain delivery cleanup > removes an acknowledged outbox item even when the sign-out archive write fails
[thread-outbox] could not update sign-out snapshot after delivery {
  messageId: 'archive-write-failure',
  error: {
    _tag: 'ComposerDraftPersistenceError',
    operation: 'write',
    directory: 'composer-drafts',
    fileName: 'drafts.json',
    cause: Error: Draft storage unavailable
        at /home/runner/_work/t3code/t3code/apps/mobile/src/state/use-thread-outbox-drain.test.ts:335:37
        at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
        at async file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:20
  }
}

stderr | src/state/use-thread-outbox-drain.test.ts > thread outbox drain delivery cleanup > retries only cleanup after an acknowledged send removal fails
[thread-outbox] failed to remove acknowledged queued message {
  environmentId: 'environment-1',
  threadId: 'thread-1',
  messageId: 'message-acknowledged',
  error: {
    _tag: 'ThreadOutboxManagerError',
    operation: 'remove',
    environmentId: 'environment-1',
    threadId: 'thread-1',
    messageId: 'message-acknowledged',
    cause: Error: storage unavailable
        at /home/runner/_work/t3code/t3code/apps/mobile/src/state/use-thread-outbox-drain.test.ts:399:55
        at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:1632:35
        at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:26
        at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3338:20
        at new Promise (<anonymous>)
        at runWithCancel (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3333:10)
        at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3318:20
        at new Promise (<anonymous>)
        at runWithTimeout (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3276:10)
        at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3904:64
 โœ“  unit  src/state/use-thread-outbox-drain.test.ts (23 tests) 49ms
  }
}

stderr | src/state/use-thread-outbox-drain.test.ts > thread outbox delivered creation recovery > retries a failed removal without duplicating recovered draft content
[thread-outbox] could not remove recovered pending task Error: storage unavailable
    at /home/runner/_work/t3code/t3code/apps/mobile/src/state/use-thread-outbox-drain.test.ts:557:30
    at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:1632:35
    at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:26
    at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3338:20
    at new Promise (<anonymous>)
    at runWithCancel (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3333:10)
    at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3318:20
    at new Promise (<anonymous>)
    at runWithTimeout (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3276:10)
    at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3904:64

stderr | src/state/use-thread-outbox-drain.test.ts > thread outbox delivered creation recovery > keeps the queue entry when the recovered draft cannot persist
[thread-outbox] could not hand an edited pending task to the composer {
  _tag: 'ComposerDraftPersistenceError',
  operation: 'write',
  directory: 'composer-drafts',
  fileName: 'drafts.json',
  cause: Error: disk full
      at /home/runner/_work/t3code/t3code/apps/mobile/src/state/use-thread-outbox-drain.test.ts:583:37
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:20
}

stderr | src/state/use-thread-outbox-drain.test.ts > thread outbox recovery rollback > rolls a failed recovery merge back so the retry cannot duplicate the text
[thread-outbox] failed to persist a recovery rollback {
  _tag: 'ComposerDraftPersistenceError',
  operation: 'write',
  directory: 'composer-drafts',
  fileName: 'drafts.json',
  cause: Error: disk full
      at /home/runner/_work/t3code/t3code/apps/mobile/src/state/use-thread-outbox-drain.test.ts:733:37
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:20
}

stderr | src/state/use-thread-outbox-drain.test.ts > thread outbox recovery rollback > rolls a failed recovery merge back so the retry cannot duplicate the text
[thread-outbox] failed to restore an undeliverable message {
  _tag: 'ComposerDraftPersistenceError',
  operation: 'write',
  directory: 'composer-drafts',
  fileName: 'drafts.json',
  cause: Error: disk full
      at /home/runner/_work/t3code/t3code/apps/mobile/src/state/use-thread-outbox-drain.test.ts:733:37
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:20
}

 โœ“  unit  src/state/use-composer-drafts.test.ts (74 tests) 701ms
   โœ“ mobile composer drafts (74)
     โœ“ restores deleted file chips and releases undo history (uploaded: false) 337ms
 โœ“  unit  src/features/home/useThreadListActions.test.ts (37 tests) 15ms
 โœ“  unit  src/native/workspace-stack-projection.test.ts (22 tests) 12ms
 โœ“ rules/no-polling-loop-in-tests.test.ts (16 tests) 9207ms
   โœ“ t3code/no-polling-loop-in-tests (15)
     โœ“ allows a fixed-count flush followed by unrelated error handling (1)
       โœ“ passes 631ms
     โœ“ allows a fixed-N flush with a literal bound (1)
       โœ“ passes 617ms
     โœ“ allows a fixed-N while flush with a counter bound (1)
       โœ“ passes 979ms
     โœ“ allows a fixed-N do-while flush against a named bound (1)
       โœ“ passes 828ms
     โœ“ allows a loop that takes from a queue (1)
       โœ“ passes 874ms
     โœ“ ignores waits inside nested callbacks (1)
       โœ“ passes 856ms
     โœ“ reports a budgeted yieldNow poll that dies after the loop (1)
       โœ“ reports the rule diagnostic 632ms
     โœ“ reports a while loop spinning on a predicate (1)
       โœ“ reports the rule diagnostic 409ms
     โœ“ reports a while loop bounded by a length predicate (1)
       โœ“ reports the rule diagnostic 337ms
     โœ“ reports a comparison against an identifier the loop never advances (1)
       โœ“ reports the rule diagnostic 443ms
     โœ“ reports a for loop bounded by a length predicate (1)
       โœ“ reports the rule diagnostic 404ms
     โœ“ reports a sleep poll with a counter bound and an early return (1)
       โœ“ reports the rule diagnostic 427ms
     โœ“ reports a microtask poll keyed on the loop condition (1)
       โœ“ reports the rule diagnostic 445ms
     โœ“ reports an awaited setTimeout poll (1)
       โœ“ reports the rule diagnostic 437ms
     โœ“ reports an awaited Promise.resolve poll that breaks (1)
       โœ“ reports the rule diagnostic 416ms
   โœ“ ignores non-test files (1)
     โœ“ passes 447ms
 โœ“ rules/no-real-time-wait-in-tests.test.ts (16 tests) 9397ms
   โœ“ t3code/no-real-time-wait-in-tests (15)
     โœ“ allows TestClock-driven sleeps and timeout safety nets (1)
       โœ“ passes 621ms
     โœ“ ignores sleeps inside strings and child-process script templates (1)
       โœ“ passes 670ms
     โœ“ ignores shared helpers in files that drive the TestClock (1)
       โœ“ passes 784ms
     โœ“ ignores bare setTimeout callbacks outside promise executors (1)
       โœ“ passes 863ms
     โœ“ reports Effect.sleep under it.live (1)
       โœ“ reports the rule diagnostic 888ms
     โœ“ reports retry schedules under curried testers (1)
       โœ“ reports the rule diagnostic 832ms
     โœ“ reports Effect.delay under plain it (1)
       โœ“ reports the rule diagnostic 694ms
     โœ“ reports it.effect inside an excludeTestServices layer as a real-clock wait (1)
       โœ“ reports the rule diagnostic 438ms
     โœ“ reports it.effect sleeps in files that never adjust the TestClock (1)
       โœ“ reports the rule diagnostic 414ms
     โœ“ reports polling helpers even when the file drives the TestClock (1)
       โœ“ reports the rule diagnostic 435ms
     โœ“ reports promise-wrapped setTimeout in vitest tests (1)
       โœ“ reports the rule diagnostic 417ms
     โœ“ reports promise-wrapped setTimeout under it.effect as a mixed clock (1)
       โœ“ reports the rule diagnostic 386ms
     โœ“ reports TestClock sleeps when TestClock.adjust appears only in a comment (1)
       โœ“ reports the rule diagnostic 406ms
     โœ“ reports timers hidden in module-level helpers (1)
       โœ“ reports the rule diagnostic 507ms
     โœ“ reports awaited timers/promises sleeps (1)
       โœ“ reports the rule diagnostic 514ms
   โœ“ ignores non-test files (1)
     โœ“ passes 470ms
 โœ“  unit  src/lib/mobileTheme.test.ts (24 tests) 86ms
 โœ“  unit  src/state/thread-task-permissions.test.ts (7 tests) 10ms
 โœ“ rules/no-test-timeout-or-unreasoned-skip.test.ts (16 tests) 9686ms
   โœ“ t3code/no-test-timeout-or-unreasoned-skip (13)
     โœ“ allows tests without overrides, conditional skips, and waitFor timeouts (1)
       โœ“ passes 532ms
     โœ“ allows a skip with a quarantine issue or a GitHub issue URL (1)
       โœ“ passes 631ms
     โœ“ reports a numeric timeout on it.effect (1)
       โœ“ reports the rule diagnostic 1151ms
     โœ“ reports a timeout through .each and .skipIf chains (1)
       โœ“ reports the rule diagnostic 859ms
     โœ“ reports retry options, options-first timeouts, and hook timeouts (1)
       โœ“ reports the rule diagnostic 822ms
     โœ“ reports vi.setConfig timeouts (1)
       โœ“ reports the rule diagnostic 999ms
     โœ“ reports a skip whose comment has no issue (1)
       โœ“ reports the rule diagnostic 568ms
     โœ“ reports todo, only, and the x/f aliases (1)
       โœ“ reports the rule diagnostic 348ms
     โœ“ flags an options-object timeout when the callback is a reference (1)
       โœ“ reports the rule diagnostic 391ms
     โœ“ allows a computed skip option, which is a platform gate like skipIf (1)
       โœ“ passes 444ms
     โœ“ flags the suite alias and option-object skips (1)
       โœ“ reports the rule diagnostic 425ms
     โœ“ flags a skip option without a quarantine issue (1)
       โœ“ reports the rule diagnostic 484ms
     โœ“ flags a bracket-access skip without a quarantine issue (1)
       โœ“ reports the rule diagnostic 516ms
   โœ“ still flags an option-object skip in a live file (1)
     โœ“ reports the rule diagnostic 534ms
   โœ“ allows timeouts in opt-in live provider suites (1)
     โœ“ passes 467ms
   โœ“ ignores non-test files (1)
     โœ“ passes 477ms
 โœ“  unit  src/features/pull-requests/pullRequestList.test.ts (18 tests) 28ms
 โœ“  unit  src/state/use-thread-outbox-drain.permissions.test.ts (12 tests) 17ms
 โœ“  unit  src/lib/attachmentDownload.test.ts (19 tests) 41ms
 โœ“  unit  src/lib/composerContext.test.ts (15 tests) 89ms
 โœ“  unit  src/lib/composerAttachmentUploadQueue.test.ts (11 tests) 12ms
 โœ“  unit  src/lib/android-workspace-navigation.test.ts (15 tests) 12ms
 โœ“  unit  src/features/threads/thread-feed-live-follow.test.ts (28 tests) 15ms
 โœ“  unit  src/features/voice-input/voiceInputSession.test.ts (13 tests) 19ms
 โœ“  unit  src/state/composer-attachment-uploads.test.ts (5 tests) 15ms
 โœ“  unit  src/lib/composerContextClipboard.test.ts (7 tests) 25ms
 โœ“  unit  src/features/updates/app-updates.test.ts (11 tests) 67ms
 โœ“  unit  src/connection/environment-cache-store.test.ts (4 tests) 59ms
 โœ“  unit  src/state/pending-task-editor-writes.test.ts (5 tests) 22ms
 โœ“  unit  src/features/home/home-thread-navigation.test.ts (6 tests) 15ms
 โœ“  unit  src/features/diffs/nativeReviewDiffHighlighter.test.ts (11 tests) 415ms
 โœ“  unit  src/state/use-selected-thread-git-actions.test.ts (11 tests) 6ms
 โœ“  unit  src/state/thread-outbox-removal.test.ts (5 tests) 6ms
 โœ“  unit  src/features/threads/checkout-new-task-branch.test.ts (11 tests) 2695ms
   โœ“ new-task branch checkout (11)
     โœ“ resolves historical branch metadata to its worktree beyond a long query's first page 301ms
     โœ“ switches to the selected remote instead of reusing a worktree tracking another remote 408ms
 โœ“  unit  src/features/cloud/linkEnvironment.test.ts (3 tests) 60ms
 โœ“ rules/require-disposable-render.test.ts (22 tests) 12086ms
   โœ“ t3code/require-disposable-render (22)
     โœ“ allows the disposable helper (1)
       โœ“ passes 450ms
     โœ“ rejects react-dom/client (1)
       โœ“ reports the rule diagnostic 667ms
     โœ“ rejects act from react (1)
       โœ“ reports the rule diagnostic 762ms
     โœ“ rejects a renamed act from react (1)
       โœ“ reports the rule diagnostic 703ms
     โœ“ rejects setting the act environment (1)
       โœ“ reports the rule diagnostic 933ms
     โœ“ rejects setting the act environment by computed key (1)
       โœ“ reports the rule diagnostic 802ms
     โœ“ rejects stubbing the act environment (1)
       โœ“ reports the rule diagnostic 812ms
     โœ“ rejects userEvent wrapped in act from react (1)
       โœ“ reports the rule diagnostic 382ms
     โœ“ rejects userEvent wrapped in the render helper's act (1)
       โœ“ reports the rule diagnostic 503ms
     โœ“ rejects userEvent wrapped in a renamed render helper act (1)
       โœ“ reports the rule diagnostic 495ms
     โœ“ rejects a renamed userEvent wrapped in act (1)
       โœ“ reports the rule diagnostic 354ms
     โœ“ rejects a locator click wrapped in act (1)
       โœ“ reports the rule diagnostic 457ms
     โœ“ rejects React.act from a namespace import (1)
       โœ“ reports the rule diagnostic 445ms
     โœ“ rejects userEvent wrapped in React.act (1)
       โœ“ reports the rule diagnostic 522ms
     โœ“ allows act around a DOM click and userEvent in a function act only defines (1)
       โœ“ passes 575ms
     โœ“ rejects lifecycle hooks through a test runner namespace (1)
       โœ“ reports the rule diagnostic 469ms
     โœ“ rejects importing lifecycle hooks from the test runner (1)
       โœ“ reports the rule diagnostic 513ms
     โœ“ rejects afterEach (1)
       โœ“ reports the rule diagnostic 391ms
     โœ“ rejects beforeAll (1)
       โœ“ reports the rule diagnostic 371ms
     โœ“ allows lifecycle hooks outside browser tests (1)
       โœ“ passes 496ms
     โœ“ allows importing lifecycle hooks outside browser tests (1)
       โœ“ passes 470ms
     โœ“ still rejects react-dom/client in unit tests (1)
       โœ“ reports the rule diagnostic 454ms
 โœ“  unit  src/features/threads/threadOrderAvailability.test.ts (7 tests) 289ms
 โœ“ rules/prefer-effect-fn.test.ts (23 tests) 12548ms
   โœ“ t3code/prefer-effect-fn (23)
     โœ“ allows inline programs and layer construction (1)
       โœ“ passes 474ms
     โœ“ allows named functions and deliberate untraced functions (1)
       โœ“ passes 475ms
     โœ“ allows inline combinator callbacks (1)
       โœ“ passes 945ms
     โœ“ allows inline option and error callbacks (1)
       โœ“ passes 777ms
     โœ“ allows reference default-value callbacks (1)
       โœ“ passes 820ms
     โœ“ reports service members named onSome (1)
       โœ“ reports the rule diagnostic 745ms
     โœ“ reports service members named onNone (1)
       โœ“ reports the rule diagnostic 865ms
     โœ“ reports service members named onSuccess (1)
       โœ“ reports the rule diagnostic 448ms
     โœ“ reports service members named onFailure (1)
       โœ“ reports the rule diagnostic 415ms
     โœ“ reports service members named defaultValue (1)
       โœ“ reports the rule diagnostic 457ms
     โœ“ does not mistake other namespaces or shadowed locals for Effect (1)
       โœ“ passes 492ms
     โœ“ leaves functions with synchronous setup for manual review (1)
       โœ“ passes 428ms
     โœ“ reports a named arrow wrapper (1)
       โœ“ reports the rule diagnostic 528ms
     โœ“ reports a block-bodied wrapper (1)
       โœ“ reports the rule diagnostic 364ms
     โœ“ reports a declaration with pipe transforms (1)
       โœ“ reports the rule diagnostic 485ms
     โœ“ reports a function expression (1)
       โœ“ reports the rule diagnostic 541ms
     โœ“ reports service members (1)
       โœ“ reports the rule diagnostic 482ms
     โœ“ reports class fields (1)
       โœ“ reports the rule diagnostic 511ms
     โœ“ recognizes namespace aliases (1)
       โœ“ reports the rule diagnostic 479ms
     โœ“ recognizes bare-package Effect imports (1)
       โœ“ reports the rule diagnostic 410ms
     โœ“ recognizes a direct gen import (1)
       โœ“ reports the rule diagnostic 398ms
     โœ“ reports class methods (1)
       โœ“ reports the rule diagnostic 423ms
     โœ“ allows getters that expose an effect value (1)
       โœ“ passes 535ms
 โœ“  unit  src/lib/composerImages.test.ts (6 tests) 20ms
 โœ“  unit  src/features/sharing/incoming-share-inbox.test.ts (10 tests) 22ms
 โœ“  unit  src/dependency-graph.test.ts (2 tests) 35ms
 โœ“  unit  src/features/workspace/workspace-tabs-state.test.ts (16 tests) 13ms
 โœ“  unit  src/features/settings/scheduledTaskDraft.test.ts (12 tests) 8ms
 โœ“  unit  src/features/home/homeThreadList.test.ts (4 tests) 10ms
 โœ“  unit  src/native/composerEditorRevision.test.ts (17 tests) 9ms
 โœ“ rules/no-mobile-uniwind-theme-escape-hatches.test.ts (24 tests) 13203ms
   โœ“ t3code/no-mobile-uniwind-theme-escape-hatches (24)
     โœ“ allows semantic mobile theme classes (1)
       โœ“ passes 696ms
     โœ“ allows unrelated functions with legacy hook names (1)
       โœ“ passes 802ms
     โœ“ allows unrelated imports with legacy hook names (1)
       โœ“ passes 882ms
     โœ“ allows erased type-only theme imports (1)
       โœ“ passes 667ms
     โœ“ allows appearance words in ordinary copy (1)
       โœ“ passes 758ms
     โœ“ does not conflate shadowed Uniwind namespaces (1)
       โœ“ passes 964ms
     โœ“ allows reviewed native interop boundaries (1)
       โœ“ passes 689ms
     โœ“ still reports appearance variants in reviewed interop boundaries (1)
       โœ“ reports the rule diagnostic 389ms
     โœ“ reports new React theme subscriptions (1)
       โœ“ reports the rule diagnostic 425ms
     โœ“ reports the retired theme color hook (1)
       โœ“ reports the rule diagnostic 449ms
     โœ“ reports guarded hooks imported with TypeScript extensions (1)
       โœ“ reports the rule diagnostic 415ms
     โœ“ reports unreviewed native interop subscriptions (1)
       โœ“ reports the rule diagnostic 416ms
     โœ“ reports appearance variants in string literals (1)
       โœ“ reports the rule diagnostic 453ms
     โœ“ reports appearance variants in template literals (1)
       โœ“ reports the rule diagnostic 470ms
     โœ“ reports escaped appearance variants in template literals (1)
       โœ“ reports the rule diagnostic 488ms
     โœ“ reports appearance variants through nested class-map indirection (1)
       โœ“ reports the rule diagnostic 496ms
     โœ“ reports appearance variants passed to class builders (1)
       โœ“ reports the rule diagnostic 444ms
     โœ“ reports negative and important appearance variants (1)
       โœ“ reports the rule diagnostic 532ms
     โœ“ reports namespace CSS variable subscriptions (1)
       โœ“ reports the rule diagnostic 376ms
     โœ“ reports destructured namespace CSS variable subscriptions (1)
       โœ“ reports the rule diagnostic 387ms
     โœ“ reports aliased namespace CSS variable subscriptions (1)
       โœ“ reports the rule diagnostic 476ms
     โœ“ reports object-rest namespace CSS variable subscriptions (1)
       โœ“ reports the rule diagnostic 508ms
     โœ“ reports namespace access to the retired theme hook (1)
       โœ“ reports the rule diagnostic 415ms
     โœ“ reports destructured namespace access to the retired theme hook (1)
       โœ“ reports the rule diagnostic 564ms
 โœ“  unit  src/lib/layout.test.ts (15 tests) 13ms
stdout | src/lib/storage.test.ts > mobile connection storage > loads legacy preferences when SQLite is unavailable
[05:22:05.252] WARN (#20): Database unavailable; loading fallback preferences. {
  cause: {
    _tag: 'MobileDatabaseError',
    operation: 'load-preferences',
    cause: Error: database unavailable
        at Object.<anonymous> (/home/runner/_work/t3code/t3code/apps/mobile/src/lib/storage.test.ts:49:33)
        at Object.Mock [as getFirstAsync] (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/spy.DDMXghXv.js:353:40)
        at try (/home/runner/_work/t3code/t3code/apps/mobile/src/persistence/mobile-database.ts:431:18)
        at MixedScheduler.<anonymous> (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:785:7)
        at ~effect/Effect/evaluate (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:804:38)
        at FiberImpl.runLoop (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:453:97)
        at FiberImpl.evaluate (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:402:23)
        at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:2474:9
        at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:2526:19
        at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:2537:31
  }
}

stdout | src/lib/storage.test.ts > mobile connection storage > falls back to secure storage when SQLite cannot save preferences
[05:22:05.262] WARN (#21): Database unavailable; loading fallback preferences. {
  cause: {
    _tag: 'MobileDatabaseError',
    operation: 'load-preferences',
    cause: Error: database unavailable
        at Object.<anonymous> (/home/runner/_work/t3code/t3code/apps/mobile/src/lib/storage.test.ts:49:33)
        at Object.Mock [as getFirstAsync] (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/spy.DDMXghXv.js:353:40)
        at try (/home/runner/_work/t3code/t3code/apps/mobile/src/persistence/mobile-database.ts:431:18)
        at MixedScheduler.<anonymous> (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:785:7)
        at ~effect/Effect/evaluate (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:804:38)
        at FiberImpl.runLoop (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:453:97)
        at FiberImpl.evaluate (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:402:23)
        at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:2474:9
        at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:2526:19
        at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:2537:31
  }
}

stdout | src/lib/storage.test.ts > mobile connection storage > falls back to secure storage when SQLite cannot save preferences
[05:22:05.263] WARN (#21): Database unavailable; saving preferences to secure storage. {
  cause: {
    _tag: 'MobileDatabaseError',
    operation: 'save-preferences',
    cause: Error: database unavailable
        at Object.<anonymous> (/home/runner/_work/t3code/t3code/apps/mobile/src/lib/storage.test.ts:59:33)
        at Object.Mock [as runAsync] (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/vitest@5.0.5_@tsc-rs+typescript@0.8.0_@types+node@24.12.4_@vitest+browser-playwright@5._a4090df6c7be8012d869871fb8a7445d/node_modules/vitest/dist/chunks/spy.DDMXghXv.js:353:40)
        at try (/home/runner/_work/t3code/t3code/apps/mobile/src/persistence/mobile-database.ts:441:20)
        at MixedScheduler.<anonymous> (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:785:7)
        at ~effect/Effect/evaluate (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:804:38)
        at FiberImpl.runLoop (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:453:97)
        at FiberImpl.evaluate (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:402:23)
        at AsyncResource.runInAsyncScope (node:async_hooks:226:14)
        at FiberImpl.evaluate (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:396:27)
        at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:808:17
  }
}

 โœ“  unit  src/lib/storage.test.ts (8 tests) 42ms
stdout | src/state/preferences.test.ts > mobile preferences state > falls back to empty preferences when secure storage cannot be read
[05:22:05.649] WARN (#35): Could not load mobile preferences. {
  _tag: 'MobilePreferencesLoadError',
  cause: Error: secure storage unavailable
      at /home/runner/_work/t3code/t3code/apps/mobile/src/state/preferences.test.ts:181:20
      at Generator.next (<anonymous>)
      at ~effect/Effect/successCont (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:979:28)
      at ~effect/Effect/evaluate (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:991:25)
      at FiberImpl.runLoop (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:453:97)
      at FiberImpl.evaluate (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:402:23)
      at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:2474:9
      at file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:2526:19
      at Module.<anonymous> (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/internal/effect.js:2537:31)
      at Array.<anonymous> (file:///home/runner/_work/t3code/t3code/node_modules/.pnpm/@effect+vitest@4.0.5_patch_hash=2731c9c3761c595f25ddc625a7d61ca376b389d5b3049ecb837c894_729be65b0f3c6bde0309e4457c6d9256/node_modules/@effect/vitest/dist/internal/internal.js:26:31)
}

 โœ“  unit  src/state/preferences.test.ts (3 tests) 26ms
 โœ“  unit  src/state/session.test.ts (4 tests) 9ms
 โœ“  unit  src/lib/mediaActions.test.ts (10 tests) 5ms
 โœ“  unit  src/features/threads/thread-provider-instance.test.ts (3 tests) 28ms
 โœ“  unit  src/features/projects/AddProjectScreen.test.ts (3 tests) 33ms
 โœ“  unit  src/features/agent-awareness/liveActivityPreferences.test.ts (3 tests) 19ms
 โœ“  unit  src/features/cloud/dpop.test.ts (5 tests) 154ms
 โœ“  unit  src/features/settings/settings-scoped-server.test.ts (5 tests) 4ms
 โœ“  unit  src/features/threads/new-task-project-selection.test.ts (9 tests) 5ms
 โœ“  unit  src/features/pull-requests/pullRequestStack.test.ts (8 tests) 13ms
 โœ“  unit  src/widgets/subscriptionUsageSnapshot.test.ts (5 tests) 16ms
 โœ“  unit  src/features/threads/thread-route-state.test.ts (5 tests) 8ms
 โœ“  unit  src/features/settings/environment-maintenance.test.ts (7 tests) 35ms
 โœ“  unit  src/features/review/reviewModel.test.ts (5 tests) 14ms
 โœ“  unit  src/features/review/reviewCommentSelection.test.ts (6 tests) 6ms
 โœ“  unit  src/lib/markdownHtml.test.ts (8 tests) 65ms
 โœ“  unit  src/features/threads/thread-settings-sheet-state.test.ts (5 tests) 6ms
 โœ“  unit  src/lib/protectedData.test.ts (3 tests) 156ms
 โœ“  unit  src/state/remote-environment-projections.test.ts (1 test) 14ms
 โœ“  unit  src/lib/reserved-regions.test.ts (7 tests) 3ms
 โœ“  unit  src/features/voice-input/lazyVoiceRecorder.test.ts (3 tests) 8ms
 โœ“  unit  src/features/usage/UsageLimitsSection.test.ts (2 tests) 6ms
stdout | plugins/withAndroidFbjniVersion.test.mjs > withAndroidFbjniVersion > applies the force through the registered app config
[react-native-pdf-jsi] Remember to install peer dependencies:
  - react-native-blob-util
  - @react-native-async-storage/async-storage
  - react-native-nitro-modules (required for the Nitro JSI path; the React Native bridge is used when it is not linked)
โœ… Clerk iOS plugin loaded
โœ… Clerk Android plugin loaded

 โœ“  unit  src/features/review/nativeReviewDiffAdapter.test.ts (2 tests) 434ms
   โœ“ buildNativeReviewDiffData row bound (1)
     โœ“ caps each huge file excerpt while preserving full counts and ordinary files 427ms
 โœ“  unit  plugins/withAndroidFbjniVersion.test.mjs (4 tests) 420ms
   โœ“ withAndroidFbjniVersion (4)
     โœ“ applies the force through the registered app config 397ms
 โœ“ rules/require-suppression-reason.test.ts (13 tests) 6774ms
   โœ“ t3code/require-suppression-reason (13)
     โœ“ allows a directive with a -- reason (1)
       โœ“ passes 482ms
     โœ“ allows a directive explained by the comment above (1)
       โœ“ passes 525ms
     โœ“ allows stacked directives under one explanation (1)
       โœ“ passes 486ms
     โœ“ allows a TypeScript directive followed by its reason (1)
       โœ“ passes 463ms
     โœ“ allows a directive in a JSX comment with a reason (1)
       โœ“ passes 561ms
     โœ“ ignores enable directives (1)
       โœ“ passes 615ms
     โœ“ reports a lint directive without a reason (1)
       โœ“ reports the rule diagnostic 485ms
     โœ“ reports a file-level directive without a reason (1)
       โœ“ reports the rule diagnostic 507ms
     โœ“ reports a TypeScript directive without a reason (1)
       โœ“ reports the rule diagnostic 547ms
     โœ“ does not count a comment separated by a blank line (1)
       โœ“ reports the rule diagnostic 591ms
     โœ“ allows an empty comment line between the reason and the directive (1)
       โœ“ passes 517ms
     โœ“ does not count an empty comment above (1)
       โœ“ reports the rule diagnostic 513ms
     โœ“ does not count a trailing comment on the code line above (1)
       โœ“ reports the rule diagnostic 433ms
 โœ“  unit  src/lib/pdfPreview.test.ts (12 tests) 13ms
 โœ“ rules/no-test-in-loop.test.ts (8 tests) 3798ms
   โœ“ t3code/no-test-in-loop (7)
     โœ“ allows it.each and it.effect.each (1)
       โœ“ passes 454ms
     โœ“ allows loops inside a test body (1)
       โœ“ passes 458ms
     โœ“ ignores node:test files, which have no .each (1)
       โœ“ passes 487ms
     โœ“ reports it inside a for...of loop (1)
       โœ“ reports the rule diagnostic 482ms
     โœ“ reports it.effect inside a for loop nested in describe (1)
       โœ“ reports the rule diagnostic 496ms
     โœ“ reports test inside a for...in loop (1)
       โœ“ reports the rule diagnostic 403ms
     โœ“ reports a describe inside a loop once, not the tests inside it (1)
       โœ“ reports the rule diagnostic 448ms
   โœ“ ignores non-test files (1)
     โœ“ passes 516ms
 โœ“  unit  src/state/edit-pending-thread-message.test.ts (4 tests) 5ms
 โœ“  unit  src/features/pull-requests/pullRequestDiffPages.test.ts (3 tests) 9ms
 โœ“  unit  src/features/agent-awareness/notificationNavigation.test.ts (6 tests) 6ms
 โœ“  unit  src/state/thread-order.test.ts (4 tests) 5ms
 โœ“  unit  src/state/assets.test.ts (4 tests) 9ms
 โœ“  unit  src/features/workspace/android-workspace-navigation-colors.test.ts (9 tests) 50ms
 โœ“  unit  src/lib/adaptive-navigation.test.ts (8 tests) 3ms
 โœ“ rules/no-frame-waits-in-browser-tests.test.ts (16 tests) 7969ms
   โœ“ t3code/no-frame-waits-in-browser-tests (16)
     โœ“ allows retrying assertions and the full fake timer set (1)
       โœ“ passes 486ms
     โœ“ allows requestAnimationFrame inside mocks (1)
       โœ“ passes 499ms
     โœ“ allows timers outside a promise executor and other listeners (1)
       โœ“ passes 517ms
     โœ“ rejects a nextFrame helper (1)
       โœ“ reports the rule diagnostic 527ms
     โœ“ rejects requestAnimationFrame as the executor (1)
       โœ“ reports the rule diagnostic 513ms
     โœ“ rejects window.requestAnimationFrame (1)
       โœ“ reports the rule diagnostic 521ms
     โœ“ allows a pass-through frame executor inside a mock implementation (1)
       โœ“ passes 558ms
     โœ“ rejects setTimeout passed straight through as the promise executor (1)
       โœ“ reports the rule diagnostic 581ms
     โœ“ rejects setTimeout inside a promise executor (1)
       โœ“ reports the rule diagnostic 479ms
     โœ“ rejects setInterval inside a promise executor (1)
       โœ“ reports the rule diagnostic 390ms
     โœ“ rejects transitionend listeners (1)
       โœ“ reports the rule diagnostic 486ms
     โœ“ rejects animationend listeners (1)
       โœ“ reports the rule diagnostic 535ms
     โœ“ rejects vi.useFakeTimers (1)
       โœ“ reports the rule diagnostic 516ms
     โœ“ rejects a partial fakeTimers set (1)
       โœ“ reports the rule diagnostic 381ms
     โœ“ rejects a partial vi.useFakeTimers set (1)
       โœ“ reports the rule diagnostic 471ms
     โœ“ ignores files that are not browser tests (1)
       โœ“ passes 467ms
 โœ“  unit  src/state/pending-thread-creation.test.ts (4 tests) 3ms
 โœ“  unit  src/features/connection/environmentSections.test.ts (3 tests) 7ms
 โœ“  unit  src/lib/projectFaviconRequests.test.ts (4 tests) 3ms
 โœ“  unit  src/state/attachments.test.ts (2 tests) 5ms
 โœ“  unit  src/features/shortcuts/appShortcuts.test.ts (7 tests) 3ms
 โœ“  unit  src/state/workspace-connection-atoms.test.ts (1 test) 10ms
 โœ“  unit  src/lib/composerChipPresentation.test.ts (3 tests) 86ms
 โœ“  unit  src/lib/atomic-file.test.ts (4 tests) 14ms
 โœ“  unit  src/lib/markdownMedia.test.ts (12 tests) 6ms
 โœ“  unit  src/state/use-thread-pr.test.ts (6 tests) 5ms
 โœ“  unit  src/features/terminal/useTerminalGridSync.test.ts (1 test) 14ms
 โœ“  unit  src/features/pull-requests/pullRequestFileFilters.test.ts (4 tests) 18ms
 โœ“  unit  src/lib/localAttachmentPreview.test.ts (4 tests) 11ms
 โœ“  unit  src/lib/enrichedLinkPresentation.test.ts (5 tests) 6ms
 โœ“  unit  src/lib/copyTextWithHaptic.test.ts (5 tests) 14ms
 โœ“  unit  src/features/terminal/useTerminalLifecycle.test.ts (3 tests) 10ms
 โœ“ rules/no-raw-mcp-registration.test.ts (20 tests) 9772ms
   โœ“ t3code/no-raw-mcp-registration (20)
     โœ“ allows the rest of effect/ai and type-only McpServer imports (1)
       โœ“ passes 393ms
     โœ“ reports importing McpServer from effect/ai (1)
       โœ“ reports the rule diagnostic 469ms
     โœ“ reports importing McpServer under another name (1)
       โœ“ reports the rule diagnostic 457ms
     โœ“ reports a namespace import of effect/ai (1)
       โœ“ reports the rule diagnostic 491ms
     โœ“ reports importing the McpServer module directly (1)
       โœ“ reports the rule diagnostic 490ms
     โœ“ reports re-exporting McpServer (1)
       โœ“ reports the rule diagnostic 552ms
     โœ“ reports re-exporting all of effect/ai (1)
       โœ“ reports the rule diagnostic 534ms
     โœ“ reports a dynamic import of the McpServer module (1)
       โœ“ reports the rule diagnostic 537ms
     โœ“ reports a dynamic import written as a template (1)
       โœ“ reports the rule diagnostic 422ms
     โœ“ reports McpServer.toolkit (1)
       โœ“ reports the rule diagnostic 509ms
     โœ“ reports McpServer.resource and McpServer.prompt (1)
       โœ“ reports the rule diagnostic 526ms
     โœ“ reports addTool on the McpServer service (1)
       โœ“ reports the rule diagnostic 420ms
     โœ“ reports a registration method read without calling it (1)
       โœ“ reports the rule diagnostic 425ms
     โœ“ reports a registration function taken by destructuring (1)
       โœ“ reports the rule diagnostic 509ms
     โœ“ reports a registration method taken by destructuring (1)
       โœ“ reports the rule diagnostic 526ms
     โœ“ lets tests import McpServer to build a server (1)
       โœ“ passes 454ms
     โœ“ reports a registration in a test (1)
       โœ“ reports the rule diagnostic 587ms
     โœ“ reports a test importing McpServer under another name (1)
       โœ“ reports the rule diagnostic 514ms
     โœ“ reports a test importing effect/ai as a namespace (1)
       โœ“ reports the rule diagnostic 404ms
     โœ“ reports a test importing the McpServer module directly (1)
       โœ“ reports the rule diagnostic 497ms
 โœ“  unit  src/persistence/mobile-database.test.ts (3 tests) 18ms
 โœ“  unit  src/features/pull-requests/pullRequestDiffComments.test.ts (4 tests) 6ms
 โœ“  unit  src/features/review/incrementalSnippet.test.ts (3 tests) 296ms
 โœ“  unit  src/connection/storage.test.ts (3 tests) 33ms
 โœ“  unit  src/connection/background-activity.test.ts (3 tests) 10ms
 โœ“  unit  src/persistence/mobile-storage.test.ts (3 tests) 25ms
 โœ“  unit  src/features/workspace/navigation-tab-order.test.ts (6 tests) 12ms
 โœ“  unit  src/lib/videoThumbnails.test.ts (2 tests) 38ms
 โœ“  unit  src/features/threads/threadQueueControlPresentation.test.ts (7 tests) 6ms
 โœ“  unit  src/features/threads/pending-thread-feed.test.ts (4 tests) 11ms
 โœ“  unit  src/state/workspaceModel.test.ts (2 tests) 3ms
 โœ“ rules/no-inline-schema-compile.test.ts (6 tests) 2785ms
   โœ“ t3code/no-inline-schema-compile (6)
     โœ“ allows schema compilers hoisted to module scope (1)
       โœ“ passes 511ms
     โœ“ allows factory helpers that return a precompiled decoder (1)
       โœ“ passes 538ms
     โœ“ allows schema construction helpers that use encode transformations (1)
       โœ“ passes 501ms
     โœ“ allows dynamic schema parameters that cannot be hoisted to module scope (1)
       โœ“ passes 437ms
     โœ“ reports schema compilers inside function bodies (1)
       โœ“ reports the rule diagnostic 397ms
     โœ“ reports inline schema literals as high confidence findings (1)
       โœ“ reports the rule diagnostic 383ms
 โœ“  unit  src/features/threads/fileChipMenu.test.ts (9 tests) 19ms
 โœ“  unit  src/features/threads/thread-settings-options.test.ts (4 tests) 10ms
 โœ“  unit  src/features/threads/use-composer-command-menu.test.ts (3 tests) 25ms
 โœ“  unit  src/lib/composerAttachmentFiles.test.ts (12 tests) 4ms
 โœ“ rules/no-wall-clock-in-tests.test.ts (8 tests) 4012ms
   โœ“ t3code/no-wall-clock-in-tests (7)
     โœ“ ignores a computed member with a variable key (1)
       โœ“ passes 595ms
     โœ“ allows fixed dates and readings that seed mocks (1)
       โœ“ passes 535ms
     โœ“ reports elapsed-time measurement (1)
       โœ“ reports the rule diagnostic 537ms
     โœ“ reports Date.now fixtures (1)
       โœ“ reports the rule diagnostic 416ms
     โœ“ reports new Date() with no arguments (1)
       โœ“ reports the rule diagnostic 482ms
     โœ“ reports process.hrtime and process.hrtime.bigint (1)
       โœ“ reports the rule diagnostic 446ms
     โœ“ reports a reading outside the mock's arguments (1)
       โœ“ reports the rule diagnostic 508ms
   โœ“ ignores non-test files (1)
     โœ“ passes 467ms
 โœ“  unit  src/lib/microphonePriority.test.ts (4 tests) 9ms
 โœ“  unit  src/connection/migration.test.ts (2 tests) 22ms
 โœ“  unit  src/features/pull-requests/pullRequestStatus.test.ts (4 tests) 4ms
 โœ“  unit  src/features/settings/autoSettleSettingsSync.test.ts (3 tests) 7ms
 โœ“  unit  src/features/threads/new-task-context-presentation.test.ts (7 tests) 6ms
 โœ“  unit  src/features/terminal/terminalMenu.test.ts (5 tests) 7ms
 โœ“  unit  src/features/home/workspace-connection-status.test.ts (3 tests) 7ms
 โœ“ rules/no-manual-effect-runtime-in-tests.test.ts (17 tests) 8305ms
   โœ“ t3code/no-manual-effect-runtime-in-tests (14)
     โœ“ allows @effect/vitest effect tests (1)
       โœ“ passes 472ms
     โœ“ reports Effect.runCallback (1)
       โœ“ reports the rule diagnostic 473ms
     โœ“ reports Effect.runCallbackWith (1)
       โœ“ reports the rule diagnostic 361ms
     โœ“ reports Effect.runFork (1)
       โœ“ reports the rule diagnostic 516ms
     โœ“ reports Effect.runForkWith (1)
       โœ“ reports the rule diagnostic 538ms
     โœ“ reports Effect.runPromise (1)
       โœ“ reports the rule diagnostic 455ms
     โœ“ reports Effect.runPromiseExit (1)
       โœ“ reports the rule diagnostic 440ms
     โœ“ reports Effect.runPromiseExitWith (1)
       โœ“ reports the rule diagnostic 531ms
     โœ“ reports Effect.runPromiseWith (1)
       โœ“ reports the rule diagnostic 494ms
     โœ“ reports Effect.runSync (1)
       โœ“ reports the rule diagnostic 583ms
     โœ“ reports Effect.runSyncExit (1)
       โœ“ reports the rule diagnostic 470ms
     โœ“ reports Effect.runSyncExitWith (1)
       โœ“ reports the rule diagnostic 497ms
     โœ“ reports Effect.runSyncWith (1)
       โœ“ reports the rule diagnostic 465ms
     โœ“ reports ManagedRuntime.make (1)
       โœ“ reports the rule diagnostic 474ms
   โœ“ allows production runtime boundaries (1)
     โœ“ passes 489ms
   โœ“ t3code/no-manual-effect-runtime-in-tests with maxOccurrences (2)
     โœ“ allows occurrences up to the ceiling (1)
       โœ“ passes 540ms
     โœ“ reports occurrences beyond the ceiling (1)
       โœ“ reports the rule diagnostic 463ms
 โœ“  unit  src/lib/projectFaviconDatabaseCache.test.ts (3 tests) 11ms
 โœ“ rules/no-unscoped-has.test.ts (42 tests) 21990ms
   โœ“ t3code/no-unscoped-has (24)
     โœ“ allows :has() on the element itself (1)
       โœ“ passes 659ms
     โœ“ allows :has() anchored to an attribute (1)
       โœ“ passes 698ms
     โœ“ allows :has() inside :not() on the element itself (1)
       โœ“ passes 940ms
     โœ“ allows built-in has-* variants (1)
       โœ“ passes 533ms
     โœ“ allows a sibling selector without :has() (1)
       โœ“ passes 733ms
     โœ“ ignores prose mentioning :has() (1)
       โœ“ passes 653ms
     โœ“ ignores :has() inside an arbitrary value (1)
       โœ“ passes 814ms
     โœ“ allows a negated :has() on the element itself (1)
       โœ“ passes 523ms
     โœ“ allows :has() on a group or peer element (1)
       โœ“ passes 464ms
     โœ“ allows a selector list whose own branch is anchored (1)
       โœ“ passes 445ms
     โœ“ ignores :has() text in quoted attribute values (1)
       โœ“ passes 411ms
     โœ“ allows a selector without & on the element itself (1)
       โœ“ passes 478ms
     โœ“ reports a sibling :has() with nothing anchoring it (1)
       โœ“ reports the rule diagnostic 521ms
     โœ“ reports a descendant :has() with nothing anchoring it (1)
       โœ“ reports the rule diagnostic 341ms
     โœ“ reports a universal :has() ancestor (1)
       โœ“ reports the rule diagnostic 405ms
     โœ“ reports :has() whose only anchor is negated (1)
       โœ“ reports the rule diagnostic 495ms
     โœ“ reports uppercase :HAS() (1)
       โœ“ reports the rule diagnostic 483ms
     โœ“ reports a selector-list branch borrowing another branch's anchor (1)
       โœ“ reports the rule diagnostic 553ms
     โœ“ reports an unanchored branch inside :is() (1)
       โœ“ reports the rule diagnostic 542ms
     โœ“ reports an unanchored :has() inside a named group variant (1)
       โœ“ reports the rule diagnostic 500ms
     โœ“ reports a :has() on an ancestor of a selector without & (1)
       โœ“ reports the rule diagnostic 481ms
     โœ“ reports a :has() on an ancestor of a group (1)
       โœ“ reports the rule diagnostic 492ms
     โœ“ reports an in-* ancestor :has() (1)
       โœ“ reports the rule diagnostic 416ms
     โœ“ reports :has() anchored to the document root (1)
       โœ“ reports the rule diagnostic 517ms
   โœ“ t3code/no-outset-state-indicators (18)
     โœ“ valid: inset state rings (1)
       โœ“ inset state rings (1)
         โœ“ passes 494ms
     โœ“ valid: an unconditional inset (1)
       โœ“ an unconditional inset (1)
         โœ“ passes 457ms
     โœ“ valid: an inset in a sibling composer argument (1)
       โœ“ an inset in a sibling composer argument (1)
         โœ“ passes 467ms
     โœ“ valid: an inset in a nested conditional composer (1)
       โœ“ an inset in a nested conditional composer (1)
         โœ“ passes 482ms
     โœ“ valid: outlines covered by the inward default (1)
       โœ“ outlines covered by the inward default (1)
         โœ“ passes 420ms
     โœ“ valid: wider outlines with a matching inward offset (1)
       โœ“ wider outlines with a matching inward offset (1)
         โœ“ passes 456ms
     โœ“ valid: arbitrary pixel outlines with a matching inward offset (1)
 โœ“  unit  src/native/voiceTranscription.ios.test.ts (1 test) 24ms
       โœ“ arbitrary pixel outlines with a matching inward offset (1)
         โœ“ passes 512ms
     โœ“ valid: arbitrary outline colors (1)
       โœ“ arbitrary outline colors (1)
         โœ“ passes 502ms
     โœ“ valid: decorative rings without a state (1)
       โœ“ decorative rings without a state (1)
         โœ“ passes 493ms
     โœ“ valid: prose (1)
       โœ“ prose (1)
         โœ“ passes 454ms
     โœ“ invalid: state rings without an inset (1)
       โœ“ state rings without an inset (1)
         โœ“ reports the rule diagnostic 449ms
     โœ“ invalid: an inset from another state (1)
       โœ“ an inset from another state (1)
         โœ“ reports the rule diagnostic 550ms
     โœ“ invalid: an inset from another conditional branch (1)
       โœ“ an inset from another conditional branch (1)
         โœ“ reports the rule diagnostic 580ms
     โœ“ invalid: an inset passed to another function (1)
       โœ“ an inset passed to another function (1)
         โœ“ reports the rule diagnostic 572ms
     โœ“ invalid: arbitrary state ring widths (1)
       โœ“ arbitrary state ring widths (1)
         โœ“ reports the rule diagnostic 412ms
     โœ“ invalid: positive outline offsets (1)
       โœ“ positive outline offsets (1)
         โœ“ reports the rule diagnostic 475ms
     โœ“ invalid: arbitrary outline offsets (1)
       โœ“ arbitrary outline offsets (1)
         โœ“ reports the rule diagnostic 615ms
     โœ“ invalid: wide outlines without an inward offset (1)
       โœ“ wide outlines without an inward offset (1)
         โœ“ reports the rule diagnostic 443ms
 โœ“  unit  src/lib/markdownLinks.test.ts (8 tests) 8ms
 โœ“  unit  src/features/terminal/terminalInput.test.ts (7 tests) 10ms
 โœ“  unit  src/features/devices/threadDevicePreviews.test.ts (2 tests) 6ms
 โœ“  unit  src/lib/projectIcon.test.ts (5 tests) 15ms
 โœ“  unit  src/features/terminal/terminalLaunchContext.test.ts (3 tests) 3ms
 โœ“  unit  src/features/threads/worktree-setup-state.test.ts (4 tests) 7ms
 โœ“  unit  src/features/terminal/terminalPaste.test.ts (2 tests) 5ms
 โœ“  unit  src/state/queries.filesystem.test.ts (1 test) 3ms
 โœ“ rules/no-hermes-unsupported-apis.test.ts (22 tests) 10648ms
   โœ“ t3code/no-hermes-unsupported-apis (22)
     โœ“ allows in-place sort on a copy (1)
       โœ“ passes 552ms
     โœ“ allows in-place reverse on a copy (1)
       โœ“ passes 535ms
     โœ“ allows other ES2023 methods Hermes ships (1)
       โœ“ passes 447ms
     โœ“ ignores property reads that are not calls (1)
       โœ“ passes 460ms
     โœ“ reports toSorted (1)
       โœ“ reports the rule diagnostic 582ms
     โœ“ reports toReversed in a chain (1)
       โœ“ reports the rule diagnostic 466ms
     โœ“ reports toSpliced via computed access with a copy-then-splice remediation (1)
       โœ“ reports the rule diagnostic 489ms
     โœ“ reports a static template-literal property name (1)
       โœ“ reports the rule diagnostic 457ms
     โœ“ ignores a template-literal property with substitutions (1)
       โœ“ passes 634ms
     โœ“ allows supported Intl constructors (1)
       โœ“ passes 405ms
     โœ“ allows feature detection (1)
       โœ“ passes 431ms
     โœ“ allows unrelated Segmenter constructors (1)
       โœ“ passes 430ms
     โœ“ ignores dynamic computed names (1)
       โœ“ passes 375ms
     โœ“ reports new Intl.Segmenter(undefined, { granularity: 'grapheme' }) (1)
       โœ“ reports the rule diagnostic 499ms
     โœ“ reports new Intl['Segmenter']() (1)
       โœ“ reports the rule diagnostic 456ms
     โœ“ reports new Intl[`Segmenter`]() (1)
       โœ“ reports the rule diagnostic 383ms
     โœ“ reports new globalThis.Intl.Segmenter() (1)
       โœ“ reports the rule diagnostic 479ms
     โœ“ reports new globalThis['Intl']['Segmenter']() (1)
       โœ“ reports the rule diagnostic 489ms
     โœ“ reports new global.Intl.Segmenter() (1)
       โœ“ reports the rule diagnostic 573ms
     โœ“ reports new window.Intl.Segmenter() (1)
       โœ“ reports the rule diagnostic 501ms
     โœ“ reports Intl.Segmenter() (1)
       โœ“ reports the rule diagnostic 507ms
     โœ“ reports Intl.Segmenter?.() (1)
       โœ“ reports the rule diagnostic 471ms
 โœ“  unit  src/lib/appLinking.test.ts (17 tests) 8ms
 โœ“  unit  src/state/thread-provider-switching.test.ts (4 tests) 8ms
 โœ“  unit  src/features/terminal/useTerminalSurfaceBuffer.test.ts (2 tests) 25ms
 โœ“  unit  src/lib/device-type.test.ts (3 tests) 7ms
 โœ“  unit  src/state/queued-run-edit.test.ts (3 tests) 3ms
 โœ“  unit  src/features/threads/thread-route-hydration.test.ts (3 tests) 2ms
 โœ“  unit  src/lib/projectThreadStartTurn.test.ts (3 tests) 3ms
 โœ“  unit  src/features/files/filePath.test.ts (7 tests) 6ms
 โœ“  unit  src/features/settings/scheduled-task-editor-state.test.ts (3 tests) 4ms
 โœ“  unit  src/features/layout/deferred-navigation.test.ts (3 tests) 3ms
 โœ“ rules/no-global-process-runtime.test.ts (9 tests) 4429ms
   โœ“ t3code/no-global-process-runtime (9)
     โœ“ allows injected host process references (1)
       โœ“ passes 507ms
     โœ“ allows unrelated process members (1)
       โœ“ passes 457ms
     โœ“ allows unrelated node os imports (1)
       โœ“ passes 504ms
     โœ“ reports direct platform reads (1)
       โœ“ reports the rule diagnostic 486ms
     โœ“ reports direct architecture reads (1)
       โœ“ reports the rule diagnostic 516ms
     โœ“ reports globalThis process platform reads (1)
       โœ“ reports the rule diagnostic 542ms
     โœ“ reports node os namespace platform reads (1)
       โœ“ reports the rule diagnostic 493ms
     โœ“ reports renamed node os architecture imports (1)
       โœ“ reports the rule diagnostic 387ms
     โœ“ reports default node os platform reads (1)
       โœ“ reports the rule diagnostic 519ms
 โœ“  unit  src/features/home/thread-dismissal.test.ts (3 tests) 22ms
 โœ“  unit  src/features/cloud/managedRelayLayer.test.ts (1 test) 86ms
 โœ“  unit  src/features/sharing/incoming-share-presentation.test.ts (2 tests) 2ms
 โœ“  unit  src/features/cloud/CloudAuthProvider.test.ts (1 test) 8ms
 โœ“  unit  src/features/threads/provider-catalog-refresh.test.ts (2 tests) 6ms
 โœ“  unit  src/features/devices/device-stream-document.test.ts (11 tests) 6ms
 โœ“  unit  src/features/diagnostics/crash-log-model.test.ts (2 tests) 3ms
 โœ“  unit  src/features/pull-requests/pullRequestActivityFilter.test.ts (1 test) 3ms
 โœ“  unit  src/features/observability/tracing.test.ts (1 test) 23ms
 โœ“ rules/namespace-node-imports.test.ts (5 tests) 2513ms
   โœ“ t3code/namespace-node-imports (5)
     โœ“ allows canonical Node namespaces (1)
       โœ“ passes 524ms
     โœ“ does not apply to non-Node packages (1)
       โœ“ passes 492ms
     โœ“ reports named imports (1)
       โœ“ reports the rule diagnostic 421ms
     โœ“ reports default imports (1)
       โœ“ reports the rule diagnostic 537ms
     โœ“ reports non-canonical namespace aliases (1)
       โœ“ reports the rule diagnostic 504ms
 โœ“  unit  scripts/generate-uniwind-themes.test.ts (1 test) 19ms
 โœ“  unit  src/lib/markdownTableBreaks.test.ts (5 tests) 43ms
 โœ“  unit  src/features/pull-requests/pullRequestEnvironmentFallback.test.ts (3 tests) 2ms
 โœ“  unit  src/lib/nativeTheme.test.ts (12 tests) 58ms
 โœ“ rules/no-rpc-permission-bypass.test.ts (16 tests) 8118ms
   โœ“ blocks direct session calls (1)
     โœ“ reports the rule diagnostic 523ms
   โœ“ blocks extracting the raw client (1)
     โœ“ reports the rule diagnostic 536ms
   โœ“ blocks replacing the permission guard (1)
     โœ“ reports the rule diagnostic 594ms
   โœ“ blocks namespace guard access (1)
     โœ“ reports the rule diagnostic 428ms
   โœ“ blocks raw protocol imports (1)
     โœ“ reports the rule diagnostic 631ms
   โœ“ allows typed requests (1)
     โœ“ passes 470ms
   โœ“ allows the transport boundary (1)
     โœ“ passes 415ms
   โœ“ blocks guard imports through the barrel (1)
     โœ“ reports the rule diagnostic 530ms
   โœ“ blocks explicit index imports (1)
     โœ“ reports the rule diagnostic 498ms
   โœ“ blocks raw session access in subscription callbacks (1)
     โœ“ reports the rule diagnostic 579ms
   โœ“ blocks raw client destructuring (1)
     โœ“ reports the rule diagnostic 521ms
   โœ“ allows public typed RPC helpers (1)
     โœ“ passes 504ms
   โœ“ raw client allowance does not permit installing the guard (1)
     โœ“ reports the rule diagnostic 541ms
   โœ“ permits guard installation when configured (1)
     โœ“ passes 408ms
   โœ“ guard installation allowance does not permit raw clients (1)
     โœ“ reports the rule diagnostic 401ms
   โœ“ guard installation allowance does not permit raw protocol imports (1)
     โœ“ reports the rule diagnostic 505ms
 โœ“  unit  src/lib/assetImageSource.test.ts (3 tests) 3ms
 โœ“  unit  src/features/keyboard/commandPaletteItems.test.ts (2 tests) 3ms
 โœ“  unit  src/features/pull-requests/pullRequestAgentTasks.test.ts (2 tests) 3ms
 โœ“  unit  src/lib/markdownMediaSource.test.ts (3 tests) 4ms
 โœ“  unit  src/features/pull-requests/pullRequestActions.test.ts (2 tests) 2ms
 โœ“  unit  src/lib/connection.test.ts (1 test) 9ms
 โœ“ rules/no-mobile-pull-request-glyph-literals.test.ts (10 tests) 4963ms
   โœ“ t3code/no-mobile-pull-request-glyph-literals (10)
     โœ“ allows glyphs picked from the module (1)
       โœ“ passes 554ms
     โœ“ allows unrelated symbols and copy that mentions pull requests (1)
       โœ“ passes 562ms
     โœ“ reports a pull request glyph in a JSX attribute (1)
       โœ“ reports the rule diagnostic 466ms
     โœ“ reports state glyphs chosen inline (1)
       โœ“ reports the rule diagnostic 539ms
     โœ“ reports glyphs in platform symbol objects (1)
       โœ“ reports the rule diagnostic 453ms
     โœ“ reports an Android-only pull request glyph (1)
       โœ“ reports the rule diagnostic 424ms
     โœ“ allows merge as an ordinary string outside an android symbol slot (1)
       โœ“ passes 538ms
     โœ“ allows merge in an android key outside a platform symbol object (1)
       โœ“ passes 443ms
     โœ“ reports an Android-only pull request glyph written as a template literal (1)
       โœ“ reports the rule diagnostic 472ms
     โœ“ reports glyphs in template literals (1)
       โœ“ reports the rule diagnostic 481ms
 โœ“  unit  src/features/connection/pairing.test.ts (5 tests) 10ms
 โœ“  unit  src/features/sharing/incoming-share-storage.test.ts (1 test) 6ms
 โœ“  unit  src/features/settings/SettingsRouteScreen.logic.test.ts (2 tests) 2ms
 โœ“ rules/prefer-catch-tags.test.ts (6 tests) 2941ms
   โœ“ t3code/prefer-catch-tags (6)
     โœ“ allows Effect.catchTags (1)
       โœ“ passes 557ms
     โœ“ ignores catchTag on other modules (1)
       โœ“ passes 474ms
     โœ“ ignores a local that shadows the namespace (1)
       โœ“ passes 404ms
     โœ“ reports Effect.catchTag (1)
       โœ“ reports the rule diagnostic 515ms
     โœ“ reports catchTag through an aliased namespace (1)
       โœ“ reports the rule diagnostic 455ms
     โœ“ reports a named catchTag import (1)
       โœ“ reports the rule diagnostic 522ms
 โœ“  unit  src/lib/markdownInlineFileLinks.test.ts (4 tests) 24ms
 โœ“  unit  src/lib/wideMarkdownBlocks.test.ts (2 tests) 3ms
 โœ“  unit  src/features/home/swipe-row-activation.test.ts (3 tests) 6ms
 โœ“  unit  src/state/asset-url-state.test.ts (3 tests) 2ms
 โœ“  unit  src/features/usage/usageEnvironmentSelection.test.ts (4 tests) 2ms
 โœ“  unit  src/features/review/shikiReviewHighlighter.test.ts (2 tests) 157ms
 โœ“  unit  src/lib/serialized-async-queue.test.ts (2 tests) 3ms
 โœ“  unit  src/features/pull-requests/botBadgeImages.test.ts (1 test) 10ms
 โœ“  unit  src/features/pull-requests/pullRequestDescriptionContent.test.ts (1 test) 3ms
 โœ“  unit  src/lib/openExternalUrl.test.ts (1 test) 5ms
 โœ“ rules/no-native-title-tooltip.test.ts (11 tests) 5275ms
   โœ“ t3code/no-native-title-tooltip (11)
     โœ“ allows intrinsic elements without a title attribute (1)
       โœ“ passes 529ms
     โœ“ allows title props on custom components (1)
       โœ“ passes 365ms
     โœ“ allows title on member expression components (1)
       โœ“ passes 443ms
     โœ“ allows title as an accessible name on embedded content (1)
       โœ“ passes 530ms
     โœ“ allows the svg title child element (1)
       โœ“ passes 414ms
     โœ“ allows document.title assignments (1)
       โœ“ passes 484ms
     โœ“ reports title on a truncating span (1)
       โœ“ reports the rule diagnostic 484ms
     โœ“ reports title on a button (1)
       โœ“ reports the rule diagnostic 485ms
     โœ“ reports title on a paragraph (1)
       โœ“ reports the rule diagnostic 519ms
     โœ“ reports title on a code element (1)
       โœ“ reports the rule diagnostic 531ms
     โœ“ reports title on an anchor (1)
       โœ“ reports the rule diagnostic 453ms
 โœ“  unit  src/features/threads/composerSendPresentation.test.ts (2 tests) 2ms
 โœ“  unit  src/features/pull-requests/pullRequestDescription.test.ts (1 test) 29ms
 โœ“  unit  src/features/sharing/incoming-share-native.test.ts (2 tests) 3ms
 โœ“  unit  src/features/pull-requests/pullRequestNavigation.test.ts (2 tests) 3ms
 โœ“  unit  src/features/diffs/nativeReviewDiffSurface.test.ts (1 test) 158ms
 โœ“  unit  src/features/threads/threadContentPresentation.test.ts (2 tests) 2ms
 โœ“  unit  src/features/threads/subagent-card-presentation.test.ts (1 test) 2ms
 โœ“  unit  src/features/cloud/managedRelayTokenStore.test.ts (1 test) 17ms
 โœ“  unit  src/features/pull-requests/pullRequestReviewDrafts.test.ts (1 test) 2ms
 โœ“  unit  src/state/thread-composer-error.test.ts (1 test) 2ms
 โœ“  unit  src/features/threads/customSnoozeDate.test.ts (2 tests) 3ms
 โœ“  unit  src/lib/filePreviewGallery.test.ts (1 test) 18ms
 โœ“ rules/no-em-dash-copy.test.ts (5 tests) 2151ms
   โœ“ t3code/no-em-dash-copy (5)
     โœ“ allows em dashes in comments and regex literals (1)
       โœ“ passes 453ms
     โœ“ allows hyphens and en dashes (1)
       โœ“ passes 538ms
     โœ“ reports a string literal (1)
       โœ“ reports the rule diagnostic 405ms
     โœ“ reports a template literal (1)
       โœ“ reports the rule diagnostic 338ms
     โœ“ reports JSX text (1)
       โœ“ reports the rule diagnostic 394ms
 โœ“  unit  src/features/browser/previewPromptText.test.ts (3 tests) 2ms
 โœ“  unit  src/features/pull-requests/pullRequestMediaSource.test.ts (1 test) 6ms
 โœ“  unit  src/features/prompt-links/prompt-link-model.test.ts (1 test) 2ms
 โœ“  unit  src/features/cloud/publicConfig.test.ts (1 test) 2ms
 โœ“  unit  src/state/queries.test.ts (1 test) 14ms
 โœ“  unit  src/lib/nativeComposerTheme.test.ts (1 test) 4ms
 โœ“  unit  src/lib/mobileThemeRuntime.test.ts (1 test) 2ms
 โœ“  unit  src/lib/http-response.test.ts (1 test) 3ms
 โœ“  unit  src/lib/filePreview.test.ts (4 tests) 5ms
 โœ“  unit  src/features/projects/AddProjectScreen.logic.test.ts (1 test) 2ms
 โœ“  unit  src/lib/foreground-handoff.test.ts (1 test) 2ms
 โœ“  unit  src/lib/appearancePreferences.test.ts (1 test) 2ms
 โœ“  unit  src/features/settings/lib/legal-document-url.test.ts (2 tests) 2ms
 โœ“  unit  src/features/threads/projectThreadCreationValidation.test.ts (2 tests) 2ms
 โœ“  unit  src/features/keyboard/hardwareKeyboardCommands.test.ts (2 tests) 3ms
 โœ“ rules/no-manual-memo.test.ts (14 tests) 6221ms
   โœ“ t3code/no-manual-memo (11)
     โœ“ allows plain derived values (1)
       โœ“ passes 400ms
     โœ“ allows useStableCallback (1)
       โœ“ passes 397ms
     โœ“ allows other React members (1)
       โœ“ passes 415ms
     โœ“ allows other directives (1)
       โœ“ passes 590ms
     โœ“ reports a "use memo" directive (1)
       โœ“ reports the rule diagnostic 562ms
     โœ“ reports useMemo (1)
       โœ“ reports the rule diagnostic 473ms
     โœ“ reports useCallback (1)
       โœ“ reports the rule diagnostic 444ms
     โœ“ reports React.useMemo (1)
       โœ“ reports the rule diagnostic 617ms
     โœ“ reports "use no memo" (1)
       โœ“ reports the rule diagnostic 543ms
     โœ“ reports a module-level "use no forget" (1)
       โœ“ reports the rule diagnostic 388ms
     โœ“ allows the same text as a string value (1)
       โœ“ passes 347ms
   โœ“ t3code/no-manual-memo with allowMemoHooks (3)
     โœ“ allows useMemo (1)
       โœ“ passes 408ms
     โœ“ allows useCallback (1)
       โœ“ passes 336ms
 โœ“ rules/no-hookless-use-function.test.ts (9 tests) 4055ms
   โœ“ t3code/no-hookless-use-function (9)
     โœ“ allows a hook that calls useState (1)
       โœ“ passes 521ms
     โœ“ allows a hook that only calls use() (1)
       โœ“ passes 603ms
     โœ“ allows a hook that calls a member hook (1)
       โœ“ passes 475ms
     โœ“ allows a plain function (1)
       โœ“ passes 551ms
     โœ“ allows names that only start with use (1)
       โœ“ passes 413ms
     โœ“ reports a hook-less function declaration (1)
       โœ“ reports the rule diagnostic 427ms
     โœ“ reports a hook-less arrow returning a closure (1)
       โœ“ reports the rule diagnostic 427ms
     โœ“ reports a hook-less function expression (1)
       โœ“ reports the rule diagnostic 341ms
 โœ“ rules/no-dom-test-environment.test.ts (12 tests) 3719ms
   โœ“ t3code/no-dom-test-environment (12)
     โœ“ allows browser tests (1)
       โœ“ passes 506ms
     โœ“ allows similarly named packages (1)
       โœ“ passes 443ms
     โœ“ rejects line pragmas (1)
       โœ“ reports the rule diagnostic 352ms
     โœ“ rejects block pragmas for any environment (1)
       โœ“ reports the rule diagnostic 390ms
     โœ“ rejects jsdom imports (1)
       โœ“ reports the rule diagnostic 412ms
     โœ“ rejects happy-dom imports (1)
       โœ“ reports the rule diagnostic 345ms

 Test Files  25 passed (25)
      Tests  366 passed (366)
   Start at  05:21:51
   Duration  29.97s (tests 96%, import 2%, setup 1%)


 โœ“  unit  src/reactCompilerCoverage.test.ts (918 tests) 35534ms
   โœ“ React Compiler coverage (918)
     โœ“ Metro's transformer applies the compiler 1591ms
     โœ“ compiles src/Stack.tsx 318ms
     โœ“ compiles src/components/ComposerContextSheet.tsx 398ms
     โœ“ compiles src/components/ComposerEditor.tsx 328ms
     โœ“ compiles src/features/browser/PreviewStreamWebView.tsx 361ms
     โœ“ compiles src/features/files/AttachmentFileScreen.tsx 492ms
     โœ“ compiles src/features/files/ThreadFilesRouteScreen.tsx 747ms
     โœ“ compiles src/features/home/HomeScreen.tsx 595ms
     โœ“ compiles src/features/home/thread-swipe-actions.tsx 385ms
     โœ“ compiles src/features/layout/AdaptiveWorkspaceLayout.tsx 390ms
     โœ“ compiles src/features/pull-requests/PullRequestRouteScreen.tsx 454ms
     โœ“ compiles src/features/settings/SettingsScheduledTasksRouteScreen.tsx 316ms
     โœ“ compiles src/features/terminal/ThreadTerminalRouteScreen.tsx 304ms
     โœ“ compiles src/features/threads/NewTaskDraftScreen.tsx 439ms
     โœ“ compiles src/features/threads/ThreadComposer.tsx 815ms
     โœ“ compiles src/features/threads/ThreadDetailScreen.tsx 868ms
     โœ“ compiles src/features/threads/ThreadFeed.tsx 789ms
     โœ“ compiles src/features/threads/new-task-flow-provider.tsx 551ms
     โœ“ compiles src/features/threads/thread-list-v2-items.tsx 330ms
     โœ“ compiles src/features/threads/thread-work-log.tsx 401ms
     โœ“ caches the thread feed derivation 898ms

 Test Files  198 passed (198)
      Tests  2219 passed (2219)
   Start at  05:21:52
   Duration  47.14s (import 35%, transform 29%, tests 25%, setup 8%, environment 3%)


---
vp run: 27/27 successful. (Run `vp run --last-details` for full details)
Post job cleanup.
Cache hit occurred on the primary key electron-Linux-X64-854e11ddd491bd4f350eebb67a74265df119376a3984c8e153cfe5fc8ced6309, not saving cache.
Post job cleanup.
##[start-action display=Cache full pnpm store;id=__46f19be7-e4ca-475e-a1e6-9b54be8eaaac.__actions_cache]
Post job cleanup.
[command]/usr/bin/tar --posix -cf cache.tzst --exclude cache.tzst -P -C /home/runner/_work/t3code/t3code --files-from manifest.txt --use-compress-program zstdmt
Failed to save: Unable to reserve cache with key pnpm-full-v1-Linux-X64-8600a8d4a7fcc9519d421cef0c77201c793c5d8afbbef2897636b5b9305a9b7d, another job may be creating this cache.
##[end-action id=__46f19be7-e4ca-475e-a1e6-9b54be8eaaac.__actions_cache;outcome=success;conclusion=success;duration_ms=4220]
##[start-action display=Cache Vite+;id=__46f19be7-e4ca-475e-a1e6-9b54be8eaaac.vp_cache]
Post job cleanup.
Cache hit occurred on the primary key vite-plus-home-v2-Linux-X64-1.3.0-node26.12.1-pnpm@12.14.0, not saving cache.
##[end-action id=__46f19be7-e4ca-475e-a1e6-9b54be8eaaac.vp_cache;outcome=success;conclusion=success;duration_ms=70]
Post job cleanup.
[command]/usr/local/bin/git version
git version 2.55.0
Temporarily overriding HOME='/home/runner/_work/_temp/0dd01d32-87cf-4853-8552-43e715cd42c3' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
[command]/usr/local/bin/git config --global --add safe.directory /home/runner/_work/t3code/t3code
Removing SSH command configuration
[command]/usr/local/bin/git config --local --name-only --get-regexp core\.sshCommand
[command]/usr/local/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
fatal: No url found for submodule path '.repos/alchemy-effect/submodules/distilled' in .gitmodules
Warning: The process '/usr/local/bin/git' failed with exit code 128
A job completed hook has been configured by the self-hosted runner administrator
โ–ธ Run '/job_completed.sh'
shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
env:
  BLACKSMITH_RUNNER_MESSAGE_WAIT_MS: 157
  BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 378
  BLACKSMITH_CHECK_RUN_ID: 120788637006
  BLACKSMITH_JOB_DISPLAY_NAME: Test
  GITHUB_ACTIONS_CACHE_MODE: write
Docker container cache not activated, skipping hash computation.
No active SSH sessions detected. Proceeding with shutdown immediately.
Cleaning up orphan processes