 FAIL  tests/unit/params-ssot.test.ts > generated AI artifacts > ai/schemas/'cosmograph-config.schema.json' matches the TypeScript sources (pnpm run ai:schemas)
 FAIL  tests/unit/params-ssot.test.ts > generated AI artifacts > ai/schemas/'cosmograph-data-prep-config.schema.js…' matches the TypeScript sources (pnpm run ai:schemas)
AssertionError: expected { …(6) } to deeply equal { …(6) }

[32m- Expected[39m
[31m+ Received[39m

[33m@@ -1978,10 +1978,29 @@[39m
[2m            "$ref": "#/definitions/NumericDomain",[22m
[2m            "description": "Fixed numeric domain used for point color scales.[22m

[2m  Applies to numeric  {@link  pointColorBy }  values when  {@link  pointColorStrategy }  is `'continuous'` or numeric `'categorical'`. Values outside the domain are clamped to the first or last palette color. Invalid domains fall back to data-derived extents.",[22m
[2m          },[22m
[31m+         "pointColorHopDirection": {[39m
[31m+           "$ref": "#/definitions/TraversalDirectionType",[39m
[31m+           "description": "Which link directions the `'hopDistance'` gradient follows. Defaults to `'both'`, i.e. distance ignoring link direction.[39m
[31m+[39m
[31m+ Use `'outgoing'` to shade a seed's descendants and `'incoming'` to shade its ancestors — on a directed graph those are different neighborhoods.[39m
[31m+[39m
[31m+ **Has effect only when  {@link  pointColorStrategy }  is `'hopDistance'`.**",[39m
[31m+         },[39m
[31m+         "pointColorHopSeeds": {[39m
[31m+           "description": "Point indices to measure hop distance from, when  {@link  pointColorStrategy }  is `'hopDistance'`.[39m
[31m+[39m
[31m+ Every point is colored by how many links separate it from the *nearest* seed; points no seed can reach take  {@link  unknownColor  } . Typically the current selection, so that expanding a selection shows its shape rather than a flat blob.[39m
[31m+[39m
[31m+ **Has effect only when  {@link  pointColorStrategy }  is `'hopDistance'`.** The strategy is never resolved automatically, because nothing else in the config implies a seed.",[39m
[31m+           "items": {[39m
[31m+             "type": "number",[39m
[31m+           },[39m
[31m+           "type": "array",[39m
[31m+         },[39m
[2m          "pointColorPalette": {[22m
[2m            "description": "An optional array of color strings that can be used to color the points in the visualization. If provided, the points will be colored using the colors in this palette, cycling through the array as needed.[22m

[2m  **Used when  {@link  pointColorStrategy }  is set to `'categorical'`, `'continuous'`, or `'degree'`.**`",[22m
[2m            "items": {[22m
[33m@@ -3365,10 +3384,11 @@[39m
[2m          "continuous",[22m
[2m          "map",[22m
[2m          "degree",[22m
[2m          "preciseDegree",[22m
[2m          "linkDirection",[22m
[31m+         "hopDistance",[39m
[2m          "direct",[22m
[2m          "single",[22m
[2m        ],[22m
[2m        "type": "string",[22m
[2m      },[22m
[33m@@ -3643,10 +3663,19 @@[39m
[2m          "exp-out",[22m
[2m          "exp-in-out",[22m
[2m          "circle-in",[22m
[2m          "circle-out",[22m
[2m          "circle-in-out",[22m
[31m+       ],[39m
[31m+       "type": "string",[39m
[31m+     },[39m
[31m+     "TraversalDirectionType": {[39m
[31m+       "description": "{@link  TraversalDirection }  as a string union, for config surfaces that persist strings.",[39m
[31m+       "enum": [[39m
[31m+         "outgoing",[39m
[31m+         "incoming",[39m
[31m+         "both",[39m
[2m        ],[22m
[2m        "type": "string",[22m
[2m      },[22m
[2m      "Type.Struct": {[22m
[2m        "const": 13,[22m

 ❯ tests/unit/params-ssot.test.ts:64:44
     62|     'ai/schemas/$outFile matches the TypeScript sources (pnpm run ai:s…
     63|     async (target) => {
     64|       expect(await generateSchema(target)).toEqual(readJson(`ai/schema…
       |                                            ^
     65|     },
     66|     30_000

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/2]⎯


 Test Files  1 failed | 25 passed (26)
      Tests  2 failed | 344 passed (346)
