# Dependency directories
node_modules/

# Python bytecode
__pycache__/
*.py[cod]

# Build output
dist/
dist-locked-backup-*/
/out/
/.emsdk/
_site/
.jekyll-cache/
.jekyll-metadata

# Tests
/tests/*
!/tests/cjs/
/tests/cjs/*
!/tests/cjs/electron-openhome-control-host.test.cjs
!/tests/cjs/electron-openhome-main-integration.test.cjs
!/tests/cjs/electron-openhome-media-gateway.test.cjs
!/tests/cjs/electron-openhome-sidecar-manager.test.cjs
!/tests/esm/
/tests/esm/*
!/tests/esm/audio-session-type-controller.test.mjs
!/tests/esm/benchmark-score.test.mjs
!/tests/esm/benchmark-score-page.test.mjs
!/tests/esm/auto-pan-auto-filter-effect-local.test.mjs
!/tests/esm/cassette-artifacts.test.mjs
!/tests/esm/chorus-modulation.test.mjs
!/tests/esm/dsp-automation-catalog.test.mjs
!/tests/esm/dsp-bandwidth-extender-port-v1.test.mjs
!/tests/esm/dsp-bluetooth-sbc-audioworklet-gate.test.mjs
!/tests/esm/dsp-codec-simulator-ui-conventions.test.mjs
!/tests/esm/dsp-cmake-security-contract.test.mjs
!/tests/esm/dsp-denormal-protection.test.mjs
!/tests/esm/dsp-bluetooth-sbc-production-equivalence.test.mjs
!/tests/esm/dsp-bluetooth-sbc-simulator-port-v1.test.mjs
!/tests/esm/dsp-bluetooth-sbc-thread-cpu-gate.test.mjs
!/tests/esm/dsp-g726-adpcm-simulator-port-v1.test.mjs
!/tests/esm/dsp-g726-performance-inputs.test.mjs
!/tests/esm/dsp-gsm-full-rate-audioworklet-gate.test.mjs
!/tests/esm/dsp-gsm-full-rate-simulator-port-v1.test.mjs
!/tests/esm/dsp-md-simulator-port-v1.test.mjs
!/tests/esm/dsp-mp3-codec-simulator-port-v1.test.mjs
!/tests/esm/dsp-phase-select-eq-port.test.mjs
!/tests/esm/dsp-pitch-shifter-hq-port-v1.test.mjs
!/tests/esm/dsp-sw-radio-simulator-ssb-v1.test.mjs
!/tests/esm/dsp-tube-simulator-listening-presets-v1.test.mjs
!/tests/esm/dsp-tube-simulator-output-safety-v1.test.mjs
!/tests/esm/dsp-tube-simulator-port-v1.test.mjs
!/tests/esm/dsp-tube-simulator-standard-v1-fixture.test.mjs
!/tests/esm/dsp-tube-simulator-wasm-telemetry-v1.test.mjs
!/tests/esm/fifteen-band-geq-graph.test.mjs
!/tests/esm/group-delay-peq-design.test.mjs
!/tests/esm/group-delay-peq-plugin.test.mjs
!/tests/esm/room-eq-group-delay-analysis.test.mjs
!/tests/esm/measurement-multichannel-model.test.mjs
!/tests/esm/measurement-channel-legend.test.mjs
!/tests/esm/measurement-store-multichannel.test.mjs
!/tests/esm/measurement-impulse-response-import.test.mjs
!/tests/esm/plugin-preset-store.test.mjs
!/tests/esm/plugin-preset-dialog.test.mjs
!/tests/esm/plugin-system-presets.test.mjs
!/tests/esm/js-engine-hash-helper.mjs
!/tests/esm/media-session-anchor.test.mjs
!/tests/esm/modulation-frequency-shifter.test.mjs
!/tests/esm/modulation-plugin-host-contracts.test.mjs
!/tests/esm/modulation-rotary-speaker.test.mjs
!/tests/esm/openhome-handshake-smoke.test.mjs
!/tests/esm/openhome-playback-adapter.test.mjs
!/tests/esm/openhome-windows-workflow-contract.test.mjs
!/tests/esm/phase-select-eq-ui.test.mjs
!/tests/esm/phaser-modulation.test.mjs
!/tests/esm/pipeline-analyzer-analysis-core.test.mjs
!/tests/esm/pipeline-analyzer-controller.test.mjs
!/tests/esm/pipeline-analyzer-host.test.mjs
!/tests/esm/pipeline-analyzer-result-adapter.test.mjs
!/tests/esm/pipeline-analyzer-snapshot.test.mjs
!/tests/esm/pipeline-analyzer-tsp.test.mjs
!/tests/esm/pipeline-analyzer-ui.test.mjs
!/tests/esm/pipeline-analyzer-worker.test.mjs
!/tests/esm/plugin-execution-capabilities.test.mjs
!/tests/esm/plugin-search-aliases.test.mjs
!/tests/esm/plugin-ui-language.test.mjs
!/tests/esm/space-key-guard.test.mjs
!/tests/esm/spectrum-overlay-analyze.test.mjs
!/tests/esm/spectrum-overlay-attach.test.mjs
!/tests/esm/spectrum-overlay-browser.test.mjs
!/tests/esm/spectrum-overlay-docs.test.mjs
!/tests/esm/spectrum-overlay-module.test.mjs
!/tests/esm/spectrum-overlay-registry.test.mjs
!/tests/esm/spectrum-overlay-worklet.test.mjs
!/tests/esm/tape-artifacts.test.mjs
!/tests/esm/tracked-sources-are-self-contained.test.mjs
!/tests/esm/channel-16ch-baseline.test.mjs
!/tests/browser/
/tests/browser/*
!/tests/browser/g726-resume-wasm-smoke.fixture.html
!/tests/browser/g726-resume-wasm-smoke.spec.mjs
!/tests/browser/codec-resume-wasm-smoke.harness.mjs
!/tests/browser/bluetooth-sbc-resume-wasm-smoke.fixture.html
!/tests/browser/bluetooth-sbc-resume-wasm-smoke.spec.mjs
!/tests/browser/gsm-full-rate-resume-wasm-smoke.fixture.html
!/tests/browser/gsm-full-rate-resume-wasm-smoke.spec.mjs
!/tests/browser/mp3-resume-wasm-smoke.fixture.html
!/tests/browser/mp3-resume-wasm-smoke.spec.mjs
!/tests/browser/md-simulator-resume-wasm-smoke.fixture.html
!/tests/browser/md-simulator-resume-wasm-smoke.spec.mjs
!/tests/helpers/
/tests/helpers/*
!/tests/helpers/app-auto-start-smoke-child.mjs
!/tests/helpers/cjs-module-utils.cjs
!/tests/helpers/cue-directory-stage-repository.mjs
!/tests/helpers/fake-dom.mjs
!/tests/helpers/global-test-utils.mjs
!/tests/helpers/openhome-handshake-smoke-child.mjs
!/tests/helpers/pipeline-analyzer-node-worker.mjs
!/tests/helpers/sqlite-test-utils.mjs
!/tests/helpers/spectrum-overlay-harness.mjs
!/tests/helpers/channel-16ch-baseline.mjs
!/tests/fixtures/
/tests/fixtures/*
!/tests/fixtures/tube-simulator/
/tests/fixtures/tube-simulator/*
!/tests/fixtures/tube-simulator/p3-baseline-v1/
!/tests/fixtures/tube-simulator/lineamp-v1/
/tests/fixtures/tube-simulator/lineamp-v1/*
!/tests/fixtures/tube-simulator/lineamp-v1/fir-coefficients-v1.json
!/tests/fixtures/channel-16ch-baseline-v1/

!/tests/tools/
/tests/tools/*
!/tests/tools/tube-simulator-lineamp/
/tests/tools/tube-simulator-lineamp/*
!/tests/tools/tube-simulator-lineamp/calibrate-listening-presets.mjs
!/tests/tools/tube-simulator-lineamp/derive-phase-b-anchors.mjs
!/tests/tools/tube-simulator-lineamp/fir-coefficient-contract.mjs
!/tests/tools/tube-simulator-lineamp/generate-phase-b-feedback-table.mjs
!/tests/tools/tube-simulator-lineamp/generate-stability-manifests.mjs
!/tests/tools/tube-simulator-lineamp/measure-phase-b-break-loop.mjs
!/tests/tools/tube-simulator-lineamp/phase-b-design.mjs
!/tests/tools/tube-simulator-lineamp/phase-b-transition-contract.mjs
!/tests/tools/tube-simulator-lineamp/product-runtime.mjs

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Environment variables
.env

# OS specific files
.DS_Store
Thumbs.db

# Editor directories and files
.cursor/
.vscode/
.idea/
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

# Local agent instructions
.claude/
AGENTS.md
CLAUDE.md

# Electron specific
.electron-builder.env

# Temporary files. tmp/ is permanently local-only: never track or whitelist
# anything under it
/tmp/
.tmp/
.temp/
.qodo
.npm-cache/
.worktrees/
