GitHub check

256 KB of 403 KB loaded Download the full log (403 KB)
147 KB of earlier output not loaded
.3014977Z    Start at  20:14:56
   Duration  3.51s (transform 59%, import 34%, setup 4%, tests 2%)

 โœ“ src/composerPullRequestMatches.test.ts (3 tests) 10ms
 โœ“ src/connectAuth.test.ts (3 tests) 4ms

~/packages/client-runtime$ vp test run โŠ˜ cache disabled
 โœ“ src/searchRanking.test.ts (3 tests) 10ms
 โœ“ src/cloneUrl.test.ts (3 tests) 3ms
 โœ“ src/desktopBootstrapToken.test.ts (3 tests) 17ms
 โœ“ src/githubMarkdownLinks.test.ts (3 tests) 34ms
 โœ“ src/server/accountUsage.test.ts (9 tests) 1030ms
 โœ“ src/usageFormat.test.ts (4 tests) 10ms
 โœ“ src/favicon.test.ts (6 tests) 3ms

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

 โœ“ src/desktopAppControl.test.ts (2 tests) 8ms
 โœ“ src/schemaYaml.test.ts (2 tests) 22ms
 โœ“ src/oauthScope.test.ts (3 tests) 4ms
 โœ“ src/thirdPartyLicenses.test.ts (2 tests) 6ms
 โœ“ src/t3McpToolPresentation.test.ts (2 tests) 50ms
 โœ“ src/AgentScope.test.ts (1 test) 37ms
 โœ“ src/threadSearch.test.ts (2 tests) 16ms
 โœ“ src/relayUrl.test.ts (4 tests) 11ms
 โœ“ src/server/driver.test.ts (4 tests) 135ms

 Test Files  6 passed (6)
      Tests  93 passed (93)
   Start at  20:14:56
   Duration  5.16s (transform 61%, import 32%, setup 5%, tests 2%)

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

~/packages/tailscale$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/providerAuthReturnUrl.test.ts (5 tests) 38ms
 โœ“ src/server/usageLimits.test.ts (9 tests) 64ms
 โœ“ src/telemetryId.test.ts (1 test) 8ms
 โœ“ src/terminalLabels.test.ts (2 tests) 5ms
 โœ“ src/relayJwt.test.ts (1 test) 6ms
 โœ“ src/changedFileKind.test.ts (5 tests) 4ms
 โœ“ src/relaySigning.test.ts (1 test) 9ms
 โœ“ src/t3ProjectFile.test.ts (2 tests) 4ms

 Test Files  91 passed (91)
      Tests  1022 passed | 2 skipped (1024)
   Start at  20:14:41
   Duration  20.07s (import 41%, transform 31%, setup 15%, tests 12%, worker 1%)

     Import  351 modules were evaluated 2816 times ยท 46.33s total, 41% of tracked time
             ~4.29s 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/server/auth.test.ts (10 tests) 36ms

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


~/packages/effect-acp$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/server/CursorAgentSdk.test.ts (1 test) 23ms
 โœ“ src/server/textGeneration.test.ts (8 tests) 76ms
 โœ“ src/tailscale.test.ts (7 tests) 24ms

 Test Files  1 passed (1)
      Tests  7 passed (7)
   Start at  20:15:02
   Duration  481ms (import 43%, transform 28%, setup 20%, tests 7%, worker 1%)


~/packages/effect-codex-app-server$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/server/accountCache.test.ts (2 tests) 3ms
 โœ“ src/server/transportFailure.test.ts (10 tests) 6ms

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

 โœ“ src/server/status.test.ts (8 tests) 50ms
 โœ“ src/server/CursorSdk.test.ts (2 tests) 23ms
 โœ“ src/server/adapter.test.ts (14 tests) 169ms
 โœ“ src/server/credentialStore.test.ts (5 tests) 35ms
 โœ“ src/server/driver.test.ts (2 tests) 107ms

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

 โœ“ src/server/CursorSdkCatalog.test.ts (1 test) 12ms

 Test Files  14 passed (14)
      Tests  86 passed (86)
   Start at  20:14:58
   Duration  5.12s (transform 47%, import 39%, setup 8%, tests 6%)


~/packages/provider-acp-registry$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/_internal/stdio.test.ts (1 test) 21ms
 โœ“ src/schema.test.ts (2 tests) 11ms
 โœ“ src/errors.test.ts (6 tests) 64ms

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

 โœ“ src/agent.test.ts (6 tests) 117ms
 โœ“ src/_internal/stdio.test.ts (1 test) 45ms
 โœ“ src/_internal/shared.test.ts (4 tests) 38ms
 โœ“ src/authorization/layer.test.ts (23 tests) 354ms
 โœ“ src/protocol.test.ts (15 tests) 97ms
 โœ“ src/schema.test.ts (4 tests) 27ms
 โœ“ src/connection/supervisor.test.ts (30 tests) 291ms
 โœ“ src/client.test.ts (2 tests) 245ms

 Test Files  5 passed (5)
      Tests  26 passed (26)
   Start at  20:15:02
   Duration  1.96s (transform 69%, import 18%, tests 6%, setup 6%)


~/packages/provider-core$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/state/runtime.test.ts (23 tests) 275ms
 โœ“ src/rpc/session.test.ts (14 tests) 421ms
 โœ“ src/protocol.test.ts (21 tests) 1126ms
   โœ“ effect-acp protocol (21)
     โœ“ propagates the real child exit code when the input stream ends 452ms
     โœ“ does not emit a second process-exit error after a decode failure 531ms
 โœ“ src/connection/registry.test.ts (41 tests) 397ms

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

 โœ“ src/state/server.test.ts (19 tests) 42ms
 โœ“ src/state/threads-sync.test.ts (24 tests) 406ms
 โœ“ src/server/usageLimits.test.ts (7 tests) 10ms
 โœ“ src/operations/commands.test.ts (14 tests) 88ms
 โœ“ src/state/pullRequests.test.ts (55 tests) 1367ms
   โœ“ returns a successful mutation when source invalidation stalls 1005ms
 โœ“ src/voice-input/controller.test.ts (22 tests) 51ms
 โœ“ src/state/shell-sync.test.ts (6 tests) 101ms
 โœ“ src/server/AcpRegistryRuntimeCoordinator.test.ts (7 tests) 85ms
 โœ“ src/server/ModelCatalog.test.ts (4 tests) 3ms
 โœ“ src/server/authenticationState.test.ts (3 tests) 58ms
 โœ“ src/state/environmentHttpAuth.test.ts (32 tests) 270ms
 โœ“ src/state/vcs.test.ts (9 tests) 108ms
 โœ“ src/connection/onboarding.test.ts (13 tests) 108ms
 โœ“ src/state/entities.test.ts (16 tests) 32ms
 โœ“ src/state/vcsAction.test.ts (9 tests) 61ms
 โœ“ src/state/orchestrationV2Projection.test.ts (13 tests) 35ms
 โœ“ src/server/auth.test.ts (5 tests) 82ms
 โœ“ src/relay/managedRelay.test.ts (7 tests) 96ms
 โœ“ src/relay/discovery.test.ts (7 tests) 77ms
 โœ“ src/server/AcpRegistrySupport.test.ts (31 tests) 1207ms
 โœ“ src/state/threads-atoms.test.ts (4 tests) 118ms
 โœ“ src/server/notification.test.ts (4 tests) 4ms
 โœ“ src/server/attachmentPrompt.test.ts (2 tests) 19ms
 โœ“ src/state/threadCommands.test.ts (19 tests) 151ms
 โœ“ src/server/failure.test.ts (10 tests) 26ms
 โœ“ src/connection/routes.test.ts (19 tests) 42ms
 โœ“ src/server/providerAuthFlow.test.ts (17 tests) 150ms
 โœ“ src/rpc/client.test.ts (8 tests) 95ms
 โœ“ src/server/managedProvider.test.ts (7 tests) 111ms
 โœ“ src/server/driver.test.ts (9 tests) 43ms

 Test Files  5 passed (5)
      Tests  55 passed (55)
   Start at  20:15:03
   Duration  4.65s (transform 64%, import 23%, tests 9%, setup 4%)

 โœ“ src/server/snapshotProbe.test.ts (7 tests) 31ms

~/packages/provider-acp$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/server/maintenanceResolver.test.ts (52 tests) 239ms
 โœ“ src/server/instanceEnvironment.test.ts (4 tests) 32ms
 โœ“ src/server/processGroup.test.ts (2 tests) 9ms
 โœ“ src/server/mcpSession.test.ts (2 tests) 9ms
 โœ“ src/platform/storageDocument.test.ts (13 tests) 22ms
 โœ“ src/server/collectStreamText.test.ts (2 tests) 33ms
 โœ“ src/state/threadShell.test.ts (9 tests) 73ms
 โœ“ src/device/stream.test.ts (14 tests) 82ms

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

 โœ“ src/state/projectGrouping.test.ts (20 tests) 24ms
 โœ“ src/server/mcpToolPresentation.test.ts (4 tests) 8ms
 โœ“ src/server/threadTitleContext.test.ts (2 tests) 10ms
 โœ“ src/server/textGenerationUtils.test.ts (3 tests) 14ms
 โœ“ src/state/fileMetadata.test.ts (11 tests) 271ms
 โœ“ src/server/textGenerationPrompts.test.ts (1 test) 5ms

 Test Files  17 passed (17)
      Tests  130 passed (130)
   Start at  20:15:05
   Duration  4.36s (transform 51%, import 37%, setup 9%, tests 3%)

     Import  176 modules were evaluated 1005 times ยท 8.70s total, 37% of tracked time
             ~281ms 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/source-control-github$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/connection/resolver.test.ts (6 tests) 68ms
 โœ“ src/state/commandPermissions.test.ts (14 tests) 83ms
 โœ“ src/server/sessionConfig.test.ts (6 tests) 5ms
 โœ“ src/server/clientPolicy.test.ts (13 tests) 89ms
 โœ“ src/server/mcpOverAcpBridge.test.ts (3 tests) 56ms
 โœ“ src/state/threadWorkflows.test.ts (21 tests) 16ms
 โœ“ src/state/threadRelationships.test.ts (11 tests) 31ms
 โœ“ src/state/threadHistoryMerge.test.ts (7 tests) 5ms
 โœ“ src/mcpApps/host.test.ts (9 tests) 13ms
 โœ“ src/state/threadExecution.test.ts (11 tests) 17ms

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

 โœ“ src/server/stderr.test.ts (2 tests) 18ms
 โœ“ src/connection/outdatedHostUpdate.test.ts (3 tests) 129ms
 โœ“ src/state/shellReducer.test.ts (14 tests) 14ms
 โœ“ src/server/runtimeModel.test.ts (47 tests) 604ms
 โœ“ src/state/threadSnoozed.test.ts (20 tests) 70ms
 โœ“ src/state/threadSort.test.ts (21 tests) 196ms
stdout | src/state/serverUsage.test.ts > keeps the cached usage summary when the awaited refresh fails
[20:15:12.070] 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) 81ms
 โœ“ src/state/projectCommands.test.ts (4 tests) 88ms
 โœ“ src/server/gitHubPullRequestJson.test.ts (49 tests) 110ms
 โœ“ src/client.test.ts (26 tests) 8411ms
   โœ“ effect-acp client (19)
     โœ“ transforms fragmented stdout before parsing and preserves UTF-8 611ms
     โœ“ preserves stdout transform errors without logging rejected input 491ms
     โœ“ reports idle child termination and rejects later requests and notifications 640ms
     โœ“ initializes, prompts, receives updates, and handles permission requests 759ms
     โœ“ returns structured invalid params without exposing values from typed extension request payloads 935ms
     โœ“ preserves ACP v2 structured diff semantics 667ms
     โœ“ does not turn unsupported ACP v2 auth methods into agent login 746ms
     โœ“ preserves registry env-var authentication extensions 923ms
     โœ“ replays buffered notifications to handlers registered after they arrive 708ms
     โœ“ routes MCP-over-ACP connect, message, notification, and disconnect callbacks 854ms
     โœ“ preserves future content and session-update variants 776ms

 Test Files  6 passed (6)
      Tests  62 passed (62)
   Start at  20:15:02
   Duration  9.81s (tests 61%, transform 22%, import 13%, setup 4%)


