@getbourdon/participants 0.2.4 → 0.3.0

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.
@@ -429,6 +429,18 @@ function mergeEntities(into, other) {
429
429
  into.summary = other.summary;
430
430
  }
431
431
  into.tags = [...new Set([...(into.tags ?? []), ...(other.tags ?? [])])];
432
+ into.aliases = [...new Set([...(into.aliases ?? []), ...(other.aliases ?? [])])];
433
+ if (other.last_touched && (into.last_touched == null || other.last_touched > into.last_touched)) {
434
+ into.last_touched = other.last_touched;
435
+ }
436
+ // Temporal validity: the widest window either source supports. Dropping
437
+ // these silently republished end-of-life entities as though still active.
438
+ if (other.valid_from && (into.valid_from == null || other.valid_from < into.valid_from)) {
439
+ into.valid_from = other.valid_from;
440
+ }
441
+ if (other.valid_to && (into.valid_to == null || other.valid_to > into.valid_to)) {
442
+ into.valid_to = other.valid_to;
443
+ }
432
444
  if (visRank(other.visibility) < visRank(into.visibility)) {
433
445
  into.visibility = other.visibility;
434
446
  }
@@ -436,9 +448,9 @@ function mergeEntities(into, other) {
436
448
  }
437
449
  /**
438
450
  * Merge multiple entity lists into one, deduping by case-insensitive name.
439
- * NOTE the faithful oracle quirk: the fresh copy DROPS valid_from / valid_to, so
440
- * an archived project keeps its `archived` tag but emits no `valid_to`. Do not
441
- * "fix" this — parity breaks otherwise.
451
+ * The fresh copy carries EVERY field (mirroring the oracle's `replace()`):
452
+ * a hand-kept field list here once dropped valid_from/valid_to, so archived
453
+ * projects federated as though still active.
442
454
  */
443
455
  function dedupeEntities(sourceLists) {
444
456
  const byKey = new Map();
@@ -453,14 +465,9 @@ function dedupeEntities(sourceLists) {
453
465
  }
454
466
  else {
455
467
  byKey.set(key, makeEntity({
456
- name: entity.name,
457
- type: entity.type,
468
+ ...entity,
458
469
  aliases: [...(entity.aliases ?? [])],
459
- summary: entity.summary,
460
- last_touched: entity.last_touched,
461
470
  tags: [...(entity.tags ?? [])],
462
- visibility: entity.visibility,
463
- // valid_from / valid_to intentionally dropped (oracle behavior).
464
471
  }));
465
472
  }
466
473
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getbourdon/participants",
3
- "version": "0.2.4",
3
+ "version": "0.3.0",
4
4
  "description": "Bourdon participants — the external-agent → L5 reader layer (BUSL-1.1). Each participant normalizes a foreign agent's native memory store into a visibility-filtered, redacted L5 manifest: read-only SQLite readers (better-sqlite3 mode=ro: hermes), file/convention readers (claude-code), and network readers (github-copilot) with a TTL JSON cache + lazy AuthProvider that never persists a token. Four invariants enforced in code, not by trust: visibility-filter-before-emission, deterministic exportL5, healthCheck never throws, redact every native string. Discovery is a static TS registry (agent_id-sorted, first-wins, log-and-skip) replacing Python's pkgutil scan. Python (pip install bourdon) is the oracle; this mirror asserts against @getbourdon/conformance native_stores fixtures.",
5
5
  "license": "BUSL-1.1",
6
6
  "type": "module",
@@ -35,15 +35,15 @@
35
35
  "dependencies": {
36
36
  "smol-toml": "^1.7.0",
37
37
  "yaml": "^2.6.1",
38
- "@getbourdon/l5": "0.3.0",
39
- "@getbourdon/redaction": "0.1.4"
38
+ "@getbourdon/l5": "0.4.0",
39
+ "@getbourdon/redaction": "0.1.5"
40
40
  },
41
41
  "optionalDependencies": {
42
42
  "better-sqlite3": "^12.2.0"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/better-sqlite3": "^7.6.12",
46
- "@getbourdon/conformance": "0.3.0"
46
+ "@getbourdon/conformance": "0.5.0"
47
47
  },
48
48
  "scripts": {
49
49
  "build": "tsup",