Skip to content

feat(web): overhaul project settings into a real settings page - #5768

Merged
t3dotgg merged 4 commits into
mainfrom
t3code/overhaul-project-settings
Aug 9, 2026
Merged

feat(web): overhaul project settings into a real settings page#5768
t3dotgg merged 4 commits into
mainfrom
t3code/overhaul-project-settings

Conversation

@t3dotgg

@t3dotgg t3dotgg commented Aug 9, 2026

Copy link
Copy Markdown
Member

Project settings was a modal hidden behind one ellipsis inside the sidebar filter menu, and it only exposed rename and a grouping select. Meanwhile the server already accepted a default model, scripts, and a workspace root over project.meta.update. Config you could not reach without the API.

image

Now there is a real page: Settings → Projects (/settings/projects, deep-linkable per project).

  • Default model per project is editable for the first time (picker + traits, reset to global default)
  • Scripts editor lives in settings too, sharing one dialog component with the chat header menu
  • t3.json state is surfaced: import buttons for unimported scripts, and a visible warning when the file exists but fails to parse (previously the whole file was dropped silently)
  • Checkouts matrix: every physical checkout in a grouped project with machine, path, thread count, per-checkout rename, grouping rule, and removal
  • Sidebar ellipsis and a new command palette entry navigate here; the old modal is deleted

Group-shared fields (model, scripts) fan out to every member of the logical group, since they live on each physical project record.

Screenshot incoming in a follow-up edit.


Built by Claude Fable 5 running in Claude Code.

🤖 Generated with Claude Code


Note

Medium Risk
Project removal and forced thread deletion moved to a new page with multi-environment fan-out for model/scripts; partial update failures on grouped projects are possible but surfaced via toasts.

Overview
Replaces the sidebar Project settings modal with Settings → Projects (/settings/projects and /settings/projects/$projectKey), reachable from the sidebar project menu and a new command palette action.

The new ProjectSettingsPanel exposes per–logical-group configuration that was previously hard to reach: default model (picker + traits, reset to global), scripts (list, add/edit/delete, t3.json import, invalid-file warning), and a checkouts section (rename, grouping overrides, path copy, per-checkout or whole-group removal with thread cleanup). Model and script edits fan out to every member of a grouped project; script saves serialize updates and sync keybindings on Electron.

Script add/edit UI is extracted into ProjectScriptEditorDialog and reused from the chat header ProjectScriptsControl, which drops its inline dialog. Settings nav, search, and route tree gain a Projects section with prefix-based active state for nested routes. useT3ProjectFileState adds explicit loading/missing/invalid/valid status for t3.json.

Reviewed by Cursor Bugbot for commit 6941097. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add a dedicated Projects settings page with script and checkout management

  • Adds /settings/projects and /settings/projects/$projectKey routes rendered by a new ProjectSettingsPanel component with a left-hand project list and a detail panel.
  • The detail panel supports editing the default model, managing project scripts (including icons, keybindings, preview URLs), renaming checkouts, setting per-checkout grouping overrides, and removing projects or entire groups.
  • Replaces the inline project settings dialog in Sidebar.tsx with navigation to the new settings route.
  • Extracts script add/edit/delete UI into a standalone ProjectScriptEditorDialog, shared by both the sidebar and the new settings panel.
  • Adds a "Project settings" action to the command palette and registers the new routes in the router and settings search index.
  • Behavioral Change: the project actions button in the sidebar no longer opens an inline dialog — it navigates to /settings/projects/$projectKey instead.

Macroscope summarized 6941097.

Project settings was a modal buried behind one ellipsis in the sidebar
filter menu, exposing only rename and a grouping select. The server
already accepted default model, scripts, and more.

