From 8e1b9ee9326b12f8c94f894d67dca54f259d6f11 Mon Sep 17 00:00:00 2001 From: autonomic-bot Date: Wed, 27 May 2026 21:01:25 +0100 Subject: [PATCH] =?UTF-8?q?docs(1b):=20README=20=E2=80=94=20how=20to=20run?= =?UTF-8?q?=20lint/format=20locally=20+=20that=20CI=20enforces=20it=20(RL4?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/README.md b/README.md index 82fc764..d83d060 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,22 @@ docs/ install, enroll-recipe, secrets, architecture, runbook, b - `docs/architecture.md`, `docs/runbook.md` — design + debugging failed runs - `docs/baseline.md` — bootstrap snapshot / rollback reference +## Linting & formatting + +The codebase is kept formatted + lint-clean by a single entrypoint, run from the pinned `lint` +devshell so local and CI use identical tool versions: + +```sh +nix develop .#lint --command bash scripts/lint.sh # check-only (what CI runs) +nix develop .#lint --command bash scripts/lint.sh --fix # auto-format + apply fixes +``` + +Covers Nix (`nixpkgs-fmt` · `statix` · `deadnix`), Python (`ruff` lint+format), Shell +(`shellcheck` · `shfmt`), and YAML (`yamllint`). Config lives in `ruff.toml` / `.yamllint.yaml`; +tool/strictness choices are in `DECISIONS.md`. **CI enforces it:** the `lint` step in the +`.drone.yml` push pipeline runs the same command and **fails the build** on any unclean file, so +keep commits clean (`--fix` before pushing). + ## Loop state (autonomous build) `STATUS.md` (phase/blockers), `BACKLOG.md` (work + adversary findings), `REVIEW.md` (independent