# Python
__pycache__/
*.pyc
*.pyo
*.pyd
*.egg-info/
dist/
build/
.eggs/
.venv/
venv/
.uv/

# Editor / assistant configs (launch.json names which local model to run)
.vscode/
.idea/
.claude/
.localcoder/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db
desktop.ini

# Test artefacts
.pytest_cache/
htmlcov/
.coverage
.coverage.*
coverage.xml
coverage.json

# Secrets / local state
*.env
.env.local

# localm user data (downloaded models, config - not source)
# (these live in ~/.localm/, not in the repo)
registry.json
config.json

# Portable per-clone data dir + custom-location marker (created by setup.bat)
home/
localm-home.cfg

# Throwaway LOCALM_HOME used for hermetic test runs from a worktree
.localm-test-home/
.test-home*/

# Install provenance ledger (what setup placed on disk; used by uninstall)
.localm-install.json

# Personal ComfyUI workflows (which models/encoders we use stays private -
# the committed *.example.json templates use the vanilla public stack)
localm/image_gen/flux_workflow.json
localm/music_gen/ace_workflow_local.json
localm/video_gen/wan_workflow_local.json

# Local screenshots / scratch media
*.png
# ...but ship the GUI PWA icons (rasterized from icon.svg for the manifest).
!localm/plugins/gui/static/icon-*.png
# ...and the README's own screenshots (GitHub-only - see release-manifest.toml,
# excluded from the release build.zip via the .github/ pattern).
!.github/images/*.png

# Internal development / planning docs - not public documentation
task.md
walkthrough.md
implementation_plan.md
flux_local_setup_guide.md
/TODO.md
/docs/plugin-architecture-plan.md
/docs/archive/

# Local integration tests - contain environment-specific paths and filenames
tests/test_flux_generation.py

# Local crash/chat logs kept out of the repo
chatlogs_errorlogs/
.commitmsg.txt

# Local-only issue tracker / scratch report (machine-specific notes, never
# public). DO NOT DELETE this directory or its contents - it is the user's
# working backlog and is not recoverable from git (it is ignored on purpose).
# See AGENTS.md "Protected local paths".
issues/

# Local by-hand test campaign: the exhaustive feature matrix, results, plans, and
# recorder. Local-only working data (like issues/), kept out of git. Lives in qa/
# (moved out of issues/). (The maintainer's test-instance logs/bug reports stay in
# issues/testinstance_home/ - those are bug reports, not test-campaign data.)
qa/

# Local-only working files - the agent's / maintainer's notes, worklogs, design
# docs, handoffs, status reports, scratch. NONE of this belongs on GitHub.
# THE RULE: every local working file lives in an ignored dir below (issues/, qa/,
# dev-notes/, scratch/) - put new notes / worklogs / plans / handoffs THERE, never
# at the repo root or in docs/. The filename globs are a backstop for stray files.
dev-notes/
scratch/
_qa_scratch/
*.worklog
*.workorder
*-worklog.md
*_worklog.md
*-workorder.md
*-handoff.md

# Native llama.cpp binaries - provisioned locally by `localm setup-llama`,
# never committed (large, GPU/platform-specific, license-encumbered).
runtime/localm_llama_runtime/lib/*
!runtime/localm_llama_runtime/lib/.gitkeep
!runtime/localm_llama_runtime/lib/.gitignore
runtime/*.egg-info/
runtime/build/

# Node (GUI JS tests)
node_modules/

# Playwright (GUI end-to-end tests) - run artifacts + installed browsers. The
# committed source is playwright.config.mjs + tests-e2e/; browsers install to a
# machine cache via `npx playwright install chromium`, not under the repo.
test-results/
playwright-report/
blob-report/
playwright/.cache/

# self-updater signing key (private Ed25519 key; NEVER commit)
update_signing_key.pem
*_signing_key.pem

# Native app launcher generated by `localm make-launcher`: a local install
# artifact with machine-specific paths (the exe/DLLs live in the gitignored .venv).
LocaLM.desktop
CLAUDE.md
AGENTS.md
RELEASE.md
release-manifest.toml
TODO.md
scripts/build_release.py
scripts/make_release.py
scripts/sign_release.py
scripts/release_verify.py
scripts/check_manifest.py
scripts/codeql/
scripts/tier2_gpu_split/
tests/test_release_manifest.py
tests/test_make_release.py

# Full internal changelog. CHANGELOG.md is served to users by the in-app
# changelog button, so it carries RELEASED, user-facing entries only; anything
# unreleased or internal is recorded here instead and promoted at release time.
# BOTH casings are listed on purpose: gitignore matching is case-SENSITIVE unless
# core.ignorecase is on, which it is by default on Windows and NOT on Linux/macOS.
# The file on disk is CHANGELOG-FULL.md, so the lower-case pattern alone matched it
# only on Windows - on any case-sensitive checkout it showed up untracked and one
# `git add -A` from being published on a public repo. Verified with a throwaway repo
# at core.ignorecase=false: the upper-case name was reported `?? CHANGELOG-FULL.md`.
CHANGELOG-full.md
CHANGELOG-FULL.md
