Repository navigation
Correct Wayfinder generation and route fidelity - #7
Conversation
Normalize boolean route parameters to the same scalar values used by generated Wayfinder calls. Keep binding-aware defaults authoritative when callers supply null, consume forced-root defaults exactly once, and prevent root fallbacks from leaking into the query string. Resolve root and route placeholders before final formatting so shared parameters cannot produce contradictory hosts and paths. Add regressions for boolean values, bound defaults, route domains, forced roots, query cleanup, and placeholder collisions.
Make mode-less atomic replacement create files with the same non-executable default used by normal writes while preserving explicitly supplied modes and atomic inode replacement. Cover new files, replacements, active umasks, environment encryption, and configuration publication so generated framework data cannot silently gain executable bits.
Re-arm retained configuration and route caches before each opted-in Foundation application boot. Preserve the cached-route marker without introducing worker-lifetime filesystem memoization, and reuse the existing recursive trait identity map. Add repeated-boot coverage proving cached configuration and compiled routes survive application recreation while remaining isolated to tests that use the matching cache traits.
Register the application route provider through Testbench's resolved provider list and define Testbench routes immediately after application creation, before cached-route traits capture the collection. Re-arm retained Foundation cache state at the matching pre-bootstrap seam. Remove duplicate cached-file loading, keep uncached route synchronization independent from provider-owned caches, and cover repeated boots, mixed cached and stash routes, provider overrides, workbench registration, and every supported refresh path.
Separate exact consumption and denial decisions from refill recovery so the shared store contract no longer depends on subsecond scheduling during a multi-call sequence. Use stable policy keys with exception-safe cleanup, a slow policy for exact atomic decisions, and a fast policy only for the bounded recovery assertion. Production rate-limiter behavior is unchanged.
Move the PHPDoc parser into root runtime requirements because Wayfinder generation and the Facade Documenter binary load it in production. Declare Wayfinder's direct tokenizer, reflection, and parser requirements without redundant core extensions. Replace copied dependency-version assertions with relationship checks derived from root constraints and package branch aliases. Cover Wayfinder provider discovery and keep package metadata tests focused on installable contracts rather than version transcription.
Normalize binding-aware URL defaults once per route, distinguish caller-optional arguments from optional URI segments, and preserve scalar default types including booleans and enum-valued binding fields. Infer model binding types from primitive casts before schema and PHPDoc evidence, keep decimal values as strings, support primitive unions, and flush every bounded worker metadata cache. Add focused coverage for defaults, binding evidence, paths, and cache cleanup.
Normalize boolean values, encode substituted route parameters with backend-equivalent semantics, preserve Routing's allowed characters, and report missing required parameters by name. Extend query serialization to boolean values and arrays while retaining nested object behavior. Add direct runtime coverage for boolean, array, and parameter-formatting cases without adding state or repeated I/O.
Parse every supported URL default expression without evaluating PHP, resolve generated arguments before validation, and emit truthful boolean, null, tuple, binding, domain, and multi-verb contracts. Allocate identifiers within their real TypeScript scopes, preserve callable leaf and namespace pairs, retain public camel keys with collision-safe raw fallbacks, and reject only real controller/barrel path conflicts. Scope syntax cleanup to generated fragments so route literals remain untouched. Publish changed files atomically, avoid no-op writes, fail truthful stale deletion, keep View registration idempotent, isolate fixture generation, preserve external controller paths, and reject an explicitly empty output path. Add normal and cached-route regressions for generation, imports, collisions, defaults, encoding, forms, publication, and deterministic repeat output.
Run normal generated-route behavior, cached-route behavior, and strict TypeScript validation through package and root scripts. Configure the generated ESM fixtures with bundler module resolution and no emitted output. Add a standalone CI job with the repository's supported PHP, Swoole, Node, and pnpm toolchain so frontend generation is checked once outside the PHP matrix and remains separate from Composer workflows.
Add one canonical Laravel-prose guide covering installation, generated files, imports, parameter shapes, model bindings, multi-route actions, forms, queries, URL defaults, Inertia, SSR, and deployment ordering. Keep the package README minimal while recording Hypervel's request-scoped origin difference and linking developers to the canonical guide. Add the guide to the documentation index.
Call the generated route's url helper before supplying query options. The previous example invoked the route definition directly and did not match the public generated API.
Replace PHPUnit's removed result-cache option with the current test-run-history option in the parallel-testing warning. ParaTest's transitional worker argument remains owned by its upstream correction.
Record the Vite plugin's instance context, argument parsing, Windows path, serialized scheduling, burst collapse, and failure-recovery requirements for an upstream fix rather than adding Components-side shims. Also make the planned Boost implementation consume the Wayfinder and Horizon skill templates that already ship with their packages.
Document the final generation, Routing, Filesystem, Foundation, Testbench, Rate Limiter, Testing, metadata, and documentation designs together with their evidence, rejected machinery, performance boundaries, and regression coverage. Add durable finding ownership and cross-package revalidation entries, account for IDs already allocated on the merge target, record the external plugin and Boost ownership boundaries, and mark Wayfinder complete only after all gates, self-review, and independent review signed off.
# Conflicts: # docs/plans/2026-07-12-0900-framework-coroutine-state-lifecycle-audit.md # docs/plans/2026-07-12-0915-framework-coroutine-state-lifecycle-audit-ledger.md # tests/Routing/PackageMetadataTest.php
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (21)
💤 Files with no reviewable changes (1)
🚧 Files skipped from review as they are similar to previous changes (8)
📝 WalkthroughWalkthroughWayfinder now supports typed route parameters, URL-default parsing, collision-safe generation, route coalescing, encoded filesystem URLs, atomic publication, and cached-route validation. Foundation and Testbench lifecycle handling, package metadata, CI, documentation, and regression tests were updated. ChangesWayfinder correctness and framework integration
Estimated code review effort: 5 (Critical) | ~120 minutes Sequence Diagram(s)sequenceDiagram
participant GenerateCommand
participant Route
participant TypeScript
participant Filesystem
GenerateCommand->>Route: collect route defaults and parameter metadata
Route->>GenerateCommand: return normalized route descriptors
GenerateCommand->>TypeScript: render typed route modules and barrels
GenerateCommand->>Filesystem: atomically replace changed generated files
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@coderabbitai review |
✅ Action performedReview finished.
|
Greptile SummaryThis PR aligns generated Wayfinder URLs and types with Hypervel Routing while hardening generation, publication, filesystem URL handling, and cached test-application lifecycles.
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains.
|
| Filename | Overview |
|---|---|
| src/routing/src/RouteUrlGenerator.php | Escapes delimiter and placeholder syntax at the parameter-substitution boundary while preserving intended path characters. |
| src/routing/src/UrlGenerator.php | Updates URL-default handling and parameter normalization to preserve routing metadata and prevent consumed defaults from leaking into queries. |
| src/filesystem/src/FilesystemAdapter.php | Encodes raw storage paths at Hypervel-owned URL-construction boundaries while preserving delegated adapter ownership. |
| src/filesystem/src/LocalFilesystemAdapter.php | Passes raw local temporary-route paths to the routing layer so values are encoded exactly once. |
| src/testbench/src/Concerns/HandlesRoutes.php | Re-arms route synchronization after application reloads clear lifecycle callback state. |
| src/foundation/src/Application.php | Restores cached application configuration and route state across repeated boots. |
| src/wayfinder/src/GenerateCommand.php | Hardens deterministic generation, output-path validation, atomic publication, stale-file cleanup, and file modes. |
| src/wayfinder/src/Route.php | Aligns generated route metadata, defaults, bindings, domains, and compatible multi-verb action coalescing. |
| src/wayfinder/resources/js/wayfinder.ts | Centralizes backend-compatible route-parameter formatting, null omission, boolean normalization, and query behavior. |
| src/wayfinder/src/TypeScript.php | Allocates generated identifiers within their actual TypeScript scopes and rejects impossible filesystem layouts. |
Reviews (3): Last reviewed commit: "Finalize the Wayfinder URL integrity pla..." | Re-trigger Greptile
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/wayfinder/resources/js/wayfinder.ts (1)
170-186: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUse a result type that matches null/undefined inputs.
applyUrlDefaults(null)andapplyUrlDefaults(undefined)return objects at runtime, but the generic signature keeps the result asnullorundefined. This blocks consumers from using runtime default parameters even when the generated call passes those inputs.Return
UrlDefaultsfor nullish inputs, while preserving the object input type for non-null inputs.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/wayfinder/resources/js/wayfinder.ts` around lines 170 - 186, Update the return type of applyUrlDefaults so null or undefined inputs are typed as UrlDefaults, while non-null object inputs retain their existing object type. Preserve the current runtime default-merging behavior and use a conditional return type that distinguishes nullish from non-null T.
🧹 Nitpick comments (1)
tests/Wayfinder/Fixtures/Middleware/UrlDefaultsMiddleware.php (1)
27-34: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueExplain why
$unrelatedexists.
$unrelatedis a deliberate decoy. It verifies that the token parser reads only arrays passed toURL::defaults(). Without a comment, a later reader can remove it and silently drop that coverage.♻️ Proposed change
+ // Decoy array. The generator must not harvest arrays that are not + // arguments to URL::defaults(). $unrelated = ['neighbor' => 'not-a-default'];🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@tests/Wayfinder/Fixtures/Middleware/UrlDefaultsMiddleware.php` around lines 27 - 34, Add a brief comment explaining that the `$unrelated` array is a deliberate decoy used to verify the token parser only reads arrays passed to `URL::defaults()`. Keep the decoy and its existing value unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@docs/plans/2026-08-08-1709-wayfinder-correctness-generation-parity-and-bounded-lifecycles.md`:
- Line 366: Update the Markdown spans describing JavaScript replacement tokens
at both occurrences of the backtick token, including the text near “this also
prevents” and the corresponding occurrence later in the document. Replace the
ambiguous single-backtick markup with an unambiguous double-backtick span or
equivalent escaped form, while preserving the literal token text and surrounding
explanation.
In `@src/testbench/src/Concerns/HandlesRoutes.php`:
- Around line 176-199: Update syncTestbenchRoutes and its state tracking so each
defineCacheRoutes(..., false) call synchronizes newly written uncached route
files after application reloads instead of returning solely because
synchronization previously ran. Track which route files have already been
synchronized or otherwise load only the newly created file, preserving existing
synchronization for previously seen files. Add coverage for two calls that
verifies routes from both files resolve.
In `@src/wayfinder/resources/js/wayfinder.ts`:
- Around line 52-55: Update the parameter-decoding logic in wayfinder.ts so
route parameters retain the encoded forms of %3F, %26, %23, and %25 instead of
converting them to URL delimiters or additional escapes. Preserve decoding for
other supported characters while ensuring formatted path parameters cannot
introduce query strings, fragments, or encoded slashes.
In `@src/wayfinder/src/TypeScript.php`:
- Around line 121-126: Update the regex patterns in cleanUp’s $regexReplacements
to handle platform-independent line endings, replacing literal newline matching
in the arrow-function and blank-line normalization rules with \R-based matching.
Preserve the existing replacement formatting and other cleanup rules.
---
Outside diff comments:
In `@src/wayfinder/resources/js/wayfinder.ts`:
- Around line 170-186: Update the return type of applyUrlDefaults so null or
undefined inputs are typed as UrlDefaults, while non-null object inputs retain
their existing object type. Preserve the current runtime default-merging
behavior and use a conditional return type that distinguishes nullish from
non-null T.
---
Nitpick comments:
In `@tests/Wayfinder/Fixtures/Middleware/UrlDefaultsMiddleware.php`:
- Around line 27-34: Add a brief comment explaining that the `$unrelated` array
is a deliberate decoy used to verify the token parser only reads arrays passed
to `URL::defaults()`. Keep the decoy and its existing value unchanged.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: a5a11771-7e4d-445d-aa6e-dd5a2fb30e99
📒 Files selected for processing (90)
.github/workflows/tests.ymlcomposer.jsondocs/plans/2026-07-12-0900-framework-coroutine-state-lifecycle-audit.mddocs/plans/2026-07-12-0915-framework-coroutine-state-lifecycle-audit-ledger.mddocs/plans/2026-08-08-1709-wayfinder-correctness-generation-parity-and-bounded-lifecycles.mddocs/todo.mdpackage.jsonsrc/boost/docs/documentation.mdsrc/boost/docs/testing.mdsrc/boost/docs/wayfinder.mdsrc/filesystem/src/Filesystem.phpsrc/foundation/src/Application.phpsrc/foundation/src/Testing/Concerns/InteractsWithTestCaseLifecycle.phpsrc/foundation/src/Testing/TestCase.phpsrc/foundation/src/Testing/WithCachedConfig.phpsrc/foundation/src/Testing/WithCachedRoutes.phpsrc/routing/src/RouteUrlGenerator.phpsrc/routing/src/UrlGenerator.phpsrc/testbench/src/Concerns/CreatesApplication.phpsrc/testbench/src/Concerns/HandlesRoutes.phpsrc/testbench/src/TestCase.phpsrc/wayfinder/README.mdsrc/wayfinder/composer.jsonsrc/wayfinder/package.jsonsrc/wayfinder/resources/boost/skills/wayfinder-development/SKILL.blade.phpsrc/wayfinder/resources/function-arguments.blade.tssrc/wayfinder/resources/js/wayfinder.tssrc/wayfinder/resources/method.blade.tssrc/wayfinder/resources/multi-method.blade.tssrc/wayfinder/src/BindingResolver.phpsrc/wayfinder/src/GenerateCommand.phpsrc/wayfinder/src/Parameter.phpsrc/wayfinder/src/Route.phpsrc/wayfinder/src/TypeScript.phpsrc/wayfinder/tests/CamelCaseRouteParameter.test.tssrc/wayfinder/tests/DefaultParameters.test.tssrc/wayfinder/tests/DisallowedMethodNames.test.tssrc/wayfinder/tests/GeneratedOutput.test.tssrc/wayfinder/tests/IdentifierCollisions.test.tssrc/wayfinder/tests/InvokablePlusController.test.tssrc/wayfinder/tests/KeyController.test.tssrc/wayfinder/tests/ModelBindingController.test.tssrc/wayfinder/tests/OptionalController.test.tssrc/wayfinder/tests/QueryParams.test.tssrc/wayfinder/tests/RepeatedNamespaceController.test.tssrc/wayfinder/tests/StorageRoute.test.tssrc/wayfinder/tests/TwoRoutesSameAction.test.tssrc/wayfinder/tests/UrlDefaultsController.test.tssrc/wayfinder/tests/build.tssrc/wayfinder/tests/generate.phpsrc/wayfinder/tsconfig.jsontests/Broadcasting/PackageMetadataTest.phptests/FacadeDocumenter/PackageMetadataTest.phptests/Filesystem/FilesystemTest.phptests/Foundation/PackageMetadataTest.phptests/Foundation/Testing/WithCachedStateTest.phptests/Integration/Console/EnvironmentEncryptCommandTest.phptests/Integration/Foundation/Console/ConfigPublishCommandWithoutMergedConfigurationTest.phptests/Mail/PackageMetadataTest.phptests/Passkeys/PackageMetadataTest.phptests/RateLimiter/Fixtures/RateLimiterStoreContract.phptests/Routing/PackageMetadataTest.phptests/Routing/RoutingUrlGeneratorTest.phptests/Scout/PackageMetadataTest.phptests/Testbench/Concerns/DefineCacheRoutesTest.phptests/Testbench/Concerns/HandlesRoutesTest.phptests/Testbench/Concerns/WithCachedStateTest.phptests/Testbench/Integrations/ApplicationProvidersWithDisabledServicesTest.phptests/Testbench/WithWorkbenchTest.phptests/Wayfinder/BindingResolverTest.phptests/Wayfinder/Fixtures/Controllers/BarrelCollisionController.phptests/Wayfinder/Fixtures/Controllers/BarrelCollisionController/NestedController.phptests/Wayfinder/Fixtures/Controllers/DisallowedMethodNameController.phptests/Wayfinder/Fixtures/Controllers/DomainController.phptests/Wayfinder/Fixtures/Controllers/Index.phptests/Wayfinder/Fixtures/Controllers/InvokablePlusController.phptests/Wayfinder/Fixtures/Controllers/KeyController.phptests/Wayfinder/Fixtures/Controllers/ModelBindingController.phptests/Wayfinder/Fixtures/Controllers/OptionalController.phptests/Wayfinder/Fixtures/Controllers/ReverseBarrelCollisionController.phptests/Wayfinder/Fixtures/Controllers/ReverseBarrelCollisionController/NestedController.phptests/Wayfinder/Fixtures/Controllers/TwoRoutesSameActionController.phptests/Wayfinder/Fixtures/Controllers/UrlDefaultsController.phptests/Wayfinder/Fixtures/Middleware/UrlDefaultsMiddleware.phptests/Wayfinder/Fixtures/Models/User.phptests/Wayfinder/Fixtures/routes.phptests/Wayfinder/GenerateCommandTest.phptests/Wayfinder/PackageMetadataTest.phptests/Wayfinder/PruneStaleFilesTest.phptests/Wayfinder/RouteTest.php
💤 Files with no reviewable changes (1)
- src/wayfinder/tests/CamelCaseRouteParameter.test.ts
Escape percent, query, fragment, and brace delimiters while values are still known to be route parameters. This prevents later URL and placeholder passes from reinterpreting user data while preserving structural query and fragment syntax. Add regressions for named, positional, Stringable, enum-backed, domain, configured-root, brace, and query-consumption behavior.
Retain encoded route delimiters in generated paths so TypeScript cannot turn parameter data into URL syntax. Correct exact nullish default return types without widening union inputs. Make the neighboring-array parser fixture load-bearing and extend generated runtime coverage for dynamic domains, literal delimiters, and omitted decoy parameters.
Reset the per-test synchronization flag after an application reload discards its callback registry. Each later uncached route definition can then register the callback needed by the new application. Cover two successive stash route definitions and verify that both accumulated route files remain dispatchable after the second reload.
Treat storage paths as raw keys until the final URL owner is known. Hypervel-owned local, FTP, configured S3, and GCS URLs now encode once while native S3 and delegated adapters keep their existing ownership. Remove the superseded temporary local pre-encoding now that Routing protects parameter data. Preserve nested separators, normalize leading separators, keep literal percent escapes as filename data, and cover signed upload and download round trips. Remove the obsolete documentation warning that required callers to choose URL-safe local filenames.
Add routing-28, wayfinder-23, and filesystem-18 to the dependency index and completed audit ledger. Record the shared parameter-data boundary, ordinary storage URL ownership, removed temporary URL workaround, lifecycle coverage, and bounded runtime costs. Update the completed Wayfinder assessment so future audits preserve the corrected contracts without restoring local encoders or pre-encoded input detection.
Specify the final Routing, Wayfinder, Testbench, and Filesystem ownership model after review. Include the exact delimiter map, raw storage path contract, leading-separator handling, signed path round trips, performance costs, regression coverage, durable IDs, and rejected workaround machinery. Keep the document as the concise final design a fresh session can implement without relying on review history.
|
@coderabbitai @greptile-apps Review follow-up is complete.
|
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
printf '%s\n' '=== Changed files ==='
git diff --name-only HEAD^ HEAD
printf '%s\n' '=== Relevant diff excerpts ==='
git diff HEAD^ HEAD -- \
src/routing/src/UrlGenerator.php \
src/routing/src/RouteUrlGenerator.php \
src/filesystem \
src/testbench \
src/wayfinder/resources/js/wayfinder.ts \
src/wayfinder/resources \
src/wayfinder/src \
docs \
tests/Routing \
tests/Filesystem \
tests/Testbench \
tests/Wayfinder \
| sed -n '1,2200p'
printf '%s\n' '=== Relevant test names and assertions ==='
rg -n -C 3 \
'(%|\\\?|#|\\\{|\\\}|applyUrlDefaults|cached|synchron|encoding|encode|replacement|markdown|PHP_EOL)' \
tests/Routing tests/Filesystem tests/Testbench tests/Wayfinder src/wayfinder/tests \
|| trueLength of output: 192160 🏁 Script executed: #!/bin/bash
set -euo pipefail
printf '%s\n' '=== Follow-up commit ==='
git show --no-ext-diff --format=fuller --stat HEAD
printf '%s\n' '=== Follow-up changed paths ==='
git diff-tree --no-commit-id --name-only -r HEAD
printf '%s\n' '=== Follow-up patch ==='
git show --no-ext-diff --format= --find-renames --find-copies HEAD | sed -n '1,1800p'
printf '%s\n' '=== Focused implementation references ==='
rg -n -C 8 \
'(rawurlencode|urlencode|formatRouteParameter|applyUrlDefaults|routesSynchronized|SyncTestbenchCachedRoutes|replaceNamedParameters|replaceRouteParameters|%7B|%7D|PHP_EOL)' \
src/routing/src src/filesystem/src src/testbench/src src/wayfinder/resources src/wayfinder/src \
|| true
printf '%s\n' '=== Focused regression test references ==='
rg -n -C 8 \
'(report\?v2|a\{x\}b|100%|applyUrlDefaults|reload|synchron|S3|storage key|replacement token|PHP_EOL)' \
tests/Routing/RoutingUrlGeneratorTest.php tests/Filesystem tests/Testbench/Concerns tests/Wayfinder src/wayfinder/tests \
|| trueLength of output: 121311 🏁 Script executed: #!/bin/bash
set -euo pipefail
printf '%s\n' '=== Testbench synchronization implementation ==='
nl -ba src/testbench/src/Concerns/HandlesRoutes.php | sed -n '120,215p'
printf '%s\n' '=== Testbench direct regression tests ==='
rg -n -C 12 \
'(successive|refreshApplication|defineCacheRoutes|syncTestbenchRoutesHasRun|synchronization|dispatch)' \
tests/Testbench/Concerns/DefineCacheRoutesTest.php \
tests/Testbench/Concerns/HandlesRoutesTest.php \
|| true
printf '%s\n' '=== Filesystem URL and temporary-route regressions ==='
rg -n -C 8 \
'(encode|raw|temporary|signed|report%2F|leading|separator|Storage::url)' \
tests/Filesystem/AwsS3V3AdapterTest.php \
tests/Filesystem/FilesystemAdapterTest.php \
tests/Filesystem/FilesystemManagerTest.php \
|| trueLength of output: 1168 🏁 Script executed: #!/bin/bash
set -euo pipefail
printf '%s\n' '=== Testbench synchronization implementation ==='
sed -n '120,215p' src/testbench/src/Concerns/HandlesRoutes.php
printf '%s\n' '=== Testbench direct regression tests ==='
rg -n -C 12 \
'(successive|refreshApplication|defineCacheRoutes|syncTestbenchRoutesHasRun|synchronization|dispatch)' \
tests/Testbench/Concerns/DefineCacheRoutesTest.php \
tests/Testbench/Concerns/HandlesRoutesTest.php \
|| true
printf '%s\n' '=== Filesystem URL and temporary-route regressions ==='
rg -n -C 8 \
'(encode|raw|temporary|signed|report%2F|leading|separator|Storage::url)' \
tests/Filesystem/AwsS3V3AdapterTest.php \
tests/Filesystem/FilesystemAdapterTest.php \
tests/Filesystem/FilesystemManagerTest.php \
|| trueLength of output: 49434
The sandbox did not execute the reported test commands. Static inspection found the corresponding implementations and regression coverage. No further follow-up findings. 🐇 ✅ ✏️ Learnings added
If you found this review helpful, would you consider giving us a shout-out on X? Thank you for using CodeRabbit! You are interacting with an AI system. |
Summary
This change makes Wayfinder's generated TypeScript match Hypervel Routing across route defaults, model bindings, domains, booleans, null omission, query values, and actions registered with multiple verbs.
It also makes generated names and barrel files deterministic, closes output-path collisions, publishes changed files atomically with ordinary file modes, restores cached test application state correctly, and adds dedicated frontend checks for normal and cached routes.
What changed
URL::defaults()array call without evaluating PHP.Compatibility and performance
The public surface remains Laravel-shaped: generated imports, parameter forms, named arguments, protected extension points, form helpers, and URL-default APIs are preserved. The behavior changes correct invalid or contradictory URLs and adapt generation to Hypervel's request-scoped origin and long-lived runtime.
Most work runs only during generation, compilation, tests, or frontend builds. Routing adds one primitive boolean branch per supplied URL parameter; the remaining Routing changes replace existing lookups and removals without adding I/O. No request-path lock, retry, polling loop, registry, or retained per-request state is introduced.
Validation
The change passes the complete formatter, static analysis, parallel PHP suite, Testbench package checks, and dogfood checks. Wayfinder's PHP tests, normal and cached Vitest suites, and strict generated TypeScript checks also pass, along with the focused Routing, Filesystem, Foundation, Testbench, Rate Limiter, and package metadata coverage.
For more details, see:
docs/plans/2026-08-08-1709-wayfinder-correctness-generation-parity-and-bounded-lifecycles.mdSummary by CodeRabbit
New Features
Bug Fixes
Tests