# Zero-byte advisory-lock artifacts (narrative_craft.locking.advisory_lock)
# created transiently next to a character record while it holds the lock —
# never meant to be committed (N10, Wave D `8bf71db` tracked 14 of these by
# accident; 5 of them rode into the published wheel via examples/).
*.md.lock

# Local environments and generated caches.
.venv/
.wheel-smoke/
.sdist-smoke/
# ci.yml's doc-examples job unpacks an INSTALLED venv here, inside the
# workspace, and scripts/doc_example_smoke.py is meant to be reproducible
# locally. Untracked it would show up dirty for a release-time
# `release-check`; unexcluded (see EXCLUDED_PARTS in release_check.py and
# tests/test_release_boundary.py) its installed files, which are full of
# absolute user paths, would be walked by the boundary screens.
.doc-smoke/
__pycache__/
*.py[cod]
.pytest_cache/
.ruff_cache/

# Local dev-tool caches (regenerable; ruff/pytest already self-ignore via their
# own nested .gitignore — .coverage does not, so it needs an explicit rule).
.coverage
dist/
build/
*.egg-info/

# Portable repository metadata noise.
.DS_Store
