@tscircuit/schematic-trace-solver 0.0.86 → 0.0.88

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.
Files changed (117) hide show
  1. package/.agents/skills/schematic-trace-visualization/SKILL.md +115 -0
  2. package/.github/scripts/import-json-bug-report.ts +15 -1
  3. package/.github/workflows/json-bug-report.yml +3 -2
  4. package/AGENTS.md +22 -0
  5. package/dist/index.js +86 -10
  6. package/lib/solvers/Example28Solver/Example28Solver.ts +46 -10
  7. package/lib/solvers/Example28Solver/countCrossingsWithOtherTraces.ts +19 -0
  8. package/lib/solvers/Example28Solver/scoreSolutionTracePath.ts +26 -0
  9. package/lib/testing/PipelineStageDebugRunner.ts +344 -0
  10. package/package.json +3 -2
  11. package/scripts/debug-pipeline-stages.ts +146 -0
  12. package/site/bug-reports/bug-report-20260706T220324Z.page.tsx +4 -0
  13. package/site/bug-reports/bug-report-20260707T020342Z.page.tsx +4 -0
  14. package/site/bug-reports/bug-report-20260707T092615Z.page.tsx +4 -0
  15. package/site/bug-reports/bug-report-20260707T134549Z.page.tsx +4 -0
  16. package/site/bug-reports/bug-report-20260707T134722Z.page.tsx +4 -0
  17. package/site/bug-reports/bug-report-20260707T140410Z.page.tsx +4 -0
  18. package/site/bug-reports/bug-report-20260707T141025Z.page.tsx +4 -0
  19. package/site/bug-reports/bug-report-20260707T141421Z.page.tsx +4 -0
  20. package/tests/bug-reports/bug-report-20260706T220324Z/__snapshots__/bug-report-20260706T220324Z.snap.svg +357 -3448
  21. package/tests/bug-reports/bug-report-20260707T020342Z/__snapshots__/bug-report-20260707T020342Z.snap.svg +64 -0
  22. package/tests/bug-reports/bug-report-20260707T020342Z/bug-report-20260707T020342Z.json +233 -0
  23. package/tests/bug-reports/bug-report-20260707T020342Z/bug-report-20260707T020342Z.test.ts +12 -0
  24. package/tests/bug-reports/bug-report-20260707T092615Z/__snapshots__/bug-report-20260707T092615Z.snap.svg +2098 -0
  25. package/tests/bug-reports/bug-report-20260707T092615Z/bug-report-20260707T092615Z.json +1392 -0
  26. package/tests/bug-reports/bug-report-20260707T092615Z/bug-report-20260707T092615Z.test.ts +12 -0
  27. package/tests/bug-reports/bug-report-20260707T134549Z/__snapshots__/bug-report-20260707T134549Z.snap.svg +857 -0
  28. package/tests/bug-reports/bug-report-20260707T134549Z/bug-report-20260707T134549Z.json +652 -0
  29. package/tests/bug-reports/bug-report-20260707T134549Z/bug-report-20260707T134549Z.test.ts +12 -0
  30. package/tests/bug-reports/bug-report-20260707T134722Z/__snapshots__/bug-report-20260707T134722Z.snap.svg +275 -0
  31. package/tests/bug-reports/bug-report-20260707T134722Z/bug-report-20260707T134722Z.json +265 -0
  32. package/tests/bug-reports/bug-report-20260707T134722Z/bug-report-20260707T134722Z.test.ts +12 -0
  33. package/tests/bug-reports/bug-report-20260707T140410Z/__snapshots__/bug-report-20260707T140410Z.snap.svg +950 -0
  34. package/tests/bug-reports/bug-report-20260707T140410Z/bug-report-20260707T140410Z.json +610 -0
  35. package/tests/bug-reports/bug-report-20260707T140410Z/bug-report-20260707T140410Z.test.ts +12 -0
  36. package/tests/bug-reports/bug-report-20260707T141025Z/__snapshots__/bug-report-20260707T141025Z.snap.svg +218 -0
  37. package/tests/bug-reports/bug-report-20260707T141025Z/bug-report-20260707T141025Z.json +185 -0
  38. package/tests/bug-reports/bug-report-20260707T141025Z/bug-report-20260707T141025Z.test.ts +12 -0
  39. package/tests/bug-reports/bug-report-20260707T141421Z/__snapshots__/bug-report-20260707T141421Z.snap.svg +613 -0
  40. package/tests/bug-reports/bug-report-20260707T141421Z/bug-report-20260707T141421Z.json +499 -0
  41. package/tests/bug-reports/bug-report-20260707T141421Z/bug-report-20260707T141421Z.test.ts +12 -0
  42. package/tests/examples/__snapshots__/example01.snap.svg +59 -162
  43. package/tests/examples/__snapshots__/example02.snap.svg +64 -273
  44. package/tests/examples/__snapshots__/example03.snap.svg +85 -290
  45. package/tests/examples/__snapshots__/example04.snap.svg +50 -94
  46. package/tests/examples/__snapshots__/example05.snap.svg +73 -191
  47. package/tests/examples/__snapshots__/example06.snap.svg +49 -95
  48. package/tests/examples/__snapshots__/example07.snap.svg +65 -218
  49. package/tests/examples/__snapshots__/example08.snap.svg +61 -143
  50. package/tests/examples/__snapshots__/example09.snap.svg +123 -493
  51. package/tests/examples/__snapshots__/example10.snap.svg +57 -136
  52. package/tests/examples/__snapshots__/example11.snap.svg +64 -173
  53. package/tests/examples/__snapshots__/example12.snap.svg +58 -159
  54. package/tests/examples/__snapshots__/example13.snap.svg +78 -348
  55. package/tests/examples/__snapshots__/example14.snap.svg +77 -293
  56. package/tests/examples/__snapshots__/example15.snap.svg +140 -984
  57. package/tests/examples/__snapshots__/example16.snap.svg +62 -162
  58. package/tests/examples/__snapshots__/example17.snap.svg +67 -198
  59. package/tests/examples/__snapshots__/example18.snap.svg +69 -249
  60. package/tests/examples/__snapshots__/example19.snap.svg +63 -202
  61. package/tests/examples/__snapshots__/example20.snap.svg +60 -148
  62. package/tests/examples/__snapshots__/example21.snap.svg +73 -298
  63. package/tests/examples/__snapshots__/example22.snap.svg +62 -156
  64. package/tests/examples/__snapshots__/example23.snap.svg +66 -172
  65. package/tests/examples/__snapshots__/example24.snap.svg +64 -164
  66. package/tests/examples/__snapshots__/example25.snap.svg +76 -299
  67. package/tests/examples/__snapshots__/example26.snap.svg +64 -164
  68. package/tests/examples/__snapshots__/example27.snap.svg +83 -300
  69. package/tests/examples/__snapshots__/example28.snap.svg +54 -115
  70. package/tests/examples/__snapshots__/example29.snap.svg +257 -1299
  71. package/tests/examples/__snapshots__/example30.snap.svg +91 -293
  72. package/tests/examples/__snapshots__/example31.snap.svg +47 -88
  73. package/tests/examples/__snapshots__/example32.snap.svg +107 -405
  74. package/tests/examples/__snapshots__/example33.snap.svg +71 -180
  75. package/tests/examples/__snapshots__/example34.snap.svg +55 -116
  76. package/tests/examples/__snapshots__/example35.snap.svg +69 -176
  77. package/tests/examples/__snapshots__/example36.snap.svg +65 -159
  78. package/tests/examples/__snapshots__/example37.snap.svg +75 -223
  79. package/tests/examples/__snapshots__/example38.snap.svg +46 -76
  80. package/tests/examples/__snapshots__/example39.snap.svg +51 -106
  81. package/tests/examples/__snapshots__/example40.snap.svg +83 -270
  82. package/tests/examples/__snapshots__/example41.snap.svg +54 -118
  83. package/tests/examples/__snapshots__/example42.snap.svg +67 -194
  84. package/tests/examples/__snapshots__/example43.snap.svg +62 -168
  85. package/tests/examples/__snapshots__/example44.snap.svg +86 -369
  86. package/tests/examples/__snapshots__/example45.snap.svg +60 -169
  87. package/tests/examples/__snapshots__/example46.snap.svg +80 -342
  88. package/tests/examples/__snapshots__/example47.snap.svg +82 -323
  89. package/tests/examples/__snapshots__/example48.snap.svg +64 -167
  90. package/tests/examples/__snapshots__/example49.snap.svg +120 -565
  91. package/tests/examples/__snapshots__/example50.snap.svg +71 -195
  92. package/tests/fixtures/getLastStepGraphicsObject.ts +38 -0
  93. package/tests/fixtures/getLastStepSvg.ts +9 -0
  94. package/tests/repros/__snapshots__/bugreport-001-gnd-overlap.snap.svg +67 -218
  95. package/tests/repros/__snapshots__/manufacturePartNumber-text-box.snap.svg +47 -87
  96. package/tests/repros/__snapshots__/netlabel-connector-through-rail-label.snap.svg +73 -272
  97. package/tests/repros/__snapshots__/repro-atmega328p-fault-pullup.snap.svg +284 -0
  98. package/tests/repros/__snapshots__/repro-atmega328p-missing-gnd-netlabel.snap.svg +470 -0
  99. package/tests/repros/__snapshots__/repro-bq24074-battery-charger.snap.svg +94 -395
  100. package/tests/repros/__snapshots__/repro-cc2340r5.snap.svg +88 -467
  101. package/tests/repros/__snapshots__/repro-ina237-current-monitor.snap.svg +109 -569
  102. package/tests/repros/__snapshots__/repro130-bq27441-fuel-gauge-trace-through-c1.snap.svg +95 -459
  103. package/tests/repros/__snapshots__/repro51-overlap-junction-crossing.snap.svg +64 -176
  104. package/tests/repros/__snapshots__/trace-overlap-box-resistor.snap.svg +51 -112
  105. package/tests/repros/assets/repro-atmega328p-fault-pullup.input.json +239 -0
  106. package/tests/repros/assets/repro-atmega328p-missing-gnd-netlabel.input.json +432 -0
  107. package/tests/repros/repro-atmega328p-fault-pullup.test.ts +11 -0
  108. package/tests/repros/repro-atmega328p-missing-gnd-netlabel.test.ts +16 -0
  109. package/tests/solvers/SchematicTraceSingleLineSolver2/__snapshots__/SchematicTraceSingleLineSolver2_01-example17-d1_1-u1_1.snap.svg +59 -159
  110. package/tests/solvers/TraceCleanupSolver/__snapshots__/TraceCleanupSolver.snap.svg +54 -118
  111. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/__snapshots__/TraceLabelOverlapAvoidanceSolver.snap.svg +58 -245
  112. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/__snapshots__/renderComparisonView01.snap.svg +73 -222
  113. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/__snapshots__/renderComparisonView02.snap.svg +65 -204
  114. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/__snapshots__/renderComparisonView03.snap.svg +65 -183
  115. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/MergedNetLabelObstacles.snap.svg +54 -139
  116. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/OverlapAvoidanceStepSolver.snap.svg +61 -215
  117. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/SingleOverlapSolver.snap.svg +54 -124
