From b546c68dd6599f93498eb2f8248b988e3c6ef48c Mon Sep 17 00:00:00 2001 From: AnasSarkiz Date: Wed, 29 Jul 2026 07:48:13 +0200 Subject: [PATCH 1/3] Pass allowViaInPad to autorouter --- .../primitive-components/Group/Group.ts | 27 ++++++++----- package.json | 2 +- .../autorouter-allow-via-in-pad-pcb.snap.svg | 1 + .../autorouter-allow-via-in-pad.test.tsx | 39 +++++++++++++++++++ 4 files changed, 58 insertions(+), 11 deletions(-) create mode 100644 tests/features/__snapshots__/autorouter-allow-via-in-pad-pcb.snap.svg create mode 100644 tests/features/autorouter-allow-via-in-pad.test.tsx diff --git a/lib/components/primitive-components/Group/Group.ts b/lib/components/primitive-components/Group/Group.ts index 4e5b3bd5c..1f2a38ed4 100644 --- a/lib/components/primitive-components/Group/Group.ts +++ b/lib/components/primitive-components/Group/Group.ts @@ -784,16 +784,19 @@ export class Group = typeof groupProps> { method: "POST", body: JSON.stringify({ - input_simple_route_json: getSimpleRouteJsonFromCircuitJson({ - db, - minTraceWidth: Number(props.minTraceWidth ?? 0.15), - nominalTraceWidth: - preferredTraceWidth != null - ? Number(preferredTraceWidth) - : undefined, - subcircuit_id: this.subcircuit_id, - subcircuitComponent: this, - }).simpleRouteJson, + input_simple_route_json: { + ...getSimpleRouteJsonFromCircuitJson({ + db, + minTraceWidth: Number(props.minTraceWidth ?? 0.15), + nominalTraceWidth: + preferredTraceWidth != null + ? Number(preferredTraceWidth) + : undefined, + subcircuit_id: this.subcircuit_id, + subcircuitComponent: this, + }).simpleRouteJson, + allowViaInPad: autorouterConfig.allowViaInPad, + }, subcircuit_id: this.subcircuit_id!, }), headers: { @@ -1074,6 +1077,10 @@ export class Group = typeof groupProps> simpleRouteJson, routingPhasePlan.drcTolerances, ) + simpleRouteJson = { + ...simpleRouteJson, + allowViaInPad: phaseAutorouterConfig.allowViaInPad, + } if ( (hasPhasedAutorouting || isReroutePhase) && diff --git a/package.json b/package.json index cdc963937..e458367e6 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "@tsci/tscircuit.ti": "github:tscircuit/ti#57e314be4b2b06bc546d4def7453e619604d1157", "@tscircuit/alphabet": "0.0.25", "@tscircuit/breakout-point-solver": "github:tscircuit/breakout-point-solver#bac9629", - "@tscircuit/capacity-autorouter": "^0.0.718", + "@tscircuit/capacity-autorouter": "^0.0.722", "@tscircuit/checks": "0.0.146", "@tscircuit/circuit-json-util": "^0.0.101", "@tscircuit/common": "^0.0.20", diff --git a/tests/features/__snapshots__/autorouter-allow-via-in-pad-pcb.snap.svg b/tests/features/__snapshots__/autorouter-allow-via-in-pad-pcb.snap.svg new file mode 100644 index 000000000..4965da517 --- /dev/null +++ b/tests/features/__snapshots__/autorouter-allow-via-in-pad-pcb.snap.svg @@ -0,0 +1 @@ +R1R2allowViaInPad enabled \ No newline at end of file diff --git a/tests/features/autorouter-allow-via-in-pad.test.tsx b/tests/features/autorouter-allow-via-in-pad.test.tsx new file mode 100644 index 000000000..5525bce7c --- /dev/null +++ b/tests/features/autorouter-allow-via-in-pad.test.tsx @@ -0,0 +1,39 @@ +import { expect, test } from "bun:test" +import type { SimpleRouteJson } from "lib/utils/autorouting/SimpleRouteJson" +import { getTestFixture } from "tests/fixtures/get-test-fixture" + +test("board autorouter passes allowViaInPad to SimpleRouteJson", async () => { + const { circuit } = getTestFixture() + let autorouterInput: SimpleRouteJson | undefined + + circuit.on("autorouting:start", ({ simpleRouteJson }) => { + autorouterInput = simpleRouteJson + }) + + circuit.add( + + + + + + , + ) + + await circuit.renderUntilSettled() + + expect(autorouterInput?.allowViaInPad).toBe(true) + expect(circuit).toMatchPcbSnapshot(import.meta.path) +}) From d15258f697687d19535d8b86eb8eebc75d17532f Mon Sep 17 00:00:00 2001 From: AnasSarkiz Date: Wed, 29 Jul 2026 08:15:28 +0200 Subject: [PATCH 2/3] Follow SimpleRouteJson option assignment pattern --- .../primitive-components/Group/Group.ts | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/lib/components/primitive-components/Group/Group.ts b/lib/components/primitive-components/Group/Group.ts index 1f2a38ed4..1d55aa93d 100644 --- a/lib/components/primitive-components/Group/Group.ts +++ b/lib/components/primitive-components/Group/Group.ts @@ -779,24 +779,24 @@ export class Group = typeof groupProps> if (this.props.autorouter?.inputFormat === "simplified") { const preferredTraceWidth = props.defaultTraceWidth ?? props.nominalTraceWidth + const { simpleRouteJson } = getSimpleRouteJsonFromCircuitJson({ + db, + minTraceWidth: Number(props.minTraceWidth ?? 0.15), + nominalTraceWidth: + preferredTraceWidth != null + ? Number(preferredTraceWidth) + : undefined, + subcircuit_id: this.subcircuit_id, + subcircuitComponent: this, + }) + simpleRouteJson.allowViaInPad = autorouterConfig.allowViaInPad + const { autorouting_result } = await fetchWithDebug( `${serverUrl}/autorouting/solve`, { method: "POST", body: JSON.stringify({ - input_simple_route_json: { - ...getSimpleRouteJsonFromCircuitJson({ - db, - minTraceWidth: Number(props.minTraceWidth ?? 0.15), - nominalTraceWidth: - preferredTraceWidth != null - ? Number(preferredTraceWidth) - : undefined, - subcircuit_id: this.subcircuit_id, - subcircuitComponent: this, - }).simpleRouteJson, - allowViaInPad: autorouterConfig.allowViaInPad, - }, + input_simple_route_json: simpleRouteJson, subcircuit_id: this.subcircuit_id!, }), headers: { @@ -1077,10 +1077,7 @@ export class Group = typeof groupProps> simpleRouteJson, routingPhasePlan.drcTolerances, ) - simpleRouteJson = { - ...simpleRouteJson, - allowViaInPad: phaseAutorouterConfig.allowViaInPad, - } + simpleRouteJson.allowViaInPad = phaseAutorouterConfig.allowViaInPad if ( (hasPhasedAutorouting || isReroutePhase) && From 04df3a61810385b9e82461a92bec97a4b36c5464 Mon Sep 17 00:00:00 2001 From: AnasSarkiz Date: Wed, 29 Jul 2026 08:22:43 +0200 Subject: [PATCH 3/3] Remove allowViaInPad snapshot coverage --- .../__snapshots__/autorouter-allow-via-in-pad-pcb.snap.svg | 1 - tests/features/autorouter-allow-via-in-pad.test.tsx | 7 ------- 2 files changed, 8 deletions(-) delete mode 100644 tests/features/__snapshots__/autorouter-allow-via-in-pad-pcb.snap.svg diff --git a/tests/features/__snapshots__/autorouter-allow-via-in-pad-pcb.snap.svg b/tests/features/__snapshots__/autorouter-allow-via-in-pad-pcb.snap.svg deleted file mode 100644 index 4965da517..000000000 --- a/tests/features/__snapshots__/autorouter-allow-via-in-pad-pcb.snap.svg +++ /dev/null @@ -1 +0,0 @@ -R1R2allowViaInPad enabled \ No newline at end of file diff --git a/tests/features/autorouter-allow-via-in-pad.test.tsx b/tests/features/autorouter-allow-via-in-pad.test.tsx index 5525bce7c..c77fdfbef 100644 --- a/tests/features/autorouter-allow-via-in-pad.test.tsx +++ b/tests/features/autorouter-allow-via-in-pad.test.tsx @@ -23,17 +23,10 @@ test("board autorouter passes allowViaInPad to SimpleRouteJson", async () => { - , ) await circuit.renderUntilSettled() expect(autorouterInput?.allowViaInPad).toBe(true) - expect(circuit).toMatchPcbSnapshot(import.meta.path) })