tscircuit / tscircuit/core

auto selects pipeline7 for late routing phases with preloaded traces and exhausts iterations

Open
#3,312 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
58
Forks
203
Avg merge
7h 39m
Merged PRs (30d)
286

Description

Summary

A later autorouting phase from an RV1106G2 board contains 4 remaining connections, 389 obstacles, and 205 traces produced by earlier phases. The auto preset reaches TscircuitAutorouter without an explicit autorouterVersion, so core selects AutoroutingPipelineSolver7_MultiGraph.

Pipeline 7 repeatedly rips up and retries the four routes until it exhausts its iteration budget. The same exact Simple Route JSON is solved by AutoroutingPipelineSolver9_PreloadedTraceGraph.

Reproduction

  1. Use the byte-identical SRJ fixture in tscircuit/core#3292.
  2. Instantiate the default/auto TscircuitAutorouter, or run the fixture directly with AutoroutingPipelineSolver7_MultiGraph.
  3. Observe that core selects Pipeline 7 and the full solve fails.
  4. Run the same input with AutoroutingPipelineSolver9_PreloadedTraceGraph, as demonstrated in tscircuit/tscircuit-autorouter#2168.

Core fixture and labeled snapshot: https://github.com/tscircuit/core/pull/3292

Autorouter fixture and solved snapshot: https://github.com/tscircuit/tscircuit-autorouter/pull/2168

Observed behavior

  • Pipeline 7 fails with all 4 remaining connections unsolved.
  • Approximately 2,000,000 graph iterations are performed.
  • 57,975 global rerips are performed.
  • Runtime is approximately 112–155 seconds.
  • The public auto configuration gives no indication that a preloaded-trace-aware pipeline is needed.

Expected behavior

autorouter="auto" should complete a later routing phase containing existing traces, without requiring the board author to know and explicitly select an internal beta pipeline.

Comparison

On the same SRJ input, Pipeline 9:

  • solves all 4 remaining connections;
  • preserves the 205 preloaded traces and returns 209 total traces;
  • completes in approximately 106,809 iterations.

Likely fix area

The selection occurs in lib/utils/autorouting/CapacityMeshAutorouter.ts. A possible direction is to select the preloaded-trace-aware solver when auto receives an input with existing traces. Pipeline 9 should not be made the unconditional global default because other preloaded-trace cases, including autorouter bugreport91, still need coverage or repair.

A regression should verify both:

  • late-phase inputs with preloaded traces choose a solver that completes this fixture; and
  • ordinary inputs without preloaded traces retain their existing behavior.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in lib/utils/autorouting/CapacityMeshAutorouter.ts and inspect how auto selects a solver when existing traces are present. Reproduce with the byte-identical SRJ fixture from tscircuit/core#3292 and compare Pipeline 7 with the solved Pipeline 9 case in tscircuit/tscircuit-autorouter#2168. Done means the late-phase fixture completes while ordinary inputs retain their current behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
backend, testing
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.