@inerrata-corporation/errata 2.0.17-dev.3504 → 2.0.17-dev.3527

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inerrata-corporation/errata",
3
- "version": "2.0.17-dev.3504",
3
+ "version": "2.0.17-dev.3527",
4
4
  "description": "errata - local-first observation engine for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
package/pass-worker.mjs CHANGED
@@ -693,6 +693,11 @@ var init_claim_id = __esm({
693
693
  });
694
694
 
695
695
  // ../../packages/shared/src/identity.ts
696
+ function packageCanonicalId(p) {
697
+ const eco = p.ecosystem.toLowerCase();
698
+ const name2 = eco === "npm" ? p.name.toLowerCase() : p.name;
699
+ return `pkg:${eco}/${name2}${p.version ? `@${p.version}` : ""}`;
700
+ }
696
701
  var init_identity = __esm({
697
702
  "../../packages/shared/src/identity.ts"() {
698
703
  "use strict";
@@ -1807,10 +1812,10 @@ var init_regexes = __esm({
1807
1812
  duration = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/;
1808
1813
  extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/;
1809
1814
  guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;
1810
- uuid = (version2) => {
1811
- if (!version2)
1815
+ uuid = (version3) => {
1816
+ if (!version3)
1812
1817
  return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;
1813
- return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version2}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);
1818
+ return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version3}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);
1814
1819
  };
1815
1820
  uuid4 = /* @__PURE__ */ uuid(4);
1816
1821
  uuid6 = /* @__PURE__ */ uuid(6);
@@ -14619,10 +14624,10 @@ function fromJSONSchema(schema, params) {
14619
14624
  if (typeof schema === "boolean") {
14620
14625
  return schema ? z.any() : z.never();
14621
14626
  }
14622
- const version2 = detectVersion(schema, params?.defaultTarget);
14627
+ const version3 = detectVersion(schema, params?.defaultTarget);
14623
14628
  const defs = schema.$defs || schema.definitions || {};
14624
14629
  const ctx = {
14625
- version: version2,
14630
+ version: version3,
14626
14631
  defs,
14627
14632
  refs: /* @__PURE__ */ new Map(),
14628
14633
  processing: /* @__PURE__ */ new Set(),
@@ -15094,6 +15099,50 @@ var init_history_evidence = __esm({
15094
15099
  }
15095
15100
  });
15096
15101
 
15102
+ // ../../packages/shared/src/history-dependencies.ts
15103
+ function historyDependencyIdentity(raw) {
15104
+ const parsed = HistoryDependencyContextSchema.safeParse(raw);
15105
+ if (!parsed.success || !parsed.data.complete || parsed.data.conflict) return null;
15106
+ if (parsed.data.dependencies.some((d) => !exactHistoryDependencyVersion(d))) return null;
15107
+ return digest(parsed.data.dependencies.map((d) => [d.packageId, d.manifestId, d.side, d.declaredRange, d.resolvedVersion]).sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b))));
15108
+ }
15109
+ function exactHistoryDependencyVersion(d) {
15110
+ return d.resolvedVersion ?? (/^\d+\.\d+\.\d+(?:-[\w.-]+)?$/.test(d.declaredRange ?? "") ? d.declaredRange : null);
15111
+ }
15112
+ var version2, HistoryDependencySchema, HistoryDependencyContextSchema, HISTORY_RECONCILE_BUILD;
15113
+ var init_history_dependencies = __esm({
15114
+ "../../packages/shared/src/history-dependencies.ts"() {
15115
+ "use strict";
15116
+ init_zod();
15117
+ init_hash();
15118
+ init_identity();
15119
+ version2 = external_exports.string().max(160).nullable();
15120
+ HistoryDependencySchema = external_exports.object({
15121
+ packageId: external_exports.string().startsWith("pkg:").max(300),
15122
+ ecosystem: external_exports.string().min(1).max(20),
15123
+ name: external_exports.string().min(1).max(200),
15124
+ kind: external_exports.enum(["package", "sdk", "engine", "runtime", "image"]),
15125
+ manifestId: external_exports.string().regex(/^hmanifest_[a-f0-9]{32}$/),
15126
+ sourceCommit: external_exports.string().regex(/^[a-f0-9]{7,64}$/),
15127
+ side: external_exports.enum(["before", "after"]),
15128
+ /** Environment-only entries constrain applicability but never mint a package edge. */
15129
+ binding: external_exports.enum(["named", "import", "environment"]).optional(),
15130
+ declaredRange: version2,
15131
+ resolvedVersion: version2,
15132
+ pathTokens: external_exports.array(external_exports.string().regex(/^p\d+$/)).max(500),
15133
+ importTokens: external_exports.array(external_exports.string().regex(/^p\d+$/)).max(500)
15134
+ }).refine((d) => d.packageId === packageCanonicalId({ ecosystem: d.ecosystem, name: d.name }), "package identity must match its evidence");
15135
+ HistoryDependencyContextSchema = external_exports.object({
15136
+ schemaVersion: external_exports.literal("history-deps-1"),
15137
+ complete: external_exports.boolean(),
15138
+ dependencies: external_exports.array(HistoryDependencySchema).max(256),
15139
+ statedVersions: external_exports.array(external_exports.object({ packageId: external_exports.string().max(300), version: external_exports.string().max(80) })).max(64).optional(),
15140
+ conflict: external_exports.boolean().optional()
15141
+ });
15142
+ HISTORY_RECONCILE_BUILD = "history-reconcile-2";
15143
+ }
15144
+ });
15145
+
15097
15146
  // ../../packages/shared/src/edge-rules.ts
