diff --git a/algos/infinite-grid-ijump-astar/tests/__snapshots__/get-debug-svg.snap.svg b/algos/infinite-grid-ijump-astar/tests/__snapshots__/get-debug-svg.snap.svg
index ee37248..6991b73 100644
--- a/algos/infinite-grid-ijump-astar/tests/__snapshots__/get-debug-svg.snap.svg
+++ b/algos/infinite-grid-ijump-astar/tests/__snapshots__/get-debug-svg.snap.svg
@@ -10,4 +10,4 @@
.pcb-silkscreen-top { stroke: #f2eda1; }
.pcb-silkscreen-bottom { stroke: #f2eda1; }
.pcb-silkscreen-text { fill: #f2eda1; }
- X0t1_iter[0]X01t1_iter[1]X01t1_iter[2]X01t1_iter[3]
\ No newline at end of file
+ R1R2R1R2R1R2R1R2R1R2X0t1_iter[0]X01t1_iter[1]X01t1_iter[2]X01t1_iter[3]
\ No newline at end of file
diff --git a/algos/infinite-grid-ijump-astar/tests/__snapshots__/multimargin-bga.snap.svg b/algos/infinite-grid-ijump-astar/tests/__snapshots__/multimargin-bga.snap.svg
index 7646cfc..2070d9f 100644
--- a/algos/infinite-grid-ijump-astar/tests/__snapshots__/multimargin-bga.snap.svg
+++ b/algos/infinite-grid-ijump-astar/tests/__snapshots__/multimargin-bga.snap.svg
@@ -10,4 +10,4 @@
.pcb-silkscreen-top { stroke: #f2eda1; }
.pcb-silkscreen-bottom { stroke: #f2eda1; }
.pcb-silkscreen-text { fill: #f2eda1; }
- X01t1_iter[0]X01234t1_iter[1]X01234567t1_iter[2]X01234567t1_iter[3]X01234567t1_iter[4]X01234567t1_iter[5]X01234567t1_iter[6]X01234567t1_iter[7]X01234567t1_iter[8]X01234567t1_iter[9]X0123456t1_iter[10]X0123456t1_iter[11]X012345t1_iter[12]X012345t1_iter[13]X012345t1_iter[14]X012345678t1_iter[15]X01234567891011t1_iter[16]X012345678910t1_iter[17]X0123456789t1_iter[18]X0123456789101112t1_iter[19]X0123456789101112131415t1_iter[20]X0123456789101112131415t1_iter[21]X01234567891011121314t1_iter[22]X01234567891011121314t1_iter[23]X01234567891011121314t1_iter[24]
\ No newline at end of file
+ U1U1U1U1U1U1U1U1U1U1U1U1U1U1U1U1U1U1U1U1U1U1U1U1U1U1X01t1_iter[0]X01234t1_iter[1]X01234567t1_iter[2]X01234567t1_iter[3]X01234567t1_iter[4]X01234567t1_iter[5]X01234567t1_iter[6]X01234567t1_iter[7]X01234567t1_iter[8]X01234567t1_iter[9]X0123456t1_iter[10]X0123456t1_iter[11]X012345t1_iter[12]X012345t1_iter[13]X012345t1_iter[14]X012345678t1_iter[15]X01234567891011t1_iter[16]X012345678910t1_iter[17]X0123456789t1_iter[18]X0123456789101112t1_iter[19]X0123456789101112131415t1_iter[20]X0123456789101112131415t1_iter[21]X01234567891011121314t1_iter[22]X01234567891011121314t1_iter[23]X01234567891011121314t1_iter[24]
\ No newline at end of file
diff --git a/algos/multi-layer-ijump/tests/__snapshots__/multi-layer-keyboard2.snap.svg b/algos/multi-layer-ijump/tests/__snapshots__/multi-layer-keyboard2.snap.svg
index f287fd1..d78d33c 100644
--- a/algos/multi-layer-ijump/tests/__snapshots__/multi-layer-keyboard2.snap.svg
+++ b/algos/multi-layer-ijump/tests/__snapshots__/multi-layer-keyboard2.snap.svg
@@ -10,4 +10,4 @@
.pcb-silkscreen-top { stroke: #f2eda1; }
.pcb-silkscreen-bottom { stroke: #f2eda1; }
.pcb-silkscreen-text { fill: #f2eda1; }
-
\ No newline at end of file
+ D1D2U1
\ No newline at end of file
diff --git a/algos/multi-layer-ijump/tests/__snapshots__/multi-layer-keyboard7.snap.svg b/algos/multi-layer-ijump/tests/__snapshots__/multi-layer-keyboard7.snap.svg
index eb9b877..84fd6d3 100644
--- a/algos/multi-layer-ijump/tests/__snapshots__/multi-layer-keyboard7.snap.svg
+++ b/algos/multi-layer-ijump/tests/__snapshots__/multi-layer-keyboard7.snap.svg
@@ -10,4 +10,4 @@
.pcb-silkscreen-top { stroke: #f2eda1; }
.pcb-silkscreen-bottom { stroke: #f2eda1; }
.pcb-silkscreen-text { fill: #f2eda1; }
-
\ No newline at end of file
+ D1D2D3D4U1
\ No newline at end of file
diff --git a/algos/multi-layer-ijump/tests/__snapshots__/same-net-many-pads.snap.svg b/algos/multi-layer-ijump/tests/__snapshots__/same-net-many-pads.snap.svg
index 25d496d..f0eda34 100644
--- a/algos/multi-layer-ijump/tests/__snapshots__/same-net-many-pads.snap.svg
+++ b/algos/multi-layer-ijump/tests/__snapshots__/same-net-many-pads.snap.svg
@@ -10,4 +10,4 @@
.pcb-silkscreen-top { stroke: #f2eda1; }
.pcb-silkscreen-bottom { stroke: #f2eda1; }
.pcb-silkscreen-text { fill: #f2eda1; }
-
\ No newline at end of file
+ R0R1R2R3R4R5R6R7R8R9
\ No newline at end of file
diff --git a/algos/multi-layer-ijump/tests/repros/__snapshots__/repro2-path-loop-fails.test.tsx-no-loop-removal.snap.svg b/algos/multi-layer-ijump/tests/repros/__snapshots__/repro2-path-loop-fails.test.tsx-no-loop-removal.snap.svg
index 3f7cf5a..2af6af9 100644
--- a/algos/multi-layer-ijump/tests/repros/__snapshots__/repro2-path-loop-fails.test.tsx-no-loop-removal.snap.svg
+++ b/algos/multi-layer-ijump/tests/repros/__snapshots__/repro2-path-loop-fails.test.tsx-no-loop-removal.snap.svg
@@ -10,4 +10,4 @@
.pcb-silkscreen-top { stroke: #f2eda1; }
.pcb-silkscreen-bottom { stroke: #f2eda1; }
.pcb-silkscreen-text { fill: #f2eda1; }
-
\ No newline at end of file
+ AB
\ No newline at end of file
diff --git a/algos/multi-layer-ijump/tests/repros/__snapshots__/repro2-path-loop-fails.test.tsx-with-loop-removal.snap.svg b/algos/multi-layer-ijump/tests/repros/__snapshots__/repro2-path-loop-fails.test.tsx-with-loop-removal.snap.svg
index 3f7cf5a..2af6af9 100644
--- a/algos/multi-layer-ijump/tests/repros/__snapshots__/repro2-path-loop-fails.test.tsx-with-loop-removal.snap.svg
+++ b/algos/multi-layer-ijump/tests/repros/__snapshots__/repro2-path-loop-fails.test.tsx-with-loop-removal.snap.svg
@@ -10,4 +10,4 @@
.pcb-silkscreen-top { stroke: #f2eda1; }
.pcb-silkscreen-bottom { stroke: #f2eda1; }
.pcb-silkscreen-text { fill: #f2eda1; }
-
\ No newline at end of file
+ AB
\ No newline at end of file
diff --git a/bun.lockb b/bun.lockb
index aed8b81..98ffa4b 100755
Binary files a/bun.lockb and b/bun.lockb differ
diff --git a/package.json b/package.json
index 22b05d7..260b95e 100644
--- a/package.json
+++ b/package.json
@@ -17,9 +17,9 @@
"devDependencies": {
"@biomejs/biome": "^1.8.3",
"@timohausmann/quadtree-ts": "^2.2.2",
- "@tscircuit/core": "^0.0.217",
+ "@tscircuit/core": "^0.0.416",
"@tscircuit/pcb-viewer": "1.4.5",
- "@tscircuit/props": "^0.0.108",
+ "@tscircuit/props": "^0.0.184",
"@tscircuit/soup-util": "^0.0.41",
"@types/bun": "^1.2.0",
"@types/d3-delaunay": "^6.0.4",
@@ -54,9 +54,9 @@
"dependencies": {
"@dagrejs/graphlib": "^2.2.3",
"@tscircuit/checks": "0.0.28",
- "@tscircuit/math-utils": "^0.0.4",
+ "@tscircuit/math-utils": "^0.0.18",
"@vercel/node": "^3.0.24",
- "circuit-json": "^0.0.108",
+ "circuit-json": "^0.0.183",
"circuit-json-to-connectivity-map": "^0.0.17",
"commander": "^12.1.0",
"kleur": "^4.1.5",