Skip to content

feat(web): make the sidebar project filter a searchable combobox - #5931

Merged
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
SunkenInTime:t3code/add-project-search-widget
Aug 28, 2026
Merged

feat(web): make the sidebar project filter a searchable combobox#5931
juliusmarminge merged 9 commits into
pingdotgg:mainfrom
SunkenInTime:t3code/add-project-search-widget

Conversation

@SunkenInTime

@SunkenInTime SunkenInTime commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Note

Supersedes #5925, which was closed while this was reworked after #5923 removed the standalone projects settings page. This is an author-initiated adaptation; the earlier claim that a maintainer suggested this combobox direction was unsupported and has been retracted.

What changed

Replaces the sidebar project-scope Menu with the existing Base UI Combobox composition and adds an in-popup search field.

  • The trigger keeps the same favicon, scope label, chevron, and dimensions.
  • Opening focuses the search field; typing filters project display names with useComboboxFilter().contains.
  • Enter selects the highlighted result, Escape closes the popup, and every close path clears the query.
  • All projects appears only when a project scope is active and the query is empty, so it acts as a reset without outranking a typed project match.
  • No-hit queries render No matching projects.
  • Opening a project-settings route closes the popup and clears its query.
  • The rebase preserves the current sidebar row padding from fix(web): give sidebar project menu rows the same side padding as other menus #7913.

Scope

  • Web: changed and exercised in Chrome.
  • Desktop: changed through the shared apps/web renderer; the packaged Electron shell was not run.
  • Mobile: unchanged. Its React Native and native project filters do not use this component.
  • Server, contracts, providers, and connection modes: unchanged. No request, event, persistence, or remote-transport behavior changed.

Review context

The previous description said this was “the suggested direction” after #5923. There is no maintainer quote or public source supporting that design attribution. The claim was incorrect, so this description now records the feature as the author's follow-up to the removed route.

Before

Project filter dropdown before the searchable combobox

After, light

Searchable project filter in light appearance

After, dark

Searchable project filter in dark appearance

Interaction

Watch open, type, Enter, Escape, and query reset

Verification

  • pnpm exec vp test run apps/web/src/components/Sidebar.logic.test.ts — 114/114 tests passed. Focused cases cover scoped and unscoped reset visibility, hiding the reset while typing, filtering and no-match behavior, close-driven query clearing, and the project-settings close path.
  • pnpm exec vp fmt --check apps/web/src/components/Sidebar.tsx apps/web/src/components/Sidebar.logic.ts apps/web/src/components/Sidebar.logic.test.ts — all three files formatted.
  • pnpm exec vp lint apps/web/src/components/Sidebar.tsx apps/web/src/components/Sidebar.logic.ts apps/web/src/components/Sidebar.logic.test.ts — passed.
  • pnpm --filter @t3tools/web typecheck — passed.
  • git diff --check — passed.
  • Integrated Chrome pass against an isolated T3 home with three safe fixture projects: open/autofocus, filtering, Enter selection, Escape close, and cleared query on reopen all worked.

Risk and untested paths

Risk is limited to the shared web sidebar interaction. The state transitions and filtering seam have focused tests, and the current-head CI suite is green. A packaged Electron build was not launched, and mobile was not exercised because it does not share this UI path.

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 2193c216-0746-4c32-8b9f-97dd9c45a7ba

📥 Commits

Reviewing files that changed from the base of the PR and between f94a0d6 and 84c7347.

📒 Files selected for processing (3)
  • apps/web/src/components/Sidebar.logic.test.ts
  • apps/web/src/components/Sidebar.logic.ts
  • apps/web/src/components/Sidebar.tsx

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


📝 Walkthrough

Walkthrough

The sidebar project-scope selector now uses a searchable Combobox. New filtering helpers and a reducer manage query, open, reset, and project-settings behavior. Tests cover filtering and state transitions.

Changes

Project-scope menu

Layer / File(s) Summary
Scope filtering and menu state
apps/web/src/components/Sidebar.logic.ts
Added project-scope filtering helpers and reducer-based open and query state.
Sidebar Combobox integration
apps/web/src/components/Sidebar.tsx
Replaced the radio-group menu with a searchable Combobox. Project selection, reset behavior, empty results, and project settings use the new state and filtering flow.
Filtering and state validation
apps/web/src/components/Sidebar.logic.test.ts
Added tests for reset-row visibility, case-insensitive matching, empty results, query clearing, and open-state transitions.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to 84c73

