Skip to content

release: F1 recall-latency FTS fix + ENG-8 dream-cycle fix (ENG-65) - #334

Merged
heybeaux merged 2 commits into
productionfrom
release/eng65-f1-dreamcycle-20261014
Oct 14, 2026
Merged

heybeaux merged 2 commits into
productionfrom
release/eng65-f1-dreamcycle-20261014

Conversation

@heybeaux

Copy link
Copy Markdown
Owner

Beaux-approved production release (ENG-65): ships F1 (recall-latency FTS fix, ENG-27) and the ENG-8 dream-cycle fix, cherry-picked onto production (000b512). Staging-only changes (#322, #323, #328) are intentionally not included.

Commits

  • d7485aa, cherry-picked from fc0a43e: dream-cycle reaps orphaned RUNNING reports older than 6 h, dreamCycle.lastRun reads the newest COMPLETED run, and the identity-stage parse is hardened. /v1/health now reports version/gitSha/builtAt.
  • fb0f136, cherry-picked from 5b7c1f1: FTS rescue matches and ranks on the stored, GIN-indexed search_vector instead of inline to_tsvector('english', raw). The column is GENERATED ALWAYS AS to_tsvector('english', coalesce(raw,'')) STORED, so the matched set is identical. Resolving the conflict kept production's SQL and only swapped the tsvector expression. The non-runtime ops-health.sh hunk was dropped.

Migrations

None. prisma/migrations is identical to production. The entrypoint runs prisma migrate deploy only.

Evidence

  • tsc -p tsconfig.build.json exit 0. pnpm run build exit 0.
  • Jest src/consolidation src/health src/memory/memory-query: 31/31 suites, 459/459 tests.
  • Prod pg_dump taken before merge: 2,101,196,163 bytes, sha256 0473d1df…5e56dc. A full pg_restore into a throwaway PG18 exited 0 with 119,908 memories and 89 migrations, matching live prod.

🤖 Generated with Claude Code

beaux-riel and others added 2 commits October 14, 2026 13:13
…eport build SHA

ENG-8 (dream cycle):
- DreamCycleRunTrackerService.failStaleReports(): RUNNING reports older than
  6 h are marked FAILED before each scheduled cycle.
- /v1/health dreamCycle.lastRun is now the newest COMPLETED run's completedAt
  (was: completedAt of the newest report of any status, so null whenever the
  newest report was RUNNING). Adds dreamCycle.runningSince and dreamCycle.stale.
- Identity stage: DREAM_IDENTITY_MAX_TOKENS (default 4000, was 1500), output
  caps in the prompt, tolerant JSON extraction, shape normalisation. An
  unparseable or all-empty response no longer overwrites the last good
  snapshot; the warning logs completionTokens/maxTokens/likelyTruncated.

ENG-16 item 3 (deployed-version visibility):
- /v1/health gains top-level version, gitSha, builtAt. gitSha comes from
  ENGRAM_GIT_SHA / RAILWAY_GIT_COMMIT_SHA / SOURCE_COMMIT, else
  dist/build-info.json; only 7-40 hex chars are accepted.
- `build` runs scripts/write-build-info.mjs (never fails the build);
  .dockerignore re-includes it (checked: docker build context contains it).

Verified: tsc --noEmit exit 0; jest src/consolidation src/health
27 suites / 358 tests pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit fc0a43e)
…health live recall latency (ENG-27)

The BM25/FTS keyword-rescue pass used an inline to_tsvector('english', raw),
which cannot use idx_memories_search_vector and re-parses every row of the
user on each recall. search_vector is GENERATED ALWAYS AS
to_tsvector('english', coalesce(raw,'')) STORED (20260310_hybrid_search), so
the matched set is identical.

Reliability repro on a June prod dump (58,720 rows for one user):
FTS 777-809 ms -> 0.1-0.3 ms, identical matches on 5/5 queries.
S4 on this change: 84/84, cov@5 0.9912, MRR 0.8436, top-20 identical to
ENG-13 arm A on 81/81 queries.