~/packages/provider-muse$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/operations/commands.performance.test.ts (1 test) 318ms
 โœ“ src/state/terminalSession.test.ts (9 tests) 46ms
 โœ“ src/state/subagentRuntime.test.ts (11 tests) 21ms
 โœ“ src/platform/shellCacheEncoding.test.ts (5 tests) 332ms

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

 โœ“ src/server/coreRuntimeEvents.test.ts (5 tests) 26ms
 โœ“ src/server/nativeLogging.test.ts (3 tests) 20ms
 โœ“ src/authorization/remote.test.ts (5 tests) 260ms
 โœ“ src/state/sharedSettings.test.ts (17 tests) 59ms
 โœ“ src/server/usageLimits.test.ts (4 tests) 31ms
 โœ“ src/server/itemPresentation.test.ts (6 tests) 30ms
 โœ“ src/state/usage.test.ts (8 tests) 58ms
 โœ“ src/work-log/commandLabel.test.ts (81 tests) 255ms
 โœ“ src/state/threadRequests.test.ts (8 tests) 20ms
 โœ“ src/server/sdk.test.ts (11 tests) 144ms
 โœ“ src/server/protocol.test.ts (1 test) 3ms
 โœ“ src/server/GitHubCredentials.test.ts (5 tests) 61ms
 โœ“ src/state/boundedThreadSnapshotHttp.test.ts (5 tests) 147ms
 โœ“ src/server/GitHubRest.test.ts (8 tests) 147ms
 โœ“ src/work-log/presentation.test.ts (19 tests) 47ms
 โœ“ src/server/gitHubGraphQlClient.test.ts (9 tests) 428ms
 โœ“ src/server/githubStackActions.test.ts (9 tests) 241ms
 โœ“ src/projectFaviconCache.test.ts (8 tests) 433ms
   โœ“ project favicon image loader (3)
     โœ“ downscales large bitmaps and refuses large vector icons 370ms
 โœ“ src/server/GitHubPullRequestProvider.test.ts (17 tests) 139ms
 โœ“ src/device/duoControl.test.ts (12 tests) 28ms
 โœ“ src/pullRequestQuery.test.ts (17 tests) 44ms
 โœ“ src/device/duoViewer.test.ts (2 tests) 61ms
 โœ“ src/relay/managedRelayState.test.ts (4 tests) 81ms
 โœ“ src/server/GitHubQuota.test.ts (4 tests) 42ms
 โœ“ src/state/threadSubagents.test.ts (7 tests) 45ms
 โœ“ src/server/gitHubRepositoryResolution.test.ts (3 tests) 8ms
 โœ“ src/providerSkills.test.ts (7 tests) 19ms
 โœ“ src/state/threadDetail.test.ts (11 tests) 51ms
 โœ“ src/server/modelCatalog.test.ts (1 test) 16ms
 โœ“ src/connection/diagnosis.test.ts (7 tests) 28ms
 โœ“ src/server/GitHubPullRequestApi.test.ts (105 tests) 2521ms
   โœ“ GitHubPullRequestApi.layer (104)
     โœ“ keeps the pull request being ticked through, not the one looked up first 984ms
 โœ“ src/server/GitHubSourceControlProvider.test.ts (29 tests) 2466ms
   โœ“ keeps Enterprise operations on the selected remote: git@code.example.test:team/project.git 703ms
   โœ“ keeps Enterprise operations on the selected remote: ssh://git@code.example.test/team/project.git 720ms
   โœ“ keeps Enterprise operations on the selected remote: https://code.example.test/team/project.git 675ms

 Test Files  10 passed (10)
      Tests  238 passed (238)
   Start at  20:15:10
   Duration  8.02s (transform 52%, import 29%, tests 15%, setup 4%)

 โœ“ src/server/clientTerminals.test.ts (10 tests) 7898ms
   โœ“ AcpClientTerminals (9)
     โœ“ bounds unreleased terminal handles without invalidating existing ids 6541ms
     โœ“ bounds aggregate output retained across unreleased terminals 618ms

 Test Files  8 passed (8)
      Tests  89 passed (89)
   Start at  20:15:09
   Duration  9.44s (tests 41%, transform 33%, import 20%, setup 6%)


~/oxlint-plugin-t3code$ vp test run --config ../vite.config.ts --dir . โŠ˜ cache disabled

~/packages/ssh$ vp test run --config ../../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/preview/serverBrowserStream.test.ts (5 tests) 16ms
 โœ“ src/state/itemSupport.test.ts (2 tests) 5ms
 โœ“ src/connection/presentation.test.ts (4 tests) 12ms
 โœ“ src/server/maintenance.test.ts (3 tests) 53ms
 โœ“ src/state/threadFeedback.test.ts (5 tests) 7ms
 โœ“ src/state/presentation.test.ts (3 tests) 59ms
 โœ“ src/server/textGeneration.test.ts (8 tests) 155ms
 โœ“ src/server/status.test.ts (3 tests) 415ms

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

 โœ“ src/pullRequestMarkdown.test.ts (15 tests) 21ms
 โœ“ src/pullRequestLinkInput.test.ts (14 tests) 23ms

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

 โœ“ src/device/phoneViewer.test.ts (1 test) 100ms
 โœ“ src/device/avcConfig.test.ts (8 tests) 39ms
 โœ“ src/server/adapter.test.ts (36 tests) 1104ms

 Test Files  9 passed (9)
      Tests  73 passed (73)
   Start at  20:15:13
   Duration  7.03s (transform 56%, import 30%, setup 8%, tests 6%)


~/scripts$ vp test run --config ../vite.config.ts --dir . โŠ˜ cache disabled
 โœ“ src/config.test.ts (4 tests) 198ms
 โœ“ src/auth.test.ts (2 tests) 84ms
 โœ“ src/state/projectEntities.test.ts (2 tests) 70ms
 โœ“ src/handoff.test.ts (8 tests) 33ms

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

stdout | src/command.test.ts > ssh command > preserves process output: default head
[20:15:21.305] 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/platform/orchestrationCache.test.ts (3 tests) 70ms
stdout | src/command.test.ts > ssh command > preserves process output: opt-in tail
[20:15:21.584] 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/command.test.ts (7 tests) 762ms
 โœ“ src/threadPullRequestCompatibility.test.ts (10 tests) 40ms
 โœ“ src/tunnel.test.ts (7 tests) 606ms

 Test Files  4 passed (4)
      Tests  20 passed (20)
   Start at  20:15:19
   Duration  2.71s (import 42%, tests 25%, transform 19%, setup 13%, worker 1%)


