@tscircuit/schematic-trace-solver 0.0.87 → 0.0.89

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 (118) 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 +30 -22
  6. package/lib/solvers/Example28Solver/reroute.ts +10 -0
  7. package/lib/testing/PipelineStageDebugRunner.ts +344 -0
  8. package/package.json +3 -2
  9. package/scripts/debug-pipeline-stages.ts +146 -0
  10. package/site/bug-reports/bug-report-20260706T220324Z.page.tsx +4 -0
  11. package/site/bug-reports/bug-report-20260707T020342Z.page.tsx +4 -0
  12. package/site/bug-reports/bug-report-20260707T092615Z.page.tsx +4 -0
  13. package/site/bug-reports/bug-report-20260707T134549Z.page.tsx +4 -0
  14. package/site/bug-reports/bug-report-20260707T134722Z.page.tsx +4 -0
  15. package/site/bug-reports/bug-report-20260707T140410Z.page.tsx +4 -0
  16. package/site/bug-reports/bug-report-20260707T141025Z.page.tsx +4 -0
  17. package/site/bug-reports/bug-report-20260707T141421Z.page.tsx +4 -0
  18. package/tests/bug-reports/bug-report-20260706T213649Z/__snapshots__/bug-report-20260706T213649Z.snap.svg +386 -0
  19. package/tests/bug-reports/bug-report-20260706T213649Z/bug-report-20260706T213649Z.json +1471 -0
  20. package/tests/bug-reports/bug-report-20260706T213649Z/bug-report-20260706T213649Z.test.ts +12 -0
  21. package/tests/bug-reports/bug-report-20260706T220324Z/__snapshots__/bug-report-20260706T220324Z.snap.svg +357 -3448
  22. package/tests/bug-reports/bug-report-20260707T020342Z/__snapshots__/bug-report-20260707T020342Z.snap.svg +64 -0
  23. package/tests/bug-reports/bug-report-20260707T020342Z/bug-report-20260707T020342Z.json +233 -0
  24. package/tests/bug-reports/bug-report-20260707T020342Z/bug-report-20260707T020342Z.test.ts +12 -0
  25. package/tests/bug-reports/bug-report-20260707T092615Z/__snapshots__/bug-report-20260707T092615Z.snap.svg +252 -0
  26. package/tests/bug-reports/bug-report-20260707T092615Z/bug-report-20260707T092615Z.json +1392 -0
  27. package/tests/bug-reports/bug-report-20260707T092615Z/bug-report-20260707T092615Z.test.ts +12 -0
  28. package/tests/bug-reports/bug-report-20260707T134549Z/__snapshots__/bug-report-20260707T134549Z.snap.svg +124 -0
  29. package/tests/bug-reports/bug-report-20260707T134549Z/bug-report-20260707T134549Z.json +652 -0
  30. package/tests/bug-reports/bug-report-20260707T134549Z/bug-report-20260707T134549Z.test.ts +12 -0
  31. package/tests/bug-reports/bug-report-20260707T134722Z/__snapshots__/bug-report-20260707T134722Z.snap.svg +73 -0
  32. package/tests/bug-reports/bug-report-20260707T134722Z/bug-report-20260707T134722Z.json +265 -0
  33. package/tests/bug-reports/bug-report-20260707T134722Z/bug-report-20260707T134722Z.test.ts +12 -0
  34. package/tests/bug-reports/bug-report-20260707T140410Z/__snapshots__/bug-report-20260707T140410Z.snap.svg +154 -0
  35. package/tests/bug-reports/bug-report-20260707T140410Z/bug-report-20260707T140410Z.json +610 -0
  36. package/tests/bug-reports/bug-report-20260707T140410Z/bug-report-20260707T140410Z.test.ts +12 -0
  37. package/tests/bug-reports/bug-report-20260707T141025Z/__snapshots__/bug-report-20260707T141025Z.snap.svg +67 -0
  38. package/tests/bug-reports/bug-report-20260707T141025Z/bug-report-20260707T141025Z.json +185 -0
  39. package/tests/bug-reports/bug-report-20260707T141025Z/bug-report-20260707T141025Z.test.ts +12 -0
  40. package/tests/bug-reports/bug-report-20260707T141421Z/__snapshots__/bug-report-20260707T141421Z.snap.svg +114 -0
  41. package/tests/bug-reports/bug-report-20260707T141421Z/bug-report-20260707T141421Z.json +499 -0
  42. package/tests/bug-reports/bug-report-20260707T141421Z/bug-report-20260707T141421Z.test.ts +23 -0
  43. package/tests/examples/__snapshots__/example01.snap.svg +59 -162
  44. package/tests/examples/__snapshots__/example02.snap.svg +64 -273
  45. package/tests/examples/__snapshots__/example03.snap.svg +85 -290
  46. package/tests/examples/__snapshots__/example04.snap.svg +50 -94
  47. package/tests/examples/__snapshots__/example05.snap.svg +73 -191
  48. package/tests/examples/__snapshots__/example06.snap.svg +49 -95
  49. package/tests/examples/__snapshots__/example07.snap.svg +65 -218
  50. package/tests/examples/__snapshots__/example08.snap.svg +61 -143
  51. package/tests/examples/__snapshots__/example09.snap.svg +123 -493
  52. package/tests/examples/__snapshots__/example10.snap.svg +57 -136
  53. package/tests/examples/__snapshots__/example11.snap.svg +64 -173
  54. package/tests/examples/__snapshots__/example12.snap.svg +58 -159
  55. package/tests/examples/__snapshots__/example13.snap.svg +78 -348
  56. package/tests/examples/__snapshots__/example14.snap.svg +77 -293
  57. package/tests/examples/__snapshots__/example15.snap.svg +140 -984
  58. package/tests/examples/__snapshots__/example16.snap.svg +62 -162
  59. package/tests/examples/__snapshots__/example17.snap.svg +67 -198
  60. package/tests/examples/__snapshots__/example18.snap.svg +69 -249
  61. package/tests/examples/__snapshots__/example19.snap.svg +63 -202
  62. package/tests/examples/__snapshots__/example20.snap.svg +60 -148
  63. package/tests/examples/__snapshots__/example21.snap.svg +73 -298
  64. package/tests/examples/__snapshots__/example22.snap.svg +62 -156
  65. package/tests/examples/__snapshots__/example23.snap.svg +66 -172
  66. package/tests/examples/__snapshots__/example24.snap.svg +64 -164
  67. package/tests/examples/__snapshots__/example25.snap.svg +76 -299
  68. package/tests/examples/__snapshots__/example26.snap.svg +64 -164
  69. package/tests/examples/__snapshots__/example27.snap.svg +83 -300
  70. package/tests/examples/__snapshots__/example28.snap.svg +54 -115
  71. package/tests/examples/__snapshots__/example29.snap.svg +257 -1299
  72. package/tests/examples/__snapshots__/example30.snap.svg +91 -293
  73. package/tests/examples/__snapshots__/example31.snap.svg +47 -88
  74. package/tests/examples/__snapshots__/example32.snap.svg +107 -405
  75. package/tests/examples/__snapshots__/example33.snap.svg +71 -180
  76. package/tests/examples/__snapshots__/example34.snap.svg +55 -116
  77. package/tests/examples/__snapshots__/example35.snap.svg +69 -176
  78. package/tests/examples/__snapshots__/example36.snap.svg +65 -159
  79. package/tests/examples/__snapshots__/example37.snap.svg +75 -223
  80. package/tests/examples/__snapshots__/example38.snap.svg +46 -76
  81. package/tests/examples/__snapshots__/example39.snap.svg +51 -106
  82. package/tests/examples/__snapshots__/example40.snap.svg +83 -270
  83. package/tests/examples/__snapshots__/example41.snap.svg +54 -118
  84. package/tests/examples/__snapshots__/example42.snap.svg +67 -194
  85. package/tests/examples/__snapshots__/example43.snap.svg +62 -168
  86. package/tests/examples/__snapshots__/example44.snap.svg +86 -369
  87. package/tests/examples/__snapshots__/example45.snap.svg +60 -169
  88. package/tests/examples/__snapshots__/example46.snap.svg +80 -342
  89. package/tests/examples/__snapshots__/example47.snap.svg +82 -323
  90. package/tests/examples/__snapshots__/example48.snap.svg +64 -167
  91. package/tests/examples/__snapshots__/example49.snap.svg +120 -565
  92. package/tests/examples/__snapshots__/example50.snap.svg +71 -189
  93. package/tests/fixtures/getLastStepGraphicsObject.ts +38 -0
  94. package/tests/fixtures/getLastStepSvg.ts +9 -0
  95. package/tests/repros/__snapshots__/bugreport-001-gnd-overlap.snap.svg +67 -218
  96. package/tests/repros/__snapshots__/manufacturePartNumber-text-box.snap.svg +47 -87
  97. package/tests/repros/__snapshots__/netlabel-connector-through-rail-label.snap.svg +73 -272
  98. package/tests/repros/__snapshots__/repro-atmega328p-fault-pullup.snap.svg +88 -0
  99. package/tests/repros/__snapshots__/repro-atmega328p-missing-gnd-netlabel.snap.svg +118 -0
  100. package/tests/repros/__snapshots__/repro-bq24074-battery-charger.snap.svg +94 -395
  101. package/tests/repros/__snapshots__/repro-cc2340r5.snap.svg +88 -467
  102. package/tests/repros/__snapshots__/repro-ina237-current-monitor.snap.svg +109 -569
  103. package/tests/repros/__snapshots__/repro130-bq27441-fuel-gauge-trace-through-c1.snap.svg +95 -459
  104. package/tests/repros/__snapshots__/repro51-overlap-junction-crossing.snap.svg +64 -176
  105. package/tests/repros/__snapshots__/trace-overlap-box-resistor.snap.svg +51 -112
  106. package/tests/repros/assets/repro-atmega328p-fault-pullup.input.json +239 -0
  107. package/tests/repros/assets/repro-atmega328p-missing-gnd-netlabel.input.json +432 -0
  108. package/tests/repros/repro-atmega328p-fault-pullup.test.ts +11 -0
  109. package/tests/repros/repro-atmega328p-missing-gnd-netlabel.test.ts +16 -0
  110. package/tests/solvers/SchematicTraceSingleLineSolver2/__snapshots__/SchematicTraceSingleLineSolver2_01-example17-d1_1-u1_1.snap.svg +59 -159
  111. package/tests/solvers/TraceCleanupSolver/__snapshots__/TraceCleanupSolver.snap.svg +54 -118
  112. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/__snapshots__/TraceLabelOverlapAvoidanceSolver.snap.svg +58 -245
  113. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/__snapshots__/renderComparisonView01.snap.svg +73 -222
  114. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/__snapshots__/renderComparisonView02.snap.svg +65 -204
  115. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/__snapshots__/renderComparisonView03.snap.svg +65 -183
  116. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/MergedNetLabelObstacles.snap.svg +54 -139
  117. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/OverlapAvoidanceStepSolver.snap.svg +61 -215
  118. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/SingleOverlapSolver.snap.svg +54 -124
