Repository navigation
feat(web): boring sidebar hides projects with no active threads - #26387
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
ApprovabilityVerdict: Needs Human Approval Macroscope's review found this PR requires human approval — The unfiltered boring sidebar now hides projects without active threads, restoring their folders when selected in the project filter. A human must confirm this changed default visibility and its effect on discovering projects and starting threads. You can add or adjust custom eligibility rules. Learn more. |
Member
Author
|
Note 🤖 Claude Opus 5.5 responding on behalf of Theo Confirmed. Theo requested this exact visibility change. To find or start a thread in an idle project, pick it in the project filter. Its folder then shows even when empty (see the "Filtered to |
github-actions Bot
added a commit
to Jefferson-Butler1/t3code
that referenced
this pull request
Oct 28, 2026
No patches were dropped. Upstream has no inbox ordering setting, so `inbox-order.patch` is still needed. `explicit-update-feed.patch` applied cleanly and is unchanged. Ported `inbox-order.patch`. The conflicts came from upstream's boring sidebar project folders (pingdotgg#21039, pingdotgg#26387, pingdotgg#26391), linked-environment delegate rows (pingdotgg#26434) and custom snooze presets (pingdotgg#26208): - `apps/web/src/components/Sidebar.tsx`: upstream added `sortActiveBySend` (boring mode sorts folder threads by the user's latest message), `delegatedUnderParent`, and turned off the Working shelf when folders are shown. I kept all of that and threaded `inboxSortOrder` through next to it. The time-ordered inbox branch now calls `sortInboxThreadsByReturn(active, inboxSortOrder, ...)`. Boring mode still sorts by send, as upstream does. - `apps/web/src/components/settings/SettingsPanels.tsx`: upstream added "The boring sidebar in Labs has no Working section." to the Working section description. I kept that sentence and applied the patch's wording change ("return to the inbox" instead of "return to the top of the inbox"). - `apps/web/src/components/settings/settingsSearch.ts`: upstream added a `boring-sidebar` search entry where the patch adds `inbox-order`. Both entries are kept. - `apps/mobile/src/features/threads/threadListV2.ts`: upstream added a `SnoozePresetSetting` import. I kept it and added `InboxSortOrder` to the contracts import. The rest of the patch, including the contract field in `packages/contracts/src/settings.ts`, merged without manual changes. The commit message is unchanged. Checks, run on the fully patched tree: - Typecheck passed for `apps/web`, `apps/desktop`, `apps/mobile` and `packages/contracts`. - `apps/desktop` build passed. - `vp lint apps/web/src/components/ChatView.tsx scripts/build-desktop-artifact.ts` passed. - `vp fmt --check` passed on all 16 files the series changes. - Tests passed: - web: `Sidebar.logic.test.ts`, `Sidebar.drag.test.ts`, `settings/SettingsPanels.logic.test.ts`, `settings/settingsSearch.test.ts` (132 tests) - mobile: `threadListV2.test.ts` (63 tests) - client-runtime: `threadInbox.test.ts` (23 tests) - Not run: `Sidebar.logic.browser.test.tsx` and `Sidebar.pointer.browser.test.tsx`. They need a Playwright browser, and Playwright does not support chromium-headless-shell on this runner (ubuntu26.04-x64). - Replay passed: both patches applied in series order with plain `git am` (no `--3way`) to a fresh checkout of the tag. The resulting tree (12e6a26e31) is identical to the tree that was checked.
aorwall
added a commit
to aorwall/t3code
that referenced
this pull request
Oct 29, 2026
Merges upstream `pingdotgg/t3code` `fe219c4de1` (95 commits, base `49a9e80e0b`) into the fork. Branched from `main`; no open merge PR to stack on. ## Resolution 15 conflicts, each resolved by the verdict `preflight.mjs` printed for it. The full record is in `docs/fork/upstream-merge-log.md` (2026-10-29). The main points: - **`LegacySidebar.tsx` deleted upstream** (pingdotgg#21039). The deletion is taken. Its fork deltas (touch long-press, Add project gate) already live in `Sidebar.tsx` / `SidebarThreadRow.tsx`. The file's paths are removed from three inventory entries, and the helper only it used is dropped from `Sidebar.logic.ts`. - **Composer access mode.** Upstream's simpler composer (pingdotgg#25869) shows the Access control in three places: the Permissions chip, the compact-menu section, and the effort-menu section in `ComposerControlsBar.tsx`. All three are gated on `FEATURES.accessMode`. `ComposerControlsBar.tsx` is added to `chat-composer-gates`. - **Sidebar.** Upstream's boring-sidebar project folders are combined with the fork's browse/closed/subtask filter. Upstream moved the row's meta line into a `metaLine` variable, and the fork's owner name and parent/child task links now live inside it. - **Settings.** The boring-sidebar Labs rows are client settings and are not gated. Simlock hosts join the `serverBehaviorSettings` rows, and the `simlock-hosts` search id is mapped to that flag. The new Fallback model row is hidden together with the default model row (`defaultModelSetting`). - **`AGENTS.md`.** Upstream now has agents check user-visible changes in a real client without asking first. The fork's version says the same, still pointing at the fork's skills. - `agentContextBudget.json` uses upstream's numbers, plus the fork's 108 bytes for `ProjectScript.port`. The value `46015` was measured by running the budget test. - `pnpm-lock.yaml` was re-derived from upstream's copy. **Merge stats:** 595 files landed vs 593 in the upstream range (the gap is explained in the tracker entry). Fork delta: 766 files, unchanged. ## Verification `verify.mjs` was run in full. These checks pass: duplicate-adds, tripwires, resolution-check, unsupported-methods, lockfile, fmt, lint, typecheck, build. In the test step, `web` and `client-runtime` pass. The same failures as the 2026-10-27 and 2026-10-28 merges remain, each confirmed failing alone: - `t3`: `RepositoryIdentityResolver`, `GitVcsDriver`, `CodexChatGptAuth`, `CodexManagedRuntime` (the known `/tmp` sticky-bit gap) - `provider-opencode`: `OpenCodeServerLedger` ## Usable as-is - Boring sidebar project folders, two-line folder rows, and hiding empty projects (pingdotgg#21039, pingdotgg#26387, pingdotgg#26391, pingdotgg#26463) - Simpler composer with grouped controls and effort words (pingdotgg#25869). The access-mode parts stay gated. - Pending approvals on their timeline row (pingdotgg#26255); tool call diffs open in the diff panel (pingdotgg#26304); compaction row timer (3ef1610) - Many web fixes: chat tables, inline code double-click, numbered composer lists, image chips, scroll-to-end, tool groups after a usage-limit pause, long-thread timeline perf (pingdotgg#26727) - New Claude threads default to Opus 5.5 (pingdotgg#26358) - PR files: mark viewed with shift-click, and the diff follows the file tree (pingdotgg#26349, pingdotgg#26730). These are reachable only where the PR surface is (`pullRequestSurface`). ## Unsupported in Moatless / needs implementation - **GitHub sign-in through the T3 Code for GitHub app** (pingdotgg#26245): `sourceControl.signInStart`, `signInWait`, `signInCancel`, `appAccess`. New `UnsupportedMethodError` entries. - **Simlock device pools** (pingdotgg#25259, pingdotgg#26706): `device.simlockIdentity` (new union entry) and the `simlockDeviceHostsEnabled` server setting. Part of the device hub gap. - **Fallback model when the default provider is out of usage** (pingdotgg#26164): the `fallbackModelSelection` server setting cannot be saved, because `server.updateSettings` is refused. The row is hidden. - Managing GitHub maintainer edits (pingdotgg#25588): in the pull-request write family Moatless does not dispatch. - T3 Connect tunnel usage and T3 Chat account push (pingdotgg#26369, pingdotgg#25931): relay/cloud, decided out. - Mobile dynamic workflows in the Agents sheet (pingdotgg#18642) and the mobile app fixes: mobile against Moatless is unverified. ## Backend behavior to consider reproducing in Moatless These are listed under _Runtime fixes upstream made to its own server_ in `docs/fork/gaps.md`: - Falling back to another provider when the default is out of usage (pingdotgg#26164), and refreshing usage when a turn hits its limit (pingdotgg#26234); no replay of stale Codex usage limits (pingdotgg#26331) - Settling a thread at once when its watched PR merges (pingdotgg#26395). Moatless reads no PR for settlement today, so this is a decision rather than a fix. - Loading long thread history in bounded pages (pingdotgg#26240); publishing local git status before the remote lookup (pingdotgg#21046); releasing completed PR sweep data (pingdotgg#25177) - Thread links that outside MCP clients can open (pingdotgg#26642); listing snoozed threads across projects in one MCP call (pingdotgg#26442) - Provider approval and subagent fixes: Claude command approvals (pingdotgg#20145), ACP ID-only approvals (pingdotgg#26647), Cursor subagents (pingdotgg#26592), OpenCode subagent runtime mode (pingdotgg#26302), Codex shadow-home locks (c4606e5); shorter remote reconnect and command delays (pingdotgg#25754) ## After merging - Disable the new upstream workflow: `gh workflow disable mobile-fingerprint-label.yml --repo soaplabs/t3code` 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- Moatless task: https://moatless.soaplabstest.com/tasks/b2df0ac3-40ce-4c78-a67d-b561b3d8772d
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The boring sidebar showed a folder for every project, even projects with no active work. Idle projects cluttered the list.
Now a project gets a folder only when it has active (unsettled) threads. Settle a project's last thread and its folder goes away. Pick a project in the project filter and its folder comes back even when empty, so you can still start a thread there with the pen button or right-click.
Before / after
betagamma's threadProof: unit test in
Sidebar.logic.test.ts,vp run check:changed, and headless screenshots of a dev server with three projects (one empty, one settled after capture).Reviewed with sol-loop: 1 round with GPT-6.1 Sol. Sol verdict: approved
🤖 Generated with Claude Code using Claude Opus 5.5.