@@ -0,0 +1,275 @@
1
+ <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="100%" height="100%" fill="white" />
3
+ <g>
4
+ <circle data-type="point" data-label="U1.1
5
+ x-" data-x="-0.4400000000000013" data-y="-0.9500000000000001" cx="108.92215135036184" cy="222.76922856790083" r="3" fill="hsl(319, 100%, 50%, 0.8)" />
6
+ </g>
7
+ <g>
8
+ <circle data-type="point" data-label="U1.2
9
+ x-" data-x="-0.4400000000000013" data-y="-1.85" cx="108.92215135036184" cy="288.6883956405104" r="3" fill="hsl(320, 100%, 50%, 0.8)" />
10
+ </g>
11
+ <g>
12
+ <circle data-type="point" data-label="U1.3
13
+ x+" data-x="2.5599999999999996" data-y="-2" cx="328.65270825906055" cy="299.6749234859453" r="3" fill="hsl(321, 100%, 50%, 0.8)" />
14
+ </g>
15
+ <g>
16
+ <circle data-type="point" data-label="U1.4
17
+ x+" data-x="2.5599999999999996" data-y="-1" cx="328.65270825906055" cy="226.43140451637913" r="3" fill="hsl(322, 100%, 50%, 0.8)" />
18
+ </g>
19
+ <g>
20
+ <circle data-type="point" data-label="U1.5
21
+ x-" data-x="-0.4400000000000013" data-y="-2.05" cx="108.92215135036184" cy="303.33709943442364" r="3" fill="hsl(323, 100%, 50%, 0.8)" />
22
+ </g>
23
+ <g>
24
+ <circle data-type="point" data-label="V_SYSOFF.1
25
+ x-" data-x="-0.4400000000000006" data-y="-4.525" cx="108.92215135036189" cy="484.61480888410006" r="3" fill="hsl(270, 100%, 50%, 0.8)" />
26
+ </g>
27
+ <g>
28
+ <circle data-type="point" data-label="V_SYSOFF.2
29
+ x+" data-x="2.1599999999999993" data-y="-4.525" cx="299.3553006712341" cy="484.61480888410006" r="3" fill="hsl(271, 100%, 50%, 0.8)" />
30
+ </g>
31
+ <g>
32
+ <circle data-type="point" data-label="V_BAT.1
33
+ y+" data-x="5.304727675" data-y="-2" cx="529.6862217892165" cy="299.6749234859453" r="3" fill="hsl(191, 100%, 50%, 0.8)" />
34
+ </g>
35
+ <g>
36
+ <circle data-type="point" data-label="V_BAT.2
37
+ y-" data-x="5.314727674999999" data-y="-3.08" cx="530.4186569789122" cy="378.7779239730769" r="3" fill="hsl(192, 100%, 50%, 0.8)" />
38
+ </g>
39
+ <g>
40
+ <circle data-type="point" data-label="IBAT_PROBE.1
41
+ x-" data-x="3.26" data-y="-2" cx="379.92317153775696" cy="299.6749234859453" r="3" fill="hsl(72, 100%, 50%, 0.8)" />
42
+ </g>
43
+ <g>
44
+ <circle data-type="point" data-label="IBAT_PROBE.2
45
+ x+" data-x="4.34" data-y="-2" cx="459.02617202488847" cy="299.6749234859453" r="3" fill="hsl(72, 100%, 50%, 0.8)" />
46
+ </g>
47
+ <g>
48
+ <circle data-type="point" data-label="R_LOAD.1
49
+ y+" data-x="3.7395915124999988" data-y="0.2500000000000002" cx="415.0501415811936" cy="134.87700580442134" r="3" fill="hsl(110, 100%, 50%, 0.8)" />
50
+ </g>
51
+ <g>
52
+ <circle data-type="point" data-label="R_LOAD.2
53
+ y-" data-x="3.7395915124999988" data-y="-0.8499999999999999" cx="415.0501415811936" cy="215.44487667094418" r="3" fill="hsl(111, 100%, 50%, 0.8)" />
54
+ </g>
55
+ <g>
56
+ <circle data-type="point" data-label="anchorPoint
57
+ orientation: y-" data-x="-0.9000000000000012" data-y="-2.051" cx="75.23013262436137" cy="303.41034295339324" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
58
+ </g>
59
+ <g>
60
+ <circle data-type="point" data-label="anchorPoint
61
+ orientation: y-" data-x="3.7373638374999993" data-y="-4.525" cx="414.8869788250731" cy="484.61480888410006" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
62
+ </g>
63
+ <g>
64
+ <circle data-type="point" data-label="anchorPoint
65
+ orientation: y-" data-x="3.7395915124999988" data-y="-0.8499999999999999" cx="415.0501415811936" cy="215.44487667094418" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
66
+ </g>
67
+ <g>
68
+ <circle data-type="point" data-label="anchorPoint
69
+ orientation: x-" data-x="-0.4400000000000013" data-y="-1.85" cx="108.92215135036184" cy="288.6883956405104" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
70
+ </g>
71
+ <g>
72
+ <circle data-type="point" data-label="anchorPoint
73
+ orientation: x-" data-x="-0.4400000000000006" data-y="-4.525" cx="108.92215135036189" cy="484.61480888410006" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
74
+ </g>
75
+ <g>
76
+ <circle data-type="point" data-label="anchorPoint
77
+ orientation: y+" data-x="2.9099999999999997" data-y="-2" cx="354.28793989840875" cy="299.6749234859453" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
78
+ </g>
79
+ <g>
80
+ <circle data-type="point" data-label="anchorPoint
81
+ orientation: x-" data-x="3.149795756249999" data-y="-0.8897957562499996" cx="371.8514249201271" cy="218.35965789874928" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
82
+ </g>
83
+ <g>
84
+ <circle data-type="point" data-label="anchorPoint
85
+ orientation: x+" data-x="5.304727675" data-y="-1.8" cx="529.6862217892165" cy="285.0262196920321" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
86
+ </g>
87
+ <g>
88
+ <polyline data-points="3.26,-2 2.5599999999999996,-2" data-type="line" data-label="" points="379.92317153775696,299.6749234859453 328.65270825906055,299.6749234859453" fill="none" stroke="hsl(232, 100%, 50%, 0.8)" stroke-width="1" />
89
+ </g>
90
+ <g>
91
+ <polyline data-points="4.34,-2 5.304727675,-2" data-type="line" data-label="" points="459.02617202488847,299.6749234859453 529.6862217892165,299.6749234859453" fill="none" stroke="hsl(240, 100%, 50%, 0.8)" stroke-width="1" />
92
+ </g>
93
+ <g>
94
+ <polyline data-points="-0.4400000000000013,-1.85 -0.4400000000000006,-4.525" data-type="line" data-label="" points="108.92215135036184,288.6883956405104 108.92215135036189,484.61480888410006" fill="none" stroke="hsl(256, 100%, 50%, 0.8)" stroke-width="1" />
95
+ </g>
96
+ <g>
97
+ <polyline data-points="2.5599999999999996,-1 3.7395915124999988,0.2500000000000002" data-type="line" data-label="" points="328.65270825906055,226.43140451637913 415.0501415811936,134.87700580442134" fill="none" stroke="hsl(64, 100%, 50%, 0.8)" stroke-width="1" />
98
+ </g>
99
+ <g>
100
+ <polyline data-points="-0.4400000000000013,-0.9500000000000001 -0.4400000000000013,-2.05" data-type="line" data-label="" points="108.92215135036184,222.76922856790083 108.92215135036184,303.33709943442364" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
101
+ </g>
102
+ <g>
103
+ <polyline data-points="-0.4400000000000013,-0.9500000000000001 2.1599999999999993,-4.525" data-type="line" data-label="" points="108.92215135036184,222.76922856790083 299.3553006712341,484.61480888410006" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
104
+ </g>
105
+ <g>
106
+ <polyline data-points="-0.4400000000000013,-0.9500000000000001 5.314727674999999,-3.08" data-type="line" data-label="" points="108.92215135036184,222.76922856790083 530.4186569789122,378.7779239730769" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
107
+ </g>
108
+ <g>
109
+ <polyline data-points="-0.4400000000000013,-0.9500000000000001 3.7395915124999988,-0.8499999999999999" data-type="line" data-label="" points="108.92215135036184,222.76922856790083 415.0501415811936,215.44487667094418" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
110
+ </g>
111
+ <g>
112
+ <polyline data-points="-0.4400000000000013,-2.05 2.1599999999999993,-4.525" data-type="line" data-label="" points="108.92215135036184,303.33709943442364 299.3553006712341,484.61480888410006" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
113
+ </g>
114
+ <g>
115
+ <polyline data-points="-0.4400000000000013,-2.05 5.314727674999999,-3.08" data-type="line" data-label="" points="108.92215135036184,303.33709943442364 530.4186569789122,378.7779239730769" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
116
+ </g>
117
+ <g>
118
+ <polyline data-points="-0.4400000000000013,-2.05 3.7395915124999988,-0.8499999999999999" data-type="line" data-label="" points="108.92215135036184,303.33709943442364 415.0501415811936,215.44487667094418" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
119
+ </g>
120
+ <g>
121
+ <polyline data-points="2.1599999999999993,-4.525 5.314727674999999,-3.08" data-type="line" data-label="" points="299.3553006712341,484.61480888410006 530.4186569789122,378.7779239730769" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
122
+ </g>
123
+ <g>
124
+ <polyline data-points="2.1599999999999993,-4.525 3.7395915124999988,-0.8499999999999999" data-type="line" data-label="" points="299.3553006712341,484.61480888410006 415.0501415811936,215.44487667094418" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
125
+ </g>
126
+ <g>
127
+ <polyline data-points="5.314727674999999,-3.08 3.7395915124999988,-0.8499999999999999" data-type="line" data-label="" points="530.4186569789122,378.7779239730769 415.0501415811936,215.44487667094418" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
128
+ </g>
129
+ <g>
130
+ <polyline data-points="-0.4400000000000013,-1.85 -0.4400000000000006,-4.525" data-type="line" data-label="" points="108.92215135036184,288.6883956405104 108.92215135036189,484.61480888410006" fill="none" stroke="hsl(114, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
131
+ </g>
132
+ <g>
133
+ <polyline data-points="2.5599999999999996,-2 3.26,-2" data-type="line" data-label="" points="328.65270825906055,299.6749234859453 379.92317153775696,299.6749234859453" fill="none" stroke="hsl(5, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
134
+ </g>
135
+ <g>
136
+ <polyline data-points="2.5599999999999996,-1 3.7395915124999988,0.2500000000000002" data-type="line" data-label="" points="328.65270825906055,226.43140451637913 415.0501415811936,134.87700580442134" fill="none" stroke="hsl(158, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
137
+ </g>
138
+ <g>
139
+ <polyline data-points="5.304727675,-2 4.34,-2" data-type="line" data-label="" points="529.6862217892165,299.6749234859453 459.02617202488847,299.6749234859453" fill="none" stroke="hsl(2, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
140
+ </g>
141
+ <g>
142
+ <polyline data-points="3.26,-2 2.5599999999999996,-2" data-type="line" data-label="" points="379.92317153775696,299.6749234859453 328.65270825906055,299.6749234859453" fill="none" stroke="purple" stroke-width="1" />
143
+ </g>
144
+ <g>
145
+ <polyline data-points="4.34,-2 4.822363837499999,-2 4.822363837499999,-1.8 5.304727675,-1.8 5.304727675,-2" data-type="line" data-label="" points="459.02617202488847,299.6749234859453 494.35619690705244,299.6749234859453 494.35619690705244,285.0262196920321 529.6862217892165,285.0262196920321 529.6862217892165,299.6749234859453" fill="none" stroke="purple" stroke-width="1" />
146
+ </g>
147
+ <g>
148
+ <polyline data-points="2.5599999999999996,-1 3.149795756249999,-1 3.149795756249999,0.45000000000000023 3.7395915124999988,0.45000000000000023 3.7395915124999988,0.2500000000000002" data-type="line" data-label="" points="328.65270825906055,226.43140451637913 371.8514249201271,226.43140451637913 371.8514249201271,120.22830201050809 415.0501415811936,120.22830201050809 415.0501415811936,134.87700580442134" fill="none" stroke="purple" stroke-width="1" />
149
+ </g>
150
+ <g>
151
+ <polyline data-points="2.1599999999999993,-4.525 5.314727674999999,-4.525 5.314727674999999,-3.08" data-type="line" data-label="" points="299.3553006712341,484.61480888410006 530.4186569789122,484.61480888410006 530.4186569789122,378.7779239730769" fill="none" stroke="purple" stroke-width="1" />
152
+ </g>
153
+ <g>
154
+ <polyline data-points="-0.4400000000000013,-2.05 -1.3810000000000013,-2.0500000000000003 -1.3810000000000013,-1.65 -0.6400000000000012,-1.65 -0.6400000000000012,-0.9500000000000001 -0.4400000000000013,-0.9500000000000001" data-type="line" data-label="" points="108.92215135036184,303.33709943442364 40.000000000000014,303.3370994344237 40.000000000000014,274.0396918465972 94.27344755644859,274.0396918465972 94.27344755644859,222.76922856790083 108.92215135036184,222.76922856790083" fill="none" stroke="purple" stroke-width="1" />
155
+ </g>
156
+ <g>
157
+ <polyline data-points="-0.6400000000000012,-2.0500000000000003 -0.9000000000000012,-2.0500000000000003 -0.9000000000000012,-2.051" data-type="line" data-label="" points="94.27344755644859,303.3370994344237 75.23013262436137,303.3370994344237 75.23013262436137,303.41034295339324" fill="none" stroke="purple" stroke-width="1" />
158
+ </g>
159
+ <g>
160
+ <rect data-type="rect" data-label="schematic_component_0" data-x="1.0599999999999992" data-y="-1.5" x="108.92215135036184" y="160.51223744376955" width="219.7305569086987" height="205.08185311478542" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013653085133928572" />
161
+ </g>
162
+ <g>
163
+ <rect data-type="rect" data-label="schematic_component_1" data-x="0.8599999999999994" data-y="-4.525" x="108.92215135036189" y="468.1350171159477" width="190.4331493208722" height="32.95958353630476" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013653085133928572" />
164
+ </g>
165
+ <g>
166
+ <rect data-type="rect" data-label="schematic_component_2" data-x="5.3097276749999995" data-y="-2.54" x="506.63445935510657" y="299.6749234859453" width="46.83596005791543" height="79.10300048713157" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013653085133928572" />
167
+ </g>
168
+ <g>
169
+ <rect data-type="rect" data-label="schematic_component_3" data-x="3.8" data-y="-2" x="379.92317153775696" y="263.05316400116226" width="79.10300048713151" height="73.24351896956625" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013653085133928572" />
170
+ </g>
171
+ <g>
172
+ <rect data-type="rect" data-label="schematic_component_4" data-x="4.109455349999998" data-y="-0.2999999999999998" x="403.35112458736637" y="134.87700580442134" width="77.57829198383001" height="80.56787086652284" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013653085133928572" />
173
+ </g>
174
+ <g>
175
+ <rect data-type="rect" data-label="BQ24075-SYSOFF-BEHAVIORAL" data-x="1.459999999999999" data-y="-3.03" x="138.21955893818836" y="368.52383131733757" width="219.73055690869865" height="13.183833414521928" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.013653085133928572" />
176
+ </g>
177
+ <g>
178
+ <rect data-type="rect" data-label="U1" data-x="0.0799999999999993" data-y="0.029999999999999805" x="138.21955893818836" y="144.39866327046497" width="17.578444552695913" height="13.183833414521928" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.013653085133928572" />
179
+ </g>
180
+ <g>
181
+ <rect data-type="rect" data-label="BQ24075-SYSOFF-STEP" data-x="1.0999999999999994" data-y="-4.880000000000001" x="138.21955893818838" y="504.02434141103515" width="166.99522325061102" height="13.183833414521928" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.013653085133928572" />
182
+ </g>
183
+ <g>
184
+ <rect data-type="rect" data-label="V_SYSOFF" data-x="0.4399999999999994" data-y="-4.17" x="138.21955893818838" y="452.02144294264315" width="70.31377821078357" height="13.183833414521814" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.013653085133928572" />
185
+ </g>
186
+ <g>
187
+ <rect data-type="rect" data-label="netId: GND
188
+ globalConnNetId: connectivity_net4" data-x="-0.9000000000000012" data-y="-2.2910000000000004" x="59.84899364075247" y="303.41034295339324" width="30.762277967217813" height="35.156889105391826" fill="#00000066" stroke="#000000" stroke-width="0.013653085133928572" />
189
+ </g>
190
+ <g>
191
+ <rect data-type="rect" data-label="netId: GND
192
+ globalConnNetId: connectivity_net4" data-x="3.7373638374999993" data-y="-4.765000000000001" x="399.5058398414642" y="484.61480888410006" width="30.762277967217813" height="35.15688910539188" fill="#00000066" stroke="#000000" stroke-width="0.013653085133928572" />
193
+ </g>
194
+ <g>
195
+ <rect data-type="rect" data-label="netId: GND
196
+ globalConnNetId: connectivity_net4" data-x="3.7395915124999988" data-y="-1.0909999999999997" x="399.66900259758467" y="215.51812018991376" width="30.762277967217813" height="35.15688910539177" fill="#00000066" stroke="#000000" stroke-width="0.013653085133928572" />
197
+ </g>
198
+ <g>
199
+ <rect data-type="rect" data-label="netId: SYSOFF
200
+ globalConnNetId: connectivity_net2" data-x="-0.8610000000000012" data-y="-1.85" x="47.32435189695664" y="281.3640437435538" width="61.524555934435625" height="14.648703793913228" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013653085133928572" />
201
+ </g>
202
+ <g>
203
+ <rect data-type="rect" data-label="netId: SYSOFF
204
+ globalConnNetId: connectivity_net2" data-x="-0.8610000000000005" data-y="-4.525" x="47.3243518969567" y="477.29045698714356" width="61.524555934435625" height="14.648703793913114" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013653085133928572" />
205
+ </g>
206
+ <g>
207
+ <rect data-type="rect" data-label="netId: BAT
208
+ globalConnNetId: connectivity_net0" data-x="2.9099999999999997" data-y="-1.76" x="346.96358800145214" y="264.51803438055356" width="14.648703793913285" height="35.15688910539177" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013653085133928572" />
209
+ </g>
210
+ <g>
211
+ <rect data-type="rect" data-label="netId: OUT
212
+ globalConnNetId: connectivity_net3" data-x="2.9097957562499994" data-y="-0.8897957562499996" x="336.69453581473533" y="211.03530600179266" width="35.15688910539177" height="14.648703793913228" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013653085133928572" />
213
+ </g>
214
+ <g>
215
+ <rect data-type="rect" data-label="netId: BAT_SRC
216
+ globalConnNetId: connectivity_net1" data-x="5.784727674999999" data-y="-1.8" x="529.6862217892165" y="277.7018677950755" width="70.31377821078354" height="14.648703793913228" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013653085133928572" />
217
+ </g>
218
+ <g id="crosshair" style="display: none">
219
+ <line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
220
+ <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>
221
+ </g>
222
+ <script>
223
+ <![CDATA[
224
+ document.currentScript.parentElement.addEventListener('mousemove', (e) => {
225
+ const svg = e.currentTarget;
226
+ const rect = svg.getBoundingClientRect();
227
+ const x = e.clientX - rect.left;
228
+ const y = e.clientY - rect.top;
229
+ const crosshair = svg.getElementById('crosshair');
230
+ const h = svg.getElementById('crosshair-h');
231
+ const v = svg.getElementById('crosshair-v');
232
+ const coords = svg.getElementById('coordinates');
233
+
234
+ crosshair.style.display = 'block';
235
+ h.setAttribute('x1', '0');
236
+ h.setAttribute('x2', '640');
237
+ h.setAttribute('y1', y);
238
+ h.setAttribute('y2', y);
239
+ v.setAttribute('x1', x);
240
+ v.setAttribute('x2', x);
241
+ v.setAttribute('y1', '0');
242
+ v.setAttribute('y2', '640');
243
+
244
+ // Calculate real coordinates using inverse transformation
245
+ const matrix = {
246
+ "a": 73.24351896956622,
247
+ "c": 0,
248
+ "e": 141.14929969697107,
249
+ "b": 0,
250
+ "d": -73.24351896956622,
251
+ "f": 153.1878855468129
252
+ };
253
+ // Manually invert and apply the affine transform
254
+ // Since we only use translate and scale, we can directly compute:
255
+ // x' = (x - tx) / sx
256
+ // y' = (y - ty) / sy
257
+ const sx = matrix.a;
258
+ const sy = matrix.d;
259
+ const tx = matrix.e;
260
+ const ty = matrix.f;
261
+ const realPoint = {
262
+ x: (x - tx) / sx,
263
+ y: (y - ty) / sy // Flip y back since we used negative scale
264
+ }
265
+
266
+ coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
267
+ coords.setAttribute('x', (x + 5).toString());
268
+ coords.setAttribute('y', (y - 5).toString());
269
+ });
270
+ document.currentScript.parentElement.addEventListener('mouseleave', () => {
271
+ document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
272
+ });
273
+ ]]>
274
+ </script>
275
+ </svg>
@@ -0,0 +1,265 @@
1
+ {
2
+ "chips": [
3
+ {
4
+ "chipId": "schematic_component_0",
5
+ "center": {
6
+ "x": 1.0599999999999992,
7
+ "y": -1.5
8
+ },
9
+ "width": 3.000000000000001,
10
+ "height": 2.8,
11
+ "pins": [
12
+ {
13
+ "pinId": "U1.1",
14
+ "x": -0.4400000000000013,
15
+ "y": -0.9500000000000001
16
+ },
17
+ {
18
+ "pinId": "U1.2",
19
+ "x": -0.4400000000000013,
20
+ "y": -1.85
21
+ },
22
+ {
23
+ "pinId": "U1.3",
24
+ "x": 2.5599999999999996,
25
+ "y": -2
26
+ },
27
+ {
28
+ "pinId": "U1.4",
29
+ "x": 2.5599999999999996,
30
+ "y": -1
31
+ },
32
+ {
33
+ "pinId": "U1.5",
34
+ "x": -0.4400000000000013,
35
+ "y": -2.05
36
+ }
37
+ ]
38
+ },
39
+ {
40
+ "chipId": "schematic_component_1",
41
+ "center": {
42
+ "x": 0.8599999999999994,
43
+ "y": -4.525
44
+ },
45
+ "width": 2.6,
46
+ "height": 0.4499999999999993,
47
+ "pins": [
48
+ {
49
+ "pinId": "V_SYSOFF.1",
50
+ "x": -0.4400000000000006,
51
+ "y": -4.525
52
+ },
53
+ {
54
+ "pinId": "V_SYSOFF.2",
55
+ "x": 2.1599999999999993,
56
+ "y": -4.525
57
+ }
58
+ ]
59
+ },
60
+ {
61
+ "chipId": "schematic_component_2",
62
+ "center": {
63
+ "x": 5.3097276749999995,
64
+ "y": -2.54
65
+ },
66
+ "width": 0.6394553499999986,
67
+ "height": 1.08,
68
+ "pins": [
69
+ {
70
+ "pinId": "V_BAT.1",
71
+ "x": 5.304727675,
72
+ "y": -2
73
+ },
74
+ {
75
+ "pinId": "V_BAT.2",
76
+ "x": 5.314727674999999,
77
+ "y": -3.08
78
+ }
79
+ ]
80
+ },
81
+ {
82
+ "chipId": "schematic_component_3",
83
+ "center": {
84
+ "x": 3.8,
85
+ "y": -2
86
+ },
87
+ "width": 1.08,
88
+ "height": 1,
89
+ "pins": [
90
+ {
91
+ "pinId": "IBAT_PROBE.1",
92
+ "x": 3.26,
93
+ "y": -2
94
+ },
95
+ {
96
+ "pinId": "IBAT_PROBE.2",
97
+ "x": 4.34,
98
+ "y": -2
99
+ }
100
+ ]
101
+ },
102
+ {
103
+ "chipId": "schematic_component_4",
104
+ "center": {
105
+ "x": 4.109455349999998,
106
+ "y": -0.2999999999999998
107
+ },
108
+ "width": 1.059183024999999,
109
+ "height": 1.1,
110
+ "pins": [
111
+ {
112
+ "pinId": "R_LOAD.1",
113
+ "x": 3.7395915124999988,
114
+ "y": 0.2500000000000002
115
+ },
116
+ {
117
+ "pinId": "R_LOAD.2",
118
+ "x": 3.7395915124999988,
119
+ "y": -0.8499999999999999
120
+ }
121
+ ]
122
+ }
123
+ ],
124
+ "directConnections": [
125
+ {
126
+ "pinIds": [
127
+ "IBAT_PROBE.1",
128
+ "U1.3"
129
+ ],
130
+ "netId": ".IBAT_PROBE > .pos to U1.BAT"
131
+ },
132
+ {
133
+ "pinIds": [
134
+ "IBAT_PROBE.2",
135
+ "V_BAT.1"
136
+ ],
137
+ "netId": ".IBAT_PROBE > .neg to V_BAT.pin1"
138
+ },
139
+ {
140
+ "pinIds": [
141
+ "U1.2",
142
+ "V_SYSOFF.1"
143
+ ],
144
+ "netId": "U1.SYSOFF to V_SYSOFF.OUT",
145
+ "netLabelWidth": 2.43
146
+ },
147
+ {
148
+ "pinIds": [
149
+ "U1.4",
150
+ "R_LOAD.1"
151
+ ],
152
+ "netId": "U1.OUT to R_LOAD.pin1"
153
+ }
154
+ ],
155
+ "netConnections": [
156
+ {
157
+ "netId": "GND",
158
+ "pinIds": [
159
+ "U1.1",
160
+ "U1.5",
161
+ "V_SYSOFF.2",
162
+ "V_BAT.2",
163
+ "R_LOAD.2"
164
+ ],
165
+ "netLabelWidth": 0.48,
166
+ "netLabelHeight": 0.42
167
+ },
168
+ {
169
+ "netId": "SYSOFF",
170
+ "pinIds": [
171
+ "U1.2",
172
+ "V_SYSOFF.1"
173
+ ],
174
+ "netLabelWidth": 0.84
175
+ },
176
+ {
177
+ "netId": "BAT",
178
+ "pinIds": [
179
+ "U1.3",
180
+ "IBAT_PROBE.1"
181
+ ],
182
+ "netLabelWidth": 0.48
183
+ },
184
+ {
185
+ "netId": "OUT",
186
+ "pinIds": [
187
+ "U1.4",
188
+ "R_LOAD.1"
189
+ ],
190
+ "netLabelWidth": 0.48
191
+ },
192
+ {
193
+ "netId": "BAT_SRC",
194
+ "pinIds": [
195
+ "V_BAT.1",
196
+ "IBAT_PROBE.2"
197
+ ],
198
+ "netLabelWidth": 0.96
199
+ }
200
+ ],
201
+ "textBoxes": [
202
+ {
203
+ "chipId": "schematic_component_0",
204
+ "center": {
205
+ "x": 1.459999999999999,
206
+ "y": -3.03
207
+ },
208
+ "width": 3,
209
+ "height": 0.17999999999999972,
210
+ "text": "BQ24075-SYSOFF-BEHAVIORAL"
211
+ },
212
+ {
213
+ "chipId": "schematic_component_0",
214
+ "center": {
215
+ "x": 0.0799999999999993,
216
+ "y": 0.029999999999999805
217
+ },
218
+ "width": 0.24,
219
+ "height": 0.18,
220
+ "text": "U1"
221
+ },
222
+ {
223
+ "chipId": "schematic_component_1",
224
+ "center": {
225
+ "x": 1.0999999999999994,
226
+ "y": -4.880000000000001
227
+ },
228
+ "width": 2.28,
229
+ "height": 0.17999999999999972,
230
+ "text": "BQ24075-SYSOFF-STEP"
231
+ },
232
+ {
233
+ "chipId": "schematic_component_1",
234
+ "center": {
235
+ "x": 0.4399999999999994,
236
+ "y": -4.17
237
+ },
238
+ "width": 0.96,
239
+ "height": 0.17999999999999972,
240
+ "text": "V_SYSOFF"
241
+ }
242
+ ],
243
+ "availableNetLabelOrientations": {
244
+ "GND": [
245
+ "y-"
246
+ ],
247
+ "SYSOFF": [
248
+ "x-",
249
+ "x+"
250
+ ],
251
+ "BAT": [
252
+ "x-",
253
+ "x+"
254
+ ],
255
+ "OUT": [
256
+ "x-",
257
+ "x+"
258
+ ],
259
+ "BAT_SRC": [
260
+ "x-",
261
+ "x+"
262
+ ]
263
+ },
264
+ "maxMspPairDistance": 2.4
265
+ }
@@ -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-20260707T134722Z.json"
4
+ import "tests/fixtures/matcher"
5
+
6
+ test("bug-report-20260707T134722Z", () => {
7
+ const solver = new SchematicTracePipelineSolver(inputProblem as any)
8
+
9
+ solver.solve()
10
+
11
+ expect(solver).toMatchSolverSnapshot(import.meta.path)
12
+ })