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
130fea1
chore(desktop): initialize Ultracite ESLint tooling
IchenDEV Sep 4, 2026
a0d0fff
chore(desktop): autofix Ultracite lint and format issues
IchenDEV Sep 4, 2026
36a9f66
chore(desktop): apply Ultracite lint compliance across the app
IchenDEV Sep 4, 2026
867b33f
chore(desktop): migrate Ultracite provider from ESLint to Oxlint
IchenDEV Sep 4, 2026
53df554
chore(desktop): finish oxlint migration close-out
IchenDEV Sep 4, 2026
d111eb9
merge: reconcile oxlint migration with main
IchenDEV Sep 4, 2026
20d84f1
chore(desktop): ignore generated native artifacts in oxfmt
IchenDEV Sep 4, 2026
f3325fe
chore(desktop): clear oxlint type-safety residuals to zero
IchenDEV Sep 4, 2026
0c07f69
fix(desktop): repair bun-test regressions from type-safety pass
IchenDEV Sep 6, 2026
96c8374
docs(sdlc): migrate ultracite-init bundle to schema-3 stages
IchenDEV Sep 6, 2026
0238e1f
merge: reconcile ultracite PR with main
IchenDEV Sep 6, 2026
5ca3dad
fix(ci): speed up desktop design-system workflow
IchenDEV Sep 6, 2026
524f487
docs(sdlc): record CI speed fix commit SHA
IchenDEV Sep 6, 2026
2c10b9b
ci(desktop): drop PR macOS/Windows smoke matrix
IchenDEV Sep 6, 2026
96ec3f8
docs(sdlc): record desktop CI slim commit SHA
IchenDEV Sep 6, 2026
0f621e5
fix(desktop): realign contract tests after Ultracite wrap
IchenDEV Sep 6, 2026
2e3a5df
docs(sdlc): note contract-test realignment residual risk
IchenDEV Sep 6, 2026
c32ef82
fix(desktop): clear Ultracite type-safety test:ci regressions
IchenDEV Sep 6, 2026
d47a83c
docs(sdlc): record Ultracite test:ci green commit SHA
IchenDEV Sep 6, 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
  •  
  •  
  •  
48 changes: 27 additions & 21 deletions .github/workflows/desktop-design-system.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,38 +21,44 @@ concurrency:
cancel-in-progress: true

jobs:
validate:
changes:
runs-on: ubuntu-latest
outputs:
taskboard: ${{ steps.filter.outputs.taskboard }}
steps:
- uses: actions/checkout@v7
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
taskboard:
- 'apps/desktop/src/taskboard/**'
- 'apps/desktop/tests/taskBoard*'
- 'apps/desktop/stryker.taskboard.config.json'
- 'apps/desktop/tsconfig.stryker.json'

desktop:
needs: changes
runs-on: ubuntu-latest
timeout-minutes: 25
defaults:
run:
working-directory: apps/desktop
steps:
- uses: actions/checkout@v7
- uses: oven-sh/setup-bun@v2
with:
bun-version: 1.3.10
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Lint and typecheck
run: bun run check && bunx tsc --noEmit
- name: Run desktop tests
run: bun test
run: bun run test:ci
- name: Require zero surviving TaskBoard model mutants
if: needs.changes.outputs.taskboard == 'true'
run: bun run mutation:taskboard
- name: Lint and build desktop renderer
- name: Build desktop renderer
env:
NODE_OPTIONS: --max-old-space-size=4096
run: bun run build:renderer

