# F06 / F13 LABELLED HARNESS — after
Commit: bff5e1cba9b94ab1a95dde3f8a211fb941547e31
Time: 2026-11-10T16:43:22.714Z
Command: EVIDENCE_SIDE=after EVIDENCE_SHA=bff5e1cba9b94ab1a95dde3f8a211fb941547e31 vp test run apps/server/src/project/ProjectEnrichmentService.evidence.test.ts --reporter=verbose
Driver: node /tmp/lead-32359-r1/evidence-capture-1/harness-driver.mjs /home/user/wt/pr-32359 after
Environment: Node v26.12.1; Linux 6.8.0-117-generic x64
This is a focused service harness, not a real server. Synthetic resolver faults and cacheCapacity=2. simulatedMillis is TestClock time. Look for F06 I1 fallback with resolved=false after a defect, then I2 success; F13 evicted B null while retained roots remain non-null. Before intentionally asserts the merge-base's null behavior. All milestones use Deferred or PubSub; no sleeps.
AI-assisted; verified with the tests and tools listed above.

```text

 RUN  v5.0.5 /home/user/wt/pr-32359

stdout | src/project/ProjectEnrichmentService.evidence.test.ts > F06 labelled harness: warmed identity, held failing refresh, failure TTL and recovery
{"row":"F06","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":0,"step":"cold","value":{"repositoryIdentity":null,"faviconPath":null,"repositoryIdentityResolved":false}}

stdout | src/project/ProjectEnrichmentService.evidence.test.ts > F06 labelled harness: warmed identity, held failing refresh, failure TTL and recovery
{"row":"F06","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":0,"step":"warm-notification","value":{"workspaceRoot":"/widgets","repositoryIdentityResolved":true,"enrichment":{"repositoryIdentity":{"canonicalKey":"github.com/acme/widgets-v1","rootPath":"/widgets","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/widgets-v1.git"}},"faviconPath":null,"repositoryIdentityResolved":true}}}
{"row":"F06","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":0,"step":"warm-I1","value":{"repositoryIdentity":{"canonicalKey":"github.com/acme/widgets-v1","rootPath":"/widgets","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/widgets-v1.git"}},"faviconPath":null,"repositoryIdentityResolved":true}}

stdout | src/project/ProjectEnrichmentService.evidence.test.ts > F06 labelled harness: warmed identity, held failing refresh, failure TTL and recovery
{"row":"F06","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":61000,"step":"expired-before-failing-refresh","value":{"repositoryIdentity":{"canonicalKey":"github.com/acme/widgets-v1","rootPath":"/widgets","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/widgets-v1.git"}},"faviconPath":null,"repositoryIdentityResolved":false}}

stdout | src/project/ProjectEnrichmentService.evidence.test.ts > F06 labelled harness: warmed identity, held failing refresh, failure TTL and recovery
{"row":"F06","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":61000,"step":"failing-refresh-held","value":{"repositoryIdentity":{"canonicalKey":"github.com/acme/widgets-v1","rootPath":"/widgets","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/widgets-v1.git"}},"faviconPath":null,"repositoryIdentityResolved":false}}
{"row":"F06","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":61000,"step":"failed-notification-unresolved","value":{"workspaceRoot":"/widgets","repositoryIdentityResolved":false,"enrichment":{"repositoryIdentity":null,"faviconPath":null,"repositoryIdentityResolved":false}}}
{"row":"F06","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":61000,"step":"failed-refresh-fallback","value":{"repositoryIdentity":{"canonicalKey":"github.com/acme/widgets-v1","rootPath":"/widgets","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/widgets-v1.git"}},"faviconPath":null,"repositoryIdentityResolved":false}}
{"row":"F06","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":61000,"step":"direct-read-during-failure-still-null","value":null}

stdout | src/project/ProjectEnrichmentService.evidence.test.ts > F06 labelled harness: warmed identity, held failing refresh, failure TTL and recovery
{"row":"F06","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":65000,"step":"four-seconds-into-failure-TTL-no-retry","value":{"enrichment":{"repositoryIdentity":{"canonicalKey":"github.com/acme/widgets-v1","rootPath":"/widgets","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/widgets-v1.git"}},"faviconPath":null,"repositoryIdentityResolved":false},"calls":2}}

stdout | src/project/ProjectEnrichmentService.evidence.test.ts > F06 labelled harness: warmed identity, held failing refresh, failure TTL and recovery
{"row":"F06","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":67000,"step":"failure-TTL-expired-retry","value":{"repositoryIdentity":{"canonicalKey":"github.com/acme/widgets-v1","rootPath":"/widgets","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/widgets-v1.git"}},"faviconPath":null,"repositoryIdentityResolved":false}}

stdout | src/project/ProjectEnrichmentService.evidence.test.ts > F06 labelled harness: warmed identity, held failing refresh, failure TTL and recovery
{"row":"F06","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":67000,"step":"recovery-held","value":{"repositoryIdentity":{"canonicalKey":"github.com/acme/widgets-v1","rootPath":"/widgets","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/widgets-v1.git"}},"faviconPath":null,"repositoryIdentityResolved":false}}
{"row":"F06","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":67000,"step":"recovery-notification","value":{"workspaceRoot":"/widgets","repositoryIdentityResolved":true,"enrichment":{"repositoryIdentity":{"canonicalKey":"github.com/acme/widgets-v2","rootPath":"/widgets","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/widgets-v2.git"}},"faviconPath":null,"repositoryIdentityResolved":true}}}
{"row":"F06","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":67000,"step":"recovered-I2","value":{"repositoryIdentity":{"canonicalKey":"github.com/acme/widgets-v2","rootPath":"/widgets","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/widgets-v2.git"}},"faviconPath":null,"repositoryIdentityResolved":true}}

stdout | src/project/ProjectEnrichmentService.evidence.test.ts > F06 labelled harness: warmed identity, held failing refresh, failure TTL and recovery
{"row":"F06","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":128000,"step":"I2-after-next-positive-TTL","value":{"repositoryIdentity":{"canonicalKey":"github.com/acme/widgets-v2","rootPath":"/widgets","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/widgets-v2.git"}},"faviconPath":null,"repositoryIdentityResolved":false}}

stdout | src/project/ProjectEnrichmentService.evidence.test.ts > F13 labelled harness: capacity two, replacement order, eviction, pending refresh, null removal
{"row":"F13","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":0,"step":"warm-A-B","value":{"A":{"repositoryIdentity":{"canonicalKey":"github.com/acme/A-v1","rootPath":"/A","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/A-v1.git"}},"faviconPath":null,"repositoryIdentityResolved":true},"B":{"repositoryIdentity":{"canonicalKey":"github.com/acme/B-v1","rootPath":"/B","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/B-v1.git"}},"faviconPath":null,"repositoryIdentityResolved":true}}}

stdout | src/project/ProjectEnrichmentService.evidence.test.ts > F13 labelled harness: capacity two, replacement order, eviction, pending refresh, null removal
{"row":"F13","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":61000,"step":"replace-A-moves-it-newest-without-evicting-B","value":{"A":{"repositoryIdentity":{"canonicalKey":"github.com/acme/A-v2","rootPath":"/A","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/A-v2.git"}},"faviconPath":null,"repositoryIdentityResolved":true},"B":{"repositoryIdentity":{"canonicalKey":"github.com/acme/B-v1","rootPath":"/B","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/B-v1.git"}},"faviconPath":null,"repositoryIdentityResolved":false}}}

stdout | src/project/ProjectEnrichmentService.evidence.test.ts > F13 labelled harness: capacity two, replacement order, eviction, pending refresh, null removal
{"row":"F13","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":122000,"step":"overflow-C-evicts-oldest-B-not-recently-replaced-A","value":{"cacheCapacity":2,"A":{"repositoryIdentity":{"canonicalKey":"github.com/acme/A-v2","rootPath":"/A","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/A-v2.git"}},"faviconPath":null,"repositoryIdentityResolved":false},"B":{"repositoryIdentity":null,"faviconPath":null,"repositoryIdentityResolved":false},"C":{"repositoryIdentity":{"canonicalKey":"github.com/acme/C-v1","rootPath":"/C","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/C-v1.git"}},"faviconPath":null,"repositoryIdentityResolved":false}}}

stdout | src/project/ProjectEnrichmentService.evidence.test.ts > F13 labelled harness: capacity two, replacement order, eviction, pending refresh, null removal
{"row":"F13","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":122000,"step":"evicted-B-null-during-held-refresh-recent-C-retained","value":{"B":{"repositoryIdentity":null,"faviconPath":null,"repositoryIdentityResolved":false},"C":{"repositoryIdentity":{"canonicalKey":"github.com/acme/C-v1","rootPath":"/C","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/C-v1.git"}},"faviconPath":null,"repositoryIdentityResolved":false}}}
{"row":"F13","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":122000,"step":"B-refresh-completed","value":{"workspaceRoot":"/B","repositoryIdentityResolved":true,"enrichment":{"repositoryIdentity":{"canonicalKey":"github.com/acme/B-v2","rootPath":"/B","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/B-v2.git"}},"faviconPath":null,"repositoryIdentityResolved":true}}}

stdout | src/project/ProjectEnrichmentService.evidence.test.ts > F13 labelled harness: capacity two, replacement order, eviction, pending refresh, null removal
{"row":"F13","side":"after","commit":"bff5e1cba9b94ab1a95dde3f8a211fb941547e31","simulatedMillis":183000,"step":"resolved-null-C-clears-slot-so-B-and-D-survive","value":{"B":{"repositoryIdentity":{"canonicalKey":"github.com/acme/B-v2","rootPath":"/B","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/B-v2.git"}},"faviconPath":null,"repositoryIdentityResolved":false},"C":{"repositoryIdentity":null,"faviconPath":null,"repositoryIdentityResolved":false},"D":{"repositoryIdentity":{"canonicalKey":"github.com/acme/D-v1","rootPath":"/D","locator":{"source":"git-remote","remoteName":"origin","remoteUrl":"https://github.com/acme/D-v1.git"}},"faviconPath":null,"repositoryIdentityResolved":false}}}

 ✓ |t3| src/project/ProjectEnrichmentService.evidence.test.ts > F06 labelled harness: warmed identity, held failing refresh, failure TTL and recovery 19ms
 ✓ |t3| src/project/ProjectEnrichmentService.evidence.test.ts > F13 labelled harness: capacity two, replacement order, eviction, pending refresh, null removal 4ms

 Test Files  1 passed (1)
      Tests  2 passed (2)
   Start at  16:43:08
   Duration  14.29s (transform 68%, setup 27%, import 4%)


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.

Exit status: 0
```
