Repository navigation
refactor(source-control): GitHub lives in @t3tools/source-control-github - #17607
Conversation
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — The PR moves GitHub source-control and pull-request production code into a new package while restructuring shared driver, host, and layer wiring. Its credential/authentication integration and cross-cutting runtime changes warrant human review despite the largely mechanical moves and updated tests. You can add or adjust custom eligibility rules. Learn more. |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: unavailable · PR result: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
The GitHub REST/GraphQL transport, credentials, quota reserve, repository provider, pull request API and provider, JSON decoding, conditional checks and stack actions move into their own package. Its driver joins BUILT_IN_SOURCE_CONTROL_DRIVERS, so every host is now a driver: both registries just iterate the list, whose order is discovery's order. - githubQuota is a service module and is renamed GitHubQuota. - SourceControlHost.git gains execute and resolveCommit, which GitHub's plain-git checkout needs. - TestSourceControlHostSettings lets package tests patch settings the way a client write does. - The built-in drivers' layer carries GitHubApi.layerWithDependencies, so the server builds one GitHub quota reserve and rate-limit pause. - The stack-rebase test runs real git through ServerSourceControlHost, so it stays in the server. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4fbba6d to
0038475
Compare
## What's Changed * chore(deps): upgrade Effect to 4.0.2 by @juliusmarminge in pingdotgg/t3code#17571 * fix(devices): recover stalled video without losing simulator input by @juliusmarminge in pingdotgg/t3code#17566 * fix(web): keep checkout stable while pr actions load by @maria-rcks in pingdotgg/t3code#16625 * fix(mobile): show waiting thread status by @maria-rcks in pingdotgg/t3code#16693 * feat(web): add parent thread breadcrumb navigation by @maria-rcks in pingdotgg/t3code#16666 * fix(server): restart inactivity after snoozed threads wake by @maria-rcks in pingdotgg/t3code#16674 * feat(desktop): passkeys in the in-app browser on macOS by @juliusmarminge in pingdotgg/t3code#16952 * fix(client): load earlier turns works for MCP threads over T3 Connect by @juliusmarminge in pingdotgg/t3code#17599 * refactor(client): sign relay request URLs built from the HttpApi contract by @juliusmarminge in pingdotgg/t3code#17602 * refactor(source-control): add @t3tools/source-control-core by @juliusmarminge in pingdotgg/t3code#17573 * refactor(source-control): Forgejo lives in @t3tools/source-control-forgejo by @juliusmarminge in pingdotgg/t3code#17581 * refactor(source-control): Azure DevOps lives in @t3tools/source-control-azure-devops by @juliusmarminge in pingdotgg/t3code#17592 * refactor(source-control): GitLab lives in @t3tools/source-control-gitlab by @juliusmarminge in pingdotgg/t3code#17594 * refactor(source-control): Bitbucket lives in @t3tools/source-control-bitbucket by @juliusmarminge in pingdotgg/t3code#17597 * refactor(source-control): GitHub lives in @t3tools/source-control-github by @juliusmarminge in pingdotgg/t3code#17607 * refactor(usage): transcript readers come from their drivers by @juliusmarminge in pingdotgg/t3code#17576 * refactor(usage): OpenCode usage comes from provider-opencode by @juliusmarminge in pingdotgg/t3code#17577 * refactor(usage): Cursor account usage comes from provider-cursor by @juliusmarminge in pingdotgg/t3code#17578 * refactor(usage): Antigravity usage is a reader on its driver by @juliusmarminge in pingdotgg/t3code#17579 * refactor(usage): usage readers use Effect FileSystem and SqlClient by @juliusmarminge in pingdotgg/t3code#17615 * fix(web): composer context strip pads both edges evenly by @limineol in pingdotgg/t3code#17562 * test(usage): v4 cache upgrade test waits for the migrated cache write by @Mnigos in pingdotgg/t3code#17553 * feat(mobile): support Duo in the shared iOS app by @juliusmarminge in pingdotgg/t3code#12648 * refactor(source-control): GitManager reads provider resolvers, not host kinds by @juliusmarminge in pingdotgg/t3code#17617 * refactor(source-control): PullRequestService reads GitHub resolvers, not its kind by @juliusmarminge in pingdotgg/t3code#17619 * refactor(source-control): Forgejo identity and Azure DevOps addressing move into their packages by @juliusmarminge in pingdotgg/t3code#17624 * refactor: home directory comes from a HostProcessHomeDirectory reference by @juliusmarminge in pingdotgg/t3code#17628 * refactor(shared): host process references live in a HostProcess module by @juliusmarminge in pingdotgg/t3code#17641 * feat(web): filter PR comments by bots and resolved threads by @juliusmarminge in pingdotgg/t3code#17645 * fix(clients): remove redundant prefix from PR watch status by @extoci in pingdotgg/t3code#17635 * fix(web): pending requests wait until you stop typing by @maria-rcks in pingdotgg/t3code#17637 * fix(models): remove new badges from Claude Opus and Sonnet 5.5 by @extoci in pingdotgg/t3code#17646 * fix(ui): keep focus and selection borders visible across the app by @maria-rcks in pingdotgg/t3code#16675 * fix(mobile): prevent row presses during native back swipes by @juliusmarminge in pingdotgg/t3code#17648 * fix(server): Codex shadow homes replace stray sqlite maintenance locks by @juliusmarminge in pingdotgg/t3code#17663 * feat(desktop): T3 Code can be your default web browser on macOS by @juliusmarminge in pingdotgg/t3code#17587 * test(server): the ACP process-tree test no longer collides with the runner's own pid by @yordis in pingdotgg/t3code#17647 * fix(web): keep branch restore action inline in narrow composers by @Saikrishna1876 in pingdotgg/t3code#14811 * fix(web): composer banner actions stay inline whenever they fit by @maria-rcks in pingdotgg/t3code#17640 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261009.2886...v0.0.46-nightly.20261010.2908 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261010.2908
## What's Changed * chore(deps): upgrade Effect to 4.0.2 by @juliusmarminge in pingdotgg/t3code#17571 * fix(devices): recover stalled video without losing simulator input by @juliusmarminge in pingdotgg/t3code#17566 * fix(web): keep checkout stable while pr actions load by @maria-rcks in pingdotgg/t3code#16625 * fix(mobile): show waiting thread status by @maria-rcks in pingdotgg/t3code#16693 * feat(web): add parent thread breadcrumb navigation by @maria-rcks in pingdotgg/t3code#16666 * fix(server): restart inactivity after snoozed threads wake by @maria-rcks in pingdotgg/t3code#16674 * feat(desktop): passkeys in the in-app browser on macOS by @juliusmarminge in pingdotgg/t3code#16952 * fix(client): load earlier turns works for MCP threads over T3 Connect by @juliusmarminge in pingdotgg/t3code#17599 * refactor(client): sign relay request URLs built from the HttpApi contract by @juliusmarminge in pingdotgg/t3code#17602 * refactor(source-control): add @t3tools/source-control-core by @juliusmarminge in pingdotgg/t3code#17573 * refactor(source-control): Forgejo lives in @t3tools/source-control-forgejo by @juliusmarminge in pingdotgg/t3code#17581 * refactor(source-control): Azure DevOps lives in @t3tools/source-control-azure-devops by @juliusmarminge in pingdotgg/t3code#17592 * refactor(source-control): GitLab lives in @t3tools/source-control-gitlab by @juliusmarminge in pingdotgg/t3code#17594 * refactor(source-control): Bitbucket lives in @t3tools/source-control-bitbucket by @juliusmarminge in pingdotgg/t3code#17597 * refactor(source-control): GitHub lives in @t3tools/source-control-github by @juliusmarminge in pingdotgg/t3code#17607 * refactor(usage): transcript readers come from their drivers by @juliusmarminge in pingdotgg/t3code#17576 * refactor(usage): OpenCode usage comes from provider-opencode by @juliusmarminge in pingdotgg/t3code#17577 * refactor(usage): Cursor account usage comes from provider-cursor by @juliusmarminge in pingdotgg/t3code#17578 * refactor(usage): Antigravity usage is a reader on its driver by @juliusmarminge in pingdotgg/t3code#17579 * refactor(usage): usage readers use Effect FileSystem and SqlClient by @juliusmarminge in pingdotgg/t3code#17615 * fix(web): composer context strip pads both edges evenly by @limineol in pingdotgg/t3code#17562 * test(usage): v4 cache upgrade test waits for the migrated cache write by @Mnigos in pingdotgg/t3code#17553 * feat(mobile): support Duo in the shared iOS app by @juliusmarminge in pingdotgg/t3code#12648 * refactor(source-control): GitManager reads provider resolvers, not host kinds by @juliusmarminge in pingdotgg/t3code#17617 * refactor(source-control): PullRequestService reads GitHub resolvers, not its kind by @juliusmarminge in pingdotgg/t3code#17619 * refactor(source-control): Forgejo identity and Azure DevOps addressing move into their packages by @juliusmarminge in pingdotgg/t3code#17624 * refactor: home directory comes from a HostProcessHomeDirectory reference by @juliusmarminge in pingdotgg/t3code#17628 * refactor(shared): host process references live in a HostProcess module by @juliusmarminge in pingdotgg/t3code#17641 * feat(web): filter PR comments by bots and resolved threads by @juliusmarminge in pingdotgg/t3code#17645 * fix(clients): remove redundant prefix from PR watch status by @extoci in pingdotgg/t3code#17635 * fix(web): pending requests wait until you stop typing by @maria-rcks in pingdotgg/t3code#17637 * fix(models): remove new badges from Claude Opus and Sonnet 5.5 by @extoci in pingdotgg/t3code#17646 * fix(ui): keep focus and selection borders visible across the app by @maria-rcks in pingdotgg/t3code#16675 * fix(mobile): prevent row presses during native back swipes by @juliusmarminge in pingdotgg/t3code#17648 * fix(server): Codex shadow homes replace stray sqlite maintenance locks by @juliusmarminge in pingdotgg/t3code#17663 * feat(desktop): T3 Code can be your default web browser on macOS by @juliusmarminge in pingdotgg/t3code#17587 * test(server): the ACP process-tree test no longer collides with the runner's own pid by @yordis in pingdotgg/t3code#17647 * fix(web): keep branch restore action inline in narrow composers by @Saikrishna1876 in pingdotgg/t3code#14811 * fix(web): composer banner actions stay inline whenever they fit by @maria-rcks in pingdotgg/t3code#17640 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261009.2886...v0.0.46-nightly.20261010.2908 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261010.2908
Sixth layer of moving each source control host into its own package; stacks on #17597. GitHub is the last host left in
apps/server, so after this every host is a driver.GitHub support moves into
@t3tools/source-control-github, one subpath per module, and reaches the server only throughSourceControlHost:GitHubApi), credentials, and quota reserveRegistries. Its
driverjoinsBUILT_IN_SOURCE_CONTROL_DRIVERS. BothSourceControlProviderRegistry.makeandPullRequestProviderRegistry.makenow just iterate that list, and its order is discovery's order, so the temporary sort from #17592 is gone.One shared GitHub quota. The built-in drivers' layer now carries
GitHubApi.layerWithDependencies, so the server builds one GitHub quota reserve and rate-limit pause shared by the registry, the pull request service, and the asset route.Smaller changes:
githubQuotais a service module, so it is renamedGitHubQuota.SourceControlHost.gitgainsexecuteandresolveCommit, which GitHub's plain-git checkout needs.TestSourceControlHostSettingslets package tests patch settings the way a client's settings write does. The credentials test uses it to change the pinned account mid-test.Tests. Tests move with their code, with only imports and wiring changed. Two stay in the server:
ServerSourceControlHostmeasure-pr-preview, which now builds the real host against a scratchServerConfigVerified with:
tscacross apps/server and all seven packages🤖 Generated with Claude Code — Claude Opus 5.5 in T3 Code