# Built a commit gate of 22 one‑line linters plus four that earn a paragraph, with no warning tier and no inline suppressions permitted, covering HTML, CSS, JavaScript, Python, YAML, Markdown, shell, links, spelling, secrets and typography.

2025

**Situation.** A contributing guide is a set of suggestions. Everyone agrees with it, and then it is Friday, the change is small, and the guide loses. On a one‑person project that is worse rather than better, because there is no reviewer at all — the only thing between a bad change and production is the person who wrote it, at the moment they are least inclined to argue with themselves.

**Task.** The standards had to be executable, so that breaking one fails a commit rather than waiting to be noticed.

**Action.** What grew is a gate of 22 linters with no warning tier: every diagnostic is an error, and the site generator itself runs with warnings promoted to failures so even a deprecation stops the build. The obvious ones are there — HTML validation, CSS, JavaScript, Python, YAML, Markdown, shell, spelling, secrets, dead links. The interesting ones are the project‑specific checks that no off‑the‑shelf tool has an opinion about: that both colour themes paint every layered surface with the same number of layers, that no photograph is displayed wider than half its source pixels, that the deployed tree contains no private path or hostname, that the prose obeys the tone rules in all three languages, that a page has a Markdown twin and a valid alternate‑protocol representation. Inline suppressions are prohibited outright — no ignore comment, no disable directive, no bypassing the hook, and no renaming a file to dodge a matcher. The rule that keeps that honest is that a pre‑existing failure is not an excuse: a check that surfaces a defect nobody introduced gets fixed in the same pass.

**Result.** Mechanical objections are made by a machine before a commit exists, and the gate is the only reviewer this project has. The cost is stated rather than hidden: committing is slow, and a badly written guard is genuinely infuriating to work around, which is why the guards themselves were later brought under a formatter and a linter of their own.

---

- Role: Build and Release Engineer
- Categories: [Frontend Engineering](https://engineer.company/categories/frontend/), [DevOps](https://engineer.company/categories/devops/), [Automation & CI/CD](https://engineer.company/categories/automation/), [Testing & QA](https://engineer.company/categories/testing/), [Python](https://engineer.company/categories/python/), [Documentation](https://engineer.company/categories/documentation/)
- Services: [DevOps & CI/CD Automation](https://engineer.company/services/devops-cicd/), [Product Strategy & Requirements](https://engineer.company/services/product-strategy/), [Technical Documentation](https://engineer.company/services/technical-documentation/)

<https://engineer.company/portfolio/built-a-22-linter-commit-gate-127/>