The sidebar project picker adds local search while preserving the existing selection and settings flows. No actionable merge-blocking risk remains beyond normal checks and review.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant Sidebar
  participant Combobox
  participant SidebarLogic
  User->>Combobox: Enter project query
  Combobox->>Sidebar: Update query
  Sidebar->>SidebarLogic: reduceSidebarProjectScopeMenuState
  SidebarLogic-->>Sidebar: Return open and query state
  Sidebar->>SidebarLogic: filterSidebarProjectScopeItems
  SidebarLogic-->>Sidebar: Return matching project items
  User->>Combobox: Select project scope
  Combobox->>Sidebar: Set project scope key
Loading

Suggested reviewers: t3dotgg, juliusmarminge, utkarshusername

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 4 functions across 3 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly identifies the main change: converting the sidebar project filter into a searchable combobox.
Description check ✅ Passed The description explains the implementation, motivation, UI behavior, scope, verification, risks, screenshots, and interaction video. It does not use the exact Checklist heading, but it provides the r…
Full details: Description check

Explanation

The description explains the implementation, motivation, UI behavior, scope, verification, risks, screenshots, and interaction video. It does not use the exact Checklist heading, but it provides the required information and is sufficiently complete.

  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 10, 2026
@macroscopeapp

macroscopeapp Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR replaces the existing project-scope menu with a searchable combobox and introduces new stateful filtering behavior on the production sidebar. The implementation is localized and has focused logic tests, but the new user-facing capability changes the default interaction for all users.

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

@SunkenInTime
SunkenInTime force-pushed the t3code/add-project-search-widget branch from 2fbe783 to 8b51663 Compare August 10, 2026 01:45
Comment thread apps/web/src/components/Sidebar.tsx
@SunkenInTime

Copy link
Copy Markdown
Contributor Author

bugbot run

@cursor cursor Bot 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.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 7aa5152. Configure here.

@SunkenInTime

Copy link
Copy Markdown
Contributor Author

Addressed the size regression pointed out on Discord: the combobox trigger was rendering 26px tall vs the old menu trigger's 32px (the height class was landing on the input's wrapper span instead of the native input), which also nudged the popup down, and a stray max-h-72 on the list clipped the popup 8px shorter than the menu. Fixed in 1f5581d — measured DOM geometry now matches the old menu exactly (trigger x8/y96/w203/h32, popup x8/y132/w203/h298, rows h32). Screenshots in the description are regenerated from the fixed build.

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Aug 10, 2026
@macroscopeapp
macroscopeapp Bot dismissed their stale review August 10, 2026 02:43

Dismissing prior approval to re-evaluate 70bc1d9

@SunkenInTime

Copy link
Copy Markdown
Contributor Author

