Use when a Rust model or Tauri command is added or changed, when src/types/index.ts or src/lib/ipc.ts is modified, when tsc fails near IPC boundaries, or when reviewing a PR that touches the frontend/backend boundary in this Tauri project.
Maintenance/audit skill — detects and fixes drift between Rust models and TS types. Does not design features or add screens.
Syncs across three layers:
invoke() calls must live in src/lib/ipc.tssrc/types/index.ts must mirror src-tauri/src/models/src/lib/ipc.mock.ts must match the real IPC surface closely enough for testsinvoke() directly from components#[serde(rename_all = "camelCase")] means source_path → sourcePath in TS — use this rule to derive all TS field names from Rust struct fieldssnake_case parameter names to in JS at the call site: in Rust → in camelCaseproject_id: String{ projectId }invoke()src-tauri/src/models/**/*.rssrc-tauri/src/commands/**/*.rssrc/types/index.tssrc/lib/ipc.tssrc/lib/ipc.mock.ts#[tauri::command], confirm a wrapper exists in src/lib/ipc.ts.project_id → projectId). This is the most common drift source.src/lib/ipc.mock.ts exports the same callable surface as src/lib/ipc.ts.invoke( usage outside src/lib/ipc.ts.# Find all Tauri commands, model structs/enums, and stray invoke() calls
rg -n "#\[tauri::command\]|pub struct|pub enum|invoke\(" src src-tauri
# TypeScript check (required)
npx tsc --noEmit
# Rust compile check (required when any Rust is touched)
cargo check
Fix mismatches silently as you go — editing TS types, wrappers, and the mock is within scope. Report what you changed.
Stop and ask before fixing if:
Report only: