> vibery-website@1.0.0 test:run > vitest run  RUN  v4.0.16 /Applications/MAMP/htdocs/vibe-templates/website ✓ .claude/skills/sequential-thinking/tests/format-thought.test.js (10 tests) 3ms ✓ .claude/skills/sequential-thinking/tests/process-thought.test.js (11 tests) 6ms ❯ src/__tests__/useSearch.test.ts (32 tests | 1 failed) 15ms ✓ finds exact template name match 3ms ✓ finds exact stack name match 1ms ✓ finds by template type 0ms ✓ handles typos - nextjs as nxtjs 0ms ✓ finds partial matches - "docker" matches "docker-setup" 0ms ✓ handles fuzzy description search - "auth" finds supabase-auth 0ms ✓ finds "security" in multiple items 0ms ✓ returns no results for single character query 0ms ✓ returns no results for empty query 0ms ✓ returns results for two character query 0ms ✓ works with three+ character queries 0ms ✓ limits results to max 8 items 0ms ✓ returns fewer results if fewer items match 0ms ✓ ranks name matches higher than description matches 0ms ✓ returns results sorted by score descending 0ms ✓ includes match metadata 0ms ✓ searches templates and stacks together 0ms ✓ returns correct SearchResult structure 0ms ✓ marks items with correct itemType 0ms ✓ updates query state on search 0ms ✓ clears search state 0ms ✓ manages isSearching flag 0ms  × handles empty template and stack arrays 4ms ✓ handles special characters in query 0ms ✓ handles whitespace in query 0ms ✓ handles case-insensitive search 0ms ✓ handles multiple searches sequentially 0ms ✓ indexes items without error 0ms ✓ handles large template sets 0ms ✓ searches quickly with fuzzy matching 0ms ✓ finds by tag 0ms ✓ finds by category 0ms stderr | src/__tests__/SearchBar.test.ts > SearchBar.vue > keyboard navigation > responds to ArrowDown key [Vue warn] Write operation failed: computed value is readonly stderr | src/__tests__/SearchBar.test.ts > SearchBar.vue > keyboard navigation > responds to ArrowUp key [Vue warn] Write operation failed: computed value is readonly stderr | src/__tests__/SearchBar.test.ts > SearchBar.vue > keyboard navigation > prevents default on arrow key [Vue warn] Write operation failed: computed value is readonly stderr | src/__tests__/SearchBar.test.ts > SearchBar.vue > keyboard navigation > does not exceed max index on ArrowDown [Vue warn] Write operation failed: computed value is readonly stderr | src/__tests__/SearchBar.test.ts > SearchBar.vue > keyboard navigation > does not go below -1 on ArrowUp [Vue warn] Write operation failed: computed value is readonly stderr | src/__tests__/SearchBar.test.ts > SearchBar.vue > keyboard navigation > closes dropdown on Escape key [Vue warn] Write operation failed: computed value is readonly stderr | src/__tests__/SearchBar.test.ts > SearchBar.vue > keyboard navigation > selects suggestion on Enter key [Vue warn] Write operation failed: computed value is readonly stderr | src/__tests__/SearchBar.test.ts > SearchBar.vue > keyboard navigation > selects suggestion on Enter key [Vue warn] Write operation failed: computed value is readonly ❯ src/__tests__/SearchBar.test.ts (41 tests | 13 failed) 73ms ✓ renders search input field 11ms ✓ displays placeholder text 2ms ✓ renders search icon 2ms ✓ renders keyboard shortcut hint when input is empty 2ms ✓ hides keyboard hint when user types 4ms ✓ shows clear button when input has value 2ms ✓ search container exists 3ms ✓ updates v-model on input change 2ms ✓ opens dropdown on input focus 2ms ✓ emits search event with query 3ms ✓ clears search on clear button click 2ms ✓ debounces search input by 100ms 2ms ✓ cancels previous debounce on rapid input 1ms  × responds to ArrowDown key 5ms  × responds to ArrowUp key 1ms  × prevents default on arrow key 1ms ✓ does not exceed max index on ArrowDown 1ms ✓ does not go below -1 on ArrowUp 1ms  × closes dropdown on Escape key 2ms  × selects suggestion on Enter key 1ms ✓ focuses input on "/" key press 1ms  × ignores "/" when input is already focused 1ms  × shows dropdown when suggestions exist 1ms ✓ hides dropdown when no suggestions 1ms ✓ hides dropdown when closed 1ms ✓ closes dropdown on outside click 1ms  × displays icon for each suggestion 1ms  × displays suggestion name 1ms  × displays suggestion description 1ms  × shows result count 1ms ✓ limits suggestions to 8 results 1ms ✓ clears search on selection 3ms ✓ closes dropdown on selection 1ms  × resets selected index on selection 1ms  × emits select event with template 1ms ✓ updates selected index on mouse enter 1ms ✓ clears debounce timer on unmount 1ms ✓ removes event listeners on unmount 1ms ✓ has autocomplete="off" on input 1ms ✓ clear button has aria-label 1ms ✓ search input is properly typed 1ms ⎯⎯⎯⎯⎯⎯ Failed Suites 3 ⎯⎯⎯⎯⎯⎯⎯  FAIL  .claude/skills/chrome-devtools/scripts/__tests__/selector.test.js [ .claude/skills/chrome-devtools/scripts/__tests__/selector.test.js ] Error: Cannot bundle built-in module "node:test" imported from ".claude/skills/chrome-devtools/scripts/__tests__/selector.test.js". Consider disabling environments.client.noExternal or remove the built-in dependency. Plugin: vite:import-analysis File: /Applications/MAMP/htdocs/vibe-templates/website/.claude/skills/chrome-devtools/scripts/__tests__/selector.test.js:5:31  3 | * Run with: node --test __tests__/selector.test.js 4 | */ 5 | import { describe, it } from 'node:test'; | ^ 6 | import assert from 'node:assert'; 7 | import { parseSelector } from '../lib/selector.js';  ❯ ResolveIdContext._formatLog node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:42528:41  ❯ ResolveIdContext.error node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:42525:16  ❯ ResolveIdContext.resolveId node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:15861:18  ❯ EnvironmentPluginContainer.resolveId node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:42242:17  ❯ TransformPluginContext.resolve node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:42449:15  ❯ normalizeUrl node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:40492:26  ❯ node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:40623:37  ❯ TransformPluginContext.transform node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:40550:7  ❯ EnvironmentPluginContainer.transform node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:42323:18 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/17]⎯  FAIL  public/templates/skills/chrome-devtools/scripts/__tests__/selector.test.js [ public/templates/skills/chrome-devtools/scripts/__tests__/selector.test.js ] Error: Cannot bundle built-in module "node:test" imported from "public/templates/skills/chrome-devtools/scripts/__tests__/selector.test.js". Consider disabling environments.client.noExternal or remove the built-in dependency. Plugin: vite:import-analysis File: /Applications/MAMP/htdocs/vibe-templates/website/public/templates/skills/chrome-devtools/scripts/__tests__/selector.test.js:5:31  3 | * Run with: node --test __tests__/selector.test.js 4 | */ 5 | import { describe, it } from 'node:test'; | ^ 6 | import assert from 'node:assert'; 7 | import { parseSelector } from '../lib/selector.js';  ❯ ResolveIdContext._formatLog node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:42528:41  ❯ ResolveIdContext.error node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:42525:16  ❯ ResolveIdContext.resolveId node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:15861:18  ❯ EnvironmentPluginContainer.resolveId node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:42242:17  ❯ TransformPluginContext.resolve node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:42449:15  ❯ normalizeUrl node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:40492:26  ❯ node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:40623:37  ❯ TransformPluginContext.transform node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:40550:7  ❯ EnvironmentPluginContainer.transform node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:42323:18 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/17]⎯  FAIL  dist/templates/skills/chrome-devtools/scripts/__tests__/selector.test.js [ dist/templates/skills/chrome-devtools/scripts/__tests__/selector.test.js ] Error: Cannot bundle built-in module "node:test" imported from "dist/templates/skills/chrome-devtools/scripts/__tests__/selector.test.js". Consider disabling environments.client.noExternal or remove the built-in dependency. Plugin: vite:import-analysis File: /Applications/MAMP/htdocs/vibe-templates/website/dist/templates/skills/chrome-devtools/scripts/__tests__/selector.test.js:5:31  3 | * Run with: node --test __tests__/selector.test.js 4 | */ 5 | import { describe, it } from 'node:test'; | ^ 6 | import assert from 'node:assert'; 7 | import { parseSelector } from '../lib/selector.js';  ❯ ResolveIdContext._formatLog node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:42528:41  ❯ ResolveIdContext.error node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:42525:16  ❯ ResolveIdContext.resolveId node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:15861:18  ❯ EnvironmentPluginContainer.resolveId node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:42242:17  ❯ TransformPluginContext.resolve node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:42449:15  ❯ normalizeUrl node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:40492:26  ❯ node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:40623:37  ❯ TransformPluginContext.transform node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:40550:7  ❯ EnvironmentPluginContainer.transform node_modules/vite/dist/node/chunks/dep-D4NMHUTW.js:42323:18 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/17]⎯ ⎯⎯⎯⎯⎯⎯ Failed Tests 14 ⎯⎯⎯⎯⎯⎯⎯  FAIL  src/__tests__/SearchBar.test.ts > SearchBar.vue > keyboard navigation > responds to ArrowDown key AssertionError: expected -1 to be +0 // Object.is equality - Expected + Received - 0 + -1  ❯ src/__tests__/SearchBar.test.ts:190:40 188|  await wrapper.vm.$nextTick(); 189|  190|  expect(wrapper.vm.selectedIndex).toBe(0);  |  ^ 191|  }); 192|  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/17]⎯  FAIL  src/__tests__/SearchBar.test.ts > SearchBar.vue > keyboard navigation > responds to ArrowUp key AssertionError: expected 1 to be +0 // Object.is equality - Expected + Received - 0 + 1  ❯ src/__tests__/SearchBar.test.ts:201:40 199|  await wrapper.vm.$nextTick(); 200|  201|  expect(wrapper.vm.selectedIndex).toBe(0);  |  ^ 202|  }); 203|  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/17]⎯  FAIL  src/__tests__/SearchBar.test.ts > SearchBar.vue > keyboard navigation > prevents default on arrow key AssertionError: expected "preventDefault" to be called at least once  ❯ src/__tests__/SearchBar.test.ts:211:33 209|  await input.trigger('keydown', event); 210|  211|  expect(preventDefaultSpy).toHaveBeenCalled();  |  ^ 212|  }); 213|  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/17]⎯  FAIL  src/__tests__/SearchBar.test.ts > SearchBar.vue > keyboard navigation > closes dropdown on Escape key AssertionError: expected true to be false // Object.is equality - Expected + Received - false + true  ❯ src/__tests__/SearchBar.test.ts:244:33 242|  await wrapper.vm.$nextTick(); 243|  244|  expect(wrapper.vm.isOpen).toBe(false);  |  ^ 245|  }); 246|  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/17]⎯  FAIL  src/__tests__/SearchBar.test.ts > SearchBar.vue > keyboard navigation > selects suggestion on Enter key AssertionError: expected "preventDefault" to be called at least once  ❯ src/__tests__/SearchBar.test.ts:257:33 255|  await wrapper.vm.$nextTick(); 256|  257|  expect(preventDefaultSpy).toHaveBeenCalled();  |  ^ 258|  }); 259|  }); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/17]⎯  FAIL  src/__tests__/SearchBar.test.ts > SearchBar.vue > global shortcuts > ignores "/" when input is already focused AssertionError: expected 'BODY' not to be 'BODY' // Object.is equality  ❯ src/__tests__/SearchBar.test.ts:280:51 278|  279|  // Focus should remain on input 280|  expect(document.activeElement?.tagName).not.toBe('BODY');  |  ^ 281|  }); 282|  }); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[9/17]⎯  FAIL  src/__tests__/SearchBar.test.ts > SearchBar.vue > dropdown visibility > shows dropdown when suggestions exist AssertionError: expected false to be true // Object.is equality - Expected + Received - true + false  ❯ src/__tests__/SearchBar.test.ts:296:39 294|  await wrapper.vm.$nextTick(); 295|  296|  expect(wrapper.vm.showDropdown).toBe(true);  |  ^ 297|  }); 298|  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[10/17]⎯  FAIL  src/__tests__/SearchBar.test.ts > SearchBar.vue > suggestion rendering > displays icon for each suggestion AssertionError: expected false to be true // Object.is equality - Expected + Received - true + false  ❯ src/__tests__/SearchBar.test.ts:343:29 341|  342|  const icon = wrapper.find('.ph-robot'); 343|  expect(icon.exists()).toBe(true);  |  ^ 344|  }); 345|  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[11/17]⎯  FAIL  src/__tests__/SearchBar.test.ts > SearchBar.vue > suggestion rendering > displays suggestion name TypeError: Cannot read properties of undefined (reading 'name')  ❯ src/__tests__/SearchBar.test.ts:357:40 355|  await wrapper.vm.$nextTick(); 356|  357|  expect(wrapper.vm.suggestions[0].name).toBe('nextjs-architecture…  |  ^ 358|  }); 359|  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[12/17]⎯  FAIL  src/__tests__/SearchBar.test.ts > SearchBar.vue > suggestion rendering > displays suggestion description TypeError: Cannot read properties of undefined (reading 'description')  ❯ src/__tests__/SearchBar.test.ts:371:40 369|  await wrapper.vm.$nextTick(); 370|  371|  expect(wrapper.vm.suggestions[0].description).toContain('Expert …  |  ^ 372|  }); 373|  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[13/17]⎯  FAIL  src/__tests__/SearchBar.test.ts > SearchBar.vue > suggestion rendering > shows result count AssertionError: expected +0 to be 1 // Object.is equality - Expected + Received - 1 + 0  ❯ src/__tests__/SearchBar.test.ts:386:45 384|  385|  // Result count is shown in template 386|  expect(wrapper.vm.suggestions.length).toBe(1);  |  ^ 387|  }); 388|  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[14/17]⎯  FAIL  src/__tests__/SearchBar.test.ts > SearchBar.vue > item selection > resets selected index on selection AssertionError: expected 2 to be -1 // Object.is equality - Expected + Received - -1 + 2  ❯ src/__tests__/SearchBar.test.ts:424:40 422|  await wrapper.vm.$nextTick(); 423|  424|  expect(wrapper.vm.selectedIndex).toBe(-1);  |  ^ 425|  }); 426|  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[15/17]⎯  FAIL  src/__tests__/SearchBar.test.ts > SearchBar.vue > item selection > emits select event with template AssertionError: expected undefined to be truthy - Expected: true + Received: undefined  ❯ src/__tests__/SearchBar.test.ts:431:41 429|  await wrapper.vm.$nextTick(); 430|  431|  expect(wrapper.emitted('select')).toBeTruthy();  |  ^ 432|  if (wrapper.emitted('select')) { 433|  expect(wrapper.emitted('select')[0][0].name).toBe('nextjs-arch… ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[16/17]⎯  FAIL  src/__tests__/useSearch.test.ts > useSearch > edge cases > handles empty template and stack arrays AssertionError: expected [ { item: undefined, …(2) } ] to have a length of +0 but got 1 - Expected + Received - 0 + 1  ❯ src/__tests__/useSearch.test.ts:315:29 313|  performSearch('test', [], []); 314|  315|  expect(results.value).toHaveLength(0);  |  ^ 316|  }); 317|  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[17/17]⎯  Test Files  5 failed | 2 passed (7)  Tests  14 failed | 80 passed (94)  Start at  15:29:37  Duration  669ms (transform 238ms, setup 0ms, import 399ms, tests 97ms, environment 1.76s)