# Rust / Cargo
/target/
**/*.rs.bk

# IDE
.idea/
.vscode/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db

# WASM build output
crates/wasm/pkg/
packages/npm/web/
packages/npm/node/
packages/npm-export/web/
packages/npm-export/node/

# UniFFI binding generation scratch dir
# Created by `ruby.yml` (and any local invocation of the same generate
# step) when generating Ruby bindings. Files are immediately moved out
# and the directory removed; this entry only catches a stray dir from
# a failed mid-step run. See #1090.
.uniffi-tmp/

# Node.js
node_modules/
packages/playground/dist/
apps/desktop/dist/
# Generated by `apps/desktop/scripts/build-grammar-wasm.mjs` via
# `npm run prebuild|predev`. The grammar itself is the source of
# truth; committing the wasm would rot on every grammar change.
apps/desktop/public/*.wasm
apps/desktop/src/highlights-query.generated.ts
packages/tree-sitter-chordpro/tree-sitter-chordpro.wasm

# napi-rs prebuilt binaries and lock files (local build/publish artifacts)
crates/napi/**/*.node
crates/napi/package-lock.json
crates/napi/npm/*/package-lock.json

# Tauri code-gen output
apps/desktop/src-tauri/gen/

# Tools
.serena/

# Claude Code workflow state.
# Local-only orchestrator state (current phase, context, per-phase logs)
# produced by scripts/run-workflow.sh. The workflow *definitions* under
# .claude/workflows/ are committed; the runtime state under
# .claude/workflow-state/ is not. See .claude/workflows/README.md.
.claude/workflow-state/

# Claude Code session-level lock created by the harness when ScheduleWakeup
# is armed. The file lives at the repo root scope but is local to the session
# that wrote it. When the workflow orchestrator runs inside a session that has
# armed a wakeup, this file shows up as untracked and the preconditions phase
# treats it as a dirty tree and HALTs. The lock must not be committed.
.claude/scheduled_tasks.lock

# Playwright MCP server scratch dir
# Created at the repo root when the Playwright MCP server captures
# page snapshots (`page-*.yml`) or console logs (`console-*.log`)
# during a Claude Code session. Session-scoped debugging output, not
# source. See #2305.
.playwright-mcp/

# Playwright (`packages/playground/tests-e2e`) reports + traces.
# Uploaded by `playground-smoke.yml` on failure; otherwise local-only.
packages/playground/playwright-report/
packages/playground/test-results/

# Python (used by scripts/ and CI helpers, not a runtime dep)
__pycache__/
*.pyc

# Local scratch / reference assets (screenshots, sample PDFs)
tmp/
