merge: sync upstream through 3d74474f6 (20 commits) - #388

Merged
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6
Aug 10, 2026
Merged

merge: sync upstream through 3d74474f6 (20 commits)#388
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 10, 2026

Copy link
Copy Markdown

Adopts upstream through 3d74474f6 — the 20 commits that landed after 02f4ce566.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
3d74474f6fix(web): update pills use readable theme foregrounds (pingdotgg#5938)
f0e297518fix(web): align project name with headline (pingdotgg#5864)
d43210050fix(web): trait menu closes after you pick a level (pingdotgg#5879)
ef051bdb8fix(web): enable restore defaults after theme mix changes (pingdotgg#5928)
0ca9fb3fbfix(web): show worktree icon in sidebar v2 (pingdotgg#5909)
cbd55d637fix(web): correct model picker trigger padding (pingdotgg#5935)
96906805fAdd settings and usage breadcrumbs (pingdotgg#5929)
73b2e8fddAutomate production mobile EAS releases (pingdotgg#5609)
5da45337fPreserve back navigation when opening settings (pingdotgg#5930)
f21d5e444Move project settings to contextual project routes (pingdotgg#5923)
9a1472d95fix(web): match usage titlebar text styling (pingdotgg#5897)
2abe66800fix(server): sandbox user-provided SVGs (pingdotgg#5916)
0d38866dcfix(server): usage no longer double-counts forked Codex sessions (pingdotgg#5887)
f993fa1c5fix(mobile): long-pressing a thread row no longer navigates into the thread (pingdotgg#5901)
83d769f02fix(web): match settings search shortcut styling to command palette's (pingdotgg#5841)
c8ad4b813fix(shell): add ~/.local/bin to the Windows CLI resolver (pingdotgg#5074)
bd18d8d6dfix(web): unify usage page chrome (pingdotgg#5823)
659986ce3fix(web): thread title button no longer eats the drag area (pingdotgg#5857)
062b4618cfix(shared): bound the file-link label so bracket runs stop rescanning (pingdotgg#5782)
deb901d63fix(server): favicon resolution no longer pins the event loop (pingdotgg#5538)

Resolutions

Seven conflicted files. What actually needed judgement:

WhereSituationResolution
ChatHeader.tsxpingdotgg#5929/pingdotgg#5930 replaced the header's title row with a WorkspaceBreadcrumb. The fork keeps two extra elements in that row — the provider-usage status dot with its AiUsageStats tooltip, and HostResourceStatusupstream's breadcrumb adopted; the fork's two elements re-attached after </WorkspaceBreadcrumb>, which is where they sat relative to the title before. The auto-merge would have left them orphaned inside a closing tag that no longer matched
projectGrouping.tsupstream rewrote deriveProjectGroupLabel; the auto-merge kept both upstream's new sharedDisplayNames block and the fork's older one — a duplicate declaration that the type-check passed but the bundler rejectedupstream's logic kept, the superseded fork copy removed. Caught by the web build, not by typecheck
UsagePage.tsxpingdotgg#5823 restructured the tables; the fork's only local delta here was the colSpan={PROVIDER_ORDER.length + 3} fix from #387upstream's file taken wholesale, the fork's one-line fix re-applied onto the new structure. This matters now that the fork has four usage providers (claude, codex, grok, kimi) rather than upstream's two
routeTree.gen.tspingdotgg#5923 moved settings.projects_.$projectKeyprojects.$projectKey, colliding with the fork's _chat.board / _chat.jump routesregenerated with the TanStack router plugin rather than hand-merged, so the tree matches the routes actually on disk. A hand union left four references to the deleted route
mobile-eas-production.ymlpingdotgg#5609 rewrote this to auto-release on push to main via Blacksmith runners. The fork had already rewritten the same workflow for manual dispatch, its own eas-continuous-deploy.sh, a fork/integration release branch and GitHub-hosted runnersfork's version kept whole. Adopting upstream's would point the fork's release path at a branch it does not use and runners it does not have
settingsSearch.test.tsthe fork's "work" assertion expected project-new-thread-workspace, which pingdotgg#5923 removed from the settings catalog when project settings moved to their own routesassertion narrowed to the fork's own worktree-remove-confirmation, with the reason recorded. Verified the entry moved rather than the fork's setting being dropped
Sidebar.tsxicon import collisionunioned

Adversarial review

Both reviewers were briefed on all seven resolutions and told to attack each one. Both found every
resolution sound
— and then found two things the resolutions themselves could not have surfaced,
because neither was in a conflicted file.

FindingDisposition
grok-4.5, HIGHpingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, triggers on every PR touching apps/mobile, packages/client-runtime, packages/contracts, packages/shared, assets or scripts, and the fork has no Blacksmith runnersFixed in 5f0e08c03. This was not hypothetical: its "Native fingerprint diff" check was already sitting queued on this very PR and would never have reported. Same fix as #386. There are now no Blacksmith references left in .github/workflows
gpt-5.6-sol, MEDIUMPROVIDER_ORDER was typed readonly UsageProviderKind[], which accepts an incomplete list. The Record maps beside it are exhaustive by type, so adding a provider forced label/colour/mark updates but not the order — and a provider missing from the order still shows in summary rows while vanishing from daily columns, chart bands, legends and skeletons. The tests iterate the order too, so they would preserve the omissionFixed in d577ef0e7, web and mobile. The order is now a const tuple with a type-level exhaustiveness assertion. Verified it actually fires: adding a fifth literal to the schema produces Type '"probe"' does not satisfy the constraint 'never' at the guard
grok-4.5, LOW — the Sidebar.tsx import union left EllipsisIcon dead; the project row's button is SettingsIcon after pingdotgg#5923Fixed in the same commit
grok-4.5, LOW — settings search can no longer deep-link to per-project "new thread workspace"Upstream's intent with contextual project routes, not a fork loss. The setting still renders in ProjectSettingsPanel
gpt-5.6-sol, note — the fallback dot branch in ChatHeader is unreachable, since headerDotClass derives from headerUsagePre-existing on the fork parent, untouched by this merge

On the resolutions themselves, independently confirmed by both: the fork's usage dot and
HostResourceStatus still render as siblings in the header row with rename/menu behaviour intact
inside upstream's breadcrumb; projectGrouping matches upstream's implementation exactly with no
fork labelling rule lost; UsagePage has no two-provider assumption left anywhere; the regenerated
route tree matches all 21 route modules on disk with the fork's _chat.board / _chat.jump intact
and no reference to the deleted route; and the mobile release workflow is internally coherent, with
its script, app.config.ts and T3CODE_MOBILE_* variables all present.

On pingdotgg#5887 specifically (usage double-counting forked Codex sessions), which lands into the usage
code the fork extended last week: gpt-5.6-sol confirmed it arrived intact — fork detection, copied-
history suppression, the reader admitting session_meta, and the scan-cache version bump that stops
old double-counted results surviving. No cross-provider weld: Codex, Grok and Kimi each allocate
independent scan state per file, so Codex fork suppression cannot suppress Grok's process-wide log
or Kimi's per-session records.

Verification

  • Recursive typecheck clean across all 18 packages.
  • vp build of the web app passes — worth calling out separately, because the duplicate declaration
    in projectGrouping.ts type-checked fine and only the bundler caught it.
  • 2,368 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev (this merge touches nothing under textGeneration/).
  • pnpm-lock.yaml regenerated rather than hand-merged.
  • Two fixes on top of the merge from the reviews: d577ef0e7 (provider-order guard) and
    5f0e08c03 (fingerprint-check runner + dead import).

Co-authored by @patroza

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

murenovichand others added 23 commits August 9, 2026 21:10
pingdotgg#5782)
Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…stalled providers are found (pingdotgg#5074)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…thread (pingdotgg#5901)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…5928)
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Adopts the 20 upstream commits that landed after 02f4ce5, headlined by
project settings moving onto contextual project routes (pingdotgg#5923), settings and
usage breadcrumbs (pingdotgg#5929, pingdotgg#5930), the unified usage page chrome (pingdotgg#5823), a fix
for usage double-counting forked Codex sessions (pingdotgg#5887), SVG sandboxing
(pingdotgg#5916), and favicon resolution no longer pinning the event loop (pingdotgg#5538).
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
PROVIDER_ORDER was typed `readonly UsageProviderKind[]`, which accepts an
incomplete list. The `Record` maps beside it are exhaustive by their own type,
so adding a provider forced updates to labels, colours and marks — but not to
the order. A provider missing from the order still appears in the summary rows,
which come from `merged.providers`, while silently vanishing from the daily
columns, chart bands, legends and skeletons, all of which iterate the order.
The tests iterate it too, so they would preserve the omission rather than catch
it.
The order is now a `const` tuple with a type-level assertion that nothing in
UsageProviderKind is missing from it, on web and mobile both. Verified it fires:
adding a fifth literal to the schema produces "Type '\"probe\"' does not satisfy
the constraint 'never'" at the guard, next to the Record errors.
Found by the gpt-5.6-sol adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
pingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict
and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, which this
fork does not have, and it triggers on every pull request touching apps/mobile,
packages/client-runtime, packages/contracts, packages/shared, assets or
scripts. Its "Native fingerprint diff" check was already sitting queued on this
very PR and would never have reported — a permanently pending check, and a
blocked merge wherever branch protection waits on all of them.
Same fix as #386 for web-preview.yml: GitHub-hosted runners, which is what
every other fork workflow uses. There are now no Blacksmith references left in
.github/workflows.
Also drops the EllipsisIcon import the Sidebar conflict union left behind; the
project row's button is SettingsIcon after pingdotgg#5923.
Found by the grok-4.5 adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBot merged commit f067b34 into fork/devAug 10, 2026
6 checks passed
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.

12 participants

@murenovich@tsouth89@nathangerday@arhxam@UtkarshUsername@juliusmarminge@t3dotgg@Chrono-byte@tris203@Lucenx9@carterwsmith@chrisdeeming
, '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

merge: sync upstream through 3d74474f6 (20 commits) - #388

Merged
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6
Aug 10, 2026
Merged

merge: sync upstream through 3d74474f6 (20 commits)#388
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 10, 2026

Copy link
Copy Markdown

Adopts upstream through 3d74474f6 — the 20 commits that landed after 02f4ce566.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
3d74474f6fix(web): update pills use readable theme foregrounds (pingdotgg#5938)
f0e297518fix(web): align project name with headline (pingdotgg#5864)
d43210050fix(web): trait menu closes after you pick a level (pingdotgg#5879)
ef051bdb8fix(web): enable restore defaults after theme mix changes (pingdotgg#5928)
0ca9fb3fbfix(web): show worktree icon in sidebar v2 (pingdotgg#5909)
cbd55d637fix(web): correct model picker trigger padding (pingdotgg#5935)
96906805fAdd settings and usage breadcrumbs (pingdotgg#5929)
73b2e8fddAutomate production mobile EAS releases (pingdotgg#5609)
5da45337fPreserve back navigation when opening settings (pingdotgg#5930)
f21d5e444Move project settings to contextual project routes (pingdotgg#5923)
9a1472d95fix(web): match usage titlebar text styling (pingdotgg#5897)
2abe66800fix(server): sandbox user-provided SVGs (pingdotgg#5916)
0d38866dcfix(server): usage no longer double-counts forked Codex sessions (pingdotgg#5887)
f993fa1c5fix(mobile): long-pressing a thread row no longer navigates into the thread (pingdotgg#5901)
83d769f02fix(web): match settings search shortcut styling to command palette's (pingdotgg#5841)
c8ad4b813fix(shell): add ~/.local/bin to the Windows CLI resolver (pingdotgg#5074)
bd18d8d6dfix(web): unify usage page chrome (pingdotgg#5823)
659986ce3fix(web): thread title button no longer eats the drag area (pingdotgg#5857)
062b4618cfix(shared): bound the file-link label so bracket runs stop rescanning (pingdotgg#5782)
deb901d63fix(server): favicon resolution no longer pins the event loop (pingdotgg#5538)

Resolutions

Seven conflicted files. What actually needed judgement:

WhereSituationResolution
ChatHeader.tsxpingdotgg#5929/pingdotgg#5930 replaced the header's title row with a WorkspaceBreadcrumb. The fork keeps two extra elements in that row — the provider-usage status dot with its AiUsageStats tooltip, and HostResourceStatusupstream's breadcrumb adopted; the fork's two elements re-attached after </WorkspaceBreadcrumb>, which is where they sat relative to the title before. The auto-merge would have left them orphaned inside a closing tag that no longer matched
projectGrouping.tsupstream rewrote deriveProjectGroupLabel; the auto-merge kept both upstream's new sharedDisplayNames block and the fork's older one — a duplicate declaration that the type-check passed but the bundler rejectedupstream's logic kept, the superseded fork copy removed. Caught by the web build, not by typecheck
UsagePage.tsxpingdotgg#5823 restructured the tables; the fork's only local delta here was the colSpan={PROVIDER_ORDER.length + 3} fix from #387upstream's file taken wholesale, the fork's one-line fix re-applied onto the new structure. This matters now that the fork has four usage providers (claude, codex, grok, kimi) rather than upstream's two
routeTree.gen.tspingdotgg#5923 moved settings.projects_.$projectKeyprojects.$projectKey, colliding with the fork's _chat.board / _chat.jump routesregenerated with the TanStack router plugin rather than hand-merged, so the tree matches the routes actually on disk. A hand union left four references to the deleted route
mobile-eas-production.ymlpingdotgg#5609 rewrote this to auto-release on push to main via Blacksmith runners. The fork had already rewritten the same workflow for manual dispatch, its own eas-continuous-deploy.sh, a fork/integration release branch and GitHub-hosted runnersfork's version kept whole. Adopting upstream's would point the fork's release path at a branch it does not use and runners it does not have
settingsSearch.test.tsthe fork's "work" assertion expected project-new-thread-workspace, which pingdotgg#5923 removed from the settings catalog when project settings moved to their own routesassertion narrowed to the fork's own worktree-remove-confirmation, with the reason recorded. Verified the entry moved rather than the fork's setting being dropped
Sidebar.tsxicon import collisionunioned

Adversarial review

Both reviewers were briefed on all seven resolutions and told to attack each one. Both found every
resolution sound
— and then found two things the resolutions themselves could not have surfaced,
because neither was in a conflicted file.

FindingDisposition
grok-4.5, HIGHpingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, triggers on every PR touching apps/mobile, packages/client-runtime, packages/contracts, packages/shared, assets or scripts, and the fork has no Blacksmith runnersFixed in 5f0e08c03. This was not hypothetical: its "Native fingerprint diff" check was already sitting queued on this very PR and would never have reported. Same fix as #386. There are now no Blacksmith references left in .github/workflows
gpt-5.6-sol, MEDIUMPROVIDER_ORDER was typed readonly UsageProviderKind[], which accepts an incomplete list. The Record maps beside it are exhaustive by type, so adding a provider forced label/colour/mark updates but not the order — and a provider missing from the order still shows in summary rows while vanishing from daily columns, chart bands, legends and skeletons. The tests iterate the order too, so they would preserve the omissionFixed in d577ef0e7, web and mobile. The order is now a const tuple with a type-level exhaustiveness assertion. Verified it actually fires: adding a fifth literal to the schema produces Type '"probe"' does not satisfy the constraint 'never' at the guard
grok-4.5, LOW — the Sidebar.tsx import union left EllipsisIcon dead; the project row's button is SettingsIcon after pingdotgg#5923Fixed in the same commit
grok-4.5, LOW — settings search can no longer deep-link to per-project "new thread workspace"Upstream's intent with contextual project routes, not a fork loss. The setting still renders in ProjectSettingsPanel
gpt-5.6-sol, note — the fallback dot branch in ChatHeader is unreachable, since headerDotClass derives from headerUsagePre-existing on the fork parent, untouched by this merge

On the resolutions themselves, independently confirmed by both: the fork's usage dot and
HostResourceStatus still render as siblings in the header row with rename/menu behaviour intact
inside upstream's breadcrumb; projectGrouping matches upstream's implementation exactly with no
fork labelling rule lost; UsagePage has no two-provider assumption left anywhere; the regenerated
route tree matches all 21 route modules on disk with the fork's _chat.board / _chat.jump intact
and no reference to the deleted route; and the mobile release workflow is internally coherent, with
its script, app.config.ts and T3CODE_MOBILE_* variables all present.

On pingdotgg#5887 specifically (usage double-counting forked Codex sessions), which lands into the usage
code the fork extended last week: gpt-5.6-sol confirmed it arrived intact — fork detection, copied-
history suppression, the reader admitting session_meta, and the scan-cache version bump that stops
old double-counted results surviving. No cross-provider weld: Codex, Grok and Kimi each allocate
independent scan state per file, so Codex fork suppression cannot suppress Grok's process-wide log
or Kimi's per-session records.

Verification

  • Recursive typecheck clean across all 18 packages.
  • vp build of the web app passes — worth calling out separately, because the duplicate declaration
    in projectGrouping.ts type-checked fine and only the bundler caught it.
  • 2,368 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev (this merge touches nothing under textGeneration/).
  • pnpm-lock.yaml regenerated rather than hand-merged.
  • Two fixes on top of the merge from the reviews: d577ef0e7 (provider-order guard) and
    5f0e08c03 (fingerprint-check runner + dead import).

Co-authored by @patroza

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

murenovichand others added 23 commits August 9, 2026 21:10
pingdotgg#5782)
Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…stalled providers are found (pingdotgg#5074)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…thread (pingdotgg#5901)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…5928)
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Adopts the 20 upstream commits that landed after 02f4ce5, headlined by
project settings moving onto contextual project routes (pingdotgg#5923), settings and
usage breadcrumbs (pingdotgg#5929, pingdotgg#5930), the unified usage page chrome (pingdotgg#5823), a fix
for usage double-counting forked Codex sessions (pingdotgg#5887), SVG sandboxing
(pingdotgg#5916), and favicon resolution no longer pinning the event loop (pingdotgg#5538).
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
PROVIDER_ORDER was typed `readonly UsageProviderKind[]`, which accepts an
incomplete list. The `Record` maps beside it are exhaustive by their own type,
so adding a provider forced updates to labels, colours and marks — but not to
the order. A provider missing from the order still appears in the summary rows,
which come from `merged.providers`, while silently vanishing from the daily
columns, chart bands, legends and skeletons, all of which iterate the order.
The tests iterate it too, so they would preserve the omission rather than catch
it.
The order is now a `const` tuple with a type-level assertion that nothing in
UsageProviderKind is missing from it, on web and mobile both. Verified it fires:
adding a fifth literal to the schema produces "Type '\"probe\"' does not satisfy
the constraint 'never'" at the guard, next to the Record errors.
Found by the gpt-5.6-sol adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
pingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict
and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, which this
fork does not have, and it triggers on every pull request touching apps/mobile,
packages/client-runtime, packages/contracts, packages/shared, assets or
scripts. Its "Native fingerprint diff" check was already sitting queued on this
very PR and would never have reported — a permanently pending check, and a
blocked merge wherever branch protection waits on all of them.
Same fix as #386 for web-preview.yml: GitHub-hosted runners, which is what
every other fork workflow uses. There are now no Blacksmith references left in
.github/workflows.
Also drops the EllipsisIcon import the Sidebar conflict union left behind; the
project row's button is SettingsIcon after pingdotgg#5923.
Found by the grok-4.5 adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBot merged commit f067b34 into fork/devAug 10, 2026
6 checks passed
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.

12 participants

@murenovich@tsouth89@nathangerday@arhxam@UtkarshUsername@juliusmarminge@t3dotgg@Chrono-byte@tris203@Lucenx9@carterwsmith@chrisdeeming
, '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

merge: sync upstream through 3d74474f6 (20 commits) - #388

Merged
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6
Aug 10, 2026
Merged

merge: sync upstream through 3d74474f6 (20 commits)#388
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 10, 2026

Copy link
Copy Markdown

Adopts upstream through 3d74474f6 — the 20 commits that landed after 02f4ce566.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
3d74474f6fix(web): update pills use readable theme foregrounds (pingdotgg#5938)
f0e297518fix(web): align project name with headline (pingdotgg#5864)
d43210050fix(web): trait menu closes after you pick a level (pingdotgg#5879)
ef051bdb8fix(web): enable restore defaults after theme mix changes (pingdotgg#5928)
0ca9fb3fbfix(web): show worktree icon in sidebar v2 (pingdotgg#5909)
cbd55d637fix(web): correct model picker trigger padding (pingdotgg#5935)
96906805fAdd settings and usage breadcrumbs (pingdotgg#5929)
73b2e8fddAutomate production mobile EAS releases (pingdotgg#5609)
5da45337fPreserve back navigation when opening settings (pingdotgg#5930)
f21d5e444Move project settings to contextual project routes (pingdotgg#5923)
9a1472d95fix(web): match usage titlebar text styling (pingdotgg#5897)
2abe66800fix(server): sandbox user-provided SVGs (pingdotgg#5916)
0d38866dcfix(server): usage no longer double-counts forked Codex sessions (pingdotgg#5887)
f993fa1c5fix(mobile): long-pressing a thread row no longer navigates into the thread (pingdotgg#5901)
83d769f02fix(web): match settings search shortcut styling to command palette's (pingdotgg#5841)
c8ad4b813fix(shell): add ~/.local/bin to the Windows CLI resolver (pingdotgg#5074)
bd18d8d6dfix(web): unify usage page chrome (pingdotgg#5823)
659986ce3fix(web): thread title button no longer eats the drag area (pingdotgg#5857)
062b4618cfix(shared): bound the file-link label so bracket runs stop rescanning (pingdotgg#5782)
deb901d63fix(server): favicon resolution no longer pins the event loop (pingdotgg#5538)

Resolutions

Seven conflicted files. What actually needed judgement:

WhereSituationResolution
ChatHeader.tsxpingdotgg#5929/pingdotgg#5930 replaced the header's title row with a WorkspaceBreadcrumb. The fork keeps two extra elements in that row — the provider-usage status dot with its AiUsageStats tooltip, and HostResourceStatusupstream's breadcrumb adopted; the fork's two elements re-attached after </WorkspaceBreadcrumb>, which is where they sat relative to the title before. The auto-merge would have left them orphaned inside a closing tag that no longer matched
projectGrouping.tsupstream rewrote deriveProjectGroupLabel; the auto-merge kept both upstream's new sharedDisplayNames block and the fork's older one — a duplicate declaration that the type-check passed but the bundler rejectedupstream's logic kept, the superseded fork copy removed. Caught by the web build, not by typecheck
UsagePage.tsxpingdotgg#5823 restructured the tables; the fork's only local delta here was the colSpan={PROVIDER_ORDER.length + 3} fix from #387upstream's file taken wholesale, the fork's one-line fix re-applied onto the new structure. This matters now that the fork has four usage providers (claude, codex, grok, kimi) rather than upstream's two
routeTree.gen.tspingdotgg#5923 moved settings.projects_.$projectKeyprojects.$projectKey, colliding with the fork's _chat.board / _chat.jump routesregenerated with the TanStack router plugin rather than hand-merged, so the tree matches the routes actually on disk. A hand union left four references to the deleted route
mobile-eas-production.ymlpingdotgg#5609 rewrote this to auto-release on push to main via Blacksmith runners. The fork had already rewritten the same workflow for manual dispatch, its own eas-continuous-deploy.sh, a fork/integration release branch and GitHub-hosted runnersfork's version kept whole. Adopting upstream's would point the fork's release path at a branch it does not use and runners it does not have
settingsSearch.test.tsthe fork's "work" assertion expected project-new-thread-workspace, which pingdotgg#5923 removed from the settings catalog when project settings moved to their own routesassertion narrowed to the fork's own worktree-remove-confirmation, with the reason recorded. Verified the entry moved rather than the fork's setting being dropped
Sidebar.tsxicon import collisionunioned

Adversarial review

Both reviewers were briefed on all seven resolutions and told to attack each one. Both found every
resolution sound
— and then found two things the resolutions themselves could not have surfaced,
because neither was in a conflicted file.

FindingDisposition
grok-4.5, HIGHpingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, triggers on every PR touching apps/mobile, packages/client-runtime, packages/contracts, packages/shared, assets or scripts, and the fork has no Blacksmith runnersFixed in 5f0e08c03. This was not hypothetical: its "Native fingerprint diff" check was already sitting queued on this very PR and would never have reported. Same fix as #386. There are now no Blacksmith references left in .github/workflows
gpt-5.6-sol, MEDIUMPROVIDER_ORDER was typed readonly UsageProviderKind[], which accepts an incomplete list. The Record maps beside it are exhaustive by type, so adding a provider forced label/colour/mark updates but not the order — and a provider missing from the order still shows in summary rows while vanishing from daily columns, chart bands, legends and skeletons. The tests iterate the order too, so they would preserve the omissionFixed in d577ef0e7, web and mobile. The order is now a const tuple with a type-level exhaustiveness assertion. Verified it actually fires: adding a fifth literal to the schema produces Type '"probe"' does not satisfy the constraint 'never' at the guard
grok-4.5, LOW — the Sidebar.tsx import union left EllipsisIcon dead; the project row's button is SettingsIcon after pingdotgg#5923Fixed in the same commit
grok-4.5, LOW — settings search can no longer deep-link to per-project "new thread workspace"Upstream's intent with contextual project routes, not a fork loss. The setting still renders in ProjectSettingsPanel
gpt-5.6-sol, note — the fallback dot branch in ChatHeader is unreachable, since headerDotClass derives from headerUsagePre-existing on the fork parent, untouched by this merge

On the resolutions themselves, independently confirmed by both: the fork's usage dot and
HostResourceStatus still render as siblings in the header row with rename/menu behaviour intact
inside upstream's breadcrumb; projectGrouping matches upstream's implementation exactly with no
fork labelling rule lost; UsagePage has no two-provider assumption left anywhere; the regenerated
route tree matches all 21 route modules on disk with the fork's _chat.board / _chat.jump intact
and no reference to the deleted route; and the mobile release workflow is internally coherent, with
its script, app.config.ts and T3CODE_MOBILE_* variables all present.

On pingdotgg#5887 specifically (usage double-counting forked Codex sessions), which lands into the usage
code the fork extended last week: gpt-5.6-sol confirmed it arrived intact — fork detection, copied-
history suppression, the reader admitting session_meta, and the scan-cache version bump that stops
old double-counted results surviving. No cross-provider weld: Codex, Grok and Kimi each allocate
independent scan state per file, so Codex fork suppression cannot suppress Grok's process-wide log
or Kimi's per-session records.

Verification

  • Recursive typecheck clean across all 18 packages.
  • vp build of the web app passes — worth calling out separately, because the duplicate declaration
    in projectGrouping.ts type-checked fine and only the bundler caught it.
  • 2,368 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev (this merge touches nothing under textGeneration/).
  • pnpm-lock.yaml regenerated rather than hand-merged.
  • Two fixes on top of the merge from the reviews: d577ef0e7 (provider-order guard) and
    5f0e08c03 (fingerprint-check runner + dead import).

Co-authored by @patroza

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

murenovichand others added 23 commits August 9, 2026 21:10
pingdotgg#5782)
Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…stalled providers are found (pingdotgg#5074)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…thread (pingdotgg#5901)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…5928)
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Adopts the 20 upstream commits that landed after 02f4ce5, headlined by
project settings moving onto contextual project routes (pingdotgg#5923), settings and
usage breadcrumbs (pingdotgg#5929, pingdotgg#5930), the unified usage page chrome (pingdotgg#5823), a fix
for usage double-counting forked Codex sessions (pingdotgg#5887), SVG sandboxing
(pingdotgg#5916), and favicon resolution no longer pinning the event loop (pingdotgg#5538).
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
PROVIDER_ORDER was typed `readonly UsageProviderKind[]`, which accepts an
incomplete list. The `Record` maps beside it are exhaustive by their own type,
so adding a provider forced updates to labels, colours and marks — but not to
the order. A provider missing from the order still appears in the summary rows,
which come from `merged.providers`, while silently vanishing from the daily
columns, chart bands, legends and skeletons, all of which iterate the order.
The tests iterate it too, so they would preserve the omission rather than catch
it.
The order is now a `const` tuple with a type-level assertion that nothing in
UsageProviderKind is missing from it, on web and mobile both. Verified it fires:
adding a fifth literal to the schema produces "Type '\"probe\"' does not satisfy
the constraint 'never'" at the guard, next to the Record errors.
Found by the gpt-5.6-sol adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
pingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict
and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, which this
fork does not have, and it triggers on every pull request touching apps/mobile,
packages/client-runtime, packages/contracts, packages/shared, assets or
scripts. Its "Native fingerprint diff" check was already sitting queued on this
very PR and would never have reported — a permanently pending check, and a
blocked merge wherever branch protection waits on all of them.
Same fix as #386 for web-preview.yml: GitHub-hosted runners, which is what
every other fork workflow uses. There are now no Blacksmith references left in
.github/workflows.
Also drops the EllipsisIcon import the Sidebar conflict union left behind; the
project row's button is SettingsIcon after pingdotgg#5923.
Found by the grok-4.5 adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBot merged commit f067b34 into fork/devAug 10, 2026
6 checks passed
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.

12 participants

@murenovich@tsouth89@nathangerday@arhxam@UtkarshUsername@juliusmarminge@t3dotgg@Chrono-byte@tris203@Lucenx9@carterwsmith@chrisdeeming
, '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

merge: sync upstream through 3d74474f6 (20 commits) - #388

Merged
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6
Aug 10, 2026
Merged

merge: sync upstream through 3d74474f6 (20 commits)#388
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 10, 2026

Copy link
Copy Markdown

Adopts upstream through 3d74474f6 — the 20 commits that landed after 02f4ce566.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
3d74474f6fix(web): update pills use readable theme foregrounds (pingdotgg#5938)
f0e297518fix(web): align project name with headline (pingdotgg#5864)
d43210050fix(web): trait menu closes after you pick a level (pingdotgg#5879)
ef051bdb8fix(web): enable restore defaults after theme mix changes (pingdotgg#5928)
0ca9fb3fbfix(web): show worktree icon in sidebar v2 (pingdotgg#5909)
cbd55d637fix(web): correct model picker trigger padding (pingdotgg#5935)
96906805fAdd settings and usage breadcrumbs (pingdotgg#5929)
73b2e8fddAutomate production mobile EAS releases (pingdotgg#5609)
5da45337fPreserve back navigation when opening settings (pingdotgg#5930)
f21d5e444Move project settings to contextual project routes (pingdotgg#5923)
9a1472d95fix(web): match usage titlebar text styling (pingdotgg#5897)
2abe66800fix(server): sandbox user-provided SVGs (pingdotgg#5916)
0d38866dcfix(server): usage no longer double-counts forked Codex sessions (pingdotgg#5887)
f993fa1c5fix(mobile): long-pressing a thread row no longer navigates into the thread (pingdotgg#5901)
83d769f02fix(web): match settings search shortcut styling to command palette's (pingdotgg#5841)
c8ad4b813fix(shell): add ~/.local/bin to the Windows CLI resolver (pingdotgg#5074)
bd18d8d6dfix(web): unify usage page chrome (pingdotgg#5823)
659986ce3fix(web): thread title button no longer eats the drag area (pingdotgg#5857)
062b4618cfix(shared): bound the file-link label so bracket runs stop rescanning (pingdotgg#5782)
deb901d63fix(server): favicon resolution no longer pins the event loop (pingdotgg#5538)

Resolutions

Seven conflicted files. What actually needed judgement:

WhereSituationResolution
ChatHeader.tsxpingdotgg#5929/pingdotgg#5930 replaced the header's title row with a WorkspaceBreadcrumb. The fork keeps two extra elements in that row — the provider-usage status dot with its AiUsageStats tooltip, and HostResourceStatusupstream's breadcrumb adopted; the fork's two elements re-attached after </WorkspaceBreadcrumb>, which is where they sat relative to the title before. The auto-merge would have left them orphaned inside a closing tag that no longer matched
projectGrouping.tsupstream rewrote deriveProjectGroupLabel; the auto-merge kept both upstream's new sharedDisplayNames block and the fork's older one — a duplicate declaration that the type-check passed but the bundler rejectedupstream's logic kept, the superseded fork copy removed. Caught by the web build, not by typecheck
UsagePage.tsxpingdotgg#5823 restructured the tables; the fork's only local delta here was the colSpan={PROVIDER_ORDER.length + 3} fix from #387upstream's file taken wholesale, the fork's one-line fix re-applied onto the new structure. This matters now that the fork has four usage providers (claude, codex, grok, kimi) rather than upstream's two
routeTree.gen.tspingdotgg#5923 moved settings.projects_.$projectKeyprojects.$projectKey, colliding with the fork's _chat.board / _chat.jump routesregenerated with the TanStack router plugin rather than hand-merged, so the tree matches the routes actually on disk. A hand union left four references to the deleted route
mobile-eas-production.ymlpingdotgg#5609 rewrote this to auto-release on push to main via Blacksmith runners. The fork had already rewritten the same workflow for manual dispatch, its own eas-continuous-deploy.sh, a fork/integration release branch and GitHub-hosted runnersfork's version kept whole. Adopting upstream's would point the fork's release path at a branch it does not use and runners it does not have
settingsSearch.test.tsthe fork's "work" assertion expected project-new-thread-workspace, which pingdotgg#5923 removed from the settings catalog when project settings moved to their own routesassertion narrowed to the fork's own worktree-remove-confirmation, with the reason recorded. Verified the entry moved rather than the fork's setting being dropped
Sidebar.tsxicon import collisionunioned

Adversarial review

Both reviewers were briefed on all seven resolutions and told to attack each one. Both found every
resolution sound
— and then found two things the resolutions themselves could not have surfaced,
because neither was in a conflicted file.

FindingDisposition
grok-4.5, HIGHpingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, triggers on every PR touching apps/mobile, packages/client-runtime, packages/contracts, packages/shared, assets or scripts, and the fork has no Blacksmith runnersFixed in 5f0e08c03. This was not hypothetical: its "Native fingerprint diff" check was already sitting queued on this very PR and would never have reported. Same fix as #386. There are now no Blacksmith references left in .github/workflows
gpt-5.6-sol, MEDIUMPROVIDER_ORDER was typed readonly UsageProviderKind[], which accepts an incomplete list. The Record maps beside it are exhaustive by type, so adding a provider forced label/colour/mark updates but not the order — and a provider missing from the order still shows in summary rows while vanishing from daily columns, chart bands, legends and skeletons. The tests iterate the order too, so they would preserve the omissionFixed in d577ef0e7, web and mobile. The order is now a const tuple with a type-level exhaustiveness assertion. Verified it actually fires: adding a fifth literal to the schema produces Type '"probe"' does not satisfy the constraint 'never' at the guard
grok-4.5, LOW — the Sidebar.tsx import union left EllipsisIcon dead; the project row's button is SettingsIcon after pingdotgg#5923Fixed in the same commit
grok-4.5, LOW — settings search can no longer deep-link to per-project "new thread workspace"Upstream's intent with contextual project routes, not a fork loss. The setting still renders in ProjectSettingsPanel
gpt-5.6-sol, note — the fallback dot branch in ChatHeader is unreachable, since headerDotClass derives from headerUsagePre-existing on the fork parent, untouched by this merge

On the resolutions themselves, independently confirmed by both: the fork's usage dot and
HostResourceStatus still render as siblings in the header row with rename/menu behaviour intact
inside upstream's breadcrumb; projectGrouping matches upstream's implementation exactly with no
fork labelling rule lost; UsagePage has no two-provider assumption left anywhere; the regenerated
route tree matches all 21 route modules on disk with the fork's _chat.board / _chat.jump intact
and no reference to the deleted route; and the mobile release workflow is internally coherent, with
its script, app.config.ts and T3CODE_MOBILE_* variables all present.

On pingdotgg#5887 specifically (usage double-counting forked Codex sessions), which lands into the usage
code the fork extended last week: gpt-5.6-sol confirmed it arrived intact — fork detection, copied-
history suppression, the reader admitting session_meta, and the scan-cache version bump that stops
old double-counted results surviving. No cross-provider weld: Codex, Grok and Kimi each allocate
independent scan state per file, so Codex fork suppression cannot suppress Grok's process-wide log
or Kimi's per-session records.

Verification

  • Recursive typecheck clean across all 18 packages.
  • vp build of the web app passes — worth calling out separately, because the duplicate declaration
    in projectGrouping.ts type-checked fine and only the bundler caught it.
  • 2,368 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev (this merge touches nothing under textGeneration/).
  • pnpm-lock.yaml regenerated rather than hand-merged.
  • Two fixes on top of the merge from the reviews: d577ef0e7 (provider-order guard) and
    5f0e08c03 (fingerprint-check runner + dead import).

Co-authored by @patroza

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

murenovichand others added 23 commits August 9, 2026 21:10
pingdotgg#5782)
Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…stalled providers are found (pingdotgg#5074)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…thread (pingdotgg#5901)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…5928)
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Adopts the 20 upstream commits that landed after 02f4ce5, headlined by
project settings moving onto contextual project routes (pingdotgg#5923), settings and
usage breadcrumbs (pingdotgg#5929, pingdotgg#5930), the unified usage page chrome (pingdotgg#5823), a fix
for usage double-counting forked Codex sessions (pingdotgg#5887), SVG sandboxing
(pingdotgg#5916), and favicon resolution no longer pinning the event loop (pingdotgg#5538).
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
PROVIDER_ORDER was typed `readonly UsageProviderKind[]`, which accepts an
incomplete list. The `Record` maps beside it are exhaustive by their own type,
so adding a provider forced updates to labels, colours and marks — but not to
the order. A provider missing from the order still appears in the summary rows,
which come from `merged.providers`, while silently vanishing from the daily
columns, chart bands, legends and skeletons, all of which iterate the order.
The tests iterate it too, so they would preserve the omission rather than catch
it.
The order is now a `const` tuple with a type-level assertion that nothing in
UsageProviderKind is missing from it, on web and mobile both. Verified it fires:
adding a fifth literal to the schema produces "Type '\"probe\"' does not satisfy
the constraint 'never'" at the guard, next to the Record errors.
Found by the gpt-5.6-sol adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
pingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict
and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, which this
fork does not have, and it triggers on every pull request touching apps/mobile,
packages/client-runtime, packages/contracts, packages/shared, assets or
scripts. Its "Native fingerprint diff" check was already sitting queued on this
very PR and would never have reported — a permanently pending check, and a
blocked merge wherever branch protection waits on all of them.
Same fix as #386 for web-preview.yml: GitHub-hosted runners, which is what
every other fork workflow uses. There are now no Blacksmith references left in
.github/workflows.
Also drops the EllipsisIcon import the Sidebar conflict union left behind; the
project row's button is SettingsIcon after pingdotgg#5923.
Found by the grok-4.5 adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBot merged commit f067b34 into fork/devAug 10, 2026
6 checks passed
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.

12 participants

@murenovich@tsouth89@nathangerday@arhxam@UtkarshUsername@juliusmarminge@t3dotgg@Chrono-byte@tris203@Lucenx9@carterwsmith@chrisdeeming
, '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

merge: sync upstream through 3d74474f6 (20 commits) - #388

Merged
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6
Aug 10, 2026
Merged

merge: sync upstream through 3d74474f6 (20 commits)#388
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 10, 2026

Copy link
Copy Markdown

Adopts upstream through 3d74474f6 — the 20 commits that landed after 02f4ce566.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
3d74474f6fix(web): update pills use readable theme foregrounds (pingdotgg#5938)
f0e297518fix(web): align project name with headline (pingdotgg#5864)
d43210050fix(web): trait menu closes after you pick a level (pingdotgg#5879)
ef051bdb8fix(web): enable restore defaults after theme mix changes (pingdotgg#5928)
0ca9fb3fbfix(web): show worktree icon in sidebar v2 (pingdotgg#5909)
cbd55d637fix(web): correct model picker trigger padding (pingdotgg#5935)
96906805fAdd settings and usage breadcrumbs (pingdotgg#5929)
73b2e8fddAutomate production mobile EAS releases (pingdotgg#5609)
5da45337fPreserve back navigation when opening settings (pingdotgg#5930)
f21d5e444Move project settings to contextual project routes (pingdotgg#5923)
9a1472d95fix(web): match usage titlebar text styling (pingdotgg#5897)
2abe66800fix(server): sandbox user-provided SVGs (pingdotgg#5916)
0d38866dcfix(server): usage no longer double-counts forked Codex sessions (pingdotgg#5887)
f993fa1c5fix(mobile): long-pressing a thread row no longer navigates into the thread (pingdotgg#5901)
83d769f02fix(web): match settings search shortcut styling to command palette's (pingdotgg#5841)
c8ad4b813fix(shell): add ~/.local/bin to the Windows CLI resolver (pingdotgg#5074)
bd18d8d6dfix(web): unify usage page chrome (pingdotgg#5823)
659986ce3fix(web): thread title button no longer eats the drag area (pingdotgg#5857)
062b4618cfix(shared): bound the file-link label so bracket runs stop rescanning (pingdotgg#5782)
deb901d63fix(server): favicon resolution no longer pins the event loop (pingdotgg#5538)

Resolutions

Seven conflicted files. What actually needed judgement:

WhereSituationResolution
ChatHeader.tsxpingdotgg#5929/pingdotgg#5930 replaced the header's title row with a WorkspaceBreadcrumb. The fork keeps two extra elements in that row — the provider-usage status dot with its AiUsageStats tooltip, and HostResourceStatusupstream's breadcrumb adopted; the fork's two elements re-attached after </WorkspaceBreadcrumb>, which is where they sat relative to the title before. The auto-merge would have left them orphaned inside a closing tag that no longer matched
projectGrouping.tsupstream rewrote deriveProjectGroupLabel; the auto-merge kept both upstream's new sharedDisplayNames block and the fork's older one — a duplicate declaration that the type-check passed but the bundler rejectedupstream's logic kept, the superseded fork copy removed. Caught by the web build, not by typecheck
UsagePage.tsxpingdotgg#5823 restructured the tables; the fork's only local delta here was the colSpan={PROVIDER_ORDER.length + 3} fix from #387upstream's file taken wholesale, the fork's one-line fix re-applied onto the new structure. This matters now that the fork has four usage providers (claude, codex, grok, kimi) rather than upstream's two
routeTree.gen.tspingdotgg#5923 moved settings.projects_.$projectKeyprojects.$projectKey, colliding with the fork's _chat.board / _chat.jump routesregenerated with the TanStack router plugin rather than hand-merged, so the tree matches the routes actually on disk. A hand union left four references to the deleted route
mobile-eas-production.ymlpingdotgg#5609 rewrote this to auto-release on push to main via Blacksmith runners. The fork had already rewritten the same workflow for manual dispatch, its own eas-continuous-deploy.sh, a fork/integration release branch and GitHub-hosted runnersfork's version kept whole. Adopting upstream's would point the fork's release path at a branch it does not use and runners it does not have
settingsSearch.test.tsthe fork's "work" assertion expected project-new-thread-workspace, which pingdotgg#5923 removed from the settings catalog when project settings moved to their own routesassertion narrowed to the fork's own worktree-remove-confirmation, with the reason recorded. Verified the entry moved rather than the fork's setting being dropped
Sidebar.tsxicon import collisionunioned

Adversarial review

Both reviewers were briefed on all seven resolutions and told to attack each one. Both found every
resolution sound
— and then found two things the resolutions themselves could not have surfaced,
because neither was in a conflicted file.

FindingDisposition
grok-4.5, HIGHpingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, triggers on every PR touching apps/mobile, packages/client-runtime, packages/contracts, packages/shared, assets or scripts, and the fork has no Blacksmith runnersFixed in 5f0e08c03. This was not hypothetical: its "Native fingerprint diff" check was already sitting queued on this very PR and would never have reported. Same fix as #386. There are now no Blacksmith references left in .github/workflows
gpt-5.6-sol, MEDIUMPROVIDER_ORDER was typed readonly UsageProviderKind[], which accepts an incomplete list. The Record maps beside it are exhaustive by type, so adding a provider forced label/colour/mark updates but not the order — and a provider missing from the order still shows in summary rows while vanishing from daily columns, chart bands, legends and skeletons. The tests iterate the order too, so they would preserve the omissionFixed in d577ef0e7, web and mobile. The order is now a const tuple with a type-level exhaustiveness assertion. Verified it actually fires: adding a fifth literal to the schema produces Type '"probe"' does not satisfy the constraint 'never' at the guard
grok-4.5, LOW — the Sidebar.tsx import union left EllipsisIcon dead; the project row's button is SettingsIcon after pingdotgg#5923Fixed in the same commit
grok-4.5, LOW — settings search can no longer deep-link to per-project "new thread workspace"Upstream's intent with contextual project routes, not a fork loss. The setting still renders in ProjectSettingsPanel
gpt-5.6-sol, note — the fallback dot branch in ChatHeader is unreachable, since headerDotClass derives from headerUsagePre-existing on the fork parent, untouched by this merge

On the resolutions themselves, independently confirmed by both: the fork's usage dot and
HostResourceStatus still render as siblings in the header row with rename/menu behaviour intact
inside upstream's breadcrumb; projectGrouping matches upstream's implementation exactly with no
fork labelling rule lost; UsagePage has no two-provider assumption left anywhere; the regenerated
route tree matches all 21 route modules on disk with the fork's _chat.board / _chat.jump intact
and no reference to the deleted route; and the mobile release workflow is internally coherent, with
its script, app.config.ts and T3CODE_MOBILE_* variables all present.

On pingdotgg#5887 specifically (usage double-counting forked Codex sessions), which lands into the usage
code the fork extended last week: gpt-5.6-sol confirmed it arrived intact — fork detection, copied-
history suppression, the reader admitting session_meta, and the scan-cache version bump that stops
old double-counted results surviving. No cross-provider weld: Codex, Grok and Kimi each allocate
independent scan state per file, so Codex fork suppression cannot suppress Grok's process-wide log
or Kimi's per-session records.

Verification

  • Recursive typecheck clean across all 18 packages.
  • vp build of the web app passes — worth calling out separately, because the duplicate declaration
    in projectGrouping.ts type-checked fine and only the bundler caught it.
  • 2,368 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev (this merge touches nothing under textGeneration/).
  • pnpm-lock.yaml regenerated rather than hand-merged.
  • Two fixes on top of the merge from the reviews: d577ef0e7 (provider-order guard) and
    5f0e08c03 (fingerprint-check runner + dead import).

Co-authored by @patroza

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

murenovichand others added 23 commits August 9, 2026 21:10
pingdotgg#5782)
Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…stalled providers are found (pingdotgg#5074)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…thread (pingdotgg#5901)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…5928)
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Adopts the 20 upstream commits that landed after 02f4ce5, headlined by
project settings moving onto contextual project routes (pingdotgg#5923), settings and
usage breadcrumbs (pingdotgg#5929, pingdotgg#5930), the unified usage page chrome (pingdotgg#5823), a fix
for usage double-counting forked Codex sessions (pingdotgg#5887), SVG sandboxing
(pingdotgg#5916), and favicon resolution no longer pinning the event loop (pingdotgg#5538).
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
PROVIDER_ORDER was typed `readonly UsageProviderKind[]`, which accepts an
incomplete list. The `Record` maps beside it are exhaustive by their own type,
so adding a provider forced updates to labels, colours and marks — but not to
the order. A provider missing from the order still appears in the summary rows,
which come from `merged.providers`, while silently vanishing from the daily
columns, chart bands, legends and skeletons, all of which iterate the order.
The tests iterate it too, so they would preserve the omission rather than catch
it.
The order is now a `const` tuple with a type-level assertion that nothing in
UsageProviderKind is missing from it, on web and mobile both. Verified it fires:
adding a fifth literal to the schema produces "Type '\"probe\"' does not satisfy
the constraint 'never'" at the guard, next to the Record errors.
Found by the gpt-5.6-sol adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
pingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict
and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, which this
fork does not have, and it triggers on every pull request touching apps/mobile,
packages/client-runtime, packages/contracts, packages/shared, assets or
scripts. Its "Native fingerprint diff" check was already sitting queued on this
very PR and would never have reported — a permanently pending check, and a
blocked merge wherever branch protection waits on all of them.
Same fix as #386 for web-preview.yml: GitHub-hosted runners, which is what
every other fork workflow uses. There are now no Blacksmith references left in
.github/workflows.
Also drops the EllipsisIcon import the Sidebar conflict union left behind; the
project row's button is SettingsIcon after pingdotgg#5923.
Found by the grok-4.5 adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBot merged commit f067b34 into fork/devAug 10, 2026
6 checks passed
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.

12 participants

@murenovich@tsouth89@nathangerday@arhxam@UtkarshUsername@juliusmarminge@t3dotgg@Chrono-byte@tris203@Lucenx9@carterwsmith@chrisdeeming
, '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

merge: sync upstream through 3d74474f6 (20 commits) - #388

Merged
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6
Aug 10, 2026
Merged

merge: sync upstream through 3d74474f6 (20 commits)#388
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 10, 2026

Copy link
Copy Markdown

Adopts upstream through 3d74474f6 — the 20 commits that landed after 02f4ce566.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
3d74474f6fix(web): update pills use readable theme foregrounds (pingdotgg#5938)
f0e297518fix(web): align project name with headline (pingdotgg#5864)
d43210050fix(web): trait menu closes after you pick a level (pingdotgg#5879)
ef051bdb8fix(web): enable restore defaults after theme mix changes (pingdotgg#5928)
0ca9fb3fbfix(web): show worktree icon in sidebar v2 (pingdotgg#5909)
cbd55d637fix(web): correct model picker trigger padding (pingdotgg#5935)
96906805fAdd settings and usage breadcrumbs (pingdotgg#5929)
73b2e8fddAutomate production mobile EAS releases (pingdotgg#5609)
5da45337fPreserve back navigation when opening settings (pingdotgg#5930)
f21d5e444Move project settings to contextual project routes (pingdotgg#5923)
9a1472d95fix(web): match usage titlebar text styling (pingdotgg#5897)
2abe66800fix(server): sandbox user-provided SVGs (pingdotgg#5916)
0d38866dcfix(server): usage no longer double-counts forked Codex sessions (pingdotgg#5887)
f993fa1c5fix(mobile): long-pressing a thread row no longer navigates into the thread (pingdotgg#5901)
83d769f02fix(web): match settings search shortcut styling to command palette's (pingdotgg#5841)
c8ad4b813fix(shell): add ~/.local/bin to the Windows CLI resolver (pingdotgg#5074)
bd18d8d6dfix(web): unify usage page chrome (pingdotgg#5823)
659986ce3fix(web): thread title button no longer eats the drag area (pingdotgg#5857)
062b4618cfix(shared): bound the file-link label so bracket runs stop rescanning (pingdotgg#5782)
deb901d63fix(server): favicon resolution no longer pins the event loop (pingdotgg#5538)

Resolutions

Seven conflicted files. What actually needed judgement:

WhereSituationResolution
ChatHeader.tsxpingdotgg#5929/pingdotgg#5930 replaced the header's title row with a WorkspaceBreadcrumb. The fork keeps two extra elements in that row — the provider-usage status dot with its AiUsageStats tooltip, and HostResourceStatusupstream's breadcrumb adopted; the fork's two elements re-attached after </WorkspaceBreadcrumb>, which is where they sat relative to the title before. The auto-merge would have left them orphaned inside a closing tag that no longer matched
projectGrouping.tsupstream rewrote deriveProjectGroupLabel; the auto-merge kept both upstream's new sharedDisplayNames block and the fork's older one — a duplicate declaration that the type-check passed but the bundler rejectedupstream's logic kept, the superseded fork copy removed. Caught by the web build, not by typecheck
UsagePage.tsxpingdotgg#5823 restructured the tables; the fork's only local delta here was the colSpan={PROVIDER_ORDER.length + 3} fix from #387upstream's file taken wholesale, the fork's one-line fix re-applied onto the new structure. This matters now that the fork has four usage providers (claude, codex, grok, kimi) rather than upstream's two
routeTree.gen.tspingdotgg#5923 moved settings.projects_.$projectKeyprojects.$projectKey, colliding with the fork's _chat.board / _chat.jump routesregenerated with the TanStack router plugin rather than hand-merged, so the tree matches the routes actually on disk. A hand union left four references to the deleted route
mobile-eas-production.ymlpingdotgg#5609 rewrote this to auto-release on push to main via Blacksmith runners. The fork had already rewritten the same workflow for manual dispatch, its own eas-continuous-deploy.sh, a fork/integration release branch and GitHub-hosted runnersfork's version kept whole. Adopting upstream's would point the fork's release path at a branch it does not use and runners it does not have
settingsSearch.test.tsthe fork's "work" assertion expected project-new-thread-workspace, which pingdotgg#5923 removed from the settings catalog when project settings moved to their own routesassertion narrowed to the fork's own worktree-remove-confirmation, with the reason recorded. Verified the entry moved rather than the fork's setting being dropped
Sidebar.tsxicon import collisionunioned

Adversarial review

Both reviewers were briefed on all seven resolutions and told to attack each one. Both found every
resolution sound
— and then found two things the resolutions themselves could not have surfaced,
because neither was in a conflicted file.

FindingDisposition
grok-4.5, HIGHpingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, triggers on every PR touching apps/mobile, packages/client-runtime, packages/contracts, packages/shared, assets or scripts, and the fork has no Blacksmith runnersFixed in 5f0e08c03. This was not hypothetical: its "Native fingerprint diff" check was already sitting queued on this very PR and would never have reported. Same fix as #386. There are now no Blacksmith references left in .github/workflows
gpt-5.6-sol, MEDIUMPROVIDER_ORDER was typed readonly UsageProviderKind[], which accepts an incomplete list. The Record maps beside it are exhaustive by type, so adding a provider forced label/colour/mark updates but not the order — and a provider missing from the order still shows in summary rows while vanishing from daily columns, chart bands, legends and skeletons. The tests iterate the order too, so they would preserve the omissionFixed in d577ef0e7, web and mobile. The order is now a const tuple with a type-level exhaustiveness assertion. Verified it actually fires: adding a fifth literal to the schema produces Type '"probe"' does not satisfy the constraint 'never' at the guard
grok-4.5, LOW — the Sidebar.tsx import union left EllipsisIcon dead; the project row's button is SettingsIcon after pingdotgg#5923Fixed in the same commit
grok-4.5, LOW — settings search can no longer deep-link to per-project "new thread workspace"Upstream's intent with contextual project routes, not a fork loss. The setting still renders in ProjectSettingsPanel
gpt-5.6-sol, note — the fallback dot branch in ChatHeader is unreachable, since headerDotClass derives from headerUsagePre-existing on the fork parent, untouched by this merge

On the resolutions themselves, independently confirmed by both: the fork's usage dot and
HostResourceStatus still render as siblings in the header row with rename/menu behaviour intact
inside upstream's breadcrumb; projectGrouping matches upstream's implementation exactly with no
fork labelling rule lost; UsagePage has no two-provider assumption left anywhere; the regenerated
route tree matches all 21 route modules on disk with the fork's _chat.board / _chat.jump intact
and no reference to the deleted route; and the mobile release workflow is internally coherent, with
its script, app.config.ts and T3CODE_MOBILE_* variables all present.

On pingdotgg#5887 specifically (usage double-counting forked Codex sessions), which lands into the usage
code the fork extended last week: gpt-5.6-sol confirmed it arrived intact — fork detection, copied-
history suppression, the reader admitting session_meta, and the scan-cache version bump that stops
old double-counted results surviving. No cross-provider weld: Codex, Grok and Kimi each allocate
independent scan state per file, so Codex fork suppression cannot suppress Grok's process-wide log
or Kimi's per-session records.

Verification

  • Recursive typecheck clean across all 18 packages.
  • vp build of the web app passes — worth calling out separately, because the duplicate declaration
    in projectGrouping.ts type-checked fine and only the bundler caught it.
  • 2,368 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev (this merge touches nothing under textGeneration/).
  • pnpm-lock.yaml regenerated rather than hand-merged.
  • Two fixes on top of the merge from the reviews: d577ef0e7 (provider-order guard) and
    5f0e08c03 (fingerprint-check runner + dead import).

Co-authored by @patroza

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

murenovichand others added 23 commits August 9, 2026 21:10
pingdotgg#5782)
Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…stalled providers are found (pingdotgg#5074)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…thread (pingdotgg#5901)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…5928)
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Adopts the 20 upstream commits that landed after 02f4ce5, headlined by
project settings moving onto contextual project routes (pingdotgg#5923), settings and
usage breadcrumbs (pingdotgg#5929, pingdotgg#5930), the unified usage page chrome (pingdotgg#5823), a fix
for usage double-counting forked Codex sessions (pingdotgg#5887), SVG sandboxing
(pingdotgg#5916), and favicon resolution no longer pinning the event loop (pingdotgg#5538).
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
PROVIDER_ORDER was typed `readonly UsageProviderKind[]`, which accepts an
incomplete list. The `Record` maps beside it are exhaustive by their own type,
so adding a provider forced updates to labels, colours and marks — but not to
the order. A provider missing from the order still appears in the summary rows,
which come from `merged.providers`, while silently vanishing from the daily
columns, chart bands, legends and skeletons, all of which iterate the order.
The tests iterate it too, so they would preserve the omission rather than catch
it.
The order is now a `const` tuple with a type-level assertion that nothing in
UsageProviderKind is missing from it, on web and mobile both. Verified it fires:
adding a fifth literal to the schema produces "Type '\"probe\"' does not satisfy
the constraint 'never'" at the guard, next to the Record errors.
Found by the gpt-5.6-sol adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
pingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict
and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, which this
fork does not have, and it triggers on every pull request touching apps/mobile,
packages/client-runtime, packages/contracts, packages/shared, assets or
scripts. Its "Native fingerprint diff" check was already sitting queued on this
very PR and would never have reported — a permanently pending check, and a
blocked merge wherever branch protection waits on all of them.
Same fix as #386 for web-preview.yml: GitHub-hosted runners, which is what
every other fork workflow uses. There are now no Blacksmith references left in
.github/workflows.
Also drops the EllipsisIcon import the Sidebar conflict union left behind; the
project row's button is SettingsIcon after pingdotgg#5923.
Found by the grok-4.5 adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBot merged commit f067b34 into fork/devAug 10, 2026
6 checks passed
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.

12 participants

@murenovich@tsouth89@nathangerday@arhxam@UtkarshUsername@juliusmarminge@t3dotgg@Chrono-byte@tris203@Lucenx9@carterwsmith@chrisdeeming
, '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

merge: sync upstream through 3d74474f6 (20 commits) - #388

Merged
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6
Aug 10, 2026
Merged

merge: sync upstream through 3d74474f6 (20 commits)#388
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 10, 2026

Copy link
Copy Markdown

Adopts upstream through 3d74474f6 — the 20 commits that landed after 02f4ce566.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
3d74474f6fix(web): update pills use readable theme foregrounds (pingdotgg#5938)
f0e297518fix(web): align project name with headline (pingdotgg#5864)
d43210050fix(web): trait menu closes after you pick a level (pingdotgg#5879)
ef051bdb8fix(web): enable restore defaults after theme mix changes (pingdotgg#5928)
0ca9fb3fbfix(web): show worktree icon in sidebar v2 (pingdotgg#5909)
cbd55d637fix(web): correct model picker trigger padding (pingdotgg#5935)
96906805fAdd settings and usage breadcrumbs (pingdotgg#5929)
73b2e8fddAutomate production mobile EAS releases (pingdotgg#5609)
5da45337fPreserve back navigation when opening settings (pingdotgg#5930)
f21d5e444Move project settings to contextual project routes (pingdotgg#5923)
9a1472d95fix(web): match usage titlebar text styling (pingdotgg#5897)
2abe66800fix(server): sandbox user-provided SVGs (pingdotgg#5916)
0d38866dcfix(server): usage no longer double-counts forked Codex sessions (pingdotgg#5887)
f993fa1c5fix(mobile): long-pressing a thread row no longer navigates into the thread (pingdotgg#5901)
83d769f02fix(web): match settings search shortcut styling to command palette's (pingdotgg#5841)
c8ad4b813fix(shell): add ~/.local/bin to the Windows CLI resolver (pingdotgg#5074)
bd18d8d6dfix(web): unify usage page chrome (pingdotgg#5823)
659986ce3fix(web): thread title button no longer eats the drag area (pingdotgg#5857)
062b4618cfix(shared): bound the file-link label so bracket runs stop rescanning (pingdotgg#5782)
deb901d63fix(server): favicon resolution no longer pins the event loop (pingdotgg#5538)

Resolutions

Seven conflicted files. What actually needed judgement:

WhereSituationResolution
ChatHeader.tsxpingdotgg#5929/pingdotgg#5930 replaced the header's title row with a WorkspaceBreadcrumb. The fork keeps two extra elements in that row — the provider-usage status dot with its AiUsageStats tooltip, and HostResourceStatusupstream's breadcrumb adopted; the fork's two elements re-attached after </WorkspaceBreadcrumb>, which is where they sat relative to the title before. The auto-merge would have left them orphaned inside a closing tag that no longer matched
projectGrouping.tsupstream rewrote deriveProjectGroupLabel; the auto-merge kept both upstream's new sharedDisplayNames block and the fork's older one — a duplicate declaration that the type-check passed but the bundler rejectedupstream's logic kept, the superseded fork copy removed. Caught by the web build, not by typecheck
UsagePage.tsxpingdotgg#5823 restructured the tables; the fork's only local delta here was the colSpan={PROVIDER_ORDER.length + 3} fix from #387upstream's file taken wholesale, the fork's one-line fix re-applied onto the new structure. This matters now that the fork has four usage providers (claude, codex, grok, kimi) rather than upstream's two
routeTree.gen.tspingdotgg#5923 moved settings.projects_.$projectKeyprojects.$projectKey, colliding with the fork's _chat.board / _chat.jump routesregenerated with the TanStack router plugin rather than hand-merged, so the tree matches the routes actually on disk. A hand union left four references to the deleted route
mobile-eas-production.ymlpingdotgg#5609 rewrote this to auto-release on push to main via Blacksmith runners. The fork had already rewritten the same workflow for manual dispatch, its own eas-continuous-deploy.sh, a fork/integration release branch and GitHub-hosted runnersfork's version kept whole. Adopting upstream's would point the fork's release path at a branch it does not use and runners it does not have
settingsSearch.test.tsthe fork's "work" assertion expected project-new-thread-workspace, which pingdotgg#5923 removed from the settings catalog when project settings moved to their own routesassertion narrowed to the fork's own worktree-remove-confirmation, with the reason recorded. Verified the entry moved rather than the fork's setting being dropped
Sidebar.tsxicon import collisionunioned

Adversarial review

Both reviewers were briefed on all seven resolutions and told to attack each one. Both found every
resolution sound
— and then found two things the resolutions themselves could not have surfaced,
because neither was in a conflicted file.

FindingDisposition
grok-4.5, HIGHpingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, triggers on every PR touching apps/mobile, packages/client-runtime, packages/contracts, packages/shared, assets or scripts, and the fork has no Blacksmith runnersFixed in 5f0e08c03. This was not hypothetical: its "Native fingerprint diff" check was already sitting queued on this very PR and would never have reported. Same fix as #386. There are now no Blacksmith references left in .github/workflows
gpt-5.6-sol, MEDIUMPROVIDER_ORDER was typed readonly UsageProviderKind[], which accepts an incomplete list. The Record maps beside it are exhaustive by type, so adding a provider forced label/colour/mark updates but not the order — and a provider missing from the order still shows in summary rows while vanishing from daily columns, chart bands, legends and skeletons. The tests iterate the order too, so they would preserve the omissionFixed in d577ef0e7, web and mobile. The order is now a const tuple with a type-level exhaustiveness assertion. Verified it actually fires: adding a fifth literal to the schema produces Type '"probe"' does not satisfy the constraint 'never' at the guard
grok-4.5, LOW — the Sidebar.tsx import union left EllipsisIcon dead; the project row's button is SettingsIcon after pingdotgg#5923Fixed in the same commit
grok-4.5, LOW — settings search can no longer deep-link to per-project "new thread workspace"Upstream's intent with contextual project routes, not a fork loss. The setting still renders in ProjectSettingsPanel
gpt-5.6-sol, note — the fallback dot branch in ChatHeader is unreachable, since headerDotClass derives from headerUsagePre-existing on the fork parent, untouched by this merge

On the resolutions themselves, independently confirmed by both: the fork's usage dot and
HostResourceStatus still render as siblings in the header row with rename/menu behaviour intact
inside upstream's breadcrumb; projectGrouping matches upstream's implementation exactly with no
fork labelling rule lost; UsagePage has no two-provider assumption left anywhere; the regenerated
route tree matches all 21 route modules on disk with the fork's _chat.board / _chat.jump intact
and no reference to the deleted route; and the mobile release workflow is internally coherent, with
its script, app.config.ts and T3CODE_MOBILE_* variables all present.

On pingdotgg#5887 specifically (usage double-counting forked Codex sessions), which lands into the usage
code the fork extended last week: gpt-5.6-sol confirmed it arrived intact — fork detection, copied-
history suppression, the reader admitting session_meta, and the scan-cache version bump that stops
old double-counted results surviving. No cross-provider weld: Codex, Grok and Kimi each allocate
independent scan state per file, so Codex fork suppression cannot suppress Grok's process-wide log
or Kimi's per-session records.

Verification

  • Recursive typecheck clean across all 18 packages.
  • vp build of the web app passes — worth calling out separately, because the duplicate declaration
    in projectGrouping.ts type-checked fine and only the bundler caught it.
  • 2,368 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev (this merge touches nothing under textGeneration/).
  • pnpm-lock.yaml regenerated rather than hand-merged.
  • Two fixes on top of the merge from the reviews: d577ef0e7 (provider-order guard) and
    5f0e08c03 (fingerprint-check runner + dead import).

Co-authored by @patroza

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

murenovichand others added 23 commits August 9, 2026 21:10
pingdotgg#5782)
Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…stalled providers are found (pingdotgg#5074)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…thread (pingdotgg#5901)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…5928)
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Adopts the 20 upstream commits that landed after 02f4ce5, headlined by
project settings moving onto contextual project routes (pingdotgg#5923), settings and
usage breadcrumbs (pingdotgg#5929, pingdotgg#5930), the unified usage page chrome (pingdotgg#5823), a fix
for usage double-counting forked Codex sessions (pingdotgg#5887), SVG sandboxing
(pingdotgg#5916), and favicon resolution no longer pinning the event loop (pingdotgg#5538).
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
PROVIDER_ORDER was typed `readonly UsageProviderKind[]`, which accepts an
incomplete list. The `Record` maps beside it are exhaustive by their own type,
so adding a provider forced updates to labels, colours and marks — but not to
the order. A provider missing from the order still appears in the summary rows,
which come from `merged.providers`, while silently vanishing from the daily
columns, chart bands, legends and skeletons, all of which iterate the order.
The tests iterate it too, so they would preserve the omission rather than catch
it.
The order is now a `const` tuple with a type-level assertion that nothing in
UsageProviderKind is missing from it, on web and mobile both. Verified it fires:
adding a fifth literal to the schema produces "Type '\"probe\"' does not satisfy
the constraint 'never'" at the guard, next to the Record errors.
Found by the gpt-5.6-sol adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
pingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict
and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, which this
fork does not have, and it triggers on every pull request touching apps/mobile,
packages/client-runtime, packages/contracts, packages/shared, assets or
scripts. Its "Native fingerprint diff" check was already sitting queued on this
very PR and would never have reported — a permanently pending check, and a
blocked merge wherever branch protection waits on all of them.
Same fix as #386 for web-preview.yml: GitHub-hosted runners, which is what
every other fork workflow uses. There are now no Blacksmith references left in
.github/workflows.
Also drops the EllipsisIcon import the Sidebar conflict union left behind; the
project row's button is SettingsIcon after pingdotgg#5923.
Found by the grok-4.5 adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBot merged commit f067b34 into fork/devAug 10, 2026
6 checks passed
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.

12 participants

@murenovich@tsouth89@nathangerday@arhxam@UtkarshUsername@juliusmarminge@t3dotgg@Chrono-byte@tris203@Lucenx9@carterwsmith@chrisdeeming
, '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

merge: sync upstream through 3d74474f6 (20 commits) - #388

Merged
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6
Aug 10, 2026
Merged

merge: sync upstream through 3d74474f6 (20 commits)#388
omegent-app[bot] merged 23 commits into
fork/devfrom
sync/upstream-3d74474f6

Conversation

@omegent-app

@omegent-appomegent-appBot commented Aug 10, 2026

Copy link
Copy Markdown

Adopts upstream through 3d74474f6 — the 20 commits that landed after 02f4ce566.

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
3d74474f6fix(web): update pills use readable theme foregrounds (pingdotgg#5938)
f0e297518fix(web): align project name with headline (pingdotgg#5864)
d43210050fix(web): trait menu closes after you pick a level (pingdotgg#5879)
ef051bdb8fix(web): enable restore defaults after theme mix changes (pingdotgg#5928)
0ca9fb3fbfix(web): show worktree icon in sidebar v2 (pingdotgg#5909)
cbd55d637fix(web): correct model picker trigger padding (pingdotgg#5935)
96906805fAdd settings and usage breadcrumbs (pingdotgg#5929)
73b2e8fddAutomate production mobile EAS releases (pingdotgg#5609)
5da45337fPreserve back navigation when opening settings (pingdotgg#5930)
f21d5e444Move project settings to contextual project routes (pingdotgg#5923)
9a1472d95fix(web): match usage titlebar text styling (pingdotgg#5897)
2abe66800fix(server): sandbox user-provided SVGs (pingdotgg#5916)
0d38866dcfix(server): usage no longer double-counts forked Codex sessions (pingdotgg#5887)
f993fa1c5fix(mobile): long-pressing a thread row no longer navigates into the thread (pingdotgg#5901)
83d769f02fix(web): match settings search shortcut styling to command palette's (pingdotgg#5841)
c8ad4b813fix(shell): add ~/.local/bin to the Windows CLI resolver (pingdotgg#5074)
bd18d8d6dfix(web): unify usage page chrome (pingdotgg#5823)
659986ce3fix(web): thread title button no longer eats the drag area (pingdotgg#5857)
062b4618cfix(shared): bound the file-link label so bracket runs stop rescanning (pingdotgg#5782)
deb901d63fix(server): favicon resolution no longer pins the event loop (pingdotgg#5538)

Resolutions

Seven conflicted files. What actually needed judgement:

WhereSituationResolution
ChatHeader.tsxpingdotgg#5929/pingdotgg#5930 replaced the header's title row with a WorkspaceBreadcrumb. The fork keeps two extra elements in that row — the provider-usage status dot with its AiUsageStats tooltip, and HostResourceStatusupstream's breadcrumb adopted; the fork's two elements re-attached after </WorkspaceBreadcrumb>, which is where they sat relative to the title before. The auto-merge would have left them orphaned inside a closing tag that no longer matched
projectGrouping.tsupstream rewrote deriveProjectGroupLabel; the auto-merge kept both upstream's new sharedDisplayNames block and the fork's older one — a duplicate declaration that the type-check passed but the bundler rejectedupstream's logic kept, the superseded fork copy removed. Caught by the web build, not by typecheck
UsagePage.tsxpingdotgg#5823 restructured the tables; the fork's only local delta here was the colSpan={PROVIDER_ORDER.length + 3} fix from #387upstream's file taken wholesale, the fork's one-line fix re-applied onto the new structure. This matters now that the fork has four usage providers (claude, codex, grok, kimi) rather than upstream's two
routeTree.gen.tspingdotgg#5923 moved settings.projects_.$projectKeyprojects.$projectKey, colliding with the fork's _chat.board / _chat.jump routesregenerated with the TanStack router plugin rather than hand-merged, so the tree matches the routes actually on disk. A hand union left four references to the deleted route
mobile-eas-production.ymlpingdotgg#5609 rewrote this to auto-release on push to main via Blacksmith runners. The fork had already rewritten the same workflow for manual dispatch, its own eas-continuous-deploy.sh, a fork/integration release branch and GitHub-hosted runnersfork's version kept whole. Adopting upstream's would point the fork's release path at a branch it does not use and runners it does not have
settingsSearch.test.tsthe fork's "work" assertion expected project-new-thread-workspace, which pingdotgg#5923 removed from the settings catalog when project settings moved to their own routesassertion narrowed to the fork's own worktree-remove-confirmation, with the reason recorded. Verified the entry moved rather than the fork's setting being dropped
Sidebar.tsxicon import collisionunioned

Adversarial review

Both reviewers were briefed on all seven resolutions and told to attack each one. Both found every
resolution sound
— and then found two things the resolutions themselves could not have surfaced,
because neither was in a conflicted file.

FindingDisposition
grok-4.5, HIGHpingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, triggers on every PR touching apps/mobile, packages/client-runtime, packages/contracts, packages/shared, assets or scripts, and the fork has no Blacksmith runnersFixed in 5f0e08c03. This was not hypothetical: its "Native fingerprint diff" check was already sitting queued on this very PR and would never have reported. Same fix as #386. There are now no Blacksmith references left in .github/workflows
gpt-5.6-sol, MEDIUMPROVIDER_ORDER was typed readonly UsageProviderKind[], which accepts an incomplete list. The Record maps beside it are exhaustive by type, so adding a provider forced label/colour/mark updates but not the order — and a provider missing from the order still shows in summary rows while vanishing from daily columns, chart bands, legends and skeletons. The tests iterate the order too, so they would preserve the omissionFixed in d577ef0e7, web and mobile. The order is now a const tuple with a type-level exhaustiveness assertion. Verified it actually fires: adding a fifth literal to the schema produces Type '"probe"' does not satisfy the constraint 'never' at the guard
grok-4.5, LOW — the Sidebar.tsx import union left EllipsisIcon dead; the project row's button is SettingsIcon after pingdotgg#5923Fixed in the same commit
grok-4.5, LOW — settings search can no longer deep-link to per-project "new thread workspace"Upstream's intent with contextual project routes, not a fork loss. The setting still renders in ProjectSettingsPanel
gpt-5.6-sol, note — the fallback dot branch in ChatHeader is unreachable, since headerDotClass derives from headerUsagePre-existing on the fork parent, untouched by this merge

On the resolutions themselves, independently confirmed by both: the fork's usage dot and
HostResourceStatus still render as siblings in the header row with rename/menu behaviour intact
inside upstream's breadcrumb; projectGrouping matches upstream's implementation exactly with no
fork labelling rule lost; UsagePage has no two-provider assumption left anywhere; the regenerated
route tree matches all 21 route modules on disk with the fork's _chat.board / _chat.jump intact
and no reference to the deleted route; and the mobile release workflow is internally coherent, with
its script, app.config.ts and T3CODE_MOBILE_* variables all present.

On pingdotgg#5887 specifically (usage double-counting forked Codex sessions), which lands into the usage
code the fork extended last week: gpt-5.6-sol confirmed it arrived intact — fork detection, copied-
history suppression, the reader admitting session_meta, and the scan-cache version bump that stops
old double-counted results surviving. No cross-provider weld: Codex, Grok and Kimi each allocate
independent scan state per file, so Codex fork suppression cannot suppress Grok's process-wide log
or Kimi's per-session records.

Verification

  • Recursive typecheck clean across all 18 packages.
  • vp build of the web app passes — worth calling out separately, because the duplicate declaration
    in projectGrouping.ts type-checked fine and only the bundler caught it.
  • 2,368 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev (this merge touches nothing under textGeneration/).
  • pnpm-lock.yaml regenerated rather than hand-merged.
  • Two fixes on top of the merge from the reviews: d577ef0e7 (provider-order guard) and
    5f0e08c03 (fingerprint-check runner + dead import).

Co-authored by @patroza

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

murenovichand others added 23 commits August 9, 2026 21:10
pingdotgg#5782)
Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…stalled providers are found (pingdotgg#5074)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…thread (pingdotgg#5901)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…5928)
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Adopts the 20 upstream commits that landed after 02f4ce5, headlined by
project settings moving onto contextual project routes (pingdotgg#5923), settings and
usage breadcrumbs (pingdotgg#5929, pingdotgg#5930), the unified usage page chrome (pingdotgg#5823), a fix
for usage double-counting forked Codex sessions (pingdotgg#5887), SVG sandboxing
(pingdotgg#5916), and favicon resolution no longer pinning the event loop (pingdotgg#5538).
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
PROVIDER_ORDER was typed `readonly UsageProviderKind[]`, which accepts an
incomplete list. The `Record` maps beside it are exhaustive by their own type,
so adding a provider forced updates to labels, colours and marks — but not to
the order. A provider missing from the order still appears in the summary rows,
which come from `merged.providers`, while silently vanishing from the daily
columns, chart bands, legends and skeletons, all of which iterate the order.
The tests iterate it too, so they would preserve the omission rather than catch
it.
The order is now a `const` tuple with a type-level assertion that nothing in
UsageProviderKind is missing from it, on web and mobile both. Verified it fires:
adding a fifth literal to the schema produces "Type '\"probe\"' does not satisfy
the constraint 'never'" at the guard, next to the Record errors.
Found by the gpt-5.6-sol adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
pingdotgg#5609 also added mobile-fingerprint-check.yml, which landed without a conflict
and so was never inspected. It runs on blacksmith-8vcpu-ubuntu-2404, which this
fork does not have, and it triggers on every pull request touching apps/mobile,
packages/client-runtime, packages/contracts, packages/shared, assets or
scripts. Its "Native fingerprint diff" check was already sitting queued on this
very PR and would never have reported — a permanently pending check, and a
blocked merge wherever branch protection waits on all of them.
Same fix as #386 for web-preview.yml: GitHub-hosted runners, which is what
every other fork workflow uses. There are now no Blacksmith references left in
.github/workflows.
Also drops the EllipsisIcon import the Sidebar conflict union left behind; the
project row's button is SettingsIcon after pingdotgg#5923.
Found by the grok-4.5 adversarial review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-appBot merged commit f067b34 into fork/devAug 10, 2026
6 checks passed
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.

12 participants

@murenovich@tsouth89@nathangerday@arhxam@UtkarshUsername@juliusmarminge@t3dotgg@Chrono-byte@tris203@Lucenx9@carterwsmith@chrisdeeming