Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
3a0a14d
docs(fork): add fork guide and change list
Alb11747 Oct 9, 2026
8f65048
ci(fork): sync with upstream and publish fork releases
Alb11747 Oct 9, 2026
61f86a5
feat(web): schedule tasks without a project
sjasct Oct 8, 2026
6c62165
fix(server): launch projectless scheduled tasks in scratch folders
Alb11747 Oct 9, 2026
367053b
fix(mcp): return delegated task handles before client timeouts
maria-rcks Oct 9, 2026
1d9283a
fix(server): skip unsupported native Codex usage reads
Alb11747 Oct 8, 2026
93bbdfe
fix(server): tell agents to link outside files by absolute path
Alb11747 Oct 9, 2026
83b318e
feat(web): download files from chat file links
Alb11747 Oct 10, 2026
c4cca71
fix(server): detect Windows npm provider binaries for updates
Alb11747 Oct 10, 2026
f1ba9fa
fix(fork): show release deltas and link fork notes
Alb11747 Oct 10, 2026
397f638
feat(server): skip cache writes on cold Claude compaction
Alb11747 Oct 11, 2026
a96fa0c
fix(server): retain Claude reset times across usage-limit retries
Alb11747 Oct 12, 2026
919e057
feat(server): retry Codex turns that fail on model capacity
Alb11747 Oct 12, 2026
862a783
feat(claude): suggest the next prompt as composer ghost text
danielyc Oct 13, 2026
8466211
feat(codex): predict the next prompt as composer ghost text
Alb11747 Oct 13, 2026
c97f913
test(web): include fork prompt suggestion settings in provider fields
Alb11747 Oct 13, 2026
fa279d5
fix(server): one silent provider no longer stalls every thread
voltcrash Oct 13, 2026
ff1c443
fix(server): wait for effect settlement when draining workers
Alb11747 Oct 13, 2026
bdcb5b5
fix(server): preserve ownership of delayed Codex starts
Alb11747 Oct 13, 2026
423e6bf
fix(server): switching providers no longer revokes the other provider…
Alb11747 Oct 14, 2026
a09b761
fix(server): a handoff too large for the context window no longer wed…
Alb11747 Oct 14, 2026
cef6fb6
fix(server): Git status refresh no longer scans the working tree twic…
Alb11747 Oct 14, 2026
3c866c9
feat(client): fork conversations from completed compaction turns
Alb11747 Oct 14, 2026
1ce67d2
fix(server): persist run failures after storage recovers
Alb11747 Oct 14, 2026
7db534b
feat(fork): version releases after their upstream nightly
Alb11747 Oct 15, 2026
48421fa
fix(server): keep prompt suggestions with their current run
Alb11747 Oct 15, 2026
bf06221
fix(desktop): updates keep the app's administrator level on Windows
Alb11747 Oct 15, 2026
4774336
feat(claude): allow proxy-held requests up to an hour
Alb11747 Oct 16, 2026
176a3eb
fix(claude): a wake handled by a queued message no longer stalls the …
Alb11747 Oct 15, 2026
fff81a2
fix(server): preserve delegated question delivery across task lifecycle
Alb11747 Oct 16, 2026
2012e1f
test(server): use the host platform for launcher PATH lookup
Alb11747 Oct 16, 2026
72ca19f
docs(fork): resolver checks formatting before publishing
Alb11747 Oct 17, 2026
4f6c938
feat(server): support time zones for fixed-time scheduled tasks
Alb11747 Oct 18, 2026
82e8d48
feat(fork): resolver promotes clean candidates itself
Alb11747 Oct 18, 2026
b1dded4
ci(fork): install Chromium for web browser tests
Alb11747 Oct 18, 2026
6d6a011
fix(server): agent messages no longer cancel Claude tools
Alb11747 Oct 18, 2026
0e4db75
feat(fork): resolvers fix failed checks and review findings
Alb11747 Oct 19, 2026
e852100
test(web): give the workflow script highlight time to load its grammar
Alb11747 Oct 19, 2026
2d7eef0
fix(server): Claude takes agent updates at tool boundaries
Alb11747 Oct 20, 2026
4912b64
fix(web): show the result of the notified delegated task
Alb11747 Oct 20, 2026
2fe60d0
ci(fork): merge upstream into main instead of rebasing
Alb11747 Oct 20, 2026
0a31b46
docs(fork): drop change-list entries for patches upstream now carries
Alb11747 Oct 20, 2026
df42159
ci(fork): skip repeated checks and scheduled sync polls
Alb11747 Oct 20, 2026
c8f14f3
docs(fork): remove patches upstream landed through another PR
Alb11747 Oct 20, 2026
be6f96f
feat(fork): publish budget-blocked releases from Labs
Alb11747 Oct 20, 2026
2306244
docs(fork): run Labs checks on Lazarus first, Blacksmith second
Alb11747 Oct 20, 2026
42c1939
Revert "fix(server): persist run failures after storage recovers"
Alb11747 Oct 20, 2026
cb94b2c
chore(fork): merge upstream d36b7da2485b
Alb11747 Oct 20, 2026
31a2372
fix(fork): adapt retained patches to upstream provider APIs
Alb11747 Oct 20, 2026
d103232
fix(fork): trace retained Effect functions after upstream sync
Alb11747 Oct 20, 2026
868d0ce
fix(claude): refresh retained quota windows from assistant errors
Alb11747 Oct 20, 2026
b41aa9d
fix(mcp): preserve pending pages while another provider is attached
Alb11747 Oct 20, 2026
77677e2
ci(fork): build the Labs fallback Windows installer on GitHub-hosted …
Alb11747 Oct 20, 2026
c94f824
docs(fork): name the fork origin and upstream upstream
Alb11747 Oct 20, 2026
f38c5a9
revert(web): drop workflow highlight timeout superseded by #21699
Alb11747 Oct 20, 2026
427e9b8
test(web): banner stack test starts with the pointer outside the stack
Alb11747 Oct 20, 2026
3dffb8a
test(ssh): zombie-reap launch test no longer races the shell
tris203 Oct 20, 2026
e8a891d
fix(opencode): OpenCodeServerLedger linux tests no longer race a wrap…
juliusmarminge Oct 20, 2026
8e93338
test(server): await Claude background requests before advancing the c…
Alb11747 Oct 20, 2026
b16e6cc
test(web): preserve manual navigation when reopening timelines
Alb11747 Oct 20, 2026
77b1596
docs(fork): Labs server shards run on GitHub-hosted runners beside La…
Alb11747 Oct 20, 2026
e119d18
test(web): park the pointer before RightPanelTabs keyboard tests
only21mil Oct 20, 2026
4039922
fix(server): judge cold Claude compaction by the reported cache TTL
Alb11747 Oct 20, 2026
7a557e5
ci(fork): check the release job budget in the settle job
Alb11747 Oct 21, 2026
bef34b2
chore(fork): merge upstream 680152e27b2a
Alb11747 Oct 22, 2026
d44eba6
fix(fork): retain the test clock import after upstream test pruning
Alb11747 Oct 22, 2026
3cfd2be
ci(fork): cross-build fork Windows releases on Linux like upstream
Alb11747 Oct 22, 2026
49fcbe8
docs(fork): resolver messages the maintainer and settles its thread
Alb11747 Oct 22, 2026
7fecdf3
docs(fork): fixes no longer wait for main to catch up with upstream
Alb11747 Oct 22, 2026
03e1564
feat(desktop): close to tray on Windows
Alb11747 Oct 22, 2026
ffa8453
fix(chat): requeued steers no longer look delivered
Alb11747 Oct 22, 2026
5fd9e2b
fix(server): keep agent queue promotions at tool boundaries
Alb11747 Oct 22, 2026
cc194c5
docs(fork): allow conflict maintenance on taken-over PRs
Alb11747 Oct 22, 2026
8a4a93e
docs(fork): time-based limits for maintaining taken-over PRs
Alb11747 Oct 22, 2026
ba2f91d
chore(fork): merge upstream 044f07257c96
Alb11747 Oct 22, 2026
781a02d
fix(fork): adapt retries and settings to upstream changes
Alb11747 Oct 23, 2026
dec686d
docs(fork): upstream whitespace no longer blocks resolver settlement
Alb11747 Oct 23, 2026
08aa9ce
revert: replace standalone queued-steer patch with upstream carry
Alb11747 Oct 22, 2026
3ce35da
fix(chat): requeued steers no longer look delivered
Alb11747 Oct 22, 2026
0f59d6a
fix(fork): register the disk-loaded Codex probe fixture
Alb11747 Oct 22, 2026
e651005
test(server): preserve delivered queued inputs in fork history
Alb11747 Oct 23, 2026
4202c26
fix(server): keep cancelled queued inputs hidden after source rollback
Alb11747 Oct 23, 2026
d8b2f0b
fix(ci): native CLI release jobs use the repository Node version
Alb11747 Oct 23, 2026
55ecf9a
chore(fork): merge upstream e340aaeeb98b
Alb11747 Oct 24, 2026
d839e1b
fix(opencode): reap legacy server ledger entries
Alb11747 Oct 24, 2026
4327ddd
test(web): avoid racing banner hover with its click
Alb11747 Oct 24, 2026
b89b454
fix(web,mobile): new replies show overwritten local images
Alb11747 Oct 24, 2026
5c77904
docs(fork): run package tests from the package directory
Alb11747 Oct 24, 2026
2a844e6
chore(fork): merge upstream 3cc31ed27c89
Alb11747 Oct 25, 2026
b4b80f7
chore(fork): merge upstream f40c7c6435e3
Alb11747 Oct 26, 2026
ea75da9
fix(fork): adapt retained patches to upstream APIs and cache formats
Alb11747 Oct 26, 2026
cdbc2d6
fix(fork): adapt comments to upstream low-value comment lint
Alb11747 Oct 26, 2026
0b62a5c
test(mobile): adapt playback mocks to upstream thread feed coverage
Alb11747 Oct 26, 2026
641b309
test(web): adapt chat downloads to upstream attachment disposition
Alb11747 Oct 26, 2026
6ab0642
test(web): adapt banner hover to upstream synchronous expansion
Alb11747 Oct 26, 2026
ccd74b3
fix(ci): isolate upstream document previews on standard runners
Alb11747 Oct 26, 2026
d94a89e
fix(codex): only predict prompts after direct user messages
Alb11747 Oct 26, 2026
44cc50f
fix(codex): persist recovery from temporary provider failures
Alb11747 Oct 26, 2026
00cd9f1
docs(fork): resolver returns its checkout to main after a finished run
Alb11747 Oct 26, 2026
5056574
feat(fork): sync to upstream's newest nightly before pushing a change
Alb11747 Oct 26, 2026
c3b77fd
chore(fork): merge upstream 1316d48b0c68
Alb11747 Oct 26, 2026
121e942
fix(fork): trace continuation methods for upstream Effect checks
Alb11747 Oct 26, 2026
fd3312d
fix(fork): adapt server patches to upstream Effect diagnostics
Alb11747 Oct 26, 2026
ff7fc69
fix(fork): reuse Codex request error schema predicate
Alb11747 Oct 26, 2026
18b2d0b
fix(fork): trace desktop update test file reads
Alb11747 Oct 26, 2026
fa1f741
fix(codex): spread capacity retries so threads don't retry in lockstep
Alb11747 Oct 26, 2026
54aeb9b
fix(claude): recover automatically from exhausted API retries
Alb11747 Oct 26, 2026
0471df9
chore(fork): merge upstream 3f9448747bb8
Alb11747 Oct 26, 2026
464e6eb
test(web): adapt timeline restoration to viewport navigation
Alb11747 Oct 26, 2026
391c9c5
fix(desktop): download chat files through explicit IPC
Alb11747 Oct 26, 2026
40a4615
fix(server): retain notification metadata when steering questions
Alb11747 Oct 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .github/workflows/fork-budget.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Fork job budget

