Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 10 additions & 9 deletions .github/workflows/gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -331,14 +331,15 @@ jobs:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup Node
# Pinned Node is enough for markdownlint-cli2; no bun needed.
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '22'

- name: Install markdownlint-cli2
run: npm install -g markdownlint-cli2@0.18.1
- name: Install toolchain via three-way-parity script (GOVERNANCE §24)
# Installs markdownlint-cli2 via mise (pinned in .mise.toml as
# `npm:markdownlint-cli2`). Single source of truth — same
# version on dev laptops + CI runners. Prior step hardcoded
# the version in this workflow (0.18.1) which drifted
# behind the pin discipline the rest of the lints use and
# violated Aaron's "update declarativly everywhere"
Comment thread
AceHack marked this conversation as resolved.
# directive (2026-04-24).
Comment thread
AceHack marked this conversation as resolved.
run: ./tools/setup/install.sh

- name: Run markdownlint
run: markdownlint-cli2 "**/*.md"
run: mise exec -- markdownlint-cli2 "**/*.md"
Comment thread
AceHack marked this conversation as resolved.
15 changes: 14 additions & 1 deletion .markdownlint-cli2.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,20 @@
// IS author-controlled and could lint clean, but applying
// the ignore to the whole directory keeps the rule simple
// (one path, not 10 file-specific entries).
"docs/amara-full-conversation/**"
"docs/amara-full-conversation/**",
// PR-preservation archive (tools/pr-preservation/archive-pr.sh
// output) is verbatim preservation of PR bodies + review-thread
// content. By design, the archive carries the input markdown
// structure unchanged (blank-line-around-lists, duplicate
// "Pull request overview" headings from GitHub's auto-preamble,
// consecutive blank lines from the source, etc.). Reformatting
// to satisfy MD032/MD024/MD012 would violate the verbatim-
// preservation contract (Otto-250 + Otto-279 pr-preservation IS
// a history surface). The scripts that generate these files
// already ship their own hygiene pass; the archive output is
Comment thread
AceHack marked this conversation as resolved.
// not author-controlled prose.
Comment thread
AceHack marked this conversation as resolved.
"docs/pr-discussions/**",
"docs/pr-preservation/**"
],
"noBanner": true,
"noProgress": true,
Expand Down
7 changes: 7 additions & 0 deletions .mise.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,13 @@ actionlint = "1.7.12"
# slim + ubuntu-24.04-arm runners don't ship shellcheck pre-
# installed, so declarative pin here ensures dev/CI parity.
shellcheck = "0.11.0"
# markdownlint-cli2: markdown linter. Declarative pin per Aaron's
# "update declarativly everywhere" directive (2026-04-24); moves
Comment thread
AceHack marked this conversation as resolved.
# the version off a hardcoded `.github/workflows/gate.yml` line
Comment thread
AceHack marked this conversation as resolved.
# and into the single source of truth the rest of the toolchain
# already uses. 0.22.1 (npm latest as of 2026-04-24); prior pin
# was 0.18.1 inlined in gate.yml.
"npm:markdownlint-cli2" = "0.22.1"
Comment thread
AceHack marked this conversation as resolved.
Comment thread
AceHack marked this conversation as resolved.

[settings]
# `python-build-standalone` (upstream for mise's python plugin)
Expand Down
Loading