Skip to content

revert(web): remove the Spaces sidebar grouping and thread tabs - #248

Merged
NoahHendrickson merged 2 commits into
customfrom
t3/remove-spaces-ux
Nov 1, 2026
Merged

NoahHendrickson merged 2 commits into
customfrom
t3/remove-spaces-ux

Conversation

@NoahHendrickson

@NoahHendrickson NoahHendrickson commented Oct 31, 2026 •

Copy link
Copy Markdown
Owner

The Spaces UX from #242 isn't the direction we want, so this takes it off custom. The full feature is parked on the spaces-ux branch (custom tip 3c8d7cec5e) in case we revisit it.

What changed

A clean git revert -m 1 of the #242 merge (06fe8eb4ef). That removes:

  • apps/web/src/custom/spaces/, the /changelog route, the provider marks, and the fork-spaces guard, manifest entry and CSS.
  • The Spaces wiring outside that folder: the fourth grouping radio, the tab row in ChatView, the split-pair tray, and the ?space= filter on Automations.

One piece of #242 is kept: split-pair rows still carry data-fork-project-section, which Group by project needs for its hover reveal and drop edge.

The changes from #243–#247 are untouched. Anyone who had Spaces selected falls back to "No grouping". Spaces' old localStorage keys are left in place and nothing reads them.

Checks

vp run check:changed: format, lint, knip and typecheck pass. The tests pass except the Windows cross-arch case in scripts/build-desktop-artifact.test.ts, which also fails on pristine upstream on Apple Silicon. .fork/lint-owned.mjs reports no blocking warnings.

Reviewed with sol-loop: 2 rounds with gpt-6.1-sol on high. Sol verdict: approved

Built with Claude Opus 5.5 in Claude Code (running in T3 Code).

🤖 Generated with Claude Code

Reverts PR #242 (merge 06fe8eb). The Spaces UX is parked on the
`spaces-ux` branch for a possible revisit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Oct 31, 2026

@NoahHendrickson NoahHendrickson left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Code quality review of f9d4c398277c2363037c2ea6327a7eb4675af9dd: no major structural issues found.

I checked that this is a faithful revert, not just a large deletion:

  • Leaving out index lines and hunk offsets, git diff 3c8d7cec5e f9d4c39827 is exactly the inverse of the #242 merge (06fe8eb4ef → its first parent).
  • git diff 06fe8eb4ef^1 f9d4c39827 matches git diff 06fe8eb4ef 3c8d7cec5e line for line. So the tree is the pre-#242 state plus #243–#247, with no #242 changes left over and nothing from #243–#247 removed.
  • No references remain to custom/spaces, fork-spaces, /changelog, ProviderMarks, or the ?space= filter in apps/web/src, .fork, or docs.
  • useSidebarV2Grouping goes back to the two-boolean model. A device that had Spaces selected had both of those booleans cleared, so it now reads as "none", which is the fallback the description gives. The leftover sidebar-v2-group-by-space:v1 key is never read again, and that's acceptable.

On structure: the PR only deletes code. Sidebar.tsx drops from 5734 to 5465 lines and ChatView.tsx loses the tab-row wiring. The grouping helper goes back to three modes, so the "spaces" branches that #242 spread through the grouping, collapse and header code are gone. Both components are still well past 1k lines, but that was true before this PR and isn't something it adds.

I didn't rerun check:changed in this worktree because dependencies aren't installed. Since the tree is byte-for-byte a state whose parts each passed CI, the checks reported in the PR description are credible.

Reviewed by Claude Opus 5.5 (Claude Code). Comment only, not an approval.

@NoahHendrickson NoahHendrickson left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Code review — f9d4c398277c2363037c2ea6327a7eb4675af9dd

No issues found.