# Fails a run before it spends runners once the fork has run too many jobs in
# the last 24 hours (fork/scripts/job-budget.sh). Fork release runs the same
# script inside its settle job instead, so a blocked release costs one job.
# Raise or lower the limit with the FORK_JOB_BUDGET repository variable.

on:
workflow_call:

permissions:
actions: read
# Reads fork/scripts/job-budget.sh.
contents: read

jobs:
budget:
name: Check job budget
runs-on: ubuntu-24.04
timeout-minutes: 5
env:
GH_TOKEN: ${{ github.token }}
LIMIT: ${{ vars.FORK_JOB_BUDGET || 150 }}
steps:
# Fetches only the script instead of checking out the repository.
- run: |
set -euo pipefail
gh api -H "Accept: application/vnd.github.raw" \
"repos/$GITHUB_REPOSITORY/contents/fork/scripts/job-budget.sh?ref=$GITHUB_SHA" > "$RUNNER_TEMP/job-budget.sh"
bash "$RUNNER_TEMP/job-budget.sh"
182 changes: 182 additions & 0 deletions .github/workflows/fork-checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
name: Fork checks

# The release gate from upstream's release.yml (quality, tests, sharded server
# tests) on GitHub-hosted runners, which this fork has instead of Blacksmith.
# Called by fork-sync.yml before promoting a sync, by fork-pr-checks.yml, and
# by fork-release.yml before publishing.
#
# When every check passes on a ref given as a full commit SHA, the record job
# sets a `fork-checks` commit status on that commit, naming the commit this
# workflow file came from. Fork
# release skips its checks when that status is on the commit it releases and
# this file is unchanged there (a promoted sync candidate, or a branch checked
# with Fork PR checks and pushed to main unchanged). Only the record job can
# write statuses: the check jobs run the checked ref's code, which could
# otherwise forge a pass. Callers grant statuses: write.

