@remnic/core 9.6.24 → 9.6.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -90,7 +90,7 @@ import {
90
90
  runWorkProductStatusCliCommand,
91
91
  runWorkProjectCliCommand,
92
92
  runWorkTaskCliCommand
93
- } from "./chunk-KEY3FEMP.js";
93
+ } from "./chunk-43VNWTBB.js";
94
94
  import "./chunk-MMACM5G2.js";
95
95
  import "./chunk-54BGIBCR.js";
96
96
  import "./chunk-H4CKS5B2.js";
@@ -168,7 +168,7 @@ import "./chunk-G6NKALRN.js";
168
168
  import "./chunk-OO42R444.js";
169
169
  import "./chunk-K6MV3TRQ.js";
170
170
  import "./chunk-OADWQ5CR.js";
171
- import "./chunk-A2OFRQ5B.js";
171
+ import "./chunk-N6VIXDT7.js";
172
172
  import "./chunk-V7IZKJI3.js";
173
173
  import "./chunk-SEDEKFYQ.js";
174
174
  import "./chunk-RKNJBZ55.js";
@@ -177,7 +177,7 @@ import "./chunk-RSUYKGGZ.js";
177
177
  import "./chunk-42NQ7AVG.js";
178
178
  import "./chunk-TMSXWOBZ.js";
179
179
  import "./chunk-7RXCMVFQ.js";
180
- import "./chunk-D3D677BV.js";
180
+ import "./chunk-QLYLTKUG.js";
181
181
  import "./chunk-IC2TCZJ2.js";
182
182
  import "./chunk-D24OXEPB.js";
183
183
  import "./chunk-5RUE3GHQ.js";
package/dist/index.js CHANGED
@@ -348,7 +348,7 @@ import {
348
348
  registerTrainingExportAdapter,
349
349
  runBulkImportCliCommand,
350
350
  runWearablesCliCommand
351
- } from "./chunk-KEY3FEMP.js";
351
+ } from "./chunk-43VNWTBB.js";
352
352
  import "./chunk-MMACM5G2.js";
353
353
  import "./chunk-54BGIBCR.js";
354
354
  import "./chunk-H4CKS5B2.js";
@@ -550,7 +550,7 @@ import "./chunk-K6MV3TRQ.js";
550
550
  import "./chunk-OADWQ5CR.js";
551
551
  import {
552
552
  EngramAccessHttpServer
553
- } from "./chunk-A2OFRQ5B.js";
553
+ } from "./chunk-N6VIXDT7.js";
554
554
  import {
555
555
  WearablesInputError,
556
556
  describeErrorForOperator
@@ -564,7 +564,7 @@ import "./chunk-TMSXWOBZ.js";
564
564
  import "./chunk-7RXCMVFQ.js";
565
565
  import {
566
566
  EngramMcpServer
567
- } from "./chunk-D3D677BV.js";
567
+ } from "./chunk-QLYLTKUG.js";
568
568
  import "./chunk-IC2TCZJ2.js";
569
569
  import {
570
570
  buildCitationGuidance,
@@ -126,7 +126,7 @@ import "./chunk-Q6IP2ARR.js";
126
126
  import "./chunk-6HEM6HTQ.js";
127
127
  import "./chunk-O2EL7EGG.js";
128
128
  import "./chunk-FVTLSFWU.js";
129
- import "./chunk-KEY3FEMP.js";
129
+ import "./chunk-43VNWTBB.js";
130
130
  import "./chunk-MMACM5G2.js";
131
131
  import "./chunk-54BGIBCR.js";
132
132
  import "./chunk-H4CKS5B2.js";
@@ -217,7 +217,7 @@ import "./chunk-G6NKALRN.js";
217
217
  import "./chunk-OO42R444.js";
218
218
  import "./chunk-K6MV3TRQ.js";
219
219
  import "./chunk-OADWQ5CR.js";
220
- import "./chunk-A2OFRQ5B.js";
220
+ import "./chunk-N6VIXDT7.js";
221
221
  import "./chunk-V7IZKJI3.js";
222
222
  import "./chunk-SEDEKFYQ.js";
223
223
  import "./chunk-RKNJBZ55.js";
@@ -226,7 +226,7 @@ import "./chunk-RSUYKGGZ.js";
226
226
  import "./chunk-42NQ7AVG.js";
227
227
  import "./chunk-TMSXWOBZ.js";
228
228
  import "./chunk-7RXCMVFQ.js";
229
- import "./chunk-D3D677BV.js";
229
+ import "./chunk-QLYLTKUG.js";
230
230
  import "./chunk-IC2TCZJ2.js";
231
231
  import "./chunk-D24OXEPB.js";
232
232
  import "./chunk-5RUE3GHQ.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.6.24",
3
+ "version": "9.6.25",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3000,7 +3000,7 @@
3000
3000
  "core"
3001
3001
  ],