New /settings/projects section: master-detail page with per-project
deep links. Adds first-ever UI for the project default model, moves the
scripts editor into settings (shared dialog with the chat header),
surfaces invalid t3.json files, and shows a per-checkout matrix with
rename, grouping, thread counts, and removal. Sidebar ellipsis and a
new command palette entry navigate here; the old modal is deleted.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 386fb538-f6a2-4e80-8854-25e48ee08b1e

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

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actions github-actions Bot added size:XXL 1,000+ changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Aug 9, 2026
Comment thread apps/web/src/components/settings/SettingsSidebarNav.tsx
Comment thread apps/web/src/components/Sidebar.tsx
Comment thread apps/web/src/components/settings/ProjectSettingsPanel.tsx
Comment thread apps/web/src/components/settings/ProjectSettingsPanel.tsx Outdated
Comment thread apps/web/src/components/settings/ProjectSettingsPanel.tsx
Comment thread apps/web/src/components/settings/ProjectSettingsPanel.tsx Outdated
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 11.3 KiB 11.3 KiB +15 B (+0.1%) 15.1 KiB
Codex Thread snapshot wire 5.5 KiB 5.5 KiB +9 B (+0.2%) 7.3 KiB
Codex Live turn WebSocket wire 5.9 KiB 5.9 KiB +6 B (+0.1%) 7.8 KiB
Codex Live turn WebSocket decoded 49.7 KiB 49.7 KiB 0 B (0.0%) 66.4 KiB
Codex Live turn messages 16 16 0 (0.0%) 21
Claude Total thread wire 11.3 KiB 11.3 KiB +11 B (+0.1%) 15.1 KiB
Claude Thread snapshot wire 5.5 KiB 5.5 KiB −1 B (−0.0%) 7.3 KiB
Claude Live turn WebSocket wire 5.9 KiB 5.9 KiB +12 B (+0.2%) 7.8 KiB
Claude Live turn WebSocket decoded 50.6 KiB 50.6 KiB 0 B (0.0%) 66.4 KiB
Claude Live turn messages 16 16 0 (0.0%) 21

Baseline: 89c320d · PR result: 6941097 · 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: 94.6 KiB
  • Claude decoded thread snapshot: 95.4 KiB

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

Comment thread apps/web/src/components/settings/ProjectSettingsPanel.tsx Outdated
Comment thread apps/web/src/components/settings/ProjectSettingsPanel.tsx
@macroscopeapp

macroscopeapp Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new project settings page with new routes, navigation changes, and ~1500 lines of new component code. The feature scope—new pages, workflows, and UI reorganization—warrants human review despite the clean implementation.

You can customize Macroscope's approvability policy. Learn more.

- Settings nav highlights Projects on detail routes
- Sidebar closes the mobile drawer before navigating to settings
- TraitsPicker no longer shows a fallen-back instance's stale options
- Script writes are serialized so rapid imports cannot clobber each other
- Clearing or deleting a script's keybinding now removes the stale rule
- Fan-out failure toasts name the environment that rejected the write
- Auto-select redirect preserves the settings-search hash

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Comment thread apps/web/src/components/settings/ProjectSettingsPanel.tsx
Changing a checkout's grouping rule changes the group key, which left
the settings page on a dead-end message (with no picker at all on
mobile). The panel now remembers the last rendered group's members and
redirects to whichever group they landed in, falling back to the index
auto-select.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit dce9835. Configure here.

Comment thread apps/web/src/components/settings/ProjectSettingsPanel.tsx
Changing a shortcut upserted a second rule for the same command, so the
old shortcut kept firing. The upsert now passes the previous rule as the
replace target, same as the Keybindings settings page.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@t3dotgg
t3dotgg merged commit 288d8e3 into main Aug 9, 2026
17 checks passed
@t3dotgg
t3dotgg deleted the t3code/overhaul-project-settings branch August 9, 2026 01:50
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 9, 2026
## What's Changed
* chore: vouch gfsaaser24 by @t3dotgg in pingdotgg/t3code#5761
* chore: vouch saphid by @t3dotgg in pingdotgg/t3code#5763
* fix(server): stop Codex threads with queued follow-ups by @t3dotgg in pingdotgg/t3code#5762
* fix(web): usage page loses the cost quality panel, gains a back button by @t3dotgg in pingdotgg/t3code#5756
* feat(server): agents can now open the images you paste into chat by @t3dotgg in pingdotgg/t3code#5757
* fix(web): pinned reorder no longer reshuffles while writes land by @t3dotgg in pingdotgg/t3code#5767
* feat(web): overhaul project settings into a real settings page by @t3dotgg in pingdotgg/t3code#5768
* fix(web): usage totals no longer jump while devices report in by @t3dotgg in pingdotgg/t3code#5772
* fix(server): settle no longer leaves monitors and dev servers running by @t3dotgg in pingdotgg/t3code#5774
* feat: pick worktree or current checkout per project by @t3dotgg in pingdotgg/t3code#5766
* fix(web): sidebar rows show the branch again, not a truncated plan step by @t3dotgg in pingdotgg/t3code#5776
* feat(server): vp run migrate-dev-db seeds worktree dev dbs with real data by @t3dotgg in pingdotgg/t3code#5773
* feat(web): keep unsent drafts one click away in the sidebar by @t3dotgg in pingdotgg/t3code#5777


