← Commit history

Restore docs/esc-demo.md from PR #8 and two docs to the maintainer's versions

John Lauer ·91102a3fac ·18d ago ·parent 6984b95
3 files changed +17−2
docs/esc-demo.md+11−2
@@ -96,11 +96,19 @@ All stats: [routing-stats.json](https://wiki.adom.inc/api/pages/adom/kicad-bridg  ### GPT-6 Astra in Codex -PENDING. The prompt Astra runs is [esc-routing-astra-prompt.md](https://wiki.adom.inc/api/pages/adom/kicad-bridge/files/docs/esc-routing-astra-prompt.md), now carrying the 100% rule and the paste-to-issue clock; it reports in a show-and-tell issue on this page and its take is added to the video and the chart when it lands.+Completed and reported in [issue 94](https://wiki.adom.inc/adom/kicad-bridge/issues/94). This routing-only experiment kept Fable's placement and two inherited planes. Native validation reported zero unconnected items, zero new errors and the 13 inherited errors. Its 67 accepted commits created 2,759 segments and 254 vias, with 1,610.893 mm of track centerline. The accepted replay took 388.74 seconds; the historical first-request-to-report interval was 121 minutes and includes retries and publication. The human paste timestamp was not recorded, so this is not the later AI Flow session clock.++[Watch Astra's routing-only take](https://wiki.adom.inc/api/pages/adom/codex/files/docs/videos/astra-routing-esc-g431.mp4?v=646bdfb7ecd6) (414.87 seconds, original unaccelerated recording). Its full logs and rejected takes are on issue 94. This does not certify manufacturing, current capacity or thermal performance.++### Astra's separate independent placement, routing and pours++[Issue 96](https://wiki.adom.inc/adom/kicad-bridge/issues/96) contains the subsequent independently placed and routed ESC, its source, native checks and original accounting. [Watch that separate take](https://wiki.adom.inc/api/pages/adom/codex/files/docs/videos/astra-esc-independent.mp4). It is not another row in the fixed-placement routing comparison: all 122 movable parts were independently placed, while the 27 interface contacts remained fixed.++The electrical follow-up on issue 96 found power-path loss and thermal concerns despite complete connectivity. Preserve those findings alongside the video; zero unconnected and zero new DRC errors are not a motor-current rating. The later measured [AI Flow run](https://wiki.adom.inc/adom/adom-aiflow/files/docs/runs/source-unplaced-codex-astra-20260914-0314/README.md) is a third, separately timed workflow, and its post-delivery component and silkscreen work must not be folded into these historical timings.  ### The routing video -Freerouting, Fable's rejected take and Fable's loop to 100%, cut to the action in real time, narrated to the measured length, the chart at the end shows the wall clock from the prompt to the routed board. Astra's take is added when its issue lands.+Freerouting, Fable's rejected take and Fable's loop to 100%, cut to the action in real time, narrated to the measured length, the chart at the end shows the wall clock from the prompt to the routed board. The embedded cut below remains the original Freerouting/Fable comparison. Astra's completed takes are linked above with their distinct scope and accounting; they are not silently presented as part of this older cut.  <video width="100%" controls poster="/blob/app/kicad-bridge/docs/videos/esc-routing-poster.jpg?v=3">   <source src="/blob/app/kicad-bridge/docs/videos/esc-routing.mp4?v=3" type="video/mp4"></video>@@ -110,3 +118,4 @@ Freerouting, Fable's rejected take and Fable's loop to 100%, cut to the action i ## How the recording is made without disturbing anyone  Every operation runs in the background over KiCad's IPC API, menu commands and UI Automation; the user's mouse and focus are never touched. Recording on a user's box uses KiCad's fallback canvas and a window capture of the covered editor, which was verified on arav-rog with the editor behind the user's Hydrogen window. For these takes, on a test box that is ours, the editor is brought to the front once so the OpenGL canvas gives the best picture. The rules are in the gang-takes skill of the adom-video-post package.+
docs/esc-routing-astra-prompt.md+2
@@ -18,6 +18,8 @@ Rules that are not optional: 4. Read `kicad_routing_state` and plan the routing yourself. Rules of the board: track 0.25 mm and clearance 0.2 mm by default (read the file's setup and netclass blocks and use them), via 0.8 mm with a 0.4 mm drill; signal traces on F.Cu and B.Cu with vias between them; the three phase nets (/DRV_SHA, /DRV_SHB, /DRV_SHC), +VBAT and the MOSFET drain and source connections want 1.0 mm tracks where the space allows and at least 0.5 mm; GND and +3V3 pads are NOT routed as traces: each such SMD pad gets a short stub and a via to its plane (In1.Cu for GND, In2.Cu for +3V3), thru-hole pads already reach the planes. Keep the current sense path (shunt to INA) short and paired. Route the short nets first. A `drc_rejected` means your plan crossed something: change the plan, do not force it. Write your own router or plan by hand; do not copy Claude's plan (it is on the page). 5. Record before the first commit: `desktop_record_start {"monitor": 0, "audio": false, "fps": 30, "reason": "Astra routing the ESC G431", "maxDurationMs": 1800000}`. Then land the plan with `kicad_route_net`, one net per call, passing the previous reply's revision as `expectedRevision`, about a second between calls so a viewer can follow. Do not speed anything up. 6. Finish with `kicad_routing_validate`: it must report the errors and unconnected count truthfully; the take is done only at 0 new errors and 0 unconnected (the 13 inherited library errors on this board, six malformed MOSFET courtyards and seven U2 pad clearances, are known and do not count). Unconnected items are not a result, they are a failed take: do what a human does until the ratsnest is gone. Route the failed nets first, use smaller vias where the rules allow (0.6 mm with a 0.3 mm drill is legal here; keep 0.8/0.4 on +VBAT and the phase nets), rip up and reroute, and when the same pins keep failing go back to placement: move the parts that block the escapes (test points, indicator LEDs and pull-ups out of the 2.5 mm band beyond the MCU's pin rows, the crystal and its two capacitors next to the oscillator pins) with `kicad_move_footprint`, then route again. The kicad-place-route-loop skill in the kicad-bridge package is the checklist. Report every loop you made, and keep the clock running through all of it. Then `desktop_record_stop`, `pull_file` the MP4, check frames at the start, middle and end, transcode to 1920 wide H.264 (`ffmpeg -i in.mp4 -vf scale=1920:-2 -c:v libx264 -crf 22 -pix_fmt yuv420p -movflags +faststart -an out.mp4`), make a poster, push both to the adom/codex page under docs/videos/ (`adom-wiki repo push adom/codex --files ...`), and confirm the MP4 URL returns 200.+6b. Routed is not finished: copper pours come next, before the numbers. Install the kicad-bridge skills package again (`adom-wiki pkg install adom/kicad-bridge`) and read the kicad-copper-pours skill; it says which nets get a pour (ground on both outer layers, the +VBAT rail block, one compact pour per phase, the GND_OUT return through the shunt), which never do (the bootstrap and gate-drive nodes, the crystal, the BEMF dividers and comparator inputs, the sense taps), the priorities, and the offline gate (`tools/add_pours.py` on the kicad-bridge page, then KiCad's DRC). The bridge verbs are new in 1.0.5 (insiders): `kicad_add_zone {filePath, expectedRevision, zones:[{net, layers, polygon, priority, connection}]}` lands the pours as one undo step after a filled DRC preflight, and `kicad_zone_state {filePath, refill:true}` reads back the filled copper per layer, which is the ablation metric (InstaPCB mills the copper away; every square millimetre a pour keeps is copper not removed). On arav-rog install 1.0.4 first: `bridge_install {"manifestUrl":"https://wiki.adom.inc/api/v1/pages/insiders/files/kicad-bridge/version.json","force":true}` and confirm `kicad_status` says 1.0.5. Report the filled copper per layer before and after the pours, and every net you chose not to pour and why. If a pour is choked by a trace or a part, move it (the loop skill) and route again; the clock keeps running.+ 7. The numbers, all of them, in the issue. First and most important: (a0) the wall clock from the moment John pasted this prompt to the moment the issue is filed, in minutes. Note the paste time in UTC as your very first action and put both timestamps in the issue; this is the number that goes on the chart, because it is what the human waited. Then, in the shape of https://wiki.adom.inc/api/pages/adom/kicad-bridge/files/demo/placement/fable/fable-stats.json: (a) planning time, first `kicad_routing_state` to first `kicad_route_net`, wall clock; (b) routing time, first commit to last, wall clock, and the number of commits, nets routed, segments, vias and total copper length in mm; (c) the validate result: errors, unconnected, violation types; (d) your session's token usage for this task (input, cached input, output) and the model name; (e) the dollar cost at OpenAI's published per-token price for the model (state the price and where it is published) and that cost as a percentage of a $200 per month plan; (f) sub-agents or worker threads spawned (zero is fine); (g) the bridge calls with timestamps; (h) what you rejected or retried, including any take you discarded. 8. File the issue: `adom-wiki issue create adom/kicad-bridge --category show-and-tell --title "Astra routing video: ESC G431 through kicad_route_net" --body "<video URL, poster URL, the numbers in 7, the exact commands>"`. No em dashes. 9. Close KiCad with `kicad_close {"discardChanges": true}` and tell John the issue URL and the video URL.
docs/rust-port-plan.md+4
@@ -305,3 +305,7 @@ Total: roughly 18 to 21 weeks of one AI thread's time with human test time on th - 2026-09-13: John's correction: the headline time on every chart and table is the wall clock from his prompt to the delivered result, not the seconds on the board. Placement: Fable 119.5 min (18:41:42 to 20:41:10 UTC), Astra 15.9 min (20:41:10 to issue filed 20:57:02). Routing: Freerouting 3.8 min (one call), Fable 228 min (20:41:10 to 00:29:15 UTC). Both videos rebuilt with the new charts (?v=2); both Astra prompts now ask for the paste-to-issue wall clock as item (a0).  - 2026-09-13: John rejected the routing take with 7 unconnected ("100 percent or it is pointless"). The loop: signal vias 0.6/0.3 per net (7 to 2), then a placement adjustment of 13 parts (new tools/pack_moves.py and tools/move_footprints.py, courtyard-exact), router 0 failed, offline gate 0 new and 0 unconnected, live take on ConfRoomROG: 1 move batch + 114 commits in 570 s, validate 0 unconnected. New skill kicad-place-route-loop in the package; the autorouting and root skills point at it; Astra told on issue #92 and in the routing prompt. Wall clock 5 h 34 min across both takes; $273.69 with agents.++- 2026-09-13 (evening): copper pours round on the ESC. Bridge 1.0.5: kicad_add_zone (copper zones as one Undo step after a filled DRC preflight on a snapshot, created through CreateItems with hand-encoded Zone protos, then a native fill; KiCad 10 implements RefillZones only for the empty list, so the bridge fills all) and kicad_zone_state (raw zone protos decoded for filled area per layer, the ablation metric). 1.0.6: rule-area keepouts (type keepout, copperPour/tracks/vias/pads/footprints). 1.0.7: kicad_remove_zone, zone types named (copper, keepout, teardrop). All insiders, staged on ConfRoomROG. Skills: kicad-copper-pours (1.0.141, 1.0.142 with the Kelvin recipe and the preflight lessons). Offline: tools/add_pours.py; demo: pours_plan.py, pours_live.py. First pours pass refused for starved_thermal (16 pads) and zones_intersect; the sense amplifier ground input was a plane stub, not a Kelvin tap: shunt and amplifier moved to the return contact, router routes dedicated taps first, keepouts along them. The headless service-kicad DRC does not refill zones, so the live verb preflight is the pours gate.++- 2026-09-13: TODO for the week of 2026-09-14, decided with John: adom-boardflow, the flow app (plan/take negotiation, place, route, pour, analyze, sim, gate, land, measure) as a compiled binary with hints, packaging tonight's Python first, then a Rust router core. Tracked as a feature-request issue on this page; not started.