sync(upstream): merge upstream/main 23f0a1ae3 into fork/dev - #374

Merged
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 23f0a1ae3 into fork/dev#374
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 23f0a1ae3 — the six commits after #372, headlined by per-device provider
settings (pingdotgg#4479)
and the modular theme library + theme editor (pingdotgg#5226).

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
23f0a1ae3fix(web): reading a thread clears Done; Woke is dismissible (pingdotgg#5579)
85b1734d4feat(web): add modular theme library (pingdotgg#5226)
3ffe84f96fix(web): stop the sidebar "Working" label from pulsing (pingdotgg#5580)
220efad62fix: add missing space before 'GitHub releases page' link on download page (pingdotgg#4511)
b98a0f0d2fix(mobile): invisible T3 Connect devices can now be seen and removed (pingdotgg#5563)
95305c36ffeat(web): per-device provider settings (pingdotgg#4479)

The one real piece of work: the command-palette overlay host

Upstream's new filePicker.toggle (mod+p), projectSearch.toggle (mod+shift+f)
and themeEditor.toggle (mod+alt+shift+t) shortcuts arrive with a rewritten palette that
hosts three overlays (palette · files · content). The fork rewrote that component, so the host was
ported, not taken:

  • the palette reducer gains mode and ToggleMode, and moves to CommandPalette.logic.ts where
    upstream keeps it (so it stays unit-testable);
  • the files/content overlays bring their own CommandDialogPopup instead of the popup being lifted
    out of OpenCommandPaletteDialog, which the fork has heavily customised;
  • Esc inside an overlay returns to command mode rather than dismissing, matching the
    "Esc Back" affordance both overlays render;
  • both overlays are registered as palette actions ("Go to file", "Search project contents"), so they
    are discoverable by search and not only by shortcut.

Without the port those three default keybindings would have been dead on arrival.

Welds found by typecheck and tests, not by conflict markers

WhereDefectResolution
SidebarV2two per-row VCS status queries: upstream's full-mode vcsEnvironment.status auto-merged in above the fork's budgeted listStatus, and upstream's new isWoke reads prState declared in its copyfork's query and its pr/prState hoisted above isWoke; upstream's duplicate dropped. Full mode is one poller per worktree — the storm the fork's list mode exists to avoid
ElectronDialogfork's pickApplication (macOS Open With) and upstream's new pickFiles collided at every declaration site; a naive union fused two error classes, two interfaces, and duplicated confirm/showMessageBoxboth APIs kept, declarations separated, upstream's pickFiles re-indented into the service
keybindings.test.tsthe DEFAULT_BINDINGS fixture kept the fork's list while upstream's new assertions expected the two new chords — tests failed against a fixture that no longer matched shipped defaultsfixture extended with both bindings
Sidebar.tsx (v1)the fork rewrote the v1 body (search + new-thread header row, recency lists); upstream restructured the same region for its own layoutwhole-body alternatives — the fork's kept; upstream's fixedHeader restructure not adopted for v1

Keybinding additions (mod+p, mod+shift+f, mod+alt+shift+t) were checked against the fork's
existing chords, including board.open = mod+t: no collisions.

Adversarial review

grok-4.5 and gpt-5.6-sol both ran over the git show --cc surface with the merged worktree
available. They independently converged on the same finding: the overlay host was only half
ported. All four are fixed in this branch.

FindingDisposition
HIGH (grok) / MED (codex)Esc in files/content closed the whole dialog, contradicting the "Esc Back" affordance the overlays renderFixed.onOpenChange intercepts escape-key while mode !== "command" and switches back instead
MED (both) — the "Go to file" / "Search project contents" palette actions were dropped, leaving the overlays shortcut-onlyFixed.openOverlayMode threaded into OpenCommandPaletteDialog; both actions registered
MED (codex) / LOW (grok) — the palette's shortcut resolver lost previewFocus/previewOpen, so customized bindings using those when conditions could not matchFixed. Full context restored, previewOpen derived as upstream does
LOW (both) — upstream's reducer tests vanished when the reducer was inlined into the componentFixed. Reducer moved to CommandPalette.logic.ts and upstream's four reducer tests restored

Both cleared the rest: ElectronDialog (no duplicate declarations, both APIs wired), keybinding
registry/handlers/fixtures agree, and the deliberate listStatus choice plus Done/Woke and
non-pulsing Working semantics are coherent.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,277 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.
  • One upstream test (AddProviderInstanceDialog.environment, new in feat(web): per-device provider settings pingdotgg/t3code#4479) failed once in a full
    workspace run and passed both in isolation and on two subsequent full runs — order-dependent
    flakiness in upstream's own test, not a resolution defect. Flagging rather than papering over it.
  • pnpm-lock.yaml regenerated rather than hand-merged.

Co-authored by @patroza

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

t3dotggand others added 7 commits August 7, 2026 00:57
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
…g#5579)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the six upstream commits after #372: per-device provider settings
(pingdotgg#4479), the modular theme library and theme editor (pingdotgg#5226), Done/Woke sidebar
semantics (pingdotgg#5579), the non-pulsing Working label (pingdotgg#5580), mobile T3 Connect
device cleanup (pingdotgg#5563), and a download-page copy fix (pingdotgg#4511).
Upstream's new filePicker/projectSearch/themeEditor shortcuts arrive with an
overlay-mode host for the command palette. The fork rewrote that component, so
the host was ported rather than taken: the palette reducer gains `mode` and
`ToggleMode`, and the two overlays bring their own popup instead of the popup
being lifted out of OpenCommandPaletteDialog. Without that the new default
keybindings would have been dead.
Welds found by typecheck and tests, not by conflict markers:
- SidebarV2 ended up with two per-row VCS status queries: upstream's full-mode
`vcsEnvironment.status` auto-merged in above the fork's budgeted
`listStatus`. Upstream's new isWoke reads prState, so the fork's query and its
pr/prState derivation are hoisted above it and the duplicate dropped. Keeping
the fork's list mode matters: full mode is one poller per worktree.
- ElectronDialog: the fork's pickApplication and upstream's pickFiles are
independent additions that collided at every declaration site.
- The keybindings test fixture kept the fork's list, silently dropping
upstream's two new bindings while its new assertions expected them.
The v1 sidebar body is a fork rewrite; upstream restructured the same region for
its own layout, so both sides were whole-body alternatives and the fork's is
kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 74a1459 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the three upstream commits after #374: mobile keyboard avoiding
(pingdotgg#5451), dev-runner cold-start speedup (pingdotgg#5584), and rewritten --share
instructions (pingdotgg#5586).
Resolutions: dev-runner.ts unions the fork's METRO_PORT passthrough with
upstream's launcher-env scrubbing (T3_SERVICE_LAUNCHER_CONTEXT /
T3_BOOT_SERVICE_UNIT deletion). AGENTS.md's auto-union dropped upstream's
rewritten "Dev servers" bullets into the fork's ship-gate section; the
share/pairing guidance is folded into the fork's own Dev Servers section
instead, replacing its older --share bullet. Lockfile regenerated.
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.

4 participants

@patroza@t3dotgg@Mateleo@StiensWout
, '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 23f0a1ae3 into fork/dev - #374

Merged
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 23f0a1ae3 into fork/dev#374
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 23f0a1ae3 — the six commits after #372, headlined by per-device provider
settings (pingdotgg#4479)
and the modular theme library + theme editor (pingdotgg#5226).

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
23f0a1ae3fix(web): reading a thread clears Done; Woke is dismissible (pingdotgg#5579)
85b1734d4feat(web): add modular theme library (pingdotgg#5226)
3ffe84f96fix(web): stop the sidebar "Working" label from pulsing (pingdotgg#5580)
220efad62fix: add missing space before 'GitHub releases page' link on download page (pingdotgg#4511)
b98a0f0d2fix(mobile): invisible T3 Connect devices can now be seen and removed (pingdotgg#5563)
95305c36ffeat(web): per-device provider settings (pingdotgg#4479)

The one real piece of work: the command-palette overlay host

Upstream's new filePicker.toggle (mod+p), projectSearch.toggle (mod+shift+f)
and themeEditor.toggle (mod+alt+shift+t) shortcuts arrive with a rewritten palette that
hosts three overlays (palette · files · content). The fork rewrote that component, so the host was
ported, not taken:

  • the palette reducer gains mode and ToggleMode, and moves to CommandPalette.logic.ts where
    upstream keeps it (so it stays unit-testable);
  • the files/content overlays bring their own CommandDialogPopup instead of the popup being lifted
    out of OpenCommandPaletteDialog, which the fork has heavily customised;
  • Esc inside an overlay returns to command mode rather than dismissing, matching the
    "Esc Back" affordance both overlays render;
  • both overlays are registered as palette actions ("Go to file", "Search project contents"), so they
    are discoverable by search and not only by shortcut.

Without the port those three default keybindings would have been dead on arrival.

Welds found by typecheck and tests, not by conflict markers

WhereDefectResolution
SidebarV2two per-row VCS status queries: upstream's full-mode vcsEnvironment.status auto-merged in above the fork's budgeted listStatus, and upstream's new isWoke reads prState declared in its copyfork's query and its pr/prState hoisted above isWoke; upstream's duplicate dropped. Full mode is one poller per worktree — the storm the fork's list mode exists to avoid
ElectronDialogfork's pickApplication (macOS Open With) and upstream's new pickFiles collided at every declaration site; a naive union fused two error classes, two interfaces, and duplicated confirm/showMessageBoxboth APIs kept, declarations separated, upstream's pickFiles re-indented into the service
keybindings.test.tsthe DEFAULT_BINDINGS fixture kept the fork's list while upstream's new assertions expected the two new chords — tests failed against a fixture that no longer matched shipped defaultsfixture extended with both bindings
Sidebar.tsx (v1)the fork rewrote the v1 body (search + new-thread header row, recency lists); upstream restructured the same region for its own layoutwhole-body alternatives — the fork's kept; upstream's fixedHeader restructure not adopted for v1

Keybinding additions (mod+p, mod+shift+f, mod+alt+shift+t) were checked against the fork's
existing chords, including board.open = mod+t: no collisions.

Adversarial review

grok-4.5 and gpt-5.6-sol both ran over the git show --cc surface with the merged worktree
available. They independently converged on the same finding: the overlay host was only half
ported. All four are fixed in this branch.

FindingDisposition
HIGH (grok) / MED (codex)Esc in files/content closed the whole dialog, contradicting the "Esc Back" affordance the overlays renderFixed.onOpenChange intercepts escape-key while mode !== "command" and switches back instead
MED (both) — the "Go to file" / "Search project contents" palette actions were dropped, leaving the overlays shortcut-onlyFixed.openOverlayMode threaded into OpenCommandPaletteDialog; both actions registered
MED (codex) / LOW (grok) — the palette's shortcut resolver lost previewFocus/previewOpen, so customized bindings using those when conditions could not matchFixed. Full context restored, previewOpen derived as upstream does
LOW (both) — upstream's reducer tests vanished when the reducer was inlined into the componentFixed. Reducer moved to CommandPalette.logic.ts and upstream's four reducer tests restored

Both cleared the rest: ElectronDialog (no duplicate declarations, both APIs wired), keybinding
registry/handlers/fixtures agree, and the deliberate listStatus choice plus Done/Woke and
non-pulsing Working semantics are coherent.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,277 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.
  • One upstream test (AddProviderInstanceDialog.environment, new in feat(web): per-device provider settings pingdotgg/t3code#4479) failed once in a full
    workspace run and passed both in isolation and on two subsequent full runs — order-dependent
    flakiness in upstream's own test, not a resolution defect. Flagging rather than papering over it.
  • pnpm-lock.yaml regenerated rather than hand-merged.

Co-authored by @patroza

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

t3dotggand others added 7 commits August 7, 2026 00:57
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
…g#5579)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the six upstream commits after #372: per-device provider settings
(pingdotgg#4479), the modular theme library and theme editor (pingdotgg#5226), Done/Woke sidebar
semantics (pingdotgg#5579), the non-pulsing Working label (pingdotgg#5580), mobile T3 Connect
device cleanup (pingdotgg#5563), and a download-page copy fix (pingdotgg#4511).
Upstream's new filePicker/projectSearch/themeEditor shortcuts arrive with an
overlay-mode host for the command palette. The fork rewrote that component, so
the host was ported rather than taken: the palette reducer gains `mode` and
`ToggleMode`, and the two overlays bring their own popup instead of the popup
being lifted out of OpenCommandPaletteDialog. Without that the new default
keybindings would have been dead.
Welds found by typecheck and tests, not by conflict markers:
- SidebarV2 ended up with two per-row VCS status queries: upstream's full-mode
`vcsEnvironment.status` auto-merged in above the fork's budgeted
`listStatus`. Upstream's new isWoke reads prState, so the fork's query and its
pr/prState derivation are hoisted above it and the duplicate dropped. Keeping
the fork's list mode matters: full mode is one poller per worktree.
- ElectronDialog: the fork's pickApplication and upstream's pickFiles are
independent additions that collided at every declaration site.
- The keybindings test fixture kept the fork's list, silently dropping
upstream's two new bindings while its new assertions expected them.
The v1 sidebar body is a fork rewrite; upstream restructured the same region for
its own layout, so both sides were whole-body alternatives and the fork's is
kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 74a1459 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the three upstream commits after #374: mobile keyboard avoiding
(pingdotgg#5451), dev-runner cold-start speedup (pingdotgg#5584), and rewritten --share
instructions (pingdotgg#5586).
Resolutions: dev-runner.ts unions the fork's METRO_PORT passthrough with
upstream's launcher-env scrubbing (T3_SERVICE_LAUNCHER_CONTEXT /
T3_BOOT_SERVICE_UNIT deletion). AGENTS.md's auto-union dropped upstream's
rewritten "Dev servers" bullets into the fork's ship-gate section; the
share/pairing guidance is folded into the fork's own Dev Servers section
instead, replacing its older --share bullet. Lockfile regenerated.
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.

4 participants

@patroza@t3dotgg@Mateleo@StiensWout
, '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 23f0a1ae3 into fork/dev - #374

Merged
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 23f0a1ae3 into fork/dev#374
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 23f0a1ae3 — the six commits after #372, headlined by per-device provider
settings (pingdotgg#4479)
and the modular theme library + theme editor (pingdotgg#5226).

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
23f0a1ae3fix(web): reading a thread clears Done; Woke is dismissible (pingdotgg#5579)
85b1734d4feat(web): add modular theme library (pingdotgg#5226)
3ffe84f96fix(web): stop the sidebar "Working" label from pulsing (pingdotgg#5580)
220efad62fix: add missing space before 'GitHub releases page' link on download page (pingdotgg#4511)
b98a0f0d2fix(mobile): invisible T3 Connect devices can now be seen and removed (pingdotgg#5563)
95305c36ffeat(web): per-device provider settings (pingdotgg#4479)

The one real piece of work: the command-palette overlay host

Upstream's new filePicker.toggle (mod+p), projectSearch.toggle (mod+shift+f)
and themeEditor.toggle (mod+alt+shift+t) shortcuts arrive with a rewritten palette that
hosts three overlays (palette · files · content). The fork rewrote that component, so the host was
ported, not taken:

  • the palette reducer gains mode and ToggleMode, and moves to CommandPalette.logic.ts where
    upstream keeps it (so it stays unit-testable);
  • the files/content overlays bring their own CommandDialogPopup instead of the popup being lifted
    out of OpenCommandPaletteDialog, which the fork has heavily customised;
  • Esc inside an overlay returns to command mode rather than dismissing, matching the
    "Esc Back" affordance both overlays render;
  • both overlays are registered as palette actions ("Go to file", "Search project contents"), so they
    are discoverable by search and not only by shortcut.

Without the port those three default keybindings would have been dead on arrival.

Welds found by typecheck and tests, not by conflict markers

WhereDefectResolution
SidebarV2two per-row VCS status queries: upstream's full-mode vcsEnvironment.status auto-merged in above the fork's budgeted listStatus, and upstream's new isWoke reads prState declared in its copyfork's query and its pr/prState hoisted above isWoke; upstream's duplicate dropped. Full mode is one poller per worktree — the storm the fork's list mode exists to avoid
ElectronDialogfork's pickApplication (macOS Open With) and upstream's new pickFiles collided at every declaration site; a naive union fused two error classes, two interfaces, and duplicated confirm/showMessageBoxboth APIs kept, declarations separated, upstream's pickFiles re-indented into the service
keybindings.test.tsthe DEFAULT_BINDINGS fixture kept the fork's list while upstream's new assertions expected the two new chords — tests failed against a fixture that no longer matched shipped defaultsfixture extended with both bindings
Sidebar.tsx (v1)the fork rewrote the v1 body (search + new-thread header row, recency lists); upstream restructured the same region for its own layoutwhole-body alternatives — the fork's kept; upstream's fixedHeader restructure not adopted for v1

Keybinding additions (mod+p, mod+shift+f, mod+alt+shift+t) were checked against the fork's
existing chords, including board.open = mod+t: no collisions.

Adversarial review

grok-4.5 and gpt-5.6-sol both ran over the git show --cc surface with the merged worktree
available. They independently converged on the same finding: the overlay host was only half
ported. All four are fixed in this branch.

FindingDisposition
HIGH (grok) / MED (codex)Esc in files/content closed the whole dialog, contradicting the "Esc Back" affordance the overlays renderFixed.onOpenChange intercepts escape-key while mode !== "command" and switches back instead
MED (both) — the "Go to file" / "Search project contents" palette actions were dropped, leaving the overlays shortcut-onlyFixed.openOverlayMode threaded into OpenCommandPaletteDialog; both actions registered
MED (codex) / LOW (grok) — the palette's shortcut resolver lost previewFocus/previewOpen, so customized bindings using those when conditions could not matchFixed. Full context restored, previewOpen derived as upstream does
LOW (both) — upstream's reducer tests vanished when the reducer was inlined into the componentFixed. Reducer moved to CommandPalette.logic.ts and upstream's four reducer tests restored

Both cleared the rest: ElectronDialog (no duplicate declarations, both APIs wired), keybinding
registry/handlers/fixtures agree, and the deliberate listStatus choice plus Done/Woke and
non-pulsing Working semantics are coherent.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,277 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.
  • One upstream test (AddProviderInstanceDialog.environment, new in feat(web): per-device provider settings pingdotgg/t3code#4479) failed once in a full
    workspace run and passed both in isolation and on two subsequent full runs — order-dependent
    flakiness in upstream's own test, not a resolution defect. Flagging rather than papering over it.
  • pnpm-lock.yaml regenerated rather than hand-merged.

Co-authored by @patroza

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

t3dotggand others added 7 commits August 7, 2026 00:57
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
…g#5579)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the six upstream commits after #372: per-device provider settings
(pingdotgg#4479), the modular theme library and theme editor (pingdotgg#5226), Done/Woke sidebar
semantics (pingdotgg#5579), the non-pulsing Working label (pingdotgg#5580), mobile T3 Connect
device cleanup (pingdotgg#5563), and a download-page copy fix (pingdotgg#4511).
Upstream's new filePicker/projectSearch/themeEditor shortcuts arrive with an
overlay-mode host for the command palette. The fork rewrote that component, so
the host was ported rather than taken: the palette reducer gains `mode` and
`ToggleMode`, and the two overlays bring their own popup instead of the popup
being lifted out of OpenCommandPaletteDialog. Without that the new default
keybindings would have been dead.
Welds found by typecheck and tests, not by conflict markers:
- SidebarV2 ended up with two per-row VCS status queries: upstream's full-mode
`vcsEnvironment.status` auto-merged in above the fork's budgeted
`listStatus`. Upstream's new isWoke reads prState, so the fork's query and its
pr/prState derivation are hoisted above it and the duplicate dropped. Keeping
the fork's list mode matters: full mode is one poller per worktree.
- ElectronDialog: the fork's pickApplication and upstream's pickFiles are
independent additions that collided at every declaration site.
- The keybindings test fixture kept the fork's list, silently dropping
upstream's two new bindings while its new assertions expected them.
The v1 sidebar body is a fork rewrite; upstream restructured the same region for
its own layout, so both sides were whole-body alternatives and the fork's is
kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 74a1459 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the three upstream commits after #374: mobile keyboard avoiding
(pingdotgg#5451), dev-runner cold-start speedup (pingdotgg#5584), and rewritten --share
instructions (pingdotgg#5586).
Resolutions: dev-runner.ts unions the fork's METRO_PORT passthrough with
upstream's launcher-env scrubbing (T3_SERVICE_LAUNCHER_CONTEXT /
T3_BOOT_SERVICE_UNIT deletion). AGENTS.md's auto-union dropped upstream's
rewritten "Dev servers" bullets into the fork's ship-gate section; the
share/pairing guidance is folded into the fork's own Dev Servers section
instead, replacing its older --share bullet. Lockfile regenerated.
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.

4 participants

@patroza@t3dotgg@Mateleo@StiensWout
, '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 23f0a1ae3 into fork/dev - #374

Merged
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 23f0a1ae3 into fork/dev#374
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 23f0a1ae3 — the six commits after #372, headlined by per-device provider
settings (pingdotgg#4479)
and the modular theme library + theme editor (pingdotgg#5226).

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
23f0a1ae3fix(web): reading a thread clears Done; Woke is dismissible (pingdotgg#5579)
85b1734d4feat(web): add modular theme library (pingdotgg#5226)
3ffe84f96fix(web): stop the sidebar "Working" label from pulsing (pingdotgg#5580)
220efad62fix: add missing space before 'GitHub releases page' link on download page (pingdotgg#4511)
b98a0f0d2fix(mobile): invisible T3 Connect devices can now be seen and removed (pingdotgg#5563)
95305c36ffeat(web): per-device provider settings (pingdotgg#4479)

The one real piece of work: the command-palette overlay host

Upstream's new filePicker.toggle (mod+p), projectSearch.toggle (mod+shift+f)
and themeEditor.toggle (mod+alt+shift+t) shortcuts arrive with a rewritten palette that
hosts three overlays (palette · files · content). The fork rewrote that component, so the host was
ported, not taken:

  • the palette reducer gains mode and ToggleMode, and moves to CommandPalette.logic.ts where
    upstream keeps it (so it stays unit-testable);
  • the files/content overlays bring their own CommandDialogPopup instead of the popup being lifted
    out of OpenCommandPaletteDialog, which the fork has heavily customised;
  • Esc inside an overlay returns to command mode rather than dismissing, matching the
    "Esc Back" affordance both overlays render;
  • both overlays are registered as palette actions ("Go to file", "Search project contents"), so they
    are discoverable by search and not only by shortcut.

Without the port those three default keybindings would have been dead on arrival.

Welds found by typecheck and tests, not by conflict markers

WhereDefectResolution
SidebarV2two per-row VCS status queries: upstream's full-mode vcsEnvironment.status auto-merged in above the fork's budgeted listStatus, and upstream's new isWoke reads prState declared in its copyfork's query and its pr/prState hoisted above isWoke; upstream's duplicate dropped. Full mode is one poller per worktree — the storm the fork's list mode exists to avoid
ElectronDialogfork's pickApplication (macOS Open With) and upstream's new pickFiles collided at every declaration site; a naive union fused two error classes, two interfaces, and duplicated confirm/showMessageBoxboth APIs kept, declarations separated, upstream's pickFiles re-indented into the service
keybindings.test.tsthe DEFAULT_BINDINGS fixture kept the fork's list while upstream's new assertions expected the two new chords — tests failed against a fixture that no longer matched shipped defaultsfixture extended with both bindings
Sidebar.tsx (v1)the fork rewrote the v1 body (search + new-thread header row, recency lists); upstream restructured the same region for its own layoutwhole-body alternatives — the fork's kept; upstream's fixedHeader restructure not adopted for v1

Keybinding additions (mod+p, mod+shift+f, mod+alt+shift+t) were checked against the fork's
existing chords, including board.open = mod+t: no collisions.

Adversarial review

grok-4.5 and gpt-5.6-sol both ran over the git show --cc surface with the merged worktree
available. They independently converged on the same finding: the overlay host was only half
ported. All four are fixed in this branch.

FindingDisposition
HIGH (grok) / MED (codex)Esc in files/content closed the whole dialog, contradicting the "Esc Back" affordance the overlays renderFixed.onOpenChange intercepts escape-key while mode !== "command" and switches back instead
MED (both) — the "Go to file" / "Search project contents" palette actions were dropped, leaving the overlays shortcut-onlyFixed.openOverlayMode threaded into OpenCommandPaletteDialog; both actions registered
MED (codex) / LOW (grok) — the palette's shortcut resolver lost previewFocus/previewOpen, so customized bindings using those when conditions could not matchFixed. Full context restored, previewOpen derived as upstream does
LOW (both) — upstream's reducer tests vanished when the reducer was inlined into the componentFixed. Reducer moved to CommandPalette.logic.ts and upstream's four reducer tests restored

Both cleared the rest: ElectronDialog (no duplicate declarations, both APIs wired), keybinding
registry/handlers/fixtures agree, and the deliberate listStatus choice plus Done/Woke and
non-pulsing Working semantics are coherent.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,277 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.
  • One upstream test (AddProviderInstanceDialog.environment, new in feat(web): per-device provider settings pingdotgg/t3code#4479) failed once in a full
    workspace run and passed both in isolation and on two subsequent full runs — order-dependent
    flakiness in upstream's own test, not a resolution defect. Flagging rather than papering over it.
  • pnpm-lock.yaml regenerated rather than hand-merged.

Co-authored by @patroza

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

t3dotggand others added 7 commits August 7, 2026 00:57
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
…g#5579)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the six upstream commits after #372: per-device provider settings
(pingdotgg#4479), the modular theme library and theme editor (pingdotgg#5226), Done/Woke sidebar
semantics (pingdotgg#5579), the non-pulsing Working label (pingdotgg#5580), mobile T3 Connect
device cleanup (pingdotgg#5563), and a download-page copy fix (pingdotgg#4511).
Upstream's new filePicker/projectSearch/themeEditor shortcuts arrive with an
overlay-mode host for the command palette. The fork rewrote that component, so
the host was ported rather than taken: the palette reducer gains `mode` and
`ToggleMode`, and the two overlays bring their own popup instead of the popup
being lifted out of OpenCommandPaletteDialog. Without that the new default
keybindings would have been dead.
Welds found by typecheck and tests, not by conflict markers:
- SidebarV2 ended up with two per-row VCS status queries: upstream's full-mode
`vcsEnvironment.status` auto-merged in above the fork's budgeted
`listStatus`. Upstream's new isWoke reads prState, so the fork's query and its
pr/prState derivation are hoisted above it and the duplicate dropped. Keeping
the fork's list mode matters: full mode is one poller per worktree.
- ElectronDialog: the fork's pickApplication and upstream's pickFiles are
independent additions that collided at every declaration site.
- The keybindings test fixture kept the fork's list, silently dropping
upstream's two new bindings while its new assertions expected them.
The v1 sidebar body is a fork rewrite; upstream restructured the same region for
its own layout, so both sides were whole-body alternatives and the fork's is
kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 74a1459 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the three upstream commits after #374: mobile keyboard avoiding
(pingdotgg#5451), dev-runner cold-start speedup (pingdotgg#5584), and rewritten --share
instructions (pingdotgg#5586).
Resolutions: dev-runner.ts unions the fork's METRO_PORT passthrough with
upstream's launcher-env scrubbing (T3_SERVICE_LAUNCHER_CONTEXT /
T3_BOOT_SERVICE_UNIT deletion). AGENTS.md's auto-union dropped upstream's
rewritten "Dev servers" bullets into the fork's ship-gate section; the
share/pairing guidance is folded into the fork's own Dev Servers section
instead, replacing its older --share bullet. Lockfile regenerated.
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.

4 participants

@patroza@t3dotgg@Mateleo@StiensWout
, '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 23f0a1ae3 into fork/dev - #374

Merged
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 23f0a1ae3 into fork/dev#374
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 23f0a1ae3 — the six commits after #372, headlined by per-device provider
settings (pingdotgg#4479)
and the modular theme library + theme editor (pingdotgg#5226).

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
23f0a1ae3fix(web): reading a thread clears Done; Woke is dismissible (pingdotgg#5579)
85b1734d4feat(web): add modular theme library (pingdotgg#5226)
3ffe84f96fix(web): stop the sidebar "Working" label from pulsing (pingdotgg#5580)
220efad62fix: add missing space before 'GitHub releases page' link on download page (pingdotgg#4511)
b98a0f0d2fix(mobile): invisible T3 Connect devices can now be seen and removed (pingdotgg#5563)
95305c36ffeat(web): per-device provider settings (pingdotgg#4479)

The one real piece of work: the command-palette overlay host

Upstream's new filePicker.toggle (mod+p), projectSearch.toggle (mod+shift+f)
and themeEditor.toggle (mod+alt+shift+t) shortcuts arrive with a rewritten palette that
hosts three overlays (palette · files · content). The fork rewrote that component, so the host was
ported, not taken:

  • the palette reducer gains mode and ToggleMode, and moves to CommandPalette.logic.ts where
    upstream keeps it (so it stays unit-testable);
  • the files/content overlays bring their own CommandDialogPopup instead of the popup being lifted
    out of OpenCommandPaletteDialog, which the fork has heavily customised;
  • Esc inside an overlay returns to command mode rather than dismissing, matching the
    "Esc Back" affordance both overlays render;
  • both overlays are registered as palette actions ("Go to file", "Search project contents"), so they
    are discoverable by search and not only by shortcut.

Without the port those three default keybindings would have been dead on arrival.

Welds found by typecheck and tests, not by conflict markers

WhereDefectResolution
SidebarV2two per-row VCS status queries: upstream's full-mode vcsEnvironment.status auto-merged in above the fork's budgeted listStatus, and upstream's new isWoke reads prState declared in its copyfork's query and its pr/prState hoisted above isWoke; upstream's duplicate dropped. Full mode is one poller per worktree — the storm the fork's list mode exists to avoid
ElectronDialogfork's pickApplication (macOS Open With) and upstream's new pickFiles collided at every declaration site; a naive union fused two error classes, two interfaces, and duplicated confirm/showMessageBoxboth APIs kept, declarations separated, upstream's pickFiles re-indented into the service
keybindings.test.tsthe DEFAULT_BINDINGS fixture kept the fork's list while upstream's new assertions expected the two new chords — tests failed against a fixture that no longer matched shipped defaultsfixture extended with both bindings
Sidebar.tsx (v1)the fork rewrote the v1 body (search + new-thread header row, recency lists); upstream restructured the same region for its own layoutwhole-body alternatives — the fork's kept; upstream's fixedHeader restructure not adopted for v1

Keybinding additions (mod+p, mod+shift+f, mod+alt+shift+t) were checked against the fork's
existing chords, including board.open = mod+t: no collisions.

Adversarial review

grok-4.5 and gpt-5.6-sol both ran over the git show --cc surface with the merged worktree
available. They independently converged on the same finding: the overlay host was only half
ported. All four are fixed in this branch.

FindingDisposition
HIGH (grok) / MED (codex)Esc in files/content closed the whole dialog, contradicting the "Esc Back" affordance the overlays renderFixed.onOpenChange intercepts escape-key while mode !== "command" and switches back instead
MED (both) — the "Go to file" / "Search project contents" palette actions were dropped, leaving the overlays shortcut-onlyFixed.openOverlayMode threaded into OpenCommandPaletteDialog; both actions registered
MED (codex) / LOW (grok) — the palette's shortcut resolver lost previewFocus/previewOpen, so customized bindings using those when conditions could not matchFixed. Full context restored, previewOpen derived as upstream does
LOW (both) — upstream's reducer tests vanished when the reducer was inlined into the componentFixed. Reducer moved to CommandPalette.logic.ts and upstream's four reducer tests restored

Both cleared the rest: ElectronDialog (no duplicate declarations, both APIs wired), keybinding
registry/handlers/fixtures agree, and the deliberate listStatus choice plus Done/Woke and
non-pulsing Working semantics are coherent.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,277 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.
  • One upstream test (AddProviderInstanceDialog.environment, new in feat(web): per-device provider settings pingdotgg/t3code#4479) failed once in a full
    workspace run and passed both in isolation and on two subsequent full runs — order-dependent
    flakiness in upstream's own test, not a resolution defect. Flagging rather than papering over it.
  • pnpm-lock.yaml regenerated rather than hand-merged.

Co-authored by @patroza

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

t3dotggand others added 7 commits August 7, 2026 00:57
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
…g#5579)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the six upstream commits after #372: per-device provider settings
(pingdotgg#4479), the modular theme library and theme editor (pingdotgg#5226), Done/Woke sidebar
semantics (pingdotgg#5579), the non-pulsing Working label (pingdotgg#5580), mobile T3 Connect
device cleanup (pingdotgg#5563), and a download-page copy fix (pingdotgg#4511).
Upstream's new filePicker/projectSearch/themeEditor shortcuts arrive with an
overlay-mode host for the command palette. The fork rewrote that component, so
the host was ported rather than taken: the palette reducer gains `mode` and
`ToggleMode`, and the two overlays bring their own popup instead of the popup
being lifted out of OpenCommandPaletteDialog. Without that the new default
keybindings would have been dead.
Welds found by typecheck and tests, not by conflict markers:
- SidebarV2 ended up with two per-row VCS status queries: upstream's full-mode
`vcsEnvironment.status` auto-merged in above the fork's budgeted
`listStatus`. Upstream's new isWoke reads prState, so the fork's query and its
pr/prState derivation are hoisted above it and the duplicate dropped. Keeping
the fork's list mode matters: full mode is one poller per worktree.
- ElectronDialog: the fork's pickApplication and upstream's pickFiles are
independent additions that collided at every declaration site.
- The keybindings test fixture kept the fork's list, silently dropping
upstream's two new bindings while its new assertions expected them.
The v1 sidebar body is a fork rewrite; upstream restructured the same region for
its own layout, so both sides were whole-body alternatives and the fork's is
kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 74a1459 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the three upstream commits after #374: mobile keyboard avoiding
(pingdotgg#5451), dev-runner cold-start speedup (pingdotgg#5584), and rewritten --share
instructions (pingdotgg#5586).
Resolutions: dev-runner.ts unions the fork's METRO_PORT passthrough with
upstream's launcher-env scrubbing (T3_SERVICE_LAUNCHER_CONTEXT /
T3_BOOT_SERVICE_UNIT deletion). AGENTS.md's auto-union dropped upstream's
rewritten "Dev servers" bullets into the fork's ship-gate section; the
share/pairing guidance is folded into the fork's own Dev Servers section
instead, replacing its older --share bullet. Lockfile regenerated.
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.

4 participants

@patroza@t3dotgg@Mateleo@StiensWout
, '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 23f0a1ae3 into fork/dev - #374

Merged
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 23f0a1ae3 into fork/dev#374
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 23f0a1ae3 — the six commits after #372, headlined by per-device provider
settings (pingdotgg#4479)
and the modular theme library + theme editor (pingdotgg#5226).

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
23f0a1ae3fix(web): reading a thread clears Done; Woke is dismissible (pingdotgg#5579)
85b1734d4feat(web): add modular theme library (pingdotgg#5226)
3ffe84f96fix(web): stop the sidebar "Working" label from pulsing (pingdotgg#5580)
220efad62fix: add missing space before 'GitHub releases page' link on download page (pingdotgg#4511)
b98a0f0d2fix(mobile): invisible T3 Connect devices can now be seen and removed (pingdotgg#5563)
95305c36ffeat(web): per-device provider settings (pingdotgg#4479)

The one real piece of work: the command-palette overlay host

Upstream's new filePicker.toggle (mod+p), projectSearch.toggle (mod+shift+f)
and themeEditor.toggle (mod+alt+shift+t) shortcuts arrive with a rewritten palette that
hosts three overlays (palette · files · content). The fork rewrote that component, so the host was
ported, not taken:

  • the palette reducer gains mode and ToggleMode, and moves to CommandPalette.logic.ts where
    upstream keeps it (so it stays unit-testable);
  • the files/content overlays bring their own CommandDialogPopup instead of the popup being lifted
    out of OpenCommandPaletteDialog, which the fork has heavily customised;
  • Esc inside an overlay returns to command mode rather than dismissing, matching the
    "Esc Back" affordance both overlays render;
  • both overlays are registered as palette actions ("Go to file", "Search project contents"), so they
    are discoverable by search and not only by shortcut.

Without the port those three default keybindings would have been dead on arrival.

Welds found by typecheck and tests, not by conflict markers

WhereDefectResolution
SidebarV2two per-row VCS status queries: upstream's full-mode vcsEnvironment.status auto-merged in above the fork's budgeted listStatus, and upstream's new isWoke reads prState declared in its copyfork's query and its pr/prState hoisted above isWoke; upstream's duplicate dropped. Full mode is one poller per worktree — the storm the fork's list mode exists to avoid
ElectronDialogfork's pickApplication (macOS Open With) and upstream's new pickFiles collided at every declaration site; a naive union fused two error classes, two interfaces, and duplicated confirm/showMessageBoxboth APIs kept, declarations separated, upstream's pickFiles re-indented into the service
keybindings.test.tsthe DEFAULT_BINDINGS fixture kept the fork's list while upstream's new assertions expected the two new chords — tests failed against a fixture that no longer matched shipped defaultsfixture extended with both bindings
Sidebar.tsx (v1)the fork rewrote the v1 body (search + new-thread header row, recency lists); upstream restructured the same region for its own layoutwhole-body alternatives — the fork's kept; upstream's fixedHeader restructure not adopted for v1

Keybinding additions (mod+p, mod+shift+f, mod+alt+shift+t) were checked against the fork's
existing chords, including board.open = mod+t: no collisions.

Adversarial review

grok-4.5 and gpt-5.6-sol both ran over the git show --cc surface with the merged worktree
available. They independently converged on the same finding: the overlay host was only half
ported. All four are fixed in this branch.

FindingDisposition
HIGH (grok) / MED (codex)Esc in files/content closed the whole dialog, contradicting the "Esc Back" affordance the overlays renderFixed.onOpenChange intercepts escape-key while mode !== "command" and switches back instead
MED (both) — the "Go to file" / "Search project contents" palette actions were dropped, leaving the overlays shortcut-onlyFixed.openOverlayMode threaded into OpenCommandPaletteDialog; both actions registered
MED (codex) / LOW (grok) — the palette's shortcut resolver lost previewFocus/previewOpen, so customized bindings using those when conditions could not matchFixed. Full context restored, previewOpen derived as upstream does
LOW (both) — upstream's reducer tests vanished when the reducer was inlined into the componentFixed. Reducer moved to CommandPalette.logic.ts and upstream's four reducer tests restored

Both cleared the rest: ElectronDialog (no duplicate declarations, both APIs wired), keybinding
registry/handlers/fixtures agree, and the deliberate listStatus choice plus Done/Woke and
non-pulsing Working semantics are coherent.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,277 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.
  • One upstream test (AddProviderInstanceDialog.environment, new in feat(web): per-device provider settings pingdotgg/t3code#4479) failed once in a full
    workspace run and passed both in isolation and on two subsequent full runs — order-dependent
    flakiness in upstream's own test, not a resolution defect. Flagging rather than papering over it.
  • pnpm-lock.yaml regenerated rather than hand-merged.

Co-authored by @patroza

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

t3dotggand others added 7 commits August 7, 2026 00:57
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
…g#5579)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the six upstream commits after #372: per-device provider settings
(pingdotgg#4479), the modular theme library and theme editor (pingdotgg#5226), Done/Woke sidebar
semantics (pingdotgg#5579), the non-pulsing Working label (pingdotgg#5580), mobile T3 Connect
device cleanup (pingdotgg#5563), and a download-page copy fix (pingdotgg#4511).
Upstream's new filePicker/projectSearch/themeEditor shortcuts arrive with an
overlay-mode host for the command palette. The fork rewrote that component, so
the host was ported rather than taken: the palette reducer gains `mode` and
`ToggleMode`, and the two overlays bring their own popup instead of the popup
being lifted out of OpenCommandPaletteDialog. Without that the new default
keybindings would have been dead.
Welds found by typecheck and tests, not by conflict markers:
- SidebarV2 ended up with two per-row VCS status queries: upstream's full-mode
`vcsEnvironment.status` auto-merged in above the fork's budgeted
`listStatus`. Upstream's new isWoke reads prState, so the fork's query and its
pr/prState derivation are hoisted above it and the duplicate dropped. Keeping
the fork's list mode matters: full mode is one poller per worktree.
- ElectronDialog: the fork's pickApplication and upstream's pickFiles are
independent additions that collided at every declaration site.
- The keybindings test fixture kept the fork's list, silently dropping
upstream's two new bindings while its new assertions expected them.
The v1 sidebar body is a fork rewrite; upstream restructured the same region for
its own layout, so both sides were whole-body alternatives and the fork's is
kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 74a1459 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the three upstream commits after #374: mobile keyboard avoiding
(pingdotgg#5451), dev-runner cold-start speedup (pingdotgg#5584), and rewritten --share
instructions (pingdotgg#5586).
Resolutions: dev-runner.ts unions the fork's METRO_PORT passthrough with
upstream's launcher-env scrubbing (T3_SERVICE_LAUNCHER_CONTEXT /
T3_BOOT_SERVICE_UNIT deletion). AGENTS.md's auto-union dropped upstream's
rewritten "Dev servers" bullets into the fork's ship-gate section; the
share/pairing guidance is folded into the fork's own Dev Servers section
instead, replacing its older --share bullet. Lockfile regenerated.
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.

4 participants

@patroza@t3dotgg@Mateleo@StiensWout
, '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 23f0a1ae3 into fork/dev - #374

Merged
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 23f0a1ae3 into fork/dev#374
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 23f0a1ae3 — the six commits after #372, headlined by per-device provider
settings (pingdotgg#4479)
and the modular theme library + theme editor (pingdotgg#5226).

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
23f0a1ae3fix(web): reading a thread clears Done; Woke is dismissible (pingdotgg#5579)
85b1734d4feat(web): add modular theme library (pingdotgg#5226)
3ffe84f96fix(web): stop the sidebar "Working" label from pulsing (pingdotgg#5580)
220efad62fix: add missing space before 'GitHub releases page' link on download page (pingdotgg#4511)
b98a0f0d2fix(mobile): invisible T3 Connect devices can now be seen and removed (pingdotgg#5563)
95305c36ffeat(web): per-device provider settings (pingdotgg#4479)

The one real piece of work: the command-palette overlay host

Upstream's new filePicker.toggle (mod+p), projectSearch.toggle (mod+shift+f)
and themeEditor.toggle (mod+alt+shift+t) shortcuts arrive with a rewritten palette that
hosts three overlays (palette · files · content). The fork rewrote that component, so the host was
ported, not taken:

  • the palette reducer gains mode and ToggleMode, and moves to CommandPalette.logic.ts where
    upstream keeps it (so it stays unit-testable);
  • the files/content overlays bring their own CommandDialogPopup instead of the popup being lifted
    out of OpenCommandPaletteDialog, which the fork has heavily customised;
  • Esc inside an overlay returns to command mode rather than dismissing, matching the
    "Esc Back" affordance both overlays render;
  • both overlays are registered as palette actions ("Go to file", "Search project contents"), so they
    are discoverable by search and not only by shortcut.

Without the port those three default keybindings would have been dead on arrival.

Welds found by typecheck and tests, not by conflict markers

WhereDefectResolution
SidebarV2two per-row VCS status queries: upstream's full-mode vcsEnvironment.status auto-merged in above the fork's budgeted listStatus, and upstream's new isWoke reads prState declared in its copyfork's query and its pr/prState hoisted above isWoke; upstream's duplicate dropped. Full mode is one poller per worktree — the storm the fork's list mode exists to avoid
ElectronDialogfork's pickApplication (macOS Open With) and upstream's new pickFiles collided at every declaration site; a naive union fused two error classes, two interfaces, and duplicated confirm/showMessageBoxboth APIs kept, declarations separated, upstream's pickFiles re-indented into the service
keybindings.test.tsthe DEFAULT_BINDINGS fixture kept the fork's list while upstream's new assertions expected the two new chords — tests failed against a fixture that no longer matched shipped defaultsfixture extended with both bindings
Sidebar.tsx (v1)the fork rewrote the v1 body (search + new-thread header row, recency lists); upstream restructured the same region for its own layoutwhole-body alternatives — the fork's kept; upstream's fixedHeader restructure not adopted for v1

Keybinding additions (mod+p, mod+shift+f, mod+alt+shift+t) were checked against the fork's
existing chords, including board.open = mod+t: no collisions.

Adversarial review

grok-4.5 and gpt-5.6-sol both ran over the git show --cc surface with the merged worktree
available. They independently converged on the same finding: the overlay host was only half
ported. All four are fixed in this branch.

FindingDisposition
HIGH (grok) / MED (codex)Esc in files/content closed the whole dialog, contradicting the "Esc Back" affordance the overlays renderFixed.onOpenChange intercepts escape-key while mode !== "command" and switches back instead
MED (both) — the "Go to file" / "Search project contents" palette actions were dropped, leaving the overlays shortcut-onlyFixed.openOverlayMode threaded into OpenCommandPaletteDialog; both actions registered
MED (codex) / LOW (grok) — the palette's shortcut resolver lost previewFocus/previewOpen, so customized bindings using those when conditions could not matchFixed. Full context restored, previewOpen derived as upstream does
LOW (both) — upstream's reducer tests vanished when the reducer was inlined into the componentFixed. Reducer moved to CommandPalette.logic.ts and upstream's four reducer tests restored

Both cleared the rest: ElectronDialog (no duplicate declarations, both APIs wired), keybinding
registry/handlers/fixtures agree, and the deliberate listStatus choice plus Done/Woke and
non-pulsing Working semantics are coherent.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,277 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.
  • One upstream test (AddProviderInstanceDialog.environment, new in feat(web): per-device provider settings pingdotgg/t3code#4479) failed once in a full
    workspace run and passed both in isolation and on two subsequent full runs — order-dependent
    flakiness in upstream's own test, not a resolution defect. Flagging rather than papering over it.
  • pnpm-lock.yaml regenerated rather than hand-merged.

Co-authored by @patroza

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

t3dotggand others added 7 commits August 7, 2026 00:57
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
…g#5579)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the six upstream commits after #372: per-device provider settings
(pingdotgg#4479), the modular theme library and theme editor (pingdotgg#5226), Done/Woke sidebar
semantics (pingdotgg#5579), the non-pulsing Working label (pingdotgg#5580), mobile T3 Connect
device cleanup (pingdotgg#5563), and a download-page copy fix (pingdotgg#4511).
Upstream's new filePicker/projectSearch/themeEditor shortcuts arrive with an
overlay-mode host for the command palette. The fork rewrote that component, so
the host was ported rather than taken: the palette reducer gains `mode` and
`ToggleMode`, and the two overlays bring their own popup instead of the popup
being lifted out of OpenCommandPaletteDialog. Without that the new default
keybindings would have been dead.
Welds found by typecheck and tests, not by conflict markers:
- SidebarV2 ended up with two per-row VCS status queries: upstream's full-mode
`vcsEnvironment.status` auto-merged in above the fork's budgeted
`listStatus`. Upstream's new isWoke reads prState, so the fork's query and its
pr/prState derivation are hoisted above it and the duplicate dropped. Keeping
the fork's list mode matters: full mode is one poller per worktree.
- ElectronDialog: the fork's pickApplication and upstream's pickFiles are
independent additions that collided at every declaration site.
- The keybindings test fixture kept the fork's list, silently dropping
upstream's two new bindings while its new assertions expected them.
The v1 sidebar body is a fork rewrite; upstream restructured the same region for
its own layout, so both sides were whole-body alternatives and the fork's is
kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 74a1459 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the three upstream commits after #374: mobile keyboard avoiding
(pingdotgg#5451), dev-runner cold-start speedup (pingdotgg#5584), and rewritten --share
instructions (pingdotgg#5586).
Resolutions: dev-runner.ts unions the fork's METRO_PORT passthrough with
upstream's launcher-env scrubbing (T3_SERVICE_LAUNCHER_CONTEXT /
T3_BOOT_SERVICE_UNIT deletion). AGENTS.md's auto-union dropped upstream's
rewritten "Dev servers" bullets into the fork's ship-gate section; the
share/pairing guidance is folded into the fork's own Dev Servers section
instead, replacing its older --share bullet. Lockfile regenerated.
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.

4 participants

@patroza@t3dotgg@Mateleo@StiensWout
, '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 23f0a1ae3 into fork/dev - #374

Merged
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 23f0a1ae3 into fork/dev#374
patroza merged 7 commits into
fork/devfrom
sync/upstream-23f0a1ae3

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through 23f0a1ae3 — the six commits after #372, headlined by per-device provider
settings (pingdotgg#4479)
and the modular theme library + theme editor (pingdotgg#5226).

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
23f0a1ae3fix(web): reading a thread clears Done; Woke is dismissible (pingdotgg#5579)
85b1734d4feat(web): add modular theme library (pingdotgg#5226)
3ffe84f96fix(web): stop the sidebar "Working" label from pulsing (pingdotgg#5580)
220efad62fix: add missing space before 'GitHub releases page' link on download page (pingdotgg#4511)
b98a0f0d2fix(mobile): invisible T3 Connect devices can now be seen and removed (pingdotgg#5563)
95305c36ffeat(web): per-device provider settings (pingdotgg#4479)

The one real piece of work: the command-palette overlay host

Upstream's new filePicker.toggle (mod+p), projectSearch.toggle (mod+shift+f)
and themeEditor.toggle (mod+alt+shift+t) shortcuts arrive with a rewritten palette that
hosts three overlays (palette · files · content). The fork rewrote that component, so the host was
ported, not taken:

  • the palette reducer gains mode and ToggleMode, and moves to CommandPalette.logic.ts where
    upstream keeps it (so it stays unit-testable);
  • the files/content overlays bring their own CommandDialogPopup instead of the popup being lifted
    out of OpenCommandPaletteDialog, which the fork has heavily customised;
  • Esc inside an overlay returns to command mode rather than dismissing, matching the
    "Esc Back" affordance both overlays render;
  • both overlays are registered as palette actions ("Go to file", "Search project contents"), so they
    are discoverable by search and not only by shortcut.

Without the port those three default keybindings would have been dead on arrival.

Welds found by typecheck and tests, not by conflict markers

WhereDefectResolution
SidebarV2two per-row VCS status queries: upstream's full-mode vcsEnvironment.status auto-merged in above the fork's budgeted listStatus, and upstream's new isWoke reads prState declared in its copyfork's query and its pr/prState hoisted above isWoke; upstream's duplicate dropped. Full mode is one poller per worktree — the storm the fork's list mode exists to avoid
ElectronDialogfork's pickApplication (macOS Open With) and upstream's new pickFiles collided at every declaration site; a naive union fused two error classes, two interfaces, and duplicated confirm/showMessageBoxboth APIs kept, declarations separated, upstream's pickFiles re-indented into the service
keybindings.test.tsthe DEFAULT_BINDINGS fixture kept the fork's list while upstream's new assertions expected the two new chords — tests failed against a fixture that no longer matched shipped defaultsfixture extended with both bindings
Sidebar.tsx (v1)the fork rewrote the v1 body (search + new-thread header row, recency lists); upstream restructured the same region for its own layoutwhole-body alternatives — the fork's kept; upstream's fixedHeader restructure not adopted for v1

Keybinding additions (mod+p, mod+shift+f, mod+alt+shift+t) were checked against the fork's
existing chords, including board.open = mod+t: no collisions.

Adversarial review

grok-4.5 and gpt-5.6-sol both ran over the git show --cc surface with the merged worktree
available. They independently converged on the same finding: the overlay host was only half
ported. All four are fixed in this branch.

FindingDisposition
HIGH (grok) / MED (codex)Esc in files/content closed the whole dialog, contradicting the "Esc Back" affordance the overlays renderFixed.onOpenChange intercepts escape-key while mode !== "command" and switches back instead
MED (both) — the "Go to file" / "Search project contents" palette actions were dropped, leaving the overlays shortcut-onlyFixed.openOverlayMode threaded into OpenCommandPaletteDialog; both actions registered
MED (codex) / LOW (grok) — the palette's shortcut resolver lost previewFocus/previewOpen, so customized bindings using those when conditions could not matchFixed. Full context restored, previewOpen derived as upstream does
LOW (both) — upstream's reducer tests vanished when the reducer was inlined into the componentFixed. Reducer moved to CommandPalette.logic.ts and upstream's four reducer tests restored

Both cleared the rest: ElectronDialog (no duplicate declarations, both APIs wired), keybinding
registry/handlers/fixtures agree, and the deliberate listStatus choice plus Done/Woke and
non-pulsing Working semantics are coherent.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,277 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.
  • One upstream test (AddProviderInstanceDialog.environment, new in feat(web): per-device provider settings pingdotgg/t3code#4479) failed once in a full
    workspace run and passed both in isolation and on two subsequent full runs — order-dependent
    flakiness in upstream's own test, not a resolution defect. Flagging rather than papering over it.
  • pnpm-lock.yaml regenerated rather than hand-merged.

Co-authored by @patroza

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

t3dotggand others added 7 commits August 7, 2026 00:57
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
…g#5579)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the six upstream commits after #372: per-device provider settings
(pingdotgg#4479), the modular theme library and theme editor (pingdotgg#5226), Done/Woke sidebar
semantics (pingdotgg#5579), the non-pulsing Working label (pingdotgg#5580), mobile T3 Connect
device cleanup (pingdotgg#5563), and a download-page copy fix (pingdotgg#4511).
Upstream's new filePicker/projectSearch/themeEditor shortcuts arrive with an
overlay-mode host for the command palette. The fork rewrote that component, so
the host was ported rather than taken: the palette reducer gains `mode` and
`ToggleMode`, and the two overlays bring their own popup instead of the popup
being lifted out of OpenCommandPaletteDialog. Without that the new default
keybindings would have been dead.
Welds found by typecheck and tests, not by conflict markers:
- SidebarV2 ended up with two per-row VCS status queries: upstream's full-mode
`vcsEnvironment.status` auto-merged in above the fork's budgeted
`listStatus`. Upstream's new isWoke reads prState, so the fork's query and its
pr/prState derivation are hoisted above it and the duplicate dropped. Keeping
the fork's list mode matters: full mode is one poller per worktree.
- ElectronDialog: the fork's pickApplication and upstream's pickFiles are
independent additions that collided at every declaration site.
- The keybindings test fixture kept the fork's list, silently dropping
upstream's two new bindings while its new assertions expected them.
The v1 sidebar body is a fork rewrite; upstream restructured the same region for
its own layout, so both sides were whole-body alternatives and the fork's is
kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 74a1459 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the three upstream commits after #374: mobile keyboard avoiding
(pingdotgg#5451), dev-runner cold-start speedup (pingdotgg#5584), and rewritten --share
instructions (pingdotgg#5586).
Resolutions: dev-runner.ts unions the fork's METRO_PORT passthrough with
upstream's launcher-env scrubbing (T3_SERVICE_LAUNCHER_CONTEXT /
T3_BOOT_SERVICE_UNIT deletion). AGENTS.md's auto-union dropped upstream's
rewritten "Dev servers" bullets into the fork's ship-gate section; the
share/pairing guidance is folded into the fork's own Dev Servers section
instead, replacing its older --share bullet. Lockfile regenerated.
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.

4 participants

@patroza@t3dotgg@Mateleo@StiensWout