Skip to content

Redproof 0.12.0

Latest

Choose a tag to compare

@schalermthai schalermthai released this 14 Sep 15:55
· 32 commits to main since this release
d4d4f80

Redproof turns a quality tool into a Gate: Rules, a Check that runs the real
tool, and Proofs that the Check catches the defect it claims to catch.

New Adapters

@redproof/knip turns unused code into a Gate. Seven Rules cover unused
files, exports, dependencies, development dependencies, undeclared
dependencies, unresolved imports, and duplicate exports. It runs Knip through a
bundled reporter, so the evidence is structured rather than parsed from text.

@redproof/istanbul turns test coverage into a Gate. nyc() collects
natively. istanbul() reads any producer of a full Istanbul coverage map, and
the repository proves that path with real c8. Four Rules cover statements,
branches, functions, and lines, each with a minimum percentage and optional
per-file enforcement. Counting, line semantics, and percentage truncation match
istanbul-lib-coverage exactly.

Both are first releases, so npm install finds them at 0.12.0.

Every Adapter now has a functional core

All six Adapter packages moved their decisions into src/core/ and their
effects into src/shell/ or the package entry point. Public exports did not
change.

Two dependency-cruiser rules enforce the split by path: an Adapter core cannot
import an effectful Node module, and it cannot import anything in its own
package outside src/core/. A third rule forbids one Adapter from importing
another. Each rule carries a proof that plants the violation and requires the
Gate to name it.

stryker() gained an optional second parameter, a mutation-run port. Existing
calls are unchanged. The port let five refusal paths gain end-to-end tests that
were previously unreachable.

New Rules

repository/lockfile-resolves-declared-optional-dependencies requires every
optional dependency a lockfile package declares to resolve to a lockfile entry.
A regenerated lockfile can silently drop the platform binaries for every
platform except the one that regenerated it. Nothing caught that before.

The self-hosted test-health Gate now collects {tests,packages/*/test}, the
same 86 files the test command runs. Thirteen package test files were read by
no Gate.

Fixes

  • ESLint directive notices no longer refuse a healthy project.
  • An allowed dependency-cruiser boundary disabled by allowedSeverity now
    REFUSES instead of passing silently.
  • Stryker adapter reporting, dependency-cruiser evidence handling, and ESLint
    evidence handling are each hardened.
  • Each published tarball is derived from the package it belongs to, so a
    per-package table can no longer pair a package with another package's
    tarball.
  • Publishable Adapter source cannot import the test kit.
  • npm publishing is resumable, and a new package's first publish explains its
    own bootstrap failure.

Verified

858 tests pass, 0 fail, 0 skipped. 6 Gates hold 38 Rules. 60 proofs established,
0 failed. All 8 packages pass clean-consumer verification at one shared version.