Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
16e442b
fix(server): detect replaced transcripts with large file identities (…
juliusmarminge Oct 20, 2026
616819a
fix(shared): checkpoint WAL without blocking the event loop (#21799)
juliusmarminge Oct 20, 2026
c7f8404
perf(server): fork threads load faster when local turns fill the firs…
juliusmarminge Oct 20, 2026
832dc8f
fix(android): navigation chrome takes less of the screen (#20813)
juliusmarminge Oct 20, 2026
b999554
fix(desktop): route external PR links to the pull request view (#22048)
tim-smart Oct 20, 2026
cfa76ea
fix(web): preserve context usage when forking threads (#22075)
Yash-Singh1 Oct 20, 2026
2128114
test: exercise guards hidden by ineffective assertions (#21848)
juliusmarminge Oct 20, 2026
a3ca1a5
fix(server): keep compaction cadence across restarts (#21880)
juliusmarminge Oct 20, 2026
6a049d0
fix(server): transfer native child routing between runs (#21615)
juliusmarminge Oct 20, 2026
f09b7d2
test: run marketing and KDE capture suites in CI (#21849)
juliusmarminge Oct 20, 2026
fc85775
perf(server): discover compaction candidates on the reader worker (#2…
juliusmarminge Oct 20, 2026
9cbc2c0
fix(acp): discover and select models from session model state (#19519)
StiensWout Oct 20, 2026
2821004
test(clients): prune redundant checks and retain compatibility guards…
juliusmarminge Oct 20, 2026
618c464
fix(web): show completed pull request checks and align rows (#22090)
Yash-Singh1 Oct 20, 2026
be56049
fix(web): handle pasted folders as workspace references (#22072)
Yash-Singh1 Oct 20, 2026
2d88519
feat(relay): watch tunnel cleanup on the relay dashboard and warnings…
juliusmarminge Oct 20, 2026
3117be9
test(runtime): prune duplicate cases and unused test-only exports (#2…
juliusmarminge Oct 20, 2026
a84f851
fix(relay): relay dashboard latency charts show real durations (#22088)
juliusmarminge Oct 20, 2026
1fbb252
Merge remote-tracking branch 'upstream/main' into yordis/chore-sync-u…
yordis Oct 20, 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
5 changes: 3 additions & 2 deletions .github/scripts/ci-changes.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ const EXTRA_OWNERS = [
// scripts/build-desktop-artifact.ts reads the GNOME extension manifest.
[/^apps\/desktop\/gnome-extension\//, ["@t3tools/scripts"]],
[/^native\/browser-secret\//, ["@t3tools/desktop"]],
[/^native\/kde-snap-shot\//, ["@t3tools/desktop"]],
[/^native\/libghostty-vt\//, ["@t3tools/web"]],
];
const RUST = /^native\/(resource-monitor|kde-snap-shot|hyprland-snap-shot)\//;
Expand Down Expand Up @@ -112,10 +113,10 @@ function ownersOf(file, packages) {
// A manifest can change dependencies or versions other packages read.
if (path.posix.basename(file) === "package.json") return null;
if (RUNS_EVERYTHING.some((pattern) => pattern.test(file))) return null;
const extra = EXTRA_OWNERS.flatMap(([pattern, names]) => (pattern.test(file) ? names : []));
// scripts/build-desktop-artifact.test.ts reads the crates' sources.
if (RUST.test(file)) return ["@t3tools/scripts"];
if (RUST.test(file)) return ["@t3tools/scripts", ...extra];

const extra = EXTRA_OWNERS.flatMap(([pattern, names]) => (pattern.test(file) ? names : []));
const owner = packages
.filter((pkg) => file.startsWith(`${pkg.dir}/`))
.sort((a, b) => b.dir.length - a.dir.length)[0];
Expand Down
30 changes: 0 additions & 30 deletions apps/desktop/src/app/DesktopAppErrors.test.ts

This file was deleted.

37 changes: 0 additions & 37 deletions apps/desktop/src/app/DesktopDetachedActionErrors.test.ts

This file was deleted.

55 changes: 1 addition & 54 deletions apps/desktop/src/backend/DesktopBackendPool.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { assert, describe, it } from "@effect/vitest";
import * as Duration from "effect/Duration";
import * as Effect from "effect/Effect";
import * as FileSystem from "effect/FileSystem";
import * as Layer from "effect/Layer";
Expand All @@ -19,29 +18,7 @@ import * as DesktopWindow from "../window/DesktopWindow.ts";
import * as DesktopWslEnvironment from "../wsl/DesktopWslEnvironment.ts";
import * as DesktopBackendConfiguration from "./DesktopBackendConfiguration.ts";
import * as DesktopBackendPool from "./DesktopBackendPool.ts";
import type { DesktopBackendSnapshot, DesktopBackendStartConfig } from "./DesktopBackendManager.ts";

function makeStubInstance(
id: DesktopBackendPool.BackendInstanceId,
label: string,
): DesktopBackendPool.DesktopBackendInstance {
const snapshot: DesktopBackendSnapshot = {
desiredRunning: false,
ready: false,
activePid: Option.none(),
restartAttempt: 0,
restartScheduled: false,
};
return {
id,
label: Effect.succeed(label),
start: Effect.void,
stop: () => Effect.void,
currentConfig: Effect.succeed(Option.none<DesktopBackendStartConfig>()),
snapshot: Effect.succeed(snapshot),
waitForReady: (_timeout: Duration.Duration) => Effect.succeed(false),
};
}
import type { DesktopBackendStartConfig } from "./DesktopBackendManager.ts";

function layerPool(labelRef: Ref.Ref<string>): Layer.Layer<DesktopBackendPool.DesktopBackendPool> {
return DesktopBackendPool.layer.pipe(
Expand Down Expand Up @@ -111,36 +88,6 @@ function layerPool(labelRef: Ref.Ref<string>): Layer.Layer<DesktopBackendPool.De
}

describe("DesktopBackendPool", () => {
it.effect("layerTest exposes registered instances by id", () =>
Effect.gen(function* () {
const pool = yield* DesktopBackendPool.DesktopBackendPool;
const fetchedPrimary = yield* pool.get(DesktopBackendPool.PRIMARY_INSTANCE_ID);
const fetchedWsl = yield* pool.get(DesktopBackendPool.BackendInstanceId("wsl:ubuntu"));
const fetchedMissing = yield* pool.get(DesktopBackendPool.BackendInstanceId("missing"));
const all = yield* pool.list;
const resolvedPrimary = yield* pool.primary;

assert.equal(yield* Option.getOrThrow(fetchedPrimary).label, "Windows");
assert.equal(yield* Option.getOrThrow(fetchedWsl).label, "WSL (Ubuntu)");
assert.isTrue(Option.isNone(fetchedMissing));
assert.lengthOf(all, 2);
assert.equal(resolvedPrimary.id, DesktopBackendPool.PRIMARY_INSTANCE_ID);
}).pipe(
Effect.provide(
DesktopBackendPool.layerTest([
makeStubInstance(DesktopBackendPool.PRIMARY_INSTANCE_ID, "Windows"),
makeStubInstance(DesktopBackendPool.BackendInstanceId("wsl:ubuntu"), "WSL (Ubuntu)"),
]),
),
),
);

it.effect("layerTest dies when no instances are supplied", () =>
Effect.exit(
DesktopBackendPool.DesktopBackendPool.pipe(Effect.provide(DesktopBackendPool.layerTest([]))),
).pipe(Effect.map((exit) => assert.equal(exit._tag, "Failure"))),
);

it.effect("resolves the primary label lazily after pool layer construction", () =>
Effect.scoped(
Effect.gen(function* () {
Expand Down
39 changes: 22 additions & 17 deletions apps/desktop/src/wsl/DesktopWslEnvironment.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -359,23 +359,6 @@ describe("WSL runtime cache", () => {
expect(deleted).toBeGreaterThan(kept);
});

it("treats a runtime whose executable no longer runs as a cache miss", () => {
const script = buildWslRuntimeInstallScript(
"/mnt/c/Program Files/T3 Code/wsl-runtime.tar.gz",
"1.2.3-x64",
"b".repeat(64),
);

expect(script).toContain(' [ -x "$1/t3" ] && "$1/t3" --version >/dev/null');

const entryCheckDefined = script.indexOf("runtime_entry_runs() {");
const readinessDefined = script.indexOf("runtime_is_ready() {");
const readyShortCircuit = script.indexOf("if runtime_is_ready; then");
expect(entryCheckDefined).toBeGreaterThan(-1);
expect(entryCheckDefined).toBeLessThan(readinessDefined);
expect(readinessDefined).toBeLessThan(readyShortCircuit);
});

it("re-hashes the executable against the digest the install recorded", () => {
const script = buildWslRuntimeInstallScript(
"/mnt/c/Program Files/T3 Code/wsl-runtime.tar.gz",
Expand Down Expand Up @@ -624,6 +607,28 @@ describe.skipIf(posixShellRunner === null)("WSL runtime install script (executed
expect(restored.stdout).toBe(SERVER_ENTRY_SOURCE);
});

it("reinstalls an executable that fails --version despite a matching recorded digest", () => {
const fixture = createFixture();
expect(fixture.install().status).toBe(0);
const brokenEntry = "#!/bin/sh\nexit 42\n";
const corrupt = runShell(
[
"set -eu",
`printf '%s' ${sh(brokenEntry)} > ${sh(fixture.serverEntry)}`,
`chmod +x ${sh(fixture.serverEntry)}`,
`sha256sum ${sh(fixture.serverEntry)} | cut -d ' ' -f 1 > ${sh(`${fixture.runtimeRoot}/.t3code-wsl-runtime-ready`)}`,
].join("\n"),
);
expect(corrupt.status, corrupt.stderr).toBe(0);
expect(runShell(`${sh(fixture.serverEntry)} --version`).status).toBe(42);

const repaired = fixture.install();
expect(repaired.status, repaired.stderr).toBe(0);
expect(parseWslRuntimeRoot(repaired.stdout)).toBe(fixture.runtimeRoot);
expect(runShell(`cat ${sh(fixture.serverEntry)}`).stdout).toBe(SERVER_ENTRY_SOURCE);
expect(runShell(`${sh(fixture.serverEntry)} --version`).status).toBe(0);
});

it("falls back instead of launching a corrupted cache it cannot reinstall", () => {
const fixture = createFixture();
expect(fixture.install().status).toBe(0);
Expand Down
3 changes: 2 additions & 1 deletion apps/desktop/vite.config.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import "vite-plus/test/config";
import { defineConfig } from "vite-plus";
import { defaultInclude, defineConfig } from "vite-plus";

import { isDesktopRuntimeExternalDependency } from "../../scripts/lib/desktop-external-packages.ts";
import { loadRepoEnv } from "../../scripts/lib/public-config.ts";
Expand Down Expand Up @@ -141,6 +141,7 @@ export default defineConfig({
},
],
test: {
include: [...defaultInclude, "../../native/kde-snap-shot/src/*.test.ts"],
// The Windows lane runs workspace suites concurrently; filesystem-heavy
// desktop integration tests can exceed Vitest's 5 second default there.
testTimeout: 15_000,
Expand Down
3 changes: 2 additions & 1 deletion apps/marketing/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"dev": "node scripts/stage-install-scripts.mjs && astro dev",
"build": "node scripts/stage-install-scripts.mjs && astro build",
"preview": "astro preview",
"typecheck": "astro check"
"typecheck": "astro check",
"test": "vp test run"
},
"dependencies": {
"@t3tools/shared": "workspace:*",
Expand Down
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ android {
dependencies {
implementation project(':expo-modules-core')
implementation 'androidx.compose.ui:ui-android:1.10.6'
implementation 'androidx.activity:activity:1.8.2'
implementation 'androidx.compose.material3:material3-android:1.5.0-alpha17'
implementation 'androidx.window:window:1.5.1'
}
Loading
Loading