ci: add GitHub Actions workflow with split lint/type/build/test jobs#2
Conversation
Lint, typecheck, build, and test are run as separate jobs across the TS/React, Rust (Tauri), and Python sidecar stacks so failures surface per-stack. Tauri bundle build runs on main push and manual dispatch only; PRs use cargo check to keep CI time bounded. https://claude.ai/code/session_01WSAGRj9p6dadwc1Ld5pbUC
|
Note Gemini is unable to generate a review for this pull request due to the file types involved not being currently supported. |
|
ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (2)
📝 WalkthroughWalkthroughCIワークフローを追加し(lint/typecheck/build/test、クロスプラットフォームTauriビルド含む)、ESLint構成をフラット設定へ移行、TypeScript/Vite設定と多数のUI/CSS/小さい実装フォーマットを適用しました。Python stub のタイムスタンプ生成も修正しています。 変更内容CI パイプライン ワークフロー セットアップ
ESLint と依存関係
TypeScript ビルド設定と .gitignore
Vite 設定
Tauri バックエンド小修正
Rust: Python subprocess helper
Python stub
UI / CSS / 小さなコード整形群
Sequence Diagram(s)sequenceDiagram
participant GitHub
participant Actions
participant Runner
participant ArtifactStore
GitHub->>Actions: push / pull_request / workflow_dispatch
Actions->>Runner: start jobs (lint,typecheck,build,test)
Runner->>ArtifactStore: upload dist artifact
Runner->>Runner: run tauri build (conditional)
推定レビュー工数🎯 3 (Moderate) | ⏱️ ~20 分 Possibly related issues
Possibly related PRs
ウサギの詩 🐰
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/ci.yml:
- Around line 158-160: YAML inline maps like `{ name: linux, os: ubuntu-latest
}` are triggering the linter due to extra spaces; update each inline map entry
(`{ name: linux, os: ubuntu-latest }`, `{ name: macos, os: macos-latest }`, `{
name: windows, os: windows-latest }`) to remove the spaces so they read
`{name:linux,os:ubuntu-latest}`, `{name:macos,os:macos-latest}`,
`{name:windows,os:windows-latest}` to satisfy the linter.
- Around line 24-234: Multiple `uses:` entries (e.g., actions/checkout@v4,
actions/setup-node@v4, dtolnay/rust-toolchain@stable, Swatinem/rust-cache@v2,
astral-sh/setup-uv@v3, actions/upload-artifact@v4) are referenced by tags and
should be pinned to specific commit SHAs to avoid unexpected upstream changes;
update each `uses:` occurrence in the workflow to the corresponding
action@<commit-sha> for reproducibility, replace every tag-based reference
(search for the exact strings above) with the canonical commit SHA from the
action's repository, and add/enable Dependabot config for the `github-actions`
package-ecosystem so updates are reviewed and applied automatically.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: b7f688e9-50fd-47a8-91b9-f3a36c84a129
📒 Files selected for processing (1)
.github/workflows/ci.yml
| - uses: actions/checkout@v4 | ||
| - uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: ${{ env.NODE_VERSION }} | ||
| cache: npm | ||
| - run: npm ci | ||
| - run: npm run lint | ||
| - run: npx prettier --check "src/**/*.{ts,tsx,css,json}" | ||
|
|
||
| lint-rust: | ||
| name: Lint (Rust) | ||
| runs-on: ubuntu-latest | ||
| defaults: | ||
| run: | ||
| working-directory: src-tauri | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: dtolnay/rust-toolchain@stable | ||
| with: | ||
| components: rustfmt, clippy | ||
| - uses: Swatinem/rust-cache@v2 | ||
| with: | ||
| workspaces: src-tauri | ||
| - name: Install Tauri system deps | ||
| run: | | ||
| sudo apt-get update | ||
| sudo apt-get install -y \ | ||
| libwebkit2gtk-4.1-dev \ | ||
| libappindicator3-dev \ | ||
| librsvg2-dev \ | ||
| patchelf \ | ||
| libgtk-3-dev \ | ||
| libsoup-3.0-dev \ | ||
| libjavascriptcoregtk-4.1-dev | ||
| - run: cargo fmt --all -- --check | ||
| - run: cargo clippy --all-targets -- -D warnings | ||
|
|
||
| lint-python: | ||
| name: Lint (Python) | ||
| runs-on: ubuntu-latest | ||
| defaults: | ||
| run: | ||
| working-directory: python | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: astral-sh/setup-uv@v3 | ||
| with: | ||
| enable-cache: true | ||
| cache-dependency-glob: python/uv.lock | ||
| - run: uv sync --extra dev | ||
| - run: uv run ruff check . | ||
| - run: uv run black --check . | ||
|
|
||
| # ---------- Type check ---------- | ||
| typecheck-ts: | ||
| name: Typecheck (TypeScript) | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: ${{ env.NODE_VERSION }} | ||
| cache: npm | ||
| - run: npm ci | ||
| - run: npx tsc -b | ||
|
|
||
| typecheck-python: | ||
| name: Typecheck (Python) | ||
| runs-on: ubuntu-latest | ||
| defaults: | ||
| run: | ||
| working-directory: python | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: astral-sh/setup-uv@v3 | ||
| with: | ||
| enable-cache: true | ||
| cache-dependency-glob: python/uv.lock | ||
| - run: uv sync --extra dev | ||
| # mortal は torch 依存のため CI では除外 | ||
| - run: uv run mypy recognition common | ||
|
|
||
| # ---------- Build ---------- | ||
| build-web: | ||
| name: Build (Web) | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: ${{ env.NODE_VERSION }} | ||
| cache: npm | ||
| - run: npm ci | ||
| - run: npm run build | ||
| - uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: web-dist | ||
| path: dist | ||
| retention-days: 7 | ||
|
|
||
| build-rust-check: | ||
| name: Build (Rust check) | ||
| runs-on: ubuntu-latest | ||
| defaults: | ||
| run: | ||
| working-directory: src-tauri | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: dtolnay/rust-toolchain@stable | ||
| - uses: Swatinem/rust-cache@v2 | ||
| with: | ||
| workspaces: src-tauri | ||
| - name: Install Tauri system deps | ||
| run: | | ||
| sudo apt-get update | ||
| sudo apt-get install -y \ | ||
| libwebkit2gtk-4.1-dev \ | ||
| libappindicator3-dev \ | ||
| librsvg2-dev \ | ||
| patchelf \ | ||
| libgtk-3-dev \ | ||
| libsoup-3.0-dev \ | ||
| libjavascriptcoregtk-4.1-dev | ||
| - run: cargo check --all-targets | ||
|
|
||
| build-tauri: | ||
| name: Build (Tauri ${{ matrix.platform.name }}) | ||
| # PR では実行しない (cargo check で代替)。main push か手動のみ。 | ||
| if: github.event_name != 'pull_request' | ||
| needs: [build-web, build-rust-check] | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| platform: | ||
| - { name: linux, os: ubuntu-latest } | ||
| - { name: macos, os: macos-latest } | ||
| - { name: windows, os: windows-latest } | ||
| runs-on: ${{ matrix.platform.os }} | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: ${{ env.NODE_VERSION }} | ||
| cache: npm | ||
| - uses: dtolnay/rust-toolchain@stable | ||
| - uses: Swatinem/rust-cache@v2 | ||
| with: | ||
| workspaces: src-tauri | ||
| - name: Install Tauri system deps (Linux) | ||
| if: matrix.platform.name == 'linux' | ||
| run: | | ||
| sudo apt-get update | ||
| sudo apt-get install -y \ | ||
| libwebkit2gtk-4.1-dev \ | ||
| libappindicator3-dev \ | ||
| librsvg2-dev \ | ||
| patchelf \ | ||
| libgtk-3-dev \ | ||
| libsoup-3.0-dev \ | ||
| libjavascriptcoregtk-4.1-dev | ||
| - run: npm ci | ||
| - run: npm run tauri:build | ||
|
|
||
| # ---------- Test ---------- | ||
| test-ts: | ||
| name: Test (TypeScript / Vitest) | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: ${{ env.NODE_VERSION }} | ||
| cache: npm | ||
| - run: npm ci | ||
| - run: npm test | ||
|
|
||
| test-rust: | ||
| name: Test (Rust / cargo test) | ||
| runs-on: ubuntu-latest | ||
| defaults: | ||
| run: | ||
| working-directory: src-tauri | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: dtolnay/rust-toolchain@stable | ||
| - uses: Swatinem/rust-cache@v2 | ||
| with: | ||
| workspaces: src-tauri | ||
| - name: Install Tauri system deps | ||
| run: | | ||
| sudo apt-get update | ||
| sudo apt-get install -y \ | ||
| libwebkit2gtk-4.1-dev \ | ||
| libappindicator3-dev \ | ||
| librsvg2-dev \ | ||
| patchelf \ | ||
| libgtk-3-dev \ | ||
| libsoup-3.0-dev \ | ||
| libjavascriptcoregtk-4.1-dev | ||
| - run: cargo test --all-targets | ||
|
|
||
| test-python: | ||
| name: Test (Python / pytest) | ||
| runs-on: ubuntu-latest | ||
| defaults: | ||
| run: | ||
| working-directory: python | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: astral-sh/setup-uv@v3 | ||
| with: |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# 目的: SHA pin されていない uses を一覧化して確認
# 期待: 未pin の行が出力される(修正後は 0 件)
rg -nP '^\s*-\s*uses:\s*[^@\s]+@(?!(?:[a-f0-9]{40})\b)[^\s]+' .github/workflows/ci.ymlRepository: otomatty/jantama-ai
Length of output: 1191
uses: ステートメントを commit SHA にピン留めしてください
21 個の uses: ステートメント(actions/checkout@v4、dtolnay/rust-toolchain@stable など)がバージョンタグで参照されており、上流の予期しない変更に影響を受けるリスクがあります。再現性と改ざん耐性のため、commit SHA へピン留めしてください。Dependabot の github-actions で定期的な更新推奨です。
修正例
- - uses: actions/checkout@v4
+ - uses: actions/checkout@eef61447b9ff4aafe5dcd72e0e56e3c9bc5e221a
- - uses: dtolnay/rust-toolchain@stable
+ - uses: dtolnay/rust-toolchain@1482605bfc5719ff41411a05e6243f3e87da7365a🧰 Tools
🪛 YAMLlint (1.38.0)
[error] 158-158: too many spaces inside braces
(braces)
[error] 158-158: too many spaces inside braces
(braces)
[error] 159-159: too many spaces inside braces
(braces)
[error] 159-159: too many spaces inside braces
(braces)
[error] 160-160: too many spaces inside braces
(braces)
[error] 160-160: too many spaces inside braces
(braces)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/workflows/ci.yml around lines 24 - 234, Multiple `uses:` entries
(e.g., actions/checkout@v4, actions/setup-node@v4,
dtolnay/rust-toolchain@stable, Swatinem/rust-cache@v2, astral-sh/setup-uv@v3,
actions/upload-artifact@v4) are referenced by tags and should be pinned to
specific commit SHAs to avoid unexpected upstream changes; update each `uses:`
occurrence in the workflow to the corresponding action@<commit-sha> for
reproducibility, replace every tag-based reference (search for the exact strings
above) with the canonical commit SHA from the action's repository, and
add/enable Dependabot config for the `github-actions` package-ecosystem so
updates are reviewed and applied automatically.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 349537b70e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| - { name: linux, os: ubuntu-latest } | ||
| - { name: macos, os: macos-latest } | ||
| - { name: windows, os: windows-latest } |
There was a problem hiding this comment.
Restrict Tauri bundle matrix to supported platforms
build-tauri runs npm run tauri:build on Linux, macOS, and Windows for push/workflow_dispatch, but this repo’s Tauri config is Windows-installer-only (bundle.targets is msi/nsis). That means the Linux and macOS matrix legs will fail during bundling even when application code is healthy, causing red CI on every main push. Limit this job to Windows (or pass platform-specific bundle targets) so non-Windows runners don’t execute an unsupported packaging path.
Useful? React with 👍 / 👎.
- lint-rust: apply cargo fmt across src-tauri - lint-python: replace timezone.utc with datetime.UTC alias (UP017) - typecheck/build: - move vite.config.ts solely under tsconfig.node.json (composite project) - drop async wrapper and unused @ts-expect-error in vite.config.ts - add /// <reference types="vitest" /> for the test field - lint-ts: migrate ESLint to v9 flat config (eslint.config.js) - add @eslint/js, globals, typescript-eslint dev deps - remove legacy .eslintrc.cjs - prettier: format src/** to satisfy the new prettier --check step - gitignore: ignore *.tsbuildinfo https://claude.ai/code/session_01WSAGRj9p6dadwc1Ld5pbUC
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@eslint.config.js`:
- Line 31: The config uses import.meta.dirname for tsconfigRootDir which
requires Node ≥20.11; either declare that requirement in package.json by adding
an "engines": {"node": ">=20.11"} entry, or replace import.meta.dirname with the
Node-compatible pattern using fileURLToPath(new URL(".", import.meta.url));
update eslint.config.js to use fileURLToPath/import.meta.url if you prefer
broader compatibility, or add the engines field to package.json to enforce the
Node version for all developers.
In `@src/index.css`:
- Line 1: The `@import` statement in src/index.css uses the url(...) notation
which violates the Stylelint import-notation rule; replace the url(...) form
with a plain string import by changing the `@import` line to use a quoted string
(e.g., `@import` "https://fonts.googleapis.com/...?") so Stylelint accepts it and
keep the same font query parameters; update the `@import` line only and leave the
rest of the file unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: fa982534-19b1-4d37-82e8-105cf20fe3af
⛔ Files ignored due to path filters (1)
package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (28)
.eslintrc.cjs.gitignoreeslint.config.jspackage.jsonpython/mortal/main.pysrc-tauri/src/commands.rssrc-tauri/src/lib.rssrc/App.tsxsrc/components/CandidateList.tsxsrc/components/DangerSafeBlock.tsxsrc/components/ErrorBody.tsxsrc/components/HandRow.tsxsrc/components/HeroLayout.tsxsrc/components/IdleBody.tsxsrc/components/MonitorButton.tsxsrc/components/PrimaryGlyph.tsxsrc/components/ReasonBlock.tsxsrc/components/StatusBar.tsxsrc/components/Tile.tsxsrc/index.csssrc/lib/scenarios.tssrc/lib/tauriCommands.tssrc/screens/MainScreen.tsxsrc/screens/SettingsScreen.tsxsrc/state/appState.tstsconfig.jsontsconfig.node.jsonvite.config.ts
💤 Files with no reviewable changes (1)
- .eslintrc.cjs
| @@ -1,4 +1,4 @@ | |||
| @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;900&family=JetBrains+Mono:wght@400;500&display=swap'); | |||
| @import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;900&family=JetBrains+Mono:wght@400;500&display=swap"); | |||
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# import-notation 違反候補を確認(修正後はヒットしない想定)
rg -n '^\s*@import\s+url\(' src/index.cssRepository: otomatty/jantama-ai
Length of output: 201
@import の記法を Stylelint ルールに合わせてください
Line 1 の import-notation ルール違反です。url(...) ではなく文字列指定に変更すると lint エラーを回避できます。
🔧 提案差分
-@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;900&family=JetBrains+Mono:wght@400;500&display=swap");
+@import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;900&family=JetBrains+Mono:wght@400;500&display=swap";🧰 Tools
🪛 Stylelint (17.10.0)
[error] 1-1: Expected "url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;900&family=JetBrains+Mono:wght@400;500&display=swap")" to be ""https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;900&family=JetBrains+Mono:wght@400;500&display=swap"" (import-notation)
(import-notation)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/index.css` at line 1, The `@import` statement in src/index.css uses the
url(...) notation which violates the Stylelint import-notation rule; replace the
url(...) form with a plain string import by changing the `@import` line to use a
quoted string (e.g., `@import` "https://fonts.googleapis.com/...?") so Stylelint
accepts it and keep the same font query parameters; update the `@import` line only
and leave the rest of the file unchanged.
- commands.rs: drop unused Manager import - types.rs: replace manual Default impl with #[derive(Default)] + #[default] - python_proc.rs: allow dead_code at module level (Phase D scaffolding) https://claude.ai/code/session_01WSAGRj9p6dadwc1Ld5pbUC
- restrict build-tauri to windows-latest only (tauri.conf.json bundle.targets is msi/nsis, so the macOS/Linux matrix legs would always fail on main push) - declare engines.node >=20.11 to formalize the requirement of import.meta.dirname used in eslint.config.js Skipped (intentionally): - pinning all actions to commit SHAs (better handled with Dependabot in a follow-up; not breaking CI today) - yamllint braces and stylelint import-notation (not configured in this CI) https://claude.ai/code/session_01WSAGRj9p6dadwc1Ld5pbUC
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src-tauri/src/python_proc.rs (1)
50-55:⚠️ Potential issue | 🔴 Critical | ⚡ Quick winstderrがパイプされているが読み取られていないため、プロセスがブロックする可能性があります。
stderrをStdio::piped()に設定していますが、PythonProcess構造体ではstderrを保持も読み取りもしていません。Pythonプロセスがstderrに書き込むと(ログ、警告、トレースバックなど)、バッファが満杯になった時点でプロセスがブロックし、デッドロックが発生する可能性があります。Phase Dのスケルトンコードであることを考慮すると、
Stdio::null()(破棄)またはStdio::inherit()(親プロセスのstderrに出力)の使用を推奨します。🐛 提案される修正
オプション1(推奨): stderrを破棄
let mut child = Command::new(python_path) .args(args) .stdin(Stdio::piped()) .stdout(Stdio::piped()) - .stderr(Stdio::piped()) + .stderr(Stdio::null()) .spawn()?;オプション2: 親プロセスのstderrに継承
let mut child = Command::new(python_path) .args(args) .stdin(Stdio::piped()) .stdout(Stdio::piped()) - .stderr(Stdio::piped()) + .stderr(Stdio::inherit()) .spawn()?;🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src-tauri/src/python_proc.rs` around lines 50 - 55, The spawned child sets stderr to Stdio::piped() but the PythonProcess struct never holds or reads stderr, which can deadlock; update the Command invocation that creates `child` (the call using `Command::new(python_path).args(args)`) to not pipe stderr—use `Stdio::null()` to discard stderr (or `Stdio::inherit()` if you want it to go to the parent) instead of `Stdio::piped()`, or alternatively store and read the child's stderr in the `PythonProcess` struct if you intend to capture it.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@package.json`:
- Line 37: package.json currently contains both the typescript-eslint meta
package and the individual packages, causing duplication and version mismatch;
remove the individual packages "@typescript-eslint/parser" and
"@typescript-eslint/eslint-plugin" (or alternatively remove the
"typescript-eslint" meta package and align individual packages to 8.59.2) so
only one source is present; prefer keeping the "typescript-eslint" meta package
for flat config, ensure the remaining entry version is 8.59.2, and update
package.json dependencies/devDependencies accordingly (look for
"typescript-eslint", "@typescript-eslint/parser", and
"@typescript-eslint/eslint-plugin" to locate the entries).
---
Outside diff comments:
In `@src-tauri/src/python_proc.rs`:
- Around line 50-55: The spawned child sets stderr to Stdio::piped() but the
PythonProcess struct never holds or reads stderr, which can deadlock; update the
Command invocation that creates `child` (the call using
`Command::new(python_path).args(args)`) to not pipe stderr—use `Stdio::null()`
to discard stderr (or `Stdio::inherit()` if you want it to go to the parent)
instead of `Stdio::piped()`, or alternatively store and read the child's stderr
in the `PythonProcess` struct if you intend to capture it.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 14e9b6f2-2d89-4496-b5fd-a6745d994e45
📒 Files selected for processing (5)
.github/workflows/ci.ymlpackage.jsonsrc-tauri/src/commands.rssrc-tauri/src/python_proc.rssrc-tauri/src/types.rs
- package.json: drop @typescript-eslint/{parser,eslint-plugin} individual deps
(the typescript-eslint meta package already brings them in transitively;
removing the duplicates eliminates the 8.14 vs 8.59 version mismatch)
- python_proc.rs: switch child stderr from Stdio::piped() to Stdio::inherit()
so the buffer cannot deadlock when nothing in PythonProcess reads it
https://claude.ai/code/session_01WSAGRj9p6dadwc1Ld5pbUC
Lint, typecheck, build, and test are run as separate jobs across the
TS/React, Rust (Tauri), and Python sidecar stacks so failures surface
per-stack. Tauri bundle build runs on main push and manual dispatch only;
PRs use cargo check to keep CI time bounded.
https://claude.ai/code/session_01WSAGRj9p6dadwc1Ld5pbUC
Summary by CodeRabbit
Chores
Refactor
Style
Chores / Python