Skip to content

[fork] downstream changes - #2

Draft
patroza wants to merge 33 commits into
fork/candidatesfrom
fork/changes
Draft

[fork] downstream changes#2
patroza wants to merge 33 commits into
fork/candidatesfrom
fork/changes

Conversation

@patroza

@patroza patroza commented Jul 24, 2026

Copy link
Copy Markdown
Owner

Managed downstream layer

Role Value
Base fork/candidates
Head fork/changes
Purpose Canonical downstream product changes
Deployment Never directly; composed into fork/integration

This 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/integration is the deployable aggregate.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Jul 24, 2026
@patroza
patroza force-pushed the fork/tim branch 2 times, most recently from c6b394a to 83d75d0 Compare July 25, 2026 05:23
@patroza
patroza changed the base branch from fork/tim to fork/candidates July 25, 2026 08:12
@patroza
patroza force-pushed the fork/changes branch 2 times, most recently from 2a67c78 to 27a72d4 Compare July 25, 2026 08:30
@patroza patroza changed the title feat: apply public fork changes feat: apply our fork changes Jul 25, 2026
@patroza patroza changed the title feat: apply our fork changes [fork] trunk Jul 25, 2026
@patroza patroza added FORK Long-lived protected fork provenance or private layer; do not merge directly. and removed vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Jul 25, 2026
@patroza
patroza force-pushed the fork/changes branch 4 times, most recently from 79176b5 to d526bc4 Compare July 26, 2026 08:56
@patroza patroza changed the title [fork] trunk [fork] private changes Jul 26, 2026
github-actions Bot and others added 30 commits August 1, 2026 08:57
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

FORK Long-lived protected fork provenance or private layer; do not merge directly. size:XS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant