sync(upstream): merge upstream/main 6b73b3def into fork/dev - #368

Merged
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 6b73b3def into fork/dev#368
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 7, 2026

Copy link
Copy Markdown

Adopts upstream through 6b73b3def, headlined by pingdotgg#5493 "paginate thread loading with
user-anchored turn windows"
— 2,093 insertions plus a keyset-index migration.

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.

The candidate question, settled with evidence

pingdotgg#4018 (getThreadActivities) is superseded — upstream never merged it and ships
loadOlderTurns instead. And the check you suggested surfaced more: pingdotgg#3510 (mobile paging) is
partially superseded too
— its mobile scroll-up half is exactly the scaffolding this merge
removes, while its server bounded-replay half in OrchestrationEngine stays active.

Both are recorded in .github/upstream-candidates.json (superseded / partially-superseded,
with what replaced them and what remains).

The server RPC stays. Deployed mobile builds still call orchestration.getThreadActivities;
the RPC, schemas and window constant are kept as a marked compatibility surface. Remove once no
fleet mobile build predates this merge.

On "undo the candidate first": it would have shrunk the 24 textual conflicts, but not the real
blockers — those were upstream's new code meeting fork-added fields/services, which exist regardless.

What the resolutions actually involved

All 24 textual conflicts went to upstream. The expensive part was what git auto-merged wrong or
left dangling — found by typecheck and tests, never by conflict markers:

WhereDefectResolution
threads.tsupstream's applyItemLocked header welded onto the fork's batch-reducer body, referencing an out-of-scope variable and silently dropping upstream's synchronized branchfork batching layer removed (+2 tests); upstream body restored
threads.tsfork's load-once HTTP fallback guard lostreimplemented on upstream's model; its regression test passes
ws.tsfork reuseBaseBranch flow vs upstream pingdotgg#5556 no-origin fallback — neither alone compiledcombined; upstream's new fallback test given the projection stub the fork's bootstrap wait requires
ProjectionSnapshotQueryupstream's windowed message SQL missing fork source_jsonevery windowed read failed decode; bounded query destructured 9 results from 7 queriescolumn added; fork's queued-messages + pending-turn-start members restored
web/mobile UIprop/rename skews (selectedThreads, WorkspaceTarget, routeServerThreadShell, queue props)reconciled per owning side
migrationsledger fixtures drifted by upstream's 037extended; fork 037 lives in t3_fork_sql_migrations, no collision

fork/tim

fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts/orchestration — the same
surface — but no tim commit is merged upstream, so nothing tim-authored is superseded. Review
those diffs with tim provenance in mind; tim-derived behaviour with tests is green.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,269 tests pass (2,281 collected), including upstream's 11 pagination and 7 windowed-detail
    tests, the fork's five bootstrap replay/reuse tests, and the terminal-failure and load-once
    regression tests. Single failure is the pre-existing CodexTextGeneration launch-args one,
    reproducible on unmerged fork/dev.
  • Adversarial reviews by grok-4.5 and gpt-5.6-sol over the git show --cc resolution
    surface: findings below.

Adversarial review findings & dispositions

grok-4.5 — 1 HIGH, 1 MED, all other categories explicitly clear:

FindingDisposition
HIGH — fork's bootstrap replay/reuse block dropped in ws.ts: worktreeAlreadyPrepared declared and read but never set; a replayed bootstrap would re-run git worktree add -b and fail on the existing branch; the five fork tests locking this in were deletedFixed. Full replay/reuse block restored (projected-shell lookup → reuse existing worktree / recreate at the recorded branch), all five fork bootstrap tests re-inserted and passing alongside upstream's no-origin test. Restoring it also exposed that the merged code checked remoteExistsbefore the reuse short-circuit — now evaluated lazily, so the reuse path never touches the remote
MEDMessagesTimeline.test.tsx lost the fork's positive load-control assertions; remaining test would pass with the control deletedFixed. Positive assertions added for upstream's "Load earlier turns" / "Loading earlier turns…" header states

gpt-5.6-sol — 4 HIGH, 3 MED, 1 LOW claimed; each verified against the tree:

FindingDisposition
HIGHsetDeleted() on terminal subscription failure runs outside applyLock, racing older-page merges; every other history rewrite is serialized by that lockConfirmed weld, fixed. Upstream only calls setDeleted from inside applyItemLocked; the fork's terminal path now takes the lock too
HIGH — fork's 500-activity truncation applied to upstream's turn-windowed snapshot: rows dropped mid-window are unreachable (loading earlier turns fetches earlier windows, never the middle of this one)Confirmed, fixed. Cap + hasMoreActivities now apply only to the legacy unbounded snapshot, where the compat activities-page RPC can recover them; windowed snapshots return the full window
HIGHnextLatestTurnId computed but ignored in ProjectionPipeline, expression duplicated in the upsertConfirmed (severity: cosmetic), fixed. Variable now used
HIGH — older-page cursor read before historyEpoch, neither under applyLockOut of scope. That region is upstream's own code, byte-identical to 6b73b3def — a candidate for an upstream issue, not a resolution defect
MED — upstream's loadingServerThread/activeServerThread computed but never consumed; hideEmptyPlaceholder lost the threadDetailLoading guard, so a loading thread could flash the genuine-empty placeholderConfirmed welds, fixed.activeServerThread now drives isServerThread/activeThread/threadError as upstream intended, and the placeholder guard is restored
MED — mobile activeThreadBusy threaded into screens but never readConfirmed dangling, removed. Upstream's consumers (send-button "Queue" label + queued-count note) are superseded by the fork's sendEntersSteeringQueue (same running/starting predicate) and queue chips; the dead threading is deleted rather than double-wired
MED — fork's live-event batching (groupedWithin) lostIntentional. The batch reducer was a weld casualty either way (it silently dropped upstream's synchronized branch); upstream's epoch/semaphore apply model plus windowed initial snapshots replaces the render-storm bound it provided. If large-thread churn resurfaces, batching gets rebuilt against the new model, not welded onto it
LOW — timeline tests assert rendered strings, not interaction semanticsAccepted. These are SSR-markup existence tests by design; interaction is covered at the ChatView level

Both reviews independently cleared the SQL/decode surface (source_json, queued messages, pending turn start, keyset ORDER) and found no state-machine races beyond the setDeleted weld above.

Co-authored by @patroza

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

@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch 3 times, most recently from c2f2623 to 2735b47CompareAugust 7, 2026 05:34
Eight commits, headlined by pingdotgg#5493 "paginate thread loading with user-anchored
turn windows" -- 2093 insertions plus a keyset index migration.
Candidate #29 ("perf: import bounded web thread history", upstream pingdotgg#4018) is
confirmed superseded: upstream never merged pingdotgg#4018 and ships loadOlderTurns
instead. The candidate is removed from web, mobile and client-runtime --
olderThreadActivities.ts deleted, ChatView and the mobile composer/feed/screens
rewired to upstream's loadEarlier model. The SERVER half stays: deployed mobile
builds still call orchestration.getThreadActivities, so the RPC, its schemas and
the activity window constant are retained as a compatibility surface and marked
as such.
All 24 textual conflicts resolved to upstream. The expensive work was what git
auto-merged wrong or left dangling, found by typecheck and tests, not markers:
- threads.ts: upstream's applyItemLocked header welded onto the fork's batch
reducer body, referencing an out-of-scope identifier and silently dropping
upstream's synchronized branch. The fork's batching layer (groupedWithin,
reduceThreadStreamItems, eventBatchSize) is removed with its two tests; the
fork's load-once HTTP fallback guard is reimplemented on upstream's model and
its regression test passes again.
- ws.ts: the fork's reuseBaseBranch worktree flow and upstream's pingdotgg#5556
no-origin fallback are combined; neither side alone compiled.
- ProjectionSnapshotQuery: upstream's new windowed message query lacked the
fork's source_json column, failing decode on every windowed read; the bounded
detail query destructured nine results from seven queries -- the fork's
queued-messages and pending-turn-start members are restored.
- BranchToolbar/SidebarV2/MessagesTimeline/ChatView: prop and rename skews
reconciled; fork surface-existence assertion updated for the new feed call.
- Migration ledger fixtures extended for upstream migration 037, which lands in
the upstream namespace and does not collide with the fork's renumbered 037.
- Upstream's new tests adapted to fork-required fields (queuedMessages,
pendingTurnStart) and the fork's projection-wait in bootstrap.
Verified: full recursive typecheck clean across 17 packages; 2264 tests pass
including upstream's 11 pagination and 7 windowed-detail tests. The single
failure (CodexTextGeneration structured output) predates this merge.
fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts; no tim
commit is merged upstream, so review those diffs with tim provenance in mind.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch from 2735b47 to a19d3eaCompareAugust 7, 2026 05:53
@omegent-app
omegent-appBot marked this pull request as ready for review August 7, 2026 05:54
@patroza
patroza merged commit 54187a4 into fork/devAug 7, 2026
4 of 8 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
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.

2 participants

@patroza@t3dotgg
, '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 6b73b3def into fork/dev - #368

Merged
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 6b73b3def into fork/dev#368
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 7, 2026

Copy link
Copy Markdown

Adopts upstream through 6b73b3def, headlined by pingdotgg#5493 "paginate thread loading with
user-anchored turn windows"
— 2,093 insertions plus a keyset-index migration.

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.

The candidate question, settled with evidence

pingdotgg#4018 (getThreadActivities) is superseded — upstream never merged it and ships
loadOlderTurns instead. And the check you suggested surfaced more: pingdotgg#3510 (mobile paging) is
partially superseded too
— its mobile scroll-up half is exactly the scaffolding this merge
removes, while its server bounded-replay half in OrchestrationEngine stays active.

Both are recorded in .github/upstream-candidates.json (superseded / partially-superseded,
with what replaced them and what remains).

The server RPC stays. Deployed mobile builds still call orchestration.getThreadActivities;
the RPC, schemas and window constant are kept as a marked compatibility surface. Remove once no
fleet mobile build predates this merge.

On "undo the candidate first": it would have shrunk the 24 textual conflicts, but not the real
blockers — those were upstream's new code meeting fork-added fields/services, which exist regardless.

What the resolutions actually involved

All 24 textual conflicts went to upstream. The expensive part was what git auto-merged wrong or
left dangling — found by typecheck and tests, never by conflict markers:

WhereDefectResolution
threads.tsupstream's applyItemLocked header welded onto the fork's batch-reducer body, referencing an out-of-scope variable and silently dropping upstream's synchronized branchfork batching layer removed (+2 tests); upstream body restored
threads.tsfork's load-once HTTP fallback guard lostreimplemented on upstream's model; its regression test passes
ws.tsfork reuseBaseBranch flow vs upstream pingdotgg#5556 no-origin fallback — neither alone compiledcombined; upstream's new fallback test given the projection stub the fork's bootstrap wait requires
ProjectionSnapshotQueryupstream's windowed message SQL missing fork source_jsonevery windowed read failed decode; bounded query destructured 9 results from 7 queriescolumn added; fork's queued-messages + pending-turn-start members restored
web/mobile UIprop/rename skews (selectedThreads, WorkspaceTarget, routeServerThreadShell, queue props)reconciled per owning side
migrationsledger fixtures drifted by upstream's 037extended; fork 037 lives in t3_fork_sql_migrations, no collision

fork/tim

fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts/orchestration — the same
surface — but no tim commit is merged upstream, so nothing tim-authored is superseded. Review
those diffs with tim provenance in mind; tim-derived behaviour with tests is green.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,269 tests pass (2,281 collected), including upstream's 11 pagination and 7 windowed-detail
    tests, the fork's five bootstrap replay/reuse tests, and the terminal-failure and load-once
    regression tests. Single failure is the pre-existing CodexTextGeneration launch-args one,
    reproducible on unmerged fork/dev.
  • Adversarial reviews by grok-4.5 and gpt-5.6-sol over the git show --cc resolution
    surface: findings below.

Adversarial review findings & dispositions

grok-4.5 — 1 HIGH, 1 MED, all other categories explicitly clear:

FindingDisposition
HIGH — fork's bootstrap replay/reuse block dropped in ws.ts: worktreeAlreadyPrepared declared and read but never set; a replayed bootstrap would re-run git worktree add -b and fail on the existing branch; the five fork tests locking this in were deletedFixed. Full replay/reuse block restored (projected-shell lookup → reuse existing worktree / recreate at the recorded branch), all five fork bootstrap tests re-inserted and passing alongside upstream's no-origin test. Restoring it also exposed that the merged code checked remoteExistsbefore the reuse short-circuit — now evaluated lazily, so the reuse path never touches the remote
MEDMessagesTimeline.test.tsx lost the fork's positive load-control assertions; remaining test would pass with the control deletedFixed. Positive assertions added for upstream's "Load earlier turns" / "Loading earlier turns…" header states

gpt-5.6-sol — 4 HIGH, 3 MED, 1 LOW claimed; each verified against the tree:

FindingDisposition
HIGHsetDeleted() on terminal subscription failure runs outside applyLock, racing older-page merges; every other history rewrite is serialized by that lockConfirmed weld, fixed. Upstream only calls setDeleted from inside applyItemLocked; the fork's terminal path now takes the lock too
HIGH — fork's 500-activity truncation applied to upstream's turn-windowed snapshot: rows dropped mid-window are unreachable (loading earlier turns fetches earlier windows, never the middle of this one)Confirmed, fixed. Cap + hasMoreActivities now apply only to the legacy unbounded snapshot, where the compat activities-page RPC can recover them; windowed snapshots return the full window
HIGHnextLatestTurnId computed but ignored in ProjectionPipeline, expression duplicated in the upsertConfirmed (severity: cosmetic), fixed. Variable now used
HIGH — older-page cursor read before historyEpoch, neither under applyLockOut of scope. That region is upstream's own code, byte-identical to 6b73b3def — a candidate for an upstream issue, not a resolution defect
MED — upstream's loadingServerThread/activeServerThread computed but never consumed; hideEmptyPlaceholder lost the threadDetailLoading guard, so a loading thread could flash the genuine-empty placeholderConfirmed welds, fixed.activeServerThread now drives isServerThread/activeThread/threadError as upstream intended, and the placeholder guard is restored
MED — mobile activeThreadBusy threaded into screens but never readConfirmed dangling, removed. Upstream's consumers (send-button "Queue" label + queued-count note) are superseded by the fork's sendEntersSteeringQueue (same running/starting predicate) and queue chips; the dead threading is deleted rather than double-wired
MED — fork's live-event batching (groupedWithin) lostIntentional. The batch reducer was a weld casualty either way (it silently dropped upstream's synchronized branch); upstream's epoch/semaphore apply model plus windowed initial snapshots replaces the render-storm bound it provided. If large-thread churn resurfaces, batching gets rebuilt against the new model, not welded onto it
LOW — timeline tests assert rendered strings, not interaction semanticsAccepted. These are SSR-markup existence tests by design; interaction is covered at the ChatView level

Both reviews independently cleared the SQL/decode surface (source_json, queued messages, pending turn start, keyset ORDER) and found no state-machine races beyond the setDeleted weld above.

Co-authored by @patroza

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

@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch 3 times, most recently from c2f2623 to 2735b47CompareAugust 7, 2026 05:34
Eight commits, headlined by pingdotgg#5493 "paginate thread loading with user-anchored
turn windows" -- 2093 insertions plus a keyset index migration.
Candidate #29 ("perf: import bounded web thread history", upstream pingdotgg#4018) is
confirmed superseded: upstream never merged pingdotgg#4018 and ships loadOlderTurns
instead. The candidate is removed from web, mobile and client-runtime --
olderThreadActivities.ts deleted, ChatView and the mobile composer/feed/screens
rewired to upstream's loadEarlier model. The SERVER half stays: deployed mobile
builds still call orchestration.getThreadActivities, so the RPC, its schemas and
the activity window constant are retained as a compatibility surface and marked
as such.
All 24 textual conflicts resolved to upstream. The expensive work was what git
auto-merged wrong or left dangling, found by typecheck and tests, not markers:
- threads.ts: upstream's applyItemLocked header welded onto the fork's batch
reducer body, referencing an out-of-scope identifier and silently dropping
upstream's synchronized branch. The fork's batching layer (groupedWithin,
reduceThreadStreamItems, eventBatchSize) is removed with its two tests; the
fork's load-once HTTP fallback guard is reimplemented on upstream's model and
its regression test passes again.
- ws.ts: the fork's reuseBaseBranch worktree flow and upstream's pingdotgg#5556
no-origin fallback are combined; neither side alone compiled.
- ProjectionSnapshotQuery: upstream's new windowed message query lacked the
fork's source_json column, failing decode on every windowed read; the bounded
detail query destructured nine results from seven queries -- the fork's
queued-messages and pending-turn-start members are restored.
- BranchToolbar/SidebarV2/MessagesTimeline/ChatView: prop and rename skews
reconciled; fork surface-existence assertion updated for the new feed call.
- Migration ledger fixtures extended for upstream migration 037, which lands in
the upstream namespace and does not collide with the fork's renumbered 037.
- Upstream's new tests adapted to fork-required fields (queuedMessages,
pendingTurnStart) and the fork's projection-wait in bootstrap.
Verified: full recursive typecheck clean across 17 packages; 2264 tests pass
including upstream's 11 pagination and 7 windowed-detail tests. The single
failure (CodexTextGeneration structured output) predates this merge.
fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts; no tim
commit is merged upstream, so review those diffs with tim provenance in mind.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch from 2735b47 to a19d3eaCompareAugust 7, 2026 05:53
@omegent-app
omegent-appBot marked this pull request as ready for review August 7, 2026 05:54
@patroza
patroza merged commit 54187a4 into fork/devAug 7, 2026
4 of 8 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
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.

2 participants

@patroza@t3dotgg
, '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 6b73b3def into fork/dev - #368

Merged
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 6b73b3def into fork/dev#368
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 7, 2026

Copy link
Copy Markdown

Adopts upstream through 6b73b3def, headlined by pingdotgg#5493 "paginate thread loading with
user-anchored turn windows"
— 2,093 insertions plus a keyset-index migration.

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.

The candidate question, settled with evidence

pingdotgg#4018 (getThreadActivities) is superseded — upstream never merged it and ships
loadOlderTurns instead. And the check you suggested surfaced more: pingdotgg#3510 (mobile paging) is
partially superseded too
— its mobile scroll-up half is exactly the scaffolding this merge
removes, while its server bounded-replay half in OrchestrationEngine stays active.

Both are recorded in .github/upstream-candidates.json (superseded / partially-superseded,
with what replaced them and what remains).

The server RPC stays. Deployed mobile builds still call orchestration.getThreadActivities;
the RPC, schemas and window constant are kept as a marked compatibility surface. Remove once no
fleet mobile build predates this merge.

On "undo the candidate first": it would have shrunk the 24 textual conflicts, but not the real
blockers — those were upstream's new code meeting fork-added fields/services, which exist regardless.

What the resolutions actually involved

All 24 textual conflicts went to upstream. The expensive part was what git auto-merged wrong or
left dangling — found by typecheck and tests, never by conflict markers:

WhereDefectResolution
threads.tsupstream's applyItemLocked header welded onto the fork's batch-reducer body, referencing an out-of-scope variable and silently dropping upstream's synchronized branchfork batching layer removed (+2 tests); upstream body restored
threads.tsfork's load-once HTTP fallback guard lostreimplemented on upstream's model; its regression test passes
ws.tsfork reuseBaseBranch flow vs upstream pingdotgg#5556 no-origin fallback — neither alone compiledcombined; upstream's new fallback test given the projection stub the fork's bootstrap wait requires
ProjectionSnapshotQueryupstream's windowed message SQL missing fork source_jsonevery windowed read failed decode; bounded query destructured 9 results from 7 queriescolumn added; fork's queued-messages + pending-turn-start members restored
web/mobile UIprop/rename skews (selectedThreads, WorkspaceTarget, routeServerThreadShell, queue props)reconciled per owning side
migrationsledger fixtures drifted by upstream's 037extended; fork 037 lives in t3_fork_sql_migrations, no collision

fork/tim

fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts/orchestration — the same
surface — but no tim commit is merged upstream, so nothing tim-authored is superseded. Review
those diffs with tim provenance in mind; tim-derived behaviour with tests is green.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,269 tests pass (2,281 collected), including upstream's 11 pagination and 7 windowed-detail
    tests, the fork's five bootstrap replay/reuse tests, and the terminal-failure and load-once
    regression tests. Single failure is the pre-existing CodexTextGeneration launch-args one,
    reproducible on unmerged fork/dev.
  • Adversarial reviews by grok-4.5 and gpt-5.6-sol over the git show --cc resolution
    surface: findings below.

Adversarial review findings & dispositions

grok-4.5 — 1 HIGH, 1 MED, all other categories explicitly clear:

FindingDisposition
HIGH — fork's bootstrap replay/reuse block dropped in ws.ts: worktreeAlreadyPrepared declared and read but never set; a replayed bootstrap would re-run git worktree add -b and fail on the existing branch; the five fork tests locking this in were deletedFixed. Full replay/reuse block restored (projected-shell lookup → reuse existing worktree / recreate at the recorded branch), all five fork bootstrap tests re-inserted and passing alongside upstream's no-origin test. Restoring it also exposed that the merged code checked remoteExistsbefore the reuse short-circuit — now evaluated lazily, so the reuse path never touches the remote
MEDMessagesTimeline.test.tsx lost the fork's positive load-control assertions; remaining test would pass with the control deletedFixed. Positive assertions added for upstream's "Load earlier turns" / "Loading earlier turns…" header states

gpt-5.6-sol — 4 HIGH, 3 MED, 1 LOW claimed; each verified against the tree:

FindingDisposition
HIGHsetDeleted() on terminal subscription failure runs outside applyLock, racing older-page merges; every other history rewrite is serialized by that lockConfirmed weld, fixed. Upstream only calls setDeleted from inside applyItemLocked; the fork's terminal path now takes the lock too
HIGH — fork's 500-activity truncation applied to upstream's turn-windowed snapshot: rows dropped mid-window are unreachable (loading earlier turns fetches earlier windows, never the middle of this one)Confirmed, fixed. Cap + hasMoreActivities now apply only to the legacy unbounded snapshot, where the compat activities-page RPC can recover them; windowed snapshots return the full window
HIGHnextLatestTurnId computed but ignored in ProjectionPipeline, expression duplicated in the upsertConfirmed (severity: cosmetic), fixed. Variable now used
HIGH — older-page cursor read before historyEpoch, neither under applyLockOut of scope. That region is upstream's own code, byte-identical to 6b73b3def — a candidate for an upstream issue, not a resolution defect
MED — upstream's loadingServerThread/activeServerThread computed but never consumed; hideEmptyPlaceholder lost the threadDetailLoading guard, so a loading thread could flash the genuine-empty placeholderConfirmed welds, fixed.activeServerThread now drives isServerThread/activeThread/threadError as upstream intended, and the placeholder guard is restored
MED — mobile activeThreadBusy threaded into screens but never readConfirmed dangling, removed. Upstream's consumers (send-button "Queue" label + queued-count note) are superseded by the fork's sendEntersSteeringQueue (same running/starting predicate) and queue chips; the dead threading is deleted rather than double-wired
MED — fork's live-event batching (groupedWithin) lostIntentional. The batch reducer was a weld casualty either way (it silently dropped upstream's synchronized branch); upstream's epoch/semaphore apply model plus windowed initial snapshots replaces the render-storm bound it provided. If large-thread churn resurfaces, batching gets rebuilt against the new model, not welded onto it
LOW — timeline tests assert rendered strings, not interaction semanticsAccepted. These are SSR-markup existence tests by design; interaction is covered at the ChatView level

Both reviews independently cleared the SQL/decode surface (source_json, queued messages, pending turn start, keyset ORDER) and found no state-machine races beyond the setDeleted weld above.

Co-authored by @patroza

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

@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch 3 times, most recently from c2f2623 to 2735b47CompareAugust 7, 2026 05:34
Eight commits, headlined by pingdotgg#5493 "paginate thread loading with user-anchored
turn windows" -- 2093 insertions plus a keyset index migration.
Candidate #29 ("perf: import bounded web thread history", upstream pingdotgg#4018) is
confirmed superseded: upstream never merged pingdotgg#4018 and ships loadOlderTurns
instead. The candidate is removed from web, mobile and client-runtime --
olderThreadActivities.ts deleted, ChatView and the mobile composer/feed/screens
rewired to upstream's loadEarlier model. The SERVER half stays: deployed mobile
builds still call orchestration.getThreadActivities, so the RPC, its schemas and
the activity window constant are retained as a compatibility surface and marked
as such.
All 24 textual conflicts resolved to upstream. The expensive work was what git
auto-merged wrong or left dangling, found by typecheck and tests, not markers:
- threads.ts: upstream's applyItemLocked header welded onto the fork's batch
reducer body, referencing an out-of-scope identifier and silently dropping
upstream's synchronized branch. The fork's batching layer (groupedWithin,
reduceThreadStreamItems, eventBatchSize) is removed with its two tests; the
fork's load-once HTTP fallback guard is reimplemented on upstream's model and
its regression test passes again.
- ws.ts: the fork's reuseBaseBranch worktree flow and upstream's pingdotgg#5556
no-origin fallback are combined; neither side alone compiled.
- ProjectionSnapshotQuery: upstream's new windowed message query lacked the
fork's source_json column, failing decode on every windowed read; the bounded
detail query destructured nine results from seven queries -- the fork's
queued-messages and pending-turn-start members are restored.
- BranchToolbar/SidebarV2/MessagesTimeline/ChatView: prop and rename skews
reconciled; fork surface-existence assertion updated for the new feed call.
- Migration ledger fixtures extended for upstream migration 037, which lands in
the upstream namespace and does not collide with the fork's renumbered 037.
- Upstream's new tests adapted to fork-required fields (queuedMessages,
pendingTurnStart) and the fork's projection-wait in bootstrap.
Verified: full recursive typecheck clean across 17 packages; 2264 tests pass
including upstream's 11 pagination and 7 windowed-detail tests. The single
failure (CodexTextGeneration structured output) predates this merge.
fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts; no tim
commit is merged upstream, so review those diffs with tim provenance in mind.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch from 2735b47 to a19d3eaCompareAugust 7, 2026 05:53
@omegent-app
omegent-appBot marked this pull request as ready for review August 7, 2026 05:54
@patroza
patroza merged commit 54187a4 into fork/devAug 7, 2026
4 of 8 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
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.

2 participants

@patroza@t3dotgg
, '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 6b73b3def into fork/dev - #368

Merged
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 6b73b3def into fork/dev#368
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 7, 2026

