main
John Lauer Corrected Astra ESC routing: native zero-open result, full accounting and voiceover handoff a80479d 23d ago

Video: https://wiki.adom.inc/api/pages/adom/codex/files/docs/videos/astra-routing-esc-g431.mp4

Poster: https://wiki.adom.inc/api/pages/adom/codex/files/docs/videos/astra-routing-esc-g431-poster.jpg

GPT-6 Astra in Codex inside Hydrogen routed the shared Fable-placed ESC G431 fixture on arav-rog, Windows user arav, KiCad 10.0.3 and kicad-bridge 1.0.3. This is an independently calculated routing candidate. No Freerouting or other model's routing plan was used. The component placement and two existing inner planes were preserved. The board was never saved.

Result: 0 new DRC errors, 13 inherited errors, 13 unconnected items. 49 of 59 routable nets are fully connected after native zone refill. 58 distinct nets received copper. The accepted take has 64 successful route_net commits, 1863 native segments, 204 through vias and 1273.411 mm of track centerline. It is not a completed or fabrication-ready ESC.

Planning to the first route_net request, which was a dry run: 260.081 s. Accepted replay routing, first commit request to last response: 361.717 s. That routing measurement includes per-net DRC and the one-second viewing pauses. The full task accounting includes planning refinement, two discarded takes, capture diagnostics, resets and publication through its stated cutoff.

The final video is 384.9 s, silent, 1920-wide H.264/yuv420p with faststart. No cuts, speed changes or fabricated frames were applied to this take. It begins with an eight-second untouched-board hold showing 0 tracks and 0 vias, then the native commits, then validation and a final hold. The recorder's wall-clock duration is 386.784 s. A single Python worker updates an elapsed-time desktop caption to prevent the recorder's sparse-frame behavior; it does not plan or commit routes. The router and its C++ search helper run serially, with zero AI sub-agents.

Method and constraints:

  • Read the live revision and pad/net coordinates, then parsed the fixture's actual copper pad geometry, including custom MOSFET shapes, pad clearances, plated holes and board outline. Used an independent eight-direction A* search over F.Cu and B.Cu, initially at 0.1 mm and then at 0.05 mm for the MCU pin pitch. The small exact-pad-to-grid links can have non-45-degree angles; this is not claimed to be a fully octilinear layout.
  • Kept the specified 0.25 mm signal width and 0.8/0.4 mm through vias. Used 0.5 mm power connections and widened 31 clearance-safe power segments to 1.0 mm. Native DRC preflight remained enabled for every routing call.
  • Reserved individual short plane stubs for the GND and +3V3 SMD pads. Existing through-hole pads reach the inner planes. Signal routes stay on the outer copper layers. The initial file has its stackup and pad/zone settings but no embedded netclass block or sibling project rules; the explicit widths/vias follow John's fixture contract and native default clearance is 0.2 mm. Larger footprint-specific clearances were preserved.
  • Routed short nets first. Each call carried the previous accepted revision and created native undo items. Large branched nets and width groups use multiple calls for the same net, always one net per call.
  • The shunt and INA stay at the supplied placement. GND follows the requested plane-stub rule, so the sense inputs are not a separately routed Kelvin pair. The long fixed-placement sense connection and the remaining gaps require electrical/layout review. This demo does not establish motor-current capacity or thermal qualification.

Remaining connections:

Net Native unconnected endpoints
+VBAT Pad 3 [+VBAT] of U2 on F.Cu to Track [+VBAT] on F.Cu, length 1.000e-06 mm
/DRV_SHA Pad 18 [/DRV_SHA] of U4 on F.Cu to Track [/DRV_SHA] on F.Cu, length 0.6364 mm
/DRV_SHB Track [/DRV_SHB] on F.Cu, length 0.2500 mm to Pad 15 [/DRV_SHB] of U4 on F.Cu
/DRV_SHC Pad 12 [/DRV_SHC] of U4 on F.Cu to Pad 1 [/DRV_SHC] of C21 on F.Cu
/DRV_SHC Pad 12 [/DRV_SHC] of U4 on F.Cu to Track [/DRV_SHC] on F.Cu, length 2.2500 mm
/nRST Pad 7 [/nRST] of U5 on F.Cu to Track [/nRST] on F.Cu, length 3.6000 mm
/SWDIO Track [/SWDIO] on F.Cu, length 0.7500 mm to Pad 37 [/SWDIO] of U5 on F.Cu
/SWCLK Pad 38 [/SWCLK] of U5 on F.Cu to Track [/SWCLK] on F.Cu, length 0.6000 mm
/COMP1_INM_IO1_BEMF_B Track [/COMP1_INM_IO1_BEMF_B] on F.Cu, length 2.6163 mm to Pad 2 [/COMP1_INM_IO1_BEMF_B] of R29 on F.Cu
/COMP1_INM_IO1_BEMF_B Pad 12 [/COMP1_INM_IO1_BEMF_B] of U5 on F.Cu to Pad 2 [/COMP1_INM_IO1_BEMF_B] of R30 on F.Cu
/COMP1_INM_IO2_BEMF_C Pad 8 [/COMP1_INM_IO2_BEMF_C] of U5 on F.Cu to Track [/COMP1_INM_IO2_BEMF_C] on B.Cu, length 0.4243 mm
/COMP1_INM_IO2_BEMF_C Pad 2 [/COMP1_INM_IO2_BEMF_C] of R34 on F.Cu to Pad 8 [/COMP1_INM_IO2_BEMF_C] of U5 on F.Cu
/TIM1_CH1_INHC Pad 30 [/TIM1_CH1_INHC] of U5 on F.Cu to Pad 3 [/TIM1_CH1_INHC] of U4 on F.Cu

