Give Markdown its own job - #996
Conversation
`Run Markdown Lint` was the thirteenth step of `check`, behind clippy, rustdoc, ruff and biome, so any of those failing hid the Markdown result: the lint never ran, and a change that broke two things was told about one. The drift check added in #993 sat at the end of the same twenty-step job, rescued from that only by its own guard. Every other consumer of aicers/agent-instructions already keeps a standalone `Markdown` job for exactly this reason; multifold's copy writes it down, and names the second reason too -- that the lint should survive the expensive jobs going behind a path filter. Here that is not hypothetical: `changes` already gates `test-core` and the Docker E2E matrix, so on a documentation-only change `check` is the only job that reports at all, and today it reports the lint only if a dozen Rust and Python steps happen to pass first. The new job takes no `needs:` and no `if:`. AGENTS.md matches the filter's `**/*.md`, so a pull request confined to a generated region is docs-only, and a drift check behind either gate -- `test-core` skips on docs-only, the redteam job skips on everything else -- would be skipped on exactly the change that causes drift. `biome ci`, `ruff` and `check-docs.sh` stay in `check`. Keeping biome there matches agentcoop, aice-web-next and aimer-web, which all run it in `check` beside a separate Markdown job; `check-docs.sh` builds the manual, which is not a lint. Closes #995
Temporary: the point of this change is that a clippy failure no longer hides the Markdown result, and that is only observable when both fail in the same push. Reverted in the next commit.
Restores README.md and src/main.rs. The run they produced is linked from the pull request.
Test plan resultsThe test that matters: clippy and the Markdown lint broken at onceRun 34435062898 (a trailing-space violation in Both defects reported, each from its own job. Within And the control — this is what it looked like beforeNot an argument, an observation. Run 33467653299, read out of the API: That pull request was told about clippy and nothing about its Markdown, whatever state it was in. On reading the skipped jobs in that run
Green after the revertPosted as soon as the revert run finishes, Docker E2E matrix included. |
|
The revert goes green. Run 34435336770 ( Worth contrasting with the drift run above, where that same job was also |
Closes #995. Follow-up to #994, which is merged.
Run Markdown Lintwas the thirteenth step ofcheck, behindcargo clippy,cargo doc,ruff format,ruff checkandbiome ci. Any of those failing hid the Markdown result — the lint never ran, and a pull request that broke two things was told about one. #994 put the shared drift check at the end of that same twenty-step job, where itsif: ${{ !cancelled() && … }}guard rescued the drift check specifically and nothing rescued the lint above it.What changed
A
markdownjob, matching the one every other consumer ofaicers/agent-instructionsalready has:Both steps leave
check, along with the drift step's comment block — which argued at length for a placement this change reverses, including a sentence saying there was noMarkdownjob here to use instead.check'sid: checkoutgoes too, nothing reading it any more.This is not a new convention, and the second half of it already applies here
aicers/multifold's copy of the job writes down the reason:
In most consumers that second clause is a precaution. Here the path filter already exists:
changesgatestest-coreand the Docker E2E matrix ondocs_only != 'true', so on a documentation-only changecheckis the only job that reports at all — and today it reports the Markdown lint only if a dozen Rust and Python steps happen to pass first.This repository and aicers/aimer are the two that never adopted the standalone job. #994 chose
checkbecause it was then the only job with noif:— correct given the file as it stood, and superseded now. aicers/aimer#590 does the same there.No
needs:and noif:— here that is the point, not a precautionchangescounts**/*.mdas documentation andAGENTS.mdmatches it, so a pull request confined to a generated region is docs-only. Both gated directions would lose the check:test-coreand the E2E matrix skip on docs-only, andtest-registrar-redteam-docsis gated the other way and skips on everything that touches code.What stays in
checkbiome ci,ruffand./scripts/check-docs.sh. Keeping biome there matches agentcoop, aice-web-next and aimer-web, which all run it incheckbeside a separateMarkdownjob;check-docs.shbuilds the manual and is not a lint.Swatinem/rust-cache,actions/setup-pythonand the validation scripts are untouched — each is its own question and folding one in would bury this change.Runner
ubuntu-latest, like every other job here. Not a runner move: the self-hosted fleet is for the private repositories, where hosted minutes cost money. Actions is free on this public repository, so the new job costs a scheduling slot and about thirty seconds that run in parallel with acheckmeasured in minutes.Verification
actionlintreports the same three shellcheck findings asmain—SC2129,SC2155,SC2034, at lines 225, 333 and 418 here against 223, 331 and 416 before, the difference being the lines this change moved. Nothing new, and they are left alone.Runs are posted below, including the one that matters most: a change that breaks clippy and the Markdown lint at once, which before this would have reported only the first.