**/__pycache__
**/.idea
**/*.pyd
**/dist
**/*.egg-info
*.py[cod]
.venv/
.pytest_cache/
.ruff_cache/

.coverage*
coverage.xml
coverage.json
htmlcov/

# natmod build byproducts: py/dynruntime.mk's own `all: $(MOD).mpy` rule
# writes the merged .mpy and mpy_ld.py's cache directly into module-dir
# (not under build/), and `dist` (see examples/template/natmod/Makefile)
# copies it into build/<arch>*/ for cibuildmp to collect from. .obj/ is
# where that same Makefile scopes make's own per-arch intermediate objects
# (BUILD=.obj/$(ARCH)) -- kept out of build/ on purpose, see its comment.
**/build
.obj/
*.mpy
.mpy_ld_cache

# cibuildmp's own outputs and caches
mpyhouse/

# Claude Code session scratch (agent worktrees, local state) -- but not
# .claude/skills/, which is checked in on purpose so an agent in a future
# session gets the same repo-specific knowledge (e.g. docker-local) rather
# than re-deriving it from scratch every time.
.claude/*
!.claude/skills/

# Build scratch inside the examples. `.wabt/` is what wasm2mpy's own
# pre-build-command unpacks a wabt .deb into (record 0050 moved that step
# into the container, where it cannot apt-install); `.mpy_ld_cache-*` is
# mpy_ld.py's own per-arch cache.
examples/*/.wabt/
examples/*/.mpy_ld_cache-*/

# lv_binding_micropython itself (LVGL + pycparser submodules included) --
# never vendored, same as examples/usercmodule's own real upstream source.
# .github/workflows/verify-lv-binding-micropython.yml clones it fresh every
# run; record 0097 is the account of why this directory exists at all.
examples/lv_binding_micropython/lv_binding_micropython/
