Skip to content

fix(health): single-flight HealthMetricsService.compute() to prevent concurrent dedup full-scans (#262)#264

Merged
heybeaux merged 1 commit into
stagingfrom
fix/issue-262-dedup-singleflight-v2
May 27, 2026
Merged

fix(health): single-flight HealthMetricsService.compute() to prevent concurrent dedup full-scans (#262)#264
heybeaux merged 1 commit into
stagingfrom
fix/issue-262-dedup-singleflight-v2

Conversation

@heybeaux
Copy link
Copy Markdown
Owner

@heybeaux heybeaux commented May 27, 2026

Closes #262 (partial — single-flight only; expression index / sampled stat is the follow-up).

Why a v2 PR?

PR #263 was branched off a stale base and ended up carrying PR #242 (Elasticsearch hybrid search) plus the actual fix, which produced unresolvable merge conflicts against current staging. This PR is the same fix commit cherry-picked clean onto current staging. Closing #263.

The fix

Four callers can invoke `HealthMetricsService.compute()` concurrently (hourly cron, HTTP refresh endpoint, snapshot service, dream-cycle completion hook). Each call runs a full `GROUP BY raw` over the memories table. On a ~430K-row / 3.9GB table, three overlapping invocations were observed consuming ~240% CPU and saturating host fans (issue #262).

Adds a single-flight guard so concurrent callers share the in-flight promise. The slot is released in `finally()` — subsequent non-overlapping callers compute fresh, and a rejection does not poison future calls.

Scope

  • `src/health/health-metrics.service.ts` — single-flight guard (~14 lines)
  • `src/health/health-metrics.service.spec.ts` — 11 tests covering single-flight, release on success, release on rejection, no-poisoning

What this does NOT fix

The underlying query cost. `GROUP BY raw` on 3.9GB still scans the whole table — it just won't be scanned 3x in parallel anymore. Follow-up needed: expression index on `memories(raw)` or sampled approximation. Issue #262 stays open for that.

Verification

```
pnpm jest src/health/health-metrics.service.spec.ts
Tests: 11 passed, 11 total
```

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes
    • Health metrics computation now handles concurrent requests more efficiently, eliminating redundant calculations when multiple requests are made simultaneously.

Review Change Stack

…concurrent dedup full-scans (#262)

Four callers can invoke compute() concurrently (hourly cron, HTTP refresh
endpoint, snapshot service, dream-cycle completion hook). Each call runs a
full GROUP BY raw over the memories table. On a ~430K-row / 3.9GB table,
three overlapping invocations consumed ~240% CPU and saturated the host fans
in an observed incident (issue #262).

This change adds a single-flight guard: concurrent compute() callers share
the same in-flight promise, so the underlying queries run at most once per
overlap window. The slot is released in finally(), so subsequent
non-overlapping callers compute fresh as before, and a rejection does not
poison future calls.

Note: this does not address the underlying query cost. A follow-up will add
an expression index on memories(raw) or relax the stat to a sampled
approximation. Issue #262 stays open until both fixes land.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 27, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 940beb05-32e3-4dca-a89f-7c9596fd5c47

📥 Commits

Reviewing files that changed from the base of the PR and between cec1632 and 32c4306.

📒 Files selected for processing (2)
  • src/health/health-metrics.service.spec.ts
  • src/health/health-metrics.service.ts

📝 Walkthrough

Walkthrough

HealthMetricsService now caches in-flight compute() promises to deduplicate concurrent callers. When a computation is already running, subsequent calls return the same promise instead of triggering new Prisma queries. The implementation resets the cache after completion via finally. Tests verify concurrent deduplication, slot release after success, and slot release after failure.

Changes

Single-flight concurrent health-metrics computation

Layer / File(s) Summary
Service implementation of in-flight promise caching
src/health/health-metrics.service.ts
HealthMetricsService adds inFlightCompute field to cache the current promise. The public compute() method returns a cached promise if present, otherwise starts computeUncached() and clears the cache in finally after completion.
Test setup and concurrent behavior validation
src/health/health-metrics.service.spec.ts
beforeEach resets Prisma mocks to prevent cross-test leakage. Three new concurrency tests validate single-flight behavior: concurrent callers share the same promise with exactly one query execution, in-flight slot releases after success allowing fresh queries on next call, and in-flight slot releases after failure allowing retry without promise reuse.

Sequence Diagram

sequenceDiagram
  participant Caller1
  participant Caller2
  participant Caller3
  participant HealthMetricsService
  
  Caller1->>HealthMetricsService: compute() [no cached promise]
  HealthMetricsService->>HealthMetricsService: create inFlightCompute promise
  HealthMetricsService->>HealthMetricsService: start computeUncached()
  HealthMetricsService->>Caller1: return promise
  
  Caller2->>HealthMetricsService: compute() [inFlightCompute exists]
  HealthMetricsService->>Caller2: return same promise
  
  Caller3->>HealthMetricsService: compute() [inFlightCompute exists]
  HealthMetricsService->>Caller3: return same promise
  
  HealthMetricsService->>HealthMetricsService: computeUncached completes
  HealthMetricsService->>HealthMetricsService: clear inFlightCompute (finally)
  
  Caller1->>Caller1: resolve with result
  Caller2->>Caller2: resolve with result
  Caller3->>Caller3: resolve with result
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related issues

  • #262: Addresses the same code-level objective of preventing concurrent duplicate health computation by implementing single-flight promise caching around the Prisma queries.

Possibly related PRs

  • heybeaux/engram#107: Both PRs modify HealthMetricsService.compute() and its test suite—PR #107 introduced the health-metrics compute/persist/get flow, while this PR adds concurrent deduplication and slot-release behavior to compute().

Poem

🐰 A rabbit hops through concurrent calls,
One promise cached, no query falls,
Three threads converge on a single flight,
Then clear the slot when work's done right.
No duplicate work shall ever be,
Just one result shared, wild and free! 🚀

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately and clearly describes the main change: implementing a single-flight pattern for HealthMetricsService.compute() to prevent concurrent duplicate full-table scans on the memories table.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/issue-262-dedup-singleflight-v2

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown
Contributor

✅ Recall Benchmark Results

╔══════════════════════════════════════════════════════════════╗
      ║              ENGRAM RECALL BENCHMARK REPORT                 ║
      ╚══════════════════════════════════════════════════════════════╝
      
        Git SHA:    56e36f6
        Branch:     HEAD
        Timestamp:  2026-05-27T13:47:13.668Z
      
      ┌─────────────────────────────────────────────────────────────┐
      │  OVERALL SCORES                                            │
      ├─────────────────────────────────────────────────────────────┤
      │  Total Queries:   81                                        │
      │  Passed:          79 / 81 (97.5%)                                        
      │  Precision@5:     96.9%  ✅  (threshold: 70%)
      │  Recall@20:       97.5%
      │  MRR:             0.9172
      │  Isolation:       100.0%  ✅  (threshold: 100%)
      └─────────────────────────────────────────────────────────────┘
      
      ┌──────────────────┬───────┬────────┬──────────┬──────────┬──────────┬───────────┐
      │ Category         │ Total │ Passed │ Prec@5   │ Rec@20   │ MRR      │ Isolation │
      ├──────────────────┼───────┼────────┼──────────┼──────────┼──────────┼───────────┤
      │ adversarial      │ 10    │ 10     │ 100.0%   │ 100.0%   │ 1.0000   │ 100.0%    │
      │ cross_feature    │ 10    │ 10     │ 100.0%   │ 100.0%   │ 1.0000   │ 100.0%    │
      │ edge_case        │ 16    │ 16     │ 100.0%   │ 100.0%   │ 0.9479   │ 100.0%    │
      │ emotional        │ 10    │ 8      │ 75.0%    │ 100.0%   │ 0.7708   │ 100.0%    │
      │ rls_isolation    │ 10    │ 10     │ 100.0%   │ 100.0%   │ 0.9500   │ 100.0%    │
      │ semantic         │ 14    │ 14     │ 100.0%   │ 100.0%   │ 0.8810   │ 100.0%    │
      │ temporal         │ 11    │ 11     │ 100.0%   │ 81.8%    │ 0.8712   │ 100.0%    │
      └──────────────────┴───────┴────────┴──────────┴──────────┴──────────┴───────────┘
      
      ❌ FAILED QUERIES (2):
      
        [emotional_001] "What makes me happy?" (user: alice)
          ⚠️  ZERO HITS: expected alice_joy_001 in top 5
          📊 Precision@5: 0.0% — hit: [], missed: [alice_joy_001]
          📋 Actual top 5: [alice_pride_001, alice_calm_001, alice_mixed_emotion_001, alice_cooking_001, alice_identity_project_001]
      
        [emotional_002] "times I felt sad or grieving" (user: alice)
          ⚠️  ZERO HITS: expected alice_grief_001 in top 5
          📊 Precision@5: 0.0% — hit: [], missed: [alice_grief_001]
          📋 Actual top 5: [alice_calm_001, alice_stress_001, alice_mixed_emotion_001, alice_coffee_004_correction, alice_emotion_change_001]
      
      
      ✅ ALL THRESHOLDS PASSED

      at Object.<anonymous> (benchmark/recall-benchmark-dream.e2e-spec.ts:244:15)

    console.log
      Report saved: /home/runner/work/engram/engram/test/benchmark/results/benchmark-2026-05-27T13-47-13-675Z.json

      at Object.<anonymous> (benchmark/recall-benchmark-dream.e2e-spec.ts:247:15)

    console.warn
      ⚠️  2 zero-hit queries (tracked, not blocking): emotional_001, emotional_002

    �[0m �[90m 198 |�[39m   �[90m// Zero-hit queries are tracked as warnings — P@5 threshold is the hard gate.�[39m
     �[90m 199 |�[39m   �[36mif�[39m (zeroHitQueries�[33m.�[39mlength �[33m>�[39m �[35m0�[39m) {
    �[31m�[1m>�[22m�[39m�[90m 200 |�[39m     console�[33m.�[39mwarn(
     �[90m     |�[39m             �[31m�[1m^�[22m�[39m
     �[90m 201 |�[39m       �[32m`⚠️  ${zeroHitQueries.length} zero-hit queries (tracked, not blocking): ${zeroHitQueries.map((q) => q.queryId).join(', ')}`�[39m�[33m,�[39m
     �[90m 202 |�[39m     )�[33m;�[39m
     �[90m 203 |�[39m   }�[0m

      at checkThresholds (benchmark/scoring.ts:200:13)
      at buildReport (benchmark/scoring.ts:181:23)
      at Object.<anonymous> (benchmark/recall-benchmark-dream.e2e-spec.ts:293:33)

    console.warn
      ⚠️  Zero-hit queries after dream cycle (2): emotional_001, emotional_002

    �[0m �[90m 303 |�[39m       �[36mif�[39m (zeroHitQueries�[33m.�[39mlength �[33m>�[39m �[35m0�[39m) {
     �[90m 304 |�[39m         �[36mconst�[39m ids �[33m=�[39m zeroHitQueries�[33m.�[39mmap((q) �[33m=>�[39m q�[33m.�[39mqueryId)�[33m.�[39mjoin(�[32m', '�[39m)�[33m;�[39m
    �[31m�[1m>�[22m�[39m�[90m 305 |�[39m         console�[33m.�[39mwarn(
     �[90m     |�[39m                 �[31m�[1m^�[22m�[39m
     �[90m 306 |�[39m           �[32m`⚠️  Zero-hit queries after dream cycle (${zeroHitQueries.length}): ${ids}`�[39m�[33m,�[39m
     �[90m 307 |�[39m         )�[33m;�[39m
     �[90m 308 |�[39m       }�[0m

      at Object.<anonymous> (benchmark/recall-benchmark-dream.e2e-spec.ts:305:17)

[13:48:06.836] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3122
[13:48:09.377] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2533
[13:48:13.039] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3659
[13:48:14.512] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1466
[13:48:15.972] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1450
[13:48:18.508] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2533
[13:48:22.420] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3903
[13:48:23.658] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1235
[13:48:25.297] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1631
[13:48:27.066] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1763
[13:48:27.165] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 93
[13:48:29.532] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2364
[13:48:30.727] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1190
[13:48:31.474] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 743
[13:48:33.557] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2077
[13:48:35.182] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1622
[13:48:37.124] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1938
[13:48:40.758] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3618
[13:48:43.007] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2245
[13:48:44.386] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1374
[13:48:47.565] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3168
[13:48:50.741] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3172
[13:48:54.031] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3286
[13:48:55.154] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1119
[13:48:55.640] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-dave-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 482
[13:48:56.108] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-dave-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 464
[13:48:57.098] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 984
[13:48:58.751] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1641
[13:49:01.007] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2252
[13:49:01.951] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 941
[13:49:02.902] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 948
[13:49:06.982] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 4077
[13:49:07.046] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-dave-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 59
[13:49:07.095] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-dave-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 46
[13:49:09.272] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2173
[13:49:11.209] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1933
[13:49:12.290] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1077
[13:49:13.917] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1623
[13:49:15.005] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1084
[13:49:16.287] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1274
[13:49:17.387] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1096
[13:49:19.586] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2195
[13:49:20.997] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1406
[13:49:22.166] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1166
[13:49:23.247] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1078
[13:49:26.134] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2883
[13:49:28.843] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2705
[13:49:30.858] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2012
[13:49:33.263] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2401
[13:49:34.517] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1250
[13:49:35.823] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1300
[13:49:38.644] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2818
[13:49:39.937] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1287
[13:49:40.948] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1001
[13:49:42.161] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1210
[13:49:42.823] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 658
[13:49:43.610] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 784
[13:49:53.708] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10094
[13:50:03.897] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10177
[13:50:14.073] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10166
[13:50:25.100] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 11023
[13:50:35.524] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10415
[13:50:45.720] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10187
[13:50:55.916] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10191
[13:51:06.077] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10152
[13:51:16.208] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10126
[13:51:19.993] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3780
[13:51:21.733] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1736
[13:51:22.416] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 677
[13:51:25.551] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3132
[13:51:28.478] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2923
[13:51:29.456] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 975
[13:51:32.480] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3021
[13:51:33.875] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1391
[13:51:35.143] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1265
[13:51:37.136] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1989
[13:51:41.188] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 4048
[13:51:42.355] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1161
[13:51:43.123] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 765
[13:51:43.856] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1779889636088"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 729
PASS test/benchmark/recall-benchmark.e2e-spec.ts (270.194 s)
  ● Console

    console.warn
      ⚠️  1 zero-hit queries (tracked, not blocking): emotional_001

    �[0m �[90m 198 |�[39m   �[90m// Zero-hit queries are tracked as warnings — P@5 threshold is the hard gate.�[39m
     �[90m 199 |�[39m   �[36mif�[39m (zeroHitQueries�[33m.�[39mlength �[33m>�[39m �[35m0�[39m) {
    �[31m�[1m>�[22m�[39m�[90m 200 |�[39m     console�[33m.�[39mwarn(
     �[90m     |�[39m             �[31m�[1m^�[22m�[39m
     �[90m 201 |�[39m       �[32m`⚠️  ${zeroHitQueries.length} zero-hit queries (tracked, not blocking): ${zeroHitQueries.map((q) => q.queryId).join(', ')}`�[39m�[33m,�[39m
     �[90m 202 |�[39m     )�[33m;�[39m
     �[90m 203 |�[39m   }�[0m

      at checkThresholds (benchmark/scoring.ts:200:13)
      at buildReport (benchmark/scoring.ts:181:23)
      at Object.<anonymous> (benchmark/recall-benchmark.e2e-spec.ts:144:33)

    console.log
      
      ╔══════════════════════════════════════════════════════════════╗
      ║              ENGRAM RECALL BENCHMARK REPORT                 ║
      ╚══════════════════════════════════════════════════════════════╝
      
        Git SHA:    56e36f6
        Branch:     HEAD
        Timestamp:  2026-05-27T13:51:43.884Z
      
      ┌─────────────────────────────────────────────────────────────┐
      │  OVERALL SCORES                                            │
      ├─────────────────────────────────────────────────────────────┤
      │  Total Queries:   81                                        │
      │  Passed:          80 / 81 (98.8%)                                        
      │  Precision@5:     98.1%  ✅  (threshold: 70%)
      │  Recall@20:       97.5%
      │  MRR:             0.9204
      │  Isolation:       100.0%  ✅  (threshold: 100%)
      └─────────────────────────────────────────────────────────────┘
      
      ┌──────────────────┬───────┬────────┬──────────┬──────────┬──────────┬───────────┐
      │ Category         │ Total │ Passed │ Prec@5   │ Rec@20   │ MRR      │ Isolation │
      ├──────────────────┼───────┼────────┼──────────┼──────────┼──────────┼───────────┤
      │ adversarial      │ 10    │ 10     │ 100.0%   │ 100.0%   │ 1.0000   │ 100.0%    │
      │ cross_feature    │ 10    │ 10     │ 100.0%   │ 100.0%   │ 1.0000   │ 100.0%    │
      │ edge_case        │ 16    │ 16     │ 100.0%   │ 100.0%   │ 0.9375   │ 100.0%    │
      │ emotional        │ 10    │ 9      │ 85.0%    │ 100.0%   │ 0.7885   │ 100.0%    │
      │ rls_isolation    │ 10    │ 10     │ 100.0%   │ 100.0%   │ 0.9500   │ 100.0%    │
      │ semantic         │ 14    │ 14     │ 100.0%   │ 100.0%   │ 0.8988   │ 100.0%    │
      │ temporal         │ 11    │ 11     │ 100.0%   │ 81.8%    │ 0.8712   │ 100.0%    │
      └──────────────────┴───────┴────────┴──────────┴──────────┴──────────┴───────────┘
      
      ❌ FAILED QUERIES (1):
      
        [emotional_001] "What makes me happy?" (user: alice)
          ⚠️  ZERO HITS: expected alice_joy_001 in top 5
          📊 Precision@5: 0.0% — hit: [], missed: [alice_joy_001]
          📋 Actual top 5: [alice_pride_001, alice_calm_001, alice_mixed_emotion_001, alice_cooking_001, alice_identity_project_001]
      
      
      ✅ ALL THRESHOLDS PASSED

      at Object.<anonymous> (benchmark/recall-benchmark.e2e-spec.ts:147:15)

    console.log
      📁 Report saved: /home/runner/work/engram/engram/test/benchmark/results/benchmark-2026-05-27T13-51-43-895Z.json

      at Object.<anonymous> (benchmark/recall-benchmark.e2e-spec.ts:151:15)

    console.warn
      ⚠️  1 zero-hit queries (tracked, not blocking): emotional_001

    �[0m �[90m 198 |�[39m   �[90m// Zero-hit queries are tracked as warnings — P@5 threshold is the hard gate.�[39m
     �[90m 199 |�[39m   �[36mif�[39m (zeroHitQueries�[33m.�[39mlength �[33m>�[39m �[35m0�[39m) {
    �[31m�[1m>�[22m�[39m�[90m 200 |�[39m     console�[33m.�[39mwarn(
     �[90m     |�[39m             �[31m�[1m^�[22m�[39m
     �[90m 201 |�[39m       �[32m`⚠️  ${zeroHitQueries.length} zero-hit queries (tracked, not blocking): ${zeroHitQueries.map((q) => q.queryId).join(', ')}`�[39m�[33m,�[39m
     �[90m 202 |�[39m     )�[33m;�[39m
     �[90m 203 |�[39m   }�[0m

      at checkThresholds (benchmark/scoring.ts:200:13)
      at buildReport (benchmark/scoring.ts:181:23)
      at Object.<anonymous> (benchmark/recall-benchmark.e2e-spec.ts:172:33)

    console.warn
      ⚠️  Zero-hit queries (1): emotional_001

    �[0m �[90m 194 |�[39m         �[36mif�[39m (zeroHitQueries�[33m.�[39mlength �[33m>�[39m �[35m0�[39m) {
     �[90m 195 |�[39m           �[36mconst�[39m ids �[33m=�[39m zeroHitQueries�[33m.�[39mmap((q) �[33m=>�[39m q�[33m.�[39mqueryId)�[33m.�[39mjoin(�[32m', '�[39m)�[33m;�[39m
    �[31m�[1m>�[22m�[39m�[90m 196 |�[39m           console�[33m.�[39mwarn(
     �[90m     |�[39m                   �[31m�[1m^�[22m�[39m
     �[90m 197 |�[39m             �[32m`⚠️  Zero-hit queries (${zeroHitQueries.length}): ${ids}`�[39m�[33m,�[39m
     �[90m 198 |�[39m           )�[33m;�[39m
     �[90m 199 |�[39m         }�[0m

      at Object.<anonymous> (benchmark/recall-benchmark.e2e-spec.ts:196:19)


Test Suites: 2 passed, 2 total
Tests:       168 passed, 168 total
Snapshots:   0 total
Time:        551.463 s
Ran all test suites matching benchmark.
Force exiting Jest: Have you considered using `--detectOpenHandles` to detect async operations that kept running after all tests finished?

Full output

> engram@1.5.0 benchmark /home/runner/work/engram/engram
> jest --config ./test/jest-e2e.json --testPathPatterns=benchmark --runInBand --forceExit

�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:31 PM �[31m  ERROR�[39m �[38;5;3m[TimelineLodService] �[39m�[31mFailed to generate timeline LOD for 2026-05-20: Cannot read properties of undefined (reading 'json')�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:31 PM �[31m  ERROR�[39m �[38;5;3m[DreamCycleTimelineSynthesisStage] �[39m�[31mTimeline synthesis failed for default on 2026-05-20: Timeline LOD generation failed for 2026-05-20: Cannot read properties of undefined (reading 'json')�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:31 PM �[31m  ERROR�[39m �[38;5;3m[TimelineLodService] �[39m�[31mFailed to generate timeline LOD for 2026-05-21: Cannot read properties of undefined (reading 'json')�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:31 PM �[31m  ERROR�[39m �[38;5;3m[DreamCycleTimelineSynthesisStage] �[39m�[31mTimeline synthesis failed for default on 2026-05-21: Timeline LOD generation failed for 2026-05-21: Cannot read properties of undefined (reading 'json')�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:31 PM �[31m  ERROR�[39m �[38;5;3m[TimelineLodService] �[39m�[31mFailed to generate timeline LOD for 2026-05-22: Cannot read properties of undefined (reading 'json')�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:31 PM �[31m  ERROR�[39m �[38;5;3m[DreamCycleTimelineSynthesisStage] �[39m�[31mTimeline synthesis failed for default on 2026-05-22: Timeline LOD generation failed for 2026-05-22: Cannot read properties of undefined (reading 'json')�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:31 PM �[31m  ERROR�[39m �[38;5;3m[TimelineLodService] �[39m�[31mFailed to generate timeline LOD for 2026-05-23: Cannot read properties of undefined (reading 'json')�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:31 PM �[31m  ERROR�[39m �[38;5;3m[DreamCycleTimelineSynthesisStage] �[39m�[31mTimeline synthesis failed for default on 2026-05-23: Timeline LOD generation failed for 2026-05-23: Cannot read properties of undefined (reading 'json')�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:31 PM �[31m  ERROR�[39m �[38;5;3m[TimelineLodService] �[39m�[31mFailed to generate timeline LOD for 2026-05-24: Cannot read properties of undefined (reading 'json')�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:31 PM �[31m  ERROR�[39m �[38;5;3m[DreamCycleTimelineSynthesisStage] �[39m�[31mTimeline synthesis failed for default on 2026-05-24: Timeline LOD generation failed for 2026-05-24: Cannot read properties of undefined (reading 'json')�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:31 PM �[31m  ERROR�[39m �[38;5;3m[TimelineLodService] �[39m�[31mFailed to generate timeline LOD for 2026-05-25: Cannot read properties of undefined (reading 'json')�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:31 PM �[31m  ERROR�[39m �[38;5;3m[DreamCycleTimelineSynthesisStage] �[39m�[31mTimeline synthesis failed for default on 2026-05-25: Timeline LOD generation failed for 2026-05-25: Cannot read properties of undefined (reading 'json')�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:31 PM �[31m  ERROR�[39m �[38;5;3m[TimelineLodService] �[39m�[31mFailed to generate timeline LOD for 2026-05-26: Cannot read properties of undefined (reading 'json')�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:31 PM �[31m  ERROR�[39m �[38;5;3m[DreamCycleTimelineSynthesisStage] �[39m�[31mTimeline synthesis failed for default on 2026-05-26: Timeline LOD generation failed for 2026-05-26: Cannot read properties of undefined (reading 'json')�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39m�[31m[Consolidation] Gist extraction failed:�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[ConsolidationService] �[39mTypeError: Cannot read properties of undefined (reading 'json')
    at LLMService.json �[90m(/home/runner/work/engram/engram/�[39msrc/llm/llm.service.ts:169:21�[90m)�[39m
    at ConsolidationService.extractGist �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:399:37�[90m)�[39m
    at ConsolidationService.promoteRecurringPatterns �[90m(/home/runner/work/engram/engram/�[39msrc/memory/consolidation.service.ts:172:49�[90m)�[39m
�[90m    at processTicksAndRejections (node:internal/process/task_queues:95:5)�[39m
    at DreamCyclePatternsStage.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/stages/dream-cycle-patterns.stage.ts:41:20�[90m)�[39m
    at DreamCycleService.runInternal �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:469:33�[90m)�[39m
    at DreamCycleService.run �[90m(/home/runner/work/engram/engram/�[39msrc/consolidation/dream-cycle.service.ts:156:14�[90m)�[39m
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCyclePatternsStage] �[39m�[31m[DreamCycle:Patterns] Pattern extraction failed for cluster�[39m
TypeError: Cannot read properties of undefined (reading 'json')
�[31m[Nest] 3337  - �[39m05/27/2026, 1:43:33 PM �[31m  ERROR�[39m �[38;5;3m[DreamCycleService] �[39m�[31mIdentity stage failed: Cannot read properties of undefined (reading 'chat')�[39m
[13:43:34.165] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/consolidation/dream-cycle"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3581
[13:43:34.180] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/consolidation/dream-cycle"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 9
[13:43:34.188] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/consolidation/dream-cycle"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 6
[13:43:34.196] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/consolidation/dream-cycle"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-dave-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 6
[13:43:34.204] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/consolidation/dream-cycle"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 5
[13:43:37.400] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3184
[13:43:39.896] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2488
[13:43:43.435] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3531
[13:43:44.595] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1151
[13:43:46.000] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1398
[13:43:48.548] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2540
[13:43:52.185] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3631
[13:43:53.549] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1355
[13:43:55.131] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1572
[13:43:56.930] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1793
[13:44:01.168] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 4232
[13:44:03.543] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2372
[13:44:04.858] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1312
[13:44:05.604] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 741
[13:44:07.513] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1904
[13:44:08.884] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1365
[13:44:10.734] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1839
[13:44:14.020] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3281
[13:44:16.311] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2280
[13:44:17.518] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1203
[13:44:20.476] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2953
[13:44:23.246] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2765
[13:44:26.685] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3434
[13:44:27.766] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1072
[13:44:28.169] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-dave-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 394
[13:44:28.644] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-dave-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 468
[13:44:29.571] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 914
[13:44:31.302] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1727
[13:44:33.561] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2254
[13:44:34.378] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 811
[13:44:35.417] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1034
[13:44:39.559] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 4136
[13:44:39.625] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-dave-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 61
[13:44:39.689] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-dave-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 59
[13:44:41.987] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2293
[13:44:43.692] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1700
[13:44:44.707] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1004
[13:44:46.143] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1432
[13:44:47.322] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1174
[13:44:48.518] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1190
[13:44:49.686] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1157
[13:44:51.784] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2093
[13:44:53.268] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1480
[13:44:54.375] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1099
[13:44:55.418] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1038
[13:44:58.224] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2798
[13:45:01.442] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3215
[13:45:04.487] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3041
[13:45:08.039] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3548
[13:45:10.031] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1985
[13:45:12.329] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2289
[13:45:16.986] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 4653
[13:45:19.228] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2239
[13:45:20.650] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1415
[13:45:22.306] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1653
[13:45:23.430] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1120
[13:45:24.807] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1369
[13:45:34.958] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10148
[13:45:45.090] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10126
[13:45:55.216] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10113
[13:46:06.201] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10978
[13:46:16.454] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10243
[13:46:26.601] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10137
[13:46:36.725] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10118
[13:46:46.829] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10097
[13:46:49.371] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2535
[13:46:50.988] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1610
[13:46:52.573] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1580
[13:46:53.273] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 695
[13:46:56.430] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3152
[13:46:59.307] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2874
[13:47:00.282] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 967
[13:47:03.054] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 2767
[13:47:04.322] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1262
[13:47:05.419] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1091
[13:47:07.410] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1983
[13:47:11.036] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 3620
[13:47:11.975] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 933
[13:47:12.821] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 841
[13:47:13.639] �[32mINFO�[39m (3337): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1779889360603"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 812
PASS test/benchmark/recall-benchmark-dream.e2e-spec.ts (280.987 s)
 

Commit: 56e36f6

@heybeaux heybeaux merged commit be5514b into staging May 27, 2026
7 of 8 checks passed
@heybeaux heybeaux deleted the fix/issue-262-dedup-singleflight-v2 branch May 27, 2026 13:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Dedup health-stat query can run concurrently and full-scans memories table

2 participants