Copy link
Copy Markdown

Adopts upstream through 6b73b3def, headlined by pingdotgg#5493 "paginate thread loading with
user-anchored turn windows"
— 2,093 insertions plus a keyset-index migration.

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.

The candidate question, settled with evidence

pingdotgg#4018 (getThreadActivities) is superseded — upstream never merged it and ships
loadOlderTurns instead. And the check you suggested surfaced more: pingdotgg#3510 (mobile paging) is
partially superseded too
— its mobile scroll-up half is exactly the scaffolding this merge
removes, while its server bounded-replay half in OrchestrationEngine stays active.

Both are recorded in .github/upstream-candidates.json (superseded / partially-superseded,
with what replaced them and what remains).

The server RPC stays. Deployed mobile builds still call orchestration.getThreadActivities;
the RPC, schemas and window constant are kept as a marked compatibility surface. Remove once no
fleet mobile build predates this merge.

On "undo the candidate first": it would have shrunk the 24 textual conflicts, but not the real
blockers — those were upstream's new code meeting fork-added fields/services, which exist regardless.

What the resolutions actually involved

All 24 textual conflicts went to upstream. The expensive part was what git auto-merged wrong or
left dangling — found by typecheck and tests, never by conflict markers:

WhereDefectResolution
threads.tsupstream's applyItemLocked header welded onto the fork's batch-reducer body, referencing an out-of-scope variable and silently dropping upstream's synchronized branchfork batching layer removed (+2 tests); upstream body restored
threads.tsfork's load-once HTTP fallback guard lostreimplemented on upstream's model; its regression test passes
ws.tsfork reuseBaseBranch flow vs upstream pingdotgg#5556 no-origin fallback — neither alone compiledcombined; upstream's new fallback test given the projection stub the fork's bootstrap wait requires
ProjectionSnapshotQueryupstream's windowed message SQL missing fork source_jsonevery windowed read failed decode; bounded query destructured 9 results from 7 queriescolumn added; fork's queued-messages + pending-turn-start members restored
web/mobile UIprop/rename skews (selectedThreads, WorkspaceTarget, routeServerThreadShell, queue props)reconciled per owning side
migrationsledger fixtures drifted by upstream's 037extended; fork 037 lives in t3_fork_sql_migrations, no collision

fork/tim

fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts/orchestration — the same
surface — but no tim commit is merged upstream, so nothing tim-authored is superseded. Review
those diffs with tim provenance in mind; tim-derived behaviour with tests is green.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,269 tests pass (2,281 collected), including upstream's 11 pagination and 7 windowed-detail
    tests, the fork's five bootstrap replay/reuse tests, and the terminal-failure and load-once
    regression tests. Single failure is the pre-existing CodexTextGeneration launch-args one,
    reproducible on unmerged fork/dev.
  • Adversarial reviews by grok-4.5 and gpt-5.6-sol over the git show --cc resolution
    surface: findings below.

Adversarial review findings & dispositions

grok-4.5 — 1 HIGH, 1 MED, all other categories explicitly clear:

FindingDisposition
HIGH — fork's bootstrap replay/reuse block dropped in ws.ts: worktreeAlreadyPrepared declared and read but never set; a replayed bootstrap would re-run git worktree add -b and fail on the existing branch; the five fork tests locking this in were deletedFixed. Full replay/reuse block restored (projected-shell lookup → reuse existing worktree / recreate at the recorded branch), all five fork bootstrap tests re-inserted and passing alongside upstream's no-origin test. Restoring it also exposed that the merged code checked remoteExistsbefore the reuse short-circuit — now evaluated lazily, so the reuse path never touches the remote
MEDMessagesTimeline.test.tsx lost the fork's positive load-control assertions; remaining test would pass with the control deletedFixed. Positive assertions added for upstream's "Load earlier turns" / "Loading earlier turns…" header states

gpt-5.6-sol — 4 HIGH, 3 MED, 1 LOW claimed; each verified against the tree:

FindingDisposition
HIGHsetDeleted() on terminal subscription failure runs outside applyLock, racing older-page merges; every other history rewrite is serialized by that lockConfirmed weld, fixed. Upstream only calls setDeleted from inside applyItemLocked; the fork's terminal path now takes the lock too
HIGH — fork's 500-activity truncation applied to upstream's turn-windowed snapshot: rows dropped mid-window are unreachable (loading earlier turns fetches earlier windows, never the middle of this one)Confirmed, fixed. Cap + hasMoreActivities now apply only to the legacy unbounded snapshot, where the compat activities-page RPC can recover them; windowed snapshots return the full window
HIGHnextLatestTurnId computed but ignored in ProjectionPipeline, expression duplicated in the upsertConfirmed (severity: cosmetic), fixed. Variable now used
HIGH — older-page cursor read before historyEpoch, neither under applyLockOut of scope. That region is upstream's own code, byte-identical to 6b73b3def — a candidate for an upstream issue, not a resolution defect
MED — upstream's loadingServerThread/activeServerThread computed but never consumed; hideEmptyPlaceholder lost the threadDetailLoading guard, so a loading thread could flash the genuine-empty placeholderConfirmed welds, fixed.activeServerThread now drives isServerThread/activeThread/threadError as upstream intended, and the placeholder guard is restored
MED — mobile activeThreadBusy threaded into screens but never readConfirmed dangling, removed. Upstream's consumers (send-button "Queue" label + queued-count note) are superseded by the fork's sendEntersSteeringQueue (same running/starting predicate) and queue chips; the dead threading is deleted rather than double-wired
MED — fork's live-event batching (groupedWithin) lostIntentional. The batch reducer was a weld casualty either way (it silently dropped upstream's synchronized branch); upstream's epoch/semaphore apply model plus windowed initial snapshots replaces the render-storm bound it provided. If large-thread churn resurfaces, batching gets rebuilt against the new model, not welded onto it
LOW — timeline tests assert rendered strings, not interaction semanticsAccepted. These are SSR-markup existence tests by design; interaction is covered at the ChatView level

Both reviews independently cleared the SQL/decode surface (source_json, queued messages, pending turn start, keyset ORDER) and found no state-machine races beyond the setDeleted weld above.

Co-authored by @patroza

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

@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch 3 times, most recently from c2f2623 to 2735b47CompareAugust 7, 2026 05:34
Eight commits, headlined by pingdotgg#5493 "paginate thread loading with user-anchored
turn windows" -- 2093 insertions plus a keyset index migration.
Candidate #29 ("perf: import bounded web thread history", upstream pingdotgg#4018) is
confirmed superseded: upstream never merged pingdotgg#4018 and ships loadOlderTurns
instead. The candidate is removed from web, mobile and client-runtime --
olderThreadActivities.ts deleted, ChatView and the mobile composer/feed/screens
rewired to upstream's loadEarlier model. The SERVER half stays: deployed mobile
builds still call orchestration.getThreadActivities, so the RPC, its schemas and
the activity window constant are retained as a compatibility surface and marked
as such.
All 24 textual conflicts resolved to upstream. The expensive work was what git
auto-merged wrong or left dangling, found by typecheck and tests, not markers:
- threads.ts: upstream's applyItemLocked header welded onto the fork's batch
reducer body, referencing an out-of-scope identifier and silently dropping
upstream's synchronized branch. The fork's batching layer (groupedWithin,
reduceThreadStreamItems, eventBatchSize) is removed with its two tests; the
fork's load-once HTTP fallback guard is reimplemented on upstream's model and
its regression test passes again.
- ws.ts: the fork's reuseBaseBranch worktree flow and upstream's pingdotgg#5556
no-origin fallback are combined; neither side alone compiled.
- ProjectionSnapshotQuery: upstream's new windowed message query lacked the
fork's source_json column, failing decode on every windowed read; the bounded
detail query destructured nine results from seven queries -- the fork's
queued-messages and pending-turn-start members are restored.
- BranchToolbar/SidebarV2/MessagesTimeline/ChatView: prop and rename skews
reconciled; fork surface-existence assertion updated for the new feed call.
- Migration ledger fixtures extended for upstream migration 037, which lands in
the upstream namespace and does not collide with the fork's renumbered 037.
- Upstream's new tests adapted to fork-required fields (queuedMessages,
pendingTurnStart) and the fork's projection-wait in bootstrap.
Verified: full recursive typecheck clean across 17 packages; 2264 tests pass
including upstream's 11 pagination and 7 windowed-detail tests. The single
failure (CodexTextGeneration structured output) predates this merge.
fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts; no tim
commit is merged upstream, so review those diffs with tim provenance in mind.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch from 2735b47 to a19d3eaCompareAugust 7, 2026 05:53
@omegent-app
omegent-appBot marked this pull request as ready for review August 7, 2026 05:54
@patroza
patroza merged commit 54187a4 into fork/devAug 7, 2026
4 of 8 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
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.

2 participants

@patroza@t3dotgg
, '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 6b73b3def into fork/dev - #368

Merged
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 6b73b3def into fork/dev#368
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 7, 2026

Copy link
Copy Markdown

