@tscircuit/schematic-trace-solver 0.0.134 → 0.0.135

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/dist/index.d.ts CHANGED
@@ -556,6 +556,7 @@ declare class OverlapAvoidanceStepSolver extends BaseSolver {
556
556
  private detourCounts;
557
557
  activeSubSolver: SingleOverlapSolver | null;
558
558
  private overlapQueue;
559
+ private activeOverlap;
559
560
  private recentlyFailed;
560
561
  private currentlyProcessingOverlap;
561
562
  private decomposedChildLabels;
package/dist/index.js CHANGED
@@ -4193,6 +4193,7 @@ var OverlapAvoidanceStepSolver = class extends BaseSolver {
4193
4193
  detourCounts = /* @__PURE__ */ new Map();
4194
4194
  activeSubSolver = null;
4195
4195
  overlapQueue = [];
4196
+ activeOverlap = null;
4196
4197
  recentlyFailed = /* @__PURE__ */ new Set();
4197
4198
  currentlyProcessingOverlap = null;
4198
4199
  decomposedChildLabels = null;
@@ -4234,11 +4235,13 @@ var OverlapAvoidanceStepSolver = class extends BaseSolver {
4234
4235
  }
4235
4236
  }
4236
4237
  this.activeSubSolver = null;
4238
+ this.activeOverlap = null;
4237
4239
  this.recentlyFailed.clear();
4238
4240
  } else if (this.activeSubSolver.failed) {
4239
- const overlapId = `${this.activeSubSolver.initialTrace.mspPairId}-${this.activeSubSolver.label.globalConnNetId}`;
4241
+ const overlapId = `${this.activeOverlap.trace.mspPairId}-${this.activeOverlap.label.globalConnNetId}`;
4240
4242
  this.recentlyFailed.add(overlapId);
4241
4243
  this.activeSubSolver = null;
4244
+ this.activeOverlap = null;
4242
4245
  } else {
4243
4246
  }
4244
4247
  return;
@@ -4291,6 +4294,7 @@ var OverlapAvoidanceStepSolver = class extends BaseSolver {
4291
4294
  actualOverlapLabel.globalConnNetId,
4292
4295
  detourCount2 + 1
4293
4296
  );