What I checked:

  • Exact revert. git diff 3c8d7cec5e f9d4c39827 matches the inverse of the #242 merge (git diff 06fe8eb4ef 06fe8eb4ef^1) line for line. The only differences are blob indexes and hunk offsets, which moved because #243–#247 edited the same files.
  • Overlap with #243–#247. Four files were touched both by #242 and by later PRs: .fork/customizations.yaml, sidebarV2CardRows.test.ts, ChatView.tsx and theme.custom.css. None of the later edits touch the Spaces hunks, so the revert keeps all of their changes, including the #246 approval wiring in ChatView and the #247 favicon manifest text.
  • No dangling references. Nothing in apps/web/src or .fork/ still mentions custom/spaces, ProviderMarks, SpaceThreadTabs, fork-spaces, keepEmptyGroups, the "spaces" grouping value or changelog, apart from the regenerated routeTree.gen.ts, which no longer has the route.
  • Stored preference fallback. useSidebarV2Grouping now reads only the project and status booleans. A device that had group-by-space:v1 = true resolves to "none", as the description says. The orphaned key is harmless because nothing reads it.

CI was still pending when I reviewed.

🤖 Generated with Claude Code

@NoahHendrickson NoahHendrickson left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Reviewed commit f9d4c398277c2363037c2ea6327a7eb4675af9dd against base 3c8d7cec5e7269e45fba10b4e45ac8672008669f. One regression found in the retained project grouping, detailed inline.

Validation: 91 test files / 679 tests passed (fork guards, project grouping, sidebar animation, Automations search logic, and split/float state). A focused headless Chromium reproduction using the base/head SidebarSplitPairRow components and the existing project-group CSS confirmed the hover and drop-indicator regression. No files changed.

data-fork-row-shape={props.shape}
className={cn("grid grid-cols-2", SIDEBAR_V2_CARD_ALIGNMENT.listGap)}
>
<li className="list-none" data-fork-split-pair="">

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

[P2] Preserve the project-section marker on split-pair rows

data-fork-project-section is also needed by the retained Group by project mode: the hover-reveal and drop-edge selectors in theme.custom.css walk sibling section items. Removing it from this outer <li> breaks that walk, because the marked thread cards are nested inside its <ul>. With a project whose visible cards form a split pair, hovering either card no longer reveals the header actions; during manual project reorder, the “below” indicator appears under the header rather than below the pair (or under an earlier card when one precedes the pair). This reproduces at the reviewed head and works at the supplied base. Keep the projectSection prop/call-site value and outer marker while removing the Spaces-specific shape/tray styling.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Fixed in 57a9192: SidebarSplitPairRow takes the projectSection prop again and the call site passes options.underProjectHeader === true, so the outer <li> gets data-fork-project-section back. The Spaces-only shape prop and the data-fork-row-shape tray hook stay removed.

@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 5.0 KiB 5.0 KiB −6 B (−0.1%) 6.8 KiB ✅
Codex Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Codex Live turn WebSocket wire 1.3 KiB 1.2 KiB −6 B (−0.5%) 2.0 KiB ✅
Codex Live turn WebSocket decoded 21.6 KiB 21.6 KiB 0 B (0.0%) 24.4 KiB ✅
Codex Live turn messages 2 2 0 (0.0%) 8 ✅
Claude Total thread wire 5.0 KiB 5.1 KiB +6 B (+0.1%) 6.8 KiB ✅
Claude Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Claude Live turn WebSocket wire 1.3 KiB 1.3 KiB +6 B (+0.5%) 2.0 KiB ✅
Claude Live turn WebSocket decoded 21.9 KiB 21.9 KiB 0 B (0.0%) 24.4 KiB ✅
Claude Live turn messages 2 2 0 (0.0%) 8 ✅

Baseline: 3c8d7ce · PR result: 57a9192 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

…oject

The revert dropped the project-section marker #242 put on split-pair
rows, which the retained project grouping's hover reveal and drop edge
also rely on. Restore just the marker.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@NoahHendrickson
NoahHendrickson merged commit e272f67 into custom Nov 1, 2026
28 of 29 checks passed
@NoahHendrickson
NoahHendrickson deleted the t3/remove-spaces-ux branch November 1, 2026 02:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 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.

2 participants