Adopts upstream through 6b73b3def, headlined by pingdotgg#5493 "paginate thread loading with
user-anchored turn windows"
— 2,093 insertions plus a keyset-index migration.

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.

The candidate question, settled with evidence

pingdotgg#4018 (getThreadActivities) is superseded — upstream never merged it and ships
loadOlderTurns instead. And the check you suggested surfaced more: pingdotgg#3510 (mobile paging) is
partially superseded too
— its mobile scroll-up half is exactly the scaffolding this merge
removes, while its server bounded-replay half in OrchestrationEngine stays active.

Both are recorded in .github/upstream-candidates.json (superseded / partially-superseded,
with what replaced them and what remains).

The server RPC stays. Deployed mobile builds still call orchestration.getThreadActivities;
the RPC, schemas and window constant are kept as a marked compatibility surface. Remove once no
fleet mobile build predates this merge.

On "undo the candidate first": it would have shrunk the 24 textual conflicts, but not the real
blockers — those were upstream's new code meeting fork-added fields/services, which exist regardless.

What the resolutions actually involved

All 24 textual conflicts went to upstream. The expensive part was what git auto-merged wrong or
left dangling — found by typecheck and tests, never by conflict markers:

WhereDefectResolution
threads.tsupstream's applyItemLocked header welded onto the fork's batch-reducer body, referencing an out-of-scope variable and silently dropping upstream's synchronized branchfork batching layer removed (+2 tests); upstream body restored
threads.tsfork's load-once HTTP fallback guard lostreimplemented on upstream's model; its regression test passes
ws.tsfork reuseBaseBranch flow vs upstream pingdotgg#5556 no-origin fallback — neither alone compiledcombined; upstream's new fallback test given the projection stub the fork's bootstrap wait requires
ProjectionSnapshotQueryupstream's windowed message SQL missing fork source_jsonevery windowed read failed decode; bounded query destructured 9 results from 7 queriescolumn added; fork's queued-messages + pending-turn-start members restored
web/mobile UIprop/rename skews (selectedThreads, WorkspaceTarget, routeServerThreadShell, queue props)reconciled per owning side
migrationsledger fixtures drifted by upstream's 037extended; fork 037 lives in t3_fork_sql_migrations, no collision

fork/tim

fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts/orchestration — the same
surface — but no tim commit is merged upstream, so nothing tim-authored is superseded. Review
those diffs with tim provenance in mind; tim-derived behaviour with tests is green.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,269 tests pass (2,281 collected), including upstream's 11 pagination and 7 windowed-detail
    tests, the fork's five bootstrap replay/reuse tests, and the terminal-failure and load-once
    regression tests. Single failure is the pre-existing CodexTextGeneration launch-args one,
    reproducible on unmerged fork/dev.
  • Adversarial reviews by grok-4.5 and gpt-5.6-sol over the git show --cc resolution
    surface: findings below.

Adversarial review findings & dispositions

grok-4.5 — 1 HIGH, 1 MED, all other categories explicitly clear:

FindingDisposition
HIGH — fork's bootstrap replay/reuse block dropped in ws.ts: worktreeAlreadyPrepared declared and read but never set; a replayed bootstrap would re-run git worktree add -b and fail on the existing branch; the five fork tests locking this in were deletedFixed. Full replay/reuse block restored (projected-shell lookup → reuse existing worktree / recreate at the recorded branch), all five fork bootstrap tests re-inserted and passing alongside upstream's no-origin test. Restoring it also exposed that the merged code checked remoteExistsbefore the reuse short-circuit — now evaluated lazily, so the reuse path never touches the remote
MEDMessagesTimeline.test.tsx lost the fork's positive load-control assertions; remaining test would pass with the control deletedFixed. Positive assertions added for upstream's "Load earlier turns" / "Loading earlier turns…" header states

gpt-5.6-sol — 4 HIGH, 3 MED, 1 LOW claimed; each verified against the tree:

FindingDisposition
HIGHsetDeleted() on terminal subscription failure runs outside applyLock, racing older-page merges; every other history rewrite is serialized by that lockConfirmed weld, fixed. Upstream only calls setDeleted from inside applyItemLocked; the fork's terminal path now takes the lock too
HIGH — fork's 500-activity truncation applied to upstream's turn-windowed snapshot: rows dropped mid-window are unreachable (loading earlier turns fetches earlier windows, never the middle of this one)Confirmed, fixed. Cap + hasMoreActivities now apply only to the legacy unbounded snapshot, where the compat activities-page RPC can recover them; windowed snapshots return the full window
HIGHnextLatestTurnId computed but ignored in ProjectionPipeline, expression duplicated in the upsertConfirmed (severity: cosmetic), fixed. Variable now used
HIGH — older-page cursor read before historyEpoch, neither under applyLockOut of scope. That region is upstream's own code, byte-identical to 6b73b3def — a candidate for an upstream issue, not a resolution defect
MED — upstream's loadingServerThread/activeServerThread computed but never consumed; hideEmptyPlaceholder lost the threadDetailLoading guard, so a loading thread could flash the genuine-empty placeholderConfirmed welds, fixed.activeServerThread now drives isServerThread/activeThread/threadError as upstream intended, and the placeholder guard is restored
MED — mobile activeThreadBusy threaded into screens but never readConfirmed dangling, removed. Upstream's consumers (send-button "Queue" label + queued-count note) are superseded by the fork's sendEntersSteeringQueue (same running/starting predicate) and queue chips; the dead threading is deleted rather than double-wired
MED — fork's live-event batching (groupedWithin) lostIntentional. The batch reducer was a weld casualty either way (it silently dropped upstream's synchronized branch); upstream's epoch/semaphore apply model plus windowed initial snapshots replaces the render-storm bound it provided. If large-thread churn resurfaces, batching gets rebuilt against the new model, not welded onto it
LOW — timeline tests assert rendered strings, not interaction semanticsAccepted. These are SSR-markup existence tests by design; interaction is covered at the ChatView level

Both reviews independently cleared the SQL/decode surface (source_json, queued messages, pending turn start, keyset ORDER) and found no state-machine races beyond the setDeleted weld above.

Co-authored by @patroza

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

@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch 3 times, most recently from c2f2623 to 2735b47CompareAugust 7, 2026 05:34
Eight commits, headlined by pingdotgg#5493 "paginate thread loading with user-anchored
turn windows" -- 2093 insertions plus a keyset index migration.
Candidate #29 ("perf: import bounded web thread history", upstream pingdotgg#4018) is
confirmed superseded: upstream never merged pingdotgg#4018 and ships loadOlderTurns
instead. The candidate is removed from web, mobile and client-runtime --
olderThreadActivities.ts deleted, ChatView and the mobile composer/feed/screens
rewired to upstream's loadEarlier model. The SERVER half stays: deployed mobile
builds still call orchestration.getThreadActivities, so the RPC, its schemas and
the activity window constant are retained as a compatibility surface and marked
as such.
All 24 textual conflicts resolved to upstream. The expensive work was what git
auto-merged wrong or left dangling, found by typecheck and tests, not markers:
- threads.ts: upstream's applyItemLocked header welded onto the fork's batch
reducer body, referencing an out-of-scope identifier and silently dropping
upstream's synchronized branch. The fork's batching layer (groupedWithin,
reduceThreadStreamItems, eventBatchSize) is removed with its two tests; the
fork's load-once HTTP fallback guard is reimplemented on upstream's model and
its regression test passes again.
- ws.ts: the fork's reuseBaseBranch worktree flow and upstream's pingdotgg#5556
no-origin fallback are combined; neither side alone compiled.
- ProjectionSnapshotQuery: upstream's new windowed message query lacked the
fork's source_json column, failing decode on every windowed read; the bounded
detail query destructured nine results from seven queries -- the fork's
queued-messages and pending-turn-start members are restored.
- BranchToolbar/SidebarV2/MessagesTimeline/ChatView: prop and rename skews
reconciled; fork surface-existence assertion updated for the new feed call.
- Migration ledger fixtures extended for upstream migration 037, which lands in
the upstream namespace and does not collide with the fork's renumbered 037.
- Upstream's new tests adapted to fork-required fields (queuedMessages,
pendingTurnStart) and the fork's projection-wait in bootstrap.
Verified: full recursive typecheck clean across 17 packages; 2264 tests pass
including upstream's 11 pagination and 7 windowed-detail tests. The single
failure (CodexTextGeneration structured output) predates this merge.
fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts; no tim
commit is merged upstream, so review those diffs with tim provenance in mind.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch from 2735b47 to a19d3eaCompareAugust 7, 2026 05:53
@omegent-app
omegent-appBot marked this pull request as ready for review August 7, 2026 05:54
@patroza
patroza merged commit 54187a4 into fork/devAug 7, 2026
4 of 8 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
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.

2 participants

@patroza@t3dotgg
, '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 6b73b3def into fork/dev - #368

Merged
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 6b73b3def into fork/dev#368
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 7, 2026

Copy link
Copy Markdown

