target/
# The build and the test model (tools/testdata: model.q4, stories15M.bin, tokenizer.bin). No trailing
# slash on these two: in a sandboxed worktree they are symlinks into a scratch directory, and a
# pattern ending in `/` matches only a real directory.
/tools/target
/tools/testdata
.superpowers/
# Claude Code keeps its per-clone config in .claude/, and that is the participant's own — settings,
# hooks, local permissions. skills/ stays trackable for the repository's own development skills;
# the zip's .claude/skills/ is a copy of agents/.agents/skills/, made by tools/scripts/package.py.
/.claude/*
!/.claude/skills/
# What setup.sh / setup.ps1 and `init` put at the root (in a clone: from DOJO_LOCAL_BIN and
# DOJO_LOCAL_MODEL), plus the temp names they copy to. main.zip carries them; the
# repository never does.
/transformer-dojo
/transformer-dojo.exe
/model.q4
/.setup.tmp.*

# The participant's work: dojo/parts.json and everything their agent wrote for it, in their
# language — the model library, the part scripts, any build output. One directory, so what the
# agent made is plain to see beside the workshop's own files; theirs, never the workshop's
# commits, and out of the dry run's snapshot.
/dojo/

# The runner's own log of what ran — one JSON line per `transformer-dojo init` and per part
# `test` runs (docs/test-contract.md §8.8), which `transformer-dojo status` and the dry run read.
# Participant state like parts.json, but a clock-stamped machine log, not the human's work: it
# stays out of their commits, and out of the dry run's snapshot (built from `git ls-files`) when
# an organizer has run tests at the root.
/.dojo/

# direnv's cache of the flake's dev shell.
/.direnv/

# opencode's per-machine config: which LLM it talks to. Never committed; in a worktree the flake's
# dev shell links it to the main checkout's copy on entry.
/opencode.json

# test-e2e.py imports e2e.py in-process for its pure checks; CPython caches the bytecode here.
/tools/scripts/__pycache__/

# tools/scripts/e2e.py's workspaces, one directory per dry run named by its config
# (<timestamp>-<harness>-<lang>-<session_lang>[-<model>][-<effort>]). The snapshot inside each is
# built from `git ls-files`, so nothing here can leak into a later run. No trailing slash: a
# sandboxed worktree links it to a scratch directory.
/e2e-runs
