Skip to content

ci: short-circuit hygiene lane's docs-irrelevant full-repo linters (ShellCheck ~53s) on docs-only diffs #628

Description

@kyle-sexton

This was generated by AI during triage.

Problem

#617 (closed, delivered via PR #622) short-circuited plugin-gate and miro-plugin on docs-only diffs, but that only touches runner-minutes — not the empirically-measured merge-latency bottleneck. The dominant unskippable cost on docs-only PRs is the hygiene job's full-repo ShellCheck pass (~53s), plus actionlint and the four check-jsonschema steps, all docs-irrelevant.

Recommended fix (repo-side)

Add a dedicated step-gated lane inside hygiene for the docs-irrelevant checks (ShellCheck, actionlint, check-jsonschema ×4, exec-bit), reusing the existing scripts/check-docs-only.sh detector from PR #622, gated the same skip-safe way (self-test-first, fail-closed, inner steps carry the conditional — never a job-level skip). Do not weaken scripts/aggregate-hygiene-results.sh to tolerate a skipped outcome — it fails closed on any non-success result by design, and teaching it to pass on skipped would blur a deliberate gate-skip from a real failure (the exact #532 false-green shape). A job's success derives from its own steps, so gating steps inside a dedicated lane is safe without touching the shared aggregator.

Docs-linting checks that must stay on docs-only PRs (they apply regardless of diff type): markdown, typos, editorconfig, gitleaks, eol-renormalize, comment-hygiene, machine-specific-paths.

Explicitly out of scope here (cross-repo)

The root cause of the ~53s cost is non-incremental: the ShellCheck composite action lints the whole tree every run regardless of diff size. The durable fix — incremental "lint changed files only" — is a melodic-software/ci-workflows composite-action change, not repo-side. Path-scoping (this issue) is the legitimate caller-side mitigation until that lands; do not attempt the ci-workflows change from this repo.

Optional, low-value

Allowlist growth in scripts/docs-only-paths.txt (e.g. CHANGELOG.md) only via the existing two-part inertness proof + self-test case. Never SKILL.md — it's a first-class plugin-gate input in this repo (per #617's plan comment verification).

Related

Follow-up from #617 (closed, PR #622) — precedent-honest continuation of the same self-test-first/fail-closed discipline #622 established, applied to hygiene instead of plugin-gate/miro-plugin. Full verification detail in #617's T2 triage planning comment.

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: mediumReal value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions