5223cbb3

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

One derivation, an hlint config with reasons, and a README that is two things

makeHopinionCheck replaces checksFor, and returns a single derivation rather
than an attrset, mirroring dekking's makeCoverageReport: the product is the
project report at the output, and the judge that reads it is a buildInput, so
building it fails on a finding and leaves the report readable either way. The
per-package outputs are underneath it, pulled in by the project one, so changing
a single package still rebuilds three derivations rather than all of them.

The hlint config takes its shape from nix-ci's. Every ban now says why and what
to use instead, which is the difference between a rule and a wall. It gains the
future and use-th-quotes groups, the unsafe-IO and lazy-IORef bans, the
QuickCheck ones that keep a property test a property test, and a Char8 ban.
foldr is restricted with one exception, and the exception is what proves the
ban: removing it makes hlint report the one call site.

Two of nix-ci's are deliberately not copied. Its per-extension bans, because the
allowlist here is the stronger form of the same thing, and now the load-bearing
one: extensions moved into the modules that need them, so the allowlist is what
stops a new one arriving unremarked. And `typeApplications: required` on show,
which needs a patched hlint this flake does not carry.

README.md is now what it says on the tin and how to add the check to a project.
The 420 lines it carried were design and rationale, so they are in plan/notes.md
with the rest of the planning material, and go when plan/ goes. check-plan.sh
follows them there: the open decisions still have to be split by owner, which is
the assertion that keeps them owned rather than merely written down.
e2e-artifacts-are-reade2e-cleane2e-dirty-package-is-judged-failinge2e-dirty-project-is-judged-failinge2e-dirty-report-is-readablee2e-discovers-every-packagee2e-incomplete-artifacts-are-a-failuree2e-no-packages-is-judged-failinge2e-no-store-paths-in-findingse2e-paths-are-repository-relativee2e-withheld-facts-faile2e-wrong-source-mapping-is-a-complainthlint-checkhopinionhopinion-reads-what-the-compiler-wroteplanpre-commitreleaseshellweeder-checkconfiguredevShelldefaultx86_64-linux