0.7.0
Immutable
release. Only release title and notes can be modified.
v0.7.0
The report crosses the stack boundary: changed frontend files report the backend endpoints they touch, and changed backend code reports the Inertia pages it renders.
Added
- Frontend endpoint references (opt-in via
frontend.roots). Changed.ts/.tsx/.js/.jsx/.vuefiles are scanned for the backend endpoints they reference, all mapped through the app's router onto route entry points: Wayfinder action imports (the controller FQCN lives in the import path — deterministic, method-precise, aliasing andimport typeincluded), Wayfinder route imports and Ziggyroute('name')calls (name index), and endpoint strings matched against the route templates — plain literals (axios.post('/videos')) and backtick templates whose${…}interpolations wildcard one segment (fetch(`/videos/${id}`)matches/videos/{video}). A verb-named call pins the HTTP method; anything unrecognisable stays method-agnostic and never narrows the match. Optional route parameters ({user?}) match with and without their segment. The touched routes are listed as entry points with their existing location, exposure and feature-gate annotations — and never moveriskorimpacted: a frontend edit does not change backend behaviour, and the report says so explicitly on frontend-heavy diffs. - Fail-safe semantics carry over. A dynamic
route(…)argument or an unmatched Wayfinder action import marks the file UNRESOLVED and makesrichter:affected-testsexit2; an unmatched route name or URI literal simply isn't a reference (routes/modules androute()helpers collide with frontend-router idioms — unmatched names never guess). Wayfinder's generated trees (actions/,routes/,wayfinder/) are excluded as regeneration churn. - Blade inline scripts. Endpoint literals inside
<script>blocks of changed Blade views seed touched routes the same way — script slices only, since markup hrefs and form actions are navigation, not endpoint calls. - Inertia reverse direction (no configuration needed). A changed backend member rendering an Inertia page (
Inertia::render('Videos/Show'), theinertia()helper, aliased facades included) is noted under Findings with the page file resolved and existence-checked underfrontend.pages_path— a miss reads "no page file found", which usually means a renamed or deleted page. Scoped to the changed members, like every source checker. - Advisory frontend test selection. Frontend spec files (
*.test.*,*.spec.*,*.cy.*under the frontend roots, orfrontend.test_paths) referencing a touched route surface inrichter:affected-testsas afrontendTestslist — in--jsonand text output for the JS runner, never in--plain(which feeds the PHP runner), and never an input to determinability.
New config keys: frontend.roots (default [], bridge off), frontend.generated_paths, frontend.pages_path, frontend.test_paths.
Internal
- Suite grows from 447 to 516 tests (1043 assertions), pinning the scanner idioms (aliased/default/invokable Wayfinder imports, verb pinning, template-literal wildcarding, optional parameters), the annotation-lane risk isolation, the Blade script-slice boundary, and the frontend spec index end-to-end.
CodeGraph::hasNode()provides exact node-id membership for route seeds, where substring matching would let a shorter route id match inside a longer one.