> @jackyzha0/quartz@5.0.0 test /home/saberzero1/Repos/dev-mode/repos/quartz > tsx --test TAP version 13 # Subtest: symlinkOrCopySync # Subtest: creates a symlink on success ok 1 - creates a symlink on success --- duration_ms: 10.347298 type: 'test' ... # Subtest: silently succeeds when link already exists (EEXIST) ok 2 - silently succeeds when link already exists (EEXIST) --- duration_ms: 1.222197 type: 'test' ... # Subtest: re-throws non-EPERM errors ok 3 - re-throws non-EPERM errors --- duration_ms: 1.180418 type: 'test' ... # Subtest: falls back to junction on Windows EPERM ok 4 - falls back to junction on Windows EPERM --- duration_ms: 1.189624 type: 'test' ... # Subtest: falls back to copy when both symlink and junction fail on Windows ok 5 - falls back to copy when both symlink and junction fail on Windows --- duration_ms: 1.322496 type: 'test' ... # Subtest: does not fall back on EPERM when not on Windows ok 6 - does not fall back on EPERM when not on Windows --- duration_ms: 0.863018 type: 'test' ... 1..6 ok 1 - symlinkOrCopySync --- duration_ms: 17.312714 type: 'suite' ... # Subtest: symlinkOrCopy # Subtest: creates a symlink on success ok 1 - creates a symlink on success --- duration_ms: 7.81563 type: 'test' ... # Subtest: silently succeeds when link already exists (EEXIST) ok 2 - silently succeeds when link already exists (EEXIST) --- duration_ms: 3.541694 type: 'test' ... # Subtest: falls back to copy when both symlink and junction fail on Windows ok 3 - falls back to copy when both symlink and junction fail on Windows --- duration_ms: 3.69308 type: 'test' ... # Subtest: does not fall back on EPERM when not on Windows ok 4 - does not fall back on EPERM when not on Windows --- duration_ms: 1.121286 type: 'test' ... 1..4 ok 2 - symlinkOrCopy --- duration_ms: 16.678677 type: 'suite' ... # Unknown page frame "nonexistent", falling back to "default". Available frames: default, full-width, minimal # Unknown page frame "totally-unknown", falling back to "default". Available frames: default, full-width, minimal, custom-test-frame # Subtest: resolveFrame # Subtest: returns DefaultFrame for undefined ok 1 - returns DefaultFrame for undefined --- duration_ms: 0.809538 type: 'test' ... # Subtest: returns DefaultFrame for 'default' ok 2 - returns DefaultFrame for 'default' --- duration_ms: 0.152167 type: 'test' ... # Subtest: returns named built-in frame ok 3 - returns named built-in frame --- duration_ms: 0.199626 type: 'test' ... # Subtest: returns DefaultFrame for unknown frame name ok 4 - returns DefaultFrame for unknown frame name --- duration_ms: 0.701093 type: 'test' ... # Subtest: plugin-registered frame takes priority ok 5 - plugin-registered frame takes priority --- duration_ms: 0.167897 type: 'test' ... # Subtest: returns DefaultFrame for unknown name even with plugin frames registered ok 6 - returns DefaultFrame for unknown name even with plugin frames registered --- duration_ms: 0.244692 type: 'test' ... 1..6 ok 3 - resolveFrame --- duration_ms: 3.307502 type: 'suite' ... # Component "foo" is being overwritten by src2 # Subtest: register and get # Subtest: registers a component and retrieves it by name ok 1 - registers a component and retrieves it by name --- duration_ms: 0.64098 type: 'test' ... # Subtest: returns undefined for unregistered names ok 2 - returns undefined for unregistered names --- duration_ms: 0.279297 type: 'test' ... # Subtest: overwrites component from different source ok 3 - overwrites component from different source --- duration_ms: 0.72562 type: 'test' ... 1..3 ok 4 - register and get --- duration_ms: 2.346599 type: 'suite' ... # Subtest: instantiate # Subtest: returns a component instance from a constructor ok 1 - returns a component instance from a constructor --- duration_ms: 1.233718 type: 'test' ... # Subtest: caches instances by constructor + options ok 2 - caches instances by constructor + options --- duration_ms: 0.33407 type: 'test' ... # Subtest: different options produce different instances ok 3 - different options produce different instances --- duration_ms: 0.175021 type: 'test' ... # Subtest: undefined options and no-arg call produce same cache key ok 4 - undefined options and no-arg call produce same cache key --- duration_ms: 0.108114 type: 'test' ... 1..4 ok 5 - instantiate --- duration_ms: 2.19369 type: 'suite' ... # Subtest: getAllComponents # Subtest: deduplicates components registered under multiple names ok 1 - deduplicates components registered under multiple names --- duration_ms: 0.246746 type: 'test' ... # Subtest: reuses cached instance from prior instantiate call ok 2 - reuses cached instance from prior instantiate call --- duration_ms: 0.212641 type: 'test' ... # Subtest: skips components that fail to instantiate ok 3 - skips components that fail to instantiate --- duration_ms: 0.557683 type: 'test' ... 1..3 ok 6 - getAllComponents --- duration_ms: 1.152325 type: 'suite' ... # Subtest: setOptionOverrides and cache invalidation # Subtest: stores and retrieves option overrides ok 1 - stores and retrieves option overrides --- duration_ms: 0.211429 type: 'test' ... # Subtest: merges with existing overrides ok 2 - merges with existing overrides --- duration_ms: 0.111962 type: 'test' ... # Subtest: clears instance cache when overrides change ok 3 - clears instance cache when overrides change --- duration_ms: 0.111701 type: 'test' ... # Subtest: ignores empty or undefined overrides ok 4 - ignores empty or undefined overrides --- duration_ms: 0.084078 type: 'test' ... 1..4 ok 7 - setOptionOverrides and cache invalidation --- duration_ms: 0.623196 type: 'suite' ... # Warning: Skipping circular transclusion: pageA -> pageA # Warning: Skipping circular transclusion: self -> self # Subtest: renderTranscludes # Subtest: resolves a single page transclusion ok 1 - resolves a single page transclusion --- duration_ms: 0.949652 type: 'test' ... # Subtest: allows the same page to be embedded twice as siblings ok 2 - allows the same page to be embedded twice as siblings --- duration_ms: 0.176373 type: 'test' ... # Subtest: allows different sections of the same page to be embedded ok 3 - allows different sections of the same page to be embedded --- duration_ms: 0.341846 type: 'test' ... # Subtest: detects actual circular transclusion (A -> B -> A) ok 4 - detects actual circular transclusion (A -> B -> A) --- duration_ms: 0.754284 type: 'test' ... # Subtest: self-referencing transclusion is blocked ok 5 - self-referencing transclusion is blocked --- duration_ms: 0.192293 type: 'test' ... 1..5 ok 8 - renderTranscludes --- duration_ms: 3.161576 type: 'suite' ... # Subtest: pageResources # Subtest: uses baseDir prefix for resource paths in production mode ok 1 - uses baseDir prefix for resource paths in production mode --- duration_ms: 0.349429 type: 'test' ... # Subtest: omits subpath prefix when baseDir is empty (serve mode) ok 2 - omits subpath prefix when baseDir is empty (serve mode) --- duration_ms: 0.203203 type: 'test' ... # Subtest: contentIndex path reflects baseDir ok 3 - contentIndex path reflects baseDir --- duration_ms: 0.315976 type: 'test' ... 1..3 ok 9 - pageResources --- duration_ms: 1.111928 type: 'suite' ... # Subtest: showPopover on cache-hit with hash # Subtest: does not reference any lexical popoverInner from an outer scope ok 1 - does not reference any lexical popoverInner from an outer scope --- duration_ms: 1.210334 type: 'test' ... # Subtest: skips scroll when hash is empty ok 2 - skips scroll when hash is empty --- duration_ms: 0.225175 type: 'test' ... # Subtest: skips scroll when heading is not found ok 3 - skips scroll when heading is not found --- duration_ms: 0.168037 type: 'test' ... # Subtest: decodes percent-encoded fragments when building the selector ok 4 - decodes percent-encoded fragments when building the selector --- duration_ms: 0.220486 type: 'test' ... 1..4 ok 10 - showPopover on cache-hit with hash --- duration_ms: 2.739089 type: 'suite' ... # Subtest: buggy showPopover (lexical-capture pattern) regression guard # Subtest: accessing a capture-before-declaration variable throws ReferenceError (TDZ simulation) ok 1 - accessing a capture-before-declaration variable throws ReferenceError (TDZ simulation) --- duration_ms: 0.52448 type: 'test' ... # Subtest: same pattern does NOT throw when hash is empty (explains why first link without fragment works) ok 2 - same pattern does NOT throw when hash is empty (explains why first link without fragment works) --- duration_ms: 0.239422 type: 'test' ... 1..2 ok 11 - buggy showPopover (lexical-capture pattern) regression guard --- duration_ms: 0.975251 type: 'suite' ... # Subtest: search encoder # Subtest: English text # Subtest: should tokenize simple English words ok 1 - should tokenize simple English words --- duration_ms: 1.227527 type: 'test' ... # Subtest: should handle multiple spaces ok 2 - should handle multiple spaces --- duration_ms: 0.198414 type: 'test' ... # Subtest: should handle tabs and newlines ok 3 - should handle tabs and newlines --- duration_ms: 0.196671 type: 'test' ... # Subtest: should lowercase all text ok 4 - should lowercase all text --- duration_ms: 0.119034 type: 'test' ... 1..4 ok 1 - English text --- duration_ms: 2.452649 type: 'suite' ... # Subtest: CJK text # Subtest: should tokenize Japanese Hiragana character by character ok 1 - should tokenize Japanese Hiragana character by character --- duration_ms: 0.30194 type: 'test' ... # Subtest: should tokenize Japanese Katakana character by character ok 2 - should tokenize Japanese Katakana character by character --- duration_ms: 0.20158 type: 'test' ... # Subtest: should tokenize Japanese Kanji character by character ok 3 - should tokenize Japanese Kanji character by character --- duration_ms: 0.120377 type: 'test' ... # Subtest: should tokenize Korean Hangul character by character ok 4 - should tokenize Korean Hangul character by character --- duration_ms: 0.315275 type: 'test' ... # Subtest: should tokenize Chinese characters character by character ok 5 - should tokenize Chinese characters character by character --- duration_ms: 0.253038 type: 'test' ... # Subtest: should handle mixed Hiragana/Katakana/Kanji ok 6 - should handle mixed Hiragana/Katakana/Kanji --- duration_ms: 0.240715 type: 'test' ... 1..6 ok 2 - CJK text --- duration_ms: 1.813713 type: 'suite' ... # Subtest: Mixed CJK and English # Subtest: should handle Japanese with English words ok 1 - should handle Japanese with English words --- duration_ms: 0.1858 type: 'test' ... # Subtest: should handle English with Japanese words ok 2 - should handle English with Japanese words --- duration_ms: 0.115117 type: 'test' ... # Subtest: should handle complex mixed content ok 3 - should handle complex mixed content --- duration_ms: 0.087656 type: 'test' ... # Subtest: should handle mixed Korean and English ok 4 - should handle mixed Korean and English --- duration_ms: 0.083588 type: 'test' ... # Subtest: should handle mixed Chinese and English ok 5 - should handle mixed Chinese and English --- duration_ms: 0.183396 type: 'test' ... 1..5 ok 3 - Mixed CJK and English --- duration_ms: 0.831119 type: 'suite' ... # Subtest: Edge cases # Subtest: should handle empty string ok 1 - should handle empty string --- duration_ms: 0.232679 type: 'test' ... # Subtest: should handle only whitespace ok 2 - should handle only whitespace --- duration_ms: 0.077075 type: 'test' ... # Subtest: should handle single character ok 3 - should handle single character --- duration_ms: 0.084369 type: 'test' ... # Subtest: should handle single CJK character ok 4 - should handle single CJK character --- duration_ms: 0.086433 type: 'test' ... # Subtest: should handle CJK with trailing whitespace ok 5 - should handle CJK with trailing whitespace --- duration_ms: 0.085973 type: 'test' ... # Subtest: should handle English with trailing whitespace ok 6 - should handle English with trailing whitespace --- duration_ms: 0.083127 type: 'test' ... 1..6 ok 4 - Edge cases --- duration_ms: 0.888507 type: 'suite' ... 1..4 ok 12 - search encoder --- duration_ms: 6.569308 type: 'suite' ... # Subtest: position assignment # Subtest: places component in correct position from layout.position ok 1 - places component in correct position from layout.position --- duration_ms: 1.209152 type: 'test' ... # Subtest: places component in footer position ok 2 - places component in footer position --- duration_ms: 0.282163 type: 'test' ... # Subtest: places component in header position ok 3 - places component in header position --- duration_ms: 0.228391 type: 'test' ... # Subtest: returns empty arrays when no entries have layout ok 4 - returns empty arrays when no entries have layout --- duration_ms: 0.271863 type: 'test' ... 1..4 ok 13 - position assignment --- duration_ms: 2.671401 type: 'suite' ... # Subtest: defaultPosition fallback # Subtest: uses manifest defaultPosition when no explicit layout ok 1 - uses manifest defaultPosition when no explicit layout --- duration_ms: 0.320575 type: 'test' ... # Subtest: explicit layout takes precedence over defaultPosition ok 2 - explicit layout takes precedence over defaultPosition --- duration_ms: 0.178777 type: 'test' ... # Subtest: silently skips invalid defaultPosition ok 3 - silently skips invalid defaultPosition --- duration_ms: 0.133051 type: 'test' ... 1..3 ok 14 - defaultPosition fallback --- duration_ms: 0.865834 type: 'suite' ... # Subtest: priority sorting # Subtest: sorts components within a position by priority ok 1 - sorts components within a position by priority --- duration_ms: 0.268567 type: 'test' ... # Subtest: defaults to priority 50 for defaultPosition without defaultPriority ok 2 - defaults to priority 50 for defaultPosition without defaultPriority --- duration_ms: 0.245263 type: 'test' ... 1..2 ok 15 - priority sorting --- duration_ms: 0.651219 type: 'suite' ... # Subtest: resolveGroups # Subtest: returns ungrouped items in priority order ok 1 - returns ungrouped items in priority order --- duration_ms: 0.207081 type: 'test' ... # Subtest: returns ungrouped items unchanged ok 2 - returns ungrouped items unchanged --- duration_ms: 0.097744 type: 'test' ... # Subtest: returns empty array for empty input ok 3 - returns empty array for empty input --- duration_ms: 0.082496 type: 'test' ... # Subtest: wraps grouped items in a Flex component ok 4 - wraps grouped items in a Flex component --- duration_ms: 0.221578 type: 'test' ... # Subtest: uses explicit group priority from config ok 5 - uses explicit group priority from config --- duration_ms: 0.131869 type: 'test' ... # Subtest: falls back to first member priority when no group config ok 6 - falls back to first member priority when no group config --- duration_ms: 0.109707 type: 'test' ... # Subtest: single-member group still wraps in Flex ok 7 - single-member group still wraps in Flex --- duration_ms: 0.094528 type: 'test' ... 1..7 ok 16 - resolveGroups --- duration_ms: 1.08611 type: 'suite' ... # Subtest: buildLayoutForEntries with display wrappers # Subtest: applies display wrapper for mobile-only ok 1 - applies display wrapper for mobile-only --- duration_ms: 0.155694 type: 'test' ... 1..1 ok 17 - buildLayoutForEntries with display wrappers --- duration_ms: 0.194417 type: 'suite' ... # Subtest: buildLayoutForEntries with constructors # Subtest: instantiates constructor components via registry ok 1 - instantiates constructor components via registry --- duration_ms: 0.162096 type: 'test' ... # Subtest: merges entry options with TS overrides for constructors ok 2 - merges entry options with TS overrides for constructors --- duration_ms: 0.141928 type: 'test' ... 1..2 ok 18 - buildLayoutForEntries with constructors --- duration_ms: 0.358567 type: 'suite' ... # Subtest: resolveLayout # Subtest: footer defaults to [] when sharedDefaults omits footer ok 1 - footer defaults to [] when sharedDefaults omits footer --- duration_ms: 0.909126 type: 'test' ... # Subtest: header defaults to [] when sharedDefaults omits header ok 2 - header defaults to [] when sharedDefaults omits header --- duration_ms: 0.105359 type: 'test' ... # Subtest: footer from sharedDefaults is used when no override ok 3 - footer from sharedDefaults is used when no override --- duration_ms: 0.147659 type: 'test' ... # Subtest: byPageType override replaces footer ok 4 - byPageType override replaces footer --- duration_ms: 0.160012 type: 'test' ... # Subtest: byPageType override clears footer with [] ok 5 - byPageType override clears footer with [] --- duration_ms: 0.099648 type: 'test' ... # Subtest: byPageType override clears header with [] ok 6 - byPageType override clears header with [] --- duration_ms: 0.079129 type: 'test' ... # Subtest: all array slots default to [] when sharedDefaults only has head ok 7 - all array slots default to [] when sharedDefaults only has head --- duration_ms: 0.144553 type: 'test' ... # Subtest: preserves component references through override ok 8 - preserves component references through override --- duration_ms: 0.197553 type: 'test' ... 1..8 ok 19 - resolveLayout --- duration_ms: 2.590449 type: 'suite' ... # Subtest: resolveLayout frame resolution # Subtest: config override frame wins over page type frame ok 1 - config override frame wins over page type frame --- duration_ms: 0.234171 type: 'test' ... # Subtest: page type frame wins when no config override ok 2 - page type frame wins when no config override --- duration_ms: 0.177174 type: 'test' ... # Subtest: defaults to 'default' when no frame specified ok 3 - defaults to 'default' when no frame specified --- duration_ms: 0.078077 type: 'test' ... # Subtest: defaults to 'default' when byPageType entry exists but has no frame ok 4 - defaults to 'default' when byPageType entry exists but has no frame --- duration_ms: 0.067788 type: 'test' ... 1..4 ok 20 - resolveLayout frame resolution --- duration_ms: 0.68885 type: 'suite' ... # Subtest: collectComponents # Subtest: collects all unique components across page types ok 1 - collects all unique components across page types --- duration_ms: 0.184549 type: 'test' ... # Subtest: deduplicates shared components ok 2 - deduplicates shared components --- duration_ms: 0.103365 type: 'test' ... # Subtest: handles empty footer and header arrays ok 3 - handles empty footer and header arrays --- duration_ms: 0.208233 type: 'test' ... 1..3 ok 21 - collectComponents --- duration_ms: 0.581508 type: 'suite' ... # Subtest: FileTrie # Subtest: constructor # Subtest: should create an empty trie ok 1 - should create an empty trie --- duration_ms: 0.905829 type: 'test' ... # Subtest: should set displayName from data title ok 2 - should set displayName from data title --- duration_ms: 0.228841 type: 'test' ... # Subtest: should be able to set displayName ok 3 - should be able to set displayName --- duration_ms: 0.190479 type: 'test' ... 1..3 ok 1 - constructor --- duration_ms: 1.931294 type: 'suite' ... # Subtest: add # Subtest: should add a file at root level ok 1 - should add a file at root level --- duration_ms: 0.476289 type: 'test' ... # Subtest: should handle index files ok 2 - should handle index files --- duration_ms: 0.227038 type: 'test' ... # Subtest: should add nested files ok 3 - should add nested files --- duration_ms: 0.234392 type: 'test' ... # Subtest: last-insert-wins on folder-note collision (matches emitter semantics) ok 4 - last-insert-wins on folder-note collision (matches emitter semantics) --- duration_ms: 0.173768 type: 'test' ... # Subtest: last-insert-wins on root-level index collision ok 5 - last-insert-wins on root-level index collision --- duration_ms: 0.187674 type: 'test' ... # Subtest: collision does not affect sibling files in the same folder ok 6 - collision does not affect sibling files in the same folder --- duration_ms: 0.293253 type: 'test' ... 1..6 ok 2 - add --- duration_ms: 2.106896 type: 'suite' ... # Subtest: filter # Subtest: should filter nodes based on condition ok 1 - should filter nodes based on condition --- duration_ms: 0.236667 type: 'test' ... 1..1 ok 3 - filter --- duration_ms: 0.298734 type: 'suite' ... # Subtest: map # Subtest: should apply function to all nodes ok 1 - should apply function to all nodes --- duration_ms: 0.200378 type: 'test' ... # Subtest: map over folders should work ok 2 - map over folders should work --- duration_ms: 0.222289 type: 'test' ... 1..2 ok 4 - map --- duration_ms: 0.507598 type: 'suite' ... # Subtest: entries # Subtest: should return all entries ok 1 - should return all entries --- duration_ms: 0.345122 type: 'test' ... 1..1 ok 5 - entries --- duration_ms: 0.401127 type: 'suite' ... # Subtest: fromEntries # Subtest: nested ok 1 - nested --- duration_ms: 0.201771 type: 'test' ... 1..1 ok 6 - fromEntries --- duration_ms: 0.257887 type: 'suite' ... # Subtest: findNode # Subtest: should find root node with empty path ok 1 - should find root node with empty path --- duration_ms: 0.162717 type: 'test' ... # Subtest: should find node at first level ok 2 - should find node at first level --- duration_ms: 0.108686 type: 'test' ... # Subtest: should find nested node ok 3 - should find nested node --- duration_ms: 0.130115 type: 'test' ... # Subtest: should return undefined for non-existent path ok 4 - should return undefined for non-existent path --- duration_ms: 0.282844 type: 'test' ... # Subtest: should return undefined for partial path ok 5 - should return undefined for partial path --- duration_ms: 0.142459 type: 'test' ... 1..5 ok 7 - findNode --- duration_ms: 0.958178 type: 'suite' ... # Subtest: getFolderPaths # Subtest: should return all folder paths ok 1 - should return all folder paths --- duration_ms: 0.301038 type: 'test' ... 1..1 ok 8 - getFolderPaths --- duration_ms: 0.369187 type: 'suite' ... # Subtest: sort # Subtest: should sort nodes according to sort function ok 1 - should sort nodes according to sort function --- duration_ms: 5.928509 type: 'test' ... 1..1 ok 9 - sort --- duration_ms: 6.028056 type: 'suite' ... # Subtest: pathToNode # Subtest: should return root node for empty path ok 1 - should return root node for empty path --- duration_ms: 0.335423 type: 'test' ... # Subtest: should return root node for index path ok 2 - should return root node for index path --- duration_ms: 0.163468 type: 'test' ... # Subtest: should return path to first level node ok 3 - should return path to first level node --- duration_ms: 0.166875 type: 'test' ... # Subtest: should return path to nested node ok 4 - should return path to nested node --- duration_ms: 0.16442 type: 'test' ... # Subtest: should return undefined for non-existent path ok 5 - should return undefined for non-existent path --- duration_ms: 0.147658 type: 'test' ... # Subtest: should return file data for intermediate folders ok 6 - should return file data for intermediate folders --- duration_ms: 0.179549 type: 'test' ... # Subtest: should return path for partial path ok 7 - should return path for partial path --- duration_ms: 0.152077 type: 'test' ... 1..7 ok 10 - pathToNode --- duration_ms: 1.565454 type: 'suite' ... 1..10 ok 22 - FileTrie --- duration_ms: 15.228581 type: 'suite' ... # Subtest: typeguards # Subtest: isSimpleSlug ok 1 - isSimpleSlug --- duration_ms: 0.97492 type: 'test' ... # Subtest: isRelativeURL ok 2 - isRelativeURL --- duration_ms: 0.195779 type: 'test' ... # Subtest: isAbsoluteURL ok 3 - isAbsoluteURL --- duration_ms: 0.19604 type: 'test' ... # Subtest: isFullSlug ok 4 - isFullSlug --- duration_ms: 0.214975 type: 'test' ... # Subtest: isFilePath ok 5 - isFilePath --- duration_ms: 0.136919 type: 'test' ... 1..5 ok 23 - typeguards --- duration_ms: 2.576863 type: 'suite' ... # Subtest: transforms # Subtest: simplifySlug ok 1 - simplifySlug --- duration_ms: 0.356002 type: 'test' ... # Subtest: slugifyFilePath ok 2 - slugifyFilePath --- duration_ms: 0.669042 type: 'test' ... # Subtest: slugifyFilePath + simplifySlug end-to-end canonicalization ok 3 - slugifyFilePath + simplifySlug end-to-end canonicalization --- duration_ms: 0.293133 type: 'test' ... # Subtest: transformInternalLink ok 4 - transformInternalLink --- duration_ms: 1.162725 type: 'test' ... # Subtest: pathToRoot ok 5 - pathToRoot --- duration_ms: 0.351684 type: 'test' ... # Subtest: joinSegments ok 6 - joinSegments --- duration_ms: 0.183346 type: 'test' ... 1..6 ok 24 - transforms --- duration_ms: 3.370802 type: 'suite' ... # Subtest: link strategies # Subtest: absolute # Subtest: from a/b/c ok 1 - from a/b/c --- duration_ms: 0.621303 type: 'test' ... # Subtest: from a/b/index ok 2 - from a/b/index --- duration_ms: 0.164641 type: 'test' ... # Subtest: from index ok 3 - from index --- duration_ms: 0.150684 type: 'test' ... 1..3 ok 1 - absolute --- duration_ms: 1.103632 type: 'suite' ... # Subtest: shortest # Subtest: from a/b/c ok 1 - from a/b/c --- duration_ms: 0.415023 type: 'test' ... # Subtest: from a/b/index ok 2 - from a/b/index --- duration_ms: 0.189498 type: 'test' ... # Subtest: from index ok 3 - from index --- duration_ms: 0.189237 type: 'test' ... 1..3 ok 2 - shortest --- duration_ms: 0.92683 type: 'suite' ... # Subtest: relative # Subtest: from a/b/c ok 1 - from a/b/c --- duration_ms: 0.252567 type: 'test' ... # Subtest: from a/b/index ok 2 - from a/b/index --- duration_ms: 0.132881 type: 'test' ... # Subtest: from index ok 3 - from index --- duration_ms: 0.110048 type: 'test' ... 1..3 ok 3 - relative --- duration_ms: 0.612807 type: 'suite' ... 1..3 ok 25 - link strategies --- duration_ms: 2.857253 type: 'suite' ... # Subtest: resolveRelative # Subtest: from index ok 1 - from index --- duration_ms: 0.156054 type: 'test' ... # Subtest: from nested page ok 2 - from nested page --- duration_ms: 0.109888 type: 'test' ... # Subtest: with index paths ok 3 - with index paths --- duration_ms: 0.112602 type: 'test' ... # Subtest: with simple slugs ok 4 - with simple slugs --- duration_ms: 0.10637 type: 'test' ... 1..4 ok 26 - resolveRelative --- duration_ms: 0.634959 type: 'suite' ... # Subtest: detectSlugCollisions # Subtest: returns empty array when there are no collisions ok 1 - returns empty array when there are no collisions --- duration_ms: 1.175829 type: 'test' ... # Subtest: returns empty array for empty input ok 2 - returns empty array for empty input --- duration_ms: 0.135776 type: 'test' ... # Subtest: detects a two-file collision with winner = last file ok 3 - detects a two-file collision with winner = last file --- duration_ms: 0.133882 type: 'test' ... # Subtest: detects a three-file collision with all files listed, winner = last ok 4 - detects a three-file collision with all files listed, winner = last --- duration_ms: 0.141608 type: 'test' ... # Subtest: detects multiple separate collisions ok 5 - detects multiple separate collisions --- duration_ms: 0.198494 type: 'test' ... # Subtest: ignores entries without a slug ok 6 - ignores entries without a slug --- duration_ms: 0.10039 type: 'test' ... # Subtest: winner annotation matches fileTrie last-insert-wins semantics ok 7 - winner annotation matches fileTrie last-insert-wins semantics --- duration_ms: 0.092425 type: 'test' ... 1..7 ok 27 - detectSlugCollisions --- duration_ms: 3.218564 type: 'suite' ... # Subtest: formatCollisionWarning # Subtest: returns empty string for empty input ok 1 - returns empty string for empty input --- duration_ms: 0.236537 type: 'test' ... # Subtest: formats single collision with winner and shadowed markers ok 2 - formats single collision with winner and shadowed markers --- duration_ms: 0.416075 type: 'test' ... # Subtest: formats multiple collisions with count in header ok 3 - formats multiple collisions with count in header --- duration_ms: 0.426344 type: 'test' ... # Subtest: output mentions Folder Notes convention as a common cause ok 4 - output mentions Folder Notes convention as a common cause --- duration_ms: 0.155453 type: 'test' ... # Subtest: falls back to filePath when relativePath is missing ok 5 - falls back to filePath when relativePath is missing --- duration_ms: 0.180831 type: 'test' ... 1..5 ok 28 - formatCollisionWarning --- duration_ms: 1.754481 type: 'suite' ... 1..28 # tests 163 # suites 45 # pass 163 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 334.058263