test-cross-platform:
strategy:
fail-fast: false
matrix:
os: [macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
defaults:
run:
working-directory: apps/desktop
steps:
- uses: actions/checkout@v7
- uses: oven-sh/setup-bun@v2
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Run desktop tests
run: bun test
run: bunx vite build
13 changes: 13 additions & 0 deletions apps/desktop/.cursor/hooks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"version": 1,
"hooks": {
"afterFileEdit": [
{
"command": "bunx prettier --write"
},
{
"command": "bun run fix"
}
]
}
}
63 changes: 63 additions & 0 deletions apps/desktop/.vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
{
"editor.defaultFormatter": "oxc.oxc-vscode",
"editor.formatOnPaste": true,
"editor.formatOnSave": true,
"emmet.showExpandedAbbreviation": "never",
"js/ts.tsdk.path": "node_modules/typescript/lib",
"js/ts.tsdk.promptToUseWorkspaceVersion": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit",
"source.fixAll.oxc": "explicit"
},
"[astro]": {
"editor.defaultFormatter": "astro-build.astro-vscode"
},
"[css]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[graphql]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[handlebars]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[html]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[javascriptreact]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[json]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[jsonc]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[less]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[markdown]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[scss]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[vue-html]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[vue]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[yaml]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
}
}
1,103 changes: 1,017 additions & 86 deletions apps/desktop/bun.lock

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions apps/desktop/bunfig.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[test]
preload = ["./tests/silenceActWarnings.ts"]
37 changes: 30 additions & 7 deletions apps/desktop/electrobun.config.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,22 @@
import type { ElectrobunConfig } from "electrobun";

import { DESKTOP_CHANNELS, resolveDesktopChannel } from "./scripts/desktop-channel";
import {
DESKTOP_CHANNELS,
resolveDesktopChannel,
} from "./scripts/desktop-channel";

const channel = DESKTOP_CHANNELS[resolveDesktopChannel(process.env.CODETWO_CHANNEL, process.argv)];
const hostExecutable = process.platform === "win32" ? "codetwo-desktop-host.exe" : "codetwo-desktop-host";
const toolBrokerExecutable = process.platform === "win32" ? "codetwo-tool-broker.exe" : "codetwo-tool-broker";
const channel =
DESKTOP_CHANNELS[
resolveDesktopChannel(process.env.CODETWO_CHANNEL, process.argv)
];
const hostExecutable =
process.platform === "win32"
? "codetwo-desktop-host.exe"
: "codetwo-desktop-host";
const toolBrokerExecutable =
process.platform === "win32"
? "codetwo-tool-broker.exe"
: "codetwo-tool-broker";
const hostBinary = `../../target/release/${hostExecutable}`;
const toolBrokerBinary = `build/tool-broker/${toolBrokerExecutable}`;

Expand All @@ -22,17 +34,28 @@ export default {
minify: false,
sourcemap: "external",
define: {
"process.env.CODETWO_APP_IDENTIFIER": JSON.stringify(channel.identifier),
"process.env.CODETWO_APP_IDENTIFIER": JSON.stringify(
channel.identifier
),
"process.env.CODETWO_APP_NAME": JSON.stringify(channel.displayName),
"process.env.CODETWO_ICLOUD_CONTAINER_IDENTIFIER": JSON.stringify(`iCloud.${channel.identifier}`),
"process.env.CODETWO_ICLOUD_CONTAINER_IDENTIFIER": JSON.stringify(
`iCloud.${channel.identifier}`
),
},
},
copy: {
dist: "views/main",
[hostBinary]: `bin/${hostExecutable}`,
[toolBrokerBinary]: `bin/${toolBrokerExecutable}`,
},
watch: ["../../crates", "src-host", "src", "index.html", "vite.config.ts", "scripts/prepare-electrobun.ts"],
watch: [
"../../crates",
"src-host",
"src",
"index.html",
"vite.config.ts",
"scripts/prepare-electrobun.ts",
],
watchIgnore: ["dist/**", "../../target/**"],
mac: {
createDmg: process.env.ELECTROBUN_CREATE_DMG === "1",
Expand Down
13 changes: 13 additions & 0 deletions apps/desktop/oxfmt.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { defineConfig } from "oxfmt";
import ultracite from "ultracite/oxfmt";

export default defineConfig({
...ultracite,
ignorePatterns: [
...(ultracite.ignorePatterns ?? []),
"**/src-tauri/gen/**",
"**/src-host/**",
"**/assets/**/*.json",
"**/artifacts/**",
],
});
Loading
Loading