**Full Changelog**: pingdotgg/t3code@v0.0.33-nightly.20260809.1039...v0.0.33-nightly.20260809.1040

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.33-nightly.20260809.1040
incognitojam added a commit to yngatech/t3code that referenced this pull request Aug 9, 2026
The desktop update tooltip flattens the release body into plain bullet
lines, so the structured nightly highlights (`## Nightly highlights`,
`### Added`, …) rendered their headings as list items and wasted 3 of
the tooltip's 8 item slots. This PR makes the generated changelog and
the tooltip work together, and leans harder into the LLM pipeline while
keeping attribution.

## Changes

- **Nightly highlights are a flat list** of plain items with compact PR
references that survive the tooltip's markup stripping (`#61` for fork
PRs, `t3code#123` for upstream, short SHAs for direct commits). Removals
are phrased as "Remove …" via prompt guidance instead of a section
label.
- **Attribution is structural:** summary items are now `{ text,
evidenceIds }` objects. The model only returns evidence IDs; URLs are
rendered deterministically and IDs are validated against the collected
evidence, so references can't be fabricated. The rolling fork-features
issue gets the same per-item references.
- **Extraction sees diffs:** each commit contributes a truncated patch
(4 KB cap, lockfiles excluded) so descriptions are grounded in what
actually changed rather than paraphrasing PR titles. Over the 160k-char
prompt budget, the largest diffs are dropped first — titles and PR
bodies never are.
- **`## What's Changed` stays** as the exhaustive record and now credits
contributors once per PR (`by @username`, fetched via `gh api` with
graceful fallback).
- **The tooltip parser stops at `## What's Changed`** when curated
highlights precede it, so raw commit lines no longer mix with highlight
lines. Bodies that open with the commit list (upstream-style, or a
nightly with no highlights) still show it.

## Pipeline example

Evidence in (abridged; one upstream commit from the delta below):

```jsonc
{
  "id": "pingdotgg#5756",
  "title": "fix(web): usage page loses the cost quality panel, gains a back button",
  "description": "<sanitized PR body>",
  "files": ["apps/web/src/components/usage/UsagePage.tsx", "…"],
  "diff": "--- a/apps/web/src/components/usage/UsagePage.tsx\n+import { useCanGoBack, useNavigate, useRouter } from \"@tanstack/react-router\";\n…"
}
```

Summary items out (actual output — note one PR correctly yielding both
an improvement and a removal):

```json
{ "text": "Return from Usage through history or to home", "evidenceIds": ["pingdotgg#5756"] }
{ "text": "Remove Cost quality panel from the Usage page", "evidenceIds": ["pingdotgg#5756"] }
```

Rendered in the release body:

```markdown
- Return from Usage through history or to home ([t3code#5756](pingdotgg#5756))
- Remove Cost quality panel from the Usage page ([t3code#5756](pingdotgg#5756))
```

## Regenerated release notes for `v0.0.33-nightly.20260809.121`

Rerunning the new generator against the existing release's refs produced
13 items (the published release had 5, plus 3 heading lines). What the
tooltip shows, via the actual parser:

```
• Identify sidebar threads with unsent drafts (#23)
• Show subagent activity counts in right-panel controls (t3code#5745)
• Return from Usage through history or to home (t3code#5756)
• Give agents access to pasted image files (t3code#5757)
• Manage projects from the dedicated Settings page (t3code#5768)
• Preserve selected diff view across panel closures and reloads (t3code#5731)
• Show pointer cursors for clickable controls and actions (t3code#5716)
• Resume Claude sessions without falsely completing skipped turns (t3code#5710)
```

<details>
<summary>Full regenerated nightly highlights</summary>

