Skip to content

Add the invariant lint that greps for the mistakes a compiler cannot see #82

Description

@iderex

The target gate runs a check reported as Enforce greppable invariants. It
catches the class of mistake that is invisible to a compiler and to a type
system, and obvious to a pattern: a call that must never appear, a construct that
was banned for a reason nobody remembers, a shape that was wrong once.

This is the cheapest check in a gate and the one most often left out, because
nothing forces it and its value only shows up the second time somebody makes the
same mistake.

What this produces

A rule set as data rather than as code, each rule carrying the failure it
prevents and, where one exists, the change that caused it to be written.

The first rules taken from decisions already made on this board: no direct
construction of a request outside the transport in #27, no direct filesystem
access outside the storage interface in #40, no drawing or platform type in the
public interface as decided in #3, no secret reaching a log as required by #71.

Each rule proven to bite by a fixture that violates it and reddens exactly that
rule.

Done when

The check runs on every pull request, every rule has a fixture proving it bites,
and a rule with no stated failure it prevents is refused by the check that loads
the rule set. Blocked on #17 and #80.

Metadata

Metadata

Assignees

Labels

blocked-on-issueWaits on another open issue on this boardci

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions