# Build / packaging
build/
dist/
*.egg-info/
.eggs/

# Python
__pycache__/
*.py[cod]
.venv/
venv/
.mypy_cache/
.ruff_cache/
.pytest_cache/

# OS
.DS_Store
Icon?

# Maintainer-only checks live outside this repository: they read an out-of-band
# identifier list and a private directory, so published they would serve one
# person while documenting that person's setup. Listed here so that a stray copy
# cannot be committed back by accident.
/scripts/privacy-scan.py
/tests/test_privacy_scan.py

# A workspace must never live inside the engine repo. These are here so that a
# stray local experiment cannot be committed by accident.
#
# Every one of these carries a leading slash, and on the last two that is the
# whole point rather than a house style. A pattern with no slash in the middle
# matches at every depth, and this package ships `src/nextbrief/prompts/` and
# `src/nextbrief/schema/` as tracked data -- so a bare `schema/`, aimed at the
# workspace directory `init` creates here, would instead stop git watching four
# files it had no quarrel with. Nothing shows in `git status` when that happens.
# Same near miss as `.claude/` against `.claude-plugin/` below;
# tests/test_gitignore.py checks after the fact that no tracked file went under.
/registry.jsonc
/config.jsonc
/backlog/
/state/
/log/
/prompts/
/schema/
/BRIEF.md
/BRIEF.html

# Agent-tool state, none of it publishable. `nextbrief init` scaffolds
# `.claude/settings.json` carrying absolute home paths, and an agent that runs
# init inside this repo leaves one here. Until this line, `.claude/` was held
# back only by a global excludesFile and .git/info/exclude -- neither of which
# travels with a clone, so on anyone else's machine the protection was not
# there at all. The shipped plugin lives in `.claude-plugin/`, which this
# pattern does not match.
.claude/

# Generated codebase knowledge graph (understand-anything). Unlike `.claude/`
# above this carries no absolute paths -- every filePath in it is repo-relative
# -- so it is ignored for staleness rather than for privacy: it is derived
# entirely from the tree, runs to ~1MB, and `meta.json` pins it to one commit
# hash. Committed, it would go quietly wrong on the next commit that touched a
# tracked file, and nothing in `git status` would say so. Regenerate with
# `/understand` instead. Anchored for the reason given above: the tool creates
# it at the repo root only, and a bare pattern would match at every depth. The
# second line is the tool's legacy directory name, kept so an older plugin
# version cannot leave an unignored copy behind.
/.ua/
/.understand-anything/

# Icon build scratch
packaging/icon/__pycache__/