15098
15147
  function isValidEdge(from, type, to) {
15099
15148
  const rule = EDGE_RULES[type];
@@ -15225,6 +15274,7 @@ var init_wire = __esm({
15225
15274
  "use strict";
15226
15275
  init_zod();
15227
15276
  init_history_evidence();
15277
+ init_history_dependencies();
15228
15278
  init_castalia();
15229
15279
  init_edge_rules();
15230
15280
  init_symbol_intent();
@@ -15348,6 +15398,7 @@ var init_wire = __esm({
15348
15398
  extractedBy: external_exports.enum(INGEST_EXTRACTION_SOURCES).optional(),
15349
15399
  sourceSupport: external_exports.literal("supported").optional(),
15350
15400
  historicalAnchors: external_exports.array(HistoryAnchorSourceSchema).max(160).optional(),
15401
+ dependencyEvidence: external_exports.array(HistoryDependencySchema).max(256).optional(),
15351
15402
  evidence: external_exports.array(HistoryEvidenceRefSchema).max(12).optional(),
15352
15403
  verificationEvidence: external_exports.array(HistoryEvidenceRefSchema).max(12).optional(),
15353
15404
  verifierBuild: external_exports.string().max(80).optional(),
@@ -15439,16 +15490,16 @@ var init_project_symbol = __esm({
15439
15490
  // ../../packages/shared/src/lockfile.ts
15440
15491
  function rankDirect(raw, ecosystem = "npm") {
15441
15492
  const byName = /* @__PURE__ */ new Map();
15442
- for (const { name: name2, version: version2 } of raw) {
15493
+ for (const { name: name2, version: version3 } of raw) {
15443
15494
  const prev = byName.get(name2);
15444
15495
  if (prev) {
15445
15496
  prev.importers++;
15446
15497
  continue;
15447
15498
  }
15448
15499
  byName.set(name2, {
15449
- purl: `pkg:${ecosystem}/${name2}@${version2}`,
15500
+ purl: `pkg:${ecosystem}/${name2}@${version3}`,
15450
15501
  name: name2,
15451
- version: version2,
15502
+ version: version3,
15452
15503
  ecosystem,
15453
15504
  importers: 1
15454
15505
  });
@@ -15457,11 +15508,11 @@ function rankDirect(raw, ecosystem = "npm") {
15457
15508
  (a, b) => b.importers - a.importers || a.name.localeCompare(b.name)
15458
15509
  );
15459
15510
  }
15460
- function npmPurl(name2, version2) {
15461
- return `pkg:npm/${name2}@${version2}`;
15511
+ function npmPurl(name2, version3) {
15512
+ return `pkg:npm/${name2}@${version3}`;
15462
15513
  }
15463
- function component(name2, version2) {
15464
- return { purl: npmPurl(name2, version2), name: name2, version: version2, ecosystem: "npm" };
15514
+ function component(name2, version3) {
15515
+ return { purl: npmPurl(name2, version3), name: name2, version: version3, ecosystem: "npm" };
15465
15516
  }
15466
15517
  function isNpmImporterPath(path) {
15467
15518
  return path === "" || !path.includes("node_modules/");
@@ -15482,13 +15533,13 @@ function parsePackageLockJson(jsonText) {
15482
15533
  const ix = path.lastIndexOf("node_modules/");
15483
15534
  if (ix === -1) continue;
15484
15535
  const name2 = path.slice(ix + "node_modules/".length);
15485
- const version2 = typeof meta3.version === "string" ? meta3.version : "";
15486
- if (!name2 || !version2) continue;
15487
- components.push(component(name2, version2));
15488
- byPath.set(path, { name: name2, version: version2 });
15536
+ const version3 = typeof meta3.version === "string" ? meta3.version : "";
15537
+ if (!name2 || !version3) continue;
15538
+ components.push(component(name2, version3));
15539
+ byPath.set(path, { name: name2, version: version3 });
15489
15540
  const depth = path.split("node_modules/").length;
15490
15541
  const prev = hoisted.get(name2);
15491
- if (!prev || depth < prev.depth) hoisted.set(name2, { version: version2, depth });
15542
+ if (!prev || depth < prev.depth) hoisted.set(name2, { version: version3, depth });
15492
15543
  }
15493
15544
  const dependencies = [];
15494
15545
  for (const [path, meta3] of Object.entries(packages)) {
@@ -15531,9 +15582,9 @@ function splitPnpmKey(raw) {
15531
15582
  const at = k.lastIndexOf("@");
15532
15583
  if (at <= 0) return null;
15533
15584
  const name2 = k.slice(0, at);
15534
- const version2 = k.slice(at + 1);
15535
- if (!name2 || !version2) return null;
15536
- return { name: name2, version: version2 };
15585
+ const version3 = k.slice(at + 1);
15586
+ if (!name2 || !version3) return null;
15587
+ return { name: name2, version: version3 };
15537
15588
  }
15538
15589
  function parsePnpmImporters(lines) {
15539
15590
  const DEP_SECTIONS = /* @__PURE__ */ new Set(["dependencies:", "devDependencies:", "optionalDependencies:"]);
@@ -15569,14 +15620,14 @@ function parsePnpmImporters(lines) {
15569
15620
  if (indent === 8 && depName) {
15570
15621
  const t = line.trim();
15571
15622
  if (!t.startsWith("version:")) continue;
15572
- let version2 = t.slice("version:".length).trim().replace(/^['"]|['"]$/g, "");
15573
- const paren = version2.indexOf("(");
15574
- if (paren !== -1) version2 = version2.slice(0, paren);
15575
- if (!version2 || version2.startsWith("link:") || version2.startsWith("file:") || version2.includes("://")) {
15623
+ let version3 = t.slice("version:".length).trim().replace(/^['"]|['"]$/g, "");
15624
+ const paren = version3.indexOf("(");
15625
+ if (paren !== -1) version3 = version3.slice(0, paren);
15626
+ if (!version3 || version3.startsWith("link:") || version3.startsWith("file:") || version3.includes("://")) {
15576
15627
  depName = null;
15577
15628
  continue;
15578
15629
  }
15579
- raw.push({ name: depName, version: version2 });
15630
+ raw.push({ name: depName, version: version3 });
15580
15631
  depName = null;
15581
15632
  }
15582
15633
  }
@@ -15692,19 +15743,19 @@ function parseGemfileLock(text) {
15692
15743
  const spec = specLine.exec(line);
15693
15744
  if (spec) {
15694
15745
  const name2 = spec[1];
15695
- const version2 = (spec[2] ?? "").trim();
15746
+ const version3 = (spec[2] ?? "").trim();
15696
15747
  if (section === "path-or-git") {
15697
15748
  nonRegistry.add(name2);
15698
15749
  currentGem = null;
15699
15750
  continue;
15700
15751
  }
15701
- if (!version2) continue;
15702
- currentGem = { name: name2, version: version2 };
15703
- registryVersions.set(name2, version2);
15704
- const purl = `pkg:gem/${name2}@${version2}`;
15752
+ if (!version3) continue;
15753
+ currentGem = { name: name2, version: version3 };
15754
+ registryVersions.set(name2, version3);
15755
+ const purl = `pkg:gem/${name2}@${version3}`;
15705
15756
  if (!seen.has(purl)) {
15706
15757
  seen.add(purl);
15707
- components.push({ purl, name: name2, version: version2, ecosystem: "gem" });
15758
+ components.push({ purl, name: name2, version: version3, ecosystem: "gem" });
15708
15759
  }
15709
15760
  continue;
15710
15761
  }
@@ -15774,8 +15825,8 @@ function parseGodot(path, text) {
15774
15825
  const m = /config\/features=PackedStringArray\(([^)]*)\)/.exec(text);
15775
15826
  if (!m) return [];
15776
15827
  const feats = (m[1] ?? "").split(",").map((f) => f.trim().replace(/^"|"$/g, "")).filter((f) => f.length > 0);
15777
- const version2 = feats.find((f) => /^\d+\.\d+/.test(f)) ?? null;
15778
- return [{ ecosystem: "godot", name: "godot", version: version2, kind: "engine", manifest: path }];
15828
+ const version3 = feats.find((f) => /^\d+\.\d+/.test(f)) ?? null;
15829
+ return [{ ecosystem: "godot", name: "godot", version: version3, kind: "engine", manifest: path }];
15779
15830
  }
15780
15831
  function parsePackageJson(path, text) {
15781
15832
  let obj;
@@ -15790,8 +15841,8 @@ function parsePackageJson(path, text) {
15790
15841
  const section = obj[key];
15791
15842
  if (!section || typeof section !== "object") continue;
15792
15843
  for (const [name2, ver] of Object.entries(section)) {
15793
- const version2 = ver ? String(ver) : null;
15794
- deps.push({ ecosystem: "npm", name: name2, version: version2, kind: "package", manifest: path });
15844
+ const version3 = ver ? String(ver) : null;
15845
+ deps.push({ ecosystem: "npm", name: name2, version: version3, kind: "package", manifest: path });
15795
15846
  }
15796
15847
  }
15797
15848
  return deps;
@@ -15896,12 +15947,12 @@ function parseGradle(path, text) {
15896
15947
  const re = new RegExp(`\\b(?:${GRADLE_CONFIGS})\\s*(?:\\(\\s*)?["']([^"']+)["']`, "g");
15897
15948
  for (const m of text.matchAll(re)) {
15898
15949
  const parts2 = (m[1] ?? "").split(":");
15899
- const [group, artifact, version2] = parts2;
15950
+ const [group, artifact, version3] = parts2;
15900
15951
  if (!group || !artifact || parts2.length < 2) continue;
15901
15952
  deps.push({
15902
15953
  ecosystem: "maven",
15903
15954
  name: mavenName(group, artifact),
15904
- version: version2?.trim() || null,
15955
+ version: version3?.trim() || null,
15905
15956
  kind: "package",
15906
15957
  manifest: path
15907
15958
  });
@@ -15915,18 +15966,18 @@ function parseVersionCatalog(path, text) {
15915
15966
  for (const line of (section[1] ?? "").split(/\r?\n/)) {
15916
15967
  if (!line.trim() || line.trimStart().startsWith("#")) continue;
15917
15968
  const module2 = /module\s*=\s*["']([^"']+)["']/.exec(line)?.[1];
15918
- const version2 = /version(?:\.ref)?\s*=\s*["']([^"']+)["']/.exec(line)?.[1] ?? null;
15969
+ const version3 = /version(?:\.ref)?\s*=\s*["']([^"']+)["']/.exec(line)?.[1] ?? null;
15919
15970
  if (module2) {
15920
15971
  const [group2, artifact2] = module2.split(":");
15921
15972
  if (group2 && artifact2) {
15922
- deps.push({ ecosystem: "maven", name: mavenName(group2, artifact2), version: version2, kind: "package", manifest: path });
15973
+ deps.push({ ecosystem: "maven", name: mavenName(group2, artifact2), version: version3, kind: "package", manifest: path });
15923
15974
  }
15924
15975
  continue;
15925
15976
  }
15926
15977
  const group = /\bgroup\s*=\s*["']([^"']+)["']/.exec(line)?.[1];
15927
15978
  const artifact = /\bname\s*=\s*["']([^"']+)["']/.exec(line)?.[1];
15928
15979
  if (group && artifact) {
15929
- deps.push({ ecosystem: "maven", name: mavenName(group, artifact), version: version2, kind: "package", manifest: path });
15980
+ deps.push({ ecosystem: "maven", name: mavenName(group, artifact), version: version3, kind: "package", manifest: path });
15930
15981
  }
15931
15982
  }
15932
15983
  return deps;
@@ -16080,7 +16131,9 @@ function historyReadPolicy(node, options = {}) {
16080
16131
  const q = raw && typeof raw === "object" ? raw : {};
16081
16132
  const source = q["sourceSupport"] ?? "unreviewed";
16082
16133
  const applicability = q["applicability"] ?? "unknown";
16083
- const current = options.atCommit !== void 0 && q["evaluatedAtCommit"] === options.atCommit;
16134
+ const proof = q["reconciliationEvidence"];
16135
+ const environmentKnown = historyDependencyIdentity(q["dependencyContext"]) !== null && proof?.["build"] === HISTORY_RECONCILE_BUILD;
16136
+ const current = options.atCommit !== void 0 && q["evaluatedAtCommit"] === options.atCommit && environmentKnown;
16084
16137
  const invalid = source === "contradicted" || source === "quarantined";
16085
16138
  const passive = options.mode === "passive";
16086
16139
  const validation = node.validationSource ?? attrs["validationSource"];
@@ -16090,12 +16143,13 @@ function historyReadPolicy(node, options = {}) {
16090
16143
  return {
16091
16144
  allow,
16092
16145
  history: true,
16093
- notice: `History-derived${at}; source ${String(source)}; applicability ${current ? String(applicability) : "unknown at this checkout"}; ${independentlyValidated ? "separate validation recorded" : "not independently validated"}.`
16146
+ notice: `History-derived${at}; source ${String(source)}; applicability ${current ? String(applicability) : "unknown at this checkout"}; ${environmentKnown ? "dependency context checked" : "dependency applicability unverified"}; ${independentlyValidated ? "separate validation recorded" : "not independently validated"}.`
16094
16147
  };
16095
16148
  }
16096
16149
  var init_history_read = __esm({
16097
16150
  "../../packages/shared/src/history-read.ts"() {
16098
16151
  "use strict";
16152
+ init_history_dependencies();
16099
16153
  }
16100
16154
  });
16101
16155
 
@@ -16114,6 +16168,7 @@ var init_history_revision = __esm({
16114
16168
  init_zod();
16115
16169
  init_hash();
16116
16170
  init_history_evidence();
16171
+ init_history_dependencies();
16117
16172
  Sha = external_exports.string().regex(/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/);
16118
16173
  HistoryRevisionRequestSchema = external_exports.strictObject({
16119
16174
  atCommit: Sha,
@@ -16122,7 +16177,8 @@ var init_history_revision = __esm({
16122
16177
  occurrenceId: external_exports.string().min(1).max(100),
16123
16178
  symbols: external_exports.array(external_exports.strictObject({ symbolId: external_exports.string().regex(/^sym_[a-f0-9]{8,64}$/), bodyHash: external_exports.string().regex(/^[a-f0-9]{8,64}$/) })).max(32),
16124
16179
  /** Scrubbed, tokenized net change from this occurrence's source to atCommit. */
16125
- diff: external_exports.string().max(16e3).optional()
16180
+ diff: external_exports.string().max(16e3).optional(),
16181
+ dependencyContext: HistoryDependencyContextSchema.optional()
16126
16182
  })).max(50)
16127
16183
  });
16128
16184
  }
@@ -16169,6 +16225,7 @@ var init_src = __esm({
16169
16225
  init_history_temporal();
16170
16226
  init_history_revision();
16171
16227
  init_history_evidence();
16228
+ init_history_dependencies();
16172
16229
  init_hash();
16173
16230
  init_error_signature();
16174
16231
  init_canonicalize();
@@ -21534,10 +21591,10 @@ ${JSON.stringify(symbolNames, null, 2)}`);
21534
21591
  this.language = null;
21535
21592
  } else if (language.constructor === Language) {
21536
21593
  address = language[0];
21537
- const version2 = C._ts_language_abi_version(address);
21538
- if (version2 < MIN_COMPATIBLE_VERSION || LANGUAGE_VERSION < version2) {
21594
+ const version3 = C._ts_language_abi_version(address);
21595
+ if (version3 < MIN_COMPATIBLE_VERSION || LANGUAGE_VERSION < version3) {
21539
21596
  throw new Error(
21540
- `Incompatible language version ${version2}. Compatibility range ${MIN_COMPATIBLE_VERSION} through ${LANGUAGE_VERSION}.`
21597
+ `Incompatible language version ${version3}. Compatibility range ${MIN_COMPATIBLE_VERSION} through ${LANGUAGE_VERSION}.`
21541
21598
  );
21542
21599
  }
21543
21600
  this.language = language;
@@ -26439,8 +26496,8 @@ var SqliteGraphStore = class {
26439
26496
  freezeNode(liveId, t) {
26440
26497
  const live = this.getNode(liveId);
26441
26498
  if (!live) return null;
26442
- const version2 = live.version ?? 1;
26443
- const frozenId = `${liveId}@v${version2}`;
26499
+ const version3 = live.version ?? 1;
26500
+ const frozenId = `${liveId}@v${version3}`;
26444
26501
  if (this.getNode(frozenId)) {
26445
26502
  this.stmts.advanceLive.run({ live_id: liveId, t });
26446
26503
  return frozenId;
@@ -26784,13 +26841,13 @@ function linkProblemToPackages(store2, problemId, text, ts, index) {
26784
26841
  if (idx.size === 0) return { linked: [] };
26785
26842
  const already = new Set(store2.outEdges(problemId, ["DEPENDS_ON"]).map((e) => e.to));
26786
26843
  const linked = [];
26787
- for (const { node, version: version2 } of matchPackagesInText(text, idx)) {
26844
+ for (const { node, version: version3 } of matchPackagesInText(text, idx)) {
26788
26845
  if (already.has(node.id)) continue;
26789
26846
  addDependency(store2, {
26790
26847
  fromId: problemId,
26791
26848
  toId: node.id,
26792
26849
  relation: "depends-on",
26793
- evidence: version2 ? `named in problem (@${version2})` : "named in problem statement",
26850
+ evidence: version3 ? `named in problem (@${version3})` : "named in problem statement",
26794
26851
  ts,
26795
26852
  extractionSource: "daemon-extracted"
26796
26853
  });