- Identify sidebar threads with unsent drafts
([#23](#23))
- Show subagent activity counts in right-panel controls
([t3code#5745](pingdotgg#5745))
- Return from Usage through history or to home
([t3code#5756](pingdotgg#5756))
- Give agents access to pasted image files
([t3code#5757](pingdotgg#5757))
- Manage projects from the dedicated Settings page
([t3code#5768](pingdotgg#5768))
- Preserve selected diff view across panel closures and reloads
([t3code#5731](pingdotgg#5731))
- Show pointer cursors for clickable controls and actions
([t3code#5716](pingdotgg#5716))
- Resume Claude sessions without falsely completing skipped turns
([t3code#5710](pingdotgg#5710))
- Stop the active Codex turn before queued follow-ups
([t3code#5762](pingdotgg#5762))
- Keep pinned thread ordering stable while saving changes
([t3code#5767](pingdotgg#5767))
- Show multi-device usage progress while totals load
([t3code#5772](pingdotgg#5772))
- Remove Cost quality panel from the Usage page
([t3code#5756](pingdotgg#5756))
- Remove the limited project settings modal
([t3code#5768](pingdotgg#5768))

</details>

<details>
<summary>Regenerated rolling fork-features summary (excerpt, for issue
#43)</summary>

## Added

- Identify yngatech builds through names, icons, palettes, and About
details ([#3](#3),
[#27](#27),
[#29](#29),
[#30](#30),
[#56](#56))
- Choose and preview sounds for completed agent turns
([#5](#5),
[#7](#7),
[#19](#19))
- Detect GitHub outages and show status in the sidebar
([#14](#14))
- Show unsent thread drafts with sidebar pencil indicators
([#23](#23))
- Start new threads with GitHub issues as context
([#31](#31))
- Open thread pull or merge requests from command palette
([#46](#46))
- Synchronize existing-thread text and composer settings across
connected devices ([#39](#39),
[#44](#44))

## Improved

- Inspect full commands, labeled streams, numeric exit codes, and
failures ([#11](#11),
[#4](#4),
[#36](#36))
- Close terminals directly from the grouped terminal list
([#22](#22))
- Show clearer snooze countdowns near hour and day boundaries
([#45](#45))
- Show setup script outcomes in the thread timeline
([#40](#40))
- Install yngatech alongside upstream T3 Code on Windows
([#49](#49))

</details>

## Rollout

The generator and workflow changes take effect on the next nightly. The
tooltip parser change ships inside the app, so currently installed
builds still show the mixed list until users update onto a build
containing it.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
incognitojam added a commit to yngatech/t3code that referenced this pull request Aug 9, 2026
The desktop update tooltip flattens the release body into plain bullet
lines, so the structured nightly highlights (`## Nightly highlights`,
`### Added`, …) rendered their headings as list items and wasted 3 of
the tooltip's 8 item slots. This PR makes the generated changelog and
the tooltip work together, and leans harder into the LLM pipeline while
keeping attribution.

## Changes

- **Nightly highlights are a flat list** of plain items with compact PR
references that survive the tooltip's markup stripping (`#61` for fork
PRs, `t3code#123` for upstream, short SHAs for direct commits). Removals
are phrased as "Remove …" via prompt guidance instead of a section
label.
- **Attribution is structural:** summary items are now `{ text,
evidenceIds }` objects. The model only returns evidence IDs; URLs are
rendered deterministically and IDs are validated against the collected
evidence, so references can't be fabricated. The rolling fork-features
issue gets the same per-item references.
- **Extraction sees diffs:** each commit contributes a truncated patch
(4 KB cap, lockfiles excluded) so descriptions are grounded in what
actually changed rather than paraphrasing PR titles. Over the 160k-char
prompt budget, the largest diffs are dropped first — titles and PR
bodies never are.
- **`## What's Changed` stays** as the exhaustive record and now credits
contributors once per PR (`by @username`, fetched via `gh api` with
graceful fallback).
- **The tooltip parser stops at `## What's Changed`** when curated
highlights precede it, so raw commit lines no longer mix with highlight
lines. Bodies that open with the commit list (upstream-style, or a
nightly with no highlights) still show it.

## Pipeline example

Evidence in (abridged; one upstream commit from the delta below):

```jsonc
{
  "id": "pingdotgg#5756",
  "title": "fix(web): usage page loses the cost quality panel, gains a back button",
  "description": "<sanitized PR body>",
  "files": ["apps/web/src/components/usage/UsagePage.tsx", "…"],
  "diff": "--- a/apps/web/src/components/usage/UsagePage.tsx\n+import { useCanGoBack, useNavigate, useRouter } from \"@tanstack/react-router\";\n…"
}
```

Summary items out (actual output — note one PR correctly yielding both
an improvement and a removal):

```json
{ "text": "Return from Usage through history or to home", "evidenceIds": ["pingdotgg#5756"] }
{ "text": "Remove Cost quality panel from the Usage page", "evidenceIds": ["pingdotgg#5756"] }
```

Rendered in the release body:

```markdown
- Return from Usage through history or to home ([t3code#5756](pingdotgg#5756))
- Remove Cost quality panel from the Usage page ([t3code#5756](pingdotgg#5756))
```

## Regenerated release notes for `v0.0.33-nightly.20260809.121`

Rerunning the new generator against the existing release's refs produced
13 items (the published release had 5, plus 3 heading lines). What the
tooltip shows, via the actual parser:

```
• Identify sidebar threads with unsent drafts (#23)
• Show subagent activity counts in right-panel controls (t3code#5745)
• Return from Usage through history or to home (t3code#5756)
• Give agents access to pasted image files (t3code#5757)
• Manage projects from the dedicated Settings page (t3code#5768)
• Preserve selected diff view across panel closures and reloads (t3code#5731)
• Show pointer cursors for clickable controls and actions (t3code#5716)
• Resume Claude sessions without falsely completing skipped turns (t3code#5710)
```

<details>
<summary>Full regenerated nightly highlights</summary>

- Identify sidebar threads with unsent drafts
([#23](#23))
- Show subagent activity counts in right-panel controls
([t3code#5745](pingdotgg#5745))
- Return from Usage through history or to home
([t3code#5756](pingdotgg#5756))
- Give agents access to pasted image files
([t3code#5757](pingdotgg#5757))
- Manage projects from the dedicated Settings page
([t3code#5768](pingdotgg#5768))
- Preserve selected diff view across panel closures and reloads
([t3code#5731](pingdotgg#5731))
- Show pointer cursors for clickable controls and actions
([t3code#5716](pingdotgg#5716))
- Resume Claude sessions without falsely completing skipped turns
([t3code#5710](pingdotgg#5710))
- Stop the active Codex turn before queued follow-ups
([t3code#5762](pingdotgg#5762))
- Keep pinned thread ordering stable while saving changes
([t3code#5767](pingdotgg#5767))
- Show multi-device usage progress while totals load
([t3code#5772](pingdotgg#5772))
- Remove Cost quality panel from the Usage page
([t3code#5756](pingdotgg#5756))
- Remove the limited project settings modal
([t3code#5768](pingdotgg#5768))

</details>

<details>
<summary>Regenerated rolling fork-features summary (excerpt, for issue
#43)</summary>

## Added

- Identify yngatech builds through names, icons, palettes, and About
details ([#3](#3),
[#27](#27),
[#29](#29),
[#30](#30),
[#56](#56))
- Choose and preview sounds for completed agent turns
([#5](#5),
[#7](#7),
[#19](#19))
- Detect GitHub outages and show status in the sidebar
([#14](#14))
- Show unsent thread drafts with sidebar pencil indicators
([#23](#23))
- Start new threads with GitHub issues as context
([#31](#31))
- Open thread pull or merge requests from command palette
([#46](#46))
- Synchronize existing-thread text and composer settings across
connected devices ([#39](#39),
[#44](#44))

## Improved

- Inspect full commands, labeled streams, numeric exit codes, and
failures ([#11](#11),
[#4](#4),
[#36](#36))
- Close terminals directly from the grouped terminal list
([#22](#22))
- Show clearer snooze countdowns near hour and day boundaries
([#45](#45))
- Show setup script outcomes in the thread timeline
([#40](#40))
- Install yngatech alongside upstream T3 Code on Windows
([#49](#49))

</details>

## Rollout

The generator and workflow changes take effect on the next nightly. The
tooltip parser change ships inside the app, so currently installed
builds still show the mixed list until users update onto a build
containing it.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ 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.

1 participant