Adopts upstream through 6b73b3def, headlined by pingdotgg#5493 "paginate thread loading with
user-anchored turn windows"
— 2,093 insertions plus a keyset-index migration.

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.

The candidate question, settled with evidence

pingdotgg#4018 (getThreadActivities) is superseded — upstream never merged it and ships
loadOlderTurns instead. And the check you suggested surfaced more: pingdotgg#3510 (mobile paging) is
partially superseded too
— its mobile scroll-up half is exactly the scaffolding this merge
removes, while its server bounded-replay half in OrchestrationEngine stays active.

Both are recorded in .github/upstream-candidates.json (superseded / partially-superseded,
with what replaced them and what remains).

The server RPC stays. Deployed mobile builds still call orchestration.getThreadActivities;
the RPC, schemas and window constant are kept as a marked compatibility surface. Remove once no
fleet mobile build predates this merge.

On "undo the candidate first": it would have shrunk the 24 textual conflicts, but not the real
blockers — those were upstream's new code meeting fork-added fields/services, which exist regardless.

What the resolutions actually involved

All 24 textual conflicts went to upstream. The expensive part was what git auto-merged wrong or
left dangling — found by typecheck and tests, never by conflict markers:

WhereDefectResolution
threads.tsupstream's applyItemLocked header welded onto the fork's batch-reducer body, referencing an out-of-scope variable and silently dropping upstream's synchronized branchfork batching layer removed (+2 tests); upstream body restored
threads.tsfork's load-once HTTP fallback guard lostreimplemented on upstream's model; its regression test passes
ws.tsfork reuseBaseBranch flow vs upstream pingdotgg#5556 no-origin fallback — neither alone compiledcombined; upstream's new fallback test given the projection stub the fork's bootstrap wait requires
ProjectionSnapshotQueryupstream's windowed message SQL missing fork source_jsonevery windowed read failed decode; bounded query destructured 9 results from 7 queriescolumn added; fork's queued-messages + pending-turn-start members restored
web/mobile UIprop/rename skews (selectedThreads, WorkspaceTarget, routeServerThreadShell, queue props)reconciled per owning side
migrationsledger fixtures drifted by upstream's 037extended; fork 037 lives in t3_fork_sql_migrations, no collision

fork/tim

fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts/orchestration — the same
surface — but no tim commit is merged upstream, so nothing tim-authored is superseded. Review
those diffs with tim provenance in mind; tim-derived behaviour with tests is green.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,269 tests pass (2,281 collected), including upstream's 11 pagination and 7 windowed-detail
    tests, the fork's five bootstrap replay/reuse tests, and the terminal-failure and load-once
    regression tests. Single failure is the pre-existing CodexTextGeneration launch-args one,
    reproducible on unmerged fork/dev.
  • Adversarial reviews by grok-4.5 and gpt-5.6-sol over the git show --cc resolution
    surface: findings below.

Adversarial review findings & dispositions

grok-4.5 — 1 HIGH, 1 MED, all other categories explicitly clear:

FindingDisposition
HIGH — fork's bootstrap replay/reuse block dropped in ws.ts: worktreeAlreadyPrepared declared and read but never set; a replayed bootstrap would re-run git worktree add -b and fail on the existing branch; the five fork tests locking this in were deletedFixed. Full replay/reuse block restored (projected-shell lookup → reuse existing worktree / recreate at the recorded branch), all five fork bootstrap tests re-inserted and passing alongside upstream's no-origin test. Restoring it also exposed that the merged code checked remoteExistsbefore the reuse short-circuit — now evaluated lazily, so the reuse path never touches the remote
MEDMessagesTimeline.test.tsx lost the fork's positive load-control assertions; remaining test would pass with the control deletedFixed. Positive assertions added for upstream's "Load earlier turns" / "Loading earlier turns…" header states

gpt-5.6-sol — 4 HIGH, 3 MED, 1 LOW claimed; each verified against the tree:

FindingDisposition
HIGHsetDeleted() on terminal subscription failure runs outside applyLock, racing older-page merges; every other history rewrite is serialized by that lockConfirmed weld, fixed. Upstream only calls setDeleted from inside applyItemLocked; the fork's terminal path now takes the lock too
HIGH — fork's 500-activity truncation applied to upstream's turn-windowed snapshot: rows dropped mid-window are unreachable (loading earlier turns fetches earlier windows, never the middle of this one)Confirmed, fixed. Cap + hasMoreActivities now apply only to the legacy unbounded snapshot, where the compat activities-page RPC can recover them; windowed snapshots return the full window
HIGHnextLatestTurnId computed but ignored in ProjectionPipeline, expression duplicated in the upsertConfirmed (severity: cosmetic), fixed. Variable now used
HIGH — older-page cursor read before historyEpoch, neither under applyLockOut of scope. That region is upstream's own code, byte-identical to 6b73b3def — a candidate for an upstream issue, not a resolution defect
MED — upstream's loadingServerThread/activeServerThread computed but never consumed; hideEmptyPlaceholder lost the threadDetailLoading guard, so a loading thread could flash the genuine-empty placeholderConfirmed welds, fixed.activeServerThread now drives isServerThread/activeThread/threadError as upstream intended, and the placeholder guard is restored
MED — mobile activeThreadBusy threaded into screens but never readConfirmed dangling, removed. Upstream's consumers (send-button "Queue" label + queued-count note) are superseded by the fork's sendEntersSteeringQueue (same running/starting predicate) and queue chips; the dead threading is deleted rather than double-wired
MED — fork's live-event batching (groupedWithin) lostIntentional. The batch reducer was a weld casualty either way (it silently dropped upstream's synchronized branch); upstream's epoch/semaphore apply model plus windowed initial snapshots replaces the render-storm bound it provided. If large-thread churn resurfaces, batching gets rebuilt against the new model, not welded onto it
LOW — timeline tests assert rendered strings, not interaction semanticsAccepted. These are SSR-markup existence tests by design; interaction is covered at the ChatView level

Both reviews independently cleared the SQL/decode surface (source_json, queued messages, pending turn start, keyset ORDER) and found no state-machine races beyond the setDeleted weld above.

Co-authored by @patroza

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

@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch 3 times, most recently from c2f2623 to 2735b47CompareAugust 7, 2026 05:34
Eight commits, headlined by pingdotgg#5493 "paginate thread loading with user-anchored
turn windows" -- 2093 insertions plus a keyset index migration.
Candidate #29 ("perf: import bounded web thread history", upstream pingdotgg#4018) is
confirmed superseded: upstream never merged pingdotgg#4018 and ships loadOlderTurns
instead. The candidate is removed from web, mobile and client-runtime --
olderThreadActivities.ts deleted, ChatView and the mobile composer/feed/screens
rewired to upstream's loadEarlier model. The SERVER half stays: deployed mobile
builds still call orchestration.getThreadActivities, so the RPC, its schemas and
the activity window constant are retained as a compatibility surface and marked
as such.
All 24 textual conflicts resolved to upstream. The expensive work was what git
auto-merged wrong or left dangling, found by typecheck and tests, not markers:
- threads.ts: upstream's applyItemLocked header welded onto the fork's batch
reducer body, referencing an out-of-scope identifier and silently dropping
upstream's synchronized branch. The fork's batching layer (groupedWithin,
reduceThreadStreamItems, eventBatchSize) is removed with its two tests; the
fork's load-once HTTP fallback guard is reimplemented on upstream's model and
its regression test passes again.
- ws.ts: the fork's reuseBaseBranch worktree flow and upstream's pingdotgg#5556
no-origin fallback are combined; neither side alone compiled.
- ProjectionSnapshotQuery: upstream's new windowed message query lacked the
fork's source_json column, failing decode on every windowed read; the bounded
detail query destructured nine results from seven queries -- the fork's
queued-messages and pending-turn-start members are restored.
- BranchToolbar/SidebarV2/MessagesTimeline/ChatView: prop and rename skews
reconciled; fork surface-existence assertion updated for the new feed call.
- Migration ledger fixtures extended for upstream migration 037, which lands in
the upstream namespace and does not collide with the fork's renumbered 037.
- Upstream's new tests adapted to fork-required fields (queuedMessages,
pendingTurnStart) and the fork's projection-wait in bootstrap.
Verified: full recursive typecheck clean across 17 packages; 2264 tests pass
including upstream's 11 pagination and 7 windowed-detail tests. The single
failure (CodexTextGeneration structured output) predates this merge.
fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts; no tim
commit is merged upstream, so review those diffs with tim provenance in mind.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch from 2735b47 to a19d3eaCompareAugust 7, 2026 05:53
@omegent-app
omegent-appBot marked this pull request as ready for review August 7, 2026 05:54
@patroza
patroza merged commit 54187a4 into fork/devAug 7, 2026
4 of 8 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
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.

2 participants

@patroza@t3dotgg
, '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 6b73b3def into fork/dev - #368

Merged
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 6b73b3def into fork/dev#368
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 7, 2026

Copy link
Copy Markdown

Adopts upstream through 6b73b3def, headlined by pingdotgg#5493 "paginate thread loading with
user-anchored turn windows"
— 2,093 insertions plus a keyset-index migration.

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.

