note: You are running `vp test` as a Vite+ built-in command. If you meant to run the test npm script, use `vpr test` instead. RUN v5.0.1 /tmp/pull-request-05/19177-runtime stdout | proof.test.ts > the unchanged zero-argument hook caller can still refresh PASS zero-argument refresh; no invalidation [ 'detail' ] × proof.test.ts > actual route closure and hook replace held pending checks after invalidation; spinner owns both phases and deduplicates pulls 33ms → expected [ 'detail', 'guide', 'stack', …(6) ] to deeply equal [ 'invalidate:start' ] × proof.test.ts > rejected invalidation still refreshes all sections, guide enabled=true 4ms → expected [ 'detail', 'guide', 'stack', …(2) ] to deeply equal [ 'invalidate:start', …(6) ] × proof.test.ts > rejected invalidation still refreshes all sections, guide enabled=false 3ms → expected [ 'detail', 'stack', 'activity', …(1) ] to deeply equal [ 'invalidate:start', …(5) ] × proof.test.ts > changing selection while invalidation is pending prevents obsolete reads 4ms → expected [ 'detail', 'guide', 'stack', …(2) ] to deeply equal [ 'invalidate:start', …(1) ] ✓ proof.test.ts > the unchanged zero-argument hook caller can still refresh 4ms × proof.test.ts > unmount during invalidation prevents late dependent and detail reads 3ms → expected [ 'detail', 'guide', 'stack', …(2) ] to deeply equal [ 'invalidate:start', …(1) ] × proof.test.ts > old invalidation cannot clear a newer atom's spinner 3ms → expected false to be true // Object.is equality ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 6 ⎯⎯⎯⎯⎯⎯⎯ FAIL proof.test.ts > actual route closure and hook replace held pending checks after invalidation; spinner owns both phases and deduplicates pulls AssertionError: expected [ 'detail', 'guide', 'stack', …(6) ] to deeply equal [ 'invalidate:start' ] - Expected + Received [ - "invalidate:start", + "detail", + "guide", + "stack", + "activity", + "files", + "guide", + "stack", + "activity", + "files", ] ❯ proof.test.ts:103:20 101| await act(async () => { f.pull(); f.pull(); }); 102| expect(f.api.refreshing).toBe(true); 103| expect(f.events).toEqual(["invalidate:start"]); | ^ 104| expect(f.invalidations).toBe(1); 105| expect(f.inputs).toEqual([{environmentId: params.environmentId, inpu… ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/6]⎯ FAIL proof.test.ts > rejected invalidation still refreshes all sections, guide enabled=true AssertionError: expected [ 'detail', 'guide', 'stack', …(2) ] to deeply equal [ 'invalidate:start', …(6) ] - Expected + Received [ - "invalidate:start", - "invalidate:rejected", + "detail", "guide", "stack", "activity", "files", - "detail", ] ❯ proof.test.ts:119:20 117| await act(async () => { f.pull(); }); 118| await act(async () => { f.invalidateGate.resolve(); }); 119| expect(f.events).toEqual(["invalidate:start", "invalidate:rejected",… | ^ 120| expect(f.api.refreshing).toBe(false); 121| console.log("PASS rejected invalidation fallback; guide conditional=… ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/6]⎯ FAIL proof.test.ts > rejected invalidation still refreshes all sections, guide enabled=false AssertionError: expected [ 'detail', 'stack', 'activity', …(1) ] to deeply equal [ 'invalidate:start', …(5) ] - Expected + Received [ - "invalidate:start", - "invalidate:rejected", + "detail", "stack", "activity", "files", - "detail", ] ❯ proof.test.ts:119:20 117| await act(async () => { f.pull(); }); 118| await act(async () => { f.invalidateGate.resolve(); }); 119| expect(f.events).toEqual(["invalidate:start", "invalidate:rejected",… | ^ 120| expect(f.api.refreshing).toBe(false); 121| console.log("PASS rejected invalidation fallback; guide conditional=… ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/6]⎯ FAIL proof.test.ts > changing selection while invalidation is pending prevents obsolete reads AssertionError: expected [ 'detail', 'guide', 'stack', …(2) ] to deeply equal [ 'invalidate:start', …(1) ] - Expected + Received [ - "invalidate:start", - "invalidate:done", + "detail", + "guide", + "stack", + "activity", + "files", ] ❯ proof.test.ts:129:20 127| await f.render(null); expect(f.api.refreshing).toBe(false); 128| await act(async () => f.invalidateGate.resolve()); 129| expect(f.events).toEqual(["invalidate:start", "invalidate:done"]); | ^ 130| console.log("PASS selection change prevents obsolete dependent/detai… 131| }); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/6]⎯ FAIL proof.test.ts > unmount during invalidation prevents late dependent and detail reads AssertionError: expected [ 'detail', 'guide', 'stack', …(2) ] to deeply equal [ 'invalidate:start', …(1) ] - Expected + Received [ - "invalidate:start", - "invalidate:done", + "detail", + "guide", + "stack", + "activity", + "files", ] ❯ proof.test.ts:145:20 143| await act(async () => f.unmount()); 144| await act(async () => f.invalidateGate.resolve()); 145| expect(f.events).toEqual(["invalidate:start", "invalidate:done"]); | ^ 146| }); 147| ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/6]⎯ FAIL proof.test.ts > old invalidation cannot clear a newer atom's spinner AssertionError: expected false to be true // Object.is equality - Expected + Received - true + false ❯ proof.test.ts:155:28 153| await f.render(second); 154| await act(async () => f.api.onRefresh(() => gate.promise)); 155| expect(f.api.refreshing).toBe(true); | ^ 156| await act(async () => f.invalidateGate.resolve()); 157| expect(f.api.refreshing).toBe(true); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/6]⎯ Test Files 1 failed (1) Tests 6 failed | 1 passed (7) Start at 10:35:44 Duration 3.08s (transform 38%, import 35%, environment 25%, tests 2%)