__pycache__/
*.pyc
.journal/runtime/
.journal/record.json.lock
.journal/state.json*
# this project's own journal instance stays local: a clone must hold no .journal/ at all,
# because every puller before 1.12.0 walks into that folder when it exists
#
# NO TRAILING SLASH, and that is the whole point. `/.journal/` matches a DIRECTORY and
# nothing else, and in a worktree of this repo `.journal` is a SYMLINK to the main
# checkout's — so check-ignore returned 1, the shared journal showed as `?? .journal` in
# every worktree, and a `git add -A` there would have committed a symlink pointing at an
# absolute path on somebody's machine. Without the slash the pattern matches both.
/.journal

# AN ENVIRONMENT'S CONTENTS ARE THIS PROJECT'S DATA, never the package. The repo root IS
# the package source, so a stray `environments/` or `todo/` here is what a test or a
# mis-rooted command left behind — 11 such files were committed in 1.34.0 before this line.
#
# AND THE RECORD ITSELF, which that line missed. `record.json` was committed in the same
# 1.34.0 that added the two above, carrying `moved-to` and `moved-from` — environment names
# from `test_tracks`'s fixtures — so every clone of the package has shipped with a stranger's
# test data in its registry ever since. Same cause, same day, one file further out.
/environments
/todo
/record.json
/record.json.lock

# AND THE RUNTIME MARKS OF ANY PROCESS THAT RAN THE PACKAGE IN PLACE. `.journal/runtime/`
# is ignored above; the package root has its own `runtime/` for the same reason, and a
# session or a probe that imported `hook.py` from a checkout leaves a file in it. They are
# line numbers of one transcript on one machine and mean nothing anywhere else.
/runtime/*.json
# the upstream version check's cache, rewritten every fifteen minutes by whoever ran last
/runtime/upstream.cache

# the IDE's own folder, never this project's
/.idea
# the browser tool's snapshots and screenshots
/.playwright-mcp

# screenshots taken while checking the viewer: scratch, not the project
*.png
# the extension's icons are part of the package, png or not
!extension/icons/*.png
