# Byte-compiled / cache
__pycache__/
*.py[cod]
*$py.class
.pytest_cache/
.mypy_cache/
.ruff_cache/

# Distribution / packaging
build/
dist/
*.egg-info/
.venv/
venv/

# DexAtlas runtime data
.dexatlas/
workspace/
*.db
*.sqlite
*.sqlite3

# Test + coverage artifacts
.coverage
.coverage.*
htmlcov/
coverage.xml
junit*.xml

# Analysis output — never commit decompiled third-party code
out/
_decompile/
jadx-out/
apktool-out/
smali/
resources/
*.apk
*.aab
*.apks
*.dex
*.idsig
*.so
report.html
report.md

# Intermediate files from the demo renderer. scripts/render-demo.py cleans up after
# itself, but a crashed run leaves these behind.
.demo-capture.txt
.demo-tmp/
tmp*/

# The exceptions: DexAtlas's own test applications, built from the smali sources under
# examples/ and rebuildable with scripts/build-test-apks.sh. They are first-party,
# contain no third-party code, and a stranger needs them to run an analysis after
# cloning. The rules above stay in force for every other APK and smali tree.
!examples/*/
!examples/*/*.apk
!examples/*/res/
!examples/*/res/**
!examples/*/smali/
!examples/*/smali/**
!examples/*/smali_classes*/
!examples/*/smali_classes*/**

# Secrets
.env
.env.*
!.env.example
*.pem
*.key
secrets.json

# Editors / OS
.idea/
.vscode/
*.swp
.DS_Store
Thumbs.db

# Local tooling state — Claude Code's worktrees and settings live here. A worktree
# is a full copy of the repository, so leaving it untracked-but-unignored would
# let a stray `git add .` commit a second copy of the whole project.
.claude/

# The project's scratch area: the analysis backends, the helper scripts, the
# temporary files the suite writes, and the leftovers moved off the system
# drive. It is local state, never committed, and it lives inside the project
# folder so that nothing about this project lands on the system drive.
.scratch/
