[fork] downstream changes - #2
Draft
patroza wants to merge 33 commits into
Draft
Conversation
omegent-app
Bot
force-pushed
the
fork/changes
branch
from
July 24, 2026 20:32
a872da5 to
a671fa2
Compare
omegent-app
Bot
force-pushed
the
fork/tim
branch
from
July 24, 2026 20:32
17679d2 to
5348a83
Compare
patroza
force-pushed
the
fork/tim
branch
2 times, most recently
from
July 25, 2026 05:23
c6b394a to
83d75d0
Compare
patroza
force-pushed
the
fork/changes
branch
2 times, most recently
from
July 25, 2026 08:30
2a67c78 to
27a72d4
Compare
patroza
force-pushed
the
fork/changes
branch
4 times, most recently
from
July 26, 2026 08:56
79176b5 to
d526bc4
Compare
Client runtime state, connection diagnostics, and list helpers shared by web and mobile.
Supporting packages that diverge from upstream for the fork product.
Server product layer: work-item bridges, queue/recovery, VCS drivers, single-source RPC authorization scopes, worktree bootstrap, and related tests. Includes thread.context.compact contracts wiring on the server.
Web UI product deltas including lists, composer, usage gauges, file/content search, and thread-loading send guards.
Mobile shell product, list modes, composer queue API, and scroll behavior after rolling back experimental feed layout work.
Desktop packaging scripts/config and backend ownership behavior for the fork desktop shell.
ElectronApp no longer exposes requestSingleInstanceLock (Clerk bridge owns the single-instance lock). Remove it from DesktopUpdates test stubs so desktop typecheck is green on fork/changes.
…ests Repair HomeHeader ternary/stageLabel, HomeScreen bottom-toolbar clearance, and drop obsolete requestSingleInstanceLock mocks so Fork CI Check stays green on fork/changes after the history rewrite.
The unit project reuses workers with isolate:false, so mocking useAssetUrl and react hooks never sticks when assetUrls is already in the module graph. Move ProjectFavicon.test.tsx into unit-isolated (same as other React mock tests) and keep dual-path assetUrl mocks for path resolution.
Compose is an integration rebuild, not a product-layer gate. Drop the push trigger so force-pushes, deploy-key tip updates, and overlay auto-rebase no longer attach "Compose and dispatch integration CI" to permanent fork/* draft PRs or look like layer failures. Compose now fires only when a PR merges into fork/changes or a registered overlay base, or via workflow_dispatch. Full Tim/candidates upstream restacks stay manual/local. Document that layer status is Fork CI (Check/Test/Mobile/Release Smoke) only.
Make the product default for draft threads match the preferred worktree workflow: New worktree with Start from origin enabled. Mobile falls back to the shared server defaults when config is still loading. Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com> Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Upstream ci.yml uses blacksmith-* runners this fork does not provide, so Tim/candidates permanent PRs queued forever. Keep that workflow disabled and cover stack bases with Fork CI (dispatch for fork/tim → main PR; PR bases for fork/tim and fork/candidates).
Sit fork/base between upstream main and Tim so Blacksmith-free runners and Fork CI live once under all provenance layers. Register PR #255 in pr-stack; retarget Tim to base. Drop the need for tip CI hacks on tim/candidates.
.vscode/tasks.json only builds the t3-code extension; it belongs with .vscode/launch.json on fork/vscode, not on shared fork/changes.
Ops fleet dir-deploy expects this script so it can produce release/linux-unpacked for workstation catch-up. It was dropped when desktop packaging moved to build-desktop-artifact.ts; re-add a thin wrapper that builds the electron-builder dir target. Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
Grok ACP sessions default to ask (approval-heavy tools). We already pin agent on session start, but Build turns that applied reasoning effort via session/set_mode skipped re-pinning agent, so the mode channel could stay off agent. Always resolve non-plan interaction modes to agent (including undefined) and re-apply agent/plan after every turn's model selection so Build never sticks in ask. Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
) Nitro GFM often gives every table_cell the same beg/end span (0:0). Keys built as type:beg:end then collided, LogBox spammed, native text thrashing zeroed JS FPS and climbed RAM. Always include sibling index in node keys and avoid no-op highlight state updates on cache hits. Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
Open tabs keep hashed dynamic-import URLs from the previous build; after a deploy those chunks disappear and DiffPanel/FilePreview crash with "Failed to fetch dynamically imported module". Listen for Vite's vite:preloadError and reload once (with cooldown) so the new asset map loads. Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com> Co-authored-by: Enrico Polanski <16064771+enricopolanski@users.noreply.github.com>
…#264) Nitro GFM still hands every cell beg/end 0:0. Use explicit row/col keys in NativeTable and tag markdownNodeKey segments so keys can never collapse back to the pre-fix type:beg:end shape that LogBox reported. Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
Fork sends when connected (even mid-turn) but the busy/edit path returned true as success without removing the message, which cleared backoff and immediately re-entered beginDispatch. Use explicit delivered/deferred/failed outcomes, fingerprint effect deps, and stabilize the shell-status map so reconnect shell ticks cannot thrash ThreadOutboxDrainWorker. Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
Discord #266 landed OmegentDeepLinkCoordinator, deepLinks helpers, and ChatView scroll on the discord overlay. Those are shared web surfaces and collided with identity's IdentityClaimGate mount in __root during compose. Keep them on fork/changes so overlays only own client-specific code; Discord bot ResponseBridge stays on fork/discord. Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
Discord and Omegent pins emit `/?thread={id}`, but the index landing always
auto-started a new draft once shells bootstrapped, racing (and often winning)
against OmegentDeepLinkCoordinator. Capture the deep-link intent early and
skip the auto-draft while the target thread is still openable.
Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Native `eas build` was failing silently after the Expo Free plan monthly iOS quota ran out, so fingerprint-continuous-deploy never published OTAs to the installed TestFlight binary. Replacing the silent action with a logged deploy script that falls back to the latest finished binary runtime, plus a runtime-version override for pure-JS emergency ships. Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
#270 still abandoned `?thread=` when findThreadRef was null on the first bootstrapped tick (or lost to welcome bootstrap). Always defer index auto-draft while deep-link intent is present, navigate via primary env fallback, and skip server welcome bootstrap on `/?thread=` landings. Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com> Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Keep fork/changes for allowlisted paths during overlay auto-rebase so identity can restack onto mobile runtimeVersion policy. Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
Use the fork product SidebarV2 and fix snoozeWakeLabel to pass { now }
instead of a Date after upstream signature changes.
- Cast Clerk bridge isPrimaryInstance for SDK typing
- Drop duplicate IconClock import in mobile AppSymbol
- Drop unused Sidebar.logic.test imports after search describe merge
- Keep fork SidebarV2 with snoozeWakeLabel { now } signature fix
Wire showSettledDivider/snooze props through HomeScreen and ThreadNav so multi-env list types match candidates; drop unused home imports.
* fix(server): durable restartRecovery when adapter listSessions is empty stopAll only marked adapter listSessions rows, then cleared activeTurnId on every binding. Mid-teardown empty listSessions left live SQLite rows with no marker and no legacy activeTurnId, so post-deploy reconcile saw zero interrupted candidates. Record recovery markers from in-memory connecting/running sessions and from persisted starting/running bindings that still have an active turn id, re-write those markers when flipping rows to stopped, and cover the binding-only path with a test. * fix(server): interrupt in-flight turns ~30s before stopAll on SIGTERM Shutdown already persisted restartRecovery markers, but stopAll tore sessions down without a cooperative interrupt. On SIGTERM, interrupt connecting/running turns first, wait 30s (configurable), then stopAll (default 60s) so cancel reaches providers inside ops' ~150s main-pid reap window. Tests zero the interrupt grace and assert interrupt is called for working sessions. --------- Co-authored-by: T3 Code PR Stack <41898282+github-actions[bot]@users.noreply.github.com>
The classic mobile thread lists (phone Home and the iPad navigation sidebar) rendered settled threads with the same three-line chrome as active work — favicon, title, status pill, branch/server subtitle, PR badge, chevron — so the "Settled" shelf read as more inbox rather than history. Web has had a distinct slim settled row in both list modes (Sidebar.tsx settled shelf, SidebarV2 slim variant), and mobile's own Thread List v2 settled tail already ships one; only the classic mobile path was missing it. Settled rows now collapse to a single dimmed line — dimmed favicon, muted one-line title, draft dot, trailing settle time — in both the compact and sidebar variants, matching thread-list-v2-items.tsx. The row keeps its tap target (44pt), swipe actions, and long-press settle/unsettle menu. The trailing label uses the settle stamp when the server recorded one and falls back to last activity, so the shelf reads in the order it is sorted (resolveSettledRowTimestamp mirrors web's resolveSettledTimestamp). Settled rows lead with a favicon only where the row already carries project context (recency / flat / Needs attention); project-grouped lists already show one in the group header. Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Managed downstream layer
fork/candidatesfork/changesfork/integrationThis is the permanent downstream product layer and the normal base for feature PRs. It contains our shared/fork-owned changes on top of the Tim and upstream-candidate provenance layers.
The following implementations are deliberately excluded and remain in managed draft overlays:
Private operations, credentials, machine topology, host configuration, and deployment implementation remain outside this public repository.
This PR intentionally remains open and draft. Do not merge it;
fork/integrationis the deployable aggregate.