Skip to content

fix(markdown-tooling): cut 1.16 to repair the Prettier gate and repin the lint action - #224

Merged
chrisdpurcell merged 1 commit into
testingfrom
mt116
Sep 1, 2026
Merged

chrisdpurcell merged 1 commit into
testingfrom
mt116

Conversation

@chrisdpurcell

@chrisdpurcell chrisdpurcell commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

Summary

markdown-tooling 1.16 (1.15 retained, byte-immutable):

  • AGENTS.md Prettier gate exits 123 on a clean tree because the corpus includes payload symlinks #209 — the rendered Prettier gate command filters symlinks out of the Git corpus (git ls-files -s -z … | sed -zn '/^120000 /!s/^[^\t]*\t//p' | xargs -0 -r npx prettier --check --), so it exits 0 on a clean checkout while checking exactly the same set of regular files. Git stays the corpus authority; sed rather than grep -v so the pipeline cannot fail under pipefail. The markdownlint recipe and the no-Git fallback needed no change (verified).
  • markdown-tooling 1.16: advance the markdownlint-cli2-action pin (managed workflow, needs a payload cut) #211DavidAnson/markdownlint-cli2-action pin advanced to 21c1be1b… # v24.2.0 (the old 6bf21b07… was v24.1.0 commented # v24); SHA and comment now name the same release.
  • Verify-path parity: _runner_label_reachability_warning no longer raises on a request that omits runner_labels (render already tolerated it); robustness for callers assembling their own request — the control-plane path always resolves the schema default.

Family root, top-level README pins, catalogs/5.toml (1.16 default), standards/catalog.md, projection, _BASELINE_REFv5.27.0, and CHANGELOG [Unreleased] entries included. Contract tests: test_markdown_tooling_1_16.py (new, includes a live reproduction of #209), retained flips, action-pin tests advanced.

Six tests stay red until release-time reconcile re-renders .github/workflows/lint-markdown.yml, AGENTS.md, CLAUDE.md, .standards/catalog.toml, .standards/lock.toml — the documented mid-train reconcile-lag class (same as test_markdown_tooling_1_13's docstring). reconcile --check names exactly those pending updates.

Governing work

Final: #209

The #211 pin advance ships in the same cut; #211 is closed separately with this PR as its evidence.

Acceptance coverage

Verification

  • check-release --baseline v5.27.0 --json → only PC-RELEASE-PROJECTION (stale projection; mid-train by design); classify_catalog_diff(v5.27.0 → tree, 5.27.0→5.28.0)minor, no findings.
  • validate-packages, validate-graph, render-catalog --check, sync-payload-projection --check → OK; ruff format/check → 0; basedpyright → 0.
  • Remote rexec -- … pytest <13 files> → 145 passed, 6 failed (the reconcile-lag set above, each with its blocking file named); tests/package_contract full → 1744 passed after npm ci on the worker.
  • Orchestrator re-ran on the leg branch: 1.16 + 1.15 contract files → 23 passed, 1 reconcile-lag failure (lint-markdown.yml byte diff at the pin); the new Prettier command → exit 0, "All matched files use Prettier code style!".

… the lint action

#209: the rendered local Prettier check handed Git's whole tracked selection to
Prettier, which refuses an explicitly named symbolic link with a non-zero status
while still reporting every real file clean. This repository's generated payload
projection tracks 2067 such paths, so the documented gate exited 123 on a fully
clean tree. The recipe now lists the corpus with `git ls-files -s` and drops
index mode 120000 before `xargs`; the checked set is byte-identical (2499 files
before and after, `comm` empty both ways), because a refused path was never read.
Excluding the generated directory wholesale was rejected: it names one
repository's layout instead of the property that breaks the tool. The
markdownlint recipe is untouched — markdownlint-cli2 lints a symlink's target —
and the no-Git fallback needs no filter, since Prettier skips a symlink reached
by its own glob expansion.

#211: `DavidAnson/markdownlint-cli2-action` advances to v24.2.0
(21c1be1b93ad9ed58fa840aacc3f279cde2a72ff, markdownlint-cli2 0.23.2) in the
self-hosted lint workflow resource, with the SHA and its comment agreeing.

The verify path also gains the render path's tolerance for an absent
`runner_labels`: `_runner_label_reachability_warning` fed
`config.get("runner_labels")` straight to its sequence coercion, so a config
omitting the key raised a provider ValueError and aborted verify and
drift-check instead of returning findings, while the same config rendered
cleanly. The shipped option schema declares `default: []`, so this closes the
gap for a caller that assembles the provider request itself.

1.16 moves both managed instruction blocks and the lint caller, so a
1.15-to-1.16 edge is declared and every older inbound route is retargeted and
now relocks all three contributions. 1.15's payload bytes are unchanged.

The installed `.github/workflows/lint-markdown.yml`, `AGENTS.md`, `CLAUDE.md`,
`.standards/catalog.toml`, and `.standards/lock.toml` only advance at the
release-prep reconcile, so the root-workflow parity, live action-pin,
consumer-catalog projection, and lock-resolution rows are red until then by
construction — CP-MODIFIED-MANAGED forbids moving an installed copy ahead of its
package.

Refs #209, #211
@chrisdpurcell
chrisdpurcell marked this pull request as ready for review September 1, 2026 12:10
@chrisdpurcell
chrisdpurcell merged commit d7c3001 into testing Sep 1, 2026
4 of 7 checks passed
@chrisdpurcell
chrisdpurcell deleted the mt116 branch September 1, 2026 12:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant