+ hostname fs-16 + git fetch origin From https://git.cafe/pingdotgg/t3code 82ca801681..b28bfbb492 fix/issue-17110 -> origin/fix/issue-17110 31f6861e71..73341ea194 t3/mobile-audit-stream-coalescing-20261023 -> origin/t3/mobile-audit-stream-coalescing-20261023 71e20db6ec..8e4dcde14c t3/mobile-audit-thread-cache-20261023 -> origin/t3/mobile-audit-thread-cache-20261023 + 866e1b4309...f503408028 t3/react-native-crash-otlp -> origin/t3/react-native-crash-otlp (forced update) * [new branch] t3code/compaction-turn-row -> origin/t3code/compaction-turn-row + git rev-parse HEAD origin/main origin/t3/mobile-audit-file-tree-20261023 a23bf91eef2a0e6cb8b3262c4741e87e483a94e3 d14ace8233ad3cf7856b6b834824f888240d67a1 a35d01b6db0148d19becb83d97d0a0b2b6d6ad3f + git status --short + git diff --name-only origin/main...HEAD apps/mobile/src/features/files/FileTreeBrowser.tsx apps/mobile/src/features/files/ThreadFilesRouteScreen.tsx apps/mobile/src/features/files/thread-file-navigator-pane.tsx apps/mobile/src/features/files/useFileTreeEntries.test.tsx apps/mobile/src/features/files/useFileTreeEntries.ts apps/mobile/src/state/query.ts apps/mobile/vite.config.ts + rg --files apps/mobile + rg 'AGENTS.md|[Ff]ile[Tt]ree.*test|file-tree.*test' apps/mobile/src/features/files/useFileTreeEntries.test.tsx + command -v vp vp ++ git rev-parse HEAD + test a23bf91eef2a0e6cb8b3262c4741e87e483a94e3 = a23bf91eef2a0e6cb8b3262c4741e87e483a94e3 ++ git rev-parse origin/t3/mobile-audit-file-tree-20261023 + test a35d01b6db0148d19becb83d97d0a0b2b6d6ad3f = a35d01b6db0148d19becb83d97d0a0b2b6d6ad3f + git merge --no-ff origin/main -m 'Merge origin/main into t3/mobile-audit-file-tree-20261023' Merge made by the 'ort' strategy. .github/workflows/relay-preview-cleanup.yml | 203 +++++++++ .github/workflows/relay-preview.yml | 81 ++++ .github/workflows/stale-needs-more-info.yml | 30 ++ apps/desktop/src/app/DesktopObservability.test.ts | 30 ++ apps/desktop/src/app/DesktopObservability.ts | 5 +- apps/desktop/src/ipc/methods/sshEnvironment.ts | 1 + apps/mobile/src/App.tsx | 2 + apps/mobile/src/Stack.tsx | 10 +- apps/mobile/src/components/ProjectFavicon.tsx | 8 +- apps/mobile/src/features/home/HomeScreen.tsx | 16 +- .../src/features/keyboard/CommandPalette.tsx | 26 +- .../src/features/keyboard/commandPaletteItems.ts | 3 + .../pull-requests/PullRequestReviewersScreen.tsx | 11 +- .../pull-requests/PullRequestRouteScreen.tsx | 17 +- .../features/pull-requests/PullRequestsScreen.tsx | 19 +- apps/mobile/src/features/threads/ThreadFeed.tsx | 29 +- .../src/lib/composerChipPresentation.test.ts | 109 +++++ apps/mobile/src/lib/composerChipPresentation.ts | 42 ++ .../src/lib/enrichedLinkPresentation.test.ts | 49 +++ apps/mobile/src/lib/enrichedLinkPresentation.ts | 51 ++- apps/mobile/src/lib/markdownDocument.ts | 181 +++++++-- apps/mobile/src/lib/markdownHtml.test.ts | 34 +- apps/mobile/src/lib/mobileTheme.ts | 112 ++++- apps/mobile/src/lib/projectIcon.test.ts | 81 ++++ apps/mobile/src/lib/projectIcon.ts | 41 +- apps/mobile/src/native/ProjectChipIconImages.tsx | 150 +++++++ apps/mobile/src/native/T3ComposerEditor.ios.tsx | 6 +- apps/mobile/src/native/T3ComposerEditor.native.tsx | 6 +- apps/mobile/src/native/useEnrichedLinkVariants.ts | 47 ++- .../mobile/src/native/useRestingTopOffset.test.tsx | 73 ---- apps/mobile/src/native/useRestingTopOffset.ts | 29 -- apps/mobile/src/state/entities.ts | 104 ++++- apps/mobile/src/widgets/AgentActivity.tsx | 43 +- apps/server/src/cli/pair.test.ts | 42 +- apps/server/src/cli/pair.ts | 23 ++ apps/server/src/config.ts | 2 +- apps/server/src/mcp/OrchestratorMcpService.ts | 11 +- .../mcp/OrchestratorMcpToolkit.integration.test.ts | 8 + apps/server/src/orchestration-v2/Orchestrator.ts | 30 +- .../server/src/orchestration-v2/ProjectionStore.ts | 37 +- .../orchestration-v2/ProviderTurnStartService.ts | 14 + .../src/orchestration-v2/RunExecutionService.ts | 25 +- .../orchestration-v2/ThreadFork.execution.test.ts | 217 +++++++++- .../src/orchestration-v2/TurnStartReads.test.ts | 149 +++++++ apps/server/src/preview/ServerBrowser.test.ts | 78 +++- apps/server/src/preview/ServerBrowser.ts | 7 +- apps/server/src/preview/ServerBrowserPage.ts | 7 +- apps/server/src/provider/CodexProvider.ts | 10 +- apps/server/src/provider/ProviderRegistry.test.ts | 2 +- apps/server/src/serverLogger.test.ts | 13 + apps/web/src/browser/BrowserProfileReporter.tsx | 14 +- .../components/chat/UsageLimitRecoveryBanner.tsx | 24 +- .../pullRequest/PullRequestTimelineTab.tsx | 2 +- apps/web/src/connection/platform.test.ts | 36 ++ apps/web/src/connection/platform.ts | 17 +- apps/web/src/observability/clientTracing.ts | 3 +- docs/operations/observability.md | 7 + docs/operations/release.md | 8 +- infra/relay/README.md | 4 +- infra/relay/alchemy.run.ts | 14 +- infra/relay/src/previewStages.test.ts | 60 +++ infra/relay/src/previewStages.ts | 74 ++++ infra/relay/src/previewTunnelSweep.test.ts | 102 +++++ infra/relay/src/previewTunnelSweep.ts | 183 +++++++++ knip.jsonc | 2 +- .../src/state/orchestrationV2Projection.test.ts | 83 ++++ .../src/state/orchestrationV2Projection.ts | 50 ++- .../src/state/threadCommands.test.ts | 78 +++- .../client-runtime/src/state/threadCommands.ts | 24 +- .../client-runtime/src/state/threadDetail.test.ts | 144 ++++++- packages/client-runtime/src/state/threadDetail.ts | 60 +-- .../src/state/threadHistoryController.test.ts | 1 + .../src/state/threadHistoryController.ts | 13 + .../client-runtime/src/state/threads-sync.test.ts | 452 +++++++++++++++++++++ packages/client-runtime/src/state/threads.ts | 117 +++++- packages/contracts/src/preview.ts | 7 + packages/contracts/src/settings.ts | 11 +- packages/shared/src/relayTracing.ts | 4 +- .../issue-18188/seed-stale-thread-command.js | 68 ++++ scripts/fixtures/issue-21397.json | 141 +++++++ scripts/seed-issue-21397.py | 112 +++++ scripts/seed-issue-21397.test.py | 181 +++++++++ vite.config.ts | 1 + 83 files changed, 4060 insertions(+), 361 deletions(-) create mode 100644 .github/workflows/relay-preview-cleanup.yml create mode 100644 .github/workflows/relay-preview.yml create mode 100644 .github/workflows/stale-needs-more-info.yml create mode 100644 apps/mobile/src/lib/composerChipPresentation.test.ts create mode 100644 apps/mobile/src/lib/projectIcon.test.ts create mode 100644 apps/mobile/src/native/ProjectChipIconImages.tsx delete mode 100644 apps/mobile/src/native/useRestingTopOffset.test.tsx delete mode 100644 apps/mobile/src/native/useRestingTopOffset.ts create mode 100644 infra/relay/src/previewStages.test.ts create mode 100644 infra/relay/src/previewStages.ts create mode 100644 infra/relay/src/previewTunnelSweep.test.ts create mode 100644 infra/relay/src/previewTunnelSweep.ts create mode 100644 scripts/fixtures/issue-18188/seed-stale-thread-command.js create mode 100644 scripts/fixtures/issue-21397.json create mode 100644 scripts/seed-issue-21397.py create mode 100644 scripts/seed-issue-21397.test.py + git status --short + git show --stat --oneline HEAD 031cc6ed7d Merge origin/main into t3/mobile-audit-file-tree-20261023 .github/workflows/relay-preview-cleanup.yml | 203 +++++++++ .github/workflows/relay-preview.yml | 81 ++++ .github/workflows/stale-needs-more-info.yml | 30 ++ apps/desktop/src/app/DesktopObservability.test.ts | 30 ++ apps/desktop/src/app/DesktopObservability.ts | 5 +- apps/desktop/src/ipc/methods/sshEnvironment.ts | 1 + apps/mobile/src/App.tsx | 2 + apps/mobile/src/Stack.tsx | 10 +- apps/mobile/src/components/ProjectFavicon.tsx | 8 +- apps/mobile/src/features/home/HomeScreen.tsx | 16 +- .../src/features/keyboard/CommandPalette.tsx | 26 +- .../src/features/keyboard/commandPaletteItems.ts | 3 + .../pull-requests/PullRequestReviewersScreen.tsx | 11 +- .../pull-requests/PullRequestRouteScreen.tsx | 17 +- .../features/pull-requests/PullRequestsScreen.tsx | 19 +- apps/mobile/src/features/threads/ThreadFeed.tsx | 29 +- .../src/lib/composerChipPresentation.test.ts | 109 +++++ apps/mobile/src/lib/composerChipPresentation.ts | 42 ++ .../src/lib/enrichedLinkPresentation.test.ts | 49 +++ apps/mobile/src/lib/enrichedLinkPresentation.ts | 51 ++- apps/mobile/src/lib/markdownDocument.ts | 181 +++++++-- apps/mobile/src/lib/markdownHtml.test.ts | 34 +- apps/mobile/src/lib/mobileTheme.ts | 112 ++++- apps/mobile/src/lib/projectIcon.test.ts | 81 ++++ apps/mobile/src/lib/projectIcon.ts | 41 +- apps/mobile/src/native/ProjectChipIconImages.tsx | 150 +++++++ apps/mobile/src/native/T3ComposerEditor.ios.tsx | 6 +- apps/mobile/src/native/T3ComposerEditor.native.tsx | 6 +- apps/mobile/src/native/useEnrichedLinkVariants.ts | 47 ++- .../mobile/src/native/useRestingTopOffset.test.tsx | 73 ---- apps/mobile/src/native/useRestingTopOffset.ts | 29 -- apps/mobile/src/state/entities.ts | 104 ++++- apps/mobile/src/widgets/AgentActivity.tsx | 43 +- apps/server/src/cli/pair.test.ts | 42 +- apps/server/src/cli/pair.ts | 23 ++ apps/server/src/config.ts | 2 +- apps/server/src/mcp/OrchestratorMcpService.ts | 11 +- .../mcp/OrchestratorMcpToolkit.integration.test.ts | 8 + apps/server/src/orchestration-v2/Orchestrator.ts | 30 +- .../server/src/orchestration-v2/ProjectionStore.ts | 37 +- .../orchestration-v2/ProviderTurnStartService.ts | 14 + .../src/orchestration-v2/RunExecutionService.ts | 25 +- .../orchestration-v2/ThreadFork.execution.test.ts | 217 +++++++++- .../src/orchestration-v2/TurnStartReads.test.ts | 149 +++++++ apps/server/src/preview/ServerBrowser.test.ts | 78 +++- apps/server/src/preview/ServerBrowser.ts | 7 +- apps/server/src/preview/ServerBrowserPage.ts | 7 +- apps/server/src/provider/CodexProvider.ts | 10 +- apps/server/src/provider/ProviderRegistry.test.ts | 2 +- apps/server/src/serverLogger.test.ts | 13 + apps/web/src/browser/BrowserProfileReporter.tsx | 14 +- .../components/chat/UsageLimitRecoveryBanner.tsx | 24 +- .../pullRequest/PullRequestTimelineTab.tsx | 2 +- apps/web/src/connection/platform.test.ts | 36 ++ apps/web/src/connection/platform.ts | 17 +- apps/web/src/observability/clientTracing.ts | 3 +- docs/operations/observability.md | 7 + docs/operations/release.md | 8 +- infra/relay/README.md | 4 +- infra/relay/alchemy.run.ts | 14 +- infra/relay/src/previewStages.test.ts | 60 +++ infra/relay/src/previewStages.ts | 74 ++++ infra/relay/src/previewTunnelSweep.test.ts | 102 +++++ infra/relay/src/previewTunnelSweep.ts | 183 +++++++++ knip.jsonc | 2 +- .../src/state/orchestrationV2Projection.test.ts | 83 ++++ .../src/state/orchestrationV2Projection.ts | 50 ++- .../src/state/threadCommands.test.ts | 78 +++- .../client-runtime/src/state/threadCommands.ts | 24 +- .../client-runtime/src/state/threadDetail.test.ts | 144 ++++++- packages/client-runtime/src/state/threadDetail.ts | 60 +-- .../src/state/threadHistoryController.test.ts | 1 + .../src/state/threadHistoryController.ts | 13 + .../client-runtime/src/state/threads-sync.test.ts | 452 +++++++++++++++++++++ packages/client-runtime/src/state/threads.ts | 117 +++++- packages/contracts/src/preview.ts | 7 + packages/contracts/src/settings.ts | 11 +- packages/shared/src/relayTracing.ts | 4 +- .../issue-18188/seed-stale-thread-command.js | 68 ++++ scripts/fixtures/issue-21397.json | 141 +++++++ scripts/seed-issue-21397.py | 112 +++++ scripts/seed-issue-21397.test.py | 181 +++++++++ vite.config.ts | 1 + 83 files changed, 4060 insertions(+), 361 deletions(-) + git diff 'HEAD^1' HEAD -- apps/mobile/src/features/files/FileTreeBrowser.tsx apps/mobile/src/features/files/ThreadFilesRouteScreen.tsx apps/mobile/src/features/files/thread-file-navigator-pane.tsx apps/mobile/src/features/files/useFileTreeEntries.test.tsx apps/mobile/src/features/files/useFileTreeEntries.ts apps/mobile/src/state/query.ts apps/mobile/vite.config.ts + vp test run --project react src/features/files/useFileTreeEntries.test.tsx + __vp_env_use= + '[' test = env ']' + '[' test = -C ']' + case "${1-}" in + '[' -n '' ']' + unset __vp_env_use + command vp test run --project react src/features/files/useFileTreeEntries.test.tsx note: You are running `vp test` as a Vite+ built-in command. If you meant to run the test npm script, use `vpr test` instead. RUN v5.0.5 /home/ubuntu/wt/pr-24270/apps/mobile + vp lint src/features/files/FileTreeBrowser.tsx src/features/files/ThreadFilesRouteScreen.tsx src/features/files/thread-file-navigator-pane.tsx src/features/files/useFileTreeEntries.test.tsx src/features/files/useFileTreeEntries.ts src/state/query.ts vite.config.ts + __vp_env_use= + '[' lint = env ']' + '[' lint = -C ']' + case "${1-}" in + '[' -n '' ']' + unset __vp_env_use + command vp lint src/features/files/FileTreeBrowser.tsx src/features/files/ThreadFilesRouteScreen.tsx src/features/files/thread-file-navigator-pane.tsx src/features/files/useFileTreeEntries.test.tsx src/features/files/useFileTreeEntries.ts src/state/query.ts vite.config.ts + hash -r + result=0 + echo LINT_EXIT=0 LINT_EXIT=0 + vp fmt --check src/features/files/FileTreeBrowser.tsx src/features/files/ThreadFilesRouteScreen.tsx src/features/files/thread-file-navigator-pane.tsx src/features/files/useFileTreeEntries.test.tsx src/features/files/useFileTreeEntries.ts src/state/query.ts vite.config.ts + __vp_env_use= + '[' fmt = env ']' + '[' fmt = -C ']' + case "${1-}" in + '[' -n '' ']' + unset __vp_env_use + command vp fmt --check src/features/files/FileTreeBrowser.tsx src/features/files/ThreadFilesRouteScreen.tsx src/features/files/thread-file-navigator-pane.tsx src/features/files/useFileTreeEntries.test.tsx src/features/files/useFileTreeEntries.ts src/state/query.ts vite.config.ts Checking formatting... All matched files use the correct format. Finished in 261ms on 7 files using 4 threads. + hash -r + result=0 + echo FORMAT_EXIT=0 FORMAT_EXIT=0 + git diff --check origin/main...HEAD + result=0 + echo DIFF_CHECK_EXIT=0 DIFF_CHECK_EXIT=0 Test Files 1 passed (1) Tests 10 passed (10) Start at 04:25:34 Duration 8.67s (tests 77%, environment 11%, import 8%, transform 4%) + hash -r + result=0 + echo FOCUSED_TEST_EXIT=0 FOCUSED_TEST_EXIT=0 + vp run typecheck + __vp_env_use= + '[' run = env ']' + '[' run = -C ']' + case "${1-}" in + '[' -n '' ']' + unset __vp_env_use + command vp run typecheck ~/apps/mobile$ tsc --noEmit ⊘ cache disabled + hash -r + result=0 + echo TYPECHECK_EXIT=0 TYPECHECK_EXIT=0 + git rev-parse HEAD 'HEAD^1' 'HEAD^2' 031cc6ed7dd7e1cc9a6c3b8e16f1a2e12d38840c a23bf91eef2a0e6cb8b3262c4741e87e483a94e3 d14ace8233ad3cf7856b6b834824f888240d67a1 + git ls-remote origin refs/heads/t3/mobile-audit-file-tree-20261023 refs/heads/main d14ace8233ad3cf7856b6b834824f888240d67a1 refs/heads/main a35d01b6db0148d19becb83d97d0a0b2b6d6ad3f refs/heads/t3/mobile-audit-file-tree-20261023 + git diff --stat origin/main...HEAD apps/mobile/src/features/files/FileTreeBrowser.tsx | 45 +-- .../src/features/files/ThreadFilesRouteScreen.tsx | 32 +- .../features/files/thread-file-navigator-pane.tsx | 10 +- .../src/features/files/useFileTreeEntries.test.tsx | 433 +++++++++++++++++++++ .../src/features/files/useFileTreeEntries.ts | 371 +++++++++++++++--- apps/mobile/src/state/query.ts | 2 + apps/mobile/vite.config.ts | 1 + 7 files changed, 798 insertions(+), 96 deletions(-) + git diff --name-only 'HEAD^1' HEAD -- apps/mobile/src/features/files/FileTreeBrowser.tsx apps/mobile/src/features/files/ThreadFilesRouteScreen.tsx apps/mobile/src/features/files/thread-file-navigator-pane.tsx apps/mobile/src/features/files/useFileTreeEntries.test.tsx apps/mobile/src/features/files/useFileTreeEntries.ts apps/mobile/src/state/query.ts apps/mobile/vite.config.ts + git status --porcelain=v1 + git diff --check