* feat: allow configuring the TIA directory
* refactor: simplify TIA directory resolution
* fix: bootstrap TIA state after configuration
* chore: apply Rector to TIA storage test
* fix: stabilize checks on pull requests
* fix: align TIA fixture branch resolution
* fix: preserve success snapshot formatting
* fix: order TIA storage snapshot
* chore: keep TIA directory changes scoped
PHP coerces numeric-string array keys to ints, so collecting table names in
$tables[$name] and returning array_keys() can yield ints. That breaks the
declared list<string> and throws a TypeError in Recorder::linkTable(string).
Standard SQL like substring(x FROM 1 FOR 10) is enough to trigger it, since
the numeric operand matches the FROM pattern.
Closes#1793
Co-authored-by: Danny de Wit <d.dewit@fenceweb.com>
The result cache was keyed `Class::method` on both sides, so every row of a
`->with()` test shared one entry and the last writer won. On replay that single
status was handed to every row.
`TestMethod::id()` already appends `#dataSetName`, and `TestCase` reaches the
same value object through `valueObjectForEvents()`, so both sides can use it.
- 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.