npins/default.nix linguist-generated

# APM-generated runtime and lock outputs.
AGENTS.md linguist-generated
CLAUDE.md linguist-generated
.mcp.json linguist-generated
opencode.json linguist-generated
apm.lock.yaml linguist-generated
.claude/** linguist-generated
.claude/launch.json -linguist-generated
.agents/** linguist-generated
.codex/** linguist-generated
.opencode/** linguist-generated

# Exclude from `git archive` / GitHub source tarballs (what `github:…` flake
# inputs unpack into ~/.cache/nix/tarball-cache).
#
# The app flake's build `src` is already a packages-only fileset
# (nix/workspace.nix); website has its own flake. Without export-ignore, every
# consumer still downloads the full monorepo (~3k members / ~44MB) and can hit
# EMFILE under macOS's default soft maxfiles (256).
/website export-ignore
/docs export-ignore
/.claude export-ignore
/.agents export-ignore
/.codex export-ignore
/.opencode export-ignore
/.agency export-ignore
/.apm export-ignore
/agents export-ignore
/.github export-ignore
/ci export-ignore

# Generated Astro output, committed for in-app (Code tab) preview of the Atlas.
# dist/ is a pure function of src/, so a 3-way text merge of the HTML is never
# meaningful — it only splatters conflict markers into generated pages. `-merge`
# keeps our side intact (no markers) and flags the path conflicted; resolve by
# rebuilding (`just atlas::build && git add docs/atlas/dist`). The atlas-sync CI
# gate is the backstop: a stale dist/ fails loudly, so picking a side is safe.
docs/atlas/dist/** linguist-generated
docs/atlas/dist/** -diff
docs/atlas/dist/** -merge

# Release notes are append-only — every PR adds a line under Unreleased. `union`
# auto-resolves concurrent appends (keep both sides) so PRs never conflict here.
website/src/content/changelog/unreleased.mdx merge=union
