sync(upstream): merge upstream/main 064041072 into fork/dev - #381

Merged
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072
Aug 8, 2026
Merged

sync(upstream): merge upstream/main 064041072 into fork/dev#381
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 064041072 — the thirteen commits after #379, headlined by
pingdotgg#5672 making sidebar v2 the default.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
064041072fix(desktop): zoom shortcuts no longer die when the preview browser has focus (pingdotgg#5691)
2c7267ad4fix(server): stop the reaper from silently killing live background subagents (pingdotgg#5677)
daf8ee0b2fix(web): inherit terminal size in simple typography (pingdotgg#5628)
ed886fe18fix(web): delay transient reconnect warnings (pingdotgg#5670)
4eaf5ef8bfix(server): stop PR status lookups amplifying GitHub rate limits (pingdotgg#5673)
0de954073feat: sidebar v2 is now the default sidebar (pingdotgg#5672)
31891a1a0feat(web): fold plan mode and token-by-token output into Legacy features (pingdotgg#5664)
45d9aa90bfix(web): show Stop button while input is pending (pingdotgg#5554)
7a84f6cf1fix(web): reconnect the composer seam for remote non-Git projects (pingdotgg#5633)
f0fb406acfeat(web): make sidebar artwork theme-aware (pingdotgg#5636)
72d673a85feat(desktop): remember recently used sites in the Browser panel (pingdotgg#5270)
82406bce9, e2cd2383cchore: vouch contributors

The hard part: a rename git could not follow

pingdotgg#5672 is a file-level restructure — upstream renamed the classic sidebar to
LegacySidebar.tsx, moved SidebarV2.tsx's content into Sidebar.tsx, and deleted
SidebarV2.tsx. Because this fork had heavily modified both files, git saw a
modify/delete pair and gave up on rename detection, leaving 23 conflict hunks in the wrong file.

Each was therefore merged three-way by hand, against the merge-base:

Result= fork content+ upstream delta
Sidebar.tsxthe fork's SidebarV2.tsx (multi-env + ownership filters, identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread + regenerating-title chrome, settled shelves)pingdotgg#5672's rename sweep — SidebarV2*Sidebar*, group/v2-rowgroup/sidebar-row, sidebar-v2-* test ids — plus aria-busy on rows
LegacySidebar.tsxthe fork's old Sidebar.tsxupstream's rename + settings-nav hoist

AppSidebarLayout now renders SettingsSidebarNav for both sidebars, so neither renders it
itself — verified there is exactly one mount on the settings route and none elsewhere.

forkSurfaceExistence — the fork's anti-stack-drop net — was retargeted, not relaxed. All 17
assertions still run against the renamed files and ids, and they are what caught my first attempt
shipping upstream's v1 as LegacySidebar.tsx instead of the fork's (which would have silently
dropped the settled-shelf chrome, composer draft marks and provider usage dots from the legacy
sidebar).

Other resolutions

WhereSituationResolution
GitManagerpingdotgg#5673 replaces the flat 20s failure TTL with per-branch exponential backoff, because a rate-limited poller was re-asking faster than a healthy oneupstream's backoff adopted; the fork's terminal-state PR freeze kept alongside it
ComposerPrimaryActionspingdotgg#5554 shows Stop while input is pending — precisely what the fork's shouldShowComposerInterruptAction suppressedupstream's behaviour adopted; the superseded predicate and its tests retired, not merged
PreviewViewthe fork's resolveNavigableUrl asks the environment about tailnet routing; upstream adds browser history (pingdotgg#5270)fork resolution kept, history recorded only on successful navigation
settings keyssidebarV2Enabled/sidebarV2ConfiguredByUserlegacySidebarEnabled; enableAssistantStreamingenableLegacyTokenStreaming; mobile threadListV2EnabledlegacyThreadListEnabled. All are deliberately fresh keys so decoding drops the old ones and prior opt-ins resetadopted; consumers migrated to the new resolvers
.github/VOUCHED.tdupstream's contributor-vouching file, deleted by this forkdeletion kept

Adversarial review

grok-4.5 reported the sidebar hand-merge, settings migrations, settings-nav hoist, GitManager,
composer, preview and forkSurfaceExistence all clean — and found one HIGH:

FindingDisposition
HIGH — the mobile ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled. I migrated HomeScreen but missed this one, so the iPad/split list would have stayed on the legacy layout with no setting able to change it, disagreeing with HomeFixed. It now reads through resolveThreadListV2Enabled exactly like HomeScreen

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,288 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.

Note

#376 (PR-badge fallback for prNNNN checkouts) touches findLatestPrForHeadContext in
GitManager.ts, which pingdotgg#5673 also rewrites. It will need a rebase after this lands.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

t3-codeBotand others added 14 commits August 7, 2026 14:29
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…res (pingdotgg#5664)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ngdotgg#5673)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…bagents (pingdotgg#5677)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…as focus (pingdotgg#5691)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the thirteen upstream commits after #379. The headline is pingdotgg#5672 making
sidebar v2 the default, which is a file-level restructure: upstream renamed the
classic sidebar to LegacySidebar.tsx and moved v2's content into Sidebar.tsx,
deleting SidebarV2.tsx.
Git could not follow either rename because both sides had changed both files,
so each was merged three-way by hand:
- Sidebar.tsx = the fork's SidebarV2.tsx (multi-env and ownership filters,
identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread
and regenerating-title chrome) with upstream's pingdotgg#5672 delta applied. That
delta is a rename sweep — SidebarV2* → Sidebar*, group/v2-row →
group/sidebar-row, sidebar-v2-* test ids — plus aria-busy on the rows.
- LegacySidebar.tsx = the fork's old Sidebar.tsx with upstream's rename and
settings-nav hoist applied. AppSidebarLayout now renders SettingsSidebarNav
for both sidebars, so the legacy one no longer renders it itself.
forkSurfaceExistence, the fork's anti-stack-drop net, was retargeted at the
renamed files and ids rather than relaxed: all 17 assertions still run, and
they are what caught LegacySidebar initially being upstream's v1 rather than
the fork's.
Other resolutions:
- GitManager: upstream's per-branch exponential backoff for rate-limited PR
lookups (pingdotgg#5673) with the fork's terminal-state freeze helper kept.
- Composer: pingdotgg#5554 shows Stop while input is pending, which is exactly what the
fork's shouldShowComposerInterruptAction suppressed; the predicate and its
tests are retired rather than merged.
- PreviewView: the fork's resolveNavigableUrl (asks the environment about
tailnet routing) keeps resolving, with upstream's browser-history recording
(pingdotgg#5270) layered on the successful-navigation path.
- Settings: sidebarV2Enabled / sidebarV2ConfiguredByUser and
enableAssistantStreaming are retired in favour of upstream's fresh keys
(legacySidebarEnabled, enableLegacyTokenStreaming), which deliberately reset
prior opt-ins; the mobile list toggle inverts the same way, so HomeScreen now
reads through resolveThreadListV2Enabled.
- .github/VOUCHED.td stays deleted: it is upstream's contributor-vouching file.
Adversarial review caught one surface the key migration missed: the mobile
ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled, so
the iPad/split list would have stayed on the legacy layout with no setting able
to change it, disagreeing with Home. It now reads through
resolveThreadListV2Enabled like HomeScreen.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 9bbb0a0 into fork/devAug 8, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 8, 2026
Adopts the three upstream commits after #381: a cross-environment usage page
reading provider transcripts (pingdotgg#5684), its chart fix (pingdotgg#5697), and one mobile
sheet for model and thread settings (pingdotgg#5625).
Resolutions:
- server.ts / ws.ts / client-runtime state: upstream's UsageService and its
usageSummary atom family are additive next to the fork's diagnostics services
(HostResourceProbe, ProcessResourceMonitor, TraceDiagnostics, BackgroundPolicy)
and hostResourceSnapshot family — unioned.
- ThreadComposer: pingdotgg#5625 folds the model picker and provider options into a
single settings sheet, replacing the fork's ControlPillMenu. The sheet is
adopted, and the fork's usage signal rides on it: the trigger keeps
ProviderUsageIcon with the live marker rather than upstream's plain
ProviderIcon, so quota state stays visible at a glance. The fork-only
collapsed-composer pill (upstream has none) now opens the same sheet instead
of the retired menu.
Adversarial review caught that retiring the model menu also orphaned the fork's
numeric usage note: the marker survived on the trigger icon but the quota
percentage the menu rows carried had no home. It now hangs off the trigger
label, so both halves of the fork's usage signal survive the consolidation.
The plain ProviderIcon import went with upstream's replaced icon.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@patroza@chrisdeeming@maria-rcks@caezium@ipanasenko@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

sync(upstream): merge upstream/main 064041072 into fork/dev - #381

Merged
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072
Aug 8, 2026
Merged

sync(upstream): merge upstream/main 064041072 into fork/dev#381
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 064041072 — the thirteen commits after #379, headlined by
pingdotgg#5672 making sidebar v2 the default.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
064041072fix(desktop): zoom shortcuts no longer die when the preview browser has focus (pingdotgg#5691)
2c7267ad4fix(server): stop the reaper from silently killing live background subagents (pingdotgg#5677)
daf8ee0b2fix(web): inherit terminal size in simple typography (pingdotgg#5628)
ed886fe18fix(web): delay transient reconnect warnings (pingdotgg#5670)
4eaf5ef8bfix(server): stop PR status lookups amplifying GitHub rate limits (pingdotgg#5673)
0de954073feat: sidebar v2 is now the default sidebar (pingdotgg#5672)
31891a1a0feat(web): fold plan mode and token-by-token output into Legacy features (pingdotgg#5664)
45d9aa90bfix(web): show Stop button while input is pending (pingdotgg#5554)
7a84f6cf1fix(web): reconnect the composer seam for remote non-Git projects (pingdotgg#5633)
f0fb406acfeat(web): make sidebar artwork theme-aware (pingdotgg#5636)
72d673a85feat(desktop): remember recently used sites in the Browser panel (pingdotgg#5270)
82406bce9, e2cd2383cchore: vouch contributors

The hard part: a rename git could not follow

pingdotgg#5672 is a file-level restructure — upstream renamed the classic sidebar to
LegacySidebar.tsx, moved SidebarV2.tsx's content into Sidebar.tsx, and deleted
SidebarV2.tsx. Because this fork had heavily modified both files, git saw a
modify/delete pair and gave up on rename detection, leaving 23 conflict hunks in the wrong file.

Each was therefore merged three-way by hand, against the merge-base:

Result= fork content+ upstream delta
Sidebar.tsxthe fork's SidebarV2.tsx (multi-env + ownership filters, identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread + regenerating-title chrome, settled shelves)pingdotgg#5672's rename sweep — SidebarV2*Sidebar*, group/v2-rowgroup/sidebar-row, sidebar-v2-* test ids — plus aria-busy on rows
LegacySidebar.tsxthe fork's old Sidebar.tsxupstream's rename + settings-nav hoist

AppSidebarLayout now renders SettingsSidebarNav for both sidebars, so neither renders it
itself — verified there is exactly one mount on the settings route and none elsewhere.

forkSurfaceExistence — the fork's anti-stack-drop net — was retargeted, not relaxed. All 17
assertions still run against the renamed files and ids, and they are what caught my first attempt
shipping upstream's v1 as LegacySidebar.tsx instead of the fork's (which would have silently
dropped the settled-shelf chrome, composer draft marks and provider usage dots from the legacy
sidebar).

Other resolutions

WhereSituationResolution
GitManagerpingdotgg#5673 replaces the flat 20s failure TTL with per-branch exponential backoff, because a rate-limited poller was re-asking faster than a healthy oneupstream's backoff adopted; the fork's terminal-state PR freeze kept alongside it
ComposerPrimaryActionspingdotgg#5554 shows Stop while input is pending — precisely what the fork's shouldShowComposerInterruptAction suppressedupstream's behaviour adopted; the superseded predicate and its tests retired, not merged
PreviewViewthe fork's resolveNavigableUrl asks the environment about tailnet routing; upstream adds browser history (pingdotgg#5270)fork resolution kept, history recorded only on successful navigation
settings keyssidebarV2Enabled/sidebarV2ConfiguredByUserlegacySidebarEnabled; enableAssistantStreamingenableLegacyTokenStreaming; mobile threadListV2EnabledlegacyThreadListEnabled. All are deliberately fresh keys so decoding drops the old ones and prior opt-ins resetadopted; consumers migrated to the new resolvers
.github/VOUCHED.tdupstream's contributor-vouching file, deleted by this forkdeletion kept

Adversarial review

grok-4.5 reported the sidebar hand-merge, settings migrations, settings-nav hoist, GitManager,
composer, preview and forkSurfaceExistence all clean — and found one HIGH:

FindingDisposition
HIGH — the mobile ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled. I migrated HomeScreen but missed this one, so the iPad/split list would have stayed on the legacy layout with no setting able to change it, disagreeing with HomeFixed. It now reads through resolveThreadListV2Enabled exactly like HomeScreen

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,288 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.

Note

#376 (PR-badge fallback for prNNNN checkouts) touches findLatestPrForHeadContext in
GitManager.ts, which pingdotgg#5673 also rewrites. It will need a rebase after this lands.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

t3-codeBotand others added 14 commits August 7, 2026 14:29
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…res (pingdotgg#5664)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ngdotgg#5673)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…bagents (pingdotgg#5677)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…as focus (pingdotgg#5691)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the thirteen upstream commits after #379. The headline is pingdotgg#5672 making
sidebar v2 the default, which is a file-level restructure: upstream renamed the
classic sidebar to LegacySidebar.tsx and moved v2's content into Sidebar.tsx,
deleting SidebarV2.tsx.
Git could not follow either rename because both sides had changed both files,
so each was merged three-way by hand:
- Sidebar.tsx = the fork's SidebarV2.tsx (multi-env and ownership filters,
identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread
and regenerating-title chrome) with upstream's pingdotgg#5672 delta applied. That
delta is a rename sweep — SidebarV2* → Sidebar*, group/v2-row →
group/sidebar-row, sidebar-v2-* test ids — plus aria-busy on the rows.
- LegacySidebar.tsx = the fork's old Sidebar.tsx with upstream's rename and
settings-nav hoist applied. AppSidebarLayout now renders SettingsSidebarNav
for both sidebars, so the legacy one no longer renders it itself.
forkSurfaceExistence, the fork's anti-stack-drop net, was retargeted at the
renamed files and ids rather than relaxed: all 17 assertions still run, and
they are what caught LegacySidebar initially being upstream's v1 rather than
the fork's.
Other resolutions:
- GitManager: upstream's per-branch exponential backoff for rate-limited PR
lookups (pingdotgg#5673) with the fork's terminal-state freeze helper kept.
- Composer: pingdotgg#5554 shows Stop while input is pending, which is exactly what the
fork's shouldShowComposerInterruptAction suppressed; the predicate and its
tests are retired rather than merged.
- PreviewView: the fork's resolveNavigableUrl (asks the environment about
tailnet routing) keeps resolving, with upstream's browser-history recording
(pingdotgg#5270) layered on the successful-navigation path.
- Settings: sidebarV2Enabled / sidebarV2ConfiguredByUser and
enableAssistantStreaming are retired in favour of upstream's fresh keys
(legacySidebarEnabled, enableLegacyTokenStreaming), which deliberately reset
prior opt-ins; the mobile list toggle inverts the same way, so HomeScreen now
reads through resolveThreadListV2Enabled.
- .github/VOUCHED.td stays deleted: it is upstream's contributor-vouching file.
Adversarial review caught one surface the key migration missed: the mobile
ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled, so
the iPad/split list would have stayed on the legacy layout with no setting able
to change it, disagreeing with Home. It now reads through
resolveThreadListV2Enabled like HomeScreen.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 9bbb0a0 into fork/devAug 8, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 8, 2026
Adopts the three upstream commits after #381: a cross-environment usage page
reading provider transcripts (pingdotgg#5684), its chart fix (pingdotgg#5697), and one mobile
sheet for model and thread settings (pingdotgg#5625).
Resolutions:
- server.ts / ws.ts / client-runtime state: upstream's UsageService and its
usageSummary atom family are additive next to the fork's diagnostics services
(HostResourceProbe, ProcessResourceMonitor, TraceDiagnostics, BackgroundPolicy)
and hostResourceSnapshot family — unioned.
- ThreadComposer: pingdotgg#5625 folds the model picker and provider options into a
single settings sheet, replacing the fork's ControlPillMenu. The sheet is
adopted, and the fork's usage signal rides on it: the trigger keeps
ProviderUsageIcon with the live marker rather than upstream's plain
ProviderIcon, so quota state stays visible at a glance. The fork-only
collapsed-composer pill (upstream has none) now opens the same sheet instead
of the retired menu.
Adversarial review caught that retiring the model menu also orphaned the fork's
numeric usage note: the marker survived on the trigger icon but the quota
percentage the menu rows carried had no home. It now hangs off the trigger
label, so both halves of the fork's usage signal survive the consolidation.
The plain ProviderIcon import went with upstream's replaced icon.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@patroza@chrisdeeming@maria-rcks@caezium@ipanasenko@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

sync(upstream): merge upstream/main 064041072 into fork/dev - #381

Merged
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072
Aug 8, 2026
Merged

sync(upstream): merge upstream/main 064041072 into fork/dev#381
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 064041072 — the thirteen commits after #379, headlined by
pingdotgg#5672 making sidebar v2 the default.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
064041072fix(desktop): zoom shortcuts no longer die when the preview browser has focus (pingdotgg#5691)
2c7267ad4fix(server): stop the reaper from silently killing live background subagents (pingdotgg#5677)
daf8ee0b2fix(web): inherit terminal size in simple typography (pingdotgg#5628)
ed886fe18fix(web): delay transient reconnect warnings (pingdotgg#5670)
4eaf5ef8bfix(server): stop PR status lookups amplifying GitHub rate limits (pingdotgg#5673)
0de954073feat: sidebar v2 is now the default sidebar (pingdotgg#5672)
31891a1a0feat(web): fold plan mode and token-by-token output into Legacy features (pingdotgg#5664)
45d9aa90bfix(web): show Stop button while input is pending (pingdotgg#5554)
7a84f6cf1fix(web): reconnect the composer seam for remote non-Git projects (pingdotgg#5633)
f0fb406acfeat(web): make sidebar artwork theme-aware (pingdotgg#5636)
72d673a85feat(desktop): remember recently used sites in the Browser panel (pingdotgg#5270)
82406bce9, e2cd2383cchore: vouch contributors

The hard part: a rename git could not follow

pingdotgg#5672 is a file-level restructure — upstream renamed the classic sidebar to
LegacySidebar.tsx, moved SidebarV2.tsx's content into Sidebar.tsx, and deleted
SidebarV2.tsx. Because this fork had heavily modified both files, git saw a
modify/delete pair and gave up on rename detection, leaving 23 conflict hunks in the wrong file.

Each was therefore merged three-way by hand, against the merge-base:

Result= fork content+ upstream delta
Sidebar.tsxthe fork's SidebarV2.tsx (multi-env + ownership filters, identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread + regenerating-title chrome, settled shelves)pingdotgg#5672's rename sweep — SidebarV2*Sidebar*, group/v2-rowgroup/sidebar-row, sidebar-v2-* test ids — plus aria-busy on rows
LegacySidebar.tsxthe fork's old Sidebar.tsxupstream's rename + settings-nav hoist

AppSidebarLayout now renders SettingsSidebarNav for both sidebars, so neither renders it
itself — verified there is exactly one mount on the settings route and none elsewhere.

forkSurfaceExistence — the fork's anti-stack-drop net — was retargeted, not relaxed. All 17
assertions still run against the renamed files and ids, and they are what caught my first attempt
shipping upstream's v1 as LegacySidebar.tsx instead of the fork's (which would have silently
dropped the settled-shelf chrome, composer draft marks and provider usage dots from the legacy
sidebar).

Other resolutions

WhereSituationResolution
GitManagerpingdotgg#5673 replaces the flat 20s failure TTL with per-branch exponential backoff, because a rate-limited poller was re-asking faster than a healthy oneupstream's backoff adopted; the fork's terminal-state PR freeze kept alongside it
ComposerPrimaryActionspingdotgg#5554 shows Stop while input is pending — precisely what the fork's shouldShowComposerInterruptAction suppressedupstream's behaviour adopted; the superseded predicate and its tests retired, not merged
PreviewViewthe fork's resolveNavigableUrl asks the environment about tailnet routing; upstream adds browser history (pingdotgg#5270)fork resolution kept, history recorded only on successful navigation
settings keyssidebarV2Enabled/sidebarV2ConfiguredByUserlegacySidebarEnabled; enableAssistantStreamingenableLegacyTokenStreaming; mobile threadListV2EnabledlegacyThreadListEnabled. All are deliberately fresh keys so decoding drops the old ones and prior opt-ins resetadopted; consumers migrated to the new resolvers
.github/VOUCHED.tdupstream's contributor-vouching file, deleted by this forkdeletion kept

Adversarial review

grok-4.5 reported the sidebar hand-merge, settings migrations, settings-nav hoist, GitManager,
composer, preview and forkSurfaceExistence all clean — and found one HIGH:

FindingDisposition
HIGH — the mobile ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled. I migrated HomeScreen but missed this one, so the iPad/split list would have stayed on the legacy layout with no setting able to change it, disagreeing with HomeFixed. It now reads through resolveThreadListV2Enabled exactly like HomeScreen

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,288 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.

Note

#376 (PR-badge fallback for prNNNN checkouts) touches findLatestPrForHeadContext in
GitManager.ts, which pingdotgg#5673 also rewrites. It will need a rebase after this lands.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

t3-codeBotand others added 14 commits August 7, 2026 14:29
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…res (pingdotgg#5664)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ngdotgg#5673)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…bagents (pingdotgg#5677)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…as focus (pingdotgg#5691)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the thirteen upstream commits after #379. The headline is pingdotgg#5672 making
sidebar v2 the default, which is a file-level restructure: upstream renamed the
classic sidebar to LegacySidebar.tsx and moved v2's content into Sidebar.tsx,
deleting SidebarV2.tsx.
Git could not follow either rename because both sides had changed both files,
so each was merged three-way by hand:
- Sidebar.tsx = the fork's SidebarV2.tsx (multi-env and ownership filters,
identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread
and regenerating-title chrome) with upstream's pingdotgg#5672 delta applied. That
delta is a rename sweep — SidebarV2* → Sidebar*, group/v2-row →
group/sidebar-row, sidebar-v2-* test ids — plus aria-busy on the rows.
- LegacySidebar.tsx = the fork's old Sidebar.tsx with upstream's rename and
settings-nav hoist applied. AppSidebarLayout now renders SettingsSidebarNav
for both sidebars, so the legacy one no longer renders it itself.
forkSurfaceExistence, the fork's anti-stack-drop net, was retargeted at the
renamed files and ids rather than relaxed: all 17 assertions still run, and
they are what caught LegacySidebar initially being upstream's v1 rather than
the fork's.
Other resolutions:
- GitManager: upstream's per-branch exponential backoff for rate-limited PR
lookups (pingdotgg#5673) with the fork's terminal-state freeze helper kept.
- Composer: pingdotgg#5554 shows Stop while input is pending, which is exactly what the
fork's shouldShowComposerInterruptAction suppressed; the predicate and its
tests are retired rather than merged.
- PreviewView: the fork's resolveNavigableUrl (asks the environment about
tailnet routing) keeps resolving, with upstream's browser-history recording
(pingdotgg#5270) layered on the successful-navigation path.
- Settings: sidebarV2Enabled / sidebarV2ConfiguredByUser and
enableAssistantStreaming are retired in favour of upstream's fresh keys
(legacySidebarEnabled, enableLegacyTokenStreaming), which deliberately reset
prior opt-ins; the mobile list toggle inverts the same way, so HomeScreen now
reads through resolveThreadListV2Enabled.
- .github/VOUCHED.td stays deleted: it is upstream's contributor-vouching file.
Adversarial review caught one surface the key migration missed: the mobile
ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled, so
the iPad/split list would have stayed on the legacy layout with no setting able
to change it, disagreeing with Home. It now reads through
resolveThreadListV2Enabled like HomeScreen.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 9bbb0a0 into fork/devAug 8, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 8, 2026
Adopts the three upstream commits after #381: a cross-environment usage page
reading provider transcripts (pingdotgg#5684), its chart fix (pingdotgg#5697), and one mobile
sheet for model and thread settings (pingdotgg#5625).
Resolutions:
- server.ts / ws.ts / client-runtime state: upstream's UsageService and its
usageSummary atom family are additive next to the fork's diagnostics services
(HostResourceProbe, ProcessResourceMonitor, TraceDiagnostics, BackgroundPolicy)
and hostResourceSnapshot family — unioned.
- ThreadComposer: pingdotgg#5625 folds the model picker and provider options into a
single settings sheet, replacing the fork's ControlPillMenu. The sheet is
adopted, and the fork's usage signal rides on it: the trigger keeps
ProviderUsageIcon with the live marker rather than upstream's plain
ProviderIcon, so quota state stays visible at a glance. The fork-only
collapsed-composer pill (upstream has none) now opens the same sheet instead
of the retired menu.
Adversarial review caught that retiring the model menu also orphaned the fork's
numeric usage note: the marker survived on the trigger icon but the quota
percentage the menu rows carried had no home. It now hangs off the trigger
label, so both halves of the fork's usage signal survive the consolidation.
The plain ProviderIcon import went with upstream's replaced icon.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@patroza@chrisdeeming@maria-rcks@caezium@ipanasenko@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

sync(upstream): merge upstream/main 064041072 into fork/dev - #381

Merged
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072
Aug 8, 2026
Merged

sync(upstream): merge upstream/main 064041072 into fork/dev#381
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 064041072 — the thirteen commits after #379, headlined by
pingdotgg#5672 making sidebar v2 the default.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
064041072fix(desktop): zoom shortcuts no longer die when the preview browser has focus (pingdotgg#5691)
2c7267ad4fix(server): stop the reaper from silently killing live background subagents (pingdotgg#5677)
daf8ee0b2fix(web): inherit terminal size in simple typography (pingdotgg#5628)
ed886fe18fix(web): delay transient reconnect warnings (pingdotgg#5670)
4eaf5ef8bfix(server): stop PR status lookups amplifying GitHub rate limits (pingdotgg#5673)
0de954073feat: sidebar v2 is now the default sidebar (pingdotgg#5672)
31891a1a0feat(web): fold plan mode and token-by-token output into Legacy features (pingdotgg#5664)
45d9aa90bfix(web): show Stop button while input is pending (pingdotgg#5554)
7a84f6cf1fix(web): reconnect the composer seam for remote non-Git projects (pingdotgg#5633)
f0fb406acfeat(web): make sidebar artwork theme-aware (pingdotgg#5636)
72d673a85feat(desktop): remember recently used sites in the Browser panel (pingdotgg#5270)
82406bce9, e2cd2383cchore: vouch contributors

The hard part: a rename git could not follow

pingdotgg#5672 is a file-level restructure — upstream renamed the classic sidebar to
LegacySidebar.tsx, moved SidebarV2.tsx's content into Sidebar.tsx, and deleted
SidebarV2.tsx. Because this fork had heavily modified both files, git saw a
modify/delete pair and gave up on rename detection, leaving 23 conflict hunks in the wrong file.

Each was therefore merged three-way by hand, against the merge-base:

Result= fork content+ upstream delta
Sidebar.tsxthe fork's SidebarV2.tsx (multi-env + ownership filters, identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread + regenerating-title chrome, settled shelves)pingdotgg#5672's rename sweep — SidebarV2*Sidebar*, group/v2-rowgroup/sidebar-row, sidebar-v2-* test ids — plus aria-busy on rows
LegacySidebar.tsxthe fork's old Sidebar.tsxupstream's rename + settings-nav hoist

AppSidebarLayout now renders SettingsSidebarNav for both sidebars, so neither renders it
itself — verified there is exactly one mount on the settings route and none elsewhere.

forkSurfaceExistence — the fork's anti-stack-drop net — was retargeted, not relaxed. All 17
assertions still run against the renamed files and ids, and they are what caught my first attempt
shipping upstream's v1 as LegacySidebar.tsx instead of the fork's (which would have silently
dropped the settled-shelf chrome, composer draft marks and provider usage dots from the legacy
sidebar).

Other resolutions

WhereSituationResolution
GitManagerpingdotgg#5673 replaces the flat 20s failure TTL with per-branch exponential backoff, because a rate-limited poller was re-asking faster than a healthy oneupstream's backoff adopted; the fork's terminal-state PR freeze kept alongside it
ComposerPrimaryActionspingdotgg#5554 shows Stop while input is pending — precisely what the fork's shouldShowComposerInterruptAction suppressedupstream's behaviour adopted; the superseded predicate and its tests retired, not merged
PreviewViewthe fork's resolveNavigableUrl asks the environment about tailnet routing; upstream adds browser history (pingdotgg#5270)fork resolution kept, history recorded only on successful navigation
settings keyssidebarV2Enabled/sidebarV2ConfiguredByUserlegacySidebarEnabled; enableAssistantStreamingenableLegacyTokenStreaming; mobile threadListV2EnabledlegacyThreadListEnabled. All are deliberately fresh keys so decoding drops the old ones and prior opt-ins resetadopted; consumers migrated to the new resolvers
.github/VOUCHED.tdupstream's contributor-vouching file, deleted by this forkdeletion kept

Adversarial review

grok-4.5 reported the sidebar hand-merge, settings migrations, settings-nav hoist, GitManager,
composer, preview and forkSurfaceExistence all clean — and found one HIGH:

FindingDisposition
HIGH — the mobile ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled. I migrated HomeScreen but missed this one, so the iPad/split list would have stayed on the legacy layout with no setting able to change it, disagreeing with HomeFixed. It now reads through resolveThreadListV2Enabled exactly like HomeScreen

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,288 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.

Note

#376 (PR-badge fallback for prNNNN checkouts) touches findLatestPrForHeadContext in
GitManager.ts, which pingdotgg#5673 also rewrites. It will need a rebase after this lands.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

t3-codeBotand others added 14 commits August 7, 2026 14:29
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…res (pingdotgg#5664)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ngdotgg#5673)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…bagents (pingdotgg#5677)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…as focus (pingdotgg#5691)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the thirteen upstream commits after #379. The headline is pingdotgg#5672 making
sidebar v2 the default, which is a file-level restructure: upstream renamed the
classic sidebar to LegacySidebar.tsx and moved v2's content into Sidebar.tsx,
deleting SidebarV2.tsx.
Git could not follow either rename because both sides had changed both files,
so each was merged three-way by hand:
- Sidebar.tsx = the fork's SidebarV2.tsx (multi-env and ownership filters,
identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread
and regenerating-title chrome) with upstream's pingdotgg#5672 delta applied. That
delta is a rename sweep — SidebarV2* → Sidebar*, group/v2-row →
group/sidebar-row, sidebar-v2-* test ids — plus aria-busy on the rows.
- LegacySidebar.tsx = the fork's old Sidebar.tsx with upstream's rename and
settings-nav hoist applied. AppSidebarLayout now renders SettingsSidebarNav
for both sidebars, so the legacy one no longer renders it itself.
forkSurfaceExistence, the fork's anti-stack-drop net, was retargeted at the
renamed files and ids rather than relaxed: all 17 assertions still run, and
they are what caught LegacySidebar initially being upstream's v1 rather than
the fork's.
Other resolutions:
- GitManager: upstream's per-branch exponential backoff for rate-limited PR
lookups (pingdotgg#5673) with the fork's terminal-state freeze helper kept.
- Composer: pingdotgg#5554 shows Stop while input is pending, which is exactly what the
fork's shouldShowComposerInterruptAction suppressed; the predicate and its
tests are retired rather than merged.
- PreviewView: the fork's resolveNavigableUrl (asks the environment about
tailnet routing) keeps resolving, with upstream's browser-history recording
(pingdotgg#5270) layered on the successful-navigation path.
- Settings: sidebarV2Enabled / sidebarV2ConfiguredByUser and
enableAssistantStreaming are retired in favour of upstream's fresh keys
(legacySidebarEnabled, enableLegacyTokenStreaming), which deliberately reset
prior opt-ins; the mobile list toggle inverts the same way, so HomeScreen now
reads through resolveThreadListV2Enabled.
- .github/VOUCHED.td stays deleted: it is upstream's contributor-vouching file.
Adversarial review caught one surface the key migration missed: the mobile
ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled, so
the iPad/split list would have stayed on the legacy layout with no setting able
to change it, disagreeing with Home. It now reads through
resolveThreadListV2Enabled like HomeScreen.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 9bbb0a0 into fork/devAug 8, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 8, 2026
Adopts the three upstream commits after #381: a cross-environment usage page
reading provider transcripts (pingdotgg#5684), its chart fix (pingdotgg#5697), and one mobile
sheet for model and thread settings (pingdotgg#5625).
Resolutions:
- server.ts / ws.ts / client-runtime state: upstream's UsageService and its
usageSummary atom family are additive next to the fork's diagnostics services
(HostResourceProbe, ProcessResourceMonitor, TraceDiagnostics, BackgroundPolicy)
and hostResourceSnapshot family — unioned.
- ThreadComposer: pingdotgg#5625 folds the model picker and provider options into a
single settings sheet, replacing the fork's ControlPillMenu. The sheet is
adopted, and the fork's usage signal rides on it: the trigger keeps
ProviderUsageIcon with the live marker rather than upstream's plain
ProviderIcon, so quota state stays visible at a glance. The fork-only
collapsed-composer pill (upstream has none) now opens the same sheet instead
of the retired menu.
Adversarial review caught that retiring the model menu also orphaned the fork's
numeric usage note: the marker survived on the trigger icon but the quota
percentage the menu rows carried had no home. It now hangs off the trigger
label, so both halves of the fork's usage signal survive the consolidation.
The plain ProviderIcon import went with upstream's replaced icon.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@patroza@chrisdeeming@maria-rcks@caezium@ipanasenko@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

sync(upstream): merge upstream/main 064041072 into fork/dev - #381

Merged
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072
Aug 8, 2026
Merged

sync(upstream): merge upstream/main 064041072 into fork/dev#381
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 064041072 — the thirteen commits after #379, headlined by
pingdotgg#5672 making sidebar v2 the default.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
064041072fix(desktop): zoom shortcuts no longer die when the preview browser has focus (pingdotgg#5691)
2c7267ad4fix(server): stop the reaper from silently killing live background subagents (pingdotgg#5677)
daf8ee0b2fix(web): inherit terminal size in simple typography (pingdotgg#5628)
ed886fe18fix(web): delay transient reconnect warnings (pingdotgg#5670)
4eaf5ef8bfix(server): stop PR status lookups amplifying GitHub rate limits (pingdotgg#5673)
0de954073feat: sidebar v2 is now the default sidebar (pingdotgg#5672)
31891a1a0feat(web): fold plan mode and token-by-token output into Legacy features (pingdotgg#5664)
45d9aa90bfix(web): show Stop button while input is pending (pingdotgg#5554)
7a84f6cf1fix(web): reconnect the composer seam for remote non-Git projects (pingdotgg#5633)
f0fb406acfeat(web): make sidebar artwork theme-aware (pingdotgg#5636)
72d673a85feat(desktop): remember recently used sites in the Browser panel (pingdotgg#5270)
82406bce9, e2cd2383cchore: vouch contributors

The hard part: a rename git could not follow

pingdotgg#5672 is a file-level restructure — upstream renamed the classic sidebar to
LegacySidebar.tsx, moved SidebarV2.tsx's content into Sidebar.tsx, and deleted
SidebarV2.tsx. Because this fork had heavily modified both files, git saw a
modify/delete pair and gave up on rename detection, leaving 23 conflict hunks in the wrong file.

Each was therefore merged three-way by hand, against the merge-base:

Result= fork content+ upstream delta
Sidebar.tsxthe fork's SidebarV2.tsx (multi-env + ownership filters, identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread + regenerating-title chrome, settled shelves)pingdotgg#5672's rename sweep — SidebarV2*Sidebar*, group/v2-rowgroup/sidebar-row, sidebar-v2-* test ids — plus aria-busy on rows
LegacySidebar.tsxthe fork's old Sidebar.tsxupstream's rename + settings-nav hoist

AppSidebarLayout now renders SettingsSidebarNav for both sidebars, so neither renders it
itself — verified there is exactly one mount on the settings route and none elsewhere.

forkSurfaceExistence — the fork's anti-stack-drop net — was retargeted, not relaxed. All 17
assertions still run against the renamed files and ids, and they are what caught my first attempt
shipping upstream's v1 as LegacySidebar.tsx instead of the fork's (which would have silently
dropped the settled-shelf chrome, composer draft marks and provider usage dots from the legacy
sidebar).

Other resolutions

WhereSituationResolution
GitManagerpingdotgg#5673 replaces the flat 20s failure TTL with per-branch exponential backoff, because a rate-limited poller was re-asking faster than a healthy oneupstream's backoff adopted; the fork's terminal-state PR freeze kept alongside it
ComposerPrimaryActionspingdotgg#5554 shows Stop while input is pending — precisely what the fork's shouldShowComposerInterruptAction suppressedupstream's behaviour adopted; the superseded predicate and its tests retired, not merged
PreviewViewthe fork's resolveNavigableUrl asks the environment about tailnet routing; upstream adds browser history (pingdotgg#5270)fork resolution kept, history recorded only on successful navigation
settings keyssidebarV2Enabled/sidebarV2ConfiguredByUserlegacySidebarEnabled; enableAssistantStreamingenableLegacyTokenStreaming; mobile threadListV2EnabledlegacyThreadListEnabled. All are deliberately fresh keys so decoding drops the old ones and prior opt-ins resetadopted; consumers migrated to the new resolvers
.github/VOUCHED.tdupstream's contributor-vouching file, deleted by this forkdeletion kept

Adversarial review

grok-4.5 reported the sidebar hand-merge, settings migrations, settings-nav hoist, GitManager,
composer, preview and forkSurfaceExistence all clean — and found one HIGH:

FindingDisposition
HIGH — the mobile ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled. I migrated HomeScreen but missed this one, so the iPad/split list would have stayed on the legacy layout with no setting able to change it, disagreeing with HomeFixed. It now reads through resolveThreadListV2Enabled exactly like HomeScreen

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,288 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.

Note

#376 (PR-badge fallback for prNNNN checkouts) touches findLatestPrForHeadContext in
GitManager.ts, which pingdotgg#5673 also rewrites. It will need a rebase after this lands.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

t3-codeBotand others added 14 commits August 7, 2026 14:29
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…res (pingdotgg#5664)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ngdotgg#5673)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…bagents (pingdotgg#5677)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…as focus (pingdotgg#5691)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the thirteen upstream commits after #379. The headline is pingdotgg#5672 making
sidebar v2 the default, which is a file-level restructure: upstream renamed the
classic sidebar to LegacySidebar.tsx and moved v2's content into Sidebar.tsx,
deleting SidebarV2.tsx.
Git could not follow either rename because both sides had changed both files,
so each was merged three-way by hand:
- Sidebar.tsx = the fork's SidebarV2.tsx (multi-env and ownership filters,
identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread
and regenerating-title chrome) with upstream's pingdotgg#5672 delta applied. That
delta is a rename sweep — SidebarV2* → Sidebar*, group/v2-row →
group/sidebar-row, sidebar-v2-* test ids — plus aria-busy on the rows.
- LegacySidebar.tsx = the fork's old Sidebar.tsx with upstream's rename and
settings-nav hoist applied. AppSidebarLayout now renders SettingsSidebarNav
for both sidebars, so the legacy one no longer renders it itself.
forkSurfaceExistence, the fork's anti-stack-drop net, was retargeted at the
renamed files and ids rather than relaxed: all 17 assertions still run, and
they are what caught LegacySidebar initially being upstream's v1 rather than
the fork's.
Other resolutions:
- GitManager: upstream's per-branch exponential backoff for rate-limited PR
lookups (pingdotgg#5673) with the fork's terminal-state freeze helper kept.
- Composer: pingdotgg#5554 shows Stop while input is pending, which is exactly what the
fork's shouldShowComposerInterruptAction suppressed; the predicate and its
tests are retired rather than merged.
- PreviewView: the fork's resolveNavigableUrl (asks the environment about
tailnet routing) keeps resolving, with upstream's browser-history recording
(pingdotgg#5270) layered on the successful-navigation path.
- Settings: sidebarV2Enabled / sidebarV2ConfiguredByUser and
enableAssistantStreaming are retired in favour of upstream's fresh keys
(legacySidebarEnabled, enableLegacyTokenStreaming), which deliberately reset
prior opt-ins; the mobile list toggle inverts the same way, so HomeScreen now
reads through resolveThreadListV2Enabled.
- .github/VOUCHED.td stays deleted: it is upstream's contributor-vouching file.
Adversarial review caught one surface the key migration missed: the mobile
ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled, so
the iPad/split list would have stayed on the legacy layout with no setting able
to change it, disagreeing with Home. It now reads through
resolveThreadListV2Enabled like HomeScreen.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 9bbb0a0 into fork/devAug 8, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 8, 2026
Adopts the three upstream commits after #381: a cross-environment usage page
reading provider transcripts (pingdotgg#5684), its chart fix (pingdotgg#5697), and one mobile
sheet for model and thread settings (pingdotgg#5625).
Resolutions:
- server.ts / ws.ts / client-runtime state: upstream's UsageService and its
usageSummary atom family are additive next to the fork's diagnostics services
(HostResourceProbe, ProcessResourceMonitor, TraceDiagnostics, BackgroundPolicy)
and hostResourceSnapshot family — unioned.
- ThreadComposer: pingdotgg#5625 folds the model picker and provider options into a
single settings sheet, replacing the fork's ControlPillMenu. The sheet is
adopted, and the fork's usage signal rides on it: the trigger keeps
ProviderUsageIcon with the live marker rather than upstream's plain
ProviderIcon, so quota state stays visible at a glance. The fork-only
collapsed-composer pill (upstream has none) now opens the same sheet instead
of the retired menu.
Adversarial review caught that retiring the model menu also orphaned the fork's
numeric usage note: the marker survived on the trigger icon but the quota
percentage the menu rows carried had no home. It now hangs off the trigger
label, so both halves of the fork's usage signal survive the consolidation.
The plain ProviderIcon import went with upstream's replaced icon.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@patroza@chrisdeeming@maria-rcks@caezium@ipanasenko@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

sync(upstream): merge upstream/main 064041072 into fork/dev - #381

Merged
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072
Aug 8, 2026
Merged

sync(upstream): merge upstream/main 064041072 into fork/dev#381
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 064041072 — the thirteen commits after #379, headlined by
pingdotgg#5672 making sidebar v2 the default.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
064041072fix(desktop): zoom shortcuts no longer die when the preview browser has focus (pingdotgg#5691)
2c7267ad4fix(server): stop the reaper from silently killing live background subagents (pingdotgg#5677)
daf8ee0b2fix(web): inherit terminal size in simple typography (pingdotgg#5628)
ed886fe18fix(web): delay transient reconnect warnings (pingdotgg#5670)
4eaf5ef8bfix(server): stop PR status lookups amplifying GitHub rate limits (pingdotgg#5673)
0de954073feat: sidebar v2 is now the default sidebar (pingdotgg#5672)
31891a1a0feat(web): fold plan mode and token-by-token output into Legacy features (pingdotgg#5664)
45d9aa90bfix(web): show Stop button while input is pending (pingdotgg#5554)
7a84f6cf1fix(web): reconnect the composer seam for remote non-Git projects (pingdotgg#5633)
f0fb406acfeat(web): make sidebar artwork theme-aware (pingdotgg#5636)
72d673a85feat(desktop): remember recently used sites in the Browser panel (pingdotgg#5270)
82406bce9, e2cd2383cchore: vouch contributors

The hard part: a rename git could not follow

pingdotgg#5672 is a file-level restructure — upstream renamed the classic sidebar to
LegacySidebar.tsx, moved SidebarV2.tsx's content into Sidebar.tsx, and deleted
SidebarV2.tsx. Because this fork had heavily modified both files, git saw a
modify/delete pair and gave up on rename detection, leaving 23 conflict hunks in the wrong file.

Each was therefore merged three-way by hand, against the merge-base:

Result= fork content+ upstream delta
Sidebar.tsxthe fork's SidebarV2.tsx (multi-env + ownership filters, identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread + regenerating-title chrome, settled shelves)pingdotgg#5672's rename sweep — SidebarV2*Sidebar*, group/v2-rowgroup/sidebar-row, sidebar-v2-* test ids — plus aria-busy on rows
LegacySidebar.tsxthe fork's old Sidebar.tsxupstream's rename + settings-nav hoist

AppSidebarLayout now renders SettingsSidebarNav for both sidebars, so neither renders it
itself — verified there is exactly one mount on the settings route and none elsewhere.

forkSurfaceExistence — the fork's anti-stack-drop net — was retargeted, not relaxed. All 17
assertions still run against the renamed files and ids, and they are what caught my first attempt
shipping upstream's v1 as LegacySidebar.tsx instead of the fork's (which would have silently
dropped the settled-shelf chrome, composer draft marks and provider usage dots from the legacy
sidebar).

Other resolutions

WhereSituationResolution
GitManagerpingdotgg#5673 replaces the flat 20s failure TTL with per-branch exponential backoff, because a rate-limited poller was re-asking faster than a healthy oneupstream's backoff adopted; the fork's terminal-state PR freeze kept alongside it
ComposerPrimaryActionspingdotgg#5554 shows Stop while input is pending — precisely what the fork's shouldShowComposerInterruptAction suppressedupstream's behaviour adopted; the superseded predicate and its tests retired, not merged
PreviewViewthe fork's resolveNavigableUrl asks the environment about tailnet routing; upstream adds browser history (pingdotgg#5270)fork resolution kept, history recorded only on successful navigation
settings keyssidebarV2Enabled/sidebarV2ConfiguredByUserlegacySidebarEnabled; enableAssistantStreamingenableLegacyTokenStreaming; mobile threadListV2EnabledlegacyThreadListEnabled. All are deliberately fresh keys so decoding drops the old ones and prior opt-ins resetadopted; consumers migrated to the new resolvers
.github/VOUCHED.tdupstream's contributor-vouching file, deleted by this forkdeletion kept

Adversarial review

grok-4.5 reported the sidebar hand-merge, settings migrations, settings-nav hoist, GitManager,
composer, preview and forkSurfaceExistence all clean — and found one HIGH:

FindingDisposition
HIGH — the mobile ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled. I migrated HomeScreen but missed this one, so the iPad/split list would have stayed on the legacy layout with no setting able to change it, disagreeing with HomeFixed. It now reads through resolveThreadListV2Enabled exactly like HomeScreen

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,288 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.

Note

#376 (PR-badge fallback for prNNNN checkouts) touches findLatestPrForHeadContext in
GitManager.ts, which pingdotgg#5673 also rewrites. It will need a rebase after this lands.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

t3-codeBotand others added 14 commits August 7, 2026 14:29
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…res (pingdotgg#5664)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ngdotgg#5673)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…bagents (pingdotgg#5677)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…as focus (pingdotgg#5691)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the thirteen upstream commits after #379. The headline is pingdotgg#5672 making
sidebar v2 the default, which is a file-level restructure: upstream renamed the
classic sidebar to LegacySidebar.tsx and moved v2's content into Sidebar.tsx,
deleting SidebarV2.tsx.
Git could not follow either rename because both sides had changed both files,
so each was merged three-way by hand:
- Sidebar.tsx = the fork's SidebarV2.tsx (multi-env and ownership filters,
identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread
and regenerating-title chrome) with upstream's pingdotgg#5672 delta applied. That
delta is a rename sweep — SidebarV2* → Sidebar*, group/v2-row →
group/sidebar-row, sidebar-v2-* test ids — plus aria-busy on the rows.
- LegacySidebar.tsx = the fork's old Sidebar.tsx with upstream's rename and
settings-nav hoist applied. AppSidebarLayout now renders SettingsSidebarNav
for both sidebars, so the legacy one no longer renders it itself.
forkSurfaceExistence, the fork's anti-stack-drop net, was retargeted at the
renamed files and ids rather than relaxed: all 17 assertions still run, and
they are what caught LegacySidebar initially being upstream's v1 rather than
the fork's.
Other resolutions:
- GitManager: upstream's per-branch exponential backoff for rate-limited PR
lookups (pingdotgg#5673) with the fork's terminal-state freeze helper kept.
- Composer: pingdotgg#5554 shows Stop while input is pending, which is exactly what the
fork's shouldShowComposerInterruptAction suppressed; the predicate and its
tests are retired rather than merged.
- PreviewView: the fork's resolveNavigableUrl (asks the environment about
tailnet routing) keeps resolving, with upstream's browser-history recording
(pingdotgg#5270) layered on the successful-navigation path.
- Settings: sidebarV2Enabled / sidebarV2ConfiguredByUser and
enableAssistantStreaming are retired in favour of upstream's fresh keys
(legacySidebarEnabled, enableLegacyTokenStreaming), which deliberately reset
prior opt-ins; the mobile list toggle inverts the same way, so HomeScreen now
reads through resolveThreadListV2Enabled.
- .github/VOUCHED.td stays deleted: it is upstream's contributor-vouching file.
Adversarial review caught one surface the key migration missed: the mobile
ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled, so
the iPad/split list would have stayed on the legacy layout with no setting able
to change it, disagreeing with Home. It now reads through
resolveThreadListV2Enabled like HomeScreen.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 9bbb0a0 into fork/devAug 8, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 8, 2026
Adopts the three upstream commits after #381: a cross-environment usage page
reading provider transcripts (pingdotgg#5684), its chart fix (pingdotgg#5697), and one mobile
sheet for model and thread settings (pingdotgg#5625).
Resolutions:
- server.ts / ws.ts / client-runtime state: upstream's UsageService and its
usageSummary atom family are additive next to the fork's diagnostics services
(HostResourceProbe, ProcessResourceMonitor, TraceDiagnostics, BackgroundPolicy)
and hostResourceSnapshot family — unioned.
- ThreadComposer: pingdotgg#5625 folds the model picker and provider options into a
single settings sheet, replacing the fork's ControlPillMenu. The sheet is
adopted, and the fork's usage signal rides on it: the trigger keeps
ProviderUsageIcon with the live marker rather than upstream's plain
ProviderIcon, so quota state stays visible at a glance. The fork-only
collapsed-composer pill (upstream has none) now opens the same sheet instead
of the retired menu.
Adversarial review caught that retiring the model menu also orphaned the fork's
numeric usage note: the marker survived on the trigger icon but the quota
percentage the menu rows carried had no home. It now hangs off the trigger
label, so both halves of the fork's usage signal survive the consolidation.
The plain ProviderIcon import went with upstream's replaced icon.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@patroza@chrisdeeming@maria-rcks@caezium@ipanasenko@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

sync(upstream): merge upstream/main 064041072 into fork/dev - #381

Merged
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072
Aug 8, 2026
Merged

sync(upstream): merge upstream/main 064041072 into fork/dev#381
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 064041072 — the thirteen commits after #379, headlined by
pingdotgg#5672 making sidebar v2 the default.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
064041072fix(desktop): zoom shortcuts no longer die when the preview browser has focus (pingdotgg#5691)
2c7267ad4fix(server): stop the reaper from silently killing live background subagents (pingdotgg#5677)
daf8ee0b2fix(web): inherit terminal size in simple typography (pingdotgg#5628)
ed886fe18fix(web): delay transient reconnect warnings (pingdotgg#5670)
4eaf5ef8bfix(server): stop PR status lookups amplifying GitHub rate limits (pingdotgg#5673)
0de954073feat: sidebar v2 is now the default sidebar (pingdotgg#5672)
31891a1a0feat(web): fold plan mode and token-by-token output into Legacy features (pingdotgg#5664)
45d9aa90bfix(web): show Stop button while input is pending (pingdotgg#5554)
7a84f6cf1fix(web): reconnect the composer seam for remote non-Git projects (pingdotgg#5633)
f0fb406acfeat(web): make sidebar artwork theme-aware (pingdotgg#5636)
72d673a85feat(desktop): remember recently used sites in the Browser panel (pingdotgg#5270)
82406bce9, e2cd2383cchore: vouch contributors

The hard part: a rename git could not follow

pingdotgg#5672 is a file-level restructure — upstream renamed the classic sidebar to
LegacySidebar.tsx, moved SidebarV2.tsx's content into Sidebar.tsx, and deleted
SidebarV2.tsx. Because this fork had heavily modified both files, git saw a
modify/delete pair and gave up on rename detection, leaving 23 conflict hunks in the wrong file.

Each was therefore merged three-way by hand, against the merge-base:

Result= fork content+ upstream delta
Sidebar.tsxthe fork's SidebarV2.tsx (multi-env + ownership filters, identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread + regenerating-title chrome, settled shelves)pingdotgg#5672's rename sweep — SidebarV2*Sidebar*, group/v2-rowgroup/sidebar-row, sidebar-v2-* test ids — plus aria-busy on rows
LegacySidebar.tsxthe fork's old Sidebar.tsxupstream's rename + settings-nav hoist

AppSidebarLayout now renders SettingsSidebarNav for both sidebars, so neither renders it
itself — verified there is exactly one mount on the settings route and none elsewhere.

forkSurfaceExistence — the fork's anti-stack-drop net — was retargeted, not relaxed. All 17
assertions still run against the renamed files and ids, and they are what caught my first attempt
shipping upstream's v1 as LegacySidebar.tsx instead of the fork's (which would have silently
dropped the settled-shelf chrome, composer draft marks and provider usage dots from the legacy
sidebar).

Other resolutions

WhereSituationResolution
GitManagerpingdotgg#5673 replaces the flat 20s failure TTL with per-branch exponential backoff, because a rate-limited poller was re-asking faster than a healthy oneupstream's backoff adopted; the fork's terminal-state PR freeze kept alongside it
ComposerPrimaryActionspingdotgg#5554 shows Stop while input is pending — precisely what the fork's shouldShowComposerInterruptAction suppressedupstream's behaviour adopted; the superseded predicate and its tests retired, not merged
PreviewViewthe fork's resolveNavigableUrl asks the environment about tailnet routing; upstream adds browser history (pingdotgg#5270)fork resolution kept, history recorded only on successful navigation
settings keyssidebarV2Enabled/sidebarV2ConfiguredByUserlegacySidebarEnabled; enableAssistantStreamingenableLegacyTokenStreaming; mobile threadListV2EnabledlegacyThreadListEnabled. All are deliberately fresh keys so decoding drops the old ones and prior opt-ins resetadopted; consumers migrated to the new resolvers
.github/VOUCHED.tdupstream's contributor-vouching file, deleted by this forkdeletion kept

Adversarial review

grok-4.5 reported the sidebar hand-merge, settings migrations, settings-nav hoist, GitManager,
composer, preview and forkSurfaceExistence all clean — and found one HIGH:

FindingDisposition
HIGH — the mobile ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled. I migrated HomeScreen but missed this one, so the iPad/split list would have stayed on the legacy layout with no setting able to change it, disagreeing with HomeFixed. It now reads through resolveThreadListV2Enabled exactly like HomeScreen

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,288 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.

Note

#376 (PR-badge fallback for prNNNN checkouts) touches findLatestPrForHeadContext in
GitManager.ts, which pingdotgg#5673 also rewrites. It will need a rebase after this lands.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

t3-codeBotand others added 14 commits August 7, 2026 14:29
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…res (pingdotgg#5664)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ngdotgg#5673)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…bagents (pingdotgg#5677)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…as focus (pingdotgg#5691)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the thirteen upstream commits after #379. The headline is pingdotgg#5672 making
sidebar v2 the default, which is a file-level restructure: upstream renamed the
classic sidebar to LegacySidebar.tsx and moved v2's content into Sidebar.tsx,
deleting SidebarV2.tsx.
Git could not follow either rename because both sides had changed both files,
so each was merged three-way by hand:
- Sidebar.tsx = the fork's SidebarV2.tsx (multi-env and ownership filters,
identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread
and regenerating-title chrome) with upstream's pingdotgg#5672 delta applied. That
delta is a rename sweep — SidebarV2* → Sidebar*, group/v2-row →
group/sidebar-row, sidebar-v2-* test ids — plus aria-busy on the rows.
- LegacySidebar.tsx = the fork's old Sidebar.tsx with upstream's rename and
settings-nav hoist applied. AppSidebarLayout now renders SettingsSidebarNav
for both sidebars, so the legacy one no longer renders it itself.
forkSurfaceExistence, the fork's anti-stack-drop net, was retargeted at the
renamed files and ids rather than relaxed: all 17 assertions still run, and
they are what caught LegacySidebar initially being upstream's v1 rather than
the fork's.
Other resolutions:
- GitManager: upstream's per-branch exponential backoff for rate-limited PR
lookups (pingdotgg#5673) with the fork's terminal-state freeze helper kept.
- Composer: pingdotgg#5554 shows Stop while input is pending, which is exactly what the
fork's shouldShowComposerInterruptAction suppressed; the predicate and its
tests are retired rather than merged.
- PreviewView: the fork's resolveNavigableUrl (asks the environment about
tailnet routing) keeps resolving, with upstream's browser-history recording
(pingdotgg#5270) layered on the successful-navigation path.
- Settings: sidebarV2Enabled / sidebarV2ConfiguredByUser and
enableAssistantStreaming are retired in favour of upstream's fresh keys
(legacySidebarEnabled, enableLegacyTokenStreaming), which deliberately reset
prior opt-ins; the mobile list toggle inverts the same way, so HomeScreen now
reads through resolveThreadListV2Enabled.
- .github/VOUCHED.td stays deleted: it is upstream's contributor-vouching file.
Adversarial review caught one surface the key migration missed: the mobile
ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled, so
the iPad/split list would have stayed on the legacy layout with no setting able
to change it, disagreeing with Home. It now reads through
resolveThreadListV2Enabled like HomeScreen.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 9bbb0a0 into fork/devAug 8, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 8, 2026
Adopts the three upstream commits after #381: a cross-environment usage page
reading provider transcripts (pingdotgg#5684), its chart fix (pingdotgg#5697), and one mobile
sheet for model and thread settings (pingdotgg#5625).
Resolutions:
- server.ts / ws.ts / client-runtime state: upstream's UsageService and its
usageSummary atom family are additive next to the fork's diagnostics services
(HostResourceProbe, ProcessResourceMonitor, TraceDiagnostics, BackgroundPolicy)
and hostResourceSnapshot family — unioned.
- ThreadComposer: pingdotgg#5625 folds the model picker and provider options into a
single settings sheet, replacing the fork's ControlPillMenu. The sheet is
adopted, and the fork's usage signal rides on it: the trigger keeps
ProviderUsageIcon with the live marker rather than upstream's plain
ProviderIcon, so quota state stays visible at a glance. The fork-only
collapsed-composer pill (upstream has none) now opens the same sheet instead
of the retired menu.
Adversarial review caught that retiring the model menu also orphaned the fork's
numeric usage note: the marker survived on the trigger icon but the quota
percentage the menu rows carried had no home. It now hangs off the trigger
label, so both halves of the fork's usage signal survive the consolidation.
The plain ProviderIcon import went with upstream's replaced icon.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@patroza@chrisdeeming@maria-rcks@caezium@ipanasenko@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

sync(upstream): merge upstream/main 064041072 into fork/dev - #381

Merged
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072
Aug 8, 2026
Merged

sync(upstream): merge upstream/main 064041072 into fork/dev#381
patroza merged 14 commits into
fork/devfrom
sync/upstream-064041072

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 064041072 — the thirteen commits after #379, headlined by
pingdotgg#5672 making sidebar v2 the default.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
064041072fix(desktop): zoom shortcuts no longer die when the preview browser has focus (pingdotgg#5691)
2c7267ad4fix(server): stop the reaper from silently killing live background subagents (pingdotgg#5677)
daf8ee0b2fix(web): inherit terminal size in simple typography (pingdotgg#5628)
ed886fe18fix(web): delay transient reconnect warnings (pingdotgg#5670)
4eaf5ef8bfix(server): stop PR status lookups amplifying GitHub rate limits (pingdotgg#5673)
0de954073feat: sidebar v2 is now the default sidebar (pingdotgg#5672)
31891a1a0feat(web): fold plan mode and token-by-token output into Legacy features (pingdotgg#5664)
45d9aa90bfix(web): show Stop button while input is pending (pingdotgg#5554)
7a84f6cf1fix(web): reconnect the composer seam for remote non-Git projects (pingdotgg#5633)
f0fb406acfeat(web): make sidebar artwork theme-aware (pingdotgg#5636)
72d673a85feat(desktop): remember recently used sites in the Browser panel (pingdotgg#5270)
82406bce9, e2cd2383cchore: vouch contributors

The hard part: a rename git could not follow

pingdotgg#5672 is a file-level restructure — upstream renamed the classic sidebar to
LegacySidebar.tsx, moved SidebarV2.tsx's content into Sidebar.tsx, and deleted
SidebarV2.tsx. Because this fork had heavily modified both files, git saw a
modify/delete pair and gave up on rename detection, leaving 23 conflict hunks in the wrong file.

Each was therefore merged three-way by hand, against the merge-base:

Result= fork content+ upstream delta
Sidebar.tsxthe fork's SidebarV2.tsx (multi-env + ownership filters, identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread + regenerating-title chrome, settled shelves)pingdotgg#5672's rename sweep — SidebarV2*Sidebar*, group/v2-rowgroup/sidebar-row, sidebar-v2-* test ids — plus aria-busy on rows
LegacySidebar.tsxthe fork's old Sidebar.tsxupstream's rename + settings-nav hoist

AppSidebarLayout now renders SettingsSidebarNav for both sidebars, so neither renders it
itself — verified there is exactly one mount on the settings route and none elsewhere.

forkSurfaceExistence — the fork's anti-stack-drop net — was retargeted, not relaxed. All 17
assertions still run against the renamed files and ids, and they are what caught my first attempt
shipping upstream's v1 as LegacySidebar.tsx instead of the fork's (which would have silently
dropped the settled-shelf chrome, composer draft marks and provider usage dots from the legacy
sidebar).

Other resolutions

WhereSituationResolution
GitManagerpingdotgg#5673 replaces the flat 20s failure TTL with per-branch exponential backoff, because a rate-limited poller was re-asking faster than a healthy oneupstream's backoff adopted; the fork's terminal-state PR freeze kept alongside it
ComposerPrimaryActionspingdotgg#5554 shows Stop while input is pending — precisely what the fork's shouldShowComposerInterruptAction suppressedupstream's behaviour adopted; the superseded predicate and its tests retired, not merged
PreviewViewthe fork's resolveNavigableUrl asks the environment about tailnet routing; upstream adds browser history (pingdotgg#5270)fork resolution kept, history recorded only on successful navigation
settings keyssidebarV2Enabled/sidebarV2ConfiguredByUserlegacySidebarEnabled; enableAssistantStreamingenableLegacyTokenStreaming; mobile threadListV2EnabledlegacyThreadListEnabled. All are deliberately fresh keys so decoding drops the old ones and prior opt-ins resetadopted; consumers migrated to the new resolvers
.github/VOUCHED.tdupstream's contributor-vouching file, deleted by this forkdeletion kept

Adversarial review

grok-4.5 reported the sidebar hand-merge, settings migrations, settings-nav hoist, GitManager,
composer, preview and forkSurfaceExistence all clean — and found one HIGH:

FindingDisposition
HIGH — the mobile ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled. I migrated HomeScreen but missed this one, so the iPad/split list would have stayed on the legacy layout with no setting able to change it, disagreeing with HomeFixed. It now reads through resolveThreadListV2Enabled exactly like HomeScreen

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,288 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.

Note

#376 (PR-badge fallback for prNNNN checkouts) touches findLatestPrForHeadContext in
GitManager.ts, which pingdotgg#5673 also rewrites. It will need a rebase after this lands.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

t3-codeBotand others added 14 commits August 7, 2026 14:29
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…res (pingdotgg#5664)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ngdotgg#5673)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
…bagents (pingdotgg#5677)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…as focus (pingdotgg#5691)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the thirteen upstream commits after #379. The headline is pingdotgg#5672 making
sidebar v2 the default, which is a file-level restructure: upstream renamed the
classic sidebar to LegacySidebar.tsx and moved v2's content into Sidebar.tsx,
deleting SidebarV2.tsx.
Git could not follow either rename because both sides had changed both files,
so each was merged three-way by hand:
- Sidebar.tsx = the fork's SidebarV2.tsx (multi-env and ownership filters,
identity marks, budgeted listStatus, pin ordering, copy-thread-id, unread
and regenerating-title chrome) with upstream's pingdotgg#5672 delta applied. That
delta is a rename sweep — SidebarV2* → Sidebar*, group/v2-row →
group/sidebar-row, sidebar-v2-* test ids — plus aria-busy on the rows.
- LegacySidebar.tsx = the fork's old Sidebar.tsx with upstream's rename and
settings-nav hoist applied. AppSidebarLayout now renders SettingsSidebarNav
for both sidebars, so the legacy one no longer renders it itself.
forkSurfaceExistence, the fork's anti-stack-drop net, was retargeted at the
renamed files and ids rather than relaxed: all 17 assertions still run, and
they are what caught LegacySidebar initially being upstream's v1 rather than
the fork's.
Other resolutions:
- GitManager: upstream's per-branch exponential backoff for rate-limited PR
lookups (pingdotgg#5673) with the fork's terminal-state freeze helper kept.
- Composer: pingdotgg#5554 shows Stop while input is pending, which is exactly what the
fork's shouldShowComposerInterruptAction suppressed; the predicate and its
tests are retired rather than merged.
- PreviewView: the fork's resolveNavigableUrl (asks the environment about
tailnet routing) keeps resolving, with upstream's browser-history recording
(pingdotgg#5270) layered on the successful-navigation path.
- Settings: sidebarV2Enabled / sidebarV2ConfiguredByUser and
enableAssistantStreaming are retired in favour of upstream's fresh keys
(legacySidebarEnabled, enableLegacyTokenStreaming), which deliberately reset
prior opt-ins; the mobile list toggle inverts the same way, so HomeScreen now
reads through resolveThreadListV2Enabled.
- .github/VOUCHED.td stays deleted: it is upstream's contributor-vouching file.
Adversarial review caught one surface the key migration missed: the mobile
ThreadNavigationSidebar still gated v2 on the retired threadListV2Enabled, so
the iPad/split list would have stayed on the legacy layout with no setting able
to change it, disagreeing with Home. It now reads through
resolveThreadListV2Enabled like HomeScreen.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 9bbb0a0 into fork/devAug 8, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 8, 2026
Adopts the three upstream commits after #381: a cross-environment usage page
reading provider transcripts (pingdotgg#5684), its chart fix (pingdotgg#5697), and one mobile
sheet for model and thread settings (pingdotgg#5625).
Resolutions:
- server.ts / ws.ts / client-runtime state: upstream's UsageService and its
usageSummary atom family are additive next to the fork's diagnostics services
(HostResourceProbe, ProcessResourceMonitor, TraceDiagnostics, BackgroundPolicy)
and hostResourceSnapshot family — unioned.
- ThreadComposer: pingdotgg#5625 folds the model picker and provider options into a
single settings sheet, replacing the fork's ControlPillMenu. The sheet is
adopted, and the fork's usage signal rides on it: the trigger keeps
ProviderUsageIcon with the live marker rather than upstream's plain
ProviderIcon, so quota state stays visible at a glance. The fork-only
collapsed-composer pill (upstream has none) now opens the same sheet instead
of the retired menu.
Adversarial review caught that retiring the model menu also orphaned the fork's
numeric usage note: the marker survived on the trigger icon but the quota
percentage the menu rows carried had no home. It now hangs off the trigger
label, so both halves of the fork's usage signal survive the consolidation.
The plain ProviderIcon import went with upstream's replaced icon.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@patroza@chrisdeeming@maria-rcks@caezium@ipanasenko@t3dotgg