Skip to content

Commit 882a975

Browse files
committed
fix: leave the markdown linter to the governance contract
The contract pins a markdown linter and resolves it through uvx. A copy installed per-machine is a second version to drift from that pin, not a convenience, so setup-user no longer installs one. shellcheck stays: project ci.sh scripts call it directly and nothing resolves it on demand. vale stays for the same reason — no registry ships it, and the PyPI package is a third-party repackage. Its version tracks upstream while a consuming CI may pin an older one, which the contract script now reports rather than leaving to be discovered.
1 parent 272d681 commit 882a975

2 files changed

Lines changed: 14 additions & 12 deletions

File tree

‎SPEC.md‎

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -516,21 +516,23 @@ skips already-installed Flatpaks, and reassembles the userbox with
516516

517517
### Lint gates reachable on PATH §spec:lint-gates-on-path
518518

519-
`setup-user` installs `shellcheck`, `vale` and `rumdl` into
520-
`~/.local/bin`.
519+
`setup-user` installs `shellcheck` and `vale` into `~/.local/bin`.
521520

522521
Rationale: project `ci.sh` scripts and the governance skills guard these
523522
tools with `command -v` so a machine without them still runs. The guard
524523
skips silently, so a local run reports success where the remote gate
525524
would fail. Installing them makes a local check mean what it appears to
526525
mean.
527526

528-
`rumdl` stands in for `markdownlint-cli2`, which requires Node. It reads
529-
`.markdownlint.json` and `.markdownlint-cli2.jsonc` directly and
530-
implements the same rule identifiers, but it is not bug-for-bug
531-
identical: line-length and list-indentation behaviour differ. Where a
532-
remote gate runs `markdownlint-cli2`, compare both before trusting the
533-
local result.
527+
No markdown linter is installed. The governance contract pins one and
528+
resolves it through `uvx`, so a copy installed here would be a second
529+
version to drift from the pin rather than a convenience.
530+
531+
`vale` is installed because nothing resolves it on demand: no registry
532+
ships it, and the PyPI package is a third-party repackage. The version
533+
here tracks upstream while a consuming project's CI may pin an older
534+
one, so the two can disagree; the contract script reports the version it
535+
ran for that reason.
534536

535537
### Systemd user unit for auto-assembly (chezmoi) §spec:userbox-auto-assembly
536538

‎build_files/tilefin.just‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ setup-user image="":
100100
# a local run reports success the remote gate would not
101101
# (§spec:lint-gates-on-path).
102102
if echo "$NATIVE_TOOLS" | grep -qx "lint gates"; then
103-
echo " lint gates (shellcheck, vale, rumdl)..."
103+
echo " lint gates (shellcheck, vale)..."
104104
# Upstream release binaries. The PyPI repackages of shellcheck and
105105
# vale are third-party; upstream is one trust hop fewer.
106106
SC_URL=$(curl -fsSL https://api.github.com/repos/koalaman/shellcheck/releases/latest \
@@ -113,9 +113,9 @@ setup-user image="":
113113
curl -fsSL "$VALE_URL" | tar xz -C /tmp vale
114114
install -Dm755 /tmp/vale "$HOME/.local/bin/vale"
115115
rm -f /tmp/vale
116-
# rumdl reads markdownlint and markdownlint-cli2 config files and
117-
# needs no Node. PyPI is its upstream distribution channel.
118-
"$HOME/.local/bin/uv" tool install rumdl
116+
# No markdown linter here on purpose: the governance contract pins
117+
# one and resolves it through uvx, so a copy installed per-machine
118+
# would only be a second version to drift.
119119
fi
120120
fi
121121

0 commit comments

Comments
 (0)