# Format-ignore (but track) — files we keep byte-identical with their
# upstream / vendored source. oxfmt reads this file when pointed at it
# via `--ignore-path .config/.prettierignore` (default is the CWD's
# .gitignore + .prettierignore). The lint runner threads the flag in
# so the convention works from any working directory.
#
# `.claude/` is treated like node_modules — never formatted, never
# linted, no matter whether the files are git-tracked. Hooks, skills,
# vendored AST tooling, settings — all opaque to the formatter.
**/.claude/**
.claude/**

# `.agents/skills/` is the GENERATED cross-tool skill mirror
# (gen-agents-skills-mirror.mts copies .claude/skills/{fleet,repo}/<name>/ to a
# flat .agents/skills/<tier>-<name>/ for Codex + OpenCode). It's generated
# output, never hand-edited — and its source (.claude/) is itself unformatted-
# by-design above, so the byte-identical mirror must be ignored too, or the
# format gate flags copies of already-exempt content. The
# agents-skills-mirror-is-current check enforces it stays in sync with source.
**/.agents/**
.agents/**

# Everything under a `fleet/` segment is fleet-canonical: the wheelhouse
# authors it under `template/`, every other repo gets a cascaded copy
# (`.config/fleet/`, `scripts/fleet/`, `docs/agents.md/fleet/`, …). A
# downstream repo must NOT format-gate its cascaded copy — it can't fix it
# without forking; the fix lands in the wheelhouse's `template/` and
# cascades. So ignore every `fleet/` segment, then re-include the
# `template/` source the wheelhouse owns and formats. `.claude/` (above) is
# excluded outright — its cascaded copy is never formatted on either side.
**/fleet/**
!template/**/fleet/**

# Vendored acorn.wasm binary blob + the wasm-bindgen CJS glue. The
# glue (`acorn-bindgen.cjs`) is wasm-bindgen output we ship verbatim
# (after a single string rewrite of the wasm filename). It must NOT
# be touched by oxfmt or oxlint --fix: the
# `socket/export-top-level-functions` autofix rewrites internal
# helpers like `function getObject(idx) { ... }` into
# `export function getObject(idx) { ... }`, turning the CJS module
# into syntactically-ESM. The first `require()` then fails with
# `SyntaxError: Unexpected token 'export'`. Past incident: cascaded
# to two fleet repos before the break surfaced.
#
# The generators we DO own (`acorn-sync.{mts,cts}`,
# `acorn-embed.{mts,cts}`) are not listed here on purpose —
# the ultrathink build emits them already formatted+linted per fleet
# rules so they participate in the regular lint pass like any other
# JS source. Only the raw wasm blob + the bindgen glue skip the
# formatter. Marked `binary` in .gitattributes for the wasm blob too
# so PR diffs collapse.
template/.claude/hooks/fleet/_shared/acorn/acorn.wasm
template/.claude/hooks/fleet/_shared/acorn/acorn-bindgen.cjs
.claude/hooks/fleet/_shared/acorn/acorn-bindgen.cjs

# Vendored / upstream trees — kept byte-identical with their source
# of truth. Per CLAUDE.md "Untracked-by-default for vendored / build-
# copied trees": these are someone else's source, not ours, and the
# formatter would happily rewrite (e.g.) an upstream HTML test
# fixture or shipped third-party JS into our local style.
**/upstream/**
upstream/**
**/vendor/**
vendor/**
**/third_party/**
third_party/**
**/external/**
external/**

# gh-aw generated workflows. `gh aw compile` turns a `<name>.md` agentic
# workflow into a hardened `<name>.lock.yml`; that artifact is tool-owned and
# must stay byte-identical to the compiler output (the .md is the source of
# truth). Formatting it would drift it from `gh aw compile`.
**/.github/workflows/*.lock.yml
.github/workflows/*.lock.yml
