# Python
__pycache__/
*.py[cod]
*$py.class

# pytest
.pytest_cache/

# Hypothesis writes its own .hypothesis/.gitignore on first run, but
# that's regenerated only when the directory is missing — so a stale
# checkout that pre-dates the auto-ignore could still see contents
# show up under `git status`. Belt + suspenders.
.hypothesis/

# Coverage artifacts
.coverage
.coverage.*
htmlcov/
coverage.xml

# Build artifacts
dist/
build/
*.egg-info/

# User-local runtime data (library is user-specific; seeded on first run)
plasmid_library.json
parts_bin.json
primers.json
*.json.bak

# Stray plasmid files dropped in the working directory during testing.
# Scoped to the repo root only so the committed `tests/*.dna` /
# `tests/*.gb` fixtures stay tracked.
/*.dna
/*.gb
/*.gbk

# Plasmidsaurus result zips — local testing artefacts only, never committed.
# Pattern matches `<jobid>_results.zip` (e.g. `34XK5N_results.zip`) anywhere
# in the tree. WSL drops a `:Zone.Identifier` NTFS-stream sidecar next to
# any file downloaded via a browser; ignore those globally too.
*_results.zip
*:Zone.Identifier

# Tech-support scratch: where the maintainer drops user bug-report
# screenshots to share with Claude. Local-only — never committed.
# (A v1.0.3 `git add -A` swept two PNGs in here before this rule landed.)
TechSupport/

# Editor / OS
.vscode/
.idea/
*.swp
.DS_Store

# Claude Code local settings / cache
.claude/

# uv resolver lock — generated locally, not committed
# (contributed by Harley King in closed PR #7)
uv.lock