3002
3002
  "peerDependencies": {
3003
- "@remnic/coding-graph": "^9.6.24"
3003
+ "@remnic/coding-graph": "^9.6.25"
3004
3004
  },
3005
3005
  "peerDependenciesMeta": {
3006
3006
  "@remnic/coding-graph": {
@@ -268,11 +268,11 @@ test("HTTP coding-context endpoint accepts projectTag shorthand", async () => {
268
268
  },
269
269
  body: JSON.stringify({
270
270
  sessionKey: "s1",
271
- projectTag: "Blend/Supply",
271
+ projectTag: "Acme/Webshop",
272
272
  }),
273
273
  });
274
274
 
275
- const projectId = projectTagProjectId("Blend/Supply");
275
+ const projectId = projectTagProjectId("Acme/Webshop");
276
276
  assert.equal(response.status, 200);
277
277
  assert.deepEqual(await response.json(), { ok: true });
278
278
  assert.deepEqual(calls, [
@@ -301,7 +301,7 @@ test("MCP write tools accept and forward client-injected cwd/projectTag (#1434)"
301
301
  category: "fact",
302
302
  dryRun: true,
303
303
  cwd: "/home/dev/project-x",
304
- projectTag: "Blend/Supply",
304
+ projectTag: "Acme/Webshop",
305
305
  }),
306
306
  );
307
307
  const result = (response as Record<string, unknown> & {
@@ -310,7 +310,7 @@ test("MCP write tools accept and forward client-injected cwd/projectTag (#1434)"
310
310
 
311
311
  assert.equal(result?.isError, false, `${toolName} should accept cwd/projectTag`);
312
312
  assert.equal(received?.cwd, "/home/dev/project-x", `${toolName} must forward cwd`);
313
- assert.equal(received?.projectTag, "Blend/Supply", `${toolName} must forward projectTag`);
313
+ assert.equal(received?.projectTag, "Acme/Webshop", `${toolName} must forward projectTag`);
314
314
  }
315
315
  });
316
316
 
package/src/access-mcp.ts CHANGED
@@ -542,7 +542,7 @@ export class EngramMcpServer {
542
542
  cwd: { type: "string", description: "Working directory for auto git-context resolution." },
543
543
  projectTag: {
544
544
  type: "string",
545
- description: "Project tag for non-git project scoping (e.g. 'blend-supply').",
545
+ description: "Project tag for non-git project scoping (e.g. 'acme-webshop').",
546
546
  },
547
547
  asOf: {
548
548
  type: "string",
@@ -611,7 +611,7 @@ export class EngramMcpServer {
611
611
  projectTag: {
612
612
  type: "string",
613
613
  description:
614
- "Arbitrary project tag for non-git project scoping (e.g. 'blend-supply'). " +
614
+ "Arbitrary project tag for non-git project scoping (e.g. 'acme-webshop'). " +
615
615
  "Creates a coding context with projectId 'tag:<projectTag>'. " +
616
616
  "Use instead of codingContext when the session isn't tied to a specific git repo.",
617
617
  },
@@ -1274,7 +1274,7 @@ export class EngramMcpServer {
1274
1274
  cwd: { type: "string", description: "Working directory for auto git-context resolution." },
1275
1275
  projectTag: {
1276
1276
  type: "string",
1277
- description: "Project tag for non-git project scoping (e.g. 'blend-supply').",
1277
+ description: "Project tag for non-git project scoping (e.g. 'acme-webshop').",
1278
1278
  },
1279
1279
  },
1280
1280
  required: ["sessionKey", "messages"],
@@ -76,11 +76,11 @@ test("#1434 projectTag scopes the write to the project namespace, read-only", as
76
76
  const resolved = await resolver(service)({
77
77
  sessionKey: "sess-1",
78
78
  authenticatedPrincipal: "alice",
79
- projectTag: "Blend/Supply",
79
+ projectTag: "Acme/Webshop",
80
80
  content: "x",
81
81
  });
82
82
 
83
- assert.equal(resolved, projectNamespaceFor("Blend/Supply"));
83
+ assert.equal(resolved, projectNamespaceFor("Acme/Webshop"));
84
84
  assert.notEqual(resolved, "default", "project context must change the namespace");
85
85
  // Read-only: resolving must NOT persist coding context on the session.
86
86
  assert.equal(
@@ -100,7 +100,7 @@ test("#1434 a sessionless write with projectTag stays on the base namespace (rec
100
100
  const service = new EngramAccessService(orch);
101
101
  const resolved = await resolver(service)({
102
102
  authenticatedPrincipal: "alice",
103
- projectTag: "Blend/Supply",
103
+ projectTag: "Acme/Webshop",
104
104
  content: "x",
105
105
  });
106
106
  assert.equal(resolved, "default");
@@ -109,9 +109,9 @@ test("#1434 a sessionless write with projectTag stays on the base namespace (rec
109
109
  test("#1434 an existing session coding context scopes the write (recall-then-store flow)", async () => {
110
110
  const orch = makeOrchestratorStub();
111
111
  orch.setCodingContextForSession("sess-ctx", {
112
- projectId: projectTagProjectId("Blend/Supply"),
112
+ projectId: projectTagProjectId("Acme/Webshop"),
113
113
  branch: null,
114
- rootPath: projectTagProjectId("Blend/Supply"),
114
+ rootPath: projectTagProjectId("Acme/Webshop"),
115
115
  defaultBranch: null,
116
116
  });
117
117
  const service = new EngramAccessService(orch);
@@ -121,7 +121,7 @@ test("#1434 an existing session coding context scopes the write (recall-then-sto
121
121
  authenticatedPrincipal: "alice",
122
122
  content: "x",
123
123
  });
124
- assert.equal(resolved, projectNamespaceFor("Blend/Supply"));
124
+ assert.equal(resolved, projectNamespaceFor("Acme/Webshop"));
125
125
  });
126
126
 
127
127
  test("#1434 an existing session binding wins over per-call projectTag (recall symmetry)", async () => {
@@ -155,7 +155,7 @@ test("#1434 explicit namespace wins and bypasses coding overlay", async () => {
155
155
  sessionKey: "sess-2",
156
156
  authenticatedPrincipal: "alice",
157
157
  namespace: "default",
158
- projectTag: "Blend/Supply",
158
+ projectTag: "Acme/Webshop",
159
159
  content: "x",
160
160
  });
161
161
  assert.equal(resolved, "default");
@@ -208,12 +208,12 @@ test("#1434 project write overlays onto the principal self base (recall symmetry
208
208
  const resolved = await resolver(service)({
209
209
  sessionKey: "sess-3c",
210
210
  authenticatedPrincipal: "alice",
211
- projectTag: "Blend/Supply",
211
+ projectTag: "Acme/Webshop",
212
212
  content: "x",
213
213
  });
214
214
  assert.equal(
215
215
  resolved,
216
- combineNamespaces("alice", projectNamespaceName(projectTagProjectId("Blend/Supply"))),
216
+ combineNamespaces("alice", projectNamespaceName(projectTagProjectId("Acme/Webshop"))),
217
217
  );
218
218
  });
219
219
 
@@ -228,7 +228,7 @@ test("#1434 an explicit coding-overlay namespace string is NOT a writable target
228
228
  resolver(service)({
229
229
  sessionKey: "sess-explicit-overlay",
230
230
  authenticatedPrincipal: "alice",
231
- namespace: projectNamespaceFor("Blend/Supply"), // "default-project-…"
231
+ namespace: projectNamespaceFor("Acme/Webshop"), // "default-project-…"
232
232
  content: "x",
233
233
  }),
234
234
  /not writable/,
@@ -308,7 +308,7 @@ test("#1434 namespaces disabled: cwd/projectTag are a no-op (common single-tenan
308
308
  const service = new EngramAccessService(orch);
309
309
  const resolved = await resolver(service)({
310
310
  sessionKey: "sess-4",
311
- projectTag: "Blend/Supply",
311
+ projectTag: "Acme/Webshop",
312
312
  content: "x",
313
313
  });
314
314
  assert.equal(resolved, "default");
@@ -368,18 +368,18 @@ test("#1434 a real memory_store attaches coding context so a later bare recall o
368
368
  const service = new EngramAccessService(orch);
369
369
 
370
370
  const res = await service.memoryStore(
371
- storeRequest({ sessionKey: "sess-attach", projectTag: "Blend/Supply" }),
371
+ storeRequest({ sessionKey: "sess-attach", projectTag: "Acme/Webshop" }),
372
372
  );
373
373
 
374
374
  assert.equal(res.status, "stored");
375
- assert.equal(res.namespace, projectNamespaceFor("Blend/Supply"));
375
+ assert.equal(res.namespace, projectNamespaceFor("Acme/Webshop"));
376
376
  // The store attached the coding context the recall path reads.
377
377
  assert.equal(
378
378
  contexts.get("sess-attach")?.projectId,
379
- projectTagProjectId("Blend/Supply"),
379
+ projectTagProjectId("Acme/Webshop"),
380
380
  );
381
381
  assert.ok(
382
- getStorageCalls.every((ns) => ns === projectNamespaceFor("Blend/Supply")),
382
+ getStorageCalls.every((ns) => ns === projectNamespaceFor("Acme/Webshop")),
383
383
  `expected all getStorage calls on the project namespace, got ${JSON.stringify(getStorageCalls)}`,
384
384
  );
385
385
  // A later BARE resolve (no per-call context) on the same session — what a
@@ -389,7 +389,7 @@ test("#1434 a real memory_store attaches coding context so a later bare recall o
389
389
  authenticatedPrincipal: "alice",
390
390
  content: "y",
391
391
  });
392
- assert.equal(bare, projectNamespaceFor("Blend/Supply"));
392
+ assert.equal(bare, projectNamespaceFor("Acme/Webshop"));
393
393
  });
394
394
 
395
395
  test("#1434 an explicit-namespace store does NOT bind the session to a project (Codex review)", async () => {
@@ -399,7 +399,7 @@ test("#1434 an explicit-namespace store does NOT bind the session to a project (
399
399
  const { orch, contexts } = makeAttachOrchestrator();
400
400
  const service = new EngramAccessService(orch);
401
401
  const res = await service.memoryStore(
402
- storeRequest({ sessionKey: "sess-explicit", namespace: "default", projectTag: "Blend/Supply" }),
402
+ storeRequest({ sessionKey: "sess-explicit", namespace: "default", projectTag: "Acme/Webshop" }),
403
403
  );
404
404
  assert.equal(res.status, "stored");
405
405
  assert.equal(res.namespace, "default");
@@ -411,7 +411,7 @@ test("#1434 a dryRun store does NOT bind the session to a project (Codex review)
411
411
  const { orch, contexts } = makeAttachOrchestrator();
412
412
  const service = new EngramAccessService(orch);
413
413
  const res = await service.memoryStore(
414
- storeRequest({ sessionKey: "sess-dry", projectTag: "Blend/Supply", dryRun: true }),
414
+ storeRequest({ sessionKey: "sess-dry", projectTag: "Acme/Webshop", dryRun: true }),
415
415
  );
416
416
  assert.equal(res.status, "validated");
417
417
  assert.equal(contexts.get("sess-dry"), undefined, "dryRun must not bind the session");
@@ -193,7 +193,7 @@ test("#1495 P1 FORGERY BLOCKED: a default-only caller cannot read another tenant
193
193
  const victimRes = await service.observe(
194
194
  observeRequest({
195
195
  sessionKey: "alice:s1",
196
- projectTag: "Blend/Supply",
196
+ projectTag: "Acme/Webshop",
197
197
  }),
198
198
  );
199
199
  const victimWriteKey = probe.rows[0]!.session_id;
@@ -235,7 +235,7 @@ test("#1495 P1 FORGERY BLOCKED: a default-only caller cannot read another tenant
235
235
  const service = new EngramAccessService(probe.orch);
236
236
 
237
237
  const victimRes = await service.observe(
238
- observeRequest({ sessionKey: "alice:s1", projectTag: "Blend/Supply" }),
238
+ observeRequest({ sessionKey: "alice:s1", projectTag: "Acme/Webshop" }),
239
239
  );
240
240
  const victimOverlayNs = victimRes.effectiveNamespace!;
241
241
  assert.ok(victimOverlayNs.startsWith("alice-"));
@@ -268,7 +268,7 @@ test("#1495 P1 LEGITIMATE ACCESS PRESERVED: the victim still reads its OWN overl
268
268
 
269
269
  // alice archives under her overlay AND binds the coding context to her session.
270
270
  await service.observe(
271
- observeRequest({ sessionKey: "alice:s1", projectTag: "Blend/Supply" }),
271
+ observeRequest({ sessionKey: "alice:s1", projectTag: "Acme/Webshop" }),
272
272
  );
273
273
 
274
274
  // A same-session lcmSearch by alice (no explicit namespace) must reach her rows:
@@ -330,7 +330,7 @@ test("#1505 codex P1 r2 FORGERY BLOCKED: explicit-namespace + sessionless lcmSea
330
330
 
331
331
  // VICTIM archives overlay rows.
332
332
  const victimRes = await service.observe(
333
- observeRequest({ sessionKey: "alice:s1", projectTag: "Blend/Supply" }),
333
+ observeRequest({ sessionKey: "alice:s1", projectTag: "Acme/Webshop" }),
334
334
  );
335
335
  assert.ok(victimRes.effectiveNamespace!.startsWith("alice-"));
336
336
 
@@ -361,7 +361,7 @@ test("#1505 codex P1 r2 FORGERY BLOCKED: default-readable implicit + sessionless
361
361
  const service = new EngramAccessService(probe.orch);
362
362
 
363
363
  const victimRes = await service.observe(
364
- observeRequest({ sessionKey: "alice:s1", projectTag: "Blend/Supply" }),
364
+ observeRequest({ sessionKey: "alice:s1", projectTag: "Acme/Webshop" }),
365
365
  );
366
366
  assert.ok(victimRes.effectiveNamespace!.startsWith("alice-"));
367
367
 
@@ -305,12 +305,12 @@ test("#1505 thread 2 (c) projectTag: observe LCM write key == recall reader key
305
305
  const service = new EngramAccessService(probe.orch);
306
306
 
307
307
  const res = await service.observe(
308
- observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Blend/Supply" }),
308
+ observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Acme/Webshop" }),
309
309
  );
310
310
 
311
311
  const expectedNs = combineNamespaces(
312
312
  "pi-geek",
313
- projectNamespaceName(projectTagProjectId("Blend/Supply")),
313
+ projectNamespaceName(projectTagProjectId("Acme/Webshop")),
314
314
  );
315
315
  const expectedKey = encodeNs(expectedNs, "pi-geek:abc123");
316
316
  assert.equal(res.effectiveNamespace, expectedNs);
@@ -442,7 +442,7 @@ test("#1505 thread 2 (d) projectScope:false ⇒ raw sessionKey everywhere (singl
442
442
  const service = new EngramAccessService(probe.orch);
443
443
 
444
444
  const res = await service.observe(
445
- observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Blend/Supply" }),
445
+ observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Acme/Webshop" }),
446
446
  );
447
447
  // No overlay ⇒ effective namespace is the default store ⇒ raw key.
448
448
  assert.equal(res.effectiveNamespace, "default");
@@ -470,7 +470,7 @@ test("#1505 thread 2 (d) namespacesEnabled:false ⇒ raw sessionKey everywhere",
470
470
  const service = new EngramAccessService(probe.orch);
471
471
 
472
472
  const res = await service.observe(
473
- observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Blend/Supply" }),
473
+ observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Acme/Webshop" }),
474
474
  );
475
475
  assert.equal(res.effectiveNamespace, "default");
476
476
  assert.equal(probe.lcmWriteKeys[0], "pi-geek:abc123", "raw LCM write key");
@@ -501,14 +501,14 @@ test("#1505 thread 1: extraction provenance principal is the resolved principal
501
501
  await service.observe(
502
502
  observeRequest({
503
503
  sessionKey: "pi-geek:abc123",
504
- projectTag: "Blend/Supply",
504
+ projectTag: "Acme/Webshop",
505
505
  skipExtraction: false, // exercise the extraction path
506
506
  }),
507
507
  );
508
508
 
509
509
  const expectedNs = combineNamespaces(
510
510
  "pi-geek",
511
- projectNamespaceName(projectTagProjectId("Blend/Supply")),
511
+ projectNamespaceName(projectTagProjectId("Acme/Webshop")),
512
512
  );
513
513
  assert.equal(probe.extractionCalls.length, 1);
514
514
  // Provenance identity: the resolved principal, never a default parsed from the
@@ -590,7 +590,7 @@ test("#1505 thread 2: LCM read namespace honors authenticatedPrincipal (write-un
590
590
  observeRequest({
591
591
  sessionKey: "sess-1",
592
592
  authenticatedPrincipal: "alice",
593
- projectTag: "Blend/Supply",
593
+ projectTag: "Acme/Webshop",
594
594
  }),
595
595
  );
596
596
  const writeKey = probe.lcmWriteKeys[0];
@@ -639,7 +639,7 @@ test("#1505 thread 2 compaction regression: flush/record overlay-derived key mat
639
639
  const service = new EngramAccessService(probe.orch);
640
640
 
641
641
  await service.observe(
642
- observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Blend/Supply" }),
642
+ observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Acme/Webshop" }),
643
643
  );
644
644
  await service.lcmCompactionFlush({ sessionKey: "pi-geek:abc123" });
645
645
 
@@ -748,7 +748,7 @@ test("#1505 round 3: access lcmSearch routes the session_id through the SCOPED (
748
748
  const service = new EngramAccessService(probe.orch);
749
749
 
750
750
  await service.observe(
751
- observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Blend/Supply" }),
751
+ observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Acme/Webshop" }),
752
752
  );
753
753
  const writeKey = probe.lcmWriteKeys[0];
754
754
  // New #1495 P1 encoding: `\x1f<overlayNs>\x1f<sessionKey>`. Parse the overlay
@@ -872,8 +872,8 @@ test("#1505 round 3 thread 1: orchestrator LCM read key falls back to default wh
872
872
 
873
873
  // Bind a coding context to sess-1 so the overlay would apply on alice's base.
874
874
  probe.contexts.set("sess-1", {
875
- projectId: "blend-supply",
876
- projectName: "Blend/Supply",
875
+ projectId: "acme-webshop",
876
+ projectName: "Acme/Webshop",
877
877
  } as unknown as CodingContext);
878
878
 
879
879
  const lcmReadNamespaceForSession = Orchestrator.prototype[
@@ -914,8 +914,8 @@ test("#1505 round 3 thread 1: orchestrator LCM read key falls back to default wh
914
914
  } as Partial<PluginConfig>);
915
915
 
916
916
  probe.contexts.set("sess-1", {
917
- projectId: "blend-supply",
918
- projectName: "Blend/Supply",
917
+ projectId: "acme-webshop",
918
+ projectName: "Acme/Webshop",
919
919
  } as unknown as CodingContext);
920
920
 
921
921
  const lcmReadNamespaceForSession = Orchestrator.prototype[
@@ -944,8 +944,8 @@ test("#1505 round 3 thread 1: orchestrator LCM read key still uses the overlay w
944
944
  } as Partial<PluginConfig>);
945
945
 
946
946
  probe.contexts.set("pi-geek:abc123", {
947
- projectId: "blend-supply",
948
- projectName: "Blend/Supply",
947
+ projectId: "acme-webshop",
948
+ projectName: "Acme/Webshop",
949
949
  } as unknown as CodingContext);
950
950
 
951
951
  const lcmReadNamespaceForSession = Orchestrator.prototype[
@@ -977,8 +977,8 @@ test("#1505 round 3 thread 2: lcmSearch returns NO overlay rows when the princip
977
977
  const service = new EngramAccessService(probe.orch);
978
978
 
979
979
  probe.contexts.set("sess-1", {
980
- projectId: "blend-supply",
981
- projectName: "Blend/Supply",
980
+ projectId: "acme-webshop",
981
+ projectName: "Acme/Webshop",
982
982
  } as unknown as CodingContext);
983
983
 
984
984
  await service.lcmSearch({
@@ -1036,7 +1036,7 @@ test("#1505 round 4 thread (codex P2): compaction flush/record target the OVERLA
1036
1036
  observeRequest({
1037
1037
  sessionKey: "sess-1",
1038
1038
  authenticatedPrincipal: "alice",
1039
- projectTag: "Blend/Supply",
1039
+ projectTag: "Acme/Webshop",
1040
1040
  }),
1041
1041
  );
1042
1042
  const writeKey = probe.lcmWriteKeys[0];
@@ -1080,8 +1080,8 @@ test("#1505 round 4 thread (codex P2): a read-only lcmSearch by the SAME write-o
1080
1080
  const service = new EngramAccessService(probe.orch);
1081
1081
 
1082
1082
  probe.contexts.set("sess-1", {
1083
- projectId: "blend-supply",
1084
- projectName: "Blend/Supply",
1083
+ projectId: "acme-webshop",
1084
+ projectName: "Acme/Webshop",
1085
1085
  } as unknown as CodingContext);
1086
1086
 
1087
1087
  await service.lcmSearch({
@@ -1115,7 +1115,7 @@ test("#1505 round 3 thread 2: lcmSearch still routes through the overlay key whe
1115
1115
  observeRequest({
1116
1116
  sessionKey: "sess-1",
1117
1117
  authenticatedPrincipal: "alice",
1118
- projectTag: "Blend/Supply",
1118
+ projectTag: "Acme/Webshop",
1119
1119
  }),
1120
1120
  );
1121
1121
  const writeKey = probe.lcmWriteKeys[0];
@@ -1172,7 +1172,7 @@ test("#1505 thread NBHWs (codex P2): restrictive `default` WRITE policy + writab
1172
1172
  observeRequest({
1173
1173
  sessionKey: "sess-1",
1174
1174
  authenticatedPrincipal: "alice",
1175
- projectTag: "Blend/Supply",
1175
+ projectTag: "Acme/Webshop",
1176
1176
  }),
1177
1177
  );
1178
1178
  const writeKey = probe.lcmWriteKeys[0];
@@ -1230,7 +1230,7 @@ test("#1505 thread NBHWz (sweep): restrictive `default` READ policy + readable s
1230
1230
 
1231
1231
  // observe archives under pi-geek's readable+writable project overlay.
1232
1232
  await service.observe(
1233
- observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Blend/Supply" }),
1233
+ observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Acme/Webshop" }),
1234
1234
  );
1235
1235
  const writeKey = probe.lcmWriteKeys[0];
1236
1236
  assertOverlayWriteKey(writeKey, "pi-geek-"); // observe must archive under pi-geek's overlay key, got ${writeKey}
@@ -1277,8 +1277,8 @@ test("#1505 codex P1 'Don't treat any readable namespace as default LCM access':
1277
1277
 
1278
1278
  // Bind a coding context so the overlay WOULD apply on alice's base.
1279
1279
  probe.contexts.set("sess-1", {
1280
- projectId: "blend-supply",
1281
- projectName: "Blend/Supply",
1280
+ projectId: "acme-webshop",
1281
+ projectName: "Acme/Webshop",
1282
1282
  } as unknown as CodingContext);
1283
1283
 
1284
1284
  const res = await service.lcmSearch({
@@ -162,14 +162,14 @@ test("#1495 projectTag: LCM, extraction, objective-state, and response all agree
162
162
  const service = new EngramAccessService(probe.orch);
163
163
 
164
164
  const res = await service.observe(
165
- observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Blend/Supply" }),
165
+ observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Acme/Webshop" }),
166
166
  );
167
167
 
168
168
  // Effective write namespace == principal self base overlaid with the project,
169
169
  // EXACTLY what a same-session project-scoped recall/store resolves.
170
170
  const expected = combineNamespaces(
171
171
  "pi-geek",
172
- projectNamespaceName(projectTagProjectId("Blend/Supply")),
172
+ projectNamespaceName(projectTagProjectId("Acme/Webshop")),
173
173
  );
174
174
 
175
175
  assert.equal(res.effectiveNamespace, expected, "response effectiveNamespace");
@@ -334,7 +334,7 @@ test("#1495 explicit namespace wins and project context does NOT silently overri
334
334
  observeRequest({
335
335
  sessionKey: "pi-geek:abc123",
336
336
  namespace: "team",
337
- projectTag: "Blend/Supply",
337
+ projectTag: "Acme/Webshop",
338
338
  }),
339
339
  );
340
340
 
@@ -364,7 +364,7 @@ test("#1495 projectScope:false ⇒ no overlay (unqualified write stays on config
364
364
  const service = new EngramAccessService(probe.orch);
365
365
 
366
366
  const res = await service.observe(
367
- observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Blend/Supply" }),
367
+ observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Acme/Webshop" }),
368
368
  );
369
369
 
370
370
  assert.equal(res.effectiveNamespace, "default");
@@ -385,7 +385,7 @@ test("#1495 namespacesEnabled:false ⇒ single-store behavior preserved", async
385
385
  const service = new EngramAccessService(probe.orch);
386
386
 
387
387
  const res = await service.observe(
388
- observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Blend/Supply" }),
388
+ observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Acme/Webshop" }),
389
389
  );
390
390
 
391
391
  assert.equal(res.effectiveNamespace, "default");
@@ -409,7 +409,7 @@ test("#1495 unauthorized explicit namespace throws BEFORE session context is att
409
409
  observeRequest({
410
410
  sessionKey: "pi-geek:abc123",
411
411
  namespace: "victim-secret",
412
- projectTag: "Blend/Supply",
412
+ projectTag: "Acme/Webshop",
413
413
  }),
414
414
  ),
415
415
  /not writable/,
@@ -445,7 +445,7 @@ test("#1505 thread 1/3: unauthorized OVERLAY self-base throws BEFORE coding cont
445
445
 
446
446
  await assert.rejects(
447
447
  service.observe(
448
- observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Blend/Supply" }),
448
+ observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Acme/Webshop" }),
449
449
  ),
450
450
  /not writable/,
451
451
  );
@@ -491,13 +491,13 @@ test("#1505 thread jvO: restrictive default-namespace write policy does NOT reje
491
491
 
492
492
  const expectedOverlay = combineNamespaces(
493
493
  "pi-geek",
494
- projectNamespaceName(projectTagProjectId("Blend/Supply")),
494
+ projectNamespaceName(projectTagProjectId("Acme/Webshop")),
495
495
  );
496
496
 
497
497
  // FAIL-BEFORE: this threw `namespace is not writable: default`. PASS-AFTER:
498
498
  // the observe is accepted exactly like memory_store/suggestion_submit would.
499
499
  const res = await service.observe(
500
- observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Blend/Supply" }),
500
+ observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Acme/Webshop" }),
501
501
  );
502
502
 
503
503
  // Every side effect uses the authorized overlay write target.
@@ -533,7 +533,7 @@ test("#1505 thread jvO: a genuine reject (unwritable self base) under a restrict
533
533
 
534
534
  await assert.rejects(
535
535
  service.observe(
536
- observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Blend/Supply" }),
536
+ observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Acme/Webshop" }),
537
537
  ),
538
538
  /not writable/,
539
539
  );
@@ -553,12 +553,12 @@ test("#1495 scopeDebug exposes the resolved plan for callers/tests", async () =>
553
553
  const service = new EngramAccessService(probe.orch);
554
554
 
555
555
  const res = await service.observe(
556
- observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Blend/Supply" }),
556
+ observeRequest({ sessionKey: "pi-geek:abc123", projectTag: "Acme/Webshop" }),
557
557
  );
558
558
 
559
559
  const expected = combineNamespaces(
560
560
  "pi-geek",
561
- projectNamespaceName(projectTagProjectId("Blend/Supply")),
561
+ projectNamespaceName(projectTagProjectId("Acme/Webshop")),
562
562
  );
563
563
  assert.ok(res.scopeDebug, "scopeDebug must be present");
564
564
  assert.equal(res.scopeDebug!.principal, "pi-geek");
@@ -611,9 +611,9 @@ test("#1495 the scope plan's writeNamespace matches resolveCodingScopedWriteName
611
611
  const probe = makeObserveProbe(withSelfPolicyPrefix("pi-geek"));
612
612
  // Bind a session coding context so both resolvers see the same project.
613
613
  probe.contexts.set("pi-geek:abc123", {
614
- projectId: projectTagProjectId("Blend/Supply"),
614
+ projectId: projectTagProjectId("Acme/Webshop"),
615
615
  branch: null,
616
- rootPath: projectTagProjectId("Blend/Supply"),
616
+ rootPath: projectTagProjectId("Acme/Webshop"),
617
617
  defaultBranch: null,
618
618
  });
619
619
  const service = new EngramAccessService(probe.orch);
@@ -765,14 +765,14 @@ test("#1495 skipExtraction does not enqueue extraction but still archives LCM un
765
765
  const res = await service.observe(
766
766
  observeRequest({
767
767
  sessionKey: "pi-geek:abc123",
768
- projectTag: "Blend/Supply",
768
+ projectTag: "Acme/Webshop",
769
769
  skipExtraction: true,
770
770
  }),
771
771
  );
772
772
 
773
773
  const expected = combineNamespaces(
774
774
  "pi-geek",
775
- projectNamespaceName(projectTagProjectId("Blend/Supply")),
775
+ projectNamespaceName(projectTagProjectId("Acme/Webshop")),
776
776
  );
777
777
  assert.equal(res.extractionQueued, false);
778
778
  assert.equal(probe.extractionCalls.length, 0);
@@ -24,10 +24,10 @@ test("projectTag auto-resolution uses the shared project tag canonicalizer", asy
24
24
  } as any);
25
25
 
26
26
  await (service as any).maybeAttachCodingContext("session-a", {
27
- projectTag: "Blend/Supply",
27
+ projectTag: "Acme/Webshop",
28
28
  });
29
29
 
30
- const projectId = projectTagProjectId("Blend/Supply");
30
+ const projectId = projectTagProjectId("Acme/Webshop");
31
31
  assert.deepEqual(contexts.get("session-a"), {
32
32
  projectId,
33
33
  branch: null,