Skip to content

sync(upstream): merge upstream/main 239ef1c54 into fork/dev - #378

Merged
omegent-app[bot] merged 8 commits into
fork/devfrom
sync/upstream-239ef1c54
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 239ef1c54 into fork/dev#378
omegent-app[bot] merged 8 commits into
fork/devfrom
sync/upstream-239ef1c54

Conversation

@omegent-app

@omegent-app omegent-app Bot commented Aug 7, 2026

Copy link
Copy Markdown

Adopts upstream through 239ef1c54 — the seven commits after #377, bringing fork/dev level with
upstream/main
(HEAD..upstream/main is empty).

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
239ef1c54 fix(web): show the correctly matching shortcut in new thread button's tooltip (pingdotgg#5594)
61b51ae0e feat(web): click the pin icon to unpin a thread (pingdotgg#5578)
bfc69e4b4 Bump mobile app version to 1.0.2 (pingdotgg#5588)
af281c9fc fix(mobile): repair Clerk auth navigation headers (pingdotgg#5140)
bd422fd8d fix(mobile): keep Android chat text from showing through the composer (pingdotgg#5582)
33a03c8a7 fix(mobile): pad scroll views above Android nav bar (pingdotgg#5415)
a17459e8a fix(mobile): avoid iOS terminal reset on clear (pingdotgg#5440)

All seven verified as ancestors of the merge commit individually, not just by range.

Resolutions

Three conflicts, each a real judgement call:

Where Situation Resolution
ThreadComposer.tsx pingdotgg#5582 moves the backdrop gradient off Animated.View onto a plain View + StyleSheet.absoluteFill, because Reanimated silently drops experimental_backgroundImage there on Android — which is the bug it fixes. The fork's gradient sat on exactly that Animated.View removed from the animated node; the fork's stronger lower-band stops (0.82/0.96 dark, 0.88/0.98 light at 42%) moved onto upstream's backdrop, so the fork's tuning survives on the node that actually paints
app.config.ts upstream bumps version to 1.0.2; the fork wraps runtimeVersion in a MOBILE_RUNTIME_VERSION_OVERRIDE escape hatch for OTA-to-installed-binary cases version bumped inside the fork's IIFE; its default policy is the same fingerprint upstream documents
SidebarV2.tsx pingdotgg#5594 argues the tooltip must name chat.new, not chat.newLocal adopted — checked against handleNewThreadClick: the fork's button routes multi-project setups through the palette picker and creates immediately otherwise, i.e. exactly chat.new semantics. The fork's board and command-palette labels stay

Plus one integration fix the merge owns, found by this PR's own CI going red:

Where Situation Resolution
apps/web/vite.config.ts upstream pingdotgg#4479 adds two tests that vi.mock("react") and drive components through reactHookHarness. Upstream runs tests fully isolated; the fork's unit project sets isolate: false to reuse each worker's module graph. Under a shared registry the component graph can already be bound to the real react/compiler-runtime by an earlier file, the mock never applies, and the compiled component reports a memo-cache hit — skipping the very hooks the test asserts on both files added to the fork's existing isolatedUnitTestFiles, where two other react-mocking tests already live

That is the whole story behind the AddProviderInstanceDialog.environment "flake": not timing (the test is synchronous) but worker scheduling deciding whether the mock lands. It failed this PR's first CI run and had flaked on earlier syncs. Three consecutive full-workspace runs are now identical (1 failed / 2,278 passed — the pre-existing Codex one).

Adversarial review

grok-4.5 and gpt-5.6-sol over the git show --cc surface with worktree access — no defects
from either.
Both independently confirmed: the gradient paints once, on the plain View only; the
override still feeds Expo's runtimeVersion; the shortcut label matches the command the button
actually invokes; and no fixture is still pinned to 1.0.1 (both checked the packages/contracts
latestVersion: "1.0.1" and identified it as unrelated Codex advisory fixture data).

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.
  • The AddProviderInstanceDialog.environment flake is root-caused and fixed (see above), not
    retried away: three consecutive full-workspace runs now give identical results.

Co-authored by @patroza

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

justynleung and others added 8 commits August 7, 2026 10:20
Co-authored-by: codex <codex@users.noreply.github.com>
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>
@omegent-app
omegent-app Bot force-pushed the sync/upstream-239ef1c54 branch from 93c21f6 to 4fdb933 Compare August 7, 2026 11:40
@omegent-app
omegent-app Bot merged commit 25af886 into fork/dev Aug 7, 2026
4 checks passed
omegent-app Bot added a commit that referenced this pull request Aug 7, 2026
Adopts the two upstream commits after #378: reconnects no longer shift the
mobile thread list (pingdotgg#5372) and the v0.0.32 release prep.

pingdotgg#5372 moves connection status out of the lists into the header title slot
(WorkspaceConnectionTitle / getConnectionAwareBrandHeaderOptions) and deletes
WorkspaceConnectionStatus. The fork rendered that status in four places across
HomeScreen and ThreadNavigationSidebar — exactly the row-shifting this fixes —
so those in-list surfaces are removed and the header slots adopted. The
auto-merge left one dangling {connectionStatus} in HomeScreen whose definition
upstream had deleted; typecheck caught it.

Fork surfaces kept around the new title:
- multi-environment selection: HomeScreen keeps its selectedEnvironmentIds
  label derivation and environmentLabelById (BoardScreen consumes it) instead
  of upstream's single selectedEnvironmentId.
- board mode: ThreadNavigationSidebar keeps its board branch, board-specific
  solid header, and board-gated search bar, with upstream's connection-aware
  brand slot merged into the same header options.
- HomeRouteScreen keeps the fork's in-flow HomeHeader as title owner rather
  than also restoring upstream's native-stack title, which would surface the
  connection status twice.

Adversarial review caught two holes in the first pass, both fixed here:
getConnectionAwareBrandHeaderOptions hardcodes the brand lockup and "Threads",
so spreading it over the fork's list-mode titles silently replaced "Board" /
"Projects"; and iOS Home has its own IosHomeHeader owning the native title, so
dropping upstream's route-level options left that path with no status surface
at all. The helper now takes an optional title/brand, and both the sidebar and
IosHomeHeader pass their mode title through it.

Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
omegent-app Bot added a commit that referenced this pull request Aug 7, 2026
Adopts the two upstream commits after #378: reconnects no longer shift the
mobile thread list (pingdotgg#5372) and the v0.0.32 release prep.

pingdotgg#5372 moves connection status out of the lists into the header title slot
(WorkspaceConnectionTitle / getConnectionAwareBrandHeaderOptions) and deletes
WorkspaceConnectionStatus. The fork rendered that status in four places across
HomeScreen and ThreadNavigationSidebar — exactly the row-shifting this fixes —
so those in-list surfaces are removed and the header slots adopted. The
auto-merge left one dangling {connectionStatus} in HomeScreen whose definition
upstream had deleted; typecheck caught it.

Fork surfaces kept around the new title:
- multi-environment selection: HomeScreen keeps its selectedEnvironmentIds
  label derivation and environmentLabelById (BoardScreen consumes it) instead
  of upstream's single selectedEnvironmentId.
- board mode: ThreadNavigationSidebar keeps its board branch, board-specific
  solid header, and board-gated search bar, with upstream's connection-aware
  brand slot merged into the same header options.
- HomeRouteScreen keeps the fork's in-flow HomeHeader as title owner rather
  than also restoring upstream's native-stack title, which would surface the
  connection status twice.

Adversarial review caught two holes in the first pass, both fixed here:
getConnectionAwareBrandHeaderOptions hardcodes the brand lockup and "Threads",
so spreading it over the fork's list-mode titles silently replaced "Board" /
"Projects"; and iOS Home has its own IosHomeHeader owning the native title, so
dropping upstream's route-level options left that path with no status surface
at all. The helper now takes an optional title/brand, and both the sidebar and
IosHomeHeader pass their mode title through it.

A second review pass caught one more surface — the custom (Android split)
sidebar large title still hardcoded "Threads" — plus the status offset being
applied to caller-supplied titles that lack the brand lockup's inset. Both
fixed, and mobileSurfaceExistence now asserts every adopting surface passes its
own list-mode title (that assertion fails on the pre-fix tree).

Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants