Repository navigation
fix(web): instructed compact runs without a bare compaction first - #24008
Conversation
… first With the Compact chip on, sending `/compact <instructions>` queued a bare `/compact` ahead of it, so the first compaction ran without the instructions and the user paid for two. Compact-before-send now skips any `/compact` command, with or without arguments. Fixes #20222
… Compact chip is on Compact-before-send matched only the exact text "/compact", so a typed "/compact <instructions>" queued a bare compaction ahead of it. The predicate now recognizes the command at a word boundary, case-insensitive, and the regression test is reduced to the one case that proves it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Takeover tests for #20236: a stale Claude session still compacts before ordinary messages and /compactfoo, but /compact with instructions or whitespace is the only compaction. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The helper had one caller; keep the guard where the decision is made. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a narrowly scoped web composer bug fix that prevents instructed No code changes detected at You can add or adjust custom eligibility rules. Learn more. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to
|
…t-instructions-r2
…t-instructions-r2
Keep the branch's case-sensitive instructed /compact predicate over main's case-insensitive COMPACT_COMMAND_PATTERN (#24008): Claude reads mixed-case /Compact with instructions as prose, so a stale session still compacts first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* refactor(web): timeline user message rows and context chips live in their own files (pingdotgg#22676) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): timeline assistant and orchestration event rows live in their own files (pingdotgg#22677) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): timeline row derivation, position restore and find reader live in hooks (pingdotgg#22682) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the command palette's theme items live in their own file (pingdotgg#22679) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the command palette's thread items come from their own hook (pingdotgg#22687) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the command palette's project items and pure helpers live in their own files (pingdotgg#22699) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the command palette's add-project views are components (pingdotgg#22707) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(cli): start, message, and read threads from the terminal with t3 thread (pingdotgg#22732) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): composer attachment tiles live in their own component (pingdotgg#22689) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): resting image previews and queued attachments are their own components (pingdotgg#22719) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): composer mode controls and footer actions live in ComposerFooterControls (pingdotgg#22720) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): typing no longer re-renders the composer model picker (pingdotgg#22721) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): composer suggestion lists are built by useComposerMenuItems (pingdotgg#22722) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the sidebar's thread rows live in their own file (pingdotgg#22696) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): sidebar list markers and draft rows live in their own files (pingdotgg#22729) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(dev): first dev start seeds real data and warms deps (pingdotgg#22744) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the pull requests column lives in its own component (pingdotgg#22671) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the pull request header's crumbs, title editor and base branch live in their own components (pingdotgg#22672) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the pull request header's actions live in their own components (pingdotgg#22702) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the pull request detail loader lives in its own hook (pingdotgg#22703) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the pull request list's rows read the speed-mode modifier themselves (pingdotgg#22704) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the pull requests page's scope and grouping hooks live in their own module (pingdotgg#22705) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the pull requests route only validates its search; the page lives under components (pingdotgg#22706) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * perf(web): Shift re-renders only each row's quick-action group (pingdotgg#22726) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the pull request list's grouping helper lives in a logic module (pingdotgg#22727) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): chat markdown code blocks live in their own module (pingdotgg#22690) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the Mermaid code block lives in its own component file (pingdotgg#22691) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): chat markdown tables and details live in their own components (pingdotgg#22692) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): chat markdown links and file chips live in their own modules (pingdotgg#22693) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): chat markdown images and videos live in their own module (pingdotgg#22694) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's module-level helpers live in their own files (pingdotgg#22665) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's persistent terminal drawers live in their own component (pingdotgg#22680) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's right panel lives in its own component (pingdotgg#22700) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's timeline follow and anchoring lives in useTimelineFollow (pingdotgg#22701) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's machine and server-update banners live in useSystemComposerBanners (pingdotgg#22710) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's subagent, goal, background-work and branch banners are built in ThreadActivityBanners (pingdotgg#22725) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's draft machine routing lives in useDraftEnvironmentRouting (pingdotgg#22728) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's send preparation is pure functions in ChatView.logic (pingdotgg#22734) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the archived threads settings page lives in its own file (pingdotgg#22666) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the typography settings section lives in its own file (pingdotgg#22667) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the appearance settings page lives in its own file (pingdotgg#22668) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the background activity setting and its dialog live in their own file (pingdotgg#22669) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the connections page's pure helpers live in ConnectionsSettings.logic (pingdotgg#22683) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): authorized clients and endpoint rows live in their own file (pingdotgg#22684) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): saved and T3 Connect environment rows live in their own file (pingdotgg#22685) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * perf(server): skip the macOS xcrun git shim (pingdotgg#22759) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * docs(agents): read vendored .repos with git show when sparse-excluded (pingdotgg#22764) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): ⌘Z undoes a settle even when the composer has focus (pingdotgg#22607) Co-authored-by: ishaanko <ishaanko.mail@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(scripts): one command checks what the branch changed (pingdotgg#22767) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(scripts): check:changed no longer skips knip after a removed import (pingdotgg#22784) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * perf(dev): faster first load for shared dev servers (pingdotgg#22776) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): stalled clones say "Stalled" instead of a frozen speed (pingdotgg#22780) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): steers split a finished turn's work instead of stacking under it (pingdotgg#22783) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): images on their own line no longer sit beside their label (pingdotgg#22787) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(release): include pnpm hook in Vercel uploads (pingdotgg#22813) * fix(release): keep Vercel warnings out of deployment URLs (pingdotgg#22817) * fix(queue): send selected held messages when a thread is stopped (pingdotgg#22790) * fix(server): delegated Claude children follow your subagent cache TTL setting (pingdotgg#22841) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): t3 pair in a worktree no longer falls back to the live install (pingdotgg#22855) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): avoid expensive diff minimization in status refreshes (pingdotgg#21872) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(codex): keep every path of a multi-file patch (pingdotgg#22541) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: GPT-6.1 Sol <noreply@openai.com> * fix(gitlab): merge request diffs page 30 files at a time so GitLab 15.7 to 17.10 answer (pingdotgg#21909) * fix(server): keep Antigravity question options and no-custom-answer flag in V2 (pingdotgg#22019) * fix(server): commit prompts no longer repeat CLAUDE.md when it matches AGENTS.md (pingdotgg#22848) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mcp): point a bare thread uuid at its mcp: thread in thread_not_found (pingdotgg#22452) * fix(opencode): out-of-funds failures show OpenCode's message instead of a usage limit (pingdotgg#22596) * fix(shared): accept a pasted ChatGPT callback URL that is missing http:// (pingdotgg#21750) * fix(server): the background service picks up JAVA_HOME from the login shell (pingdotgg#22856) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): answered questions say "already answered" instead of "not found" (pingdotgg#22850) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(desktop): an abandoned browser sign-in no longer blocks T3 Connect for 3 minutes (pingdotgg#22903) On desktop, an abandoned browser sign-in blocked every T3 Connect sign-in for 3 minutes. A new attempt now replaces the stale Clerk flow, and a Cancel bar resets the sheet. Takeover of pingdotgg#22708. Co-authored-by: steve-ai-vibe <steve.ai.vibe@gmail.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): agents get a short, current model list instead of a 55k-character catalog dump (pingdotgg#22889) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * docs(agents): proof for a bug fix depends on the bug (pingdotgg#23008) Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * fix(server): removing a worktree on Windows no longer deletes what its junctions point to (pingdotgg#21099) Co-authored-by: sheehanmunim <80079528+sheehanmunim@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * perf(web): a streaming thread re-renders only its own sidebar row (pingdotgg#22730) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the add environment dialog owns its form state (pingdotgg#22686) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(desktop): use Clerk's upstream fix for abandoned browser sign-ins (pingdotgg#23038) * feat: show automation messages as compact timeline rows (pingdotgg#22638) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(server,web,mobile): approvals in full access say why Claude asked (pingdotgg#22546) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(claude): idle compaction has a global default and per-instance overrides (pingdotgg#23037) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * perf(web): typing no longer re-renders the traits picker or attach button (pingdotgg#23040) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the composer's layout and provider hooks live in their own files (pingdotgg#23042) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the prompt stash lives in useComposerStash (pingdotgg#23046) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): composer context imports live in useComposerContextImport (pingdotgg#23048) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): composer file intake lives in useComposerAttachmentIntake (pingdotgg#23049) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the composer's footer controls render in ComposerControlsBar (pingdotgg#23058) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): composer key handling lives in useComposerCommandKey (pingdotgg#23060) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's send paths live in useComposerSend (pingdotgg#23062) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's terminal actions live in useChatTerminalActions (pingdotgg#23063) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's right panel actions live in useRightPanelActions (pingdotgg#23064) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's snooze, settle, and checkout actions live in useThreadLifecycle (pingdotgg#23065) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's revert, rollback, and fork live in useTimelineRewind (pingdotgg#23066) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's attachment preview handoff lives in useAttachmentPreviewHandoff (pingdotgg#23067) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's project clone banner lives in useProjectCloneBanner (pingdotgg#23068) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's model, mode, and workspace choices live in useComposerSelection (pingdotgg#23069) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's pull request checkout lives in usePullRequestDraftThread (pingdotgg#23070) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's thread derivations are tested functions in ChatView.logic (pingdotgg#23071) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's paste-to-focus, titlebar controls, and timeline overlays move out (pingdotgg#23072) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(cursor): a closed-stream write in the Cursor SDK no longer stops the server (pingdotgg#22897) Co-authored-by: MarMarLabs <marmar9615@icloud.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): Codex no longer offers a one-click update for installs it can't detect (pingdotgg#22504) * fix(pi): declare properties on MCP tool schemas that omit them (pingdotgg#21822) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(server): a desktop backend whose launcher died shuts down cleanly instead of crashing (pingdotgg#22471) * fix(mobile): chat feed no longer re-derives on every render (pingdotgg#22913) Co-authored-by: flamboh <oliver.boorstein@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * docs(user): the outside agents guide says which addresses agents can sign in over (pingdotgg#22377) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(server): HTML preview reports a browser start error instead of an internal error (pingdotgg#22895) Co-authored-by: ScottN-PV <snorteman@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(tailscale): a timed-out tailscale probe no longer outlives its call (pingdotgg#22900) Co-authored-by: fixfon <12512757+fixfon@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * docs(composer): queued messages follow the Follow-up behavior setting (pingdotgg#22857) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): failed provider updates say why (pingdotgg#22506) * test(telemetry): keep fixture PIDs from colliding with the test worker (pingdotgg#21446) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): server tests resolve the macOS temp dir symlink (pingdotgg#21442) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(scripts): mobile lint fails instead of passing when ktlint or detekt is missing (pingdotgg#22896) Co-authored-by: Shubh <shubh@shubhxho.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): t3_thread_read clamps oversized page sizes instead of failing (pingdotgg#22901) Co-authored-by: fixfon <12512757+fixfon@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: grey-tsosie <45133231+grey-tsosie@users.noreply.github.com> * fix(mobile): opening a pull request no longer crashes with "Maximum update depth exceeded" (pingdotgg#22600) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): PR Code tab keeps its files after a refresh with an unchanged diff (pingdotgg#22917) Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): finished provider updates no longer leave a hidden spinner in the sidebar (pingdotgg#22912) Co-authored-by: 1kuna <47035140+1kuna@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(composer): mentions of files like `posts.$postId.tsx` or `[id].tsx` stay chips (pingdotgg#22922) Co-authored-by: Victor Vogel <satsdev@only21mil.xyz> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): resuming an interrupted run lives in its own hook (pingdotgg#23087) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): proposed-plan follow-ups and implement-in-new-thread live in their own hooks (pingdotgg#23091) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): multiple-model sends live in their own hook (pingdotgg#23094) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): the composer send reads its own settings and draft instead of taking them from ChatView (pingdotgg#23095) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ComposerControlsBar renders without a memo() wrapper (pingdotgg#23093) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): chat shortcuts live with the hooks that own their actions (pingdotgg#23097) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): ChatView's timeline banners render in ChatBannerLane (pingdotgg#23101) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): the branch toolbar and thread details panel stay cached while a reply streams (pingdotgg#23103) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): scheduled tasks no longer jump to the top when toggled (pingdotgg#22899) Co-authored-by: Victor Vogel <satsdev@only21mil.xyz> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): Forgejo and GitCafe pull requests link to their threads again (pingdotgg#22937) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): pushes the remote refuses say why instead of a generic failure (pingdotgg#22904) Co-authored-by: fixfon <12512757+fixfon@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(composer): typing a price no longer opens the skill menu (pingdotgg#21519) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): thread details PR merge uses the last selected merge method (pingdotgg#22399) * fix(web): a Usage toggle shortcut now goes back instead of staying on Usage (pingdotgg#22905) Co-authored-by: Victor Vogel <satsdev@only21mil.xyz> Co-authored-by: GPT-6.1 Sol <noreply@openai.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): quote comment box stays on screen for long code lines (pingdotgg#22149) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): right panel launcher letters open their surface instead of typing into the composer (pingdotgg#22898) Co-authored-by: fixfon <12512757+fixfon@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): ../ file links outside the workspace open as host files (pingdotgg#22853) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(shared): recognize relative folder links with trailing slash (pingdotgg#22188) Co-authored-by: macodev00 <macodev00@users.noreply.github.com> * fix(client): usage limits skip disabled connections (pingdotgg#22936) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): imported VS Code themes keep destructive buttons red (pingdotgg#21924) * fix(shared): Azure DevOps repositories with a space in the name list their pull requests (pingdotgg#22782) * fix(opencode): cancelled todos no longer keep the todo list running (pingdotgg#22938) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): copy to machine clones the fork, not its upstream (pingdotgg#22492) * fix(server): JetBrains IDEs open file links at the right column (pingdotgg#22826) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): sync pull request draft status changes (pingdotgg#22832) * test(web): chat shortcut test types through the composer handle (pingdotgg#23126) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * Merge commit from fork A markdown image such as , or a raw \\host\share path, was classified as a host file. Rendering it asked the server for a signed asset URL, and the server's realpath on the resulting UNC path made Windows open an SMB session and send the user's NetNTLMv2 response to the attacker's host, with no click and no tool call. File-link chips did the same through filesystem.getMetadata, which stats every absolute path, and storage cleanup stats the store paths in a worktree's pnpm manifest, which an agent can write. Network paths (two leading separators, as Windows reads them: \\h, //h, /\h) now only resolve inside the thread's project, so projects on a share keep working: - clients block them in markdown images and stop treating them as file links - the web stops asking for their metadata - the server refuses them for media assets and file reads outside the project, never stats one for metadata, and storage cleanup ignores a pnpm manifest that names one - each check hands the filesystem the resolved path it approved, since Windows reads a `\\?\` path as written, `..` included Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(source-control): merge messages drop Claude Code's current claude.com footer (pingdotgg#23133) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(build): pin Node 26.12.1 for development and standalone releases (pingdotgg#23165) * fix(mobile): keep Duo toolbar actions clear of workspace tabs (pingdotgg#22976) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): respect Duo safe areas in overlays (pingdotgg#22977) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): retain resting scroll offsets through Duo inset changes (pingdotgg#22978) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): deliver the first tab selection after Duo folding (pingdotgg#22979) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): use native full-width sheets on iPhone Duo (pingdotgg#22980) Co-authored-by: Pixel Perfect <me@pixp.cc> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): the pull requests tab's empty detail asks for a pull request (pingdotgg#23143) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): the iPhone Duo keeps list titles through folds and unfolds with its sidebar (pingdotgg#23144) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): the iPhone Duo searches from a field at the bottom of its list (pingdotgg#23145) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): a closed search no longer risks freezing the app (pingdotgg#23146) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): folding the Duo keeps the thread's end or the reader's line in place (pingdotgg#23147) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): the iPhone Duo's search field and composer line up with its tab bar (pingdotgg#23148) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): Screens 5.0.0-t3.36 stops an iPhone Duo unfold crash (pingdotgg#23149) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): the iPhone Duo's inspector panes use the full column (pingdotgg#23150) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(gitcafe): show line counts on linked and listed pull requests (pingdotgg#22633) * docs(import): correct conversation size and batch limits (pingdotgg#23226) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): stop abandoned turns before continuing threads (pingdotgg#23169) * feat(server): export how long runs take and how they end (pingdotgg#22094) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): new-thread heading clears the iPad header (pingdotgg#23206) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(pi): fork completed turns while the next turn is running (pingdotgg#23052) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): drafts swipe to discard and every row move animates (pingdotgg#23205) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(server): webhook filters fan out over arrays with a [] path wildcard (pingdotgg#23282) Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * fix(web): Arabic and Hebrew text reads and navigates right to left (pingdotgg#22777) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(client-runtime): refresh Git refs when the RPC session changes (pingdotgg#23314) * fix(web): cap list layout passes to prevent React error 185 (pingdotgg#23315) * fix(mobile): align iPad composer without shifting on keyboard focus (pingdotgg#23355) * feat(gitcafe): request reviewers and apply labels on GitCafe pull requests (pingdotgg#23034) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(source-control): clones retry over HTTPS when the SSH key is refused (pingdotgg#23170) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): the iOS composer reopens where you left a long draft (pingdotgg#23096) Co-authored-by: Vishal <vishalprashantdoshi@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Vishal Doshi <vdoshi96@users.noreply.github.com> * fix(mobile): preserve new-thread drafts and native header layout (pingdotgg#23366) * feat: ChatGPT Business usage limits offer a copyable admin request (pingdotgg#23361) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): paused sidebar videos stop reloading after every command (pingdotgg#23106) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Nikita Maximilian Grimm <github@nikitagrimm.de> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * chore(typecheck): typescript is the tsc-rs drop-in, no effect-tsgo patch (pingdotgg#23023) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): Dynamic Island status no longer wraps next to other Live Activities (pingdotgg#23327) Fixes pingdotgg#15682. Takes over pingdotgg#23035. Co-authored-by: Taylor Dolezal <onlydole@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * perf(web): streamed reply text no longer re-renders ChatView (pingdotgg#23117) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * perf(web): visit marks during a reply no longer re-render ChatView (pingdotgg#23124) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): a Claude agent stops when the server that started it dies (pingdotgg#23389) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): SSH hosts no longer keep every old 300 MB runtime after desktop updates (pingdotgg#23113) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(settings): older clients connect again after idle compaction modes (pingdotgg#23454) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): unify draft and thread navigation and composer behavior (pingdotgg#23467) * ci: setup survives npm registry outages (pingdotgg#23582) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(web,mobile): messages from other agents fold into one-line rows (pingdotgg#23135) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): subagent bar keeps model and status readable in narrow chat columns (pingdotgg#23502) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(chat): mark tool images beyond the preview limit (pingdotgg#23595) Co-authored-by: GPT-6.1 Sol <noreply@openai.com> * fix(web): provider updates no longer pop toasts on launch (pingdotgg#23233) * fix(server): probe the Windows startup environment asynchronously (pingdotgg#21720) * fix(usage): count initial Codex requests with inherited totals (pingdotgg#23729) * chore(mobile): bump app version to 2.1.0 Co-authored-by: codex <codex@users.noreply.github.com> * fix(web): let toast content use the full accordion width (pingdotgg#23777) * fix(web): sidebar follows the active thread after history navigation (pingdotgg#23519) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): keep subagent transcript updates off shell stream (pingdotgg#23783) * fix(deps): pin all patched package versions (pingdotgg#23798) * docs: document the GitCafe mirror and refresh the dev setup (pingdotgg#23808) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix: no more em dashes in product copy (pingdotgg#23799) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * chore(release): prepare v0.1.2 * chore(mobile): bump Clerk Expo SDKs to the new native client sync (pingdotgg#23047) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com> * fix(mobile): capture folded and unfolded Duo store screenshots (pingdotgg#23849) * fix(server): preserve typed requirements as the RPC group grows (pingdotgg#23813) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): wake PR watches when no checks report (pingdotgg#23863) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): resume Codex parents after native children finish (pingdotgg#23840) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(gitcafe): authored lists, merge progress, and author reviews match git.cafe (pingdotgg#23887) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(forgejo): merges follow the repository's delete-branch setting (pingdotgg#23471) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): keep PR check counts in sync (pingdotgg#23548) * fix(server): speed up shell snapshots on large databases (pingdotgg#23751) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): keep managed Codex token renewal in the server (pingdotgg#21786) * fix(server): renew active managed Codex turns through native auth (pingdotgg#21787) * feat(web): telemetry export settings show where the running endpoint came from (pingdotgg#23713) Co-authored-by: Julius Marminge <julius0216@outlook.com> Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> * fix(ui): preserve tool icon detail in light mode (pingdotgg#23896) * fix(mcp): accept GitCafe pull request URLs in link/unlink/watch tools (pingdotgg#23899) Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * feat(settings): add thread title instructions (pingdotgg#21882) Co-authored-by: Yash Singh <saiansh2525@gmail.com> * fix(mobile): undo toasts keep their action on one row (pingdotgg#23910) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * docs(connect): correct the relay webhook endpoint key (pingdotgg#23526) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): center Android composer text and pad wrapped drafts (pingdotgg#23829) * fix(server): wake PR watches when remaining CI checks finish (pingdotgg#23904) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(mobile): the empty composer row shows only the provider icon (pingdotgg#23570) * fix(server): route SQLite reads around writer contention (pingdotgg#23902) * fix(claude): route approval feedback to the requesting agent (pingdotgg#23657) * fix(web): align pull request file counts with diff stats (pingdotgg#23905) * fix(web): task durations over an hour no longer wrap in the tasks panel (pingdotgg#13472) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> * fix(server): preserve Codex sign-in guidance in usage notices (pingdotgg#17055) Co-authored-by: Codex (gpt-6-astra) <noreply@openai.com> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> * fix(server): restore Claude subscription usage through proxies (pingdotgg#12069) Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> * fix(server): Forgejo skipped jobs no longer keep a pull request watch pending (pingdotgg#16668) Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * fix(mobile): move Android undo toasts above bottom navigation (pingdotgg#23928) * perf(server): skip unused Git output line parsing (pingdotgg#23953) Co-authored-by: Jet <jet@extremist.software> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * fix(server): abort interrupted ACP MCP fetches (pingdotgg#23955) Co-authored-by: kiiwee <6160452+kiiwee@users.noreply.github.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * fix(web): new threads no longer hang when a project's machine is offline (pingdotgg#23967) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(pi): stop blank input placeholders from failing the run (pingdotgg#23235) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(cursor): fail turns that end in a transport error after commentary (pingdotgg#23273) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(forgejo): answer the base branch read in the skipped-checks test (pingdotgg#23952) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(opencode): retry failed model catalogs until they recover (pingdotgg#23939) * fix(server): avoid full shell read on resume (pingdotgg#23987) * test: delete low-value tests and dead test-only exports (pingdotgg#24058) * test(server): restore DST scheduling tests deleted in the test snap (pingdotgg#23991) * test(web): restore project settings permission tests deleted in the test snap (pingdotgg#24011) * test(mobile): restore clipboard secret-redaction test deleted in the test snap (pingdotgg#23980) * fix(web): Cmd+B toggles the sidebar unless text is selected (pingdotgg#24063) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): agent-browser and Chrome no longer outlive the agent that started them (pingdotgg#21299) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Theo Browne <me@theo.li> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(client-runtime): restore render scheduler tests deleted in the test snap (pingdotgg#23977) * fix(web): cmd+k search hides subagents and favors recent, whole-word matches (pingdotgg#24032) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(lint): new polling loops in tests now fail lint (pingdotgg#23983) * ci: unused dependency patches fail in check:changed, not after push (pingdotgg#23988) * fix(desktop): PDFs in the preview can be annotated (pingdotgg#24022) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): instructed compact runs without a bare compaction first (pingdotgg#24008) Co-authored-by: fixfon <12512757+fixfon@users.noreply.github.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * fix(desktop): reduce app crashes when a preview tab's renderer dies during agent screenshots (pingdotgg#24056) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(server): Stop stops a thread's subagents again (pingdotgg#23886) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(desktop): a stuck quit no longer leaves the app unkillable (pingdotgg#23873) Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> --------- Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: ishaanko <ishaanko.mail@gmail.com> Co-authored-by: Yash Singh <saiansh2525@gmail.com> Co-authored-by: Lakshmi Tanmay <lakshmi@voltcrash.com> Co-authored-by: Victor Vogel <satsdev@only21mil.xyz> Co-authored-by: GPT-6.1 Sol <noreply@openai.com> Co-authored-by: Igor Makowski <56691628+Mnigos@users.noreply.github.com> Co-authored-by: fixfon <12512757+fixfon@users.noreply.github.com> Co-authored-by: project516 <138796702+Project516@users.noreply.github.com> Co-authored-by: steve-ai-vibe <steve.ai.vibe@gmail.com> Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com> Co-authored-by: sheehanmunim <80079528+sheehanmunim@users.noreply.github.com> Co-authored-by: Robert Soriano <sorianorobertc@gmail.com> Co-authored-by: MarMarLabs <marmar9615@icloud.com> Co-authored-by: Koushik_xd <122906171+koushikxd@users.noreply.github.com> Co-authored-by: Taissa <202353633+tlconde@users.noreply.github.com> Co-authored-by: flamboh <oliver.boorstein@gmail.com> Co-authored-by: Gourav Kumar Dhiman <gkrdhiman@gmail.com> Co-authored-by: ScottN-PV <snorteman@gmail.com> Co-authored-by: tatsuaki watanabe <tatsuaki.w@gmail.com> Co-authored-by: Shubh <shubh@shubhxho.com> Co-authored-by: grey-tsosie <45133231+grey-tsosie@users.noreply.github.com> Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: 1kuna <47035140+1kuna@users.noreply.github.com> Co-authored-by: MarcoDotIO <Marcus.Arnett10@gmail.com> Co-authored-by: Tristan Knight <admin@snappeh.com> Co-authored-by: Etan Heyman <93338119+EtanHey@users.noreply.github.com> Co-authored-by: maco <gosarmarcel7@gmail.com> Co-authored-by: macodev00 <macodev00@users.noreply.github.com> Co-authored-by: M4NU5 <31220123+M4NU5@users.noreply.github.com> Co-authored-by: Louis Gollut <louis.gollut@proton.me> Co-authored-by: Pavel Kroupa <63880977+Tabonx@users.noreply.github.com> Co-authored-by: AKolenda <akole779@mtroyal.ca> Co-authored-by: Lev Poznyakov <62802017+levochkaa@users.noreply.github.com> Co-authored-by: Alex <me@pixp.cc> Co-authored-by: maria <maria@kuuro.net> Co-authored-by: يزن حمزه <yznhamzeh@gmail.com> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> Co-authored-by: Vishal <vishalprashantdoshi@gmail.com> Co-authored-by: PR Batch Tester <agent@local.test> Co-authored-by: Vishal Doshi <vdoshi96@users.noreply.github.com> Co-authored-by: Nikita Maximilian Grimm <github@nikitagrimm.de> Co-authored-by: Taylor Dolezal <onlydole@users.noreply.github.com> Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com> Co-authored-by: Caden Elrod <76628548+CadenEl@users.noreply.github.com> Co-authored-by: Alex Southwell <saphid@gmail.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: James Villarrubia <8172873+jamesvillarrubia@users.noreply.github.com> Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: 洁月星 <jieyuexing@outlook.com> Co-authored-by: Nand <nand@rizvanolli.com> Co-authored-by: Jet <jet@extremist.software> Co-authored-by: kiiwee <6160452+kiiwee@users.noreply.github.com> Co-authored-by: Joseph Vidal <135430578+josephv123@users.noreply.github.com> Co-authored-by: Theo Browne <me@theo.li>
## What's Changed * fix(server): avoid full shell read on resume by @Yash-Singh1 in pingdotgg/t3code#23987 * test: delete low-value tests and dead test-only exports by @t3dotgg in pingdotgg/t3code#24058 * test(server): restore DST scheduling tests deleted in the test snap by @t3dotgg in pingdotgg/t3code#23991 * test(web): restore project settings permission tests deleted in the test snap by @t3dotgg in pingdotgg/t3code#24011 * test(mobile): restore clipboard secret-redaction test deleted in the test snap by @t3dotgg in pingdotgg/t3code#23980 * fix(web): Cmd+B toggles the sidebar unless text is selected by @t3dotgg in pingdotgg/t3code#24063 * fix(server): agent-browser and Chrome no longer outlive the agent that started them by @josephv123 in pingdotgg/t3code#21299 * test(client-runtime): restore render scheduler tests deleted in the test snap by @t3dotgg in pingdotgg/t3code#23977 * fix(web): cmd+k search hides subagents and favors recent, whole-word matches by @t3dotgg in pingdotgg/t3code#24032 * test(lint): new polling loops in tests now fail lint by @t3dotgg in pingdotgg/t3code#23983 * ci: unused dependency patches fail in check:changed, not after push by @t3dotgg in pingdotgg/t3code#23988 * fix(desktop): PDFs in the preview can be annotated by @shivamhwp in pingdotgg/t3code#24022 * fix(web): instructed compact runs without a bare compaction first by @juliusmarminge in pingdotgg/t3code#24008 * fix(desktop): reduce app crashes when a preview tab's renderer dies during agent screenshots by @shivamhwp in pingdotgg/t3code#24056 * fix(server): Stop stops a thread's subagents again by @shivamhwp in pingdotgg/t3code#23886 * fix(desktop): a stuck quit no longer leaves the app unkillable by @shivamhwp in pingdotgg/t3code#23873 * fix(web): keep blockquote text readable in every theme by @Yash-Singh1 in pingdotgg/t3code#24036 * fix(bitbucket): stop the startup sweep from flooding Bitbucket with 429s by @shivamhwp in pingdotgg/t3code#23889 * fix(web): screen readers hear when the open thread starts, needs you or finishes by @shivamhwp in pingdotgg/t3code#23752 * perf(web): reduce allocations in streaming timeline scans by @UtkarshUsername in pingdotgg/t3code#23739 * perf(web): reuse a collator when sorting changed-file trees by @UtkarshUsername in pingdotgg/t3code#23776 * perf(scripts): check:changed finishes in about 10 s by @t3dotgg in pingdotgg/t3code#23581 **Full Changelog**: pingdotgg/t3code@v0.1.3-nightly.20261023.3566...v0.1.3-nightly.20261023.3579 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.3-nightly.20261023.3579
…ngdotgg#24008) Co-authored-by: fixfon <12512757+fixfon@users.noreply.github.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> (cherry picked from commit 16aaf5b)
Fixes duplicate compaction when a resumed Claude thread sends
/compactwith instructions while the Compact chip is enabled.Original description by @fixfon
With the Compact chip enabled on a resumed Claude thread, sending
/compactwith instructions queued a bare compaction before the instructed command. This could compact twice and lose the benefit of the supplied instructions.Recognize
/compactfollowed by whitespace as an explicit compaction request, so it bypasses automatic pre-send compaction. Ordinary messages retain their existing behavior.Validation: 138 focused cases passed, including one retained regression case that fails with the original exact-match predicate. Web typecheck and format passed; scoped lint reported existing warnings. Independent Claude Opus and GPT-6.1 reviews approved the source.
Integrated proof used the actual web composer, orchestration, Claude SDK, and an offline stream-json CLI peer. A completed peer turn was created first, then its context usage was aged to enable the Compact chip. Each case started from the same stopped snapshot and the SDK launched with
--resume. The peer reports synthetic compaction: this verifies transport and command sequencing, not real model summarization or authentic Claude transcript restoration. Web was exercised; no native Electron or mobile run is claimed./compact, then/compact keep the auth refactor notes/compact keep the auth refactor notesonly/compact, thenContinue reviewing the auth refactor notes.Baseline precondition: Compact chip enabled with instructed command entered.
Reviewed head: one instructed compact command completed.
Ordinary-message control: automatic compact then queued normal message.
Sanitized command traces: baseline, reviewed head, ordinary-message control. The baseline screenshot shows the pre-send chip precondition; the trace establishes its two-command result.
Original contribution by @fixfon. Maintainer takeover: Claude Opus 5.5 for tests/review, Claude Fable 5.1 for implementation, GPT-6.1 for independent review; Claude Code and Codex harnesses.
Takeover
Retains @fixfon’s commits from #20236. Main moved submission into
planComposerTurn; the same command-boundary guard is ported there. The existing dispatch regression test is expanded, and the single-caller helper is removed.Evidence
Final head f2177590, merged main 4812dcad. Proof incomplete: all24 interaction recordings exist, but six wide settled-image comparisons require correction of an unrelated source-control card difference.
Fixture matrix. A1: instructed compact; C1: ordinary message; C2: bare uppercase; C3: command prefix; C4: Full then Compact; C5: Never then on-return.
4812dca
f217759
|C4-390-light|C4-390-light-before.mp4|C4-390-light-after.mp4|C4-390-light-diff0.png|C4-390-light-diffT.png|Interaction captured; audit below|
|C5-1440-dark|C5-1440-dark-before.mp4|C5-1440-dark-after.mp4|C5-1440-dark-diff0.png|C5-1440-dark-diffT.png|Unverified: unmatched details card|
Environment: T3 browser preview, responsive web, CSS1440×900 or390×900, light/dark, DPR2, default font scaling. Whole-surface wide video2880×1800 and preview still1280×800; narrow780×1800. Same immutable synthetic seed and frozen browser clock. Independent stills≥550ms apart settle exactly. Unmasked diffs highlight threshold0 and max-channel delta>16.
What else changed: A1 removes the bare predecessor and its timeline entry. Wide captures also show source-control card status from temporary baseline file swaps (Commit & push/+0−0 versus Commit/+20−9). That unrelated difference is not accepted as matched comparison proof; closed-card retakes remain incomplete. The continuous videos retain their original pixels and prove interactions with this difference disclosed. Offline peer proves sequencing and resumed transport, not real Claude summarization, restoration, billing, or parser acceptance.
Verification log
Tests45→45 in
apps/web/src/components/ChatView.logic.test.ts; current base regression1 failed/44 passed, final45 passed. Scoped lint, format and web typecheck passed; final CI Build and Typecheck successful. Final tests.Three fresh dual-review rounds returned MERGE/MERGE, no confirmed source defects; final merged-head review. Fixed anchored regex has constant work and no backtracking risk. CI29/29 successful on final f217759; GitCafe reports mergeable/current conflict check, no actionable bot findings.
Final proof audit: INSUFFICIENT; Final independent audit and row verdicts. Independent A1 rebuild sent only the instructed command and reached idle, but its two stills differed by509 pixels and failed temporal settling, so its pixel comparison is unverified. Capture index/bundle: Public artifact index · Reproducible fixture/evidence bundle. Earlier c218a80 SUFFICIENT audit does not certify this final merge head.
Unverified web cells: A1-1440-light, A1-1440-dark, C1-1440-light, C1-1440-dark, C2-1440-light, C5-1440-dark need matched settled-image pairs and regenerated diffs. No Electron/mobile native capture claimed; changed surface is web. Real Claude summaries/restoration and remote/tunnel behavior are outside the sequencing claim.
Models/harnesses: Claude Opus5.5 through Claude Code for tests, implementation, reviewerB; GPT-6.1-sol through Codex for reviewerA, capture and proof audit.
VERDICT: SUFFICIENT. This append supersedes the historical “Proof incomplete”, “INSUFFICIENT”, “Unverified” wide-cell statuses, pending links, rejected old wide diffs and failed independent rebuild above, plus the index’s pending independent-audit status. Historical records remain unchanged; the old mismatched wide diffs remain rejected and are replaced by the matched pairs below.
Independent audit and all row verdicts · Audit manifest · Independent rebuild proof.
Consolidated evidence index: all stills, diffs and recordings · Consolidated matrix · Scripts, fixtures and captures bundle.
6/6 missing wide pairs complete; 6/6 accepted narrow cells and all 24 recordings reused unchanged; all 12 visual cells audited sufficient. L1/S1 retain prior accepted records, without fresh tests or source review. No unverified rows remain within the synthetic responsive-web sequencing scope. The auditor played all 24 recordings completely and checked their narrated steps against sanitized command/resume traces. Historical wide recordings prove sequencing only and retain their disclosed card mismatch; replacement stills establish matched visual parity. C5 stills show Never opt-out; reused recordings show restoration to When you return and the subsequent automatic-predecessor send.
The six new wide pairs run the entire base 4812dca (merge-base of final head) versus the entire exact head f217759. Reused 390px cells and recordings retain the disclosed changed-file baseline substitution method; they are not full-base runtime evidence.
New capture environment: Chromium 148.0.7778.96, Linux x86_64, 1440×900 CSS, DPR2, 2880×1800 PNG, desktop emulation, normal font scaling, en-US/UTC, reduced motion, frozen browser Date 2026-10-23T12:00Z, fonts loaded and network idle, matching scroll/sidebar/details states. All new sides settle exactly; old 390px cells are unchanged. Independent A1 wide-light head frames 1143ms apart have zero temporal differing pixels; rebuild versus delivered has 0 pixels >0, 0 pixels >16, maximum channel 0. No masks or pixel-difference waivers.
A1 removes the duplicate bare command/boundary, moves the instructed row up and changes the minimap only to reflect the shorter timeline. The other four new wide control pairs have zero differing pixels at threshold zero. No unrelated visual differences were found.
Scope: offline synthetic peer proves actual web composer/server/Claude SDK command sequencing and resumed transport. It does not prove actual Claude summarization, transcript restoration, billing, parser internals, native desktop/mobile, remote or tunnel behavior; fixture notices, token counts and responses are synthetic. No new source review or tests are claimed by this evidence update.
Models/harness: GPT-6.1-sol through Codex for capture and independent proof audit.