4297
+ this.activeOverlap = nextOverlap;
4294
4298
  this.activeSubSolver = new SingleOverlapSolver({
4295
4299
  trace: traceToFix,
4296
4300
  label: actualOverlapLabel,
@@ -4328,6 +4332,7 @@ var OverlapAvoidanceStepSolver = class extends BaseSolver {
4328
4332
  actualOverlapLabel.globalConnNetId,
4329
4333
  detourCount2 + 1
4330
4334
  );
4335
+ this.activeOverlap = nextOverlap;
4331
4336
  this.activeSubSolver = new SingleOverlapSolver({
4332
4337
  trace: traceToFix,
4333
4338
  label: actualOverlapLabel,
@@ -4345,6 +4350,7 @@ var OverlapAvoidanceStepSolver = class extends BaseSolver {
4345
4350
  }
4346
4351
  const detourCount = this.detourCounts.get(labelToAvoid.globalConnNetId) ?? 0;
4347
4352
  this.detourCounts.set(labelToAvoid.globalConnNetId, detourCount + 1);
4353
+ this.activeOverlap = nextOverlap;
4348
4354
  this.activeSubSolver = new SingleOverlapSolver({
4349
4355
  trace: traceToFix,
4350
4356
  label: labelToAvoid,
@@ -43,6 +43,7 @@ export class OverlapAvoidanceStepSolver extends BaseSolver {
43
43
 
44
44
  public override activeSubSolver: SingleOverlapSolver | null = null
45
45
  private overlapQueue: Overlap[] = []
46
+ private activeOverlap: Overlap | null = null
46
47
  private recentlyFailed: Set<string> = new Set()
47
48
 
48
49
  private currentlyProcessingOverlap: Overlap | null = null
@@ -88,11 +89,13 @@ export class OverlapAvoidanceStepSolver extends BaseSolver {
88
89
  }
89
90
  }
90
91
  this.activeSubSolver = null
92
+ this.activeOverlap = null
91
93
  this.recentlyFailed.clear()
92
94
  } else if (this.activeSubSolver.failed) {
93
- const overlapId = `${this.activeSubSolver.initialTrace.mspPairId}-${this.activeSubSolver.label.globalConnNetId}`
95
+ const overlapId = `${this.activeOverlap!.trace.mspPairId}-${this.activeOverlap!.label.globalConnNetId}`
94
96
  this.recentlyFailed.add(overlapId)
95
97
  this.activeSubSolver = null
98
+ this.activeOverlap = null
96
99
  } else {
97
100
  }
98
101
  return
@@ -160,6 +163,7 @@ export class OverlapAvoidanceStepSolver extends BaseSolver {
160
163
  detourCount + 1,
161
164
  )
162
165
 
166
+ this.activeOverlap = nextOverlap
163
167
  this.activeSubSolver = new SingleOverlapSolver({
164
168
  trace: traceToFix,
165
169
  label: actualOverlapLabel,
@@ -204,6 +208,7 @@ export class OverlapAvoidanceStepSolver extends BaseSolver {
204
208
  actualOverlapLabel.globalConnNetId,
205
209
  detourCount + 1,
206
210
  )
211
+ this.activeOverlap = nextOverlap
207
212
  this.activeSubSolver = new SingleOverlapSolver({
208
213
  trace: traceToFix,
209
214
  label: actualOverlapLabel,
@@ -225,6 +230,7 @@ export class OverlapAvoidanceStepSolver extends BaseSolver {
225
230
  const detourCount =
226
231
  this.detourCounts.get(labelToAvoid.globalConnNetId) ?? 0
227
232
  this.detourCounts.set(labelToAvoid.globalConnNetId, detourCount + 1)
233
+ this.activeOverlap = nextOverlap
228
234
  this.activeSubSolver = new SingleOverlapSolver({
229
235
  trace: traceToFix,
230
236
  label: labelToAvoid,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tscircuit/schematic-trace-solver",
3
3
  "main": "dist/index.js",
4
- "version": "0.0.134",
4
+ "version": "0.0.135",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "start": "cosmos",
@@ -0,0 +1,4 @@
1
+ import { PipelineDebugger } from "site/components/PipelineDebugger"
2
+ import inputProblem from "../../tests/bug-reports/bug-report-20260815T073240Z/bug-report-20260815T073240Z.json"
3
+
4
+ export default () => <PipelineDebugger inputProblem={inputProblem as any} />
@@ -0,0 +1,79 @@
1
+ <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-2.6508333333333325,2.473333333333333 -4.532499999999999,1.8875000000000002" data-type="line" data-label="" points="151.35991186393994,208.0385595262687 64.29250154926669,235.1459064931488" fill="none" stroke="hsl(32, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-4.532499999999999,1.8875000000000002 -1.5208333333333326,2.473333333333333" data-type="line" data-label="" points="64.29250154926669,235.1459064931488 203.64662948426633,208.0385595262687" fill="none" stroke="hsl(170, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-4.532499999999999,1.8875000000000002 -2.6508333333333325,2.473333333333333" data-type="line" data-label="" points="64.29250154926669,235.1459064931488 151.35991186393994,208.0385595262687" fill="none" stroke="hsl(170, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.5208333333333326,2.473333333333333 -2.6508333333333325,2.473333333333333" data-type="line" data-label="" points="203.64662948426633,208.0385595262687 151.35991186393994,208.0385595262687" fill="none" stroke="hsl(170, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-4.532499999999999,0.8475000000000001 -1.2850000000000001,0.2" data-type="line" data-label="" points="64.29250154926669,283.2681952764581 214.55897541830194,313.2289471872203" fill="none" stroke="hsl(264, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-4.532499999999999,0.8475000000000001 -1.2850000000000001,-0.2" data-type="line" data-label="" points="64.29250154926669,283.2681952764581 214.55897541830194,331.7375197961854" fill="none" stroke="hsl(264, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-4.532499999999999,0.8475000000000001 -2.469999999999999,1.7475" data-type="line" data-label="" points="64.29250154926669,283.2681952764581 159.72732906424295,241.6239069062866" fill="none" stroke="hsl(264, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2850000000000001,0.2 -1.2850000000000001,-0.2" data-type="line" data-label="" points="214.55897541830194,313.2289471872203 214.55897541830194,331.7375197961854" fill="none" stroke="hsl(264, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2850000000000001,0.2 -2.469999999999999,1.7475" data-type="line" data-label="" points="214.55897541830194,313.2289471872203 159.72732906424295,241.6239069062866" fill="none" stroke="hsl(264, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2850000000000001,-0.2 -2.469999999999999,1.7475" data-type="line" data-label="" points="214.55897541830194,331.7375197961854 159.72732906424295,241.6239069062866" fill="none" stroke="hsl(264, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2850000000000001,0 -2.469999999999999,0.9875000000000003" data-type="line" data-label="" points="214.55897541830194,322.48323349170283 159.72732906424295,276.79019486332027" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2850000000000001,0 2.6075,-0.78" data-type="line" data-label="" points="214.55897541830194,322.48323349170283 394.6705226192935,358.57495007918476" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2850000000000001,0 6.245,-2.4050000000000002" data-type="line" data-label="" points="214.55897541830194,322.48323349170283 562.9828547820698,433.76602630310543" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2850000000000001,0 3.9924999999999997,-0.78" data-type="line" data-label="" points="214.55897541830194,322.48323349170283 458.75645527783513,358.57495007918476" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-2.469999999999999,0.9875000000000003 2.6075,-0.78" data-type="line" data-label="" points="159.72732906424295,276.79019486332027 394.6705226192935,358.57495007918476" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-2.469999999999999,0.9875000000000003 6.245,-2.4050000000000002" data-type="line" data-label="" points="159.72732906424295,276.79019486332027 562.9828547820698,433.76602630310543" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-2.469999999999999,0.9875000000000003 3.9924999999999997,-0.78" data-type="line" data-label="" points="159.72732906424295,276.79019486332027 458.75645527783513,358.57495007918476" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.6075,-0.78 6.245,-2.4050000000000002" data-type="line" data-label="" points="394.6705226192935,358.57495007918476 562.9828547820698,433.76602630310543" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.6075,-0.78 3.9924999999999997,-0.78" data-type="line" data-label="" points="394.6705226192935,358.57495007918476 458.75645527783513,358.57495007918476" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="6.245,-2.4050000000000002 3.9924999999999997,-0.78" data-type="line" data-label="" points="562.9828547820698,433.76602630310543 458.75645527783513,358.57495007918476" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.2850000000000001,0.1 2.6075,-0.019999999999999907" data-type="line" data-label="" points="333.4765544309027,317.85609033946156 394.6705226192935,323.4086621221511" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.2850000000000001,0.1 6.245,-0.07500000000000018" data-type="line" data-label="" points="333.4765544309027,317.85609033946156 562.9828547820698,325.9535908558838" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.2850000000000001,0.1 3.9924999999999997,-0.019999999999999907" data-type="line" data-label="" points="333.4765544309027,317.85609033946156 458.75645527783513,323.4086621221511" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.6075,-0.019999999999999907 6.245,-0.07500000000000018" data-type="line" data-label="" points="394.6705226192935,323.4086621221511 562.9828547820698,325.9535908558838" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="2.6075,-0.019999999999999907 3.9924999999999997,-0.019999999999999907" data-type="line" data-label="" points="394.6705226192935,323.4086621221511 458.75645527783513,323.4086621221511" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="6.245,-0.07500000000000018 3.9924999999999997,-0.019999999999999907" data-type="line" data-label="" points="562.9828547820698,325.9535908558838 458.75645527783513,323.4086621221511" fill="none" stroke="hsl(154, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="6.245,-1.205 6.245,-1.8050000000000006" data-type="line" data-label="" points="562.9828547820698,378.2403084762102 562.9828547820698,406.00316738965785" fill="none" stroke="hsl(187, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.2850000000000001,-0.2 -1.485,-0.2 -1.485,0.2 -1.2850000000000001,0.2" data-type="line" data-label="" points="214.55897541830194,331.7375197961854 205.30468911381942,331.7375197961854 205.30468911381942,313.2289471872203 214.55897541830194,313.2289471872203" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.2850000000000001,0 -2.469999999999999,0 -2.469999999999999,0.9875000000000003" data-type="line" data-label="" points="214.55897541830194,322.48323349170283 159.72732906424295,322.48323349170283 159.72732906424295,276.79019486332027" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.9924999999999997,-0.78 3.9924999999999997,-0.9800000000000002 2.6075,-0.9800000000000002 2.6075,-0.78" data-type="line" data-label="" points="458.75645527783513,358.57495007918476 458.75645527783513,367.8292363836673 394.6705226192935,367.8292363836673 394.6705226192935,358.57495007918476" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.9924999999999997,-0.019999999999999907 3.9924999999999997,0.18000000000000027 2.6075,0.18000000000000027 2.6075,-0.019999999999999907" data-type="line" data-label="" points="458.75645527783513,323.4086621221511 458.75645527783513,314.15437581766855 394.6705226192935,314.15437581766855 394.6705226192935,323.4086621221511" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.2850000000000001,0.1 2.6075,0.1 2.6075,-0.019999999999999907" data-type="line" data-label="" points="333.4765544309027,317.85609033946156 394.6705226192935,317.85609033946156 394.6705226192935,323.4086621221511" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="6.245,-0.07500000000000007 6.245,0.18000000000000027 3.9924999999999997,0.18000000000000027 3.9924999999999997,-0.019999999999999907" data-type="line" data-label="" points="562.9828547820698,325.9535908558838 562.9828547820698,314.15437581766855 458.75645527783513,314.15437581766855 458.75645527783513,323.4086621221511" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="6.245,-1.205 6.245,-1.8050000000000006" data-type="line" data-label="" points="562.9828547820698,378.2403084762102 562.9828547820698,406.00316738965785" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-4.532499999999999,1.8875000000000002 -4.532499999999999,2.473333333333333 -2.8508333333333327,2.473333333333333" data-type="line" data-label="" points="64.29250154926669,235.1459064931488 64.29250154926669,208.0385595262687 142.1056255594574,208.0385595262687" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-4.532499999999999,0.8475000000000001 -4.532499999999999,-0.20000000000000018 -1.2850000000000001,-0.20000000000000018" data-type="line" data-label="" points="64.29250154926669,283.2681952764581 64.29250154926669,331.7375197961854 214.55897541830194,331.7375197961854" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-2.6508333333333325,2.473333333333333 -2.8508333333333327,2.473333333333333 -2.8508333333333327,1.8933333333333333 -1.3208333333333324,1.8933333333333333 -1.3208333333333324,2.473333333333333 -1.5208333333333326,2.473333333333333" data-type="line" data-label="" points="151.35991186393994,208.0385595262687 142.1056255594574,208.0385595262687 142.1056255594574,234.87598980926808 212.90091578874888,234.87598980926808 212.90091578874888,208.0385595262687 203.64662948426633,208.0385595262687" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-2.469999999999999,1.7475 -2.469999999999999,1.8485 -2.9209999999999985,1.8485" data-type="line" data-label="" points="159.72732906424295,241.6239069062866 159.72732906424295,236.9504923225229 138.85891344763482,236.9504923225229" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.8774999999999995,0 -4.817499999999998,0 -4.817499999999998,-0.051000000000000004" data-type="line" data-label="" points="187.14315224127245,322.48323349170283 51.10514356537911,322.48323349170283 51.10514356537911,324.8430764993459" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="-4.432499999999998" data-y="1.3675000000000002" x="51.79921503821528" y="235.1459064931488" width="34.24085932658542" height="48.12228878330927" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="-2.0858333333333325" data-y="2.513333333333333" x="151.35991186393994" y="186.75370102595883" width="52.286717620326385" height="38.868002478826696" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="0" data-y="0" x="214.55897541830194" y="308.601804034979" width="118.91757901260075" height="27.762858913447644" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="-2.397499999999999" data-y="1.3675000000000002" x="138.90518487915722" y="241.6239069062866" width="48.353645940921325" height="35.16628795703366" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="schematic_component_4" data-x="2.6799999999999997" data-y="-0.39999999999999997" x="373.8483784342077" y="323.4086621221511" width="48.35364594092135" height="35.16628795703366" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="schematic_component_5" data-x="6.4825" data-y="-0.6400000000000001" x="547.9446395372856" y="325.9535908558838" width="52.05536046271436" height="52.286717620326385" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="schematic_component_6" data-x="6.4025" data-y="-2.1050000000000004" x="547.9446395372856" y="406.00316738965785" width="44.65193141912823" height="27.762858913447587" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="schematic_component_7" data-x="4.005" data-y="-0.39999999999999997" x="437.93431109274934" y="323.4086621221511" width="42.80107415823181" height="35.16628795703366" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="AP2112K-3.3" data-x="-0.2250000000000001" data-y="-0.43" x="233.06754802726704" y="338.21552020932313" width="61.0782896095848" height="8.328857674034339" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="U2" data-x="-0.765" data-y="0.41500000000000004" x="230.2912621359223" y="297.4966604696" width="16.657715348068564" height="11.567857880603128" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="netId: VBUS
2
+ globalConnNetId: connectivity_net0" data-x="-4.532499999999999" data-y="2.683333333333333" x="50.41107209254287" y="188.60455828685537" width="27.762858913447644" height="19.434001239413334" fill="#ef444466" stroke="#ef4444" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="netId: RAW
3
+ globalConnNetId: connectivity_net1" data-x="-4.772499999999999" data-y="0.32375" x="42.08221441850857" y="302.8757143840804" width="22.210287130758132" height="9.254286304482548" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="netId: RAW
4
+ globalConnNetId: connectivity_net1" data-x="-3.1609999999999987" data-y="1.8485" x="116.64862631687667" y="232.32334917028163" width="22.210287130758132" height="9.254286304482548" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="netId: GND
5
+ globalConnNetId: connectivity_net2" data-x="-4.817499999999998" data-y="-0.261" x="40.00000000000004" y="324.8430764993459" width="22.210287130758132" height="19.434001239413305" fill="#00000066" stroke="#000000" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="netId: GND
6
+ globalConnNetId: connectivity_net2" data-x="3.9924999999999997" data-y="-1.1900000000000002" x="447.65131171245605" y="367.8292363836673" width="22.21028713075816" height="19.434001239413362" fill="#00000066" stroke="#000000" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="netId: GND
7
+ globalConnNetId: connectivity_net2" data-x="6.245" data-y="-2.616" x="551.8777112166907" y="433.8122977346278" width="22.21028713075816" height="19.434001239413362" fill="#00000066" stroke="#000000" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="netId: V3V3
8
+ globalConnNetId: connectivity_net3" data-x="3.9924999999999997" data-y="0.39000000000000024" x="444.8750258211113" y="294.72037457825513" width="27.762858913447644" height="19.434001239413362" fill="#ef444466" stroke="#ef4444" stroke-width="0.02161160714285714"/></g><g><rect data-type="rect" data-label="netId: PWR_LED_K
9
+ globalConnNetId: connectivity_net4" data-x="5.6450000000000005" data-y="-1.5050000000000003" x="507.4571369551745" y="387.49459478069275" width="55.52571782689529" height="9.254286304482548" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.02161160714285714"/></g><g><circle data-type="point" data-label="schematic_port_0
10
+ y+" data-x="-4.532499999999999" data-y="1.8875000000000002" cx="64.29250154926669" cy="235.1459064931488" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_1
11
+ y-" data-x="-4.532499999999999" data-y="0.8475000000000001" cx="64.29250154926669" cy="283.2681952764581" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_2
12
+ x+" data-x="-1.5208333333333326" data-y="2.473333333333333" cx="203.64662948426633" cy="208.0385595262687" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_3
13
+ x-" data-x="-2.6508333333333325" data-y="2.473333333333333" cx="151.35991186393994" cy="208.0385595262687" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_4
14
+ x-" data-x="-1.2850000000000001" data-y="0.2" cx="214.55897541830194" cy="313.2289471872203" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_5
15
+ x-" data-x="-1.2850000000000001" data-y="0" cx="214.55897541830194" cy="322.48323349170283" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_6
16
+ x-" data-x="-1.2850000000000001" data-y="-0.2" cx="214.55897541830194" cy="331.7375197961854" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_7
17
+ x+" data-x="1.2850000000000001" data-y="-0.1" cx="333.4765544309027" cy="327.1103766439441" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_8
18
+ x+" data-x="1.2850000000000001" data-y="0.1" cx="333.4765544309027" cy="317.85609033946156" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_9
19
+ y+" data-x="-2.469999999999999" data-y="1.7475" cx="159.72732906424295" cy="241.6239069062866" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_10
20
+ y-" data-x="-2.469999999999999" data-y="0.9875000000000003" cx="159.72732906424295" cy="276.79019486332027" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_11
21
+ y+" data-x="2.6075" data-y="-0.019999999999999907" cx="394.6705226192935" cy="323.4086621221511" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_12
22
+ y-" data-x="2.6075" data-y="-0.78" cx="394.6705226192935" cy="358.57495007918476" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_13
23
+ y+" data-x="6.245" data-y="-0.07500000000000018" cx="562.9828547820698" cy="325.9535908558838" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_14
24
+ y-" data-x="6.245" data-y="-1.205" cx="562.9828547820698" cy="378.2403084762102" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_15
25
+ y+" data-x="6.245" data-y="-1.8050000000000006" cx="562.9828547820698" cy="406.00316738965785" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_16
26
+ y-" data-x="6.245" data-y="-2.4050000000000002" cx="562.9828547820698" cy="433.76602630310543" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_17
27
+ y+" data-x="3.9924999999999997" data-y="-0.019999999999999907" cx="458.75645527783513" cy="323.4086621221511" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_18
28
+ y-" data-x="3.9924999999999997" data-y="-0.78" cx="458.75645527783513" cy="358.57495007918476" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
29
+ orientation: y+" data-x="-4.532499999999999" data-y="2.473333333333333" cx="64.29250154926669" cy="208.0385595262687" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
30
+ orientation: x-" data-x="-4.532499999999999" data-y="0.32375" cx="64.29250154926669" cy="307.5028575363217" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
31
+ orientation: x-" data-x="-2.9209999999999985" data-y="1.8485" cx="138.85891344763482" cy="236.9504923225229" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
32
+ orientation: y-" data-x="-4.817499999999998" data-y="-0.051000000000000004" cx="51.10514356537911" cy="324.8430764993459" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
33
+ orientation: y-" data-x="3.9924999999999997" data-y="-0.9800000000000002" cx="458.75645527783513" cy="367.8292363836673" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
34
+ orientation: y-" data-x="6.245" data-y="-2.4050000000000002" cx="562.9828547820698" cy="433.76602630310543" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
35
+ orientation: y+" data-x="3.9924999999999997" data-y="0.18000000000000027" cx="458.75645527783513" cy="314.15437581766855" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
36
+ orientation: x-" data-x="6.245" data-y="-1.5050000000000003" cx="562.9828547820698" cy="392.121737932934" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
37
+ document.currentScript.parentElement.addEventListener('mousemove', (e) => {
38
+ const svg = e.currentTarget;
39
+ const rect = svg.getBoundingClientRect();
40
+ const x = e.clientX - rect.left;
41
+ const y = e.clientY - rect.top;
42
+ const crosshair = svg.getElementById('crosshair');
43
+ const h = svg.getElementById('crosshair-h');
44
+ const v = svg.getElementById('crosshair-v');
45
+ const coords = svg.getElementById('coordinates');
46
+
47
+ crosshair.style.display = 'block';
48
+ h.setAttribute('x1', '0');
49
+ h.setAttribute('x2', '640');
50
+ h.setAttribute('y1', y);
51
+ h.setAttribute('y2', y);
52
+ v.setAttribute('x1', x);
53
+ v.setAttribute('x2', x);
54
+ v.setAttribute('y1', '0');
55
+ v.setAttribute('y2', '640');
56
+
57
+ // Calculate real coordinates using inverse transformation
58
+ const matrix = {"a":46.271431522412726,"c":0,"e":274.0177649246023,"b":0,"d":-46.271431522412726,"f":322.48323349170283};
59
+ // Manually invert and apply the affine transform
60
+ // Since we only use translate and scale, we can directly compute:
61
+ // x' = (x - tx) / sx
62
+ // y' = (y - ty) / sy
63
+ const sx = matrix.a;
64
+ const sy = matrix.d;
65
+ const tx = matrix.e;
66
+ const ty = matrix.f;
67
+ const realPoint = {
68
+ x: (x - tx) / sx,
69
+ y: (y - ty) / sy // Flip y back since we used negative scale
70
+ }
71
+
72
+ coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
73
+ coords.setAttribute('x', (x + 5).toString());
74
+ coords.setAttribute('y', (y - 5).toString());
75
+ });
76
+ document.currentScript.parentElement.addEventListener('mouseleave', () => {
77
+ document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
78
+ });
79
+ ]]></script></svg>
@@ -0,0 +1,314 @@
1
+ {
2
+ "chips": [
3
+ {
4
+ "chipId": "schematic_component_0",
5
+ "center": {
6
+ "x": -4.432499999999998,
7
+ "y": 1.3675000000000002
8
+ },
9
+ "width": 0.7400000000000002,
10
+ "height": 1.04,
11
+ "pins": [
12
+ {
13
+ "pinId": "schematic_port_0",
14
+ "x": -4.532499999999999,
15
+ "y": 1.8875000000000002,
16
+ "_facingDirection": "y+"
17
+ },
18
+ {
19
+ "pinId": "schematic_port_1",
20
+ "x": -4.532499999999999,
21
+ "y": 0.8475000000000001,
22
+ "_facingDirection": "y-"
23
+ }
24
+ ],
25
+ "sectionId": "pwr"
26
+ },
27
+ {
28
+ "chipId": "schematic_component_1",
29
+ "center": {
30
+ "x": -2.0858333333333325,
31
+ "y": 2.513333333333333
32
+ },
33
+ "width": 1.13,
34
+ "height": 0.8399999999999999,
35
+ "pins": [
36
+ {
37
+ "pinId": "schematic_port_2",
38
+ "x": -1.5208333333333326,
39
+ "y": 2.473333333333333,
40
+ "_facingDirection": "x+"
41
+ },
42
+ {
43
+ "pinId": "schematic_port_3",
44
+ "x": -2.6508333333333325,
45
+ "y": 2.473333333333333,
46
+ "_facingDirection": "x-"
47
+ }
48
+ ],
49
+ "sectionId": "pwr"
50
+ },
51
+ {
52
+ "chipId": "schematic_component_2",
53
+ "center": {
54
+ "x": 0,
55
+ "y": 0
56
+ },
57
+ "width": 2.5700000000000003,
58
+ "height": 0.6,
59
+ "pins": [
60
+ {
61
+ "pinId": "schematic_port_4",
62
+ "x": -1.2850000000000001,
63
+ "y": 0.2
64
+ },
65
+ {
66
+ "pinId": "schematic_port_5",
67
+ "x": -1.2850000000000001,
68
+ "y": 0
69
+ },
70
+ {
71
+ "pinId": "schematic_port_6",
72
+ "x": -1.2850000000000001,
73
+ "y": -0.2
74
+ },
75
+ {
76
+ "pinId": "schematic_port_7",
77
+ "x": 1.2850000000000001,
78
+ "y": -0.1
79
+ },
80
+ {
81
+ "pinId": "schematic_port_8",
82
+ "x": 1.2850000000000001,
83
+ "y": 0.1
84
+ }
85
+ ],
86
+ "sectionId": "pwr"
87
+ },
88
+ {
89
+ "chipId": "schematic_component_3",
90
+ "center": {
91
+ "x": -2.397499999999999,
92
+ "y": 1.3675000000000002
93
+ },
94
+ "width": 1.0450000000000004,
95
+ "height": 0.7599999999999998,
96
+ "pins": [
97
+ {
98
+ "pinId": "schematic_port_9",
99
+ "x": -2.469999999999999,
100
+ "y": 1.7475,
101
+ "_facingDirection": "y+"
102
+ },
103
+ {
104
+ "pinId": "schematic_port_10",
105
+ "x": -2.469999999999999,
106
+ "y": 0.9875000000000003,
107
+ "_facingDirection": "y-"
108
+ }
109
+ ],
110
+ "sectionId": "pwr"
111
+ },
112
+ {
113
+ "chipId": "schematic_component_4",
114
+ "center": {
115
+ "x": 2.6799999999999997,
116
+ "y": -0.39999999999999997
117
+ },
118
+ "width": 1.0450000000000004,
119
+ "height": 0.7600000000000001,
120
+ "pins": [
121
+ {
122
+ "pinId": "schematic_port_11",
123
+ "x": 2.6075,
124
+ "y": -0.019999999999999907,
125
+ "_facingDirection": "y+"
126
+ },
127
+ {
128
+ "pinId": "schematic_port_12",
129
+ "x": 2.6075,
130
+ "y": -0.78,
131
+ "_facingDirection": "y-"
132
+ }
133
+ ],
134
+ "sectionId": "pwr"
135
+ },
136
+ {
137
+ "chipId": "schematic_component_5",
138
+ "center": {
139
+ "x": 6.4825,
140
+ "y": -0.6400000000000001
141
+ },
142
+ "width": 1.125,
143
+ "height": 1.13,
144
+ "pins": [
145
+ {
146
+ "pinId": "schematic_port_13",
147
+ "x": 6.245,
148
+ "y": -0.07500000000000018,
149
+ "_facingDirection": "y+"
150
+ },
151
+ {
152
+ "pinId": "schematic_port_14",
153
+ "x": 6.245,
154
+ "y": -1.205,
155
+ "_facingDirection": "y-"
156
+ }
157
+ ],
158
+ "sectionId": "pwr"
159
+ },
160
+ {
161
+ "chipId": "schematic_component_6",
162
+ "center": {
163
+ "x": 6.4025,
164
+ "y": -2.1050000000000004
165
+ },
166
+ "width": 0.9649999999999999,
167
+ "height": 0.5999999999999999,
168
+ "pins": [
169
+ {
170
+ "pinId": "schematic_port_15",
171
+ "x": 6.245,
172
+ "y": -1.8050000000000006,
173
+ "_facingDirection": "y+"
174
+ },
175
+ {
176
+ "pinId": "schematic_port_16",
177
+ "x": 6.245,
178
+ "y": -2.4050000000000002,
179
+ "_facingDirection": "y-"
180
+ }
181
+ ],
182
+ "sectionId": "pwr"
183
+ },
184
+ {
185
+ "chipId": "schematic_component_7",
186
+ "center": {
187
+ "x": 4.005,
188
+ "y": -0.39999999999999997
189
+ },
190
+ "width": 0.9250000000000007,
191
+ "height": 0.7600000000000001,
192
+ "pins": [
193
+ {
194
+ "pinId": "schematic_port_17",
195
+ "x": 3.9924999999999997,
196
+ "y": -0.019999999999999907,
197
+ "_facingDirection": "y+"
198
+ },
199
+ {
200
+ "pinId": "schematic_port_18",
201
+ "x": 3.9924999999999997,
202
+ "y": -0.78,
203
+ "_facingDirection": "y-"
204
+ }
205
+ ],
206
+ "sectionId": "pwr"
207
+ }
208
+ ],
209
+ "directConnections": [
210
+ {
211
+ "netId": ".F1 > .pin2 to .DPROT > .anode",
212
+ "pinIds": [
213
+ "schematic_port_3",
214
+ "schematic_port_0"
215
+ ]
216
+ }
217
+ ],
218
+ "netConnections": [
219
+ {
220
+ "netId": "VBUS",
221
+ "netLabelWidth": 0.42,
222
+ "netLabelHeight": 0.6,
223
+ "pinIds": [
224
+ "schematic_port_0",
225
+ "schematic_port_2",
226
+ "schematic_port_3"
227
+ ]
228
+ },
229
+ {
230
+ "netId": "RAW",
231
+ "netLabelWidth": 0.48,
232
+ "pinIds": [
233
+ "schematic_port_1",
234
+ "schematic_port_4",
235
+ "schematic_port_6",
236
+ "schematic_port_9"
237
+ ]
238
+ },
239
+ {
240
+ "netId": "GND",
241
+ "netLabelWidth": 0.42,
242
+ "netLabelHeight": 0.48,
243
+ "pinIds": [
244
+ "schematic_port_5",
245
+ "schematic_port_10",
246
+ "schematic_port_12",
247
+ "schematic_port_16",
248
+ "schematic_port_18"
249
+ ]
250
+ },
251
+ {
252
+ "netId": "V3V3",
253
+ "netLabelWidth": 0.42,
254
+ "netLabelHeight": 0.6,
255
+ "pinIds": [
256
+ "schematic_port_8",
257
+ "schematic_port_11",
258
+ "schematic_port_13",
259
+ "schematic_port_17"
260
+ ]
261
+ },
262
+ {
263
+ "netId": "PWR_LED_K",
264
+ "netLabelWidth": 1.2,
265
+ "pinIds": [
266
+ "schematic_port_14",
267
+ "schematic_port_15"
268
+ ]
269
+ }
270
+ ],
271
+ "textBoxes": [
272
+ {
273
+ "chipId": "schematic_component_2",
274
+ "center": {
275
+ "x": -0.2250000000000001,
276
+ "y": -0.43
277
+ },
278
+ "width": 1.3199999999999998,
279
+ "height": 0.18000000000000005,
280
+ "text": "AP2112K-3.3"
281
+ },
282
+ {
283
+ "chipId": "schematic_component_2",
284
+ "center": {
285
+ "x": -0.765,
286
+ "y": 0.41500000000000004
287
+ },
288
+ "width": 0.3600000000000001,
289
+ "height": 0.25000000000000006,
290
+ "text": "U2"
291
+ }
292
+ ],
293
+ "availableNetLabelOrientations": {
294
+ "VBUS": [
295
+ "y+"
296
+ ],
297
+ "RAW": [
298
+ "x-",
299
+ "x+"
300
+ ],
301
+ "V3V3": [
302
+ "y+"
303
+ ],
304
+ "GND": [
305
+ "y-"
306
+ ],
307
+ "PWR_LED_K": [
308
+ "x-",
309
+ "x+"
310
+ ]
311
+ },
312
+ "maxMspPairDistance": 2.4,
313
+ "_hideRatsNet": false
314
+ }
@@ -0,0 +1,12 @@
1
+ import { expect, test } from "bun:test"
2
+ import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
3
+ import inputProblem from "./bug-report-20260815T073240Z.json"
4
+ import "tests/fixtures/matcher"
5
+
6
+ test("bug-report-20260815T073240Z", () => {
7
+ const solver = new SchematicTracePipelineSolver(inputProblem as any)
8
+
9
+ solver.solve()
10
+
11
+ expect(solver).toMatchSolverSnapshot(import.meta.path)
12
+ })