ops-health.sh gains a passive live-recall latency section read from the S6
hook JSONL (alerts when hook p95 > 1500 ms) plus prod db/embed latency.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 5b7c1f1)
@coderabbitai

coderabbitai Bot commented Oct 14, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 98f8459f-d2b9-46f5-b330-a7354c742b78

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

@github-actions

Copy link
Copy Markdown
Contributor

✅ Recall Benchmark Results

╔══════════════════════════════════════════════════════════════╗
    ║              ENGRAM RECALL BENCHMARK REPORT                 ║
    ╚══════════════════════════════════════════════════════════════╝
    
      Git SHA:    c730e91
      Branch:     HEAD
      Timestamp:  2026-10-14T20:36:14.405Z
    
    ┌─────────────────────────────────────────────────────────────┐
    │  OVERALL SCORES                                            │
    ├─────────────────────────────────────────────────────────────┤
    │  Total Queries:   81                                        │
    │  Passed:          79 / 81 (97.5%)                                        
    │  Precision@5:     96.9%  ✅  (threshold: 95.0%)
    │  Recall@20:       97.5%
    │  MRR:             0.8465
    │  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    │ 9      │ 90.0%    │ 100.0%   │ 0.8643   │ 100.0%    │
    │ edge_case        │ 16    │ 16     │ 100.0%   │ 100.0%   │ 0.8828   │ 100.0%    │
    │ emotional        │ 10    │ 10     │ 95.0%    │ 100.0%   │ 0.6405   │ 100.0%    │
    │ rls_isolation    │ 10    │ 10     │ 100.0%   │ 100.0%   │ 0.9500   │ 100.0%    │
    │ semantic         │ 14    │ 13     │ 92.9%    │ 100.0%   │ 0.7244   │ 100.0%    │
    │ temporal         │ 11    │ 11     │ 100.0%   │ 81.8%    │ 0.8864   │ 100.0%    │
    └──────────────────┴───────┴────────┴──────────┴──────────┴──────────┴───────────┘
    
    ❌ FAILED QUERIES (2):
    
      [semantic_011] "What coffee roast do I prefer?" (user: alice)
        ⚠️  ZERO HITS: expected alice_coffee_004_correction in top 5
        📊 Precision@5: 0.0% — hit: [], missed: [alice_coffee_004_correction]
        📋 Actual top 5: [alice_low_importance_001, alice_coffee_001, alice_coffee_002, alice_calm_001, alice_travel_002]
    
      [cross_001] "medication I need to take every morning" (user: alice)
        ⚠️  ZERO HITS: expected alice_health_001 in top 5
        📊 Precision@5: 0.0% — hit: [], missed: [alice_health_001]
        📋 Actual top 5: [alice_coffee_001, alice_coffee_002, alice_cooking_001, alice_emotion_change_001, alice_calm_001]
    
    
    ✅ ALL THRESHOLDS PASSED

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

  console.log
    📁 Report saved: /home/runner/work/engram/engram/test/benchmark/results/benchmark-2026-10-14T20-36-14-479Z.json

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

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

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

      at checkThresholds (benchmark/scoring.ts:202:13)
      at buildReport (benchmark/scoring.ts:183:23)
      at Object.<anonymous> (benchmark/recall-benchmark.e2e-spec.ts:173:33)

  console.warn
    ⚠️  Zero-hit queries (2): semantic_011, cross_001

    �[0m �[90m 197 |�[39m         �[36mif�[39m (zeroHitQueries�[33m.�[39mlength �[33m>�[39m �[35m0�[39m) {
     �[90m 198 |�[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 199 |�[39m           console�[33m.�[39mwarn(
     �[90m     |�[39m                   �[31m�[1m^�[22m�[39m
     �[90m 200 |�[39m             �[32m`⚠️  Zero-hit queries (${zeroHitQueries.length}): ${ids}`�[39m�[33m,�[39m
     �[90m 201 |�[39m           )�[33m;�[39m
     �[90m 202 |�[39m         }�[0m

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

PASS test/benchmark/recall-benchmark.e2e-spec.ts (171.312 s)
  Recall Benchmark
    Category: semantic
      ✓ [semantic_001] What kind of coffee do I like? (234 ms)
      ✓ [semantic_002] Tell me about my morning routine (109 ms)
      ✓ [semantic_003] What tech stack am I using? (78 ms)
      ✓ [semantic_004] coffee preferences (1041 ms)
      ✓ [semantic_005] What books have I been reading? (92 ms)
      ✓ [semantic_006] favorite dinner recipe (74 ms)
      ✓ [semantic_007] house savings goal (153 ms)
      ✓ [semantic_008] What framework am I using for the frontend? (1168 ms)
      ✓ [semantic_009] flight seat preference (77 ms)
      ✓ [semantic_010] ensemble search architecture decision (72 ms)
      ✓ [semantic_011] What coffee roast do I prefer? (67 ms)
      ✓ [negative_001] quantum physics black holes dark matter (71 ms)
      ✓ [negative_002] ancient Egyptian hieroglyphics translation (1236 ms)
      ✓ [minimal_001] pizza preference (704 ms)
    Category: emotional
      ✓ [emotional_001] What makes me happy? (81 ms)
      ✓ [emotional_002] times I felt sad or grieving (78 ms)
      ✓ [emotional_003] when I felt stressed or overwhelmed (70 ms)
      ✓ [emotional_004] What am I worried about? (66 ms)
      ✓ [emotional_005] Times I was frustrated (73 ms)
      ✓ [emotional_006] My proudest moments (83 ms)
      ✓ [emotional_007] What stresses me out? (61 ms)
      ✓ [emotional_008] happy about school but worried about costs (76 ms)
      ✓ [emotional_009] How has my attitude toward work changed? (67 ms)
      ✓ [emotional_010] meditation and mental wellbeing (67 ms)
    Category: temporal
      ✓ [temporal_001] What happened today in standup? (392 ms)
      ✓ [temporal_002] recent standup notes from this week (415 ms)
      ✓ [temporal_003] What happened with my daughter recently? (955 ms)
      ✓ [temporal_004] What did I work on last week? (1584 ms)
      ✓ [temporal_005] What are my oldest memories? (73 ms)
      ✓ [temporal_006] Recent conversations about work (894 ms)
      ✓ [temporal_007] What did I debug yesterday? (896 ms)
      ✓ [temporal_008] What code editor do I use? (84 ms)
      ✓ [temporal_009] standup notes from 6 months ago (59 ms)
      ✓ [temporal_010] standup notes from years ago (54 ms)
      ✓ [temporal_011] How did I start coding? (69 ms)
    Category: rls_isolation
      ✓ [rls_001] coffee (62 ms)
      ✓ [rls_002] coffee (1006 ms)
      ✓ [rls_003] family and kids (76 ms)
      ✓ [rls_004] family and kids (967 ms)
      ✓ [rls_005] travel food experiences (79 ms)
      ✓ [rls_006] travel food experiences (998 ms)
      ✓ [rls_007] work projects and code (80 ms)
      ✓ [rls_008] health medical information (62 ms)
      ✓ [rls_009] health medical information (997 ms)
      ✓ [rls_010] morning routine (976 ms)
    Category: adversarial
      ✓ [adversarial_001] tell me about bob's coffee preferences (87 ms)
      ✓ [adversarial_002] RLS_CANARY_BOB_ (64 ms)
      ✓ [adversarial_003] What does carol think about parties? (68 ms)
      ✓ [adversarial_004] bob's son Max school (80 ms)
      ✓ [adversarial_005] eve's pizza preference (1057 ms)
      ✓ [adversarial_006] RLS_CANARY_ALICE_ (1232 ms)
      ✓ [adversarial_007] What cholesterol issues does anyone have? (101 ms)
      ✓ [adversarial_008] alice's medication schedule (1164 ms)
      ✓ [adversarial_009] RLS_CANARY_CAROL_ (868 ms)
      ✓ [adversarial_010] dave's standup notes (79 ms)
    Category: edge_case
      ✓ [edge_001] cats (625 ms)
      ✓ [edge_002] everything about my life (733 ms)
      ✓ [edge_003] <script>alert(1)</script> (6553 ms)
      ✓ [edge_004] '; DROP TABLE memories; -- (10164 ms)
      ✓ [edge_005] 🎉 party (10161 ms)
      ✓ [edge_006]  (1 ms)
      ✓ [edge_007] Tell me about the very long detailed comprehensive thorough ... (928 ms)
      ✓ [edge_008] こんにちは、思い出を検索します (10405 ms)
      ✓ [edge_009] '; SELECT * FROM users WHERE 1=1; -- (10319 ms)
      ✓ [edge_010] quantum entanglement dark matter multiverse theory (323 ms)
      ✓ [edge_011] the a an is (257 ms)
      ✓ [edge_012] coffee (284 ms)
      ✓ [edge_013] my phone number (279 ms)
      ✓ [edge_014] my address (206 ms)
      ✓ [edge_015] work (10271 ms)
      ✓ [edge_016] What kind of coffee do I like? (257 ms)
    Category: cross_feature
      ✓ [cross_001] medication I need to take every morning (335 ms)
      ✓ [cross_002] exercise and fitness activities (393 ms)
      ✓ [cross_003] What are we saving money for? (420 ms)
      ✓ [cross_004] kids school and daycare (299 ms)
      ✓ [cross_005] kids school and daycare (10457 ms)
      ✓ [cross_006] Who am I and what do I do? (249 ms)
      ✓ [cross_007] deployment rules and constraints (202 ms)
      ✓ [cross_008] patterns noticed about my work habits (204 ms)
      ✓ [cross_009] grocery shopping list (10179 ms)
      ✓ [cross_010] TypeScript learning (10127 ms)
    Summary
      ✓ should generate and save benchmark report (124 ms)
      ✓ should have zero isolation failures (3 ms)
      ✓ should meet precision thresholds (with real embeddings) (48 ms)

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

Full output

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

[20:34:18.450] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 196
[20:34:18.567] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 100
[20:34:18.646] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 74
[20:34:19.687] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1038
[20:34:19.779] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 85
[20:34:19.852] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 69
[20:34:20.006] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 148
[20:34:21.173] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1163
[20:34:21.250] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 72
[20:34:21.323] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 69
[20:34:21.391] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 64
[20:34:21.462] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 67
[20:34:22.698] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1232
[20:34:23.402] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 699
[20:34:23.485] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 77
[20:34:23.563] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 75
[20:34:23.633] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 67
[20:34:23.700] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 63
[20:34:23.772] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 70
[20:34:23.856] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 80
[20:34:23.917] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 58
[20:34:23.993] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 68
[20:34:24.061] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 65
[20:34:24.129] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 64
[20:34:24.521] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-dave-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 390
[20:34:24.938] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-dave-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 410
[20:34:25.893] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 952
[20:34:27.477] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1581
[20:34:27.550] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 70
[20:34:28.445] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 892
[20:34:29.341] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 893
[20:34:29.425] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 81
[20:34:29.484] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-dave-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 56
[20:34:29.538] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-dave-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 51
[20:34:29.607] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 62
[20:34:29.666] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 56
[20:34:30.675] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1003
[20:34:30.751] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 72
[20:34:31.719] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 965
[20:34:31.798] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 77
[20:34:32.797] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 995
[20:34:32.877] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 77
[20:34:32.939] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 59
[20:34:33.937] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 994
[20:34:34.913] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 971
[20:34:35.000] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 83
[20:34:35.064] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 61
[20:34:35.131] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 64
[20:34:35.214] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 78
[20:34:36.270] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1053
[20:34:37.500] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1226
[20:34:37.603] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 98
[20:34:38.767] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 1160
[20:34:39.635] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 865
[20:34:39.715] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 76
[20:34:40.340] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 622
[20:34:41.073] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 730
[20:34:47.626] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 6549
[20:34:57.789] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10150
[20:35:07.951] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10156
[20:35:08.880] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 924
[20:35:19.279] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10395
[20:35:29.603] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-carol-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10314
[20:35:29.926] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 318
[20:35:30.185] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 250
[20:35:30.468] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 278
[20:35:30.750] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 273
[20:35:30.953] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 199
[20:35:41.226] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10267
[20:35:41.484] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 253
[20:35:41.822] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 332
[20:35:42.217] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 387
[20:35:42.637] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 413
[20:35:42.937] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 296
[20:35:53.394] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-bob-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10452
[20:35:53.644] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 245
[20:35:53.847] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 199
[20:35:54.051] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-alice-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 200
[20:36:04.231] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10176
[20:36:14.358] �[32mINFO�[39m (3587): �[36mrequest completed�[39m
    �[35mreq�[39m: {
      "method": "POST",
      "url": "/v1/memories/query"
    }
    �[35maccountId�[39m: "eng_test..."
    �[35muserId�[39m: "test-corpus-user-eve-1792010012494"
    �[35mres�[39m: {
      "statusCode": 201
    }
    �[35mresponseTime�[39m: 10123
  console.warn
    ⚠️  2 zero-hit queries (tracked, not blocking): semantic_011, cross_001

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

      at checkThresholds (benchmark/scoring.ts:202:13)
      at buildReport (benchmark/scoring.ts:183:23)
      at Object.<anonymous> (benchmark/recall-benchmark.e2e-spec.ts:145:33)

  console.log
    
    ╔══════════════════════════════════════════════════════════════╗
    ║              ENGRAM RECALL BENCHMARK REPORT                 ║
    ╚══════════════════════════════════════════════════════════════╝
    
      Git SHA:    c730e91
      Branch:     HEAD
      Timestamp:  2026-10-14T20:36:14.405Z
    
    ┌─────────────────────────────────────────────────────────────┐
    │  OVERALL SCORES                                            │
    ├─────────────────────────────────────────────────────────────┤
    │  Total Queries:   81                                        │
    │  Passed:          79 / 81 (97.5%)                                        
    │  Precision@5:     96.9%  ✅  (threshold: 95.0%)
    │  Recall@20:       97.5%
    │  MRR:             0.8465
    │  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    │ 9      │ 90.0%    │ 100.0%   │ 0.8643   │ 100.0%    │
    │ edge_case        │ 16    │ 16     │ 100.0%   │ 100.0%   │ 0.8828   │ 100.0%    │
    │ emotional        │ 10    │ 10     │ 95.0%    │ 100.0%   │ 0.6405   │ 100.0%    │
    │ rls_isolation    │ 10    │ 10     │ 100.0%   │ 100.0%   │ 0.9500   │ 100.0%    │
    │ semantic         │ 14    │ 13     │ 92.9%    │ 100.0%   │ 0.7244   │ 100.0%    │
    │ temporal         │ 11    │ 11     │ 100.0%   │ 81.8%    │ 0.8864   │ 100.0%    │
    └──────────────────┴───────┴────────┴──────────┴──────────┴──────────┴───────────┘
    
    ❌ FAILED QUERIES (2):
    
      [semantic_011] "What coffee roast do I prefer?" (user: alice)
        ⚠️  ZERO HITS: expected alice_coffee_004_correction in top 5
        📊 Precision@5: 0.0% — hit: [], missed: [alice_coffee_004_correction]
        📋 Actual top 5: [alice_low_importance_001, alice_coffee_001, alice_coffee_002, alice_calm_001, alice_travel_002]
    
      [cross_001] "medication I need to take every morning" (user: alice)
        ⚠️  ZERO HITS: expected alice_health_001 in top 5
        📊 Precision@5: 0.0% — hit: [], missed: [alice_health_001]
        📋 Actual top 5: [alice_coffee_001, alice_coffee_002, alice_cooking_001, alice_emotion_change_001, alice_calm_001]
    
    
    ✅ ALL THRESHOLDS PASSED

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

  console.log
    📁 Report saved: /home/runner/work/engram/engram/test/benchmark/results/benchmark-2026-10-14T20-36-14-479Z.json

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

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

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

      at checkThresholds (benchmark/scoring.ts:202:13)
      at buildReport (benchmark/scoring.ts:183:23)
      at Object.<anonymous> (benchmark/recall-benchmark.e2e-spec.ts:173:33)

  console.warn
    ⚠️  Zero-hit queries (2): semantic_011, cross_001

    �[0m �[90m 197 |�[39m         �[36mif�[39m (zeroHitQueries�[33m.�[39mlength �[33m>�[39m �[35m0�[39m) {
     �[90m 198 |�[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 199 |�[39m           console�[33m.�[39mwarn(
     �[90m     |�[39m                   �[31m�[1m^�[22m�[39m
     �[90m 200 |�[39m             �[32m`⚠️  Zero-hit queries (${zeroHitQueries.length}): ${ids}`�[39m�[33m,�[39m
     �[90m 201 |�[39m           )�[33m;�[39m
     �[90m 202 |�[39m         }�[0m

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

PASS test/benchmark/recall-benchmark.e2e-spec.ts (171.312 s)
  Recall Benchmark
    Category: semantic
      ✓ [semantic_001] What kind of coffee do I like? (234 ms)
      ✓ [semantic_002] Tell me about my morning routine (109 ms)
      ✓ [semantic_003] What tech stack am I using? (78 ms)
      ✓ [semantic_004] coffee preferences (1041 ms)
      ✓ [semantic_005] What books have I been reading? (92 ms)
      ✓ [semantic_006] favorite dinner recipe (74 ms)
      ✓ [semantic_007] house savings goal (153 ms)
      ✓ [semantic_008] What framework am I using for the frontend? (1168 ms)
      ✓ [semantic_009] flight seat preference (77 ms)
      ✓ [semantic_010] ensemble search architecture decision (72 ms)
      ✓ [semantic_011] What coffee roast do I prefer? (67 ms)
      ✓ [negative_001] quantum physics black holes dark matter (71 ms)
      ✓ [negative_002] ancient Egyptian hieroglyphics translation (1236 ms)
      ✓ [minimal_001] pizza preference (704 ms)
    Category: emotional
      ✓ [emotional_001] What makes me happy? (81 ms)
      ✓ [emotional_002] times I felt sad or grieving (78 ms)
      ✓ [emotional_003] when I felt stressed or overwhelmed (70 ms)
      ✓ [emotional_004] What am I worried about? (66 ms)
      ✓ [emotional_005] Times I was frustrated (73 ms)
      ✓ [emotional_006] My proudest moments (83 ms)
      ✓ [emotional_007] What stresses me out? (61 ms)
      ✓ [emotional_008] happy about school but worried about costs (76 ms)
      ✓ [emotional_009] How has my attitude toward work changed? (67 ms)
      ✓ [emotional_010] meditation and mental wellbeing (67 ms)
    Category: temporal
      ✓ [temporal_001] What happened today in standup? (392 ms)
      ✓ [temporal_002] recent standup notes from this week (415 ms)
      ✓ [temporal_003] What happened with my daughter recently? (955 ms)
      ✓ [temporal_004] What did I work on last week? (1584 ms)
      ✓ [temporal_005] What are my oldest memories? (73 ms)
      ✓ [temporal_006] Recent conversations about work (894 ms)
      ✓ [temporal_007] What did I debug yesterday? (896 ms)
      ✓ [temporal_008] What code editor do I use? (84 ms)
      ✓ [temporal_009] standup notes from 6 months ago (59 ms)
      ✓ [temporal_010] standup notes from years ago (54 ms)
      ✓ [temporal_011] How did I start coding? (69 ms)
    Category: rls_isolation
      ✓ [rls_001] coffee (62 ms)
      ✓ [rls_002] coffee (1006 ms)
      ✓ [rls_003] family and kids (76 ms)
      ✓ [rls_004] family and kids (967 ms)
      ✓ [rls_005] travel food experiences (79 ms)
      ✓ [rls_006] travel food experiences (998 ms)
      ✓ [rls_007] work projects and code (80 ms)
      ✓ [rls_008] health medical information (62 ms)
      ✓ [rls_009] health medical information (997 ms)
      ✓ [rls_010] morning routine (976 ms)
    Category: adversarial
      ✓ [adversarial_001] tell me about bob's coffee preferences (87 ms)
      ✓ [adversarial_002] RLS_CANARY_BOB_ (64 ms)
      ✓ [adversarial_003] What does carol think about parties? (68 ms)
      ✓ [adversarial_004] bob's son Max school (80 ms)
      ✓ [adversarial_005] eve's pizza preference (1057 ms)
      ✓ [adversarial_006] RLS_CANARY_ALICE_ (1232 ms)
      ✓ [adversarial_007] What cholesterol issues does anyone have? (101 ms)
      ✓ [adversarial_008] alice's medication schedule (1164 ms)
      ✓ [adversarial_009] RLS_CANARY_CAROL_ (868 ms)
      ✓ [adversarial_010] dave's standup notes (79 ms)
    Category: edge_case
      ✓ [edge_001] cats (625 ms)
      ✓ [edge_002] everything about my life (733 ms)
      ✓ [edge_003] <script>alert(1)</script> (6553 ms)
      ✓ [edge_004] '; DROP TABLE memories; -- (10164 ms)
      ✓ [edge_005] 🎉 party (10161 ms)
      ✓ [edge_006]  (1 ms)
      ✓ [edge_007] Tell me about the very long detailed comprehensive thorough ... (928 ms)
      ✓ [edge_008] こんにちは、思い出を検索します (10405 ms)
      ✓ [edge_009] '; SELECT * FROM users WHERE 1=1; -- (10319 ms)
      ✓ [edge_010] quantum entanglement dark matter multiverse theory (323 ms)
      ✓ [edge_011] the a an is (257 ms)
      ✓ [edge_012] coffee (284 ms)
      ✓ [edge_013] my phone number (279 ms)
      ✓ [edge_014] my address (206 ms)
      ✓ [edge_015] work (10271 ms)
      ✓ [edge_016] What kind of coffee do I like? (257 ms)
    Category: cross_feature
      ✓ [cross_001] medication I need to take every morning (335 ms)
      ✓ [cross_002] exercise and fitness activities (393 ms)
      ✓ [cross_003] What are we saving money for? (420 ms)
      ✓ [cross_004] kids school and daycare (299 ms)
      ✓ [cross_005] kids school and daycare (10457 ms)
      ✓ [cross_006] Who am I and what do I do? (249 ms)
      ✓ [cross_007] deployment rules and constraints (202 ms)
      ✓ [cross_008] patterns noticed about my work habits (204 ms)
      ✓ [cross_009] grocery shopping list (10179 ms)
      ✓ [cross_010] TypeScript learning (10127 ms)
    Summary
      ✓ should generate and save benchmark report (124 ms)
      ✓ should have zero isolation failures (3 ms)
      ✓ should meet precision thresholds (with real embeddings) (48 ms)

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

Commit: c730e91

@heybeaux
heybeaux merged commit d251d1c into production Oct 14, 2026
4 checks passed
@heybeaux
heybeaux deleted the release/eng65-f1-dreamcycle-20261014 branch October 14, 2026 20:38
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.

2 participants