Switched back to the popup-search composition (button trigger, search field at the top of the popup — same as the branch selector's "Search refs..." picker) in 70bc1d9, keeping the fixes from the earlier iterations: the "All projects" reset row still hides while filtering, and the trigger keeps exact size parity with the old menu. Screenshots in the description are regenerated.

Comment thread apps/web/src/components/Sidebar.tsx Outdated
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Aug 10, 2026
@SunkenInTime

Copy link
Copy Markdown
Contributor Author

bugbot run

@macroscopeapp
macroscopeapp Bot dismissed their stale review August 10, 2026 02:56

Dismissing prior approval to re-evaluate 13de94d

@cursor cursor Bot 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.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 13de94d. Configure here.

@SunkenInTime

Copy link
Copy Markdown
Contributor Author

Follow-up per feedback: the "All projects" row no longer shows when you're already unscoped — it only appears (at the top, query empty) while a project scope is active, since that's the only time there's anything to reset. Verified all transitions live: unscoped list has no reset row, scoping via search+Enter brings it back on the next open, typing hides it, and selecting it resets scope and removes itself again. Screenshots updated (546664b).

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Aug 10, 2026
@macroscopeapp
macroscopeapp Bot dismissed their stale review August 10, 2026 05:24

Dismissing prior approval to re-evaluate df0534a

@SunkenInTime

Copy link
Copy Markdown
Contributor Author

Styling follow-up (df0534a): the popup search field is now a filled rounded box using the bg-secondary token instead of the underline treatment. Checked in both light and dark themes, and re-verified the behavior suite (filtering, conditional "All projects" reset row, Enter/Escape, empty state). Screenshots updated.

@SunkenInTime

Copy link
Copy Markdown
Contributor Author

Reverted the filled-background experiment (f564fdb) — back to the underline search treatment that matches the branch selector and font picker. Behavior re-verified; screenshots updated.

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Aug 10, 2026

@t3-code t3-code Bot 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.

reviewed the current head and merge result against main. no blocking code issues found. the searchable combobox follows the existing controlled-query pattern, handles the reset row and stale query paths, and merges cleanly. verified web typecheck, lint, format, and all 2,200 web unit tests pass.

@saphid

saphid commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Thanks for the careful iteration here. I reviewed head cee150802cd against current main at 4c51b4c9b6a and the vouched-contribution handoff standard.

The core implementation looks sound. It reuses the existing combobox primitives, the body explains the state transitions, maintainer edits are enabled, all four image URLs resolve at full size, and the current code checks are green. I do not think it is ready for a human maintainer pass yet, for four concrete reasons:

  1. Rebase onto current main. GitHub reports the branch as conflicting, and git merge-tree confirms a content conflict in apps/web/src/components/Sidebar.tsx. The project-scope block has changed since the last push. Preserve current behavior when resolving it, including the row-padding change from fix(web): give sidebar project menu rows the same side padding as other menus #7913, then rerun the affected checks and bot review on the new head. The existing t3-code approval says this head merges cleanly, so that approval is now stale.

  2. Add focused behavior tests. The new filtering and reset-row rules live inline and have no focused coverage. Sidebar.logic.ts and Sidebar.logic.test.ts are the existing seam for this kind of pure sidebar behavior. Please cover the scoped and unscoped reset row, hiding the reset while typing, filtering and no-match behavior, and the close paths that clear the query, including the project-settings path.

  3. Complete the UI evidence. The current body puts before and after in a side-by-side table and shows one appearance. Please give before and after separate full-size headings, add both light and dark captures, and include a short video showing open, type, Enter, and Escape. This is an interaction change, so the repository template asks for video.

  4. Make the handoff self-contained. Name the affected clients and exclusions. This appears to be web and desktop only, with the React Native and SwiftUI project filters intentionally unchanged. Add exact test commands and results, known risks or untested paths, and a public record of the maintainer direction behind “per the suggestion there.” I could not find that direction in the public comments, reviews, or inline threads on Move project settings to contextual project routes #5923. If it came from Discord, quoting the relevant direction in the PR body is enough.

The current approvals are from automation, not a human maintainer. Once the rebased head has the tests and evidence above, please request a fresh human review.

@SunkenInTime
SunkenInTime force-pushed the t3code/add-project-search-widget branch from cee1508 to 84c7347 Compare August 28, 2026 19:30
@macroscopeapp
macroscopeapp Bot dismissed their stale review August 28, 2026 19:30

Dismissing prior approval to re-evaluate 84c7347

@SunkenInTime

Copy link
Copy Markdown
Contributor Author

Rebased onto current main and added focused project-scope behavior coverage in 84c734762.

bugbot run

@coderabbitai review

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. and removed vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 28, 2026
@coderabbitai

coderabbitai Bot commented Aug 28, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '=== PR metadata ==='
gh pr view 5931 --repo pingdotgg/t3code --json baseRefName,headRefName,mergeStateStatus,commits,files \
  --jq '{baseRefName,headRefName,mergeStateStatus, commits: [.commits[].oid], files: [.files[].path]}'

echo '=== Changed-file summary ==='
git diff --stat HEAD^..HEAD
git diff --name-status HEAD^..HEAD

echo '=== Changed implementation and tests ==='
fd -a '^Sidebar(\.logic(\.test)?|)\.tsx?$' apps/web 2>/dev/null || true
git diff --find-renames --find-copies HEAD^..HEAD -- apps/web/src/components/Sidebar.tsx apps/web/src/components/Sidebar.logic.ts apps/web/src/components/Sidebar.logic.test.ts

echo '=== File outlines ==='
for f in apps/web/src/components/Sidebar.tsx apps/web/src/components/Sidebar.logic.ts apps/web/src/components/Sidebar.logic.test.ts; do
  if [ -f "$f" ]; then
    echo "--- $f ---"
    ast-grep outline "$f" --items all || true
  fi
done

Length of output: 23347


🏁 Script executed:

#!/bin/bash
set -euo pipefail

base="$(git merge-base HEAD origin/main 2>/dev/null || git merge-base HEAD main)"
echo "=== Merge base ==="
git rev-parse "$base"
echo "=== Full PR changed files ==="
git diff --name-status "$base"...HEAD
echo "=== Full PR diff ==="
git diff --find-renames --find-copies "$base"...HEAD -- \
  apps/web/src/components/Sidebar.tsx \
  apps/web/src/components/Sidebar.logic.ts \
  apps/web/src/components/Sidebar.logic.test.ts

echo "=== Current project-scope state and UI ==="
sed -n '1925,2085p' apps/web/src/components/Sidebar.tsx
sed -n '3500,3650p' apps/web/src/components/Sidebar.tsx

echo "=== Combobox imports and comparable popup-search compositions ==="
sed -n '35,85p' apps/web/src/components/Sidebar.tsx
rg -n -C 4 'showTrigger=\{false\}|useComboboxFilter\(\)|autoHighlight' apps/web/src -g '*.tsx' \
  -g '!apps/web/src/components/Sidebar.tsx' | head -350

echo "=== Merge-tree conflict check ==="
git merge-tree "$(git rev-parse origin/main)" HEAD | sed -n '1,220p'

Length of output: 45458


🏁 Script executed:

#!/bin/bash
set -euo pipefail

combobox_file="$(fd -a '^combobox\.tsx$' apps/web/src/components/ui | head -1)"
echo "=== Combobox file ==="
printf '%s\n' "$combobox_file"
ast-grep outline "$combobox_file" --items all
sed -n '1,360p' "$combobox_file"

echo "=== Branch selector controlled-state and popup composition ==="
sed -n '670,835p' apps/web/src/components/BranchToolbarBranchSelector.tsx

echo "=== Font picker controlled-state and popup composition ==="
sed -n '150,275p' apps/web/src/components/settings/FontFamilyPicker.tsx

echo "=== Current mergeability detail ==="
gh pr view 5931 --repo pingdotgg/t3code --json mergeable,mergeStateStatus,isDraft,statusCheckRollup \
  --jq '{mergeable, mergeStateStatus, isDraft, checks: [.statusCheckRollup[] | {name, status, conclusion}]}'

Length of output: 30038


@SunkenInTime Reviewed 84c734762.

I found no blocking issue in the sidebar project-scope Combobox change.

The focused tests cover the reset-row rules, filtering, no-match results, and query clearing on both close paths. The Combobox wiring follows the existing popup-search pattern. The local merge simulation against current origin/main is clean.

GitHub reports the branch as mergeable. Some checks are still in progress or queued.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@SunkenInTime

Copy link
Copy Markdown
Contributor Author

@saphid The four requested handoff items are complete on 84c734762: rebased onto current main with #7913 padding preserved, focused reducer/filter coverage added, separate full-size before/light/dark evidence plus an interaction clip published, and the description now records exact client scope, commands/results, risks, untested paths, and retracts the unsupported maintainer-attribution claim. Current-head CI is green; CodeRabbit and Cursor Bugbot found no issues; Macroscope correctness and UI consistency are clear. Ready for a fresh human review.

@juliusmarminge
juliusmarminge merged commit 48c176b into pingdotgg:main Aug 28, 2026
27 checks passed
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 29, 2026
## What's Changed
* fix(grok): improve skills, plans, usage, and turn reliability by @t3dotgg in pingdotgg/t3code#8358
* fix(server): recover stale Codex approval callbacks by @luckyPipewrench in pingdotgg/t3code#5195
* test(server): remove duplicate missing worktree test by @t3-code[bot] in pingdotgg/t3code#8252
* fix(server): replay all un-applied events during projection bootstrap by @krutftw in pingdotgg/t3code#7538
* test: remove low-signal test files by @t3-code[bot] in pingdotgg/t3code#8397
* test: prune trivial error and layout tests by @t3-code[bot] in pingdotgg/t3code#8400
* Fix Android adaptive launcher icon by @colonelpanic8 in pingdotgg/t3code#4332
* feat(web): split provider settings into list and editor by @t3dotgg in pingdotgg/t3code#8380
* fix(codex): accept Codex 0.150 account plans by @gsimone in pingdotgg/t3code#8447
* fix(tooling): allow ignored-only staged changes by @juliusmarminge in pingdotgg/t3code#8468
* fix(mobile): keep iOS home header stable by @juliusmarminge in pingdotgg/t3code#8467
* fix(web): stop showing red x summaries for ordinary tool failures by @t3dotgg in pingdotgg/t3code#8395
* fix(mobile): refine Git action toast glass styling by @juliusmarminge in pingdotgg/t3code#8399
* fix(desktop): allow preview automation in agent-created threads by @t3dotgg in pingdotgg/t3code#8483
* test(web): remove redundant cache key test by @t3-code[bot] in pingdotgg/t3code#8484
* fix(release): move nightly schedule to minute 38 by @t3dotgg in pingdotgg/t3code#8509
* fix(web): stabilize the provider settings editor by @t3dotgg in pingdotgg/t3code#8472
* fix(web): open GitHub pull requests in browser when loading fails by @t3dotgg in pingdotgg/t3code#8507
* fix(codex): show sub-agent models by @t3dotgg in pingdotgg/t3code#8502
* feat(analytics): report connected client platforms by @t3dotgg in pingdotgg/t3code#8481
* feat(server): accept PDF, ZIP, and other file uploads up to 50MB by @t3dotgg in pingdotgg/t3code#8235
* feat(web): toggle a thread's pin from the keyboard by @ipanasenko in pingdotgg/t3code#8440
* fix(web): add back button to project settings by @StiensWout in pingdotgg/t3code#8168
* refactor(mobile): compile semantic themes for Uniwind by @juliusmarminge in pingdotgg/t3code#7327
* fix(desktop): Cache Runtime locally on WSL Filesystem, dramatically improving launch times  by @ikifar2012 in pingdotgg/t3code#5769
* fix(mobile): show OpenCode model sources in picker by @juliusmarminge in pingdotgg/t3code#8573
* fix(clients): honor project default models in new threads by @anirudhsama in pingdotgg/t3code#6011
* fix(mobile): show file actions on Android by @none23 in pingdotgg/t3code#8215
* fix(connect): explain DPoP connection failures by @extoci in pingdotgg/t3code#8351
* feat(web): make the sidebar project filter a searchable combobox by @SunkenInTime in pingdotgg/t3code#5931
* fix(server): a draft can retry its first send after a failed bootstrap by @shivamhwp in pingdotgg/t3code#8226
* fix(desktop): stop hidden previews draining battery by @Bil0000 in pingdotgg/t3code#8567
* fix(desktop): oauth popups open from the browser preview by @walid-baharwal in pingdotgg/t3code#8435
* fix(web): keep long task drawers usable on small screens by @shivamhwp in pingdotgg/t3code#8313
* fix(opencode): handle child approvals, stops, and model catalogs by @t3dotgg in pingdotgg/t3code#8480
* fix: make thread auto-settling opt-in by @shivamhwp in pingdotgg/t3code#8321
* fix(web): stop session activity timing test from blocking releases by @t3dotgg in pingdotgg/t3code#8585
* fix(mobile): show composer menus when starting a task by @juliusmarminge in pingdotgg/t3code#8587
* fix(web): show the configured stash shortcut by @UtkarshUsername in pingdotgg/t3code#8437
* feat(web): add toggleable confirmation before unpinning a thread by @UtkarshUsername in pingdotgg/t3code#7313
* fix: restore automatic thread settling defaults by @t3dotgg in pingdotgg/t3code#8596
* fix(mobile): restore composer glass and rounded shadows by @juliusmarminge in pingdotgg/t3code#8597

## New Contributors
* @luckyPipewrench made their first contribution in pingdotgg/t3code#5195
* @krutftw made their first contribution in pingdotgg/t3code#7538
* @colonelpanic8 made their first contribution in pingdotgg/t3code#4332
* @ikifar2012 made their first contribution in pingdotgg/t3code#5769
* @walid-baharwal made their first contribution in pingdotgg/t3code#8435

**Full Changelog**: pingdotgg/t3code@v0.0.35...v0.0.36

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.36
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
aorwall added a commit to aorwall/t3code that referenced this pull request Aug 29, 2026
Merges 58 upstream commits (`badae6a5c` → `6a9d9f988`, upstream v0.0.34
→ v0.0.36) through the `fork-upstream-merge` skill.

`merge-stats.mjs` reconciles exactly: **431 files landed** against **431
in the upstream range**, no gap to explain. Fork delta is 611 files.

## Conflicts

Three, plus one git resolved silently and wrongly.

- **`Sidebar.tsx`** — upstream replaced the project picker's
`Menu`/`MenuRadioGroup` with a searchable `Combobox` (pingdotgg#5931). Took
upstream's structure and re-applied only the
`FEATURES.projectManagement` gate on "New project", now carrying the `//
Fork:` marker it had been missing. Upstream has since grown the mobile
touch-target span itself, so the Mobile Touch Delta has nothing left to
re-apply here — one convergence, unprompted.
- **`ProviderSettingsPanel.tsx`** — upstream split provider settings
into list and editor (pingdotgg#8380, pingdotgg#8472), moving `ProviderLastChecked` and
the refresh button out of `headerAction` into the list footer. Took
upstream's and re-applied the gate as `!readOnly &&
FEATURES.serverAdministration`.
- **`pnpm-lock.yaml`** — took upstream's and re-ran `vp i`, which
restored the fork's `@t3tools/moatless-api` workspace edge.
- **`packages/contracts/src/orchestration.test.ts`** — auto-merged, no
marker, broken. Both sides appended `OrchestrationMessage` to the same
import list and the same `decodeOrchestrationMessage` const at different
offsets, so git took both. Surfaced as a parse error in lint, typecheck
and test at once. This is the case `merge-stats.mjs`'s
conflict-candidate list exists to catch.

`HostedBrowserFrame.tsx` (fork-only) also needed the `renderingActive`
prop pingdotgg#8567 made required. Upstream suspends a parked webview unless
background audio, PiP or a recording still needs it painted; a frame has
none of those to read and is the app's only copy of the preview page, so
it passes `true` and keeps today's behavior.

## Sweep

Five keyword hits, all false positives:

- `apps/web/src/connection/clientMetadata.ts` + test — reports the
client's OS/browser/device on connect (pingdotgg#8481). Auth-adjacent, but it
rides `ClientPresentation` on the relay and remote-bearer bootstraps;
the fork's primary environment sends none of it.
- `packages/client-runtime/src/relay/errorPresentation.ts` + test,
`connection/errors.test.ts` — explain DPoP failures (pingdotgg#8351). Relay only,
and T3 Connect is decided out.

## Feature classification

**Usable as-is**

- Searchable project-filter combobox in the sidebar (pingdotgg#5931).
- Long task drawers stay usable on small screens (pingdotgg#8313) — directly
relevant, the fork's phone story is `apps/web` in mobile Safari/Chrome.
- Toggleable confirmation before unpinning a thread (pingdotgg#7313); toggle
thread pin from the keyboard.
- Back button in project settings (pingdotgg#8168); the configured stash shortcut
is shown (pingdotgg#8437).
- No more red-x summaries for ordinary tool failures (pingdotgg#8395); PRs open
in the browser when loading fails (pingdotgg#8507).
- Project default models are honored in new threads (pingdotgg#6011).
- Provider settings split into list and editor (pingdotgg#8380, pingdotgg#8472) — landed,
though `/settings/providers` is itself gated behind
`serverAdministration`.

**Unsupported in Moatless / needs implementation**

- **Non-image file attachments** (pingdotgg#8235) — a turn may now carry any file
up to 50MB, advertised as `capabilities.fileAttachments.maxUploadBytes`
and sized by `PROVIDER_SEND_TURN_MAX_FILE_BYTES`. Moatless advertises
neither this nor `attachmentUploads`, so the composer's attach
affordance stays off. Costs nothing today (upstream's own web composer
offers images only; `ChatAttachment` widened just far enough to
typecheck), but it is the second capability key to report when uploads
land. Extends the existing **Attachment uploads** entry in
`docs/fork/gaps.md`.
- **Connected-client platform analytics** (pingdotgg#8481) and **DPoP failure
explanations** (pingdotgg#8351) — relay and T3 Connect surfaces, already decided
out of the fork.

No new WS methods entered the contract in this range, so no new
`UnsupportedMethodError` union entries. `unsupported-methods.mjs`
reports `ADD 0`, `DROP 1` (`scripts.run`), `KEEP 2`. The `scripts.run`
DROP is **not** actioned — it is the documented exception in the gaps
register: that union entry answers for `apps/server`, which still stubs
the method (verified surviving in `ws.ts`), not for Moatless.

**Backend behavior to consider reproducing in Moatless**

- **Replay all un-applied events during projection bootstrap** (pingdotgg#7538) —
a one-line pipeline fix upstream; Moatless runs its own projection and
the same class of bug applies.
- **A draft can retry its first send after a failed bootstrap** (pingdotgg#8226)
— Moatless owns turn start, and a draft wedged by a failed bootstrap is
the same dead end here.
- **Recover stale Codex approval callbacks** (pingdotgg#5195) — Moatless owns the
agent runtime in the sandbox.
- **Stop querying Claude context usage after turns** (pingdotgg#8610) — a cheap
correctness/cost fix in the same place Moatless polls.
- **Server-side accept and size-limit non-image uploads** (pingdotgg#8235), the
other half of the gap above.
- Auto-settling churn (pingdotgg#8321 made it opt-in, pingdotgg#8596 reverted) nets to no
change — noted so the next merge does not re-derive it.

## Verification

`verify.mjs`: `tripwires`, `fmt:check`, `lint`, `typecheck` pass. `test`
reports `@t3tools/web` **flaky, passed alone** — in the full run
`MessagesTimeline.test.tsx` skipped all 34 tests on a 30s module-import
timeout under `ChatMarkdown.tsx`; alone the package is 297 files / 3117
tests green. Load, not the merge. `inventory-check.mjs` clean.

Model: Claude Opus 5, via Claude Code in a Moatless sandbox.

---
Moatless task:
https://moatless.soaplabstest.com/tasks/a0c041bb-1426-4591-9296-6a4b0cfa2eff
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
aaditagrawal added a commit to aaditagrawal/t3code that referenced this pull request Aug 29, 2026
* fix(grok): improve skills, plans, usage, and turn reliability (pingdotgg#8358)

Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>

* fix(server): recover stale Codex approval callbacks (pingdotgg#5195)

* test(server): remove duplicate missing worktree test (pingdotgg#8252)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(server): replay all un-applied events during projection bootstrap (pingdotgg#7538)

Co-authored-by: Theo Browne <me@t3.gg>

* test: remove low-signal test files (pingdotgg#8397)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* test: prune trivial error and layout tests (pingdotgg#8400)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* Fix Android adaptive launcher icon (pingdotgg#4332)

Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* feat(web): split provider settings into list and editor (pingdotgg#8380)

* fix(codex): accept Codex 0.150 account plans (pingdotgg#8447)

* fix(tooling): allow ignored-only staged changes (pingdotgg#8468)

* fix(mobile): keep iOS home header stable (pingdotgg#8467)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): stop showing red x summaries for ordinary tool failures (pingdotgg#8395)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): refine Git action toast glass styling (pingdotgg#8399)

* fix(desktop): allow preview automation in agent-created threads (pingdotgg#8483)

* test(web): remove redundant cache key test (pingdotgg#8484)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(release): move nightly schedule to minute 38

Recent scheduled nightlies have been delayed or skipped.

Move the nightly cron from minute 7 to minute 38. Keep the existing three-hour interval. This tests a different point in each three-hour window without claiming it will fix GitHub schedule delivery.

Authored by GPT-5.6 Sol with the Codex harness.

* fix(web): stabilize the provider settings editor (pingdotgg#8472)

* fix(web): open GitHub pull requests in browser when loading fails (pingdotgg#8507)

* fix(codex): show sub-agent models (pingdotgg#8502)

* feat(analytics): report connected client platforms (pingdotgg#8481)

* feat(server): accept PDF, ZIP, and other file uploads up to 50MB (pingdotgg#8235)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): toggle thread pin from the keyboard

Add a mod+shift+p shortcut that pins or unpins the active thread. Ignore the shortcut during terminal focus and when the server does not support thread pinning.

* fix(web): add back button to project settings (pingdotgg#8168)

* refactor(mobile): compile semantic themes for Uniwind (pingdotgg#7327)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(desktop): Cache Runtime locally on WSL Filesystem, dramatically improving launch times  (pingdotgg#5769)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>

* fix(mobile): show OpenCode model sources in picker (pingdotgg#8573)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(clients): honor project default models in new threads (pingdotgg#6011)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix(mobile): show file actions on Android (pingdotgg#8215)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix(connect): explain DPoP connection failures (pingdotgg#8351)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* feat(web): make the sidebar project filter a searchable combobox (pingdotgg#5931)

* fix(server): a draft can retry its first send after a failed bootstrap (pingdotgg#8226)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(desktop): stop hidden previews draining battery (pingdotgg#8567)

* fix(desktop): oauth popups open from the browser preview (pingdotgg#8435)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): keep long task drawers usable on small screens (pingdotgg#8313)

* fix(opencode): handle child approvals, stops, and model catalogs (pingdotgg#8480)

* fix: make thread auto-settling opt-in (pingdotgg#8321)

* fix(web): stop session activity timing test from blocking releases (pingdotgg#8585)

* fix(mobile): show composer menus when starting a task (pingdotgg#8587)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): show the configured stash shortcut (pingdotgg#8437)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* feat(web): add toggleable confirmation before unpinning a thread (pingdotgg#7313)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix: restore automatic thread settling defaults (pingdotgg#8596)

* fix(mobile): restore composer glass and rounded shadows (pingdotgg#8597)

Co-authored-by: Julius Marminge <julius@mac.lan>

* Remove Messages Glass Lab experiment (pingdotgg#8599)

* chore(release): prepare v0.0.36

---------

Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>
Co-authored-by: Josh <gitlucky@pipelab.org>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Tradi3 <56069280+krutftw@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Ivan Malison <IvanMalison@gmail.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Gianmarco <gianmarcosimone89@gmail.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Julius Marminge <julius@mac.lan>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Illia Panasenko <hello@ipanasenko.me>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Matheson Steplock <ikifar2012@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: Anirudh Coontoor <anirudh@gosupernova.live>
Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Nick Anisimov <n.anisimov.23@gmail.com>
Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>
Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com>
Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com>
Co-authored-by: Muhammad Waleed <114993336+walid-baharwal@users.noreply.github.com>
longtngo added a commit to longtngo/t3code that referenced this pull request Aug 29, 2026
Range f6f2be3..053affb, v0.0.36. 411 upstream files, 632 fork files,
81 touched by both, 19 conflicted.

Competing implementations resolved toward the fork's superset:

- Claude context usage (pingdotgg#8610). Upstream deleted `queryCurrentContextUsage` and
  `normalizeClaudeContextUsageApiSnapshot` outright. `getContextUsage` is the ONLY
  source of the compaction facts (`autocompactSource`, `autoCompactThreshold`,
  `isAutoCompactEnabled`) the Vitals gauge's compaction note and marker render from,
  and they travel on the wire contract, so the call is kept. Upstream's
  `latestAssistantUsage` tracking and its post-compaction guard are adopted BELOW it
  as the next-best fallback: `contextUsageSnapshot ?? latestAssistantSnapshot ?? ...`.
  Upstream removed `getContextUsage` from `ClaudeQueryRuntime`, the
  `SDKControlGetContextUsageResponse` import and the `Option` import outside every
  conflict marker; all three restored.
- Provider settings editor (pingdotgg#8472). Upstream's `useEffect` + `lastPublishedEnvironmentRef`
  re-seed is the superset of the fork's render-phase `seededRef` (8fe3190, one of four
  silent-data-loss fixes). The merge had kept BOTH mechanisms; collapsed to upstream's,
  with the fork's half-typed-row null guard on the publish path. `environmentKey` deleted
  with the code it served.
- Sidebar project combobox (pingdotgg#5931). Upstream replaced the menu-based project filter,
  whose `MenuRadioItem` carried the fork's project-actions button. Rebuilt on upstream's
  `ComboboxItem` with the ellipsis button grafted back (invariant 6). The dead `Menu*`
  import is gone.
- Composer attachments (pingdotgg#8236). Upstream's `addComposerAttachments` pipeline adopted; the
  fork's drop split (image -> attach, other -> absolute path with upload fallback) kept
  and repointed at the new handler.
- Mid-turn steer. Upstream's `steeringTurnState` branch rejected again (invariant 5); its
  side of that hunk also opened an `if` whose brace lives below the hunk.
- Thread deletion drain (pingdotgg#8226). Upstream replaced `drain` with `drainThrough(sequence)`;
  the fork's test retargeted. Its new drain test observed `ProviderService.stopSession`,
  which this reactor never calls (it dispatches `thread.session.stop`), so it now counts
  engine dispatches and provides the two services the fork's reactor needs.

Three defects the resolutions introduced, each caught by a check that is not the suite:

- `shouldShowBranchMismatchBanner` was resurrected into two import lists by resolving
  them toward upstream. Fork commit cfdf255 replaced that function; the import had no
  definition. Found by the RESURRECTED sweep.
- `scriptPath` ended up declared twice in CodexCollabRuntime.integration.test.ts: `both`
  reintroduced upstream's fixture-dir copy that the fork deliberately moved to a temp dir.
  Found by the RESURRECTED sweep.
- `setProjectScopeMenuOpen` survived in the fork's `handleProjectActions` after upstream
  replaced that state with a reducer, outside every marker. Found by typecheck.

Upstream regressions of fork fixes, kept fixed:

- Raw NUL bytes returned to ChatComposer.tsx. A raw NUL renders as nothing in grep and
  aborts BSD sed mid-file; the fork had converted all six to `\0` escapes and carries a
  guard test for it. The guard failed, and the offending line reads as space-separated in
  any normal diff. Converted back to escapes.
- `defaultTheme` / `defaultThemeSetAt` (pingdotgg#8569) are absent from `ServerSettingsPatch`; the
  fork's patch-parity guard caught it. They are owned by `t3 theme set`, which rewrites
  settings.json directly and which clients only read, so they are recorded as deliberately
  unpatchable rather than mirrored.
- The fork's mobile held-messages strip used `dark:` variants that upstream's new Uniwind
  theme rule (pingdotgg#7327) forbids; moved to the `text-foreground-muted` semantic token rather
  than added to the rule's allowlist.

Invariants: all re-probed against the merged tree. 1 (49 migrations, ids unique and
monotonic, max 50, 34 burned), 2 (the fork-only @effect/platform-node patch survived the
Expo 57 rewrite of patchedDependencies, is pinned, resolved and applied on disk; effect
stays at beta.103 so no re-pin), 3, 4, 4b (4 `isSendBlocked=`), 5, 5b, 5c, 6, 7, 8, 9, 10,
11 all hold.

Sweeps: resurrected 3, dropped 21, fork-loss 45, both-kept 0. Every entry named: the 3
resurrected and the fork-loss in ProviderInstanceCard / ChatComposer / Sidebar are the
decisions above; the OpenCode fork-loss is 11 comment lines whose guard upstream extracted
into `deleteContextIfCurrent` (the rationale is restored on the helper); pnpm-lock churn is
the install. Test declarations 18,691 -> 19,081; one file lost one, upstream's own pingdotgg#8484.

Gate: pnpm run verify green, exit 0 read from the captured log line. 14 blocks,
10,744 passed, 20 skipped, 0 failures.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
bcotrim pushed a commit to bcotrim/mognet that referenced this pull request Aug 30, 2026
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
Round-11 rebase onto main (25 commits). Reverse-merged main's new work
into the v2 cutover files: #8395 muted ordinary-tool-failure treatment
(v2-adapted workEntrySignalsSevereFailure keyed on error items), #5931
sidebar project-filter combobox + #4c51 keyboard pin/settle with their
ChatView support graph, the auto-settle-mode migration through
threadSettled/threadListV2, #8235 file/unknown attachment schemas moved
into chatAttachment.ts with nullable attachment paths, #8481 client
analytics through the v2 ws layer, #8480 OpenCode server owner wired
into the driver beside the v2 orchestration adapter, and the mobile
semantic-theme migration applied to branch-only components.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants