node_modules
dist/
# ANCHORED to the repo root: this ignores the vitest report directory
# (`npm run test:coverage` writes ./coverage), and nothing else. Unanchored,
# the pattern also swallowed `src/core/agent/coverage/` — a source module that
# would have been silently absent from every clone.
/coverage/
*.tgz
.DS_Store

# IDE
.idea/
.vscode/
*.swp
*.swo

# Environment
.env
.env.*

# Build artifacts
*.log
npm-debug.log*

# Docs build output
api-docs/

# Claude Code — local state stays ignored, but .claude/rules/ is TRACKED
# (path-scoped agent rules, e.g. backtracking.md, belong in the repo).
# Note: git can't re-include inside an excluded DIR, hence .claude/* not .claude/
.claude/*
!.claude/rules/

# Playwright
.playwright-mcp/

# Dependency locks are part of the build contract. The docs deployment uses
# `npm ci`, so both the library and docs app resolve exactly what was reviewed.

# Proposal scratchpads (drafts that get folded into real files)
*.proposed.md
docs/canonical-demo.md

# Local scratch artifacts
index-claude.html
*.scratch.*
# ANCHORED to the repo root — see the note above the other `coverage` rule.
/coverage
