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.
The target gate runs a check reported as
Enforce greppable invariants. Itcatches 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.