~/apps/mobile$ vp test run --project unit --project react โŠ˜ cache disabled
 โœ“ src/device/phoneScene.test.ts (8 tests) 294ms
 โœ“ src/reviewGuideTour.test.ts (7 tests) 50ms
 โœ“ src/state/usageProgress.test.ts (4 tests) 29ms
 โœ“ src/operations/projects.test.ts (6 tests) 21ms
 โœ“ src/device/model.test.ts (4 tests) 10ms

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

 โœ“ src/device/phoneInteraction.test.ts (4 tests) 35ms
 โœ“ src/state/attachments.test.ts (3 tests) 19ms
 โœ“ src/device/duoScene.test.ts (2 tests) 72ms
 โœ“ lib/third-party-licenses.test.ts (19 tests) 716ms
 โœ“ src/t3ToolSummary.test.ts (3 tests) 22ms
 โœ“ dev-runner.test.ts (31 tests) 349ms
 โœ“ notify-discord-release.test.ts (15 tests) 953ms
   โœ“ Discord release CLI and workflow (4)
     โœ“ passes the published nightly body from the workflow to ordered sends 427ms
 โœ“ src/connection/errors.test.ts (5 tests) 33ms
 โœ“ src/state/filesystem.test.ts (8 tests) 8ms
 โœ“ merge-update-manifests.test.ts (5 tests) 148ms
 โœ“ legend-list-initial-reveal.test.ts (10 tests) 311ms
 โœ“ src/work-log/toolPresentation.test.ts (4 tests) 22ms
 โœ“ src/state/threadSearch.test.ts (4 tests) 54ms
 โœ“ build-npm-launcher.test.ts (1 test) 2666ms
   โœ“ build-npm-launcher (1)
     โœ“ publishes a launcher that downloads, verifies, caches, and runs the release executable 2622ms
 โœ“ src/mediaSource.test.ts (8 tests) 80ms
 โœ“ lib/dev-share.test.ts (5 tests) 179ms
 โœ“ src/connection/compatibility.test.ts (4 tests) 47ms
 โœ“  react  src/native/useRestingTopOffset.test.tsx (4 tests) 154ms
 โœ“ src/state/turnItemPresentation.test.ts (2 tests) 10ms
 โœ“ lib/public-config.test.ts (1 test) 30ms
 โœ“ src/promptLinks.test.ts (3 tests) 14ms
 โœ“ src/device/streamFrames.test.ts (1 test) 69ms
 โœ“ src/device/modelScene.test.ts (2 tests) 19ms
 โœ“ update-release-package-versions.test.ts (3 tests) 300ms
 โœ“  react  src/components/ui/Dialog.android.test.tsx (1 test) 170ms
 โœ“ src/state/providerInstanceDisplay.test.ts (10 tests) 26ms
 โœ“ mobile-native-client.test.ts (2 tests) 302ms
 โœ“ src/state/serverConfigProjection.test.ts (2 tests) 26ms
 โœ“ src/device/deviceMotion.test.ts (2 tests) 32ms
 โœ“ lib/cli-external-packages.test.ts (10 tests) 4606ms
   โœ“ external package dependency closure (1)
     โœ“ keeps every runtime dependency of an external package external too 4447ms
 โœ“  react  src/native/NativeHeaderToolbar.test.tsx (4 tests) 155ms
 โœ“ mock-update-server.test.ts (2 tests) 447ms
 โœ“ src/state/customSnooze.test.ts (11 tests) 20ms
 โœ“ src/state/queryPersistence.test.ts (3 tests) 25ms
 โœ“ lib/resolve-catalog.test.ts (2 tests) 4ms
 โœ“ sync-reference-repos.test.ts (2 tests) 154ms
 โœ“ src/state/threadInbox.test.ts (2 tests) 17ms
 โœ“ mobile-showcase.test.ts (3 tests) 26ms
 โœ“ lib/build-target-arch.test.ts (1 test) 59ms
 โœ“ src/work-log/itemDetail.test.ts (2 tests) 21ms
 โœ“ src/errors/safeLog.test.ts (2 tests) 13ms
 โœ“ lib/icon-export.test.ts (1 test) 3ms
 โœ“ src/state/usageAccess.test.ts (8 tests) 18ms
 โœ“ src/state/auth.test.ts (2 tests) 29ms
 โœ“ resolve-previous-release-tag.test.ts (3 tests) 26ms
 โœ“ mobile-native-static-check.test.ts (2 tests) 62ms
 โœ“ src/userMessage.test.ts (3 tests) 26ms
 โœ“ src/filePreview.test.ts (3 tests) 177ms
 โœ“ src/markdownImages.test.ts (12 tests) 20ms
 โœ“ src/errors/transport.test.ts (3 tests) 4ms
 โœ“ src/relay/errorPresentation.test.ts (3 tests) 6ms
 โœ“ src/mediaReference.test.ts (7 tests) 17ms
 โœ“ src/device/duoSnap.test.ts (1 test) 9ms
 โœ“ src/state/threadHistoryController.test.ts (1 test) 29ms
 โœ“ src/device/androidFoldScene.test.ts (1 test) 55ms
 โœ“ src/state/commandOutput.test.ts (1 test) 3ms
 โœ“ src/environment/endpoint.test.ts (1 test) 3ms
 โœ“ src/errors/errorTrace.test.ts (2 tests) 25ms
 โœ“ src/state/assets.test.ts (1 test) 6ms
 โœ“ src/work-log/scrollAnchor.test.ts (1 test) 20ms
 โœ“  react  src/features/settings/components/BranchNamingSettings.test.tsx (4 tests) 100ms
 โœ“  react  src/state/use-selected-thread-git-actions.test.tsx (1 test) 38ms
 โœ“ src/secretRequest.test.ts (2 tests) 12ms
 โœ“ build-desktop-artifact.test.ts (42 tests) 9605ms
   โœ“ build-desktop-artifact (40)
     โœ“ rejects overlapping builds from another process until restoration finishes 3816ms
     โœ“ builds web, server and desktop with the resolved version, restores changed manifests and preserves edits to matching ones 1396ms
     โœ“ reports a restore failure while still restoring the remaining manifests 703ms
     โœ“ unpacks target Windows natives while excluding the other architecture 302ms
     โœ“ rejects a node-pty prebuild for the wrong architecture in a Linux arm64 archive 312ms
 โœ“ src/state/archivedThreads.test.ts (1 test) 9ms

 Test Files  119 passed (119)
      Tests  1130 passed (1130)
   Start at  20:15:00
   Duration  34.97s (import 53%, transform 29%, setup 11%, tests 5%, worker 1%)

     Import  490 modules were evaluated 8709 times ยท 107.77s total, 53% of tracked time
             ~12.19s 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


 โœ“  unit  src/lib/threadActivity.test.ts (35 tests) 263ms
 โœ“  unit  src/lib/modelOptions.test.ts (29 tests) 70ms
 โœ“  unit  src/features/threads/threadListV2.test.ts (56 tests) 131ms
 โœ“  unit  src/state/thread-outbox.test.ts (35 tests) 118ms
 โœ“  react  src/features/settings/SettingsServerControlsRouteScreen.test.tsx (1 test) 126ms
 โœ“  unit  src/features/agent-awareness/remoteRegistration.test.ts (15 tests) 777ms
 โœ“ knip-schemas.test.ts (1 test) 17759ms
   โœ“ allows types and schemas through the real Knip CLI without hiding runtime or file findings 17755ms

 Test Files  21 passed (21)
      Tests  161 passed (161)
   Start at  20:15:21
   Duration  19.20s (tests 51%, import 24%, transform 14%, setup 11%)

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


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
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
 โœ“  unit  src/lib/composerFiles.test.ts (36 tests) 94ms
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
 โœ“ rules/no-polling-loop-in-tests.test.ts (16 tests) 21172ms
   โœ“ t3code/no-polling-loop-in-tests (15)
     โœ“ allows a fixed-count flush followed by unrelated error handling (1)
       โœ“ passes 1299ms
     โœ“ allows a fixed-N flush with a literal bound (1)
       โœ“ passes 1067ms
     โœ“ allows a fixed-N while flush with a counter bound (1)
       โœ“ passes 1413ms
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
     โœ“ allows a fixed-N do-while flush against a named bound (1)
       โœ“ passes 2875ms
     โœ“ allows a loop that takes from a queue (1)
       โœ“ passes 2241ms
     โœ“ ignores waits inside nested callbacks (1)
       โœ“ passes 1580ms
     โœ“ reports a budgeted yieldNow poll that dies after the loop (1)
       โœ“ reports the rule diagnostic 2004ms
     โœ“ reports a while loop spinning on a predicate (1)
       โœ“ reports the rule diagnostic 1191ms
     โœ“ reports a while loop bounded by a length predicate (1)
       โœ“ reports the rule diagnostic 1122ms
     โœ“ reports a comparison against an identifier the loop never advances (1)
       โœ“ reports the rule diagnostic 1000ms
     โœ“ reports a for loop bounded by a length predicate (1)
       โœ“ reports the rule diagnostic 871ms
     โœ“ reports a sleep poll with a counter bound and an early return (1)
       โœ“ reports the rule diagnostic 751ms
     โœ“ reports a microtask poll keyed on the loop condition (1)
       โœ“ reports the rule diagnostic 928ms
     โœ“ reports an awaited setTimeout poll (1)
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
       โœ“ reports the rule diagnostic 934ms
     โœ“ reports an awaited Promise.resolve poll that breaks (1)
       โœ“ reports the rule diagnostic 925ms
   โœ“ ignores non-test files (1)
     โœ“ passes 873ms
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
 โœ“  unit  src/features/sharing/incoming-share-model.test.ts (19 tests) 22ms
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
}
[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)
        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
  }
}

 โœ“  unit  src/lib/attachmentUpload.test.ts (28 tests) 102ms
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: {
 โœ“  unit  src/state/use-thread-outbox-drain.test.ts (23 tests) 143ms
    _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
 โœ“ rules/no-test-timeout-or-unreasoned-skip.test.ts (16 tests) 22376ms
        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 > 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
}

   โœ“ t3code/no-test-timeout-or-unreasoned-skip (13)
     โœ“ allows tests without overrides, conditional skips, and waitFor timeouts (1)
       โœ“ passes 1547ms
     โœ“ allows a skip with a quarantine issue or a GitHub issue URL (1)
       โœ“ passes 1510ms
     โœ“ reports a numeric timeout on it.effect (1)
       โœ“ reports the rule diagnostic 1957ms
     โœ“ reports a timeout through .each and .skipIf chains (1)
       โœ“ reports the rule diagnostic 2438ms
     โœ“ reports retry options, options-first timeouts, and hook timeouts (1)
       โœ“ reports the rule diagnostic 2107ms
     โœ“ reports vi.setConfig timeouts (1)
       โœ“ reports the rule diagnostic 2539ms
     โœ“ reports a skip whose comment has no issue (1)
       โœ“ reports the rule diagnostic 1508ms
     โœ“ reports todo, only, and the x/f aliases (1)
       โœ“ reports the rule diagnostic 1162ms
     โœ“ flags an options-object timeout when the callback is a reference (1)
       โœ“ reports the rule diagnostic 898ms
     โœ“ allows a computed skip option, which is a platform gate like skipIf (1)
       โœ“ passes 839ms
     โœ“ flags the suite alias and option-object skips (1)
       โœ“ reports the rule diagnostic 841ms
     โœ“ flags a skip option without a quarantine issue (1)
       โœ“ reports the rule diagnostic 976ms
     โœ“ flags a bracket-access skip without a quarantine issue (1)
       โœ“ reports the rule diagnostic 1248ms
   โœ“ still flags an option-object skip in a live file (1)
     โœ“ reports the rule diagnostic 1078ms
   โœ“ allows timeouts in opt-in live provider suites (1)
     โœ“ passes 814ms
   โœ“ ignores non-test files (1)
     โœ“ passes 810ms
 โœ“  unit  src/state/use-composer-drafts.test.ts (74 tests) 1816ms
   โœ“ mobile composer drafts (74)
     โœ“ restores deleted file chips and releases undo history (uploaded: false) 825ms
 โœ“  unit  src/features/home/useThreadListActions.test.ts (37 tests) 153ms
 โœ“ rules/no-real-time-wait-in-tests.test.ts (16 tests) 22779ms
   โœ“ t3code/no-real-time-wait-in-tests (15)
     โœ“ allows TestClock-driven sleeps and timeout safety nets (1)
       โœ“ passes 1339ms
     โœ“ ignores sleeps inside strings and child-process script templates (1)
       โœ“ passes 1448ms
     โœ“ ignores shared helpers in files that drive the TestClock (1)
       โœ“ passes 2641ms
     โœ“ ignores bare setTimeout callbacks outside promise executors (1)
       โœ“ passes 2872ms
     โœ“ reports Effect.sleep under it.live (1)
       โœ“ reports the rule diagnostic 1878ms
     โœ“ reports retry schedules under curried testers (1)
       โœ“ reports the rule diagnostic 1387ms
     โœ“ reports Effect.delay under plain it (1)
       โœ“ reports the rule diagnostic 1539ms
     โœ“ reports it.effect inside an excludeTestServices layer as a real-clock wait (1)
       โœ“ reports the rule diagnostic 1349ms
     โœ“ reports it.effect sleeps in files that never adjust the TestClock (1)
       โœ“ reports the rule diagnostic 750ms
     โœ“ reports polling helpers even when the file drives the TestClock (1)
       โœ“ reports the rule diagnostic 838ms
     โœ“ reports promise-wrapped setTimeout in vitest tests (1)
       โœ“ reports the rule diagnostic 1140ms
     โœ“ reports promise-wrapped setTimeout under it.effect as a mixed clock (1)
       โœ“ reports the rule diagnostic 1018ms
     โœ“ reports TestClock sleeps when TestClock.adjust appears only in a comment (1)
       โœ“ reports the rule diagnostic 1222ms
     โœ“ reports timers hidden in module-level helpers (1)
       โœ“ reports the rule diagnostic 1110ms
     โœ“ reports awaited timers/promises sleeps (1)
       โœ“ reports the rule diagnostic 874ms
   โœ“ ignores non-test files (1)
     โœ“ passes 1254ms
 โœ“  unit  src/native/workspace-stack-projection.test.ts (22 tests) 38ms
 โœ“  unit  src/lib/mobileTheme.test.ts (24 tests) 243ms
 โœ“  unit  src/lib/attachmentDownload.test.ts (19 tests) 56ms
 โœ“  unit  src/state/use-thread-outbox-drain.permissions.test.ts (12 tests) 117ms
 โœ“  unit  src/lib/composerAttachmentUploadQueue.test.ts (11 tests) 28ms
 โœ“  unit  src/lib/composerContext.test.ts (15 tests) 433ms
 โœ“  unit  src/lib/android-workspace-navigation.test.ts (15 tests) 44ms
 โœ“  unit  src/state/thread-task-permissions.test.ts (5 tests) 69ms
 โœ“  unit  src/state/composer-attachment-uploads.test.ts (5 tests) 54ms
 โœ“  unit  src/features/threads/thread-feed-live-follow.test.ts (28 tests) 22ms
 โœ“  unit  src/features/pull-requests/pullRequestList.test.ts (15 tests) 83ms
 โœ“  unit  src/features/voice-input/voiceInputSession.test.ts (13 tests) 58ms
 โœ“  unit  src/features/updates/app-updates.test.ts (11 tests) 94ms
 โœ“  unit  src/lib/composerContextClipboard.test.ts (7 tests) 118ms
 โœ“  unit  src/features/threads/checkout-new-task-branch.test.ts (11 tests) 5495ms
   โœ“ new-task branch checkout (11)
     โœ“ switches to a free branch and clears its historical worktree path 394ms
     โœ“ does not release the selection while checkout is still pending 422ms
     โœ“ returns checkout failure without selecting the branch or losing dirty files 392ms
     โœ“ reuses an existing worktree without switching the project checkout 343ms
     โœ“ reuses an occupied picker worktree when the project root is a symlink 433ms
     โœ“ resolves historical branch metadata to its worktree beyond a long query's first page 605ms
     โœ“ resolves a non-origin remote to the right worktree when the remote name contains slashes 670ms
     โœ“ switches to the selected remote instead of reusing a worktree tracking another remote 974ms
     โœ“ rejects historical worktree reuse when project root is unsafe (nested: true) 399ms
     โœ“ rejects picker worktree reuse when project root is unsafe (nested: false) 455ms
     โœ“ keeps a nested project's cwd when historical metadata names the already-current branch 406ms
 โœ“ rules/prefer-effect-fn.test.ts (23 tests) 28406ms
   โœ“ t3code/prefer-effect-fn (23)
     โœ“ allows inline programs and layer construction (1)
       โœ“ passes 1259ms
     โœ“ allows named functions and deliberate untraced functions (1)
       โœ“ passes 1315ms
     โœ“ allows inline combinator callbacks (1)
       โœ“ passes 1813ms
     โœ“ allows inline option and error callbacks (1)
       โœ“ passes 2430ms
     โœ“ allows reference default-value callbacks (1)
       โœ“ passes 2381ms
     โœ“ reports service members named onSome (1)
       โœ“ reports the rule diagnostic 1566ms
     โœ“ reports service members named onNone (1)
       โœ“ reports the rule diagnostic 1334ms
     โœ“ reports service members named onSuccess (1)
       โœ“ reports the rule diagnostic 1430ms
     โœ“ reports service members named onFailure (1)
       โœ“ reports the rule diagnostic 1070ms
     โœ“ reports service members named defaultValue (1)
       โœ“ reports the rule diagnostic 755ms
     โœ“ does not mistake other namespaces or shadowed locals for Effect (1)
       โœ“ passes 847ms
     โœ“ leaves functions with synchronous setup for manual review (1)
       โœ“ passes 934ms
     โœ“ reports a named arrow wrapper (1)
       โœ“ reports the rule diagnostic 990ms
     โœ“ reports a block-bodied wrapper (1)
       โœ“ reports the rule diagnostic 1142ms
     โœ“ reports a declaration with pipe transforms (1)
       โœ“ reports the rule diagnostic 896ms
     โœ“ reports a function expression (1)
       โœ“ reports the rule diagnostic 790ms
     โœ“ reports service members (1)
       โœ“ reports the rule diagnostic 1011ms
     โœ“ reports class fields (1)
       โœ“ reports the rule diagnostic 1163ms
     โœ“ recognizes namespace aliases (1)
       โœ“ reports the rule diagnostic 1057ms
     โœ“ recognizes bare-package Effect imports (1)
       โœ“ reports the rule diagnostic 888ms
     โœ“ recognizes a direct gen import (1)
       โœ“ reports the rule diagnostic 923ms
     โœ“ reports class methods (1)
       โœ“ reports the rule diagnostic 1078ms
     โœ“ allows getters that expose an effect value (1)
       โœ“ passes 1103ms
 โœ“  unit  src/connection/environment-cache-store.test.ts (4 tests) 80ms
 โœ“ rules/require-disposable-render.test.ts (22 tests) 28725ms
   โœ“ t3code/require-disposable-render (22)
     โœ“ allows the disposable helper (1)
       โœ“ passes 1403ms
     โœ“ rejects react-dom/client (1)
       โœ“ reports the rule diagnostic 1736ms
     โœ“ rejects act from react (1)
       โœ“ reports the rule diagnostic 2137ms
     โœ“ rejects a renamed act from react (1)
       โœ“ reports the rule diagnostic 2696ms
     โœ“ rejects setting the act environment (1)
       โœ“ reports the rule diagnostic 2232ms
     โœ“ rejects setting the act environment by computed key (1)
       โœ“ reports the rule diagnostic 1908ms
     โœ“ rejects stubbing the act environment (1)
       โœ“ reports the rule diagnostic 1277ms
     โœ“ rejects userEvent wrapped in act from react (1)
       โœ“ reports the rule diagnostic 1275ms
     โœ“ rejects userEvent wrapped in the render helper's act (1)
       โœ“ reports the rule diagnostic 789ms
     โœ“ rejects userEvent wrapped in a renamed render helper act (1)
       โœ“ reports the rule diagnostic 807ms
     โœ“ rejects a renamed userEvent wrapped in act (1)
       โœ“ reports the rule diagnostic 989ms
     โœ“ rejects a locator click wrapped in act (1)
       โœ“ reports the rule diagnostic 914ms
     โœ“ rejects React.act from a namespace import (1)
       โœ“ reports the rule diagnostic 995ms
     โœ“ rejects userEvent wrapped in React.act (1)
       โœ“ reports the rule diagnostic 1224ms
     โœ“ allows act around a DOM click and userEvent in a function act only defines (1)
       โœ“ passes 1067ms
     โœ“ rejects lifecycle hooks through a test runner namespace (1)
       โœ“ reports the rule diagnostic 998ms
     โœ“ rejects importing lifecycle hooks from the test runner (1)
       โœ“ reports the rule diagnostic 1046ms
     โœ“ rejects afterEach (1)
       โœ“ reports the rule diagnostic 896ms
     โœ“ rejects beforeAll (1)
       โœ“ reports the rule diagnostic 1112ms
     โœ“ allows lifecycle hooks outside browser tests (1)
       โœ“ passes 938ms
     โœ“ allows importing lifecycle hooks outside browser tests (1)
       โœ“ passes 1029ms
     โœ“ still rejects react-dom/client in unit tests (1)
       โœ“ reports the rule diagnostic 1126ms
 โœ“  unit  src/features/home/home-thread-navigation.test.ts (6 tests) 38ms
 โœ“  unit  src/state/pending-task-editor-writes.test.ts (5 tests) 44ms
 โœ“  unit  src/state/use-selected-thread-git-actions.test.ts (11 tests) 63ms
 โœ“  unit  src/features/diffs/nativeReviewDiffHighlighter.test.ts (11 tests) 1169ms
   โœ“ highlightNativeReviewDiffVisibleRows (3)
     โœ“ does not carry grammar state across hunk boundaries 457ms
 โœ“  unit  src/features/threads/threadOrderAvailability.test.ts (7 tests) 771ms
   โœ“ computeThreadMoveAvailability matches the reference planner (7)
     โœ“ agrees across randomized sections (keys, holes, non-writable rows, hidden keys) 754ms
 โœ“  unit  src/state/thread-outbox-removal.test.ts (5 tests) 41ms
 โœ“ rules/no-mobile-uniwind-theme-escape-hatches.test.ts (24 tests) 30681ms
   โœ“ t3code/no-mobile-uniwind-theme-escape-hatches (24)
     โœ“ allows semantic mobile theme classes (1)
       โœ“ passes 1705ms
     โœ“ allows unrelated functions with legacy hook names (1)
       โœ“ passes 1743ms
     โœ“ allows unrelated imports with legacy hook names (1)
       โœ“ passes 2204ms
     โœ“ allows erased type-only theme imports (1)
       โœ“ passes 2279ms
     โœ“ allows appearance words in ordinary copy (1)
       โœ“ passes 2077ms
     โœ“ does not conflate shadowed Uniwind namespaces (1)
       โœ“ passes 1974ms
     โœ“ allows reviewed native interop boundaries (1)
       โœ“ passes 1796ms
     โœ“ still reports appearance variants in reviewed interop boundaries (1)
       โœ“ reports the rule diagnostic 851ms
     โœ“ reports new React theme subscriptions (1)
       โœ“ reports the rule diagnostic 951ms
     โœ“ reports the retired theme color hook (1)
       โœ“ reports the rule diagnostic 927ms
     โœ“ reports guarded hooks imported with TypeScript extensions (1)
       โœ“ reports the rule diagnostic 987ms
     โœ“ reports unreviewed native interop subscriptions (1)
       โœ“ reports the rule diagnostic 1208ms
     โœ“ reports appearance variants in string literals (1)
       โœ“ reports the rule diagnostic 927ms
     โœ“ reports appearance variants in template literals (1)
       โœ“ reports the rule diagnostic 974ms
     โœ“ reports escaped appearance variants in template literals (1)
       โœ“ reports the rule diagnostic 972ms
     โœ“ reports appearance variants through nested class-map indirection (1)
       โœ“ reports the rule diagnostic 963ms
     โœ“ reports appearance variants passed to class builders (1)
       โœ“ reports the rule diagnostic 1006ms
     โœ“ reports negative and important appearance variants (1)
       โœ“ reports the rule diagnostic 889ms
     โœ“ reports namespace CSS variable subscriptions (1)
       โœ“ reports the rule diagnostic 1060ms
     โœ“ reports destructured namespace CSS variable subscriptions (1)
       โœ“ reports the rule diagnostic 945ms
     โœ“ reports aliased namespace CSS variable subscriptions (1)
       โœ“ reports the rule diagnostic 913ms
     โœ“ reports object-rest namespace CSS variable subscriptions (1)
       โœ“ reports the rule diagnostic 1078ms
     โœ“ reports namespace access to the retired theme hook (1)
       โœ“ reports the rule diagnostic 1216ms
     โœ“ reports destructured namespace access to the retired theme hook (1)
       โœ“ reports the rule diagnostic 889ms
 โœ“  unit  src/features/cloud/linkEnvironment.test.ts (3 tests) 253ms
 โœ“  unit  src/lib/composerImages.test.ts (6 tests) 50ms
 โœ“  unit  src/native/composerEditorRevision.test.ts (17 tests) 23ms
 โœ“  unit  src/features/settings/scheduledTaskDraft.test.ts (12 tests) 35ms
 โœ“  unit  src/dependency-graph.test.ts (2 tests) 53ms
 โœ“  unit  src/features/sharing/incoming-share-inbox.test.ts (10 tests) 73ms
 โœ“  unit  src/features/home/homeThreadList.test.ts (4 tests) 76ms
