[codespell]
# Skip vendored assets — minified JS/CSS uses short identifiers (te, ot, openEnd)
# that codespell misidentifies as misspellings but are correct as-is.
#
# IMPORTANT — codespell parses ``.codespellrc`` via Python's
# ``configparser`` then re-emits each key as ``--<key> <value>`` on the
# command line, where ``--skip`` has ``action="append"``. Two consequences:
#
#   * Multi-line INI continuation (``skip = a\n       b``) is read as ONE
#     value with embedded newlines. codespell's
#     ``flatten_clean_comma_separated_arguments`` then has only ONE
#     element to split on commas — the embedded-newlines pattern never
#     matches anything because paths contain no ``\n``. Verified failure
#     mode on mdinject 2026-09-21: ~4000 vendor hits came back after
#     converting the single-line ``*vendor/*`` into a multi-line entry.
#
#   * Duplicate ``skip =`` keys raise ``configparser.DuplicateOptionError``
#     at read time, so we can't list each pattern on its own line.
#
# The supported format is comma-separated values on a single line. Order
# doesn't matter; ``fnmatch.fnmatch`` does whole-string matching so the
# trailing ``*`` after each comma-separated value is the "match anything
# after" anchor.
#
# Vendor — covers both ``mdinject/assets/vendor/...`` and
# ``app/MdInjectApp/Resources/vendor/...`` (and any future vendor path
# at any depth) via ``*vendor/*``. ``fnmatch``'s ``*`` matches across
# ``/``, so the leading ``*`` lets the prefix be anything.
#
# Worktrees — ``.worktrees/`` and ``.claude/worktrees/`` host sibling-
# project checkouts (e.g. ``ghostty-spike``, ``w4-claude-md-breadcrumb``).
# codespell's vendored JS in their nested ``node_modules/`` produces
# false-positive misspellings (xterm.js's ``shiftIn`` → ``shifting`` etc.).
# We exclude the WORKTREE directory roots so ``os.walk()`` calls
# ``dirs.clear()`` on match and never descends. One pattern per walk
# depth — first-level dirs (.worktrees, .claude/worktrees) plus their
# first subdir (*/<name>) — is enough; deeper levels are skipped by
# ``dirs.clear()`` on the parent match.
skip = *vendor/*, .worktrees, .worktrees/*, .claude/worktrees, .claude/worktrees/*, package-lock.json, *htmlcov/*
# Bodai-wide ignore list — kept in sync with mahavishnu/.codespellrc
# ND = Neighbor Discovery (IPv6 protocol, used in scapy/MCP packet tooling).
# iTerm = Apple terminal app proper noun.
ignore-words-list = iTerm, ND, inout
