# Dependency / build output
node_modules/
**/node_modules/
dist/
**/dist/
.astro/
**/.astro/
coverage/
**/coverage/

# Exact upstream distribution; hash-pinned by generated-content-ci.test.mjs.
scripts/vendor/js-yaml-4.1.1/js-yaml.mjs

# Lockfiles + archives
pnpm-lock.yaml
package-lock.json
yarn.lock
*.lock
*.tgz

# Excluded trees (per .gitignore intent)
backups/
archive/
_PRESERVE_MIGRATION/
.firebase/
.beads/
.husky/_/
.venv/
workspace/
redirects/
planned-skills/
claudes-docs/

# Auto-generated catalogs (never hand-edit, never reformat)
.claude-plugin/marketplace.json
marketplace/src/data/catalog.json
marketplace/src/data/skills-catalog.json
marketplace/src/data/unified-search-index.json
marketplace/src/data/cowork-manifest.json
marketplace/src/data/npm-stats.json
000-docs/813-RA-AUDT-saas-tutorial-lattice.md

# Source of truth — DO NOT reformat. Hand-edit only, formatting is load-bearing.
# A CI guard (scripts/check-catalog-format.py) rejects PRs that collapse the
# multi-line keyword arrays or otherwise reformat existing entries.
.claude-plugin/marketplace.extended.json


# Curated external mirrors (frozen from sync — upstream bytes, never reformat).
# Explicit even though plugins/ below already covers them: these two must stay
# byte-identical to their pinned fork SHAs (see sources.lock.json).
plugins/mcp/servicegraph/
plugins/productivity/schedule-after-usage-reset/

# Out-of-scope subtrees (own formatters / large surface area — handle in follow-up PRs)
marketplace/
plugins/
freshie/
functions/
# Legacy top-level skill content (same class as plugins/ above — authored SKILL.md
# frontmatter/body, not prettier-managed source). Keeps compliance remediation
# (tags/compatibility) from triggering a whole-body reformat sweep.
skills/
packages/analytics-daemon/
packages/analytics-dashboard/
packages/plugin-validator/
tests/e2e/

# Python
*.py
**/*.py

# Misc generated
*.log
asset_generation*.log
