# Chemenu - .gitignore # # Rule for this file: `raw/`, `kb/` and `work/` are the repository's content, and # a pattern that silently excludes one of their files is a data-loss bug - the # wiki keeps reporting the file as covered while `publish` never commits it. # So: # 1. Anything repo-local (build output, toolchain state) is anchored with a # leading `/` so it only matches at the repo root. # 2. Directory patterns (`foo/`) must ALWAYS be anchored: git cannot # re-include a file whose parent directory is excluded, so the negation # block at the bottom cannot rescue it. # 3. The negation block at the bottom is the backstop for file patterns. # 4. `reports/` is the exception in the other direction: it holds derived # output that must stay OUT of git, so its rule is required rather than # forbidden. # `tools/wikitool docs verify` enforces all of this with canary probes in both # directions. # OS generated files .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes ehthumbs.db Thumbs.db # Editor directories and files /.idea/ /.vscode/ *.swp *.swo # Temporary files *.tmp *.temp *~ # Logs (but keep kb/log.md) *.log !kb/log.md # Local environment files .env .env.local .env.*.local # Build artifacts *.exe *.dll *.so *.o *.a __pycache__/ *.pyc *.pyo *.pyd # Node.js /node_modules/ /package-lock.json npm-debug.log* # Python /venv/ /.venv/ /env/ /.env/ /tools/.venv/ /tools/.pytest_cache/ # wikitool session-scoped iteration/cost budget state (see AGENTS.md # "Gates") - local, per-session, never committed /tools/.wikitool_session/ # Go /go.mod /go.sum /bin/ # IDE *.iml *.ipr *.iws # Obsidian (if used locally) /.obsidian/ # Backup files *.bak *.backup *.orig # System files /core /tags /TAGS # Generated lint reports. Derived output: the structural half is recomputable # from the tree at any commit, so committing it would create a second, drifting # copy. The contract explaining that is the one file that must survive. /reports/* !/reports/CONTRACT.md # Per-checkout environment notes (harness, skills, MCP servers, connectors, # remotes - see AGENTS.md "Environment"). Optional, and specific to one # working copy: two clones of this repo are two different environments, so # committing one clone's answers would hand the other a file that is wrong # rather than missing. The `.template` beside it is tracked and ships with # `dist export`; this anchored pattern deliberately does not match it. /ENVIRONMENT.md # Publish-Remote Gate allowlist (see instructions/gates.md). Names the push # URLs *this* checkout may publish to, so it is per-checkout for exactly the # reason ENVIRONMENT.md above is: a committed copy would tell a private clone # that the public upstream is a legitimate target for its own content. Absent # means unrestricted; `doctor` reports which. /.wikitool-remotes.json # Telemetry opt-in/opt-out plus its two quantity caps (see EVALS.md and # tools/chemenu/telemetry/policy.py). Per-checkout for the same reason as the # allowlist above: the consent to write cleartext prompts to *this* disk # belongs to the checkout, not the corpus, so a second clone must not inherit # it. Absent means the installation-form default applies; `doctor` reports # which. /.wikitool-telemetry.json # Coverage output from `pytest --cov` (see .gitea/workflows/ci.yml). Derived, # like reports/: recomputable from any commit, and `publish` runs `git add -A`, # so an unignored htmlcov/ would commit itself on the next content publish. /tools/.coverage /tools/.coverage.* /tools/coverage.xml /tools/htmlcov/ # Published skills. `instructions//SKILL.md` is the source; these two # directories are copies made by `wikitool instructions sync` for the harnesses # that read them (`.agents/` for Copilot/Codex/Vibe, `.claude/` for Claude # Code). Committing a copy would create the same drifting second copy the # reports rule exists to prevent. A fresh clone publishes them once - see # instructions/bootstrap.md. /.agents/skills/ /.claude/skills/ # Ingest inbox (see raw/CONTRACT.md "Getting a file in"). A human # drops a file here - no subdirectory carries any meaning any more, an old # one is merely tolerated and ignored; `wikitool raw accept` promotes it into # `raw/`, computing the date-sharded directory and any bundle from what was # passed in one call. Unlike raw/ itself this must NEVER be committed - the # promotion is what makes a file immutable, not the drop - so this is the one # directory pattern in this file that is deliberately not anchored back open # by the content backstop below. /incoming/ # Content backstop - keep this block last. Nothing under raw/, kb/ or work/ may # be excluded by a pattern above; see the header note for why directory patterns # still have to be anchored rather than relying on these negations. !raw/** !kb/** !work/**