stdout | src/state/preferences.test.ts > mobile preferences state > falls back to empty preferences when secure storage cannot be read
[20:15:55.301] 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) 41ms
 โœ“  unit  src/state/session.test.ts (4 tests) 12ms
 โœ“  unit  src/lib/mediaActions.test.ts (10 tests) 48ms
 โœ“  unit  src/state/use-thread-pr.test.ts (12 tests) 44ms
stdout | src/lib/storage.test.ts > mobile connection storage > loads legacy preferences when SQLite is unavailable
[20:15:57.321] WARN (#16): 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
[20:15:57.384] WARN (#17): 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
[20:15:57.393] WARN (#17): 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 (6 tests) 165ms
 โœ“  unit  src/features/threads/thread-provider-instance.test.ts (3 tests) 47ms
 โœ“  unit  src/features/projects/AddProjectScreen.test.ts (3 tests) 47ms
 โœ“  unit  src/features/cloud/dpop.test.ts (5 tests) 182ms
 โœ“  unit  src/features/settings/settings-scoped-server.test.ts (5 tests) 27ms
 โœ“  unit  src/features/agent-awareness/liveActivityPreferences.test.ts (3 tests) 54ms
 โœ“ rules/require-suppression-reason.test.ts (13 tests) 15463ms
   โœ“ t3code/require-suppression-reason (13)
     โœ“ allows a directive with a -- reason (1)
       โœ“ passes 1065ms
     โœ“ allows a directive explained by the comment above (1)
       โœ“ passes 1064ms
     โœ“ allows stacked directives under one explanation (1)
       โœ“ passes 1030ms
     โœ“ allows a TypeScript directive followed by its reason (1)
       โœ“ passes 997ms
     โœ“ allows a directive in a JSX comment with a reason (1)
       โœ“ passes 1134ms
     โœ“ ignores enable directives (1)
       โœ“ passes 1423ms
     โœ“ reports a lint directive without a reason (1)
       โœ“ reports the rule diagnostic 1221ms
     โœ“ reports a file-level directive without a reason (1)
       โœ“ reports the rule diagnostic 1354ms
     โœ“ reports a TypeScript directive without a reason (1)
       โœ“ reports the rule diagnostic 1143ms
     โœ“ does not count a comment separated by a blank line (1)
       โœ“ reports the rule diagnostic 1416ms
     โœ“ allows an empty comment line between the reason and the directive (1)
       โœ“ passes 1438ms
     โœ“ does not count an empty comment above (1)
       โœ“ reports the rule diagnostic 1125ms
     โœ“ does not count a trailing comment on the code line above (1)
       โœ“ reports the rule diagnostic 878ms
 โœ“  unit  src/features/pull-requests/pullRequestStack.test.ts (8 tests) 16ms
 โœ“ rules/no-test-in-loop.test.ts (8 tests) 9880ms
   โœ“ t3code/no-test-in-loop (7)
     โœ“ allows it.each and it.effect.each (1)
       โœ“ passes 1297ms
     โœ“ allows loops inside a test body (1)
       โœ“ passes 1154ms
     โœ“ ignores node:test files, which have no .each (1)
       โœ“ passes 1642ms
     โœ“ reports it inside a for...of loop (1)
       โœ“ reports the rule diagnostic 1044ms
     โœ“ reports it.effect inside a for loop nested in describe (1)
       โœ“ reports the rule diagnostic 1262ms
     โœ“ reports test inside a for...in loop (1)
       โœ“ reports the rule diagnostic 1052ms
     โœ“ reports a describe inside a loop once, not the tests inside it (1)
       โœ“ reports the rule diagnostic 932ms
   โœ“ ignores non-test files (1)
     โœ“ passes 1439ms
 โœ“  unit  src/features/threads/new-task-project-selection.test.ts (9 tests) 25ms
 โœ“  unit  src/features/settings/environment-maintenance.test.ts (7 tests) 100ms
 โœ“  unit  src/features/threads/thread-route-state.test.ts (5 tests) 33ms
 โœ“  unit  src/features/threads/thread-settings-sheet-state.test.ts (5 tests) 29ms
 โœ“  unit  src/widgets/subscriptionUsageSnapshot.test.ts (5 tests) 112ms
 โœ“  unit  src/features/review/reviewModel.test.ts (5 tests) 18ms
 โœ“  unit  src/features/review/reviewCommentSelection.test.ts (6 tests) 21ms
 โœ“  unit  src/lib/protectedData.test.ts (3 tests) 324ms
 โœ“ rules/no-frame-waits-in-browser-tests.test.ts (16 tests) 18362ms
   โœ“ t3code/no-frame-waits-in-browser-tests (16)
     โœ“ allows retrying assertions and the full fake timer set (1)
       โœ“ passes 887ms
     โœ“ allows requestAnimationFrame inside mocks (1)
       โœ“ passes 697ms
     โœ“ allows timers outside a promise executor and other listeners (1)
       โœ“ passes 1245ms
     โœ“ rejects a nextFrame helper (1)
       โœ“ reports the rule diagnostic 1108ms
     โœ“ rejects requestAnimationFrame as the executor (1)
       โœ“ reports the rule diagnostic 1007ms
     โœ“ rejects window.requestAnimationFrame (1)
       โœ“ reports the rule diagnostic 1156ms
     โœ“ allows a pass-through frame executor inside a mock implementation (1)
       โœ“ passes 1218ms
     โœ“ rejects setTimeout passed straight through as the promise executor (1)
       โœ“ reports the rule diagnostic 976ms
     โœ“ rejects setTimeout inside a promise executor (1)
       โœ“ reports the rule diagnostic 1180ms
     โœ“ rejects setInterval inside a promise executor (1)
       โœ“ reports the rule diagnostic 1490ms
     โœ“ rejects transitionend listeners (1)
       โœ“ reports the rule diagnostic 975ms
     โœ“ rejects animationend listeners (1)
       โœ“ reports the rule diagnostic 1163ms
     โœ“ rejects vi.useFakeTimers (1)
       โœ“ reports the rule diagnostic 1171ms
     โœ“ rejects a partial fakeTimers set (1)
       โœ“ reports the rule diagnostic 1257ms
     โœ“ rejects a partial vi.useFakeTimers set (1)
       โœ“ reports the rule diagnostic 1414ms
     โœ“ ignores files that are not browser tests (1)
       โœ“ passes 1258ms
 โœ“  unit  src/features/voice-input/lazyVoiceRecorder.test.ts (3 tests) 22ms
 โœ“  unit  src/state/remote-environment-projections.test.ts (1 test) 19ms
 โœ“  unit  src/features/review/nativeReviewDiffAdapter.test.ts (2 tests) 1115ms
   โœ“ buildNativeReviewDiffData row bound (1)
     โœ“ caps each huge file excerpt while preserving full counts and ordinary files 1061ms
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  plugins/withAndroidFbjniVersion.test.mjs (4 tests) 1295ms
   โœ“ withAndroidFbjniVersion (4)
     โœ“ applies the force through the registered app config 1232ms
 โœ“  unit  src/state/edit-pending-thread-message.test.ts (4 tests) 18ms
 โœ“  unit  src/features/usage/UsageLimitsSection.test.ts (2 tests) 21ms
 โœ“  unit  src/lib/pdfPreview.test.ts (12 tests) 57ms
 โœ“  unit  src/features/agent-awareness/notificationNavigation.test.ts (6 tests) 38ms
 โœ“  unit  src/state/thread-order.test.ts (4 tests) 46ms
 โœ“  unit  src/features/pull-requests/pullRequestDiffPages.test.ts (3 tests) 10ms
 โœ“  unit  src/features/workspace/android-workspace-navigation-colors.test.ts (9 tests) 121ms
 โœ“  unit  src/lib/adaptive-navigation.test.ts (8 tests) 10ms
 โœ“ rules/no-raw-mcp-registration.test.ts (20 tests) 23430ms
   โœ“ t3code/no-raw-mcp-registration (20)
     โœ“ allows the rest of effect/ai and type-only McpServer imports (1)
       โœ“ passes 1116ms
     โœ“ reports importing McpServer from effect/ai (1)
       โœ“ reports the rule diagnostic 1005ms
     โœ“ reports importing McpServer under another name (1)
       โœ“ reports the rule diagnostic 985ms
     โœ“ reports a namespace import of effect/ai (1)
       โœ“ reports the rule diagnostic 1153ms
     โœ“ reports importing the McpServer module directly (1)
       โœ“ reports the rule diagnostic 882ms
     โœ“ reports re-exporting McpServer (1)
       โœ“ reports the rule diagnostic 1124ms
     โœ“ reports re-exporting all of effect/ai (1)
       โœ“ reports the rule diagnostic 1075ms
     โœ“ reports a dynamic import of the McpServer module (1)
       โœ“ reports the rule diagnostic 1391ms
     โœ“ reports a dynamic import written as a template (1)
       โœ“ reports the rule diagnostic 1314ms
     โœ“ reports McpServer.toolkit (1)
       โœ“ reports the rule diagnostic 1082ms
     โœ“ reports McpServer.resource and McpServer.prompt (1)
       โœ“ reports the rule diagnostic 1209ms
     โœ“ reports addTool on the McpServer service (1)
       โœ“ reports the rule diagnostic 994ms
     โœ“ reports a registration method read without calling it (1)
       โœ“ reports the rule diagnostic 1079ms
     โœ“ reports a registration function taken by destructuring (1)
       โœ“ reports the rule diagnostic 1111ms
     โœ“ reports a registration method taken by destructuring (1)
       โœ“ reports the rule diagnostic 1390ms
     โœ“ lets tests import McpServer to build a server (1)
       โœ“ passes 1198ms
     โœ“ reports a registration in a test (1)
       โœ“ reports the rule diagnostic 1062ms
     โœ“ reports a test importing McpServer under another name (1)
       โœ“ reports the rule diagnostic 1428ms
     โœ“ reports a test importing effect/ai as a namespace (1)
       โœ“ reports the rule diagnostic 1212ms
     โœ“ reports a test importing the McpServer module directly (1)
       โœ“ reports the rule diagnostic 1519ms
 โœ“  unit  src/state/assets.test.ts (4 tests) 45ms
 โœ“  unit  src/lib/projectFaviconRequests.test.ts (4 tests) 9ms
 โœ“  unit  src/state/attachments.test.ts (2 tests) 22ms
 โœ“  unit  src/features/connection/environmentSections.test.ts (3 tests) 6ms
 โœ“  unit  src/state/pending-thread-creation.test.ts (4 tests) 13ms
 โœ“  unit  src/features/shortcuts/appShortcuts.test.ts (7 tests) 10ms
 โœ“  unit  src/state/workspace-connection-atoms.test.ts (1 test) 23ms
 โœ“  unit  src/lib/atomic-file.test.ts (4 tests) 25ms
 โœ“  unit  src/features/workspace/workspace-tabs-state.test.ts (4 tests) 18ms
 โœ“  unit  src/features/pull-requests/pullRequestFileFilters.test.ts (4 tests) 71ms
 โœ“  unit  src/lib/localAttachmentPreview.test.ts (4 tests) 26ms
 โœ“  unit  src/lib/reserved-regions.test.ts (5 tests) 27ms
 โœ“ rules/no-inline-schema-compile.test.ts (6 tests) 6375ms
   โœ“ t3code/no-inline-schema-compile (6)
     โœ“ allows schema compilers hoisted to module scope (1)
       โœ“ passes 965ms
     โœ“ allows factory helpers that return a precompiled decoder (1)
       โœ“ passes 1118ms
     โœ“ allows schema construction helpers that use encode transformations (1)
       โœ“ passes 962ms
     โœ“ allows dynamic schema parameters that cannot be hoisted to module scope (1)
       โœ“ passes 1162ms
     โœ“ reports schema compilers inside function bodies (1)
       โœ“ reports the rule diagnostic 951ms
     โœ“ reports inline schema literals as high confidence findings (1)
       โœ“ reports the rule diagnostic 1152ms
 โœ“  unit  src/features/terminal/useTerminalLifecycle.test.ts (3 tests) 34ms
 โœ“  unit  src/lib/markdownMedia.test.ts (12 tests) 41ms
 โœ“  unit  src/persistence/mobile-database.test.ts (3 tests) 34ms
 โœ“ rules/no-wall-clock-in-tests.test.ts (8 tests) 9508ms
   โœ“ t3code/no-wall-clock-in-tests (7)
     โœ“ ignores a computed member with a variable key (1)
       โœ“ passes 1389ms
     โœ“ allows fixed dates and readings that seed mocks (1)
       โœ“ passes 1425ms
     โœ“ reports elapsed-time measurement (1)
       โœ“ reports the rule diagnostic 970ms
     โœ“ reports Date.now fixtures (1)
       โœ“ reports the rule diagnostic 1268ms
     โœ“ reports new Date() with no arguments (1)
       โœ“ reports the rule diagnostic 1124ms
     โœ“ reports process.hrtime and process.hrtime.bigint (1)
       โœ“ reports the rule diagnostic 1086ms
     โœ“ reports a reading outside the mock's arguments (1)
       โœ“ reports the rule diagnostic 1147ms
   โœ“ ignores non-test files (1)
     โœ“ passes 987ms
 โœ“  unit  src/features/review/incrementalSnippet.test.ts (3 tests) 644ms
   โœ“ incremental snippet highlighting (3)
     โœ“ matches full highlighting through partial lines, multiline syntax, edits and truncation 411ms
 โœ“  unit  src/features/terminal/useTerminalGridSync.test.ts (1 test) 47ms
 โœ“  unit  src/connection/storage.test.ts (3 tests) 24ms
 โœ“  unit  src/features/pull-requests/pullRequestDiffComments.test.ts (4 tests) 18ms
 โœ“  unit  src/lib/layout.test.ts (7 tests) 14ms
 โœ“  unit  src/lib/markdownHtml.test.ts (5 tests) 88ms
 โœ“ rules/no-manual-effect-runtime-in-tests.test.ts (17 tests) 19054ms
   โœ“ t3code/no-manual-effect-runtime-in-tests (14)
     โœ“ allows @effect/vitest effect tests (1)
       โœ“ passes 1276ms
     โœ“ reports Effect.runCallback (1)
       โœ“ reports the rule diagnostic 1036ms
     โœ“ reports Effect.runCallbackWith (1)
       โœ“ reports the rule diagnostic 840ms
     โœ“ reports Effect.runFork (1)
       โœ“ reports the rule diagnostic 1227ms
     โœ“ reports Effect.runForkWith (1)
       โœ“ reports the rule diagnostic 1171ms
     โœ“ reports Effect.runPromise (1)
       โœ“ reports the rule diagnostic 1134ms
     โœ“ reports Effect.runPromiseExit (1)
       โœ“ reports the rule diagnostic 1169ms
     โœ“ reports Effect.runPromiseExitWith (1)
       โœ“ reports the rule diagnostic 1199ms
     โœ“ reports Effect.runPromiseWith (1)
       โœ“ reports the rule diagnostic 1212ms
     โœ“ reports Effect.runSync (1)
       โœ“ reports the rule diagnostic 1255ms
     โœ“ reports Effect.runSyncExit (1)
       โœ“ reports the rule diagnostic 1154ms
     โœ“ reports Effect.runSyncExitWith (1)
       โœ“ reports the rule diagnostic 915ms
     โœ“ reports Effect.runSyncWith (1)
       โœ“ reports the rule diagnostic 1172ms
     โœ“ reports ManagedRuntime.make (1)
       โœ“ reports the rule diagnostic 975ms
   โœ“ allows production runtime boundaries (1)
     โœ“ passes 1094ms
   โœ“ t3code/no-manual-effect-runtime-in-tests with maxOccurrences (2)
     โœ“ allows occurrences up to the ceiling (1)
       โœ“ passes 1077ms
     โœ“ reports occurrences beyond the ceiling (1)
       โœ“ reports the rule diagnostic 990ms
 โœ“  unit  src/connection/background-activity.test.ts (3 tests) 11ms
 โœ“  unit  src/persistence/mobile-storage.test.ts (3 tests) 23ms
 โœ“  unit  src/lib/videoThumbnails.test.ts (2 tests) 78ms
 โœ“ rules/no-unscoped-has.test.ts (42 tests) 51401ms
   โœ“ t3code/no-unscoped-has (24)
     โœ“ allows :has() on the element itself (1)
       โœ“ passes 1576ms
     โœ“ allows :has() anchored to an attribute (1)
       โœ“ passes 1968ms
     โœ“ allows :has() inside :not() on the element itself (1)
       โœ“ passes 2034ms
     โœ“ allows built-in has-* variants (1)
       โœ“ passes 1752ms
     โœ“ allows a sibling selector without :has() (1)
       โœ“ passes 2446ms
     โœ“ ignores prose mentioning :has() (1)
       โœ“ passes 1556ms
     โœ“ ignores :has() inside an arbitrary value (1)
       โœ“ passes 1263ms
     โœ“ allows a negated :has() on the element itself (1)
       โœ“ passes 1276ms
     โœ“ allows :has() on a group or peer element (1)
       โœ“ passes 953ms
     โœ“ allows a selector list whose own branch is anchored (1)
       โœ“ passes 831ms
     โœ“ ignores :has() text in quoted attribute values (1)
       โœ“ passes 1003ms
     โœ“ allows a selector without & on the element itself (1)
       โœ“ passes 990ms
     โœ“ reports a sibling :has() with nothing anchoring it (1)
       โœ“ reports the rule diagnostic 1256ms
     โœ“ reports a descendant :has() with nothing anchoring it (1)
       โœ“ reports the rule diagnostic 1092ms
     โœ“ reports a universal :has() ancestor (1)
       โœ“ reports the rule diagnostic 888ms
     โœ“ reports :has() whose only anchor is negated (1)
       โœ“ reports the rule diagnostic 1046ms
     โœ“ reports uppercase :HAS() (1)
       โœ“ reports the rule diagnostic 997ms
     โœ“ reports a selector-list branch borrowing another branch's anchor (1)
       โœ“ reports the rule diagnostic 893ms
     โœ“ reports an unanchored branch inside :is() (1)
       โœ“ reports the rule diagnostic 1045ms
     โœ“ reports an unanchored :has() inside a named group variant (1)
       โœ“ reports the rule diagnostic 1007ms
     โœ“ reports a :has() on an ancestor of a selector without & (1)
       โœ“ reports the rule diagnostic 1017ms
     โœ“ reports a :has() on an ancestor of a group (1)
       โœ“ reports the rule diagnostic 977ms
     โœ“ reports an in-* ancestor :has() (1)
       โœ“ reports the rule diagnostic 1145ms
     โœ“ reports :has() anchored to the document root (1)
       โœ“ reports the rule diagnostic 1387ms
   โœ“ t3code/no-outset-state-indicators (18)
     โœ“ valid: inset state rings (1)
       โœ“ inset state rings (1)
         โœ“ passes 1448ms
     โœ“ valid: an unconditional inset (1)
       โœ“ an unconditional inset (1)
         โœ“ passes 1579ms
     โœ“ valid: an inset in a sibling composer argument (1)
       โœ“ an inset in a sibling composer argument (1)
         โœ“ passes 1196ms
     โœ“ valid: an inset in a nested conditional composer (1)
       โœ“ an inset in a nested conditional composer (1)
         โœ“ passes 896ms
     โœ“ valid: outlines covered by the inward default (1)
       โœ“ outlines covered by the inward default (1)
         โœ“ passes 1097ms
     โœ“ valid: wider outlines with a matching inward offset (1)
       โœ“ wider outlines with a matching inward offset (1)
         โœ“ passes 1199ms
     โœ“ valid: arbitrary pixel outlines with a matching inward offset (1)
       โœ“ arbitrary pixel outlines with a matching inward offset (1)
         โœ“ passes 973ms
     โœ“ valid: arbitrary outline colors (1)
       โœ“ arbitrary outline colors (1)
         โœ“ passes 948ms
     โœ“ valid: decorative rings without a state (1)
       โœ“ decorative rings without a state (1)
         โœ“ passes 1090ms
     โœ“ valid: prose (1)
       โœ“ prose (1)
         โœ“ passes 1455ms
     โœ“ invalid: state rings without an inset (1)
       โœ“ state rings without an inset (1)
         โœ“ reports the rule diagnostic 1142ms
     โœ“ invalid: an inset from another state (1)
       โœ“ an inset from another state (1)
         โœ“ reports the rule diagnostic 1138ms
     โœ“ invalid: an inset from another conditional branch (1)
       โœ“ an inset from another conditional branch (1)
         โœ“ reports the rule diagnostic 1213ms
     โœ“ invalid: an inset passed to another function (1)
       โœ“ an inset passed to another function (1)
         โœ“ reports the rule diagnostic 858ms
     โœ“ invalid: arbitrary state ring widths (1)
       โœ“ arbitrary state ring widths (1)
         โœ“ reports the rule diagnostic 1304ms
     โœ“ invalid: positive outline offsets (1)
       โœ“ positive outline offsets (1)
         โœ“ reports the rule diagnostic 948ms
     โœ“ invalid: arbitrary outline offsets (1)
       โœ“ arbitrary outline offsets (1)
         โœ“ reports the rule diagnostic 1016ms
     โœ“ invalid: wide outlines without an inward offset (1)
       โœ“ wide outlines without an inward offset (1)
         โœ“ reports the rule diagnostic 1253ms
 โœ“  unit  src/features/threads/threadQueueControlPresentation.test.ts (7 tests) 18ms
 โœ“  unit  src/state/workspaceModel.test.ts (2 tests) 11ms
 โœ“  unit  src/features/threads/fileChipMenu.test.ts (9 tests) 47ms
 โœ“  unit  src/features/threads/pending-thread-feed.test.ts (4 tests) 6ms
 โœ“  unit  src/features/threads/thread-settings-options.test.ts (4 tests) 22ms
 โœ“  unit  src/lib/composerAttachmentFiles.test.ts (12 tests) 10ms
 โœ“  unit  src/features/threads/use-composer-command-menu.test.ts (3 tests) 18ms
 โœ“  unit  src/connection/migration.test.ts (2 tests) 62ms
 โœ“  unit  src/lib/microphonePriority.test.ts (4 tests) 13ms
 โœ“  unit  src/features/pull-requests/pullRequestStatus.test.ts (4 tests) 13ms
 โœ“  unit  src/features/threads/new-task-context-presentation.test.ts (7 tests) 14ms
 โœ“  unit  src/features/settings/autoSettleSettingsSync.test.ts (3 tests) 15ms
 โœ“  unit  src/features/home/workspace-connection-status.test.ts (3 tests) 13ms
 โœ“  unit  src/features/terminal/terminalMenu.test.ts (5 tests) 62ms
 โœ“ rules/no-hermes-unsupported-apis.test.ts (22 tests) 26031ms
   โœ“ t3code/no-hermes-unsupported-apis (22)
     โœ“ allows in-place sort on a copy (1)
       โœ“ passes 1216ms
     โœ“ allows in-place reverse on a copy (1)
       โœ“ passes 1344ms
     โœ“ allows other ES2023 methods Hermes ships (1)
       โœ“ passes 1418ms
     โœ“ ignores property reads that are not calls (1)
       โœ“ passes 1331ms
     โœ“ reports toSorted (1)
       โœ“ reports the rule diagnostic 991ms
     โœ“ reports toReversed in a chain (1)
       โœ“ reports the rule diagnostic 1462ms
     โœ“ reports toSpliced via computed access with a copy-then-splice remediation (1)
       โœ“ reports the rule diagnostic 1330ms
     โœ“ reports a static template-literal property name (1)
       โœ“ reports the rule diagnostic 907ms
     โœ“ ignores a template-literal property with substitutions (1)
       โœ“ passes 1150ms
     โœ“ allows supported Intl constructors (1)
       โœ“ passes 1020ms
     โœ“ allows feature detection (1)
       โœ“ passes 1248ms
     โœ“ allows unrelated Segmenter constructors (1)
       โœ“ passes 1074ms
     โœ“ ignores dynamic computed names (1)
       โœ“ passes 1484ms
     โœ“ reports new Intl.Segmenter(undefined, { granularity: 'grapheme' }) (1)
       โœ“ reports the rule diagnostic 1162ms
     โœ“ reports new Intl['Segmenter']() (1)
       โœ“ reports the rule diagnostic 1003ms
     โœ“ reports new Intl[`Segmenter`]() (1)
       โœ“ reports the rule diagnostic 1141ms
     โœ“ reports new globalThis.Intl.Segmenter() (1)
       โœ“ reports the rule diagnostic 1093ms
     โœ“ reports new globalThis['Intl']['Segmenter']() (1)
       โœ“ reports the rule diagnostic 1212ms
     โœ“ reports new global.Intl.Segmenter() (1)
       โœ“ reports the rule diagnostic 1015ms
     โœ“ reports new window.Intl.Segmenter() (1)
       โœ“ reports the rule diagnostic 981ms
     โœ“ reports Intl.Segmenter() (1)
       โœ“ reports the rule diagnostic 1142ms
     โœ“ reports Intl.Segmenter?.() (1)
       โœ“ reports the rule diagnostic 1168ms
 โœ“  unit  src/lib/markdownLinks.test.ts (8 tests) 13ms
 โœ“  unit  src/native/voiceTranscription.ios.test.ts (1 test) 38ms
 โœ“ rules/no-global-process-runtime.test.ts (9 tests) 10131ms
   โœ“ t3code/no-global-process-runtime (9)
     โœ“ allows injected host process references (1)
       โœ“ passes 1379ms
     โœ“ allows unrelated process members (1)
       โœ“ passes 1216ms
     โœ“ allows unrelated node os imports (1)
       โœ“ passes 1042ms
     โœ“ reports direct platform reads (1)
       โœ“ reports the rule diagnostic 1211ms
     โœ“ reports direct architecture reads (1)
       โœ“ reports the rule diagnostic 1138ms
     โœ“ reports globalThis process platform reads (1)
       โœ“ reports the rule diagnostic 1079ms
     โœ“ reports node os namespace platform reads (1)
       โœ“ reports the rule diagnostic 1138ms
     โœ“ reports renamed node os architecture imports (1)
       โœ“ reports the rule diagnostic 970ms
     โœ“ reports default node os platform reads (1)
       โœ“ reports the rule diagnostic 882ms
 โœ“  unit  src/lib/projectFaviconDatabaseCache.test.ts (3 tests) 29ms
 โœ“  unit  src/lib/threadActivityInspector.test.ts (1 test) 20ms
 โœ“  unit  src/features/devices/threadDevicePreviews.test.ts (2 tests) 8ms
 โœ“  unit  src/features/terminal/terminalInput.test.ts (7 tests) 16ms
 โœ“ rules/namespace-node-imports.test.ts (5 tests) 5254ms
   โœ“ t3code/namespace-node-imports (5)
     โœ“ allows canonical Node namespaces (1)
       โœ“ passes 1125ms
     โœ“ does not apply to non-Node packages (1)
       โœ“ passes 1161ms
     โœ“ reports named imports (1)
       โœ“ reports the rule diagnostic 943ms
     โœ“ reports default imports (1)
       โœ“ reports the rule diagnostic 971ms
     โœ“ reports non-canonical namespace aliases (1)
       โœ“ reports the rule diagnostic 987ms
 โœ“  unit  src/state/queries.filesystem.test.ts (1 test) 21ms
 โœ“  unit  src/features/terminal/terminalPaste.test.ts (2 tests) 22ms
 โœ“  unit  src/features/threads/worktree-setup-state.test.ts (4 tests) 9ms
 โœ“  unit  src/features/terminal/terminalLaunchContext.test.ts (3 tests) 5ms
 โœ“  unit  src/state/thread-provider-switching.test.ts (4 tests) 4ms
 โœ“  unit  src/lib/appLinking.test.ts (17 tests) 35ms
 โœ“  unit  src/lib/device-type.test.ts (3 tests) 14ms
 โœ“  unit  src/features/terminal/useTerminalSurfaceBuffer.test.ts (2 tests) 77ms
 โœ“  unit  src/features/threads/thread-route-hydration.test.ts (3 tests) 9ms
 โœ“ rules/no-rpc-permission-bypass.test.ts (16 tests) 19285ms
   โœ“ blocks direct session calls (1)
     โœ“ reports the rule diagnostic 1512ms
   โœ“ blocks extracting the raw client (1)
     โœ“ reports the rule diagnostic 1547ms
   โœ“ blocks replacing the permission guard (1)
     โœ“ reports the rule diagnostic 1212ms
   โœ“ blocks namespace guard access (1)
     โœ“ reports the rule diagnostic 1264ms
   โœ“ blocks raw protocol imports (1)
     โœ“ reports the rule diagnostic 1322ms
   โœ“ allows typed requests (1)
     โœ“ passes 1316ms
   โœ“ allows the transport boundary (1)
     โœ“ passes 1133ms
   โœ“ blocks guard imports through the barrel (1)
     โœ“ reports the rule diagnostic 1291ms
   โœ“ blocks explicit index imports (1)
     โœ“ reports the rule diagnostic 1288ms
   โœ“ blocks raw session access in subscription callbacks (1)
     โœ“ reports the rule diagnostic 984ms
   โœ“ blocks raw client destructuring (1)
     โœ“ reports the rule diagnostic 1044ms
   โœ“ allows public typed RPC helpers (1)
     โœ“ passes 991ms
   โœ“ raw client allowance does not permit installing the guard (1)
     โœ“ reports the rule diagnostic 942ms
   โœ“ permits guard installation when configured (1)
     โœ“ passes 1110ms
   โœ“ guard installation allowance does not permit raw clients (1)
     โœ“ reports the rule diagnostic 1046ms
   โœ“ guard installation allowance does not permit raw protocol imports (1)
     โœ“ reports the rule diagnostic 1185ms
 โœ“  unit  src/lib/projectThreadStartTurn.test.ts (3 tests) 5ms
 โœ“  unit  src/features/settings/scheduled-task-editor-state.test.ts (3 tests) 10ms
 โœ“  unit  src/features/files/filePath.test.ts (7 tests) 12ms
 โœ“  unit  src/state/queued-run-edit.test.ts (3 tests) 18ms
 โœ“  unit  src/features/layout/deferred-navigation.test.ts (3 tests) 5ms
 โœ“  unit  src/features/home/thread-dismissal.test.ts (3 tests) 6ms
 โœ“ rules/no-mobile-pull-request-glyph-literals.test.ts (10 tests) 11364ms
   โœ“ t3code/no-mobile-pull-request-glyph-literals (10)
     โœ“ allows glyphs picked from the module (1)
       โœ“ passes 1047ms
     โœ“ allows unrelated symbols and copy that mentions pull requests (1)
       โœ“ passes 1219ms
     โœ“ reports a pull request glyph in a JSX attribute (1)
       โœ“ reports the rule diagnostic 940ms
     โœ“ reports state glyphs chosen inline (1)
       โœ“ reports the rule diagnostic 1090ms
     โœ“ reports glyphs in platform symbol objects (1)
       โœ“ reports the rule diagnostic 1289ms
     โœ“ reports an Android-only pull request glyph (1)
       โœ“ reports the rule diagnostic 903ms
     โœ“ allows merge as an ordinary string outside an android symbol slot (1)
       โœ“ passes 1061ms
     โœ“ allows merge in an android key outside a platform symbol object (1)
       โœ“ passes 1328ms
     โœ“ reports an Android-only pull request glyph written as a template literal (1)
       โœ“ reports the rule diagnostic 1037ms
     โœ“ reports glyphs in template literals (1)
       โœ“ reports the rule diagnostic 1252ms
 โœ“  unit  src/features/cloud/managedRelayLayer.test.ts (1 test) 228ms
 โœ“  unit  src/features/cloud/CloudAuthProvider.test.ts (1 test) 14ms
 โœ“  unit  src/features/sharing/incoming-share-presentation.test.ts (2 tests) 4ms
 โœ“  unit  src/features/devices/device-stream-document.test.ts (11 tests) 26ms
 โœ“  unit  src/features/diagnostics/crash-log-model.test.ts (2 tests) 9ms
 โœ“  unit  src/features/threads/provider-catalog-refresh.test.ts (2 tests) 13ms
 โœ“  unit  src/features/observability/tracing.test.ts (1 test) 31ms
 โœ“  unit  src/features/pull-requests/pullRequestActivityFilter.test.ts (1 test) 6ms
 โœ“  unit  src/lib/markdownTableBreaks.test.ts (5 tests) 82ms
 โœ“  unit  src/features/pull-requests/pullRequestEnvironmentFallback.test.ts (3 tests) 17ms
 โœ“ rules/no-native-title-tooltip.test.ts (11 tests) 12321ms
   โœ“ t3code/no-native-title-tooltip (11)
     โœ“ allows intrinsic elements without a title attribute (1)
       โœ“ passes 1304ms
     โœ“ allows title props on custom components (1)
       โœ“ passes 1168ms
     โœ“ allows title on member expression components (1)
       โœ“ passes 1062ms
     โœ“ allows title as an accessible name on embedded content (1)
       โœ“ passes 1234ms
     โœ“ allows the svg title child element (1)
       โœ“ passes 986ms
     โœ“ allows document.title assignments (1)
       โœ“ passes 1360ms
     โœ“ reports title on a truncating span (1)
       โœ“ reports the rule diagnostic 1331ms
     โœ“ reports title on a button (1)
       โœ“ reports the rule diagnostic 802ms
     โœ“ reports title on a paragraph (1)
       โœ“ reports the rule diagnostic 972ms
     โœ“ reports title on a code element (1)
       โœ“ reports the rule diagnostic 820ms
     โœ“ reports title on an anchor (1)
       โœ“ reports the rule diagnostic 1183ms
 โœ“  unit  scripts/generate-uniwind-themes.test.ts (1 test) 103ms
 โœ“  unit  src/lib/nativeTheme.test.ts (12 tests) 47ms
 โœ“ rules/prefer-catch-tags.test.ts (6 tests) 6298ms
   โœ“ t3code/prefer-catch-tags (6)
     โœ“ allows Effect.catchTags (1)
       โœ“ passes 1274ms
     โœ“ ignores catchTag on other modules (1)
       โœ“ passes 1039ms
     โœ“ ignores a local that shadows the namespace (1)
       โœ“ passes 1120ms
     โœ“ reports Effect.catchTag (1)
       โœ“ reports the rule diagnostic 1044ms
     โœ“ reports catchTag through an aliased namespace (1)
       โœ“ reports the rule diagnostic 904ms
     โœ“ reports a named catchTag import (1)
       โœ“ reports the rule diagnostic 877ms
 โœ“  unit  src/lib/assetImageSource.test.ts (3 tests) 5ms
 โœ“  unit  src/features/keyboard/commandPaletteItems.test.ts (2 tests) 8ms
 โœ“  unit  src/features/pull-requests/pullRequestAgentTasks.test.ts (2 tests) 12ms
 โœ“  unit  src/lib/markdownMediaSource.test.ts (3 tests) 7ms
 โœ“  unit  src/features/pull-requests/pullRequestActions.test.ts (2 tests) 4ms
 โœ“  unit  src/lib/enrichedLinkPresentation.test.ts (3 tests) 5ms
 โœ“  unit  src/lib/connection.test.ts (1 test) 4ms
 โœ“  unit  src/features/connection/pairing.test.ts (5 tests) 5ms
 โœ“  unit  src/features/sharing/incoming-share-storage.test.ts (1 test) 9ms
 โœ“  unit  src/features/settings/SettingsRouteScreen.logic.test.ts (2 tests) 5ms
 โœ“  unit  src/lib/markdownInlineFileLinks.test.ts (4 tests) 40ms
 โœ“  unit  src/features/usage/usageEnvironmentSelection.test.ts (4 tests) 4ms
 โœ“  unit  src/features/home/swipe-row-activation.test.ts (3 tests) 5ms
 โœ“  unit  src/state/asset-url-state.test.ts (3 tests) 74ms
 โœ“  unit  src/lib/wideMarkdownBlocks.test.ts (2 tests) 5ms
 โœ“  unit  src/features/review/shikiReviewHighlighter.test.ts (2 tests) 329ms
   โœ“ highlightSourceFile (2)
     โœ“ preserves one highlighted token row per source line without trailing newlines 313ms
 โœ“  unit  src/features/pull-requests/botBadgeImages.test.ts (1 test) 9ms
 โœ“  unit  src/lib/serialized-async-queue.test.ts (2 tests) 18ms
 โœ“ rules/no-hookless-use-function.test.ts (9 tests) 8878ms
   โœ“ t3code/no-hookless-use-function (9)
     โœ“ allows a hook that calls useState (1)
       โœ“ passes 1089ms
     โœ“ allows a hook that only calls use() (1)
       โœ“ passes 1240ms
     โœ“ allows a hook that calls a member hook (1)
       โœ“ passes 1015ms
     โœ“ allows a plain function (1)
       โœ“ passes 1033ms
     โœ“ allows names that only start with use (1)
       โœ“ passes 1110ms
     โœ“ reports a hook-less function declaration (1)
       โœ“ reports the rule diagnostic 958ms
     โœ“ reports a hook-less arrow returning a closure (1)
       โœ“ reports the rule diagnostic 879ms
     โœ“ reports a hook-less function expression (1)
       โœ“ reports the rule diagnostic 763ms
     โœ“ reports a hook call that only happens inside a nested callback (1)
       โœ“ reports the rule diagnostic 737ms
 โœ“  unit  src/features/pull-requests/pullRequestDescriptionContent.test.ts (1 test) 9ms
 โœ“  unit  src/lib/openExternalUrl.test.ts (1 test) 12ms
 โœ“  unit  src/features/threads/composerSendPresentation.test.ts (2 tests) 7ms
 โœ“  unit  src/features/pull-requests/pullRequestDescription.test.ts (1 test) 20ms
 โœ“ rules/no-manual-memo.test.ts (14 tests) 14574ms
   โœ“ t3code/no-manual-memo (11)
     โœ“ allows plain derived values (1)
       โœ“ passes 1358ms
     โœ“ allows useStableCallback (1)
       โœ“ passes 1098ms
     โœ“ allows other React members (1)
       โœ“ passes 1271ms
     โœ“ allows other directives (1)
       โœ“ passes 1265ms
     โœ“ reports a "use memo" directive (1)
       โœ“ reports the rule diagnostic 1282ms
     โœ“ reports useMemo (1)
       โœ“ reports the rule diagnostic 1074ms
     โœ“ reports useCallback (1)
       โœ“ reports the rule diagnostic 851ms
     โœ“ reports React.useMemo (1)
       โœ“ reports the rule diagnostic 964ms
     โœ“ reports "use no memo" (1)
       โœ“ reports the rule diagnostic 995ms
     โœ“ reports a module-level "use no forget" (1)
       โœ“ reports the rule diagnostic 986ms
     โœ“ allows the same text as a string value (1)
       โœ“ passes 894ms
   โœ“ t3code/no-manual-memo with allowMemoHooks (3)
     โœ“ allows useMemo (1)
       โœ“ passes 926ms
     โœ“ allows useCallback (1)
       โœ“ passes 871ms
     โœ“ still reports "use no memo" (1)
       โœ“ reports the rule diagnostic 675ms
 โœ“  unit  src/features/sharing/incoming-share-native.test.ts (2 tests) 7ms
 โœ“  unit  src/features/pull-requests/pullRequestNavigation.test.ts (2 tests) 6ms
 โœ“  unit  src/features/diffs/nativeReviewDiffSurface.test.ts (1 test) 189ms
 โœ“  unit  src/features/threads/threadContentPresentation.test.ts (2 tests) 5ms
 โœ“  unit  src/features/pull-requests/pullRequestReviewDrafts.test.ts (1 test) 4ms
 โœ“  unit  src/features/cloud/managedRelayTokenStore.test.ts (1 test) 35ms
 โœ“  unit  src/features/threads/subagent-card-presentation.test.ts (1 test) 4ms
 โœ“  unit  src/lib/filePreviewGallery.test.ts (1 test) 15ms
 โœ“  unit  src/features/threads/customSnoozeDate.test.ts (2 tests) 5ms
 โœ“  unit  src/state/thread-composer-error.test.ts (1 test) 4ms
 โœ“  unit  src/features/pull-requests/pullRequestMediaSource.test.ts (1 test) 12ms
 โœ“  unit  src/features/browser/previewPromptText.test.ts (3 tests) 5ms
 โœ“  unit  src/features/threads/threadActivityFileNavigation.test.ts (1 test) 5ms
 โœ“  unit  src/features/prompt-links/prompt-link-model.test.ts (1 test) 5ms
 โœ“  unit  src/features/cloud/publicConfig.test.ts (1 test) 7ms
 โœ“  unit  src/state/queries.test.ts (1 test) 12ms
 โœ“  unit  src/lib/nativeComposerTheme.test.ts (1 test) 6ms
 โœ“  unit  src/features/projects/AddProjectScreen.logic.test.ts (1 test) 3ms
 โœ“  unit  src/lib/filePreview.test.ts (4 tests) 3ms
 โœ“  unit  src/lib/http-response.test.ts (1 test) 8ms
 โœ“  unit  src/lib/mobileThemeRuntime.test.ts (1 test) 5ms
 โœ“  unit  src/lib/appearancePreferences.test.ts (1 test) 3ms
 โœ“  unit  src/lib/foreground-handoff.test.ts (1 test) 4ms
 โœ“  unit  src/features/settings/lib/legal-document-url.test.ts (2 tests) 4ms
 โœ“  unit  src/features/threads/projectThreadCreationValidation.test.ts (2 tests) 4ms
 โœ“  unit  src/features/keyboard/hardwareKeyboardCommands.test.ts (2 tests) 4ms
 โœ“ rules/no-dom-test-environment.test.ts (12 tests) 9447ms
   โœ“ t3code/no-dom-test-environment (12)
     โœ“ allows browser tests (1)
       โœ“ passes 986ms
     โœ“ allows similarly named packages (1)
       โœ“ passes 1155ms
     โœ“ rejects line pragmas (1)
       โœ“ reports the rule diagnostic 1013ms
     โœ“ rejects block pragmas for any environment (1)
       โœ“ reports the rule diagnostic 908ms
     โœ“ rejects jsdom imports (1)
       โœ“ reports the rule diagnostic 762ms
     โœ“ rejects happy-dom imports (1)
       โœ“ reports the rule diagnostic 869ms
     โœ“ rejects emulator subpaths (1)
       โœ“ reports the rule diagnostic 663ms
     โœ“ rejects dynamic imports (1)
       โœ“ reports the rule diagnostic 673ms
     โœ“ rejects template imports (1)
       โœ“ reports the rule diagnostic 682ms
     โœ“ rejects CommonJS imports (1)
       โœ“ reports the rule diagnostic 678ms
     โœ“ rejects TypeScript require imports (1)
       โœ“ reports the rule diagnostic 494ms
     โœ“ rejects re-exports (1)
       โœ“ reports the rule diagnostic 503ms

 Test Files  24 passed (24)
      Tests  361 passed (361)
   Start at  20:15:19
   Duration  70.98s (tests 96%, import 2%, setup 1%)


 โœ“  unit  src/reactCompilerCoverage.test.ts (909 tests) 109471ms
   โœ“ React Compiler coverage (909)
     โœ“ Metro's transformer applies the compiler 4614ms
     โœ“ compiles src/App.tsx 465ms
     โœ“ compiles src/Stack.tsx 969ms
     โœ“ compiles src/components/ComposerAttachmentStrip.tsx 734ms
     โœ“ compiles src/components/ComposerContextAttachment.tsx 492ms
     โœ“ compiles src/components/ComposerContextSheet.tsx 1442ms
     โœ“ compiles src/components/ComposerEditor.tsx 594ms
     โœ“ compiles src/components/ComposerToolbar.tsx 728ms
     โœ“ compiles src/components/FilePreview.tsx 393ms
     โœ“ compiles src/components/FilePreviewModal.tsx 522ms
     โœ“ compiles src/components/MediaVideoPlayer.tsx 496ms
     โœ“ compiles src/components/ProviderIcon.tsx 314ms
     โœ“ compiles src/components/VideoAttachmentTile.tsx 404ms
     โœ“ compiles src/components/VideoPreviewModal.tsx 370ms
     โœ“ compiles src/components/ui/AndroidScreenHeader.tsx 315ms
     โœ“ compiles src/components/ui/AppBar.tsx 461ms
     โœ“ compiles src/components/ui/Dialog.android.tsx 584ms
     โœ“ compiles src/components/ui/MenuPopup.android.tsx 411ms
     โœ“ compiles src/features/archive/ArchivedThreadsScreen.tsx 621ms
     โœ“ compiles src/features/browser/BrowserPreviewRouteScreen.tsx 625ms
     โœ“ compiles src/features/browser/PreviewStreamWebView.tsx 800ms
     โœ“ compiles src/features/connection/CloudEnvironmentRows.tsx 527ms
     โœ“ compiles src/features/connection/ConnectionEnvironmentRow.tsx 477ms
     โœ“ compiles src/features/connection/ConnectionsNewRouteScreen.tsx 646ms
     โœ“ compiles src/features/development/ComponentCatalogScreen.tsx 388ms
     โœ“ compiles src/features/devices/DevicePreviewRouteScreen.tsx 796ms
     โœ“ compiles src/features/files/AttachmentFileScreen.tsx 445ms
     โœ“ compiles src/features/files/SourceFileSurface.tsx 373ms
     โœ“ compiles src/features/files/ThreadFilesRouteScreen.tsx 1025ms
     โœ“ compiles src/features/home/HomeScreen.tsx 1070ms
     โœ“ compiles src/features/home/thread-swipe-actions.tsx 711ms
     โœ“ compiles src/features/home/useThreadListActions.ts 604ms
     โœ“ compiles src/features/keyboard/CommandPalette.tsx 459ms
     โœ“ compiles src/features/layout/AdaptiveWorkspaceLayout.tsx 1321ms
     โœ“ compiles src/features/layout/createWorkspaceStackNavigator.ios.tsx 377ms
     โœ“ compiles src/features/projects/AddProjectScreen.tsx 848ms
     โœ“ compiles src/features/pull-requests/PullRequestRouteScreen.tsx 1443ms
     โœ“ compiles src/features/review/ReviewSheet.tsx 618ms
     โœ“ compiles src/features/settings/SettingsEnvironmentDetailRouteScreen.tsx 486ms
     โœ“ compiles src/features/settings/SettingsProviderAccountsRouteScreen.tsx 397ms
     โœ“ compiles src/features/settings/SettingsScheduledTasksRouteScreen.tsx 867ms
     โœ“ compiles src/features/terminal/ThreadTerminalRouteScreen.tsx 1232ms
     โœ“ compiles src/features/threads/McpAppWebView.tsx 794ms
     โœ“ compiles src/features/threads/NewTaskContextPickerScreens.tsx 495ms
     โœ“ compiles src/features/threads/NewTaskDraftScreen.tsx 2762ms
     โœ“ compiles src/features/threads/NewTaskRouteScreen.tsx 410ms
     โœ“ compiles src/features/threads/QuestionAttachments.tsx 321ms
     โœ“ compiles src/features/threads/ThreadArrangementSheet.tsx 654ms
     โœ“ compiles src/features/threads/ThreadComposer.tsx 2356ms
     โœ“ compiles src/features/threads/ThreadDetailScreen.tsx 3782ms
     โœ“ compiles src/features/threads/ThreadFeed.tsx 3269ms
     โœ“ compiles src/features/threads/ThreadNavigationSidebar.tsx 1199ms
     โœ“ compiles src/features/threads/ThreadQueueControl.tsx 936ms
     โœ“ compiles src/features/threads/ThreadRouteScreen.tsx 835ms
     โœ“ compiles src/features/threads/ThreadSettingsSheet.tsx 554ms
     โœ“ compiles src/features/threads/floating-working-control.tsx 318ms
     โœ“ compiles src/features/threads/new-task-flow-provider.tsx 996ms
     โœ“ compiles src/features/threads/thread-list-v2-items.tsx 1046ms
     โœ“ compiles src/features/threads/thread-work-log.tsx 1291ms
     โœ“ compiles src/features/threads/use-composer-command-menu.ts 473ms
     โœ“ compiles src/features/threads/worktree-setup-state.ts 305ms
     โœ“ compiles src/features/usage/UsageLimitsPooled.tsx 435ms
     โœ“ compiles src/features/usage/UsageLimitsSection.tsx 390ms
     โœ“ compiles src/features/usage/UsageRouteScreen.tsx 802ms
     โœ“ compiles src/features/voice-input/ComposerDictationControl.tsx 390ms
     โœ“ compiles src/native/createV5StackNavigator.ios.tsx 317ms
     โœ“ compiles src/state/queries.ts 764ms
     โœ“ compiles src/state/use-composer-drafts.ts 315ms
     โœ“ compiles src/state/use-selected-thread-git-actions.ts 316ms
     โœ“ compiles src/state/use-thread-composer-state.ts 958ms
     โœ“ compiles src/state/use-thread-outbox-drain.ts 661ms
     โœ“ caches the thread feed derivation 3350ms

 Test Files  197 passed (197)
      Tests  2169 passed (2169)
   Start at  20:15:23
   Duration  138.53s (import 34%, tests 28%, transform 25%, setup 8%, environment 4%)


---
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=__ffcd59c6-e25f-4d45-93b3-a9af502f1568.__actions_cache]
Post job cleanup.
Cache hit occurred on the primary key pnpm-full-v1-Linux-X64-26aca9b234a64276fce695cfd449de6b85aa0230cc5c8763604ee919eee10c91, not saving cache.
##[end-action id=__ffcd59c6-e25f-4d45-93b3-a9af502f1568.__actions_cache;outcome=success;conclusion=success;duration_ms=405]
##[start-action display=Cache Vite+;id=__ffcd59c6-e25f-4d45-93b3-a9af502f1568.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=__ffcd59c6-e25f-4d45-93b3-a9af502f1568.vp_cache;outcome=success;conclusion=success;duration_ms=225]
Post job cleanup.
[command]/usr/local/bin/git version
git version 2.55.0
Temporarily overriding HOME='/home/runner/_work/_temp/4cb8d461-dc82-4daf-91a2-aa1e14f234b5' 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: 193
  BLACKSMITH_RUNNER_ACQUIRE_JOB_MS: 447
  BLACKSMITH_CHECK_RUN_ID: 120062844428
  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