@adcp/sdk 13.1.0 → 13.1.1

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.
@@ -4,5 +4,5 @@
4
4
  "source_sha": "4e553ad955f83b49c7d221ab5c3ff78237ad02e3",
5
5
  "source_tarball_sha256": "580656d6466ef9f0d1119985e6726c2efea718dc671e2ad30957fcb2fd54af0f",
6
6
  "upstream_adcp_version": "2.5.3",
7
- "synced_at": "2026-09-21T01:36:25.748Z"
7
+ "synced_at": "2026-09-23T15:24:56.831Z"
8
8
  }
@@ -197,7 +197,7 @@ export interface UpstreamTrafficQueryResult {
197
197
  */
198
198
  export declare function runValidations(validations: StoryboardValidation[], context: ValidationContext): ValidationResult[];
199
199
  /** Capability semver emitted in run summaries and used for advisory expiry. */
200
- export declare const RUNNER_CAPABILITY_VERSION = "13.1.0";
200
+ export declare const RUNNER_CAPABILITY_VERSION = "13.1.1";
201
201
  /** True when a failed validation contributes to the owning step's grade. */
202
202
  export declare function validationFailsStep(result: ValidationResult): boolean;
203
203
  /**
@@ -197,7 +197,7 @@ export interface UpstreamTrafficQueryResult {
197
197
  */
198
198
  export declare function runValidations(validations: StoryboardValidation[], context: ValidationContext): ValidationResult[];
199
199
  /** Capability semver emitted in run summaries and used for advisory expiry. */
200
- export declare const RUNNER_CAPABILITY_VERSION = "13.1.0";
200
+ export declare const RUNNER_CAPABILITY_VERSION = "13.1.1";
201
201
  /** True when a failed validation contributes to the owning step's grade. */
202
202
  export declare function validationFailsStep(result: ValidationResult): boolean;
203
203
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"validations.d.ts","sourceRoot":"","sources":["../../../../src/lib/testing/storyboard/validations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EAEpB,iBAAiB,EACjB,oBAAoB,EAGpB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAgB,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAe/E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGtE;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sFAAsF;IACtF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uEAAuE;IACvE,8BAA8B,CAAC,EAAE,OAAO,CAAC;IACzC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,eAAe,CAAC;IACnC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,gCAAgC,CAAC;IACnD;;;;;OAKG;IACH,cAAc,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC9D;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,uBAAuB,CAAC;CAC9C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,yEAAyE;IACzE,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,yFAAyF;IACzF,cAAc,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,gCAAgC;IAC/C,sFAAsF;IACtF,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IACjD;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C;;;;OAIG;IACH,6BAA6B,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACpE;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,4FAA4F;IAC5F,OAAO,EAAE,sBAAsB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,oBAAoB,EAAE,EAAE,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,EAAE,CAElH;AAED,+EAA+E;AAC/E,eAAO,MAAM,yBAAyB,WAAkB,CAAC;AAEzD,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAErE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,oBAAoB,GAC/B,gBAAgB,CAqBlB;AA8iBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE3F;AAED,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AA6+FzD,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"validations.d.ts","sourceRoot":"","sources":["../../../../src/lib/testing/storyboard/validations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EAEpB,iBAAiB,EACjB,oBAAoB,EAGpB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAgB,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAiB/E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGtE;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sFAAsF;IACtF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uEAAuE;IACvE,8BAA8B,CAAC,EAAE,OAAO,CAAC;IACzC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,eAAe,CAAC;IACnC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,gCAAgC,CAAC;IACnD;;;;;OAKG;IACH,cAAc,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC9D;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,uBAAuB,CAAC;CAC9C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,yEAAyE;IACzE,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,yFAAyF;IACzF,cAAc,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,gCAAgC;IAC/C,sFAAsF;IACtF,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IACjD;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C;;;;OAIG;IACH,6BAA6B,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACpE;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,4FAA4F;IAC5F,OAAO,EAAE,sBAAsB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,oBAAoB,EAAE,EAAE,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,EAAE,CAElH;AAED,+EAA+E;AAC/E,eAAO,MAAM,yBAAyB,WAAkB,CAAC;AAEzD,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAErE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,oBAAoB,GAC/B,gBAAgB,CAqBlB;AA8iBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE3F;AAED,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAykGzD,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC"}
@@ -39,6 +39,7 @@ var import_semver = require("semver");
39
39
  var import_test_controller = require('../test-controller.js');
40
40
  var import_glob = require('../../utils/glob.js');
41
41
  var import_path = require('./path.js');
42
+ var import_canonicalize = require('../../signing/canonicalize.js');
42
43
  var import_shape_drift_hints = require('./shape-drift-hints.js');
43
44
  var import_test_kit = require('./test-kit.js');
44
45
  var import_canonical_format_satisfaction = require('./canonical-format-satisfaction.js');
@@ -518,13 +519,67 @@ function validateFieldAbsent(validation, taskResult) {
518
519
  actual: value
519
520
  };
520
521
  }
521
- function valuesMatch(actual, expected) {
522
+ function comparisonKeyFromPath(path) {
523
+ const segments = (0, import_path.parsePath)(path);
524
+ for (let i = segments.length - 1; i >= 0; i -= 1) {
525
+ const segment = segments[i];
526
+ if (typeof segment === "string") return segment;
527
+ }
528
+ return void 0;
529
+ }
530
+ function isAgentUrlComparisonKey(key) {
531
+ const normalized = key?.toLowerCase();
532
+ return normalized === "agent_url" || normalized?.endsWith("_agent_url") === true;
533
+ }
534
+ function agentUrlValuesMatch(actual, expected) {
535
+ try {
536
+ return (0, import_canonicalize.canonicalTargetUri)(actual) === (0, import_canonicalize.canonicalTargetUri)(expected);
537
+ } catch {
538
+ return false;
539
+ }
540
+ }
541
+ function normalizeAgentUrlsForDistinctCount(value, comparisonKey) {
542
+ if (isAgentUrlComparisonKey(comparisonKey)) {
543
+ if (typeof value !== "string") return { value, valid: false };
544
+ try {
545
+ return { value: (0, import_canonicalize.canonicalTargetUri)(value), valid: true };
546
+ } catch {
547
+ return { value, valid: false };
548
+ }
549
+ }
550
+ if (Array.isArray(value)) {
551
+ const normalized = [];
552
+ for (const item of value) {
553
+ const result = normalizeAgentUrlsForDistinctCount(item, comparisonKey);
554
+ if (!result.valid) return { value, valid: false };
555
+ normalized.push(result.value);
556
+ }
557
+ return { value: normalized, valid: true };
558
+ }
559
+ if (typeof value === "object" && value !== null) {
560
+ const normalized = {};
561
+ for (const [key, item] of Object.entries(value)) {
562
+ const result = normalizeAgentUrlsForDistinctCount(item, key);
563
+ if (!result.valid) return { value, valid: false };
564
+ normalized[key] = result.value;
565
+ }
566
+ return { value: normalized, valid: true };
567
+ }
568
+ return { value, valid: true };
569
+ }
570
+ function valuesMatch(actual, expected, comparisonKey) {
571
+ if (isAgentUrlComparisonKey(comparisonKey)) {
572
+ return typeof actual === "string" && typeof expected === "string" && agentUrlValuesMatch(actual, expected);
573
+ }
522
574
  if (typeof actual === "object" && actual !== null) {
523
- return deepEqualJsonValue(actual, expected);
575
+ return deepEqualJsonValue(actual, expected, comparisonKey);
524
576
  }
525
577
  return actual === expected;
526
578
  }
527
- function deepEqualJsonValue(a, b) {
579
+ function deepEqualJsonValue(a, b, comparisonKey) {
580
+ if (isAgentUrlComparisonKey(comparisonKey)) {
581
+ return typeof a === "string" && typeof b === "string" && agentUrlValuesMatch(a, b);
582
+ }
528
583
  if (a === b) return true;
529
584
  if (typeof a !== typeof b) return false;
530
585
  if (a === null || b === null) return a === b;
@@ -533,7 +588,7 @@ function deepEqualJsonValue(a, b) {
533
588
  if (!Array.isArray(a) || !Array.isArray(b)) return false;
534
589
  if (a.length !== b.length) return false;
535
590
  for (let i = 0; i < a.length; i++) {
536
- if (!deepEqualJsonValue(a[i], b[i])) return false;
591
+ if (!deepEqualJsonValue(a[i], b[i], comparisonKey)) return false;
537
592
  }
538
593
  return true;
539
594
  }
@@ -542,21 +597,21 @@ function deepEqualJsonValue(a, b) {
542
597
  if (keysA.length !== keysB.length) return false;
543
598
  for (const k of keysA) {
544
599
  if (!Object.prototype.hasOwnProperty.call(b, k)) return false;
545
- if (!deepEqualJsonValue(a[k], b[k])) return false;
600
+ if (!deepEqualJsonValue(a[k], b[k], k)) return false;
546
601
  }
547
602
  return true;
548
603
  }
549
604
  function isRecord(value) {
550
605
  return value !== null && typeof value === "object" && !Array.isArray(value);
551
606
  }
552
- function containsValueMatches(actual, expected) {
607
+ function containsValueMatches(actual, expected, comparisonKey) {
553
608
  if (Array.isArray(expected)) {
554
609
  if (!Array.isArray(actual)) return false;
555
610
  if (expected.length === 0) return actual.length === 0;
556
611
  const used = /* @__PURE__ */ new Set();
557
612
  return expected.every((expectedItem) => {
558
613
  const matchIndex = actual.findIndex(
559
- (actualItem, index) => !used.has(index) && containsValueMatches(actualItem, expectedItem)
614
+ (actualItem, index) => !used.has(index) && containsValueMatches(actualItem, expectedItem, comparisonKey)
560
615
  );
561
616
  if (matchIndex === -1) return false;
562
617
  used.add(matchIndex);
@@ -566,10 +621,10 @@ function containsValueMatches(actual, expected) {
566
621
  if (isRecord(expected)) {
567
622
  if (!isRecord(actual)) return false;
568
623
  return Object.entries(expected).every(
569
- ([key, expectedValue]) => Object.prototype.hasOwnProperty.call(actual, key) && containsValueMatches(actual[key], expectedValue)
624
+ ([key, expectedValue]) => Object.prototype.hasOwnProperty.call(actual, key) && containsValueMatches(actual[key], expectedValue, key)
570
625
  );
571
626
  }
572
- return valuesMatch(actual, expected);
627
+ return valuesMatch(actual, expected, comparisonKey);
573
628
  }
574
629
  function pathUsesWildcardSyntax(path) {
575
630
  return /\[(?:\*|)\]/.test(path);
@@ -606,7 +661,8 @@ function validateFieldValue(validation, taskResult) {
606
661
  const actual = (0, import_path.resolvePath)(taskResult.data, validation.path);
607
662
  const pointer = (0, import_path.toJsonPointer)(validation.path);
608
663
  if (validation.allowed_values?.length) {
609
- const passed2 = validation.allowed_values.some((v) => valuesMatch(actual, v));
664
+ const comparisonKey = comparisonKeyFromPath(validation.path);
665
+ const passed2 = validation.allowed_values.some((v) => valuesMatch(actual, v, comparisonKey));
610
666
  if (passed2) {
611
667
  return {
612
668
  check: checkName,
@@ -627,7 +683,7 @@ function validateFieldValue(validation, taskResult) {
627
683
  actual: actual ?? null
628
684
  };
629
685
  }
630
- const passed = valuesMatch(actual, validation.value);
686
+ const passed = valuesMatch(actual, validation.value, comparisonKeyFromPath(validation.path));
631
687
  if (passed) {
632
688
  return {
633
689
  check: checkName,
@@ -677,7 +733,8 @@ function validateFieldValueOrAbsent(validation, taskResult) {
677
733
  };
678
734
  }
679
735
  if (validation.allowed_values?.length) {
680
- const passed2 = validation.allowed_values.some((v) => valuesMatch(actual, v));
736
+ const comparisonKey = comparisonKeyFromPath(validation.path);
737
+ const passed2 = validation.allowed_values.some((v) => valuesMatch(actual, v, comparisonKey));
681
738
  if (passed2) {
682
739
  return {
683
740
  check: checkName,
@@ -698,7 +755,7 @@ function validateFieldValueOrAbsent(validation, taskResult) {
698
755
  actual
699
756
  };
700
757
  }
701
- const passed = valuesMatch(actual, validation.value);
758
+ const passed = valuesMatch(actual, validation.value, comparisonKeyFromPath(validation.path));
702
759
  if (passed) {
703
760
  return {
704
761
  check: checkName,
@@ -840,7 +897,8 @@ function validateFieldContains(validation, taskResult) {
840
897
  const resolved = (0, import_path.resolvePathAll)(taskResult.data, validation.path);
841
898
  const pointer = (0, import_path.toJsonPointer)(validation.path);
842
899
  const candidates = validation.allowed_values?.length ? validation.allowed_values : [validation.value];
843
- const matched = resolved.some((actual) => candidates.some((c) => containsValueMatches(actual, c)));
900
+ const comparisonKey = comparisonKeyFromPath(validation.path);
901
+ const matched = resolved.some((actual) => candidates.some((c) => containsValueMatches(actual, c, comparisonKey)));
844
902
  if (matched) {
845
903
  return {
846
904
  check: checkName,
@@ -1909,7 +1967,7 @@ function validateFieldEqualsContext(validation, ctx) {
1909
1967
  const actual = (0, import_path.resolvePath)(resolveTarget(ctx).data, validation.path);
1910
1968
  const expected = comparandResult.value;
1911
1969
  const pointer = (0, import_path.toJsonPointer)(validation.path);
1912
- const passed = valuesMatch(actual, expected);
1970
+ const passed = valuesMatch(actual, expected, comparisonKeyFromPath(validation.path));
1913
1971
  if (passed) {
1914
1972
  return {
1915
1973
  check: "field_equals_context",
@@ -1977,7 +2035,8 @@ function validateFieldInContextArray(validation, ctx) {
1977
2035
  actual: allowed
1978
2036
  };
1979
2037
  }
1980
- if (allowed.some((candidate) => valuesMatch(actual, candidate))) {
2038
+ const comparisonKey = comparisonKeyFromPath(validation.path);
2039
+ if (allowed.some((candidate) => valuesMatch(actual, candidate, comparisonKey))) {
1981
2040
  return {
1982
2041
  check: "field_in_context_array",
1983
2042
  passed: true,
@@ -2045,7 +2104,8 @@ function validateAllFieldsInContextArray(validation, ctx) {
2045
2104
  actual: allowed
2046
2105
  };
2047
2106
  }
2048
- const passed = actual.every((value) => allowed.some((candidate) => deepEqualJsonValue(value, candidate)));
2107
+ const comparisonKey = comparisonKeyFromPath(validation.path);
2108
+ const passed = actual.every((value) => allowed.some((candidate) => deepEqualJsonValue(value, candidate, comparisonKey)));
2049
2109
  if (passed) {
2050
2110
  return {
2051
2111
  check,
@@ -2457,7 +2517,8 @@ function validateCrossResponseFieldEqual(validation, ctx) {
2457
2517
  }
2458
2518
  const values = cr.resolved.map((tr) => (0, import_path.resolvePath)(tr.data, path));
2459
2519
  const first = values[0];
2460
- const allEqual = values.every((v) => deepEqual(v, first));
2520
+ const comparisonKey = comparisonKeyFromPath(path);
2521
+ const allEqual = values.every((v) => valuesMatch(v, first, comparisonKey));
2461
2522
  if (allEqual) {
2462
2523
  return {
2463
2524
  check: validation.check,
@@ -2587,13 +2648,27 @@ function validateCrossResponseCountDistinct(validation, ctx) {
2587
2648
  schema_url: null
2588
2649
  };
2589
2650
  }
2590
- const distinct = /* @__PURE__ */ new Set();
2651
+ const comparisonKey = comparisonKeyFromPath(path);
2652
+ const exactValues = /* @__PURE__ */ new Set();
2591
2653
  for (const tr of cr.resolved) {
2592
2654
  const v = (0, import_path.resolvePath)(tr.data, path);
2593
- if (v === void 0 || v === null) continue;
2594
- distinct.add(JSON.stringify(v));
2655
+ if (v === void 0 || v === null && !isAgentUrlComparisonKey(comparisonKey)) continue;
2656
+ const normalized = normalizeAgentUrlsForDistinctCount(v, comparisonKey);
2657
+ if (!normalized.valid) {
2658
+ return {
2659
+ check: validation.check,
2660
+ passed: false,
2661
+ description: validation.description,
2662
+ json_pointer: (0, import_path.toJsonPointer)(path),
2663
+ expected: "valid URI strings in all agent URL identity fields",
2664
+ actual: v,
2665
+ schema_id: null,
2666
+ schema_url: null
2667
+ };
2668
+ }
2669
+ exactValues.add(JSON.stringify(normalized.value));
2595
2670
  }
2596
- const distinctCount = distinct.size;
2671
+ const distinctCount = exactValues.size;
2597
2672
  const allowed = validation.allowed_values;
2598
2673
  if (allowed.includes(distinctCount)) {
2599
2674
  return {