on:
workflow_call:
inputs:
repository:
default: ${{ github.repository }}
type: string
ref:
required: true
type: string

permissions:
contents: read

jobs:
quality:
name: Quality
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v6
with:
repository: ${{ inputs.repository }}
ref: ${{ inputs.ref }}
sparse-checkout: |
/*
!/.repos/
sparse-checkout-cone-mode: false

- uses: voidzero-dev/setup-vp@v1
with:
node-version-file: package.json
cache: true
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron

- name: Check
run: vp check

- name: Typecheck
run: vp run typecheck

test:
name: Tests
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v6
with:
repository: ${{ inputs.repository }}
ref: ${{ inputs.ref }}
sparse-checkout: |
/*
!/.repos/
sparse-checkout-cone-mode: false

- uses: voidzero-dev/setup-vp@v1
with:
node-version-file: package.json
cache: true
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron

- name: Install browser secret helper build libraries
run: sudo apt-get update && sudo apt-get install -y libsecret-1-dev pkg-config build-essential

- name: Test
run: vp run --parallel --concurrency-limit 4 --filter '!t3' --filter '!@t3tools/monorepo' --filter '!@t3tools/web' test

- name: Test fork scripts
if: hashFiles('fork/scripts/*.test.cjs') != ''
run: node --test 'fork/scripts/*.test.cjs'

# The web suite gets its own job, as in upstream's ci.yml: sharing a 4-vCPU
# runner with the other packages starved its 30 s import hooks into timeouts.
test_web:
name: Web tests
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v6
with:
repository: ${{ inputs.repository }}
ref: ${{ inputs.ref }}
sparse-checkout: |
/*
!/.repos/
sparse-checkout-cone-mode: false

- uses: voidzero-dev/setup-vp@v1
with:
node-version-file: package.json
cache: true
run-install: true

# Upstream runs React tests in headless Chromium. Older upstream bases
# have no web Playwright dependency and no browser tests.
- name: Install Chromium for web browser tests
run: |
if [[ -f apps/web/node_modules/playwright/cli.js ]]; then
node apps/web/node_modules/playwright/cli.js install --with-deps --only-shell chromium
fi

# Document layout needs the runner without competing browser or unit files.
- name: Test attachment previews
run: vp run --filter @t3tools/web test src/components/files/AttachmentFilePreview.browser.test.tsx --no-file-parallelism

- name: Test
if: ${{ !cancelled() }}
run: vp run --filter @t3tools/web test --exclude '**/AttachmentFilePreview.browser.test.tsx'

