- keep table/Inertia/database link-tracking alive in piggyback-coverage
recording, and merge link-only edges into the piggybacked edge set
- route migration changes through the watch-pattern fallback when the
graph has no recorded table usage
- re-run cached failures whose test file cannot be located, downgrading
filtered runs to full replay instead of silently skipping them
- align non-filtered replay with the failOn*/displayDetailsOn* rerun policy
- resolve anonymous index Blade components (<x-card> from card/index.blade.php)
and stop swallowing components whose static usage walk selected no tests
- parse CTE/REPLACE queries and schema-qualified identifiers in TableExtractor
- scope-filter the xdebug recording path like pcov
- ignore in-flight .tmp files in FileState::keysWithPrefix and delete
unreadable worker partials
- vite deps helper: resolve rolldown through rolldown-vite installs and
degrade gracefully, honour vite.config resolve.alias (incl. the
laravel-vite-plugin '@' default), resolve .vue/.svelte/.mts/.cts
extensions, and stop memoizing cycle-tainted transitive sets
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Errors raised while resolving a test's dataset (missing named dataset,
throwing dataset closure) previously crashed the whole run. Now the data
provider catches them, wraps them in a DatasetProviderError, and the test
method rethrows the original throwable so the affected test fails cleanly
with a non-zero exit code while other tests keep running.
The Tia plugin scans the raw argv with str_starts_with() in
argumentPresent() and hasExplicitPathArgument(). In the parallel worker
path (bin/worker.php) the unserialized argv can contain an integer
--random-order-seed value as a separate element, which made
str_starts_with() throw:
TypeError: str_starts_with(): Argument #1 ($haystack) must be of
type string, int given
This is the same class of bug as #1206, which was only fixed in
HandleArguments; it resurfaced in the newer Tia plugin. Cast each argv
element to string before scanning, mirroring the #1206 fix.
Adds a regression test, and updates the parallel count assertion and the
success snapshot to account for it.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Adds `toBeEmail()` backed by `filter_var(FILTER_VALIDATE_EMAIL)`.
Mirrors the existing `toBeUrl()` pattern — no new dependencies, pure PHP.
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* refactor(shard): extract parseListTestsOutput for testability
* test(shard): characterize parseListTestsOutput current behavior
* fix(shard): parse any PHP FQCN namespace from --list-tests
* fix(shard): forward --test-directory to list-tests subprocess
* chore: lint + snapshot fixups
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(shard): make extracted helpers private, test via reflection
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* revert visual_snapshot_of_help_command_output
* revert visual_snapshot_of_help_command_output
* keep function removeParallelArguments
* strip --processes argument when building list-tests command
The removeParallelArguments method was not filtering --processes flags, causing the list-tests subprocess to fail when parallel execution was enabled. This prevented time-based sharding from working correctly with the --parallel option.
Now both --parallel/-p and --processes arguments are removed from the command used to enumerate tests, ensuring the subprocess runs successfully.
* test: re-add namespace-agnostic sharding tests
- 5.x merge kept describe()-style test file, dropped PR #1677 tests for parseListTestsOutput + buildListTestsCommand. Re-add them in matching style.
- Also fix removeParallelArguments test broken by merge: source array_values() + strips --processes, so expects ['bin/pest','tests/'].
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: update gitlab urls for issues and prs to match new format
Added an optional host parameter to the gitlab method, defaulting to 'gitlab.com'. Updated the issues and prs URLs to include '/-/' in the path, which is the new format for GitLab URLs. This change ensures that the URLs generated for GitLab projects are correct and reflect the new structure of GitLab's URLs for issues and merge requests.
Host parameter allows users to specify a custom GitLab instance if they are using a self-hosted version of GitLab, while still maintaining the default behavior for users who are using gitlab.com.
* fix: update gitlab method to use hostname parameter correctly