sync(upstream): merge upstream/main b2ee17d7c into fork/dev - #377

Merged
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c
Aug 7, 2026
Merged

sync(upstream): merge upstream/main b2ee17d7c into fork/dev#377
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through b2ee17d7c — the four commits after #375.

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
b2ee17d7cfeat(web): thread actions from the chat header title (pingdotgg#5592)
7963cc70ffeat(server): record runtime mode per turn and on mode changes (pingdotgg#5593)
b792ed9f7fix(web): stabilize chat timeline positioning (pingdotgg#5449)
2e66b1fdffix(web): live background-work banner no longer hides behind the update notice (pingdotgg#5595)

Resolutions

WhereSituationResolution
ChatHeader.tsxupstream's inline rename + title-as-menu (pingdotgg#5592) landed in the region carrying the fork's remote-VS-Code open and usage-dot/host-resource chromewoven: upstream's rename/menu structure adopted; the fork chrome sits after the title ternary and stays reachable on both server and non-server branches (the fork's anti-stack-drop source assertions in ChatHeader.test.ts pass)
SidebarV2.tsxupstream replaced the fork's buildSidebarV2ThreadContextMenuItems with the shared threadActionMenu.logic builder used by the headershared builder adopted; the fork's copy-thread-id entry moved into the shared menu and given a toast-backed handler in useThreadActionMenu, so both surfaces offer it
ChatView.tsx bannersupstream's pingdotgg#5595 fold (reconnect + version skew → one calm line, suppression while an update runs) vs the fork's narrower resuming-update suppressionupstream's logic taken as a superset
ChatView.tsx scrollupstream's pingdotgg#5449 anchor-clear + rAF-deferred scrollToEnd vs the fork's unread-flag clearing in the same callbackboth kept
ComposerBannerStack / ChatHeader.test.tsadditive unions (default variant + urgent flag; both test suites)unioned

Adversarial review

grok-4.5 and gpt-5.6-sol over the git show --cc surface with worktree access. Both independently converged on the same defect:

FindingDisposition
HIGH (grok) / MED (codex) — the resolution dropped upstream's !reconnectingThroughVersionSkew guard on the server-version banner, so idle-reconnect-through-skew would show both the folded calm line and the update offer — exactly the stacking pingdotgg#5595 removesFixed. Guard restored with a comment naming why
LOW (grok) — dead buildSidebarV2ThreadContextMenuItems import left in SidebarV2Fixed. Removed

Clean per both: menu ids ↔ handlers across both consumers, rename focus/blur/escape paths, fork chrome reachability, timeline weave, and the updated test expectations (extended, not weakened).

Verification

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

Co-authored by @patroza

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

t3dotggand others added 5 commits August 7, 2026 10:10
…te notice (pingdotgg#5595)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…otgg#5593)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the four upstream commits after #375: thread actions from the chat
header title (pingdotgg#5592), per-turn runtime-mode recording (pingdotgg#5593), chat timeline
positioning stabilization (pingdotgg#5449), and the background-work banner no longer
hiding behind the update notice (pingdotgg#5595).
The chat header gains upstream's inline rename and title-menu (shared
threadActionMenu.logic) woven around the fork's remote-VS-Code open and
usage-dot/host-resource chrome. SidebarV2 adopts the shared menu builder in
place of the fork's buildSidebarV2ThreadContextMenuItems; the fork's
copy-thread-id entry moves into the shared menu (and gains a handler in
useThreadActionMenu) so both surfaces offer it.
ChatView takes upstream's folded reconnect/version banner logic (pingdotgg#5595, a
superset of the fork's resuming-update suppression) and the anchor-clearing
rAF scroll (pingdotgg#5449), keeping the fork's unread-flag clearing and its
unread-activity observer.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit f8d8555 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the seven upstream commits after #377: iOS terminal clear no longer
resets the session (pingdotgg#5440), Android scroll padding above the nav bar (pingdotgg#5415),
Android composer opacity (pingdotgg#5582), Clerk auth navigation headers (pingdotgg#5140), the
mobile app version bump to 1.0.2 (pingdotgg#5588), click-to-unpin (pingdotgg#5578), and the
correct new-thread shortcut in the sidebar tooltip (pingdotgg#5594).
Three resolutions:
- ThreadComposer: pingdotgg#5582 moves the backdrop gradient off Animated.View, where
Reanimated silently drops experimental_backgroundImage on Android — the very
bug it fixes. The fork's gradient was on that Animated.View, so it is removed
there and the fork's stronger lower-band stops (0.82/0.96 dark, 0.88/0.98
light) ride on upstream's plain-View backdrop instead.
- app.config: upstream's 1.0.2 version bump with the fork's
MOBILE_RUNTIME_VERSION_OVERRIDE escape hatch kept; its default policy is the
same fingerprint upstream documents.
- SidebarV2: upstream's pingdotgg#5594 label ordering (chat.new before chat.newLocal)
adopted — the fork's button has exactly the semantics upstream describes,
routing multi-project setups through the palette picker and creating
immediately otherwise. The fork's board and command-palette labels stay.
Upstream's two new react-mocking harness tests (pingdotgg#4479) are added to the fork's
isolatedUnitTestFiles. The fork's unit project runs isolate: false to reuse each
worker's module graph; upstream has no such config, so those tests assume full
isolation. Under a shared registry the component graph can already be bound to
the real react/compiler-runtime by an earlier file, the vi.mock("react") never
applies, and the compiled component reports a memo-cache hit and skips the hooks
the test asserts on. That is what made AddProviderInstanceDialog.environment
fail this PR's CI while passing in isolation. Two other react-mocking tests were
already in that list.
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.

3 participants

@patroza@t3dotgg@jmeistrich
, '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 b2ee17d7c into fork/dev - #377

Merged
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c
Aug 7, 2026
Merged

sync(upstream): merge upstream/main b2ee17d7c into fork/dev#377
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through b2ee17d7c — the four commits after #375.

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
b2ee17d7cfeat(web): thread actions from the chat header title (pingdotgg#5592)
7963cc70ffeat(server): record runtime mode per turn and on mode changes (pingdotgg#5593)
b792ed9f7fix(web): stabilize chat timeline positioning (pingdotgg#5449)
2e66b1fdffix(web): live background-work banner no longer hides behind the update notice (pingdotgg#5595)

Resolutions

WhereSituationResolution
ChatHeader.tsxupstream's inline rename + title-as-menu (pingdotgg#5592) landed in the region carrying the fork's remote-VS-Code open and usage-dot/host-resource chromewoven: upstream's rename/menu structure adopted; the fork chrome sits after the title ternary and stays reachable on both server and non-server branches (the fork's anti-stack-drop source assertions in ChatHeader.test.ts pass)
SidebarV2.tsxupstream replaced the fork's buildSidebarV2ThreadContextMenuItems with the shared threadActionMenu.logic builder used by the headershared builder adopted; the fork's copy-thread-id entry moved into the shared menu and given a toast-backed handler in useThreadActionMenu, so both surfaces offer it
ChatView.tsx bannersupstream's pingdotgg#5595 fold (reconnect + version skew → one calm line, suppression while an update runs) vs the fork's narrower resuming-update suppressionupstream's logic taken as a superset
ChatView.tsx scrollupstream's pingdotgg#5449 anchor-clear + rAF-deferred scrollToEnd vs the fork's unread-flag clearing in the same callbackboth kept
ComposerBannerStack / ChatHeader.test.tsadditive unions (default variant + urgent flag; both test suites)unioned

Adversarial review

grok-4.5 and gpt-5.6-sol over the git show --cc surface with worktree access. Both independently converged on the same defect:

FindingDisposition
HIGH (grok) / MED (codex) — the resolution dropped upstream's !reconnectingThroughVersionSkew guard on the server-version banner, so idle-reconnect-through-skew would show both the folded calm line and the update offer — exactly the stacking pingdotgg#5595 removesFixed. Guard restored with a comment naming why
LOW (grok) — dead buildSidebarV2ThreadContextMenuItems import left in SidebarV2Fixed. Removed

Clean per both: menu ids ↔ handlers across both consumers, rename focus/blur/escape paths, fork chrome reachability, timeline weave, and the updated test expectations (extended, not weakened).

Verification

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

Co-authored by @patroza

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

t3dotggand others added 5 commits August 7, 2026 10:10
…te notice (pingdotgg#5595)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…otgg#5593)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the four upstream commits after #375: thread actions from the chat
header title (pingdotgg#5592), per-turn runtime-mode recording (pingdotgg#5593), chat timeline
positioning stabilization (pingdotgg#5449), and the background-work banner no longer
hiding behind the update notice (pingdotgg#5595).
The chat header gains upstream's inline rename and title-menu (shared
threadActionMenu.logic) woven around the fork's remote-VS-Code open and
usage-dot/host-resource chrome. SidebarV2 adopts the shared menu builder in
place of the fork's buildSidebarV2ThreadContextMenuItems; the fork's
copy-thread-id entry moves into the shared menu (and gains a handler in
useThreadActionMenu) so both surfaces offer it.
ChatView takes upstream's folded reconnect/version banner logic (pingdotgg#5595, a
superset of the fork's resuming-update suppression) and the anchor-clearing
rAF scroll (pingdotgg#5449), keeping the fork's unread-flag clearing and its
unread-activity observer.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit f8d8555 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the seven upstream commits after #377: iOS terminal clear no longer
resets the session (pingdotgg#5440), Android scroll padding above the nav bar (pingdotgg#5415),
Android composer opacity (pingdotgg#5582), Clerk auth navigation headers (pingdotgg#5140), the
mobile app version bump to 1.0.2 (pingdotgg#5588), click-to-unpin (pingdotgg#5578), and the
correct new-thread shortcut in the sidebar tooltip (pingdotgg#5594).
Three resolutions:
- ThreadComposer: pingdotgg#5582 moves the backdrop gradient off Animated.View, where
Reanimated silently drops experimental_backgroundImage on Android — the very
bug it fixes. The fork's gradient was on that Animated.View, so it is removed
there and the fork's stronger lower-band stops (0.82/0.96 dark, 0.88/0.98
light) ride on upstream's plain-View backdrop instead.
- app.config: upstream's 1.0.2 version bump with the fork's
MOBILE_RUNTIME_VERSION_OVERRIDE escape hatch kept; its default policy is the
same fingerprint upstream documents.
- SidebarV2: upstream's pingdotgg#5594 label ordering (chat.new before chat.newLocal)
adopted — the fork's button has exactly the semantics upstream describes,
routing multi-project setups through the palette picker and creating
immediately otherwise. The fork's board and command-palette labels stay.
Upstream's two new react-mocking harness tests (pingdotgg#4479) are added to the fork's
isolatedUnitTestFiles. The fork's unit project runs isolate: false to reuse each
worker's module graph; upstream has no such config, so those tests assume full
isolation. Under a shared registry the component graph can already be bound to
the real react/compiler-runtime by an earlier file, the vi.mock("react") never
applies, and the compiled component reports a memo-cache hit and skips the hooks
the test asserts on. That is what made AddProviderInstanceDialog.environment
fail this PR's CI while passing in isolation. Two other react-mocking tests were
already in that list.
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.

3 participants

@patroza@t3dotgg@jmeistrich
, '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 b2ee17d7c into fork/dev - #377

Merged
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c
Aug 7, 2026
Merged

sync(upstream): merge upstream/main b2ee17d7c into fork/dev#377
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through b2ee17d7c — the four commits after #375.

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
b2ee17d7cfeat(web): thread actions from the chat header title (pingdotgg#5592)
7963cc70ffeat(server): record runtime mode per turn and on mode changes (pingdotgg#5593)
b792ed9f7fix(web): stabilize chat timeline positioning (pingdotgg#5449)
2e66b1fdffix(web): live background-work banner no longer hides behind the update notice (pingdotgg#5595)

Resolutions

WhereSituationResolution
ChatHeader.tsxupstream's inline rename + title-as-menu (pingdotgg#5592) landed in the region carrying the fork's remote-VS-Code open and usage-dot/host-resource chromewoven: upstream's rename/menu structure adopted; the fork chrome sits after the title ternary and stays reachable on both server and non-server branches (the fork's anti-stack-drop source assertions in ChatHeader.test.ts pass)
SidebarV2.tsxupstream replaced the fork's buildSidebarV2ThreadContextMenuItems with the shared threadActionMenu.logic builder used by the headershared builder adopted; the fork's copy-thread-id entry moved into the shared menu and given a toast-backed handler in useThreadActionMenu, so both surfaces offer it
ChatView.tsx bannersupstream's pingdotgg#5595 fold (reconnect + version skew → one calm line, suppression while an update runs) vs the fork's narrower resuming-update suppressionupstream's logic taken as a superset
ChatView.tsx scrollupstream's pingdotgg#5449 anchor-clear + rAF-deferred scrollToEnd vs the fork's unread-flag clearing in the same callbackboth kept
ComposerBannerStack / ChatHeader.test.tsadditive unions (default variant + urgent flag; both test suites)unioned

Adversarial review

grok-4.5 and gpt-5.6-sol over the git show --cc surface with worktree access. Both independently converged on the same defect:

FindingDisposition
HIGH (grok) / MED (codex) — the resolution dropped upstream's !reconnectingThroughVersionSkew guard on the server-version banner, so idle-reconnect-through-skew would show both the folded calm line and the update offer — exactly the stacking pingdotgg#5595 removesFixed. Guard restored with a comment naming why
LOW (grok) — dead buildSidebarV2ThreadContextMenuItems import left in SidebarV2Fixed. Removed

Clean per both: menu ids ↔ handlers across both consumers, rename focus/blur/escape paths, fork chrome reachability, timeline weave, and the updated test expectations (extended, not weakened).

Verification

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

Co-authored by @patroza

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

t3dotggand others added 5 commits August 7, 2026 10:10
…te notice (pingdotgg#5595)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…otgg#5593)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the four upstream commits after #375: thread actions from the chat
header title (pingdotgg#5592), per-turn runtime-mode recording (pingdotgg#5593), chat timeline
positioning stabilization (pingdotgg#5449), and the background-work banner no longer
hiding behind the update notice (pingdotgg#5595).
The chat header gains upstream's inline rename and title-menu (shared
threadActionMenu.logic) woven around the fork's remote-VS-Code open and
usage-dot/host-resource chrome. SidebarV2 adopts the shared menu builder in
place of the fork's buildSidebarV2ThreadContextMenuItems; the fork's
copy-thread-id entry moves into the shared menu (and gains a handler in
useThreadActionMenu) so both surfaces offer it.
ChatView takes upstream's folded reconnect/version banner logic (pingdotgg#5595, a
superset of the fork's resuming-update suppression) and the anchor-clearing
rAF scroll (pingdotgg#5449), keeping the fork's unread-flag clearing and its
unread-activity observer.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit f8d8555 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the seven upstream commits after #377: iOS terminal clear no longer
resets the session (pingdotgg#5440), Android scroll padding above the nav bar (pingdotgg#5415),
Android composer opacity (pingdotgg#5582), Clerk auth navigation headers (pingdotgg#5140), the
mobile app version bump to 1.0.2 (pingdotgg#5588), click-to-unpin (pingdotgg#5578), and the
correct new-thread shortcut in the sidebar tooltip (pingdotgg#5594).
Three resolutions:
- ThreadComposer: pingdotgg#5582 moves the backdrop gradient off Animated.View, where
Reanimated silently drops experimental_backgroundImage on Android — the very
bug it fixes. The fork's gradient was on that Animated.View, so it is removed
there and the fork's stronger lower-band stops (0.82/0.96 dark, 0.88/0.98
light) ride on upstream's plain-View backdrop instead.
- app.config: upstream's 1.0.2 version bump with the fork's
MOBILE_RUNTIME_VERSION_OVERRIDE escape hatch kept; its default policy is the
same fingerprint upstream documents.
- SidebarV2: upstream's pingdotgg#5594 label ordering (chat.new before chat.newLocal)
adopted — the fork's button has exactly the semantics upstream describes,
routing multi-project setups through the palette picker and creating
immediately otherwise. The fork's board and command-palette labels stay.
Upstream's two new react-mocking harness tests (pingdotgg#4479) are added to the fork's
isolatedUnitTestFiles. The fork's unit project runs isolate: false to reuse each
worker's module graph; upstream has no such config, so those tests assume full
isolation. Under a shared registry the component graph can already be bound to
the real react/compiler-runtime by an earlier file, the vi.mock("react") never
applies, and the compiled component reports a memo-cache hit and skips the hooks
the test asserts on. That is what made AddProviderInstanceDialog.environment
fail this PR's CI while passing in isolation. Two other react-mocking tests were
already in that list.
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.

3 participants

@patroza@t3dotgg@jmeistrich
, '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 b2ee17d7c into fork/dev - #377

Merged
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c
Aug 7, 2026
Merged

sync(upstream): merge upstream/main b2ee17d7c into fork/dev#377
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through b2ee17d7c — the four commits after #375.

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
b2ee17d7cfeat(web): thread actions from the chat header title (pingdotgg#5592)
7963cc70ffeat(server): record runtime mode per turn and on mode changes (pingdotgg#5593)
b792ed9f7fix(web): stabilize chat timeline positioning (pingdotgg#5449)
2e66b1fdffix(web): live background-work banner no longer hides behind the update notice (pingdotgg#5595)

Resolutions

WhereSituationResolution
ChatHeader.tsxupstream's inline rename + title-as-menu (pingdotgg#5592) landed in the region carrying the fork's remote-VS-Code open and usage-dot/host-resource chromewoven: upstream's rename/menu structure adopted; the fork chrome sits after the title ternary and stays reachable on both server and non-server branches (the fork's anti-stack-drop source assertions in ChatHeader.test.ts pass)
SidebarV2.tsxupstream replaced the fork's buildSidebarV2ThreadContextMenuItems with the shared threadActionMenu.logic builder used by the headershared builder adopted; the fork's copy-thread-id entry moved into the shared menu and given a toast-backed handler in useThreadActionMenu, so both surfaces offer it
ChatView.tsx bannersupstream's pingdotgg#5595 fold (reconnect + version skew → one calm line, suppression while an update runs) vs the fork's narrower resuming-update suppressionupstream's logic taken as a superset
ChatView.tsx scrollupstream's pingdotgg#5449 anchor-clear + rAF-deferred scrollToEnd vs the fork's unread-flag clearing in the same callbackboth kept
ComposerBannerStack / ChatHeader.test.tsadditive unions (default variant + urgent flag; both test suites)unioned

Adversarial review

grok-4.5 and gpt-5.6-sol over the git show --cc surface with worktree access. Both independently converged on the same defect:

FindingDisposition
HIGH (grok) / MED (codex) — the resolution dropped upstream's !reconnectingThroughVersionSkew guard on the server-version banner, so idle-reconnect-through-skew would show both the folded calm line and the update offer — exactly the stacking pingdotgg#5595 removesFixed. Guard restored with a comment naming why
LOW (grok) — dead buildSidebarV2ThreadContextMenuItems import left in SidebarV2Fixed. Removed

Clean per both: menu ids ↔ handlers across both consumers, rename focus/blur/escape paths, fork chrome reachability, timeline weave, and the updated test expectations (extended, not weakened).

Verification

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

Co-authored by @patroza

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

t3dotggand others added 5 commits August 7, 2026 10:10
…te notice (pingdotgg#5595)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…otgg#5593)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the four upstream commits after #375: thread actions from the chat
header title (pingdotgg#5592), per-turn runtime-mode recording (pingdotgg#5593), chat timeline
positioning stabilization (pingdotgg#5449), and the background-work banner no longer
hiding behind the update notice (pingdotgg#5595).
The chat header gains upstream's inline rename and title-menu (shared
threadActionMenu.logic) woven around the fork's remote-VS-Code open and
usage-dot/host-resource chrome. SidebarV2 adopts the shared menu builder in
place of the fork's buildSidebarV2ThreadContextMenuItems; the fork's
copy-thread-id entry moves into the shared menu (and gains a handler in
useThreadActionMenu) so both surfaces offer it.
ChatView takes upstream's folded reconnect/version banner logic (pingdotgg#5595, a
superset of the fork's resuming-update suppression) and the anchor-clearing
rAF scroll (pingdotgg#5449), keeping the fork's unread-flag clearing and its
unread-activity observer.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit f8d8555 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the seven upstream commits after #377: iOS terminal clear no longer
resets the session (pingdotgg#5440), Android scroll padding above the nav bar (pingdotgg#5415),
Android composer opacity (pingdotgg#5582), Clerk auth navigation headers (pingdotgg#5140), the
mobile app version bump to 1.0.2 (pingdotgg#5588), click-to-unpin (pingdotgg#5578), and the
correct new-thread shortcut in the sidebar tooltip (pingdotgg#5594).
Three resolutions:
- ThreadComposer: pingdotgg#5582 moves the backdrop gradient off Animated.View, where
Reanimated silently drops experimental_backgroundImage on Android — the very
bug it fixes. The fork's gradient was on that Animated.View, so it is removed
there and the fork's stronger lower-band stops (0.82/0.96 dark, 0.88/0.98
light) ride on upstream's plain-View backdrop instead.
- app.config: upstream's 1.0.2 version bump with the fork's
MOBILE_RUNTIME_VERSION_OVERRIDE escape hatch kept; its default policy is the
same fingerprint upstream documents.
- SidebarV2: upstream's pingdotgg#5594 label ordering (chat.new before chat.newLocal)
adopted — the fork's button has exactly the semantics upstream describes,
routing multi-project setups through the palette picker and creating
immediately otherwise. The fork's board and command-palette labels stay.
Upstream's two new react-mocking harness tests (pingdotgg#4479) are added to the fork's
isolatedUnitTestFiles. The fork's unit project runs isolate: false to reuse each
worker's module graph; upstream has no such config, so those tests assume full
isolation. Under a shared registry the component graph can already be bound to
the real react/compiler-runtime by an earlier file, the vi.mock("react") never
applies, and the compiled component reports a memo-cache hit and skips the hooks
the test asserts on. That is what made AddProviderInstanceDialog.environment
fail this PR's CI while passing in isolation. Two other react-mocking tests were
already in that list.
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.

3 participants

@patroza@t3dotgg@jmeistrich
, '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 b2ee17d7c into fork/dev - #377

Merged
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c
Aug 7, 2026
Merged

sync(upstream): merge upstream/main b2ee17d7c into fork/dev#377
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through b2ee17d7c — the four commits after #375.

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
b2ee17d7cfeat(web): thread actions from the chat header title (pingdotgg#5592)
7963cc70ffeat(server): record runtime mode per turn and on mode changes (pingdotgg#5593)
b792ed9f7fix(web): stabilize chat timeline positioning (pingdotgg#5449)
2e66b1fdffix(web): live background-work banner no longer hides behind the update notice (pingdotgg#5595)

Resolutions

WhereSituationResolution
ChatHeader.tsxupstream's inline rename + title-as-menu (pingdotgg#5592) landed in the region carrying the fork's remote-VS-Code open and usage-dot/host-resource chromewoven: upstream's rename/menu structure adopted; the fork chrome sits after the title ternary and stays reachable on both server and non-server branches (the fork's anti-stack-drop source assertions in ChatHeader.test.ts pass)
SidebarV2.tsxupstream replaced the fork's buildSidebarV2ThreadContextMenuItems with the shared threadActionMenu.logic builder used by the headershared builder adopted; the fork's copy-thread-id entry moved into the shared menu and given a toast-backed handler in useThreadActionMenu, so both surfaces offer it
ChatView.tsx bannersupstream's pingdotgg#5595 fold (reconnect + version skew → one calm line, suppression while an update runs) vs the fork's narrower resuming-update suppressionupstream's logic taken as a superset
ChatView.tsx scrollupstream's pingdotgg#5449 anchor-clear + rAF-deferred scrollToEnd vs the fork's unread-flag clearing in the same callbackboth kept
ComposerBannerStack / ChatHeader.test.tsadditive unions (default variant + urgent flag; both test suites)unioned

Adversarial review

grok-4.5 and gpt-5.6-sol over the git show --cc surface with worktree access. Both independently converged on the same defect:

FindingDisposition
HIGH (grok) / MED (codex) — the resolution dropped upstream's !reconnectingThroughVersionSkew guard on the server-version banner, so idle-reconnect-through-skew would show both the folded calm line and the update offer — exactly the stacking pingdotgg#5595 removesFixed. Guard restored with a comment naming why
LOW (grok) — dead buildSidebarV2ThreadContextMenuItems import left in SidebarV2Fixed. Removed

Clean per both: menu ids ↔ handlers across both consumers, rename focus/blur/escape paths, fork chrome reachability, timeline weave, and the updated test expectations (extended, not weakened).

Verification

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

Co-authored by @patroza

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

t3dotggand others added 5 commits August 7, 2026 10:10
…te notice (pingdotgg#5595)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…otgg#5593)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the four upstream commits after #375: thread actions from the chat
header title (pingdotgg#5592), per-turn runtime-mode recording (pingdotgg#5593), chat timeline
positioning stabilization (pingdotgg#5449), and the background-work banner no longer
hiding behind the update notice (pingdotgg#5595).
The chat header gains upstream's inline rename and title-menu (shared
threadActionMenu.logic) woven around the fork's remote-VS-Code open and
usage-dot/host-resource chrome. SidebarV2 adopts the shared menu builder in
place of the fork's buildSidebarV2ThreadContextMenuItems; the fork's
copy-thread-id entry moves into the shared menu (and gains a handler in
useThreadActionMenu) so both surfaces offer it.
ChatView takes upstream's folded reconnect/version banner logic (pingdotgg#5595, a
superset of the fork's resuming-update suppression) and the anchor-clearing
rAF scroll (pingdotgg#5449), keeping the fork's unread-flag clearing and its
unread-activity observer.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit f8d8555 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the seven upstream commits after #377: iOS terminal clear no longer
resets the session (pingdotgg#5440), Android scroll padding above the nav bar (pingdotgg#5415),
Android composer opacity (pingdotgg#5582), Clerk auth navigation headers (pingdotgg#5140), the
mobile app version bump to 1.0.2 (pingdotgg#5588), click-to-unpin (pingdotgg#5578), and the
correct new-thread shortcut in the sidebar tooltip (pingdotgg#5594).
Three resolutions:
- ThreadComposer: pingdotgg#5582 moves the backdrop gradient off Animated.View, where
Reanimated silently drops experimental_backgroundImage on Android — the very
bug it fixes. The fork's gradient was on that Animated.View, so it is removed
there and the fork's stronger lower-band stops (0.82/0.96 dark, 0.88/0.98
light) ride on upstream's plain-View backdrop instead.
- app.config: upstream's 1.0.2 version bump with the fork's
MOBILE_RUNTIME_VERSION_OVERRIDE escape hatch kept; its default policy is the
same fingerprint upstream documents.
- SidebarV2: upstream's pingdotgg#5594 label ordering (chat.new before chat.newLocal)
adopted — the fork's button has exactly the semantics upstream describes,
routing multi-project setups through the palette picker and creating
immediately otherwise. The fork's board and command-palette labels stay.
Upstream's two new react-mocking harness tests (pingdotgg#4479) are added to the fork's
isolatedUnitTestFiles. The fork's unit project runs isolate: false to reuse each
worker's module graph; upstream has no such config, so those tests assume full
isolation. Under a shared registry the component graph can already be bound to
the real react/compiler-runtime by an earlier file, the vi.mock("react") never
applies, and the compiled component reports a memo-cache hit and skips the hooks
the test asserts on. That is what made AddProviderInstanceDialog.environment
fail this PR's CI while passing in isolation. Two other react-mocking tests were
already in that list.
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.

3 participants

@patroza@t3dotgg@jmeistrich
, '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 b2ee17d7c into fork/dev - #377

Merged
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c
Aug 7, 2026
Merged

sync(upstream): merge upstream/main b2ee17d7c into fork/dev#377
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through b2ee17d7c — the four commits after #375.

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
b2ee17d7cfeat(web): thread actions from the chat header title (pingdotgg#5592)
7963cc70ffeat(server): record runtime mode per turn and on mode changes (pingdotgg#5593)
b792ed9f7fix(web): stabilize chat timeline positioning (pingdotgg#5449)
2e66b1fdffix(web): live background-work banner no longer hides behind the update notice (pingdotgg#5595)

Resolutions

WhereSituationResolution
ChatHeader.tsxupstream's inline rename + title-as-menu (pingdotgg#5592) landed in the region carrying the fork's remote-VS-Code open and usage-dot/host-resource chromewoven: upstream's rename/menu structure adopted; the fork chrome sits after the title ternary and stays reachable on both server and non-server branches (the fork's anti-stack-drop source assertions in ChatHeader.test.ts pass)
SidebarV2.tsxupstream replaced the fork's buildSidebarV2ThreadContextMenuItems with the shared threadActionMenu.logic builder used by the headershared builder adopted; the fork's copy-thread-id entry moved into the shared menu and given a toast-backed handler in useThreadActionMenu, so both surfaces offer it
ChatView.tsx bannersupstream's pingdotgg#5595 fold (reconnect + version skew → one calm line, suppression while an update runs) vs the fork's narrower resuming-update suppressionupstream's logic taken as a superset
ChatView.tsx scrollupstream's pingdotgg#5449 anchor-clear + rAF-deferred scrollToEnd vs the fork's unread-flag clearing in the same callbackboth kept
ComposerBannerStack / ChatHeader.test.tsadditive unions (default variant + urgent flag; both test suites)unioned

Adversarial review

grok-4.5 and gpt-5.6-sol over the git show --cc surface with worktree access. Both independently converged on the same defect:

FindingDisposition
HIGH (grok) / MED (codex) — the resolution dropped upstream's !reconnectingThroughVersionSkew guard on the server-version banner, so idle-reconnect-through-skew would show both the folded calm line and the update offer — exactly the stacking pingdotgg#5595 removesFixed. Guard restored with a comment naming why
LOW (grok) — dead buildSidebarV2ThreadContextMenuItems import left in SidebarV2Fixed. Removed

Clean per both: menu ids ↔ handlers across both consumers, rename focus/blur/escape paths, fork chrome reachability, timeline weave, and the updated test expectations (extended, not weakened).

Verification

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

Co-authored by @patroza

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

t3dotggand others added 5 commits August 7, 2026 10:10
…te notice (pingdotgg#5595)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…otgg#5593)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the four upstream commits after #375: thread actions from the chat
header title (pingdotgg#5592), per-turn runtime-mode recording (pingdotgg#5593), chat timeline
positioning stabilization (pingdotgg#5449), and the background-work banner no longer
hiding behind the update notice (pingdotgg#5595).
The chat header gains upstream's inline rename and title-menu (shared
threadActionMenu.logic) woven around the fork's remote-VS-Code open and
usage-dot/host-resource chrome. SidebarV2 adopts the shared menu builder in
place of the fork's buildSidebarV2ThreadContextMenuItems; the fork's
copy-thread-id entry moves into the shared menu (and gains a handler in
useThreadActionMenu) so both surfaces offer it.
ChatView takes upstream's folded reconnect/version banner logic (pingdotgg#5595, a
superset of the fork's resuming-update suppression) and the anchor-clearing
rAF scroll (pingdotgg#5449), keeping the fork's unread-flag clearing and its
unread-activity observer.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit f8d8555 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the seven upstream commits after #377: iOS terminal clear no longer
resets the session (pingdotgg#5440), Android scroll padding above the nav bar (pingdotgg#5415),
Android composer opacity (pingdotgg#5582), Clerk auth navigation headers (pingdotgg#5140), the
mobile app version bump to 1.0.2 (pingdotgg#5588), click-to-unpin (pingdotgg#5578), and the
correct new-thread shortcut in the sidebar tooltip (pingdotgg#5594).
Three resolutions:
- ThreadComposer: pingdotgg#5582 moves the backdrop gradient off Animated.View, where
Reanimated silently drops experimental_backgroundImage on Android — the very
bug it fixes. The fork's gradient was on that Animated.View, so it is removed
there and the fork's stronger lower-band stops (0.82/0.96 dark, 0.88/0.98
light) ride on upstream's plain-View backdrop instead.
- app.config: upstream's 1.0.2 version bump with the fork's
MOBILE_RUNTIME_VERSION_OVERRIDE escape hatch kept; its default policy is the
same fingerprint upstream documents.
- SidebarV2: upstream's pingdotgg#5594 label ordering (chat.new before chat.newLocal)
adopted — the fork's button has exactly the semantics upstream describes,
routing multi-project setups through the palette picker and creating
immediately otherwise. The fork's board and command-palette labels stay.
Upstream's two new react-mocking harness tests (pingdotgg#4479) are added to the fork's
isolatedUnitTestFiles. The fork's unit project runs isolate: false to reuse each
worker's module graph; upstream has no such config, so those tests assume full
isolation. Under a shared registry the component graph can already be bound to
the real react/compiler-runtime by an earlier file, the vi.mock("react") never
applies, and the compiled component reports a memo-cache hit and skips the hooks
the test asserts on. That is what made AddProviderInstanceDialog.environment
fail this PR's CI while passing in isolation. Two other react-mocking tests were
already in that list.
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.

3 participants

@patroza@t3dotgg@jmeistrich
, '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 b2ee17d7c into fork/dev - #377

Merged
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c
Aug 7, 2026
Merged

sync(upstream): merge upstream/main b2ee17d7c into fork/dev#377
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through b2ee17d7c — the four commits after #375.

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
b2ee17d7cfeat(web): thread actions from the chat header title (pingdotgg#5592)
7963cc70ffeat(server): record runtime mode per turn and on mode changes (pingdotgg#5593)
b792ed9f7fix(web): stabilize chat timeline positioning (pingdotgg#5449)
2e66b1fdffix(web): live background-work banner no longer hides behind the update notice (pingdotgg#5595)

Resolutions

WhereSituationResolution
ChatHeader.tsxupstream's inline rename + title-as-menu (pingdotgg#5592) landed in the region carrying the fork's remote-VS-Code open and usage-dot/host-resource chromewoven: upstream's rename/menu structure adopted; the fork chrome sits after the title ternary and stays reachable on both server and non-server branches (the fork's anti-stack-drop source assertions in ChatHeader.test.ts pass)
SidebarV2.tsxupstream replaced the fork's buildSidebarV2ThreadContextMenuItems with the shared threadActionMenu.logic builder used by the headershared builder adopted; the fork's copy-thread-id entry moved into the shared menu and given a toast-backed handler in useThreadActionMenu, so both surfaces offer it
ChatView.tsx bannersupstream's pingdotgg#5595 fold (reconnect + version skew → one calm line, suppression while an update runs) vs the fork's narrower resuming-update suppressionupstream's logic taken as a superset
ChatView.tsx scrollupstream's pingdotgg#5449 anchor-clear + rAF-deferred scrollToEnd vs the fork's unread-flag clearing in the same callbackboth kept
ComposerBannerStack / ChatHeader.test.tsadditive unions (default variant + urgent flag; both test suites)unioned

Adversarial review

grok-4.5 and gpt-5.6-sol over the git show --cc surface with worktree access. Both independently converged on the same defect:

FindingDisposition
HIGH (grok) / MED (codex) — the resolution dropped upstream's !reconnectingThroughVersionSkew guard on the server-version banner, so idle-reconnect-through-skew would show both the folded calm line and the update offer — exactly the stacking pingdotgg#5595 removesFixed. Guard restored with a comment naming why
LOW (grok) — dead buildSidebarV2ThreadContextMenuItems import left in SidebarV2Fixed. Removed

Clean per both: menu ids ↔ handlers across both consumers, rename focus/blur/escape paths, fork chrome reachability, timeline weave, and the updated test expectations (extended, not weakened).

Verification

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

Co-authored by @patroza

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

t3dotggand others added 5 commits August 7, 2026 10:10
…te notice (pingdotgg#5595)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…otgg#5593)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the four upstream commits after #375: thread actions from the chat
header title (pingdotgg#5592), per-turn runtime-mode recording (pingdotgg#5593), chat timeline
positioning stabilization (pingdotgg#5449), and the background-work banner no longer
hiding behind the update notice (pingdotgg#5595).
The chat header gains upstream's inline rename and title-menu (shared
threadActionMenu.logic) woven around the fork's remote-VS-Code open and
usage-dot/host-resource chrome. SidebarV2 adopts the shared menu builder in
place of the fork's buildSidebarV2ThreadContextMenuItems; the fork's
copy-thread-id entry moves into the shared menu (and gains a handler in
useThreadActionMenu) so both surfaces offer it.
ChatView takes upstream's folded reconnect/version banner logic (pingdotgg#5595, a
superset of the fork's resuming-update suppression) and the anchor-clearing
rAF scroll (pingdotgg#5449), keeping the fork's unread-flag clearing and its
unread-activity observer.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit f8d8555 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the seven upstream commits after #377: iOS terminal clear no longer
resets the session (pingdotgg#5440), Android scroll padding above the nav bar (pingdotgg#5415),
Android composer opacity (pingdotgg#5582), Clerk auth navigation headers (pingdotgg#5140), the
mobile app version bump to 1.0.2 (pingdotgg#5588), click-to-unpin (pingdotgg#5578), and the
correct new-thread shortcut in the sidebar tooltip (pingdotgg#5594).
Three resolutions:
- ThreadComposer: pingdotgg#5582 moves the backdrop gradient off Animated.View, where
Reanimated silently drops experimental_backgroundImage on Android — the very
bug it fixes. The fork's gradient was on that Animated.View, so it is removed
there and the fork's stronger lower-band stops (0.82/0.96 dark, 0.88/0.98
light) ride on upstream's plain-View backdrop instead.
- app.config: upstream's 1.0.2 version bump with the fork's
MOBILE_RUNTIME_VERSION_OVERRIDE escape hatch kept; its default policy is the
same fingerprint upstream documents.
- SidebarV2: upstream's pingdotgg#5594 label ordering (chat.new before chat.newLocal)
adopted — the fork's button has exactly the semantics upstream describes,
routing multi-project setups through the palette picker and creating
immediately otherwise. The fork's board and command-palette labels stay.
Upstream's two new react-mocking harness tests (pingdotgg#4479) are added to the fork's
isolatedUnitTestFiles. The fork's unit project runs isolate: false to reuse each
worker's module graph; upstream has no such config, so those tests assume full
isolation. Under a shared registry the component graph can already be bound to
the real react/compiler-runtime by an earlier file, the vi.mock("react") never
applies, and the compiled component reports a memo-cache hit and skips the hooks
the test asserts on. That is what made AddProviderInstanceDialog.environment
fail this PR's CI while passing in isolation. Two other react-mocking tests were
already in that list.
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.

3 participants

@patroza@t3dotgg@jmeistrich
, '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 b2ee17d7c into fork/dev - #377

Merged
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c
Aug 7, 2026
Merged

sync(upstream): merge upstream/main b2ee17d7c into fork/dev#377
patroza merged 5 commits into
fork/devfrom
sync/upstream-b2ee17d7c

Conversation

@omegent-app

Copy link
Copy Markdown

Adopts upstream through b2ee17d7c — the four commits after #375.

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
b2ee17d7cfeat(web): thread actions from the chat header title (pingdotgg#5592)
7963cc70ffeat(server): record runtime mode per turn and on mode changes (pingdotgg#5593)
b792ed9f7fix(web): stabilize chat timeline positioning (pingdotgg#5449)
2e66b1fdffix(web): live background-work banner no longer hides behind the update notice (pingdotgg#5595)

Resolutions

WhereSituationResolution
ChatHeader.tsxupstream's inline rename + title-as-menu (pingdotgg#5592) landed in the region carrying the fork's remote-VS-Code open and usage-dot/host-resource chromewoven: upstream's rename/menu structure adopted; the fork chrome sits after the title ternary and stays reachable on both server and non-server branches (the fork's anti-stack-drop source assertions in ChatHeader.test.ts pass)
SidebarV2.tsxupstream replaced the fork's buildSidebarV2ThreadContextMenuItems with the shared threadActionMenu.logic builder used by the headershared builder adopted; the fork's copy-thread-id entry moved into the shared menu and given a toast-backed handler in useThreadActionMenu, so both surfaces offer it
ChatView.tsx bannersupstream's pingdotgg#5595 fold (reconnect + version skew → one calm line, suppression while an update runs) vs the fork's narrower resuming-update suppressionupstream's logic taken as a superset
ChatView.tsx scrollupstream's pingdotgg#5449 anchor-clear + rAF-deferred scrollToEnd vs the fork's unread-flag clearing in the same callbackboth kept
ComposerBannerStack / ChatHeader.test.tsadditive unions (default variant + urgent flag; both test suites)unioned

Adversarial review

grok-4.5 and gpt-5.6-sol over the git show --cc surface with worktree access. Both independently converged on the same defect:

FindingDisposition
HIGH (grok) / MED (codex) — the resolution dropped upstream's !reconnectingThroughVersionSkew guard on the server-version banner, so idle-reconnect-through-skew would show both the folded calm line and the update offer — exactly the stacking pingdotgg#5595 removesFixed. Guard restored with a comment naming why
LOW (grok) — dead buildSidebarV2ThreadContextMenuItems import left in SidebarV2Fixed. Removed

Clean per both: menu ids ↔ handlers across both consumers, rename focus/blur/escape paths, fork chrome reachability, timeline weave, and the updated test expectations (extended, not weakened).

Verification

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

Co-authored by @patroza

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

t3dotggand others added 5 commits August 7, 2026 10:10
…te notice (pingdotgg#5595)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…otgg#5593)
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the four upstream commits after #375: thread actions from the chat
header title (pingdotgg#5592), per-turn runtime-mode recording (pingdotgg#5593), chat timeline
positioning stabilization (pingdotgg#5449), and the background-work banner no longer
hiding behind the update notice (pingdotgg#5595).
The chat header gains upstream's inline rename and title-menu (shared
threadActionMenu.logic) woven around the fork's remote-VS-Code open and
usage-dot/host-resource chrome. SidebarV2 adopts the shared menu builder in
place of the fork's buildSidebarV2ThreadContextMenuItems; the fork's
copy-thread-id entry moves into the shared menu (and gains a handler in
useThreadActionMenu) so both surfaces offer it.
ChatView takes upstream's folded reconnect/version banner logic (pingdotgg#5595, a
superset of the fork's resuming-update suppression) and the anchor-clearing
rAF scroll (pingdotgg#5449), keeping the fork's unread-flag clearing and its
unread-activity observer.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit f8d8555 into fork/devAug 7, 2026
4 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the seven upstream commits after #377: iOS terminal clear no longer
resets the session (pingdotgg#5440), Android scroll padding above the nav bar (pingdotgg#5415),
Android composer opacity (pingdotgg#5582), Clerk auth navigation headers (pingdotgg#5140), the
mobile app version bump to 1.0.2 (pingdotgg#5588), click-to-unpin (pingdotgg#5578), and the
correct new-thread shortcut in the sidebar tooltip (pingdotgg#5594).
Three resolutions:
- ThreadComposer: pingdotgg#5582 moves the backdrop gradient off Animated.View, where
Reanimated silently drops experimental_backgroundImage on Android — the very
bug it fixes. The fork's gradient was on that Animated.View, so it is removed
there and the fork's stronger lower-band stops (0.82/0.96 dark, 0.88/0.98
light) ride on upstream's plain-View backdrop instead.
- app.config: upstream's 1.0.2 version bump with the fork's
MOBILE_RUNTIME_VERSION_OVERRIDE escape hatch kept; its default policy is the
same fingerprint upstream documents.
- SidebarV2: upstream's pingdotgg#5594 label ordering (chat.new before chat.newLocal)
adopted — the fork's button has exactly the semantics upstream describes,
routing multi-project setups through the palette picker and creating
immediately otherwise. The fork's board and command-palette labels stay.
Upstream's two new react-mocking harness tests (pingdotgg#4479) are added to the fork's
isolatedUnitTestFiles. The fork's unit project runs isolate: false to reuse each
worker's module graph; upstream has no such config, so those tests assume full
isolation. Under a shared registry the component graph can already be bound to
the real react/compiler-runtime by an earlier file, the vi.mock("react") never
applies, and the compiled component reports a memo-cache hit and skips the hooks
the test asserts on. That is what made AddProviderInstanceDialog.environment
fail this PR's CI while passing in isolation. Two other react-mocking tests were
already in that list.
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.

3 participants

@patroza@t3dotgg@jmeistrich