test_server:
name: Server tests ${{ matrix.shard }}
runs-on: ubuntu-24.04
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3]
steps:
- uses: actions/checkout@v6
with:
repository: ${{ inputs.repository }}
ref: ${{ inputs.ref }}
sparse-checkout: |
/*
!/.repos/
sparse-checkout-cone-mode: false

- uses: voidzero-dev/setup-vp@v1
with:
node-version-file: package.json
cache: true
run-install: true

- name: Install Chromium for server browser integration tests
run: node apps/server/node_modules/playwright-core/cli.js install --with-deps --only-shell chromium

- name: Test
run: vp run --filter t3 test --shard ${{ matrix.shard }}/${{ strategy.job-total }}

record:
name: Record pass
needs: [quality, test, test_web, test_server]
runs-on: ubuntu-24.04
timeout-minutes: 5
permissions:
statuses: write
env:
GH_TOKEN: ${{ github.token }}
REF: ${{ inputs.ref }}
steps:
# Only a full commit SHA proves every job checked the same commit; a
# branch can move between their checkouts. A local reusable workflow
# comes from the caller's commit, GITHUB_SHA.
- run: |
if [[ ! $REF =~ ^[0-9a-f]{40}$ ]]; then
echo "Checked ref $REF is not a full commit SHA; not recording a reusable pass."
exit 0
fi
gh api "repos/$GITHUB_REPOSITORY/statuses/$REF" -f state=success -f context=fork-checks \
-f "description=checks@$GITHUB_SHA" \
-f "target_url=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" > /dev/null
42 changes: 42 additions & 0 deletions .github/workflows/fork-pr-checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Fork PR checks

# Runs upstream's release gate (fork-checks.yml) on a branch prepared for an
# upstream pull request. Upstream holds CI on PRs from unvouched contributors
# at "action required" until a maintainer approves the run, so this is the
# fork's own evidence that the branch passes.
#
# Upstream PR branches start from upstream main and don't contain this file,
# so pushes to them can't trigger it. Start it from main instead:
# gh workflow run fork-pr-checks.yml -R Alb11747/t3code -f ref=<branch-or-sha>

on:
workflow_dispatch:
inputs:
ref:
description: Branch or commit to check
required: true
type: string

concurrency:
group: fork-pr-checks-${{ inputs.ref }}
cancel-in-progress: true

permissions:
# The job budget reads the repository's recent runs.
actions: read
contents: read

jobs:
budget:
name: Job budget
uses: ./.github/workflows/fork-budget.yml

checks:
name: Checks
needs: [budget]
permissions:
contents: read
statuses: write
uses: ./.github/workflows/fork-checks.yml
with:
ref: ${{ inputs.ref }}
Loading
Loading