The candidate question, settled with evidence

pingdotgg#4018 (getThreadActivities) is superseded — upstream never merged it and ships
loadOlderTurns instead. And the check you suggested surfaced more: pingdotgg#3510 (mobile paging) is
partially superseded too
— its mobile scroll-up half is exactly the scaffolding this merge
removes, while its server bounded-replay half in OrchestrationEngine stays active.

Both are recorded in .github/upstream-candidates.json (superseded / partially-superseded,
with what replaced them and what remains).

The server RPC stays. Deployed mobile builds still call orchestration.getThreadActivities;
the RPC, schemas and window constant are kept as a marked compatibility surface. Remove once no
fleet mobile build predates this merge.

On "undo the candidate first": it would have shrunk the 24 textual conflicts, but not the real
blockers — those were upstream's new code meeting fork-added fields/services, which exist regardless.

What the resolutions actually involved

All 24 textual conflicts went to upstream. The expensive part was what git auto-merged wrong or
left dangling — found by typecheck and tests, never by conflict markers:

WhereDefectResolution
threads.tsupstream's applyItemLocked header welded onto the fork's batch-reducer body, referencing an out-of-scope variable and silently dropping upstream's synchronized branchfork batching layer removed (+2 tests); upstream body restored
threads.tsfork's load-once HTTP fallback guard lostreimplemented on upstream's model; its regression test passes
ws.tsfork reuseBaseBranch flow vs upstream pingdotgg#5556 no-origin fallback — neither alone compiledcombined; upstream's new fallback test given the projection stub the fork's bootstrap wait requires
ProjectionSnapshotQueryupstream's windowed message SQL missing fork source_jsonevery windowed read failed decode; bounded query destructured 9 results from 7 queriescolumn added; fork's queued-messages + pending-turn-start members restored
web/mobile UIprop/rename skews (selectedThreads, WorkspaceTarget, routeServerThreadShell, queue props)reconciled per owning side
migrationsledger fixtures drifted by upstream's 037extended; fork 037 lives in t3_fork_sql_migrations, no collision

fork/tim

fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts/orchestration — the same
surface — but no tim commit is merged upstream, so nothing tim-authored is superseded. Review
those diffs with tim provenance in mind; tim-derived behaviour with tests is green.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,269 tests pass (2,281 collected), including upstream's 11 pagination and 7 windowed-detail
    tests, the fork's five bootstrap replay/reuse tests, and the terminal-failure and load-once
    regression tests. Single failure is the pre-existing CodexTextGeneration launch-args one,
    reproducible on unmerged fork/dev.
  • Adversarial reviews by grok-4.5 and gpt-5.6-sol over the git show --cc resolution
    surface: findings below.

Adversarial review findings & dispositions

grok-4.5 — 1 HIGH, 1 MED, all other categories explicitly clear:

FindingDisposition
HIGH — fork's bootstrap replay/reuse block dropped in ws.ts: worktreeAlreadyPrepared declared and read but never set; a replayed bootstrap would re-run git worktree add -b and fail on the existing branch; the five fork tests locking this in were deletedFixed. Full replay/reuse block restored (projected-shell lookup → reuse existing worktree / recreate at the recorded branch), all five fork bootstrap tests re-inserted and passing alongside upstream's no-origin test. Restoring it also exposed that the merged code checked remoteExistsbefore the reuse short-circuit — now evaluated lazily, so the reuse path never touches the remote
MEDMessagesTimeline.test.tsx lost the fork's positive load-control assertions; remaining test would pass with the control deletedFixed. Positive assertions added for upstream's "Load earlier turns" / "Loading earlier turns…" header states

gpt-5.6-sol — 4 HIGH, 3 MED, 1 LOW claimed; each verified against the tree:

FindingDisposition
HIGHsetDeleted() on terminal subscription failure runs outside applyLock, racing older-page merges; every other history rewrite is serialized by that lockConfirmed weld, fixed. Upstream only calls setDeleted from inside applyItemLocked; the fork's terminal path now takes the lock too
HIGH — fork's 500-activity truncation applied to upstream's turn-windowed snapshot: rows dropped mid-window are unreachable (loading earlier turns fetches earlier windows, never the middle of this one)Confirmed, fixed. Cap + hasMoreActivities now apply only to the legacy unbounded snapshot, where the compat activities-page RPC can recover them; windowed snapshots return the full window
HIGHnextLatestTurnId computed but ignored in ProjectionPipeline, expression duplicated in the upsertConfirmed (severity: cosmetic), fixed. Variable now used
HIGH — older-page cursor read before historyEpoch, neither under applyLockOut of scope. That region is upstream's own code, byte-identical to 6b73b3def — a candidate for an upstream issue, not a resolution defect
MED — upstream's loadingServerThread/activeServerThread computed but never consumed; hideEmptyPlaceholder lost the threadDetailLoading guard, so a loading thread could flash the genuine-empty placeholderConfirmed welds, fixed.activeServerThread now drives isServerThread/activeThread/threadError as upstream intended, and the placeholder guard is restored
MED — mobile activeThreadBusy threaded into screens but never readConfirmed dangling, removed. Upstream's consumers (send-button "Queue" label + queued-count note) are superseded by the fork's sendEntersSteeringQueue (same running/starting predicate) and queue chips; the dead threading is deleted rather than double-wired
MED — fork's live-event batching (groupedWithin) lostIntentional. The batch reducer was a weld casualty either way (it silently dropped upstream's synchronized branch); upstream's epoch/semaphore apply model plus windowed initial snapshots replaces the render-storm bound it provided. If large-thread churn resurfaces, batching gets rebuilt against the new model, not welded onto it
LOW — timeline tests assert rendered strings, not interaction semanticsAccepted. These are SSR-markup existence tests by design; interaction is covered at the ChatView level

Both reviews independently cleared the SQL/decode surface (source_json, queued messages, pending turn start, keyset ORDER) and found no state-machine races beyond the setDeleted weld above.

Co-authored by @patroza

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

@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch 3 times, most recently from c2f2623 to 2735b47CompareAugust 7, 2026 05:34
Eight commits, headlined by pingdotgg#5493 "paginate thread loading with user-anchored
turn windows" -- 2093 insertions plus a keyset index migration.
Candidate #29 ("perf: import bounded web thread history", upstream pingdotgg#4018) is
confirmed superseded: upstream never merged pingdotgg#4018 and ships loadOlderTurns
instead. The candidate is removed from web, mobile and client-runtime --
olderThreadActivities.ts deleted, ChatView and the mobile composer/feed/screens
rewired to upstream's loadEarlier model. The SERVER half stays: deployed mobile
builds still call orchestration.getThreadActivities, so the RPC, its schemas and
the activity window constant are retained as a compatibility surface and marked
as such.
All 24 textual conflicts resolved to upstream. The expensive work was what git
auto-merged wrong or left dangling, found by typecheck and tests, not markers:
- threads.ts: upstream's applyItemLocked header welded onto the fork's batch
reducer body, referencing an out-of-scope identifier and silently dropping
upstream's synchronized branch. The fork's batching layer (groupedWithin,
reduceThreadStreamItems, eventBatchSize) is removed with its two tests; the
fork's load-once HTTP fallback guard is reimplemented on upstream's model and
its regression test passes again.
- ws.ts: the fork's reuseBaseBranch worktree flow and upstream's pingdotgg#5556
no-origin fallback are combined; neither side alone compiled.
- ProjectionSnapshotQuery: upstream's new windowed message query lacked the
fork's source_json column, failing decode on every windowed read; the bounded
detail query destructured nine results from seven queries -- the fork's
queued-messages and pending-turn-start members are restored.
- BranchToolbar/SidebarV2/MessagesTimeline/ChatView: prop and rename skews
reconciled; fork surface-existence assertion updated for the new feed call.
- Migration ledger fixtures extended for upstream migration 037, which lands in
the upstream namespace and does not collide with the fork's renumbered 037.
- Upstream's new tests adapted to fork-required fields (queuedMessages,
pendingTurnStart) and the fork's projection-wait in bootstrap.
Verified: full recursive typecheck clean across 17 packages; 2264 tests pass
including upstream's 11 pagination and 7 windowed-detail tests. The single
failure (CodexTextGeneration structured output) predates this merge.
fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts; no tim
commit is merged upstream, so review those diffs with tim provenance in mind.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch from 2735b47 to a19d3eaCompareAugust 7, 2026 05:53
@omegent-app
omegent-appBot marked this pull request as ready for review August 7, 2026 05:54
@patroza
patroza merged commit 54187a4 into fork/devAug 7, 2026
4 of 8 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
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.

2 participants

@patroza@t3dotgg
, '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 6b73b3def into fork/dev - #368

Merged
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 6b73b3def into fork/dev#368
patroza merged 9 commits into
fork/devfrom
sync/upstream-6b73b3def

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 7, 2026

Copy link
Copy Markdown