These remain after repeated clearance-safe path searches against the fixed placement and accepted copper. This planner did not find the dense MCU/buck escapes and 0.5 mm phase-sense escapes at the gate driver within its 1.5-million-expansion search limit and required 0.8 mm vias. This is a limitation of this candidate and planner, not a proof that the board cannot be fully routed. No pads were moved and no rule was bypassed to force completion.

Native validation: errors=13, unconnected=13, warnings=64, zonesRefilled=True, violationReportMayBeTruncated=False. The inherited error type/item UUID sets match the initial fixture. Error types: {"clearance": 7, "malformed_courtyard": 6}. Full validation and the remaining item UUIDs are attached. Validation refills a disposable live-board snapshot; the editor status bar can still show the larger ratsnest count from its unfilled plane outlines. The reported 13 comes from the native refilled DRC, not that status-bar count.

Rejected, retried and discarded:

  • The desktop's transfer gate initially required approval for write_file_chunk. Waited for the grant, then retried the original transfer to arav-rog.
  • Rejected the initial 0.1 mm planner candidate for missed dense pad escapes. Refined to 0.05 mm, added same-net drill spacing, allowed legal pad-edge starts and reduced the planner's extra clearance margin while keeping the native 0.2 mm requirement. Native dry runs checked the resulting geometry.
  • First complete live pass: 13 inherited errors and 15 unconnected. Discarded its recording: 361.286 s recorder wall time became 201.489267 s of media, with long static intervals missing and early copper updates not reliably visible. Checked the Appearance panel, tried a background refresh key, and focused the canvas. No board geometry changed in those display diagnostics.
  • The reset initially exceeded remove_route's 1024-item limit and was refused. Reset only this task's copper in accepted batches of at most 1000 items, verifying the original zero-copper revision afterward.
  • The second take stopped when a +VBAT width-group exceeded route_net's 128-path limit. The rejected call landed no copper. Preserved that failed take and split the net into permitted batches before the final replay. No final-take route was forced past validation.
  • Two added connection repairs and the 1.0 mm widening groups passed native dry runs. The final take replayed the revised independent geometry from the verified untouched fixture. Both prior takes and all their calls are included in task costs, but excluded from the accepted-take performance metrics.

Comparison data:

