0.10.0
Immutable
release. Only release title and notes can be modified.
A precision-and-completeness release sourced from a full-feature dogfood of 0.9.0 against a large production Laravel application. richter:affected-tests now reflects your working tree and never silently narrows past a change it cannot see; the frontend bridge only treats genuine HTTP/route calls as route references; and Pennant feature flags are recognised behind the common enum-wrapper convention. All changes are additive or behaviour-refining — there are no breaking changes.
Added
richter.feature_gate_methods. Recognise feature-flag checks written as an enum wrapper (FeatureToggle::SomeFlag->isActive()), not only theLaravel\Pennant\Featurefacade or the@featureBlade directive. Register your project'sEnum\Class::methodwrappers and a change behind one is annotated as flag-gated. Annotation only — it never feedsrisk, the--fail-ongate, oraffected-testsselection.richter.frontend.http_callees. A frontend string literal counts as a backend route reference only when it is the first argument of an HTTP/route callee. The built-in allowlist coversroute,fetch,axios,useFetch,$http,$(jQuery),window, andpage/cy(Playwright / Cypress spec navigation); register custom HTTP wrappers through config. This removes false route seeds from unrelated calls such astranslate('/settings')orconsole.log('/…')that previously inflated the touched-route surface.
Changed
HEAD-mode diffs now analyse the working tree.detect-changesandaffected-testscompare the working tree against the merge-base with--base, so uncommitted and staged edits are included — running either before you commit now sees your actual changes rather than only what is committed. Passing an explicit non-HEADref still replays that ref's committed tree, so historical and benchmark replays are unchanged, and CI (which checks out clean) is unaffected.
Fixed
affected-testsno longer silently under-selects around a file it cannot diff. An untracked (nevergit add-ed) file underapp/,resources/views/, or a configured frontend root is invisible togit diff; the selection now fails closed (exit 2 — "run the full suite") instead of emitting a narrowed set that omits it.git addthe file to include it.detect-changeskeeps its advisory stderr note.- Hunk/source desync in
HEADmode. With uncommitted edits stacked on committed ones, added/removed line numbers and member spans now come from a single tree, so a hunk can no longer map to the wrong member.
Documentation
- Exposure classification (
[public]/[authed]/[admin]) is route-only. A Livewire, Filament, or queue entry point carrying no exposure tag means "not classified," never "public" or "unauthenticated" — its real exposure comes from mount-time authorization, middleware, or route placement the graph does not model.
Internal
- Test fixtures were migrated to a neutral, synthetic domain, and a guideline was added to keep fixtures, documentation examples, and specs free of any consumer's product vocabulary. Development scaffolding (
plans/,specs/) is now excluded from the Composer dist archive. - Suite grows to 608 tests / 1,351 assertions.
Full Changelog: v0.9.0...v0.10.0