Files changed: - .gitignore - AGENTS.md - CHANGES.md - VERSION - docs/explanation/architecture.md - docs/how-to/README.md - docs/how-to/write-a-site-handler.md - docs/reference/commands/instance-health.md - docs/reference/commands/raw-material-and-uploads.md - docs/reference/configuration.md - instructions/dev/doc-pull-through.md - raw/CONTRACT.md - sites/CONTRACT.md - tools/CONTRACT.md - tools/README.md - tools/chemenu/commands/dist_cmd.py - tools/chemenu/commands/docs_verify.py - tools/chemenu/commands/doctor.py - tools/chemenu/commands/git_publish.py - tools/chemenu/commands/raw/fetch.py - tools/chemenu/ownership.py - tools/chemenu/sites/__init__.py - tools/chemenu/sites/data.py - tools/chemenu/sites/handlers/learn-microsoft-powershell-module.json - tools/chemenu/sites/handlers/learn-microsoft.json - tools/chemenu/sites/learn_microsoft.py - tools/chemenu/sites/site.schema.json - tools/chemenu/tests/test_dist_cmd.py - tools/chemenu/tests/test_doctor.py - tools/chemenu/tests/test_site_files.py - tools/chemenu/toc.py Co-Authored-By: Claude Code <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SnAJ7Z3CpVD3PRbN73QtU2
203 lines
7.0 KiB
Plaintext
203 lines
7.0 KiB
Plaintext
# Chemenu - .gitignore
|
|
#
|
|
# Rule for this file: `raw/`, `kb/`, `work/` and `sites/` 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/
|
|
|
|
# `wikitool raw capture`/`raw status` git cache (see raw/CONTRACT.md "Getting a
|
|
# repository in") - one bare repository per captured URL, refetched on demand.
|
|
# Derived and per-checkout; never committed, never shipped.
|
|
/tools/.wikitool_capture/
|
|
|
|
# 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
|
|
|
|
# The four per-feature settings files of earlier versions (publish-remote allowlist,
|
|
# telemetry, MCP `submit` limits, task tracker). Nothing reads them any more -
|
|
# `wikitool config migrate` moves them into the tiered settings below - but
|
|
# until it has run they may still hold a credential, so a leftover stays out of
|
|
# `publish`'s `git add -A`.
|
|
/.wikitool-remotes.json
|
|
/.wikitool-telemetry.json
|
|
/.wikitool-upload.json
|
|
/.wikitool-tasks.json
|
|
|
|
# Tool paths recorded by the preflight (tools/preflight.sh / .ps1, see
|
|
# instructions/preflight.md): the absolute paths of python, git, rg - and pwsh
|
|
# on Windows - as this machine has them. Per-checkout for the plainest reason of
|
|
# all: a path on one computer means nothing on another. Absent means the
|
|
# preflight has not run, and `tools/wikitool` refuses to start (exit 42).
|
|
/.wikitool-tools.json
|
|
|
|
# The checkout tier of the settings (tools/chemenu/settings.py): what is true
|
|
# only for this clone on this machine. Its committed counterpart, `wikitool.json`,
|
|
# holds the instance tier and must stay tracked - `docs verify` checks both.
|
|
# Secrets are in neither file; both hold only references to them.
|
|
/.wikitool-local.json
|
|
|
|
# Live-suite tracker profiles (Gitea #156): one file per tracker of the user's own that the
|
|
# live suite may be pointed at (`CHEMENU_LIVE_PROFILE=<name>`,
|
|
# instructions/dev/tracker-testing.md). They hold references to credentials, never the
|
|
# values, and are per-checkout for the same reason as `.wikitool-local.json`. A directory pattern, anchored: nothing in it is
|
|
# ever tracked, so no negation has to rescue anything.
|
|
/.wikitool-tasks.d/
|
|
|
|
# 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/<name>/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.
|
|
#
|
|
# File pattern, not directory pattern (Gitea #88): `/incoming/` used to
|
|
# exclude the directory itself, and rule 2 above means the negation block at
|
|
# the bottom could never re-include a file whose parent was already gone -
|
|
# so a fresh clone never had the directory at all, only
|
|
# `instructions/bootstrap.md` recreating it by hand. `/incoming/*` excludes
|
|
# everything inside instead, so `!/incoming/.gitkeep` right below actually
|
|
# applies: that one anchor file is trackable and ships with every clone.
|
|
# Nothing else dropped here is rescued by the same rule.
|
|
/incoming/*
|
|
!/incoming/.gitkeep
|
|
|
|
# MCP `submit` tool quarantine (see raw/CONTRACT.md "Getting a file in from
|
|
# outside" and tools/chemenu/upload.py). Material pushed by a caller that is
|
|
# not this terminal, before a human has reviewed any of it - stronger than
|
|
# `incoming/` above: not merely uncommitted, but read by no command in the
|
|
# ordinary pipeline. Unlike `incoming/` above (Gitea #88), this one keeps the
|
|
# directory form and gets no `.gitkeep`: the directory is created on demand
|
|
# by the one function that is allowed to write into it, and a checkout that
|
|
# never arms the `submit` tool never gets one - there is no fresh-clone case
|
|
# to cover here, since nothing reads this path before that function creates
|
|
# it. Never anchored back open by the content backstop below, same as
|
|
# `incoming/`.
|
|
/mcp-upload/
|
|
|
|
# Content backstop - keep this block last. Nothing under raw/, kb/, work/ or sites/ 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/**
|
|
!sites/**
|