Repository navigation
fix(contracts): project preview results onto JSON - #491
Draft
omegent-app[bot] wants to merge 458 commits into
Draft
omegent-app[bot] wants to merge 458 commits into
omegent-app[bot] wants to merge 458 commits into
Conversation
Windows workspace paths must go through classifyMarkdownImageSource so relative and drive-letter forms keep their signed-asset paths. The fork normalizer only covers Codex `attachment:` / generated_images URIs the shared classifier blocks.
Keep clearing the session before provider interrupt, then still record a failed interrupt unless a newer ready snapshot won the race. Tests now expect migrations 041/042, Claude /compact, ACP runtime item ids, and bootstrap thread.delete on worktree failure.
The new upload-queue tests mocked `@t3tools/client-runtime/state/runtime` without spreading the real module. Under the fork's isolate:false unit project that incomplete mock leaked into PullRequestListFilters.
merge: sync upstream through 06de9e9 (121 commits)
## Why Fork CI on the #423 merge SHA (`1b3f2f52e`) failed its **Test** job while Check / Release Smoke / Mobile Native / Upstream Lineage Guard were green. The only failure was the pingdotgg#8006 perf assertion: `session-logic.test.ts > session activity performance > updates 20,000 ordered tool activities within 100 ms` `AssertionError: expected 139.01 to be less than 100` That merge tree is identical to the last green PR tip (`2efc0552e`). Same code, noisier GitHub-hosted runner. ## What - Skip the copy+sort in `deriveWorkLogEntries` when activities are already ordered (the streaming-append path ChatView actually hits). - Widen the budget from 100ms to 250ms. That still fails a quadratic rebuild; 100ms was too tight for this runner class. ## Test plan - [x] `vp test run apps/web/src/session-logic.test.ts -t "orders work log by activity sequence|session activity performance"` - [ ] Fork CI Test on this PR / then on `fork/dev` after merge Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
Classic-merge 11 upstream commits (pingdotgg/t3code through a3a8cbd) into fork/dev so the deploy branch keeps upstream as a second parent.
ProjectionThread gained required unsettledAt from upstream 043; the fork fixture used by WorktreeLifecycle tests still built rows without it.
The last-N assertions on the independent upstream ledger still ended at 042. 043_ProjectionThreadsUnsettledAt is a true upstream migration.
Those tests mock useAssetUrlState. Under isolate:false ChatMarkdown is already bound to the real asset URL atom, so useAtomValue() is null and the signed-URL cases throw on `_tag`.
The suite mocks ~/localApi. Under isolate:false the module is already bound, so confirm never hits the mock and pending-state assertions fail.
merge: sync upstream through a3a8cbd (11 commits)
## Problem `.githooks/post-checkout` deletes `apps/*/dist` on every branch checkout. The production server serves `apps/server/dist/client` live from disk, so a Discord-only deploy's `git switch` immediately returns **Web assets unavailable** (HTTP 503) until something rebuilds the tree. ## Fix Skip `apps/server/dist` in the emit wipe. Still clear other `apps/*/dist`, `dist-electron`, `packages/*/dist`, and `*.tsbuildinfo`. ## Test plan - [x] Harness: server dist preserved; web/package dist removed - [ ] After merge + deploy: Discord-only promote no longer 503s `https://t3vm.tail86038f.ts.net/` opened by [andreasimonecosta](https://discord.com/users/446049435810791424) in chat thread **Discord** · [Discord](https://discord.com/channels/1083767712431480922/1536393400130076773/1536393400130076773) · [T3](https://t3vm.tail86038f.ts.net/?thread=28d099c3-603c-4659-bdac-b87fb8d03261) --------- Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com> Co-authored-by: Andrea Simone Costa <24520167+jfet97@users.noreply.github.com> Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
… status (#427) ## Why `/omegent today-recap` looked stuck on Discord’s deferred “ci sto lavorando…” spinner because the slash only edited the thinking message after the T3 recap turn finished. The recap that did land was hard to read: jargon, `###` type headings, Discord’s 2000-char split cut [PR pingdotgg#1880](https://github.com/macs-holding/scanner/pull/1880) in half, and related PRs (1880 merged + 2273 open follow-up) repeated the same Packmittel story twice. ## What - Edit the deferred slash reply immediately with `Writing today's recap of \`<repo>\` (YYYY-MM-DD UTC)…`. - Log recap start, T3 thread id, settle, timeout, and working-status webhook failures. - Treat `latestTurn.state === "error"` as terminal. - Recap prompt: `(fix)` / `(feat)` on the PR line, plain-language what/why, spell out shop-floor terms. - Related PRs (same change, follow-up, or a first try closed because a later PR handled it) are one history block; do not list those PRs again. Unrelated closed PRs stay in CLOSED. - Split follow-up Discord messages on blocks, not mid-sentence. ## Test plan - [ ] `/omegent today-recap` replaces “thinking” with the working status within a second, then the recap. - [ ] Recap uses `(fix)` / `(feat)` next to each heading `PR #N`. - [ ] Related PRs appear once (history under the latest status); unrelated closed PRs only under CLOSED. - [ ] A recap longer than 2000 characters does not split a block in half. - [ ] Bot journal shows `today-recap starting T3 turn` / `today-recap T3 thread started` / `today-recap T3 turn settled`. Scanner tickets referenced in the recap format discussion: [SA-437](https://macs-holding.atlassian.net/browse/SA-437) · [SA-449](https://macs-holding.atlassian.net/browse/SA-449) · [SA-438](https://macs-holding.atlassian.net/browse/SA-438) opened by [joshuadima](https://discord.com/users/593167616273809448) in chat thread **Discord** · [Discord](https://discord.com/channels/1083767712431480922/1539325452873769041/1539325452873769041) · [T3](https://t3vm.tail86038f.ts.net/?thread=1c8e37cb-722d-405e-8071-5c8c3cd159fe) --------- Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com> Co-authored-by: Joshua Dimaunahan <170177550+MindfulLearner@users.noreply.github.com>
Discord turns inject linked Jira keys as context. Agents treated that as a request to post completion summaries on the ticket (example: unsolicited Omegent comment on [SA-438](https://macs-holding.atlassian.net/browse/SA-438), now deleted). Reply only on the originating surface unless the user explicitly asked. Opening a GitHub PR for landable work is still allowed; commenting on Jira/GitHub/Confluence is not. ## Test plan - [x] `vp test run` threadContext + T3AgentRules - [x] changed-file `vp check` - [ ] After deploy: a Discord turn that mentions a Jira key must not comment on the issue unless asked opened by [enricopolanski](https://discord.com/users/147977704522645504) in chat thread **Discord** · [Discord](https://discord.com/channels/1083767712431480922/1542173337164447804/1542173337164447804) Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com> Co-authored-by: Enrico Polanski <16064771+enricopolanski@users.noreply.github.com>
Classic-merge pingdotgg/t3code main into fork/dev (4 commits). 3-way weld where Grok work overlapped: keep fork Kimi usage, Direnv, session-mode pinning, and mid-session set_model; take upstream Grok Build transcript scanning, permission-mode spawn args, skills, and ACP reliability.
merge: sync upstream through ead4ce5 (4 commits)
Related follow-ups stay inside the latest PR's paragraph. Drop "landed today". Co-authored-by: Joshua Dimaunahan <170177550+MindfulLearner@users.noreply.github.com>
Classic-merge pingdotgg/t3code main into fork/dev (57 commits). 3-way weld: keep fork Direnv, omegent/DPoP connectionMethod, dual confirm settings, Grok mid-session set_model, HashMap command read model, and isolate:false web tests; take upstream Expo 57/Uniwind, OpenCode schemaVersion resume + abort-on-teardown, attachments, environment themes, and v0.0.36.
Restore optional connect-not-authorized reasons, route composer image picks through addComposerAttachments, and drop leftover useThemeColor after Uniwind.
Keep the fork worktree-remove confirmation in settings search order, and run the new React-mocking theme-sync suite in the isolated project so real React is not already bound.
A last-command `sh -c sleep` is exec'd on this host, so the runtime path disappears and prune tests delete in-use caches. Loop instead so argv still contains the tree.
Drafts may reuse a deleted thread id, and result usage now includes last input/output token fields from upstream.
The mock writes the last agent_message_chunk after prompt_complete. Settlement can race the JSON-RPC reader when the full suite is busy.
merge: sync upstream through 053affb (57 commits)
## Summary Post-merge Fork CI on `fork/dev` after #430 failed two related Grok ACP races: 1. **`retains turn transcript when sendTurn is interrupted after prompt success`** — `turns.length` was 0. The mock writes the first `content.delta` *before* `_x.ai/session/prompt_complete`. Interrupting on that delta plus a few cooperative yields leaves `promptRpcSucceeded` false under CI load, and the ensuring path drops the transcript. Wait for `turn.completed` before interrupting. 2. **`completes a Grok turn from xAI prompt completion when the prompt RPC hangs`** — expected `'hello from mock'`, got `'hello from '`. `drainEvents` only waited on the in-memory event-queue barrier. `prompt_complete` can settle while the next `agent_message_chunk` is still in the stdout pipe. Pump the live Node reader and Effect scheduler until a cycle sees an empty queue, then snapshot. ## Test plan - [x] `vp test run apps/server/src/provider/Layers/GrokAdapter.test.ts` (37 passed) - [x] Cursor + Kimi + XAiAcpExtension adapter tests passed - [ ] Fork CI Test job green on this SHA --------- Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
Classic-merge pingdotgg/t3code main into fork/dev so lineage keeps upstream as a second parent.
merge: sync upstream through 2daff8c (9 commits)
Parked mid-turn Discord follow-ups (📥) still posted a fresh `_Working.._` tip. The live bridge adopted it, froze the in-flight stream, and queue-drain started the next turn before Discord posted the previous answer. The queued turn’s final showed up; the first answer stayed as frozen progress (“I’ll trace…”) and never became a Discord final. ## Fix - Do not post/adopt Working for queued follow-ups (still badge 📥; `--steer` unchanged). - Catch-up-finalize the prior turn when `latestTurn` already advanced and Discord still has an unfinalized tip. - Keep `lastAssistantText` when a new epoch enters awaiting so queue-drain cannot wipe the orphaned body. ## Test `vp test run` on DiscordDelivery, mentions, and ResponseBridge (244 passing). opened by [patroza](https://discord.com/users/95218063095377920) in chat thread **Discord** · [Discord](https://discord.com/channels/1083767712431480922/1543890562611019776/1543890562611019776) Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com> Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Classic-merge pingdotgg/t3code main into fork/dev so lineage keeps upstream as a second parent.
A disabled stored model must fall back through resolveSelectableModelSelection before starting a task. Keep the fork unread-activity label on the new glass scroll-to-end control.
…7b73a # Conflicts: # apps/mobile/app.config.ts # apps/mobile/src/Stack.tsx # apps/mobile/src/features/home/HomeHeader.android.tsx # apps/mobile/src/features/home/HomeHeader.tsx # apps/mobile/src/features/home/HomeHeader.types.ts # apps/mobile/src/features/home/HomeRouteScreen.tsx # apps/mobile/src/features/home/HomeScreen.tsx # apps/mobile/src/features/home/home-list-filter-menu.test.ts # apps/mobile/src/features/home/home-list-filter-menu.ts # apps/mobile/src/features/home/home-list-options.test.ts # apps/mobile/src/features/home/home-list-options.ts # apps/mobile/src/features/home/homeListItems.test.ts # apps/mobile/src/features/home/homeListItems.ts # apps/mobile/src/features/home/homeThreadList.ts # apps/mobile/src/features/threads/ThreadDetailScreen.tsx # apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx # apps/mobile/src/features/threads/ThreadRouteScreen.tsx # apps/mobile/src/features/threads/thread-list-items.tsx # apps/mobile/src/features/threads/threadListV2.ts # apps/mobile/src/features/threads/threadPresentation.ts # apps/mobile/src/persistence/mobile-preferences.ts # apps/server/src/ws.ts # apps/web/src/components/BranchToolbarBranchSelector.tsx # apps/web/src/components/CommandPalette.tsx # apps/web/src/components/LegacySidebar.tsx # apps/web/src/components/ProjectScriptsControl.tsx # apps/web/src/components/Sidebar.tsx # apps/web/src/components/ThreadStatusIndicators.tsx # apps/web/src/components/chat/MessagesTimeline.tsx # apps/web/src/components/chat/OpenInPicker.tsx # apps/web/src/components/chat/ProviderStatusBanner.tsx # apps/web/src/components/chat/ThreadErrorBanner.tsx # apps/web/src/components/ui/scroll-area.tsx # packages/contracts/src/settings.test.ts # packages/contracts/src/settings.ts # pnpm-lock.yaml
PopoverPopup dropped viewportClassName; Button size owns padding/type.
Full vp check lints the whole tree. Fork board/jump/identity/host status still restyled SidebarInset, Spinner, TooltipPopup, DialogPanel.
HomeHeader uses title=\"Ownership\" on NativeHeaderToolbar.Menu, not the object form title: \"Ownership\".
Incoming t3.json submodule-init setting matches \"work\" and must stay in the catalog list.
sync: classic-merge upstream/main (829af7b) into fork/dev
Grok extra ACP prompt parts (`<runtime_info>`, `<pull_request_linking>`) were persisted as user-role text. The Discord bridge treated that as t3-client input and posted the raw harness instructions as `💭 from **unknown@unknown**`. Classify those envelopes as internal scaffolding so they are not mirrored, and strip them from echoed text as a fallback. Pushing this branch required the current `fork/dev` typecheck unblocks: ChromiumCookies yield* union, updates harness feed types, HostPowerMonitor / NativeTelemetryClient Option.match. grok-4.6 / Grok harness opened by [Patrick Roza](https://discord.com/users/95218063095377920) in chat thread **Discord** · [Discord](https://discord.com/channels/1083767712431480922/1552207449409200192/1552207449409200192) · [T3](https://t3vm/?thread=02e592b7-34fe-4b0f-bf3f-651f0883c29f) [(.)](t3code://t3vm/?thread=02e592b7-34fe-4b0f-bf3f-651f0883c29f) --------- Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com> Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
## Summary GitHub, Discord, and Teams refuse anyone who is not on the identity map. They cannot start, continue, stop, or approve a T3 thread. Jira uses the same gate for the agent. An unmapped Jira account can still leave a context note on a thread that is already linked. That note does not start or continue the agent. Teams people are matched by `teamsAadObjectId` (Azure AD object id / Graph `from.user.id`) or `teamsUserId` (Bot Framework `29:…` id). An empty map denies everyone. ## Test plan - [x] Identity map, Teams actor, and Jira trust tests - [x] Changed-file check and typecheck on the first push - [ ] After deploy, an unmapped Teams user cannot open or continue a thread; an unmapped Jira user can leave a context note on an already-linked thread and cannot run the agent grok-4.7 / Grok harness --------- Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
) ## Problem Browser automation broke in the desktop app. `preview_status` and `preview_open` succeeded, but `preview_snapshot`, `preview_navigate`, `preview_evaluate`, `preview_wait_for` (and click/type/press/scroll/color scheme/recording) failed with `PreviewAutomationExecutionError`. Desktop traces show the actual cause: ``` PreviewTabNotFoundError: Preview tab not found: tab_1 PreviewWebviewNotInitializedError: Preview tab "tab_1" has no webview registered ``` ## Root cause Upstream moved desktop preview tabs to a runtime identity: `previewRuntimeTabId(threadRef, serverEpoch, tabId)`. An upstream merge into the fork kept a stale fork copy of `PreviewAutomationHosts.tsx`. In that copy, `status` and the overlay-ready wait use the runtime id, but every other bridge call still passes the bare server id (`tab_1`). So status reports a healthy tab while everything else misses it in the desktop `PreviewManager`. This is unrelated to the Discord browser host. The failing client was the desktop renderer host (`preview-…`), not `discord-browser-*`. ## Fix - Restore `PreviewAutomationHosts.tsx` from the last merged upstream commit (`829af7b73a`). That brings back runtime ids everywhere, the viewport rollback, the presentation settle, and the shared `waitForNavigationReadiness`. - Keep the one intentional fork change: `resolveNavigableUrl` for `open`/`navigate`. - I checked every other file that uses `runtimeTabId`; none diverge from upstream. ## Tests The new test `PreviewAutomationHosts desktop operations` checks that a `snapshot` request reaches the desktop bridge with the runtime tab id. It fails on the current `fork/dev` file and passes with this change. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
#484) Fork CI on `ce3ef6b4` (#483) failed all four `citation comment source disappearance` tests in `AssistantCitationChip.test.tsx` with `TypeError: Cannot read properties of null (reading 'isServer')` from the real TanStack `Link`. The file mocks `@tanstack/react-router`, but in the `unit` project (`isolate: false`) a sibling file can bind the real module first. The file passes on its own, and the failure depends on test order, the same hazard already documented for the other entries in `isolatedUnitTestFiles`. This PR moves the file into the isolated project. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…tream pingdotgg#10982) (#485) Imports the open upstream PR pingdotgg#10982 (by @Mnigos), which fixes the accepted upstream bug pingdotgg#10980: an agent's `preview_click` leaves keyboard focus inside the preview page, so the user's typing and pastes go to the page, even for hidden `open: false` tabs. ## Provenance - Source: pingdotgg#10982, commits `5d24187dd3`, `b577a8380f` and `a2e44cd6c2`, squashed into one commit. - Imported unchanged: `apps/desktop/src/preview/Manager.ts` and `Manager.test.ts`. The test file needed a 3-way merge but no changes. - Nothing adapted or excluded. It adds no migrations. ## Change The click path now saves and restores the previously focused WebContents through a `restoreFocusedWebContents` helper it shares with `preview_press`. The restore runs whether the click succeeds or fails. It does nothing if focus moved to another renderer during the action or the user switched to another app. ## Tests Upstream's new Manager tests are included. All 93 tests in `src/preview/Manager.test.ts` pass locally. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Mnigos <makowskiigor@gmail.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…487) Discord threads often stored \`actor.platformId\` without \`personId\` (map empty at create, or a later map edit). Mine treats unattributed threads as yours, and the identity chip requires personId — so Enrico's Discord starters showed up in Mine with no face. Re-resolve origin from the identity map on snapshot and projection refresh, and seed the origin participant. Enrico is already in the live map (\`147977704522645504\`). After this lands, reload the environment: existing Discord-origin rows pick up the person without rewriting events. Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
#487 re-resolved identity-map snowflakes, but **new Discord threads still had empty origin**. Worktree create persists the first user message via \`thread.message.user.append\` and then **skips** \`message-sent\` on turn.start. The append path dropped \`SourceRef\`. Live evidence: \`t3-discord/efea60fb\` (Announce Shared Ladehilfe Once) has \`origin_source_json = null\` and one user message with empty \`source_json\`, while a later follow-up on another Discord thread did get Enrico. - Copy the stamped turn.start source onto the bootstrap append. - Recover existing rows from the Discord overlay (\`req: snowflake@handle\`) on snapshot/refresh. After deploy, reload: Enrico's working Discord threads should show his chip and leave Mine. --------- Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
…0cd3d # Conflicts: # .github/VOUCHED.td # .github/workflows/deploy-relay.yml # .github/workflows/release.yml # apps/desktop/src/updates/DesktopUpdates.ts # apps/desktop/src/window/DesktopApplicationMenu.test.ts # apps/mobile/app.config.ts # apps/mobile/src/features/home/HomeRouteScreen.tsx # apps/mobile/src/features/home/HomeScreen.tsx # apps/mobile/src/features/threads/ThreadComposer.tsx # apps/mobile/src/features/threads/ThreadFeed.tsx # apps/mobile/src/features/threads/ThreadNavigationSidebar.tsx # apps/mobile/src/features/threads/thread-list-v2-items.tsx # apps/mobile/src/features/usage/usageProviders.ts # apps/server/package.json # apps/server/src/checkpointing/CheckpointDiffQuery.test.ts # apps/server/src/mcp/PreviewAutomationBroker.test.ts # apps/server/src/mcp/PreviewAutomationBroker.ts # apps/server/src/mcp/toolkits/preview/tools.ts # apps/server/src/orchestration/Layers/OrchestrationEngine.test.ts # apps/server/src/orchestration/Layers/ProjectionSnapshotQuery.ts # apps/server/src/orchestration/Layers/ProviderCommandReactor.ts # apps/server/src/orchestration/decider.ts # apps/server/src/orchestration/projector.ts # apps/server/src/persistence/Layers/Sqlite.ts # apps/server/src/provider/Drivers/CodexDriver.ts # apps/server/src/provider/Layers/ClaudeAdapter.ts # apps/server/src/provider/Layers/CodexAdapter.ts # apps/server/src/provider/Layers/CodexSessionRuntime.ts # apps/server/src/provider/Layers/ProviderInstanceRegistryLive.test.ts # apps/server/src/provider/Layers/ProviderRegistry.test.ts # apps/server/src/provider/Layers/ProviderService.test.ts # apps/server/src/provider/Layers/ProviderService.ts # apps/server/src/provider/acp/AcpSessionRuntime.ts # apps/server/src/relay/AgentAwarenessRelay.test.ts # apps/server/src/server.test.ts # apps/server/src/server.ts # apps/server/src/serverRuntimeStartup.test.ts # apps/web/src/components/BranchToolbar.logic.ts # apps/web/src/components/BranchToolbar.tsx # apps/web/src/components/ChatView.tsx # apps/web/src/components/CommandPalette.logic.test.ts # apps/web/src/components/CommandPalette.tsx # apps/web/src/components/LegacySidebar.tsx # apps/web/src/components/Sidebar.logic.test.ts # apps/web/src/components/Sidebar.logic.ts # apps/web/src/components/Sidebar.tsx # apps/web/src/components/ThreadStatusIndicators.tsx # apps/web/src/components/chat/MessagesTimeline.logic.test.ts # apps/web/src/components/chat/MessagesTimeline.tsx # apps/web/src/components/chat/ModelPickerSidebar.tsx # apps/web/src/components/chat/ProviderModelPicker.tsx # apps/web/src/components/preview/PreviewAutomationHosts.test.tsx # apps/web/src/components/settings/SettingsPanels.tsx # apps/web/src/components/usage/UsageProviderChart.test.ts # apps/web/src/components/usage/usageProviders.ts # apps/web/src/queuedMessageStore.test.ts # apps/web/src/queuedMessageStore.ts # docs/user/composer.md # packages/client-runtime/package.json # packages/client-runtime/src/state/shellSnapshotHttp.ts # packages/client-runtime/src/state/threadSnapshotHttp.ts # packages/client-runtime/src/state/threads.ts # packages/contracts/src/previewAutomation.ts # packages/contracts/src/usage.ts # pnpm-lock.yaml # scripts/build-desktop-artifact.ts
…ue fixtures BranchToolbar lost resolveEffectiveEnvMode after the 3-way. Sidebar.logic dropped resolveThreadRowClassName and the settled-timestamp import. ChatView dropped reconnectingThroughVersionSkew. CommandPalette still passed panelClassName. Thread fixtures need queuedMessages/pendingTurnStart.
ElectronUpdaterFeedUrl is not unknown[].
…weld Projector tests cannot index threads as an array. Grok driver tests need DirenvEnvironment. Kimi transcripts need the fast flag. Auto-settle decider tests go through fromWireReadModel.
Full vp check rejects arbitrary text sizes, raw emerald/amber, unknown workspace-topbar, and dynamic Button classNames. Map fork-only board, identity, and usage chrome onto theme tokens so the ship gate can publish. Made with grok-4.6 in T3 Code.
Desktop preview tests must keep EventTarget on the document stub so visibilitychange listeners can mount. Usage keybinding rows and command choices share one total order: open, then page metrics, then periods. Made with grok-4.6 in T3 Code.
…solate Upstream added ProjectionThreadsAutoSettleDisabledAt. Fork namespace tests assert the ledger tail. Kimi is a built-in driver, so registry fixtures and the bundled compatibility manifest include it. Isolate the v8 heap-snapshot mock so the partial-file cleanup assertion binds. Made with grok-4.6 in T3 Code.
The session projection can land before the failure activity. Waiting only on stopped status races on CI. Made with grok-4.6 in T3 Code.
sync: classic-merge upstream/main (d15210c) into fork/dev
…490) preview_evaluate could return a Date, NaN, or a circular value. Encoding that result failed schema validation and tore down the Discord browser host, so the next call fell back to the signed-out desktop preview. Host results are round-tripped through JSON before they are sent. A value that cannot be encoded fails that call. If sending the response still fails schema checks, the host answers with an execution error for that call and stays connected. grok-4.7, Grok harness in T3 Code opened by [patroza](https://discord.com/users/95218063095377920) in chat thread **Discord** · [Discord](https://discord.com/channels/1083767712431480922/1554757629593788458/1554757629593788458) · [T3](https://t3vm/?thread=293dc4c3-2c74-443c-a04f-4e701dabfcc4) (t3code://t3vm/?thread=293dc4c3-2c74-443c-a04f-4e701dabfcc4) --------- Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com> Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
PreviewAutomationResponse.result was Schema.Unknown, so a Date, NaN, bigint, or cycle failed the RPC JSON codec and killed the host stream. The codec now projects those values onto JSON before they are sent. Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
patroza
force-pushed
the
fork/dev
branch
5 times, most recently
from
October 7, 2026 16:45
4e00c96 to
0081187
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The RPC JSON codec rejected preview results that were not already JSON. A Date, NaN, bigint, or cycle on
PreviewAutomationResponse.resultfailed encoding and killed the host stream.The response schema now projects those values onto JSON while encoding. A Date becomes an ISO string, a non-finite number becomes null, a bigint becomes a string, and a cycle becomes
"[Circular]". Desktop and Discord hosts both send this schema.grok-4.7, Grok harness in T3 Code
opened by patroza in chat thread Discord · Discord · T3 (t3code://t3vm/?thread=293dc4c3-2c74-443c-a04f-4e701dabfcc4)