Adopts upstream through 6b73b3def, headlined by pingdotgg#5493 "paginate thread loading with
user-anchored turn windows"
— 2,093 insertions plus a keyset-index migration.

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.

The candidate question, settled with evidence

pingdotgg#4018 (getThreadActivities) is superseded — upstream never merged it and ships
loadOlderTurns instead. And the check you suggested surfaced more: pingdotgg#3510 (mobile paging) is
partially superseded too
— its mobile scroll-up half is exactly the scaffolding this merge
removes, while its server bounded-replay half in OrchestrationEngine stays active.

Both are recorded in .github/upstream-candidates.json (superseded / partially-superseded,
with what replaced them and what remains).

The server RPC stays. Deployed mobile builds still call orchestration.getThreadActivities;
the RPC, schemas and window constant are kept as a marked compatibility surface. Remove once no
fleet mobile build predates this merge.

On "undo the candidate first": it would have shrunk the 24 textual conflicts, but not the real
blockers — those were upstream's new code meeting fork-added fields/services, which exist regardless.

What the resolutions actually involved

All 24 textual conflicts went to upstream. The expensive part was what git auto-merged wrong or
left dangling — found by typecheck and tests, never by conflict markers:

WhereDefectResolution
threads.tsupstream's applyItemLocked header welded onto the fork's batch-reducer body, referencing an out-of-scope variable and silently dropping upstream's synchronized branchfork batching layer removed (+2 tests); upstream body restored
threads.tsfork's load-once HTTP fallback guard lostreimplemented on upstream's model; its regression test passes
ws.tsfork reuseBaseBranch flow vs upstream pingdotgg#5556 no-origin fallback — neither alone compiledcombined; upstream's new fallback test given the projection stub the fork's bootstrap wait requires
ProjectionSnapshotQueryupstream's windowed message SQL missing fork source_jsonevery windowed read failed decode; bounded query destructured 9 results from 7 queriescolumn added; fork's queued-messages + pending-turn-start members restored
web/mobile UIprop/rename skews (selectedThreads, WorkspaceTarget, routeServerThreadShell, queue props)reconciled per owning side
migrationsledger fixtures drifted by upstream's 037extended; fork 037 lives in t3_fork_sql_migrations, no collision

fork/tim

fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts/orchestration — the same
surface — but no tim commit is merged upstream, so nothing tim-authored is superseded. Review
those diffs with tim provenance in mind; tim-derived behaviour with tests is green.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,269 tests pass (2,281 collected), including upstream's 11 pagination and 7 windowed-detail
    tests, the fork's five bootstrap replay/reuse tests, and the terminal-failure and load-once
    regression tests. Single failure is the pre-existing CodexTextGeneration launch-args one,
    reproducible on unmerged fork/dev.
  • Adversarial reviews by grok-4.5 and gpt-5.6-sol over the git show --cc resolution
    surface: findings below.

Adversarial review findings & dispositions

grok-4.5 — 1 HIGH, 1 MED, all other categories explicitly clear:

FindingDisposition
HIGH — fork's bootstrap replay/reuse block dropped in ws.ts: worktreeAlreadyPrepared declared and read but never set; a replayed bootstrap would re-run git worktree add -b and fail on the existing branch; the five fork tests locking this in were deletedFixed. Full replay/reuse block restored (projected-shell lookup → reuse existing worktree / recreate at the recorded branch), all five fork bootstrap tests re-inserted and passing alongside upstream's no-origin test. Restoring it also exposed that the merged code checked remoteExistsbefore the reuse short-circuit — now evaluated lazily, so the reuse path never touches the remote
MEDMessagesTimeline.test.tsx lost the fork's positive load-control assertions; remaining test would pass with the control deletedFixed. Positive assertions added for upstream's "Load earlier turns" / "Loading earlier turns…" header states

gpt-5.6-sol — 4 HIGH, 3 MED, 1 LOW claimed; each verified against the tree:

FindingDisposition
HIGHsetDeleted() on terminal subscription failure runs outside applyLock, racing older-page merges; every other history rewrite is serialized by that lockConfirmed weld, fixed. Upstream only calls setDeleted from inside applyItemLocked; the fork's terminal path now takes the lock too
HIGH — fork's 500-activity truncation applied to upstream's turn-windowed snapshot: rows dropped mid-window are unreachable (loading earlier turns fetches earlier windows, never the middle of this one)Confirmed, fixed. Cap + hasMoreActivities now apply only to the legacy unbounded snapshot, where the compat activities-page RPC can recover them; windowed snapshots return the full window
HIGHnextLatestTurnId computed but ignored in ProjectionPipeline, expression duplicated in the upsertConfirmed (severity: cosmetic), fixed. Variable now used
HIGH — older-page cursor read before historyEpoch, neither under applyLockOut of scope. That region is upstream's own code, byte-identical to 6b73b3def — a candidate for an upstream issue, not a resolution defect
MED — upstream's loadingServerThread/activeServerThread computed but never consumed; hideEmptyPlaceholder lost the threadDetailLoading guard, so a loading thread could flash the genuine-empty placeholderConfirmed welds, fixed.activeServerThread now drives isServerThread/activeThread/threadError as upstream intended, and the placeholder guard is restored
MED — mobile activeThreadBusy threaded into screens but never readConfirmed dangling, removed. Upstream's consumers (send-button "Queue" label + queued-count note) are superseded by the fork's sendEntersSteeringQueue (same running/starting predicate) and queue chips; the dead threading is deleted rather than double-wired
MED — fork's live-event batching (groupedWithin) lostIntentional. The batch reducer was a weld casualty either way (it silently dropped upstream's synchronized branch); upstream's epoch/semaphore apply model plus windowed initial snapshots replaces the render-storm bound it provided. If large-thread churn resurfaces, batching gets rebuilt against the new model, not welded onto it
LOW — timeline tests assert rendered strings, not interaction semanticsAccepted. These are SSR-markup existence tests by design; interaction is covered at the ChatView level

Both reviews independently cleared the SQL/decode surface (source_json, queued messages, pending turn start, keyset ORDER) and found no state-machine races beyond the setDeleted weld above.

Co-authored by @patroza

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

@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch 3 times, most recently from c2f2623 to 2735b47CompareAugust 7, 2026 05:34
Eight commits, headlined by pingdotgg#5493 "paginate thread loading with user-anchored
turn windows" -- 2093 insertions plus a keyset index migration.
Candidate #29 ("perf: import bounded web thread history", upstream pingdotgg#4018) is
confirmed superseded: upstream never merged pingdotgg#4018 and ships loadOlderTurns
instead. The candidate is removed from web, mobile and client-runtime --
olderThreadActivities.ts deleted, ChatView and the mobile composer/feed/screens
rewired to upstream's loadEarlier model. The SERVER half stays: deployed mobile
builds still call orchestration.getThreadActivities, so the RPC, its schemas and
the activity window constant are retained as a compatibility surface and marked
as such.
All 24 textual conflicts resolved to upstream. The expensive work was what git
auto-merged wrong or left dangling, found by typecheck and tests, not markers:
- threads.ts: upstream's applyItemLocked header welded onto the fork's batch
reducer body, referencing an out-of-scope identifier and silently dropping
upstream's synchronized branch. The fork's batching layer (groupedWithin,
reduceThreadStreamItems, eventBatchSize) is removed with its two tests; the
fork's load-once HTTP fallback guard is reimplemented on upstream's model and
its regression test passes again.
- ws.ts: the fork's reuseBaseBranch worktree flow and upstream's pingdotgg#5556
no-origin fallback are combined; neither side alone compiled.
- ProjectionSnapshotQuery: upstream's new windowed message query lacked the
fork's source_json column, failing decode on every windowed read; the bounded
detail query destructured nine results from seven queries -- the fork's
queued-messages and pending-turn-start members are restored.
- BranchToolbar/SidebarV2/MessagesTimeline/ChatView: prop and rename skews
reconciled; fork surface-existence assertion updated for the new feed call.
- Migration ledger fixtures extended for upstream migration 037, which lands in
the upstream namespace and does not collide with the fork's renumbered 037.
- Upstream's new tests adapted to fork-required fields (queuedMessages,
pendingTurnStart) and the fork's projection-wait in bootstrap.
Verified: full recursive typecheck clean across 17 packages; 2264 tests pass
including upstream's 11 pagination and 7 windowed-detail tests. The single
failure (CodexTextGeneration structured output) predates this merge.
fork/tim touches threads.ts, ProjectionSnapshotQuery and contracts; no tim
commit is merged upstream, so review those diffs with tim provenance in mind.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBotforce-pushed the sync/upstream-6b73b3def branch from 2735b47 to a19d3eaCompareAugust 7, 2026 05:53
@omegent-app
omegent-appBot marked this pull request as ready for review August 7, 2026 05:54
@patroza
patroza merged commit 54187a4 into fork/devAug 7, 2026
4 of 8 checks passed
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
omegent-appBot added a commit that referenced this pull request Aug 7, 2026
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).
The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.
Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
product handshake, so the environment rejected it.
Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.
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.

2 participants

@patroza@t3dotgg