# 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 — ignore local/secret state by default, explicitly SHARE the
# rest so it version-controls with the code (the private `sync` remote is the
# laptop-to-laptop source of truth; never let secrets through here).
.claude/*
!.claude/skills/
# `.claude/memory/` is its OWN private repo (<owner>/splicecraft-memory),
# symlinked in — NEVER track it here: THIS repo's master is pushed to the
# PUBLIC release origin, and memory holds private notes.
.claude/memory/
# Belt-and-suspenders: never commit secrets / machine-local state, even if a
# future allow-rule above would otherwise sweep them in.
.claude/settings.local.json
.claude/.credentials.json
.claude/scheduled_tasks.lock

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