Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
67c0fc0
fix(web): pinned threads' pin icon stays put on hover (#22303)
t3dotgg Oct 20, 2026
72ebd98
fix(web): show pointer cursors on changed-file controls (#22266)
UtkarshUsername Oct 20, 2026
b5a0696
fix(web): use the shared markdown scrollbar width (#22200)
UtkarshUsername Oct 20, 2026
573d376
revert: limit bars with many accounts no longer clip names to one let…
juliusmarminge Oct 20, 2026
8ecb607
fix(mobile): pin expo-modules-core so the release smoke patch stays i…
Project516 Oct 20, 2026
2b28b46
fix(server): updates no longer keep every old runtime on disk (#22253)
juliusmarminge Oct 20, 2026
cdaaa74
fix(mobile): chat chips match desktop and the composer again (#22169)
flamboh Oct 20, 2026
2229efc
fix(web): normalize disabled terminal button opacity (#22389)
UtkarshUsername Oct 20, 2026
d652490
fix(contracts): settings save again when the writing style has defaul…
MatiasGadeberg Oct 20, 2026
758d773
fix(relay): run the relay Worker next to its database (#22065)
juliusmarminge Oct 20, 2026
81dea78
test(web): disposable render helper and lint rule for browser tests (…
juliusmarminge Oct 20, 2026
be5a5cd
fix(mobile): use native sheet headers and toolbar filters (#22390)
juliusmarminge Oct 20, 2026
2893437
test(ssh): unreaped-server test no longer loses its zombie fixture (#…
juliusmarminge Oct 20, 2026
6ab39ff
test(web): require-disposable-render is now an error (#22410)
juliusmarminge Oct 20, 2026
f7f9e21
test(web): migrate the last .ts browser tests and stop wrapping userE…
juliusmarminge Oct 20, 2026
5d4c202
fix(web,mobile): Limits bars show the even-pace mark as a tick in a g…
juliusmarminge Oct 20, 2026
7e289ae
test(web): pooled Limits segments narrower than 6px draw no pace mark…
juliusmarminge Oct 20, 2026
dac3437
fix(mobile): the composer stays one row until the draft wraps (#20812)
juliusmarminge Oct 20, 2026
860e6d2
fix(web): restore left-aligned markdown table cells (#22482)
t3-code[bot] Oct 20, 2026
0c85b0d
feat(scheduled-tasks): event filters for webhook deliveries (#22194)
juliusmarminge Oct 20, 2026
ec58572
fix(mobile): prevent update checker from crashing iOS at launch (#22488)
juliusmarminge Oct 20, 2026
2ebe280
feat(scheduled-tasks): replay dedupe and coalescing for webhook deliv…
juliusmarminge Oct 20, 2026
14b47ee
ci(release): Make Windows arm64 CI job 50% faster (#22428)
jahands Oct 20, 2026
4c48118
ci(release): Windows arm64 verify no longer runs the crashing ARM Pow…
t3dotgg Oct 20, 2026
ca140c4
refactor(source-control): GitCafe creates repositories and pull reque…
juliusmarminge Oct 20, 2026
5bcc90e
test(web): fix release browser test failures (#22508)
t3dotgg Oct 20, 2026
c8667fd
fix(mobile): connecting an environment no longer crashes the header (…
juliusmarminge Oct 20, 2026
4af3231
fix(mobile): folded Back clears the detail route before the next sele…
juliusmarminge Oct 20, 2026
fe27e8e
ci(release): release tests stop timing out and finish in about 5 minu…
t3dotgg Oct 20, 2026
5d27ecd
test(server): Claude steer test no longer hangs for 120s under CI loa…
t3dotgg Oct 20, 2026
f9dd259
test: remove the timing races behind recurring CI and release failure…
t3dotgg Oct 20, 2026
fcb20e4
feat(web): render Mermaid diagrams with pele (#21472)
maria-rcks Oct 20, 2026
327f3fc
fix(mobile): keep home brand visible during secondary retries (#21388)
maria-rcks Oct 21, 2026
043c9c3
fix(mobile): collapse pull request repository errors (#21389)
maria-rcks Oct 21, 2026
e27fffa
fix(mobile): show terminal arrow keys before secondary controls (#21398)
maria-rcks Oct 21, 2026
145d73b
fix(mobile): update outdated servers and respect provider permissions…
maria-rcks Oct 21, 2026
2f6755b
fix(mobile): live activity tracks thread status and settlement (#21405)
maria-rcks Oct 21, 2026
4db2533
fix(mobile): use current checkout for non-git projects (#21404)
maria-rcks Oct 21, 2026
0dc38c7
fix(mobile): add project and checkout removal (#21409)
maria-rcks Oct 21, 2026
77e4f56
fix(mobile): show plans and fold settled progress notes (#21393)
maria-rcks Oct 21, 2026
afc33ff
fix(mobile): open transcript file links at the resolved path (#21403)
maria-rcks Oct 21, 2026
834ae4f
fix(mobile): lock the composer while queued edits save (#21390)
maria-rcks Oct 21, 2026
f16251f
fix(mobile): bring model controls in line with web (#21406)
maria-rcks Oct 21, 2026
6efe9a0
fix(mobile): restore archive and thread action undo (#21401)
maria-rcks Oct 21, 2026
fe414eb
fix(mobile): expose background work and thread status actions (#21395)
maria-rcks Oct 21, 2026
d356059
fix(web): keep approval menu actions compact (#22566)
Yash-Singh1 Oct 21, 2026
c3540a7
fix(web): main typecheck passes again after the Mermaid switch to pel…
t3dotgg Oct 21, 2026
05696c6
test: delete 11k low-signal tests so CI runs faster and flakes less (…
t3dotgg Oct 21, 2026
2085ea3
fix(mobile): thread rows show wake status and elapsed time (#21394)
maria-rcks Oct 21, 2026
8cd561e
fix(web,mobile): list database space for all machines in one notice (…
juliusmarminge Oct 21, 2026
b280e7d
test(lint): ban per-test timeouts and unreasoned skips (#22560)
juliusmarminge Oct 21, 2026
7895a2b
test(web): ban frame and transition waits in browser tests (#22561)
juliusmarminge Oct 21, 2026
dd4506a
test: ban wall-clock readings in tests (#22562)
juliusmarminge Oct 21, 2026
bde6206
test(server): ban real-clock waits in tests (#22564)
juliusmarminge Oct 21, 2026
08dbf83
test: warn on polling loops in tests and make adapter test harnesses …
juliusmarminge Oct 21, 2026
3719fd2
fix(mobile): iOS new-thread skill picker stops shifting the screen (#…
flamboh Oct 21, 2026
5bc19ac
fix(web): dialogs keep their content while they close (#21960)
flamboh Oct 21, 2026
569bd02
ci(release): build Windows x64 on Linux like arm64 (#22584)
t3dotgg Oct 21, 2026
849b3f8
fix(server): idle orphaned follow-ups can be cancelled without a runn…
t3dotgg Oct 21, 2026
a01f410
chore(web): remove "use client" directives (#22587)
flamboh Oct 21, 2026
7c16a40
test(mobile): prune low-value tests in mobile (second pass) (#22588)
juliusmarminge Oct 21, 2026
2edddbc
test(desktop): prune low-value tests in desktop (second pass) (#22589)
juliusmarminge Oct 21, 2026
eb10859
test(web): prune low-value tests in apps/web (second pass) (#22591)
juliusmarminge Oct 21, 2026
a2f4df0
test(server): prune low-value tests in apps/server (second pass) (#22…
juliusmarminge Oct 21, 2026
8feddd6
test(packages): prune low-value tests in packages (second pass) (#22593)
juliusmarminge Oct 21, 2026
32d8f8f
test(server): prune low-value tests in orchestration-v2 (second pass)…
juliusmarminge Oct 21, 2026
c728c8c
test(web): every browser test starts with the mouse off the page (#22…
juliusmarminge Oct 21, 2026
5b2ee39
chore(tailscale): drop parseTailscaleMagicDnsName, which nothing impo…
juliusmarminge Oct 21, 2026
31dcc7c
fix(server): make the remaining flaky server tests deterministic (#22…
juliusmarminge Oct 21, 2026
ecfe4f7
fix(mobile): composer chips match chat chips (#22518)
flamboh Oct 21, 2026
8bbb85c
fix(mobile): show each turn's diffstat on its work row (#21392)
maria-rcks Oct 21, 2026
c22ace2
chore(release): prepare v0.1.1
t3-code[bot] Oct 21, 2026
4741dc5
fix(web): silence notifications when stopping a watch (#22615)
Yash-Singh1 Oct 21, 2026
e64766c
ci(release): build macOS desktop on Blacksmith runners again (#22613)
t3dotgg Oct 21, 2026
733a303
fix(usage): Codex compaction and resumed sessions no longer show skip…
t3dotgg Oct 21, 2026
8a9d0e0
fix(web): thread search shows the same PR badge as the sidebar (#22627)
maria-rcks Oct 21, 2026
3e250a8
Delete .github/workflows/cursor-hygiene-webhook.yml
juliusmarminge Oct 21, 2026
61e2747
fix(desktop): bump Electron to 44.9.3 to block compromised eMudhra CA…
t3dotgg Oct 21, 2026
4f651cb
test(web): ChatView's React Compiler check no longer times out on slo…
t3dotgg Oct 21, 2026
9d0bc48
Merge upstream main through 4f651cb10d2a
github-actions[bot] Oct 21, 2026
62e4727
Merge latest fork/dev into upstream sync
github-actions[bot] Oct 21, 2026
ebee441
test(web): return void from PR panel fixture cleanup
github-actions[bot] Oct 21, 2026
15dc7b0
fix(web): thread links render as chips, and thread chips show the pro…
flamboh Oct 21, 2026
fd2a8b6
test: adapt retained fork coverage to upstream test rules
github-actions[bot] Oct 21, 2026
6a6c84f
fix(server): Stop on a delegate always clears it, even when it is stu…
t3dotgg Oct 21, 2026
f3a2007
fix(mobile): preserve the archive action boolean contract
github-actions[bot] Oct 21, 2026
afc5c48
Merge upstream main through 6a6c84f990
github-actions[bot] Oct 21, 2026
ac5e0bc
test(server): restore fork fixtures after upstream pruning
github-actions[bot] Oct 21, 2026
a93b03c
feat(web): composer stays usable during approvals, and sending declin…
maria-rcks Oct 21, 2026
73daccf
docs(agents): name the fast commands and stop polling (#22711)
t3dotgg Oct 21, 2026
3134151
Merge upstream main through a93b03c8a5
github-actions[bot] Oct 21, 2026
a5d66e2
fix(desktop): new worktrees install Electron from the local download …
t3dotgg Oct 21, 2026
dd8452a
test(server): split replay fixtures into per-provider files (#22717)
t3dotgg Oct 21, 2026
163bdea
fix(server): delegates finish when their leftover work settles, and G…
t3dotgg Oct 21, 2026
d0e427d
fix(server): storage cleanup no longer counts pnpm clones as freed sp…
t3dotgg Oct 21, 2026
a1dc856
build: upgrade Vite+ to 1.3 and cache typecheck (#22716)
t3dotgg Oct 21, 2026
4e0d7f0
Merge upstream main through 163bdeaa11
github-actions[bot] Oct 21, 2026
8f66e67
test: local test runs use package configs and a clean env (#22714)
t3dotgg Oct 21, 2026
ca049dc
fix(mobile): restore low-latency decoding for simulator streams (#22733)
Yash-Singh1 Oct 21, 2026
ea1c494
fix(marketing): typecheck cache no longer misses when the shell env c…
t3dotgg Oct 21, 2026
618761a
build(setup): leaner installs on Mac and Linux, cross-device store wa…
t3dotgg Oct 21, 2026
46f1040
Merge upstream main through 618761a2d6
github-actions[bot] Oct 21, 2026
783aa9b
fix(test): retain desktop script coverage with package routing
github-actions[bot] Oct 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
45 changes: 0 additions & 45 deletions .github/scripts/check-nightly-release.test.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,6 @@ for (const releaseChannel of ["stable", "nightly"]) {
);
assert.equal(calls.length, 0);
});

test(`allows a manual ${releaseChannel} release from main`, async () => {
const { options, calls } = releaseSourceFixture();
await assertReleaseSource({ ...options, releaseChannel });
assert.equal(calls[0].basehead, "candidate...main");
});
}

for (const comparisonStatus of ["behind", "diverged"]) {
Expand All @@ -79,13 +73,6 @@ for (const comparisonStatus of ["behind", "diverged"]) {
});
}

test("accepts a release commit already contained in main", async () => {
for (const comparisonStatus of ["ahead", "identical"]) {
const { options } = releaseSourceFixture({ comparisonStatus, eventName: "push" });
await assertCommitOnDefaultBranch({ ...options, sha: "release-commit" });
}
});

function fixture({ releases = [nightly(7)], comparisonStatus = "ahead" } = {}) {
const calls = [];
return {
Expand Down Expand Up @@ -119,26 +106,6 @@ test("releases the first nightly when no nightly is published", async () => {
assert.equal(await shouldReleaseNightly(options), true);
});

test("waits six hours after publication, including manual nightlies", async () => {
for (const age of [0, 3, 6 - 1 / 3600]) {
const { options, calls } = fixture({ releases: [nightly(age)] });
assert.equal(await shouldReleaseNightly(options), false);
assert.equal(calls.length, 0);
}
});

test("releases new commits at six hours and after an idle period", async () => {
for (const age of [6, 7, 24]) {
const { options } = fixture({ releases: [nightly(age)] });
assert.equal(await shouldReleaseNightly(options), true);
}
});

test("skips unchanged commits after the gap", async () => {
const { options } = fixture({ comparisonStatus: "identical" });
assert.equal(await shouldReleaseNightly(options), false);
});

test("uses publication time, not release order or the tagged commit date", async () => {
const { options } = fixture({
releases: [nightly(10), nightly(1), nightly(20, { tag_name: "nightly-v0.9.0" })],
Expand All @@ -153,13 +120,6 @@ test("ignores stable releases and drafts when checking the gap", async () => {
assert.equal(await shouldReleaseNightly(options), true);
});

test("compares against the published tag, including legacy nightly tags", async () => {
const tag = "nightly-v0.9.0";
const { options, calls } = fixture({ releases: [nightly(7, { tag_name: tag })] });
assert.equal(await shouldReleaseNightly(options), true);
assert.equal(calls[0].basehead, `${tag}...new`);
});

test("fails instead of releasing when GitHub cannot supply release state", async () => {
const { options } = fixture();
options.github.paginate = async () => {
Expand Down Expand Up @@ -211,8 +171,3 @@ test("stable releases derive the version from legacy nightly tags", async () =>
});
assert.equal((await resolveLatestNightlyCommit(options)).version, "0.9.0");
});

test("stable releases fail without a published nightly", async () => {
const { options } = nightlyCommitFixture({ releases: [nightly(0, { tag_name: "v1.0.0" })] });
await assert.rejects(resolveLatestNightlyCommit(options), /No published nightly/);
});
52 changes: 0 additions & 52 deletions .github/scripts/thread-transfer-report.test.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ const assert = require("node:assert/strict");
const test = require("node:test");

const {
renderComment,
resolve,
upsertCommentForCurrentHead,
validateResult,
Expand Down Expand Up @@ -53,39 +52,6 @@ test("validates the fixed artifact schema", () => {
);
});

test("renders baseline, impact, ceiling, and ceiling changes", () => {
const baseline = result();
const current = result({ measuredTurnWebSocketWireBytes: 260_000 });
current.providers.codex.ceiling = {
...current.providers.codex.ceiling,
measuredTurnWebSocketWireBytes: 330_000,
};
const comment = renderComment({
current,
baseline,
currentRun: {
sha: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
conclusion: "success",
url: "https://github.com/pingdotgg/t3code/actions/runs/2",
},
baselineRun: {
sha: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
matchesBase: true,
url: "https://github.com/pingdotgg/t3code/actions/runs/1",
},
});

assert.match(comment, /Main baseline \| This PR \| Impact \| PR ceiling/);
assert.match(comment, /\+9\.8 KiB \(\+4\.0%\)/);
assert.match(comment, /This PR changes transfer ceilings/);
assert.match(comment, /312\.5 KiB → 322\.3 KiB/);
assert.match(comment, /<!-- t3-thread-transfer-report -->/);
assert.match(
comment,
/<!-- t3-thread-transfer-result-sha:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb -->/,
);
});

test("resolves a fallback PR with a redacted head repo and exact main baseline", async () => {
const outputs = {};
const listWorkflowRunArtifacts = () => {};
Expand Down Expand Up @@ -373,21 +339,3 @@ test("preserves a successful result when a same-SHA rerun has no artifact", asyn
assert.equal(published, true);
assert.equal(updatedComment, false);
});

test("accepts V2 without comparing it to the V1 scenario", () => {
const current = result();
current.scenario.id = "thread-transfer-v2";
current.providers.codex.ceiling = { ...current.providers.codex.ceiling, totalWireBytes: 3000000 };
assert.equal(validateResult(current), current);
const comment = renderComment({
current,
baseline: result(),
currentRun: { sha: "bbbbbbbb", conclusion: "success", url: "https://example.com/current" },
baselineRun: { sha: "aaaaaaaa", matchesBase: true, url: "https://example.com/baseline" },
});
assert.match(comment, /fixture changed/);
assert.doesNotMatch(comment, /This PR changes transfer ceilings/);
assert.doesNotMatch(comment, /[+-]\d+\.\d+%/);
current.scenario.id = "unrecognized";
assert.throws(() => validateResult(current), /not supported/);
});
25 changes: 25 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,14 @@ jobs:
- name: Setup Vite+
uses: ./.github/actions/setup-ci-deps

# electron's install.js (run by ensure:electron) reads this cache before it
# downloads from GitHub. The key changes only with the Electron version.
- name: Cache Electron download
uses: actions/cache@v6
with:
path: ~/.cache/electron
key: electron-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('node_modules/.pnpm/electron@*/node_modules/electron/package.json') }}

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

Expand Down Expand Up @@ -131,6 +139,14 @@ jobs:
- name: Setup Vite+
uses: ./.github/actions/setup-ci-deps

# electron's install.js (run by ensure:electron) reads this cache before it
# downloads from GitHub. The key changes only with the Electron version.
- name: Cache Electron download
uses: actions/cache@v6
with:
path: ~/.cache/electron
key: electron-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('node_modules/.pnpm/electron@*/node_modules/electron/package.json') }}

- name: Ensure Electron runtime is installed
id: electron
run: vp run --filter @t3tools/desktop ensure:electron
Expand Down Expand Up @@ -220,6 +236,14 @@ jobs:
- name: Setup Vite+
uses: ./.github/actions/setup-ci-deps

# electron's install.js (run by ensure:electron) reads this cache before it
# downloads from GitHub. The key changes only with the Electron version.
- name: Cache Electron download
uses: actions/cache@v6
with:
path: ~/.cache/electron
key: electron-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('node_modules/.pnpm/electron@*/node_modules/electron/package.json') }}

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

Expand Down Expand Up @@ -250,6 +274,7 @@ jobs:

# The web suite is the largest outside the server. In the shared Test job it
# started last and ran alone for about 40s after everything else finished.
# release.yml mirrors this test, test_web, and test_server split.
test_web:
name: Test Web
needs: changes
Expand Down
52 changes: 0 additions & 52 deletions .github/workflows/cursor-hygiene-webhook.yml

This file was deleted.

Loading
Loading