{
  "engine": "GPT-6 Astra",
  "model": "gpt-6-astra",
  "board": "ESC G431, shared Fable placement, 149 footprints, 4 copper layers, initial GND and +3V3 planes",
  "desktop": "arav-rog, Windows user arav, KiCad 10.0.3, kicad-bridge 1.0.3",
  "window": [
    "2026-09-13T13:29:56.203Z",
    "2026-09-13T14:13:47.102Z"
  ],
  "windowNote": "Whole routing task through the stated accounting cutoff, including rejected planning candidates, first discarded recording, display/capture diagnostics, replay and publication preparation. Earlier placement and six-net tasks excluded.",
  "planning": {
    "wallSeconds": 260.081,
    "definition": "First kicad_routing_state request to first kicad_route_net request, a dry run",
    "toAcceptedTakeFirstCommitSeconds": 1736.694
  },
  "routing": {
    "commits": 64,
    "wallSeconds": 361.717,
    "firstToLastCompletionSeconds": 357.379,
    "netsTouched": 58,
    "segments": 1863,
    "vias": 204,
    "copperLengthMm": 1273.411,
    "lengthDefinition": "Sum of native track centerline lengths, excluding pads, planes and vertical via barrels",
    "trackWidths": {
      "0.5": 479,
      "1.0": 31,
      "0.25": 1353
    },
    "netsFullyConnected": 49,
    "netsRemaining": [
      "+VBAT",
      "/COMP1_INM_IO1_BEMF_B",
      "/COMP1_INM_IO2_BEMF_C",
      "/DRV_SHA",
      "/DRV_SHB",
      "/DRV_SHC",
      "/SWCLK",
      "/SWDIO",
      "/TIM1_CH1_INHC",
      "/nRST"
    ],
    "liveUnfilledNetsRemaining": [
      "+3V3",
      "+VBAT",
      "/COMP1_INM_IO1_BEMF_B",
      "/COMP1_INM_IO2_BEMF_C",
      "/DRV_SHA",
      "/DRV_SHB",
      "/DRV_SHC",
      "/SWCLK",
      "/SWDIO",
      "/TIM1_CH1_INHC",
      "/nRST",
      "GND"
    ],
    "drcErrors": 13,
    "newDrcErrors": 0,
    "inheritedDrcErrors": 13,
    "unconnected": 13,
    "violationTypes": {
      "clearance": 7,
      "malformed_courtyard": 6
    },
    "zonesRefilled": true,
    "violationReportMayBeTruncated": false
  },
  "tokens": {
    "thread": {
      "input_tokens": 21912080,
      "cached_input_tokens": 21585024,
      "cache_write_input_tokens": 0,
      "output_tokens": 55596,
      "reasoning_output_tokens": 23539,
      "total_tokens": 21967676
    },
    "uncachedInputTokens": 327056,
    "threadTurns": 137,
    "agentLaunches": 0,
    "agents": 0,
    "workerThreads": 1,
    "workerNote": "One Python thread updates the recording elapsed-time caption; routing and C++ path search are serial. No AI sub-agents.",
    "withAgents": {
      "input_tokens": 21912080,
      "cached_input_tokens": 21585024,
      "cache_write_input_tokens": 0,
      "output_tokens": 55596,
      "reasoning_output_tokens": 23539,
      "total_tokens": 21967676
    },
    "accountingSource": "/home/adom/.codex/sessions/2026/09/12/rollout-2026-09-12T12-08-00-01a09697-1b14-7111-9897-63815e098b24.jsonl",
    "accountingCutoff": "2026-09-13T14:13:47.102Z",
    "accountingNote": "input_tokens includes cached_input_tokens. Reasoning output is included in output_tokens. No cache writes reported. Reporting after cutoff excluded.",
    "maxRequestInputTokens": 236987
  },
  "usdApiEquivalent": {
    "thread": 27.635384,
    "withAgents": 27.635384,
    "priceBasis": "OpenAI GPT-6 Astra model page checked 2026-09-13: $10 uncached input, $1 cached input, $50 output, $12.50 cache writes per million tokens (no writes reported). Standard API equivalent. Requests above 272K input use 2x input/cache and 1.5x output prices.",
    "priceUrl": "https://developers.openai.com/api/docs/models/gpt-6-astra"
  },
  "planShare": {
    "planUsdPerMonth": 200,
    "threadPercent": 13.817692,
    "withAgentsPercent": 13.817692,
    "note": "API-equivalent cost divided by $200, not actual subscription billing or quota consumption"
  }
}

Prices are the standard API-equivalent rates on OpenAI's GPT-6 Astra model page, checked 2026-09-13. The percentage of $200 is arithmetic, not actual subscription billing or quota usage.

Source and editorial handoff:

Setup and publication:

adom-codex context
adom-wiki pkg install adom/kicad-bridge
adom-bridge --ai-thread "Astra ESC routing video" targets
adom-bridge --ai-thread "Astra ESC routing video" --target arav-rog kicad_status '{}'
adom-bridge --ai-thread "Astra ESC routing video" --target arav-rog kicad_close '{}'
adom-bridge --ai-thread "Astra ESC routing video" --target arav-rog kicad_ipc_api '{}'
curl -sLo esc-g431-fable-placed-planes.kicad_pcb https://wiki.adom.inc/api/pages/adom/kicad-bridge/files/demo/routing/esc/esc-g431-fable-placed-planes.kicad_pcb
adom-wiki repo push adom/codex --files docs/videos/astra-routing-esc-g431.mp4 docs/videos/astra-routing-esc-g431-poster.jpg -m "Astra routing video: ESC G431 through kicad_route_net"
curl -s -o /dev/null -w "%{http_code}" https://wiki.adom.inc/api/pages/adom/codex/files/docs/videos/astra-routing-esc-g431.mp4

Cleanup: KiCad closed with discardChanges:true. The fixture was pulled back and its SHA-256 matches the original public download. The published MP4 was downloaded again, decoded and checked against the local hash.