v1.5.0 — consumer-contract testing, runnable-setup-as-docs, adversarial verify
1.5.0 (2026-06-30)
Dogfooding again: two PRs' worth of lessons from a real build session where a fully green test
suite still shipped a broken integration, plus an escalation of the verification step itself.
Features
- Consumer-side contract testing — and "test the decision, not the component it renders" (#16, aeee0e5). A new-user flow shipped broken past a green suite: the UI was coded and mocked against an assumed response (
200-with-empty) while the server correctly returned403— a false green no unit test caught.references/testing.mdnow requires a consumer's mock to encode the producer's real responses (status codes and error bodies), or a thin integration test across the seam — contract drift cuts both ways. And it calls out the sibling miss: a "thin" route/handler still owns the branch decision (which state to show, how to classify an error), so that logic must be extracted and tested — "the components are tested" is not "the orchestration is tested." - The runnable setup is documentation too (#16, aeee0e5). A required config var that never reached the dev compose crashed
docker compose upat boot, long after the test suite was green. The documentation discipline (SKILL.md) now treats every launch surface — compose files, env templates, deploy manifests, the README quickstart — as documentation that must move in lockstep when a new required var is added, and treats the quickstart as a verifiable artifact you actually run before claiming it works. - Adversarial multi-lens verification for high-stakes diffs (#15, bf9f7db). The "verify before done" step now escalates a Tier-2 / security- or isolation-sensitive change to several independent, refute-first lenses — then re-reviews whatever folding the findings introduced. That loop is what catches a green-but-insufficient change (passes every gate, reads as correct, yet misses its scoped goal) that a single confirmatory read sails past. A multi-lens panel on a trivial diff is review-theater — match the breadth to the stakes.