@@ -0,0 +1,73 @@
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="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="1px"/></g><g><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="1px"/></g><g><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="1px"/></g><g><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="1px"/></g><g><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="1px" stroke-dasharray="4 2"/></g><g><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="1px" stroke-dasharray="4 2"/></g><g><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="1px" stroke-dasharray="4 2"/></g><g><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="1px" stroke-dasharray="4 2"/></g><g><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="1px" stroke-dasharray="4 2"/></g><g><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="1px" stroke-dasharray="4 2"/></g><g><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="1px" stroke-dasharray="4 2"/></g><g><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="1px" stroke-dasharray="4 2"/></g><g><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="1px" stroke-dasharray="4 2"/></g><g><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="1px" stroke-dasharray="4 2"/></g><g><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="1px" stroke-dasharray="4 2"/></g><g><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="1px" stroke-dasharray="4 2"/></g><g><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="1px" stroke-dasharray="4 2"/></g><g><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="1px" stroke-dasharray="4 2"/></g><g><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="1px"/></g><g><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="1px"/></g><g><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="1px"/></g><g><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="1px"/></g><g><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="1px"/></g><g><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="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="1.0599999999999992" data-y="-1.5" x="108.92215135036187" y="160.51223744376955" width="219.7305569086987" height="205.08185311478542" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013653085133928572"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="0.8599999999999994" data-y="-4.525" x="108.9221513503619" y="468.1350171159477" width="190.4331493208722" height="32.95958353630476" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013653085133928572"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="5.3097276749999995" data-y="-2.54" x="506.6344593551066" y="299.6749234859453" width="46.83596005791543" height="79.10300048713157" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013653085133928572"/></g><g><rect data-type="rect" data-label="schematic_component_3" data-x="3.8" data-y="-2" x="379.92317153775696" y="263.0531640011622" width="79.10300048713151" height="73.24351896956625" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.013653085133928572"/></g><g><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"/></g><g><rect data-type="rect" data-label="BQ24075-SYSOFF-BEHAVIORAL" data-x="1.459999999999999" data-y="-3.03" x="138.21955893818836" y="368.5238313173376" width="219.73055690869865" height="13.183833414521928" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.013653085133928572"/></g><g><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"/></g><g><rect data-type="rect" data-label="BQ24075-SYSOFF-STEP" data-x="1.0999999999999994" data-y="-4.880000000000001" x="138.21955893818836" y="504.0243414110352" width="166.99522325061102" height="13.183833414521928" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.013653085133928572"/></g><g><rect data-type="rect" data-label="V_SYSOFF" data-x="0.4399999999999994" data-y="-4.17" x="138.21955893818836" y="452.02144294264315" width="70.31377821078357" height="13.183833414521814" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.013653085133928572"/></g><g><rect data-type="rect" data-label="netId: GND
2
+ globalConnNetId: connectivity_net4" data-x="-0.9000000000000012" data-y="-2.2910000000000004" x="59.84899364075247" y="303.4103429533932" width="30.762277967217813" height="35.156889105391826" fill="#00000066" stroke="#000000" stroke-width="0.013653085133928572"/></g><g><rect data-type="rect" data-label="netId: GND
3
+ 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"/></g><g><rect data-type="rect" data-label="netId: GND
4
+ globalConnNetId: connectivity_net4" data-x="3.7395915124999988" data-y="-1.0909999999999997" x="399.6690025975847" y="215.51812018991376" width="30.762277967217813" height="35.15688910539177" fill="#00000066" stroke="#000000" stroke-width="0.013653085133928572"/></g><g><rect data-type="rect" data-label="netId: SYSOFF
5
+ 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"/></g><g><rect data-type="rect" data-label="netId: SYSOFF
6
+ globalConnNetId: connectivity_net2" data-x="-0.8610000000000005" data-y="-4.525" x="47.3243518969567" y="477.2904569871435" width="61.524555934435625" height="14.648703793913114" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013653085133928572"/></g><g><rect data-type="rect" data-label="netId: BAT
7
+ globalConnNetId: connectivity_net0" data-x="2.9099999999999997" data-y="-1.76" x="346.9635880014521" y="264.5180343805536" width="14.648703793913285" height="35.15688910539177" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013653085133928572"/></g><g><rect data-type="rect" data-label="netId: OUT
8
+ globalConnNetId: connectivity_net3" data-x="2.9097957562499994" data-y="-0.8897957562499996" x="336.6945358147353" y="211.03530600179266" width="35.15688910539177" height="14.648703793913228" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.013653085133928572"/></g><g><rect data-type="rect" data-label="netId: BAT_SRC
9
+ 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"/></g><g><circle data-type="point" data-label="U1.1
10
+ x-" data-x="-0.4400000000000013" data-y="-0.9500000000000001" cx="108.92215135036184" cy="222.76922856790083" r="3" fill="hsl(319, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.2
11
+ x-" data-x="-0.4400000000000013" data-y="-1.85" cx="108.92215135036184" cy="288.6883956405104" r="3" fill="hsl(320, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.3
12
+ x+" data-x="2.5599999999999996" data-y="-2" cx="328.65270825906055" cy="299.6749234859453" r="3" fill="hsl(321, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.4
13
+ x+" data-x="2.5599999999999996" data-y="-1" cx="328.65270825906055" cy="226.43140451637913" r="3" fill="hsl(322, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.5
14
+ x-" data-x="-0.4400000000000013" data-y="-2.05" cx="108.92215135036184" cy="303.33709943442364" r="3" fill="hsl(323, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="V_SYSOFF.1
15
+ x-" data-x="-0.4400000000000006" data-y="-4.525" cx="108.92215135036189" cy="484.61480888410006" r="3" fill="hsl(270, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="V_SYSOFF.2
16
+ x+" data-x="2.1599999999999993" data-y="-4.525" cx="299.3553006712341" cy="484.61480888410006" r="3" fill="hsl(271, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="V_BAT.1
17
+ y+" data-x="5.304727675" data-y="-2" cx="529.6862217892165" cy="299.6749234859453" r="3" fill="hsl(191, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="V_BAT.2
18
+ y-" data-x="5.314727674999999" data-y="-3.08" cx="530.4186569789122" cy="378.7779239730769" r="3" fill="hsl(192, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="IBAT_PROBE.1
19
+ x-" data-x="3.26" data-y="-2" cx="379.92317153775696" cy="299.6749234859453" r="3" fill="hsl(72, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="IBAT_PROBE.2
20
+ x+" data-x="4.34" data-y="-2" cx="459.02617202488847" cy="299.6749234859453" r="3" fill="hsl(72, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R_LOAD.1
21
+ y+" data-x="3.7395915124999988" data-y="0.2500000000000002" cx="415.0501415811936" cy="134.87700580442134" r="3" fill="hsl(110, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="R_LOAD.2
22
+ y-" data-x="3.7395915124999988" data-y="-0.8499999999999999" cx="415.0501415811936" cy="215.44487667094418" r="3" fill="hsl(111, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
23
+ 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)"/></g><g><circle data-type="point" data-label="anchorPoint
24
+ 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)"/></g><g><circle data-type="point" data-label="anchorPoint
25
+ 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)"/></g><g><circle data-type="point" data-label="anchorPoint
26
+ 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)"/></g><g><circle data-type="point" data-label="anchorPoint
27
+ 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)"/></g><g><circle data-type="point" data-label="anchorPoint
28
+ orientation: y+" data-x="2.9099999999999997" data-y="-2" cx="354.28793989840875" cy="299.6749234859453" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
29
+ 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)"/></g><g><circle data-type="point" data-label="anchorPoint
30
+ 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)"/></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[
31
+ document.currentScript.parentElement.addEventListener('mousemove', (e) => {
32
+ const svg = e.currentTarget;
33
+ const rect = svg.getBoundingClientRect();
34
+ const x = e.clientX - rect.left;
35
+ const y = e.clientY - rect.top;
36
+ const crosshair = svg.getElementById('crosshair');
37
+ const h = svg.getElementById('crosshair-h');
38
+ const v = svg.getElementById('crosshair-v');
39
+ const coords = svg.getElementById('coordinates');
40
+
41
+ crosshair.style.display = 'block';
42
+ h.setAttribute('x1', '0');
43
+ h.setAttribute('x2', '640');
44
+ h.setAttribute('y1', y);
45
+ h.setAttribute('y2', y);
46
+ v.setAttribute('x1', x);
47
+ v.setAttribute('x2', x);
48
+ v.setAttribute('y1', '0');
49
+ v.setAttribute('y2', '640');
50
+
51
+ // Calculate real coordinates using inverse transformation
52
+ const matrix = {"a":73.24351896956622,"c":0,"e":141.14929969697107,"b":0,"d":-73.24351896956622,"f":153.1878855468129};
53
+ // Manually invert and apply the affine transform
54
+ // Since we only use translate and scale, we can directly compute:
55
+ // x' = (x - tx) / sx
56
+ // y' = (y - ty) / sy
57
+ const sx = matrix.a;
58
+ const sy = matrix.d;
59
+ const tx = matrix.e;
60
+ const ty = matrix.f;
61
+ const realPoint = {
62
+ x: (x - tx) / sx,
63
+ y: (y - ty) / sy // Flip y back since we used negative scale
64
+ }
65
+
66
+ coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
67
+ coords.setAttribute('x', (x + 5).toString());
68
+ coords.setAttribute('y', (y - 5).toString());
69
+ });
70
+ document.currentScript.parentElement.addEventListener('mouseleave', () => {
71
+ document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
72
+ });
73
+ ]]></script></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
+ })