2987 installs in the last 30 days
2026-10-14: 201 installs2026-10-15: 12 installs2026-10-16: 5 installs2026-10-17: 19 installs2026-10-18: 5 installs2026-10-19: 11 installs2026-10-20: 70 installs2026-10-21: 257 installs2026-10-22: 163 installs2026-10-23: 37 installs2026-10-24: 4 installs2026-10-25: 12 installs2026-10-26: 36 installs2026-10-27: 294 installs2026-10-28: 352 installs2026-10-29: 354 installs2026-10-30: 344 installs2026-10-31: 91 installs2026-11-01: 18 installs2026-11-02: 110 installs2026-11-03: 232 installs2026-11-04: 11 installs2026-11-05: 8 installs2026-11-06: 7 installs2026-11-07: 5 installs2026-11-08: 7 installs2026-11-09: 10 installs2026-11-10: 21 installs2026-11-11: 201 installs2026-11-12: 11 installs

Packages 499

Installable versions you add with adom-wiki. Semver and dist-tags resolve which one you get; the latest is pinned on top.

Latest v1.0.194 latest Verified
adom-wiki pkg install adom/[email protected]
raw: tarball 493 KB ·

All versions

v1.0.194 latest Verified 2026-11-02
adom-wiki pkg install adom/[email protected]
raw: tarball 493 KB ·
v1.0.193 Verified 2026-11-02
adom-wiki pkg install adom/[email protected]
raw: tarball 492 KB ·
v1.0.192 Verified 2026-10-31
adom-wiki pkg install adom/[email protected]
raw: tarball 489 KB ·
v1.0.191 Verified 2026-10-31
adom-wiki pkg install adom/[email protected]
raw: tarball 488 KB ·
v1.0.190 Verified 2026-10-30
adom-wiki pkg install adom/[email protected]
raw: tarball 488 KB ·
v1.0.189 Verified 2026-10-30
adom-wiki pkg install adom/[email protected]
raw: tarball 488 KB ·
v1.0.188 Verified 2026-10-30
adom-wiki pkg install adom/[email protected]
raw: tarball 484 KB ·
v1.0.187 Verified 2026-10-30
adom-wiki pkg install adom/[email protected]
raw: tarball 482 KB ·
v1.0.186 Verified 2026-10-30
adom-wiki pkg install adom/[email protected]
raw: tarball 482 KB ·
v1.0.185 Verified 2026-10-30
adom-wiki pkg install adom/[email protected]
raw: tarball 481 KB ·
v1.0.184 Verified 2026-10-30
adom-wiki pkg install adom/[email protected]
raw: tarball 481 KB ·
v1.0.183 Verified 2026-10-30
adom-wiki pkg install adom/[email protected]
raw: tarball 479 KB ·
v1.0.182 Verified 2026-10-30
adom-wiki pkg install adom/[email protected]
raw: tarball 479 KB ·
v1.0.181 Verified 2026-10-29
adom-wiki pkg install adom/[email protected]
raw: tarball 478 KB ·
v1.0.180 Verified 2026-10-29
adom-wiki pkg install adom/[email protected]
raw: tarball 477 KB ·
v1.0.179 Verified 2026-10-29
adom-wiki pkg install adom/[email protected]
raw: tarball 477 KB ·
v1.0.178 Verified 2026-10-29
adom-wiki pkg install adom/[email protected]
raw: tarball 476 KB ·
v1.0.177 Verified 2026-10-29
adom-wiki pkg install adom/[email protected]
raw: tarball 475 KB ·
v1.0.176 Verified 2026-10-29
adom-wiki pkg install adom/[email protected]
raw: tarball 475 KB ·
v1.0.175 Verified 2026-10-29
adom-wiki pkg install adom/[email protected]
raw: tarball 473 KB ·
v1.0.174 Verified 2026-10-29
adom-wiki pkg install adom/[email protected]
raw: tarball 473 KB ·
v1.0.173 Verified 2026-10-29
adom-wiki pkg install adom/[email protected]
raw: tarball 473 KB ·
v1.0.172 Verified 2026-10-29
adom-wiki pkg install adom/[email protected]
raw: tarball 473 KB ·
v1.0.171 Verified 2026-10-28
adom-wiki pkg install adom/[email protected]
raw: tarball 471 KB ·
v1.0.170 Verified 2026-10-28
adom-wiki pkg install adom/[email protected]
raw: tarball 471 KB ·
v1.0.169 Verified 2026-10-28
adom-wiki pkg install adom/[email protected]
raw: tarball 471 KB ·
v1.0.168 Verified 2026-10-28
adom-wiki pkg install adom/[email protected]
raw: tarball 471 KB ·
v1.0.167 Verified 2026-10-28
adom-wiki pkg install adom/[email protected]
raw: tarball 471 KB ·
v1.0.166 Verified 2026-10-28
adom-wiki pkg install adom/[email protected]
raw: tarball 470 KB ·
v1.0.165 Verified 2026-10-28
adom-wiki pkg install adom/[email protected]
raw: tarball 469 KB ·
v1.0.164 Verified 2026-10-28
adom-wiki pkg install adom/[email protected]
raw: tarball 468 KB ·
v1.0.163 Verified 2026-10-28
adom-wiki pkg install adom/[email protected]
raw: tarball 468 KB ·
v1.0.162 Verified 2026-10-28
adom-wiki pkg install adom/[email protected]
raw: tarball 465 KB ·
v1.0.161 Verified 2026-10-27
adom-wiki pkg install adom/[email protected]
raw: tarball 462 KB ·
v1.0.160 Verified 2026-10-27
adom-wiki pkg install adom/[email protected]
raw: tarball 458 KB ·
v1.0.159 Verified 2026-10-27
adom-wiki pkg install adom/[email protected]
raw: tarball 457 KB ·
v1.0.158 Verified 2026-10-27
adom-wiki pkg install adom/[email protected]
raw: tarball 456 KB ·
v1.0.157 Verified 2026-10-27
adom-wiki pkg install adom/[email protected]
raw: tarball 452 KB ·
v1.0.156 Verified 2026-10-27
adom-wiki pkg install adom/[email protected]
raw: tarball 451 KB ·
v1.0.155 Verified 2026-10-26
adom-wiki pkg install adom/[email protected]
raw: tarball 430 KB ·
v1.0.154 Verified 2026-10-26
adom-wiki pkg install adom/[email protected]
raw: tarball 430 KB ·
v1.0.153 Verified 2026-10-26
adom-wiki pkg install adom/[email protected]
raw: tarball 430 KB ·
v1.0.152 Verified 2026-10-01
adom-wiki pkg install adom/[email protected]
raw: tarball 425 KB ·
v1.0.151 Verified 2026-09-29
adom-wiki pkg install adom/[email protected]
raw: tarball 425 KB ·
v1.0.150 Verified 2026-09-23
adom-wiki pkg install adom/[email protected]
raw: tarball 424 KB ·
v1.0.149 Verified 2026-09-22
adom-wiki pkg install adom/[email protected]
raw: tarball 422 KB ·
v1.0.148 Verified 2026-09-21
adom-wiki pkg install adom/[email protected]
raw: tarball 422 KB ·
v1.0.147 Verified 2026-09-21
adom-wiki pkg install adom/[email protected]
raw: tarball 421 KB ·
v1.0.146 Verified 2026-09-20
adom-wiki pkg install adom/[email protected]
raw: tarball 420 KB ·
v1.0.145 Verified 2026-09-20
adom-wiki pkg install adom/[email protected]
raw: tarball 419 KB ·
v1.0.144 Verified 2026-09-20
adom-wiki pkg install adom/[email protected]
raw: tarball 414 KB ·
v1.0.143 Verified 2026-09-19
adom-wiki pkg install adom/[email protected]
raw: tarball 412 KB ·
v1.0.142 Verified 2026-09-13
adom-wiki pkg install adom/[email protected]
raw: tarball 408 KB ·
v1.0.141 Verified 2026-09-13
adom-wiki pkg install adom/[email protected]
raw: tarball 407 KB ·
v1.0.140 Verified 2026-09-13
adom-wiki pkg install adom/[email protected]
raw: tarball 403 KB ·
v1.0.139 Verified 2026-09-12
adom-wiki pkg install adom/[email protected]
raw: tarball 397 KB ·
v1.0.138 Verified 2026-09-12
adom-wiki pkg install adom/[email protected]
raw: tarball 394 KB ·
v1.0.137 Verified 2026-09-12
adom-wiki pkg install adom/[email protected]
raw: tarball 393 KB ·
v1.0.136 Verified 2026-09-09
adom-wiki pkg install adom/[email protected]
raw: tarball 388 KB ·
v1.0.135 Verified 2026-09-09
adom-wiki pkg install adom/[email protected]
raw: tarball 388 KB ·
v1.0.134 Verified 2026-09-08
adom-wiki pkg install adom/[email protected]
raw: tarball 388 KB ·
v1.0.133 Verified 2026-09-07
adom-wiki pkg install adom/[email protected]
raw: tarball 388 KB ·
v1.0.132 Verified 2026-09-07
adom-wiki pkg install adom/[email protected]
raw: tarball 388 KB ·
v1.0.131 Verified 2026-09-07
adom-wiki pkg install adom/[email protected]
raw: tarball 385 KB ·
v1.0.130 Verified 2026-09-07
adom-wiki pkg install adom/[email protected]
raw: tarball 385 KB ·
v1.0.129 Verified 2026-09-07
adom-wiki pkg install adom/[email protected]
raw: tarball 385 KB ·
v1.0.128 Verified 2026-09-07
adom-wiki pkg install adom/[email protected]
raw: tarball 383 KB ·
v1.0.127 Verified 2026-09-07
adom-wiki pkg install adom/[email protected]
raw: tarball 382 KB ·
v1.0.126 Verified 2026-09-06
adom-wiki pkg install adom/[email protected]
raw: tarball 379 KB ·
v1.0.125 Verified 2026-09-05
adom-wiki pkg install adom/[email protected]
raw: tarball 380 KB ·
v1.0.124 Verified 2026-09-05
adom-wiki pkg install adom/[email protected]
raw: tarball 380 KB ·
v1.0.122 Verified 2026-09-05
adom-wiki pkg install adom/[email protected]
raw: tarball 377 KB ·
v1.0.121 Verified 2026-09-05
adom-wiki pkg install adom/[email protected]
raw: tarball 377 KB ·
v1.0.120 Verified 2026-09-05
adom-wiki pkg install adom/[email protected]
raw: tarball 377 KB ·
v1.0.119 Verified 2026-09-05
adom-wiki pkg install adom/[email protected]
raw: tarball 336 KB ·
v1.0.118 Verified 2026-09-05
adom-wiki pkg install adom/[email protected]
raw: tarball 336 KB ·
v1.0.117 Verified 2026-09-05
adom-wiki pkg install adom/[email protected]
raw: tarball 336 KB ·
v1.0.116 Verified 2026-09-04
adom-wiki pkg install adom/[email protected]
raw: tarball 333 KB ·
v1.0.115 Verified 2026-09-04
adom-wiki pkg install adom/[email protected]
raw: tarball 333 KB ·
v1.0.114 Verified 2026-09-04
adom-wiki pkg install adom/[email protected]
raw: tarball 333 KB ·
v1.0.113 Verified 2026-09-04
adom-wiki pkg install adom/[email protected]
raw: tarball 332 KB ·
v1.0.112 Verified 2026-09-03
adom-wiki pkg install adom/[email protected]
raw: tarball 331 KB ·
v1.0.111 Verified 2026-09-03
adom-wiki pkg install adom/[email protected]
raw: tarball 326 KB ·
v1.0.110 Verified 2026-09-03
adom-wiki pkg install adom/[email protected]
raw: tarball 326 KB ·
v1.0.109 Verified 2026-09-01
adom-wiki pkg install adom/[email protected]
raw: tarball 324 KB ·
v1.0.108 Verified 2026-09-01
adom-wiki pkg install adom/[email protected]
raw: tarball 322 KB ·
v1.0.107 Verified 2026-09-01
adom-wiki pkg install adom/[email protected]
raw: tarball 322 KB ·
v1.0.106 Verified 2026-08-31
adom-wiki pkg install adom/[email protected]
raw: tarball 312 KB ·
v1.0.105 Verified 2026-08-27
adom-wiki pkg install adom/[email protected]
raw: tarball 311 KB ·
v1.0.104 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 308 KB ·
v1.0.103 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 303 KB ·
v1.0.102 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 303 KB ·
v1.0.101 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 302 KB ·
v1.0.100 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 300 KB ·
v1.0.99 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 300 KB ·
v1.0.98 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 300 KB ·
v1.0.97 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 299 KB ·
v1.0.96 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 299 KB ·
v1.0.95 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 298 KB ·
v1.0.94 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 298 KB ·
v1.0.93 Verified 2026-08-25

1.0.93: kicad_schematic_review checks the drawing too (engine 0.23.0, standard 0.28.0).

  • kicad_schematic_review: sends the engine each sheet's drawing (sheetDrawing): wires, buses, junctions, no-connects, labels, pins and symbol boxes. The engine's drawing checks (dangling wires, floating labels, overlapping symbols, ...) now run on KiCad schematics, and the reply says drawingChecked.
    • Power symbols that name a net count as power labels. Sheet pins count as hierarchical labels.
    • netlist.names lists every label and port name joined into one net, so the engine can flag two names on one net.
    • Checked on three real designs, where the engine agrees with KiCad's own kicad_sch_check:
      • pic_programmer: one real overlap (R10 drawn over U4) and one info.
      • StickHub: one info (no bulk capacitor on a rail).
      • The rp2040 sample: the same 10 overlapping-symbol pairs.
  • Fixed: PWR_FLAG no longer joins nets. A PWR_FLAG was read as a power symbol naming the net "PWR_FLAG", so every net carrying one became one net. This raised a false shorted_nets on pic_programmer and StickHub. Only power symbols whose pin is a power input name a net now.
  • Fixed: escaped label names. KiCad writes a / in a label as {slash} (and : as {colon}, and so on) in some files. kicad_sch_check and kicad_schematic_review compared the raw text, so the labels VPP/MCLR and VPP{slash}MCLR split one net in two (a false "reaches only R18.2" on pic_programmer). Names are now read as KiCad compares them.
  • Engine adom-eda-checks 0.23.0 vendored unchanged (standard 0.28.0).
adom-wiki pkg install adom/[email protected]
raw: tarball 298 KB ·
v1.0.92 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 297 KB ·
v1.0.91 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 297 KB ·
v1.0.90 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 297 KB ·
v1.0.89 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 297 KB ·
v1.0.88 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 297 KB ·
v1.0.87 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 230 KB ·
v1.0.86 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 230 KB ·
v1.0.85 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 230 KB ·
v1.0.84 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 230 KB ·
v1.0.83 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 230 KB ·
v1.0.82 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 229 KB ·
v1.0.81 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 229 KB ·
v1.0.80 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 229 KB ·
v1.0.79 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 228 KB ·
v1.0.78 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 228 KB ·
v1.0.77 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 227 KB ·
v1.0.76 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 226 KB ·
v1.0.75 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 224 KB ·
v1.0.74 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 224 KB ·
v1.0.73 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 227 KB ·
v1.0.72 Verified 2026-08-24
adom-wiki pkg install adom/[email protected]
raw: tarball 227 KB ·
v1.0.71 Verified 2026-08-24
adom-wiki pkg install adom/[email protected]
raw: tarball 226 KB ·
v1.0.70 Verified 2026-08-24
adom-wiki pkg install adom/[email protected]
raw: tarball 225 KB ·
v1.0.69 Verified 2026-08-24
adom-wiki pkg install adom/[email protected]
raw: tarball 225 KB ·
v1.0.68 Verified 2026-08-24
adom-wiki pkg install adom/[email protected]
raw: tarball 225 KB ·
v1.0.67 Verified 2026-08-24
adom-wiki pkg install adom/[email protected]
raw: tarball 224 KB ·
v1.0.66 Verified 2026-08-24
adom-wiki pkg install adom/[email protected]
raw: tarball 220 KB ·
v1.0.65 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 220 KB ·
v1.0.64 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 219 KB ·
v1.0.63 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 219 KB ·
v1.0.62 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 218 KB ·
v1.0.61 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 218 KB ·
v1.0.60 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 218 KB ·
v1.0.59 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 217 KB ·
v1.0.58 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 217 KB ·
v1.0.57 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 217 KB ·
v1.0.56 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 213 KB ·
v1.0.55 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 213 KB ·
v1.0.54 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 213 KB ·
v1.0.53 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 166 KB ·
v1.0.52 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 166 KB ·
v1.0.51 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 164 KB ·
v1.0.50 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 164 KB ·
v1.0.49 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 123 KB ·
v1.0.48 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 122 KB ·
v1.0.47 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 122 KB ·
v1.0.46 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 122 KB ·
v1.0.45 Verified 2026-08-23
adom-wiki pkg install adom/[email protected]
raw: tarball 121 KB ·
v1.0.44 Verified 2026-08-22
adom-wiki pkg install adom/[email protected]
raw: tarball 121 KB ·
v1.0.43 Verified 2026-08-22
adom-wiki pkg install adom/[email protected]
raw: tarball 120 KB ·
v1.0.42 Verified 2026-08-21
adom-wiki pkg install adom/[email protected]
raw: tarball 118 KB ·
v1.0.41 Verified 2026-08-21
adom-wiki pkg install adom/[email protected]
raw: tarball 118 KB ·
v1.0.40 Verified 2026-08-21
adom-wiki pkg install adom/[email protected]
raw: tarball 118 KB ·
v1.0.39 Verified 2026-08-21
adom-wiki pkg install adom/[email protected]
raw: tarball 116 KB ·
v1.0.38 Verified 2026-08-21
adom-wiki pkg install adom/[email protected]
raw: tarball 116 KB ·
v1.0.37 Verified 2026-08-21
adom-wiki pkg install adom/[email protected]
raw: tarball 114 KB ·
v1.0.36 Verified 2026-08-20
adom-wiki pkg install adom/[email protected]
raw: tarball 113 KB ·
v1.0.35 Verified 2026-08-20
adom-wiki pkg install adom/[email protected]
raw: tarball 111 KB ·
v1.0.34 Verified 2026-08-20
adom-wiki pkg install adom/[email protected]
raw: tarball 110 KB ·
v1.0.33 Verified 2026-08-15
adom-wiki pkg install adom/[email protected]
raw: tarball 58 KB ·
v1.0.32 Verified 2026-08-15
adom-wiki pkg install adom/[email protected]
raw: tarball 58 KB ·
v1.0.31 Verified 2026-08-15
adom-wiki pkg install adom/[email protected]
raw: tarball 57 KB ·
v1.0.30 Verified 2026-08-14
adom-wiki pkg install adom/[email protected]
raw: tarball 55 KB ·
v1.0.29 Verified 2026-08-14
adom-wiki pkg install adom/[email protected]
raw: tarball 54 KB ·
v1.0.28 Verified 2026-08-14
adom-wiki pkg install adom/[email protected]
raw: tarball 54 KB ·
v1.0.27 Verified 2026-08-14
adom-wiki pkg install adom/[email protected]
raw: tarball 51 KB ·
v1.0.26 Verified 2026-08-14
adom-wiki pkg install adom/[email protected]
raw: tarball 43 KB ·
v1.0.25 Verified 2026-08-09
adom-wiki pkg install adom/[email protected]
raw: tarball 43 KB ·
v1.0.24 Verified 2026-08-09
adom-wiki pkg install adom/[email protected]
raw: tarball 43 KB ·
v1.0.23 Verified 2026-08-09
adom-wiki pkg install adom/[email protected]
raw: tarball 43 KB ·
v1.0.22 Verified 2026-08-09
adom-wiki pkg install adom/[email protected]
raw: tarball 43 KB ·
v1.0.21 Verified 2026-08-09
adom-wiki pkg install adom/[email protected]
raw: tarball 42 KB ·
v1.0.20 Verified 2026-08-09
adom-wiki pkg install adom/[email protected]
raw: tarball 42 KB ·
v1.0.19 Verified 2026-08-09
adom-wiki pkg install adom/[email protected]
raw: tarball 23 KB ·
v1.0.18 Verified 2026-08-08
adom-wiki pkg install adom/[email protected]
raw: tarball 23 KB ·
v1.0.17 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 21 KB ·
v1.0.16 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 21 KB ·
v1.0.15 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 25 KB ·
v1.0.14 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 25 KB ·
v1.0.13 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 512 KB ·
v1.0.12 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 522 KB ·
v1.0.11 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 520 KB ·
v1.0.10 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 519 KB ·
v1.0.9 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 517 KB ·
v1.0.8 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 517 KB ·
v1.0.7 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 517 KB ·
v1.0.6 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 512 KB ·
v1.0.5 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 512 KB ·
v1.0.4 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 507 KB ·
v1.0.3 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 506 KB ·
v1.0.2 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 490 KB ·
v1.0.1 Verified 2026-08-25
adom-wiki pkg install adom/[email protected]
raw: tarball 490 KB ·
v1.0.0 Verified 2026-05-28
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.11.3 2026-10-28
  • promote 1.0.73 to public: Colby in the kicad-lane session: "yes when its ready u can go public too" (Colby Knox)
  • page.json last: 1.0.167 (Colby Knox)
  • Publish 1.0.167 (Colby Knox)
  • 1.0.73: release record (Colby Knox)
  • Merge PR #322: kicad-lane: 1.0.73, framed renders, canvas check, engine 0.4.1 (Colby Knox)
  • page.json last: 1.0.166 (Colby Knox)
  • Publish 1.0.166 (Colby Knox)
  • 1.0.72: release record (Colby Knox)
  • 1.0.72: 1.0.72: four more checks from the standard's engine 0.4.0 (EDA Bridge Standard 0.7.0), and a placement review. (Colby Knox)
  • Merge PR #319: kicad-lane: 1.0.72, engine 0.4.0 checks and placement_check (Colby Knox)
  • promote 1.0.71 to public: Colby in the kicad-lane session: "go for public" (Colby Knox)
  • page.json last: 1.0.165 (Colby Knox)
  • Publish 1.0.165 (Colby Knox)
  • 1.0.71: release record (Colby Knox)
  • 1.0.71: 1.0.71: pictures of library parts, and layer visibility in the open board. (Colby Knox)
  • Merge PR #318: kicad-lane: 1.0.71, library_views and set_layer_visibility (Colby Knox)
  • promote 1.0.70 to public: Colby in the kicad-lane session: "youre good to public" (Colby Knox)
  • page.json last: 1.0.164 (Colby Knox)
  • Publish 1.0.164 (Colby Knox)
  • 1.0.70: release record (Colby Knox)
  • 1.0.70: 1.0.70: schematics drawn from a netlist, a plan-only library-bundle install, and the standard's engine 0.2.1. (Colby Knox)
  • Merge PR #316: kicad-lane: 1.0.70, build_schematic, bundle planOnly (#106), engine 0.2.1 (Colby Knox)
  • page.json last: 1.0.163 (Colby Knox)
  • Publish 1.0.163 (Colby Knox)
  • 1.0.69: release record (Colby Knox)
  • 1.0.69: 1.0.69: length tuning, mouse-bite panels, silkscreen prep, component classes, new boards from footprints, and schematic sheets read from the file. (Colby Knox)
  • Merge PR #315: kicad-lane: 1.0.69, length tuning, mouse-bite panels, silkscreen prep, component classes, build/test boards, sheet reads (Colby Knox)
  • promote 1.0.68 to public: Colby, 2026-10-28, in the kicad-lane session: "you can make it public in kicad". Battery 289/0/1 on DESKTOP-BAR6S0F, signed. (Colby Knox)
  • page.json last: 1.0.162 (Colby Knox)
  • Publish 1.0.162 (Colby Knox)
  • 1.0.68: release record (Colby Knox)
  • 1.0.68: 1.0.68: ordering and footprints, five more of the EDA Bridge Standard's verbs. (Colby Knox)
  • Merge PR #313: kicad-lane: 1.0.68, BOM, JLCPCB assembly and order, land-pattern footprints, designators (Colby Knox)
  • promote 1.0.67 to public: Colby, 2026-10-28, in the kicad-lane session: Promote 1.0.67 now (answering: promote KiCad bridge 1.0.67 from insiders to public?). Battery 283/0/1 on DESKTOP-BAR6S0F, signed. (Colby Knox)
  • page.json last: 1.0.161 (Colby Knox)
  • Publish 1.0.161 (Colby Knox)
  • 1.0.67: release record (Colby Knox)
  • 1.0.67: 1.0.67: board checks, the EDA Bridge Standard's checks tier: 14 verbs that check a board and place the vias a check asks for. (Colby Knox)
  • Delete rust/crates/kicad-core/src/ipc/silk_fields.rs.orig (Colby Knox)
  • Delete rust/crates/kicad-core/src/ipc.rs.orig (Colby Knox)
  • Merge PR #310: kicad-lane: 1.0.67, the standard's checks tier (14 verbs) and board report (Colby Knox)
  • page.json last: 1.0.160 (Colby Knox)
  • Publish 1.0.160 (Colby Knox)
  • promote 1.0.66 to public: Colby, 2026-10-27, in the kicad-lane session: promote 1.0.66 once its full battery passes (after standard-lane relayed 'kicad can go public since everything is passing'). Battery 267 pass / 0 fail / 1 skip on KiCad 10.0.7; signed; insiders install verified. (Colby Knox)
  • 1.0.66: release record (Colby Knox)
  • 1.0.66: 1.0.66: teardrops and V-score panels, two more of the EDA Bridge Standard's native verbs. (Colby Knox)
  • Merge PR #309: kicad-lane: 1.0.66, teardrops and V-score panelize (Colby Knox)
  • page.json last: 1.0.159 (Colby Knox)
  • kicad-lane: release script reads equivalents with notes; its standard step can no longer fail a release (Colby Knox)
  • Publish 1.0.159 (Colby Knox)
  • 1.0.65: release record (Colby Knox)
  • 1.0.65: 1.0.65: any library footprint can now be added to a board open in KiCad, plus four of the EDA Bridge Standard's native verbs. (Colby Knox)
  • Restore the macOS manifest to 0.11.2 (a7ea9919): kicad-lane's PR #308 merge carried a stale 0.11.1 copy over it (Colby Knox)
  • Merge PR #308: kicad-lane: 1.0.65, live adds built from library text, compile, list_installed_libraries, replicate_layout, diff_pairs (Colby Knox)
  • macos manifest 0.11.2: fix kicad_upgrade NameError on Mac (Kyle Bergstedt)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.11.2 2026-10-27
  • page.json last: 1.0.158 (Colby Knox)
  • Publish 1.0.158 (Colby Knox)
  • 1.0.64: release record (Colby Knox)
  • 1.0.64: 1.0.64: adds to a board open in KiCad, two fixes for footprints KiCad rebuilds over its API, and 17 of the EDA Bridge Standard's core verbs. (Colby Knox)
  • Merge PR #307: kicad-lane: 1.0.64, live adds through KiCad's protobuf API, #126/#129, 17 standard core verbs (Colby Knox)
  • page.json last: 1.0.157 (Colby Knox)
  • Publish 1.0.157 (Colby Knox)
  • 1.0.63: release record (Colby Knox)
  • 1.0.63: 1.0.63: the EDA Bridge Standard's shapes for the 47 verbs KiCad brought to the standard (standard 0.3.0). KiCad's own names and arguments keep working. (Colby Knox)
  • Merge PR #306: kicad-lane: 1.0.63, the EDA Bridge Standard's shapes for KiCad's 47 standard verbs (Colby Knox)
  • Merge PR #305: kicad-lane: release script pushes only the KiCad reference to the EDA Bridge Standard (standard-lane owns the page) (Colby Knox)
  • page.json last: 1.0.156 (Colby Knox)
  • Publish 1.0.156 (Colby Knox)
  • 1.0.62: release record (Colby Knox)
  • 1.0.62: 1.0.62: John's 1.0.61 verbs (Konnect parity) brought into the EDA Bridge Standard and the verb battery. Sixteen standard names now answer as aliases of the verbs that do the same job (net_classes, repour, save, update_pcb, annotate, create_symbol, create_footprint, read_symbol, remove_symbol, sch_sheet_symbol, selection, route_pair, fab_check, find_symbol, export_manufacturing, add_rule); a catalog test makes every new verb a standard name, an alias or a reviewed KiCad-only job, and each release now syncs bridge.json, refreshes the standard's KiCad coverage and writes every verb into the README. Fixes: adding items to a board open in KiCad (add_footprint, add_mounting_hole, import_svg, board_outline, update_footprints_from_library) failed as a vague rollback; KiCad 10.0.x (4 and 7 checked) creates nothing from text over its API, so these now refuse with live_create_unsupported and say to close the board, which edits the file; a KiCad lock file left by a KiCad that is no longer running no longer blocks file edits. The verb battery covers all 227 verbs on KiCad 10.0.7, the 78 new ones in project, schematic, library, fab and board scenarios. (Colby Knox)
  • Merge PR #304: 1.0.62: the 1.0.61 verbs in the EDA Bridge Standard and the battery; live-create refusal; stale locks (kicad-lane/standard-1.0.62 -> master) (Colby Knox)
  • 1.0.62: standard aliases for 16 of the 1.0.61 verbs, the standard-decision test, battery coverage for all 78 new verbs, live_create_unsupported, stale lock files cleared, release script syncs bridge.json, README verbs and the standard's coverage (Colby Knox)
  • docs: Konnect v0.13.0 gap map (every row covered in 1.0.61), comparison page updated (211 verbs, Konnect parity row, Linux on insiders) (John Lauer)
  • 1.0.61: release record (John Lauer)
  • 1.0.61: Every Konnect v0.13.0 capability, 211 verbs (was 133; docs/konnect-gap.md maps all 228 Konnect tools). Schematic: components, pins, items, rotate, region move, annotate, replace and update symbols, field reset, wire delete/split, labels, junctions, net stubs, pin-to-pin wiring, text, buses, atomic batches, sheets and hierarchy, sheet pins, connectivity trace, checks, connectivity fixes, PNG render with visual baselines, design review. Board: outline, layer count, graphics, mounting holes, SVG import, refill, save, add/flip/delete/edit/align footprints, update footprints from library, footprint graphics and 3D models, selection and cross-probe, update PCB from schematic. Routing and rules: modify track, diff pairs, copy routing, netclasses, board rules, custom rules, clearance check, placement score, decoupling placement, fanout plan. Fab: DXF, GenCAD, IPC-2581, ODB++, IPC-D-356, one-zip fab package, fab pre-flight, cost numbers. Projects and libraries: create, info, rename, snapshot; footprint and symbol create, edit, info; library search. PCM: file:// and private wiki repositories, zipPath installs (#132). (John Lauer)
  • 1.0.61: Every Konnect v0.13.0 capability, 211 verbs (was 133; docs/konnect-gap.md maps all 228 Konnect tools). Schematic: components, pins, items, rotate, region move, annotate, replace and update symbols, field reset, wire delete/split, labels, junctions, net stubs, pin-to-pin wiring, text, buses, atomic batches, sheets and hierarchy, sheet pins, connectivity trace, checks, connectivity fixes, PNG render with visual baselines, design review. Board: outline, layer count, graphics, mounting holes, SVG import, refill, save, add/flip/delete/edit/align footprints, update footprints from library, footprint graphics and 3D models, selection and cross-probe, update PCB from schematic. Routing and rules: modify track, diff pairs, copy routing, netclasses, board rules, custom rules, clearance check, placement score, decoupling placement, fanout plan. Fab: DXF, GenCAD, IPC-2581, ODB++, IPC-D-356, one-zip fab package, fab pre-flight, cost numbers. Projects and libraries: create, info, rename, snapshot; footprint and symbol create, edit, info; library search. PCM: file:// and private wiki repositories, zipPath installs (#132). (John Lauer)
  • 1.0.61: Every Konnect v0.13.0 capability, 211 verbs (was 133; docs/konnect-gap.md maps all 228 Konnect tools). Schematic: components, pins, items, rotate, region move, annotate, replace and update symbols, field reset, wire delete/split, labels, junctions, net stubs, pin-to-pin wiring, text, buses, atomic batches, sheets and hierarchy, sheet pins, connectivity trace, checks, connectivity fixes, PNG render with visual baselines, design review. Board: outline, layer count, graphics, mounting holes, SVG import, refill, save, add/flip/delete/edit/align footprints, update footprints from library, footprint graphics and 3D models, selection and cross-probe, update PCB from schematic. Routing and rules: modify track, diff pairs, copy routing, netclasses, board rules, custom rules, clearance check, placement score, decoupling placement, fanout plan. Fab: DXF, GenCAD, IPC-2581, ODB++, IPC-D-356, one-zip fab package, fab pre-flight, cost numbers. Projects and libraries: create, info, rename, snapshot; footprint and symbol create, edit, info; library search. PCM: file:// and private wiki repositories, zipPath installs (#132). (John Lauer)
  • 1.0.61: Every Konnect v0.13.0 capability, 211 verbs (was 133; docs/konnect-gap.md maps all 228 Konnect tools). Schematic: components, pins, items, rotate, region move, annotate, replace and update symbols, field reset, wire delete/split, labels, junctions, net stubs, pin-to-pin wiring, text, buses, atomic batches, sheets and hierarchy, sheet pins, connectivity trace, checks, connectivity fixes, PNG render with visual baselines, design review. Board: outline, layer count, graphics, mounting holes, SVG import, refill, save, add/flip/delete/edit/align footprints, update footprints from library, footprint graphics and 3D models, selection and cross-probe, update PCB from schematic. Routing and rules: modify track, diff pairs, copy routing, netclasses, board rules, custom rules, clearance check, placement score, decoupling placement, fanout plan. Fab: DXF, GenCAD, IPC-2581, ODB++, IPC-D-356, one-zip fab package, fab pre-flight, cost numbers. Projects and libraries: create, info, rename, snapshot; footprint and symbol create, edit, info; library search. PCM: file:// and private wiki repositories, zipPath installs (#132). (John Lauer)
  • staging: 1.0.61 signed (John Lauer)
  • staging: 1.0.60 signed test build (Konnect gap closed, 211 verbs) (John Lauer)
  • page.json last: 1.0.155 (Colby Knox)
  • Publish 1.0.155 (Colby Knox)
  • page.json: 1.0.154, plain-words brief, board-model triggers (Colby Knox)
  • Publish 1.0.154 (Colby Knox)
  • Publish 1.0.153 (Colby Knox)
  • 1.0.59: release record (Colby Knox)
  • 1.0.59: 1.0.59: the EDA Bridge Standard board model. kicad_routing_state {model:"standard"} answers the standard's board model (mm, y up, custom pads as rectangles with copperPoints, the outline with arcs, unconnected from the copper with isolatedCopper, an order-independent revision), live or from the file; the edit verbs take its revision and, with frame:"standard", its coordinates. New: kicad_layer_stack, kicad_pour_state, kicad_bodies (3D heights from STEP/VRML), kicad_netlist (expect comparison, pin types), kicad_board_summary, kicad_list_nets, kicad_list_designators, kicad_copper_layers, kicad_layers_in_use, kicad_component_data, kicad_component_pins, kicad_sch_no_connect (#131). Fixes: kicad_remove_route honours dryRun (#134); placement outline box follows arcs and circles, ring courtyards no longer collide (#133); PCM libraries resolve ${KICAD10_3RD_PARTY} (#130); the no-ipc build compiles again. Unconnected matches KiCad's DRC on six KiCad 10 demo boards; verb battery on DESKTOP-BAR6S0F (KiCad 10.0.4). (Colby Knox)
  • Merge PR #302: 1.0.59: EDA Bridge Standard board model, layer stack, pours, 3D bodies, netlist and core reads (kicad-lane/board-model-1.0.59 -> master) (Colby Knox)
  • sign_azure: ask the signing host for its LOCALAPPDATA instead of a hard-coded user folder (Colby Knox)
  • sign_azure: sign locally when this is the signing machine; redact private values in every message (Colby Knox)
  • Verb battery: tests for kicad_export_pos and kicad_render_board (the last coverage gap) (Colby Knox)
  • Fix #133 (outline box from arcs and circles; ring courtyards: 2-degree sampling, interior probes), #130 (KICAD10_3RD_PARTY expands to Documents/KiCad//3rdparty), #131 (kicad_sch_no_connect by pin or point); board model: copperPoints, circle pads, isolatedCopper {net, layer, at, areaMm2} (standard 0.1.1) (Colby Knox)
  • Release tooling: Azure Trusted Signing on the signing host (tools/sign_azure.py), insiders releases never touch the public manifest, release notes pushed; verb battery covers the 12 standard verbs and the remove_route dry run (Colby Knox)
  • kicad_remove_route honours dryRun (wiki #134): lists what would go and KiCad's DRC without it, removes nothing (Colby Knox)
  • 1.0.59: EDA Bridge Standard board model (routing_state model:standard), layer_stack, pour_state, bodies, netlist, seven core reads; edit verbs take the standard revision and frame:standard; no-ipc build fix; bridge.json synced (Colby Knox)
  • Update discovery triggers (Adom Wiki)
  • macos manifest 0.11.1: per-user KiCad installs (~/Applications) (Kyle Bergstedt)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.11.1 2026-10-20
  • 1.0.58: Linux build in the same zip (wiki #127/#128: Flatpak KiCad, kicad-cli verbs, IPC live verbs; window verbs not yet). kicad_silk_fields_batch updates the parent footprints when KiCad refuses a field update (#129). Drill files with every Gerber export, kicad_export_pos (JLCPCB CPL), kicad_render_board, board-area SVG with background. Fixes #120 (read-only verbs leave dialogs open), #121 (Zoom to Selected Objects hint, ambiguous menu labels refused), #122 (same-name boards), #123 (PCM build-a-repository docs), #124 (DRC snapshot keeps project libraries), #125 (courtyard check uses real outlines). (John Lauer)
  • 1.0.58: Linux build in the same zip (wiki #127/#128: Flatpak KiCad, kicad-cli verbs, IPC live verbs; window verbs not yet). kicad_silk_fields_batch updates the parent footprints when KiCad refuses a field update (#129). Drill files with every Gerber export, kicad_export_pos (JLCPCB CPL), kicad_render_board, board-area SVG with background. Fixes #120 (read-only verbs leave dialogs open), #121 (Zoom to Selected Objects hint, ambiguous menu labels refused), #122 (same-name boards), #123 (PCM build-a-repository docs), #124 (DRC snapshot keeps project libraries), #125 (courtyard check uses real outlines). (John Lauer)
  • 1.0.58: Linux build in the same zip (wiki #127/#128: Flatpak KiCad, kicad-cli verbs, IPC live verbs; window verbs not yet). kicad_silk_fields_batch updates the parent footprints when KiCad refuses a field update (#129). Drill files with every Gerber export, kicad_export_pos (JLCPCB CPL), kicad_render_board, board-area SVG with background. Fixes #120 (read-only verbs leave dialogs open), #121 (Zoom to Selected Objects hint, ambiguous menu labels refused), #122 (same-name boards), #123 (PCM build-a-repository docs), #124 (DRC snapshot keeps project libraries), #125 (courtyard check uses real outlines). (John Lauer)
  • staging: 1.0.58 signed (drill files reported on a rerun) (John Lauer)
  • staging: 1.0.57 signed test build (John Lauer)
  • staging: 1.0.57 Linux test build (new version: never reuse a version for new bytes) (John Lauer)
  • staging: 1.0.56 Linux test build, GUI launchers get a D-Bus session (John Lauer)
  • staging: platforms entries carry url/sha256/size (ab schema) (John Lauer)
  • staging: 1.0.56 Linux test build for #127/#128 (not a release, not a tier) (John Lauer)
  • promote 1.0.55 to public: John 2026-10-14: 'and yes, promote' (after review: a week on insiders in real use, five new issues all pre-existing in 1.0.53, none from 1.0.54/1.0.55) (John Lauer)
  • Discovery: add PCM triggers so an AI asked to package/host/install KiCad libraries via PCM is pointed at this bridge's docs/pcm.md recipe (John Lauer)
  • Comparison: the parts wiki (John Lauer)
  • Comparison: manufacturer CAD fetch, ds2sf context (John Lauer)
  • Comparison: Adom Fields, per-discipline analysis rows (John Lauer)
  • Comparison: Adom SPICE (John Lauer)
  • Comparison: 2026-10-04 re-audit (John Lauer)
  • Wishlist: KiCad 11 check, errors entry, full-desktop clips (John Lauer)
  • Wishlist: measured focus behaviour and two clips (John Lauer)
  • Sub-readme: KiCad wishlist, automation without the foreground (John Lauer)
  • 1.0.55: 1.0.55 REVERTS the 1.0.54 pad change for wiki #119, which was wrong. KiCad's own DRC on KiCad 10.0.2 and 10.0.5 shows that a footprint on B.Cu whose SMD pads are on F.Cu keeps those pads on the FRONT copper at their stored positions (its connectivity report names them 'on F.Cu'; back-layer tracks reach them neither at the stored nor at the mirrored spot). The bridge's literal reading, as in 1.0.53, matches KiCad; 1.0.54 moved such pads to the back and mirrored them, disagreeing with KiCad. New instead: kicad_board_pads and kicad_routing_state list backFootprintsWithFrontPads with a hint, because such a footprint is a part placed on the back without being flipped the way KiCad flips it (KiCad's flip moves the pads to B.*). 1.0.54's other changes stay: the product name out of hints, examples and docs (wiki #118), and the silk hints (wiki #104). (John Lauer)
  • 1.0.55: 1.0.55 REVERTS the 1.0.54 pad change for wiki #119, which was wrong. KiCad's own DRC on KiCad 10.0.2 and 10.0.5 shows that a footprint on B.Cu whose SMD pads are on F.Cu keeps those pads on the FRONT copper at their stored positions (its connectivity report names them 'on F.Cu'; back-layer tracks reach them neither at the stored nor at the mirrored spot). The bridge's literal reading, as in 1.0.53, matches KiCad; 1.0.54 moved such pads to the back and mirrored them, disagreeing with KiCad. New instead: kicad_board_pads and kicad_routing_state list backFootprintsWithFrontPads with a hint, because such a footprint is a part placed on the back without being flipped the way KiCad flips it (KiCad's flip moves the pads to B.*). 1.0.54's other changes stay: the product name out of hints, examples and docs (wiki #118), and the silk hints (wiki #104). (John Lauer)
  • page.json last so the hero survives (John Lauer)
  • Product name out of hints, examples and docs (wiki #118); skills package 1.0.152 (John Lauer)
  • Publish 1.0.152 (John Lauer)
  • 1.0.54: 1.0.54. Wiki #119: back-side footprints written by other tools are read the way KiCad reads them. A footprint on B.Cu whose SMD pads still carry F.Cu layers (front frame) is mirrored by KiCad on load; the bridge read it literally, so pad positions were off by twice the pad's local x and the pads looked like front-side copper, which made kicad_route_net's preflight reject correct plans on back-side QFNs. Now that combination is mirrored and moved to the back layers, in every path that resolves pads (live routing state and preflight, placement, file routing, the Freerouting export). Footprints flipped by KiCad itself (pads already on B.Cu) were already right and are unchanged: checked against KiCad's own StickHub demo, 123 of 123 back-side pads match their net's copper with the literal reading. Wiki #118: an unannounced product name is gone from every hint, example and doc; the fab is the 3rd party fab, and examples use jlcpcb or omit fab for the baseline. Wiki #104: an unknown silk text field now lists the accepted fields, and a refusal for text below the board's minimum size says where that minimum lives. (John Lauer)
  • 1.0.54: 1.0.54. Wiki #119: back-side footprints written by other tools are read the way KiCad reads them. A footprint on B.Cu whose SMD pads still carry F.Cu layers (front frame) is mirrored by KiCad on load; the bridge read it literally, so pad positions were off by twice the pad's local x and the pads looked like front-side copper, which made kicad_route_net's preflight reject correct plans on back-side QFNs. Now that combination is mirrored and moved to the back layers, in every path that resolves pads (live routing state and preflight, placement, file routing, the Freerouting export). Footprints flipped by KiCad itself (pads already on B.Cu) were already right and are unchanged: checked against KiCad's own StickHub demo, 123 of 123 back-side pads match their net's copper with the literal reading. Wiki #118: an unannounced product name is gone from every hint, example and doc; the fab is the 3rd party fab, and examples use jlcpcb or omit fab for the baseline. Wiki #104: an unknown silk text field now lists the accepted fields, and a refusal for text below the board's minimum size says where that minimum lives. (John Lauer)
  • promote 1.0.53 to public: John: "when you have tested the signed exe and you feel good about it, promote it to public". The first signed build (Adom Industries, Inc., Microsoft timestamp): Windows reports the installed exe Valid on arav-rog and ConfRoomROG; full battery arav-rog 119/0, ConfRoomROG 116/0. (John Lauer)
  • page.json last so the hero survives (John Lauer)
  • Publish 1.0.151 (John Lauer)
  • 1.0.53: 1.0.53: the first SIGNED native build. kicad-bridge.exe is signed as Adom Industries, Inc. with a Microsoft timestamp, so Windows 11 Smart App Control no longer blocks it (every native build up to 1.0.52 shipped unsigned). Same code as 1.0.52. The release tool now signs the exe as its last change, checks the exe inside the zip is the signed one, and refuses to publish an unsigned build. (John Lauer)
  • 1.0.53: 1.0.53: the first SIGNED native build. kicad-bridge.exe is signed as Adom Industries, Inc. with a Microsoft timestamp, so Windows 11 Smart App Control no longer blocks it (every native build up to 1.0.52 shipped unsigned). Same code as 1.0.52. The release tool now signs the exe as its last change, checks the exe inside the zip is the signed one, and refuses to publish an unsigned build. (John Lauer)
  • page.json last so the hero survives (John Lauer)
  • Publish 1.0.150 (John Lauer)
  • promote 1.0.52 to public: John: "promote it" (after the full battery on 1.0.52: arav-rog 119/0; ConfRoomROG 115/1, its one lint timeout caused by that box running its own daily test at the same time, and the verb passes in 9-11 s on a retest). Adds kicad_prewarm, the bridge's own modal-dialog hints, and all 119 verbs declared in bridge.json. (John Lauer)
  • page.json last so the hero survives (John Lauer)
  • kicad_prewarm (wiki #117), bridge.json declares all 119 verbs (wiki #116); skills package 1.0.149 (John Lauer)
  • Publish 1.0.149 (John Lauer)
  • 1.0.52: 1.0.52: wiki #117: kicad_prewarm, declared as bridge.json prewarm.verb (requiresHostApp), which Adom Bridge 2.1.153 calls once after each install or update: detects KiCad (warming kicad-cli), seeds the first-run config, marks KiCad's setup wizard done, repairs the taskbar shortcuts; idempotent, config steps skipped while KiCad runs. Wiki #116: the modal-dialog hints Adom Bridge's CLI used to append now come from the bridge itself (_modalHint on the open and install verbs and on kicad_window_info, which says whether a dialog is up). And bridge.json now declares all 119 verbs; it had drifted to 69, and a unit test now fails the build if it drifts again. (John Lauer)
  • promote 1.0.51 to public: John: "promote it now" (after 1.0.51 passed the full battery: arav-rog 118/0, ConfRoomROG 115/0). Fixes the add_zone async-fill stale_board race (wiki #115). (John Lauer)
  • 1.0.51: 1.0.51 (wiki #115): kicad_add_zone waits for KiCad's asynchronous zone fill before answering. It used to read the board revision straight after requesting the refill, so it returned the pre-fill revision; the fill then changed the board and the caller's next edit was refused as stale_board (intermittent, seen on arav-rog). It now waits until the revision has moved and holds still (bounded at 12 s, busy reads retried) and answers revisionSettled; if the fill never settles it says so and points at kicad_zone_state instead of handing out a revision it knows may be stale. (John Lauer)
  • promote 1.0.50 to public: John: "do it" (his reply to: run the battery on arav-rog and ConfRoomROG, then promote 1.0.50). ConfRoomROG 115/0; arav-rog 113/5, all five one pre-existing add_zone async-fill race also in 1.0.37. (John Lauer)
  • page.json last so the hero survives (John Lauer)
  • Publish 1.0.148 (John Lauer)
  • 1.0.50: 1.0.50: the background guard (backgroundGuard) is OFF by default. John, after watching it live: 'you just are too aggressive with it and kicad acts weird when you have it on'. The bridge now moves no KiCad window unless the user turns the guard on (dashboard: Keep KiCad in the background, or kicad_set_settings); its focus log still records what the guard would have done. Wiki #114 tracks the work before it may be on by default again. Also: settings saves now persist only what someone chose; before, every save wrote every default into the file, so a machine that had saved any setting would never see a changed default. A stored backgroundGuard true written that way is ignored; a deliberate one is kept. Includes 1.0.49: a failed footprint load no longer blames a stock library on being registered after launch. (John Lauer)
  • 1.0.50: 1.0.50: the background guard (backgroundGuard) is OFF by default. John, after watching it live: 'you just are too aggressive with it and kicad acts weird when you have it on'. The bridge now moves no KiCad window unless the user turns the guard on (dashboard: Keep KiCad in the background, or kicad_set_settings); its focus log still records what the guard would have done. Wiki #114 tracks the work before it may be on by default again. Also: settings saves now persist only what someone chose; before, every save wrote every default into the file, so a machine that had saved any setting would never see a changed default. A stored backgroundGuard true written that way is ignored; a deliberate one is kept. Includes 1.0.49: a failed footprint load no longer blames a stock library on being registered after launch. (John Lauer)
  • 1.0.49: 1.0.49: kicad_open_footprint_editor no longer blames a stock library for a failed load. The 1.0.37 diagnosis (wiki #111) said library_not_loaded_by_running_kicad for any library found on disk, including Resistor_SMD, which every KiCad loads at start through its nested template table. It now says that only for a row in the user's own fp-lib-table, the only kind that can be added after KiCad starts; everything else stays navigation_failed. (John Lauer)
  • 1.0.48: 1.0.48: the backgroundGuard switch now switches off ALL of the bridge's window moving. A second mechanism, the per-verb focus check that runs after every window verb, ignored the switch: it pushed a KiCad window back and forced the user's previous window to the front after each verb, so with the guard off KiCad still never ended up in front and the A/B comparison showed nothing. It now obeys the switch, never targets a shell window, and asks for the user's window back with one plain SetForegroundWindow instead of the forcing call (thread-input attach, the same call that crashed Explorer when aimed at the taskbar). (John Lauer)
  • 1.0.48: 1.0.48: the backgroundGuard switch now switches off ALL of the bridge's window moving. A second mechanism, the per-verb focus check that runs after every window verb, ignored the switch: it pushed a KiCad window back and forced the user's previous window to the front after each verb, so with the guard off KiCad still never ended up in front and the A/B comparison showed nothing. It now obeys the switch, never targets a shell window, and asks for the user's window back with one plain SetForegroundWindow instead of the forcing call (thread-input attach, the same call that crashed Explorer when aimed at the taskbar). (John Lauer)
  • 1.0.48: 1.0.48: the backgroundGuard switch now switches off ALL of the bridge's window moving. A second mechanism, the per-verb focus check that runs after every window verb, ignored the switch: it pushed a KiCad window back and forced the user's previous window to the front after each verb, so with the guard off KiCad still never ended up in front and the A/B comparison showed nothing. It now obeys the switch, never targets a shell window, and asks for the user's window back with one plain SetForegroundWindow instead of the forcing call (thread-input attach, the same call that crashed Explorer when aimed at the taskbar). (John Lauer)
  • 1.0.47: 1.0.47: KiCad 10's Welcome to KiCad setup wizard no longer pops up. KiCad shows it in every editor start until kicad.json has system.first_run_shown true; cancelling the wizard does not set it and a force-closed KiCad never saves it, so on a machine the bridge drives it came back every time, in front of the user, and the bridge spent about 30 s per editor finding and cancelling it (open_board and open_schematic took 35 s instead of about 5 s on AdomLapper). Before starting any KiCad process, and only when none is running, the bridge now sets that one key, keeping every other; new installs are seeded with it. (John Lauer)
  • 1.0.47: 1.0.47: KiCad 10's Welcome to KiCad setup wizard no longer pops up. KiCad shows it in every editor start until kicad.json has system.first_run_shown true; cancelling the wizard does not set it and a force-closed KiCad never saves it, so on a machine the bridge drives it came back every time, in front of the user, and the bridge spent about 30 s per editor finding and cancelling it (open_board and open_schematic took 35 s instead of about 5 s on AdomLapper). Before starting any KiCad process, and only when none is running, the bridge now sets that one key, keeping every other; new installs are seeded with it. (John Lauer)
  • 1.0.46: 1.0.46: a KiCad window that opens underneath the cursor is no longer mistaken for the user clicking it. 1.0.40 counted any input in the last 1.5 s with the cursor over the new window as a click, which is true whenever someone is simply using their machine; on AdomLapper, with the guard on, a Schematic Editor the bridge opened was judged user-foregrounded and left on top of John's browser. Now recent input only counts as a click when the cursor is on the taskbar or Start; a click ON the window itself still needs the mouse button to have been seen down. (John Lauer)
  • 1.0.46: 1.0.46: a KiCad window that opens underneath the cursor is no longer mistaken for the user clicking it. 1.0.40 counted any input in the last 1.5 s with the cursor over the new window as a click, which is true whenever someone is simply using their machine; on AdomLapper, with the guard on, a Schematic Editor the bridge opened was judged user-foregrounded and left on top of John's browser. Now recent input only counts as a click when the cursor is on the taskbar or Start; a click ON the window itself still needs the mouse button to have been seen down. (John Lauer)
  • 1.0.45: 1.0.45: the Adom taskbar badge always expires. It means Adom is controlling this app right now, so five minutes after the last verb that acts on KiCad every badge comes off, swept across every KiCad window (not only the ones this process remembers badging) and logged. A fresh bridge process also clears any badge a previous one left behind, since an update restarts the bridge and it forgets what it badged. Read-only polls never reset the clock. (John Lauer)
  • 1.0.44: 1.0.44: the taskbar thread logs what it does (ticker start, each badge applied, and once per distinct failure) so a missing badge can be diagnosed from the bridge log. No behaviour change from 1.0.43. (John Lauer)
  • 1.0.43: 1.0.43: the taskbar says Adom is driving KiCad again (port of the Python build's win_taskbar, dropped by the Rust port: the overlayBadges and activityIndicator settings did nothing from 1.0.0; wiki #113). Overlay badge (overlayBadges, default on): the Adom mark sits on every KiCad window's taskbar button while a verb acts on KiCad, whoever launched it, and comes off five minutes after the last verb, so a badge always means Adom is driving this right now. Progress bar (activityIndicator progress or both): the bridge's measured live progress on every KiCad button while a verb is in flight (the slowest verb's percent, a marquee when there is no estimate), cleared the moment the work stops. Read-only polls (kicad_state, kicad_window_info and the other reads the dashboard repeats) do not count as driving, or the badge would never clear. Both switches apply at once from the dashboard. Done through Adom Bridge's desktop_taskbar, like the Python: no COM here, no AUMID touched. (John Lauer)
  • page.json last so the hero survives (John Lauer)
  • Publish 1.0.147 (John Lauer)
  • 1.0.42: 1.0.42: two switches the user can flip from the dashboard, both applied at once with no restart. backgroundGuard (default on) is the A/B switch John asked for: off means the bridge never pushes or moves any KiCad window, and the focus log still records what it WOULD have done (guard OFF: would have pushed this window) so the two modes can be compared. activityIndicator finally does something in the native build: Windows flashes a taskbar button orange whenever an app asks for the foreground and is refused or is sent behind right after taking it, which is every KiCad window the bridge opens in the background; progress and none now cancel that flash on bridge-owned windows (about once a second and right after a push), flash and both leave it. The Python build did this; the port dropped it, so the setting was dead from 1.0.0 (John: whackamole). Still not ported: the taskbar progress bar and the Adom overlay badge (wiki #113). (John Lauer)
  • 1.0.42: 1.0.42: two switches the user can flip from the dashboard, both applied at once with no restart. backgroundGuard (default on) is the A/B switch John asked for: off means the bridge never pushes or moves any KiCad window, and the focus log still records what it WOULD have done (guard OFF: would have pushed this window) so the two modes can be compared. activityIndicator finally does something in the native build: Windows flashes a taskbar button orange whenever an app asks for the foreground and is refused or is sent behind right after taking it, which is every KiCad window the bridge opens in the background; progress and none now cancel that flash on bridge-owned windows (about once a second and right after a push), flash and both leave it. The Python build did this; the port dropped it, so the setting was dead from 1.0.0 (John: whackamole). Still not ported: the taskbar progress bar and the Adom overlay badge (wiki #113). (John Lauer)
  • 1.0.42: 1.0.42: two switches the user can flip from the dashboard, both applied at once with no restart. backgroundGuard (default on) is the A/B switch John asked for: off means the bridge never pushes or moves any KiCad window, and the focus log still records what it WOULD have done (guard OFF: would have pushed this window) so the two modes can be compared. activityIndicator finally does something in the native build: Windows flashes a taskbar button orange whenever an app asks for the foreground and is refused or is sent behind right after taking it, which is every KiCad window the bridge opens in the background; progress and none now cancel that flash on bridge-owned windows (about once a second and right after a push), flash and both leave it. The Python build did this; the port dropped it, so the setting was dead from 1.0.0 (John: whackamole). Still not ported: the taskbar progress bar and the Adom overlay badge (wiki #113). (John Lauer)
  • 1.0.41: 1.0.41: the background guard stops guessing. It used to decide whether a KiCad window reaching the foreground was the user's doing from a 120 ms mouse-button poll and a timing window, and while any verb ran it pushed back ANY bridge-owned KiCad window, again and again. John, clicking KiCad's taskbar buttons during a test: 'i just tried clicking to bring kicad to the foreground and then you yank it to the background on me'. New rule, no heuristics: the bridge may push back only the window it is OPENING RIGHT NOW (one that did not exist when the verb in flight began, until 3 s after that verb ends). Every other KiCad window is the user's to raise by click, Alt-Tab, Win+number or anything else, whatever the bridge is doing. After a push it ASKS for the user's window back with one plain SetForegroundWindow: no thread-input attach, no ShowWindow, no BringWindowToTop, never a shell window (1.0.40; forcing the taskbar crashed Explorer in Taskbar.View.dll). Also found: the win/ unit tests never run in the Linux container, and the once-per-window test had been failing unseen since 2026-09-12; the whole Windows test binary (36 tests) now passes on a real Windows box. (John Lauer)
  • 1.0.41: 1.0.41: the background guard stops guessing. It used to decide whether a KiCad window reaching the foreground was the user's doing from a 120 ms mouse-button poll and a timing window, and while any verb ran it pushed back ANY bridge-owned KiCad window, again and again. John, clicking KiCad's taskbar buttons during a test: 'i just tried clicking to bring kicad to the foreground and then you yank it to the background on me'. New rule, no heuristics: the bridge may push back only the window it is OPENING RIGHT NOW (one that did not exist when the verb in flight began, until 3 s after that verb ends). Every other KiCad window is the user's to raise by click, Alt-Tab, Win+number or anything else, whatever the bridge is doing. After a push it ASKS for the user's window back with one plain SetForegroundWindow: no thread-input attach, no ShowWindow, no BringWindowToTop, never a shell window (1.0.40; forcing the taskbar crashed Explorer in Taskbar.View.dll). Also found: the win/ unit tests never run in the Linux container, and the once-per-window test had been failing unseen since 2026-09-12; the whole Windows test binary (36 tests) now passes on a real Windows box. (John Lauer)
  • 1.0.40: 1.0.40: the bridge no longer crashes Windows Explorer. When a KiCad window reached the foreground during a verb, the bridge sent it behind and then forced the user's previous window back to the front (thread-input attach, ShowWindow, BringWindowToTop, SetForegroundWindow). Clicking a KiCad taskbar button makes the TASKBAR that previous window, so the bridge did this to the Windows 11 taskbar and Explorer crashed inside Taskbar.View.dll (0xc0000005), twice in a row on AdomLapper and earlier on winvm. Now: a shell window (taskbar, Start, desktop, anything owned by explorer.exe) is never recorded as the user's window and never forced to the front. And the user's own click is recognised properly: any input in the last 1.5 s with the cursor on the taskbar or on the KiCad window means the user brought it up, so it is left alone; the old test polled the mouse button every 120 ms and missed quick clicks, which is why a clicked KiCad window was sometimes sent away again. This bug is in every earlier native build, including public 1.0.37. (John Lauer)
  • 1.0.40: 1.0.40: the bridge no longer crashes Windows Explorer. When a KiCad window reached the foreground during a verb, the bridge sent it behind and then forced the user's previous window back to the front (thread-input attach, ShowWindow, BringWindowToTop, SetForegroundWindow). Clicking a KiCad taskbar button makes the TASKBAR that previous window, so the bridge did this to the Windows 11 taskbar and Explorer crashed inside Taskbar.View.dll (0xc0000005), twice in a row on AdomLapper and earlier on winvm. Now: a shell window (taskbar, Start, desktop, anything owned by explorer.exe) is never recorded as the user's window and never forced to the front. And the user's own click is recognised properly: any input in the last 1.5 s with the cursor on the taskbar or on the KiCad window means the user brought it up, so it is left alone; the old test polled the mouse button every 120 ms and missed quick clicks, which is why a clicked KiCad window was sometimes sent away again. This bug is in every earlier native build, including public 1.0.37. (John Lauer)
  • promote.py promotes the requested version and verifies it landed (John Lauer)
  • correct the public manifest to 1.0.37: promote.py copied the insiders document (1.0.39) instead of the requested version. John's words: ok, promote 1.0.37 (John Lauer)
  • promote 1.0.37 to public: ok, promote 1.0.37 (John Lauer)
  • 1.0.39: 1.0.39: REVERTS the 1.0.38 change. 1.0.38 retried a refused push to the background; on a slow VM the same KiCad window was then pushed repeatedly within seconds, and each push also forces the user's previous window to the front. With the taskbar as that window, Explorer was hammered and restarted while John was clicking KiCad's taskbar buttons. 1.0.39 is 1.0.37 plus this revert: one push per window, landed or not. Do not promote 1.0.38. The foreground design is wiki #112. (John Lauer)
  • 1.0.39: 1.0.39: REVERTS the 1.0.38 change. 1.0.38 retried a refused push to the background; on a slow VM the same KiCad window was then pushed repeatedly within seconds, and each push also forces the user's previous window to the front. With the taskbar as that window, Explorer was hammered and restarted while John was clicking KiCad's taskbar buttons. 1.0.39 is 1.0.37 plus this revert: one push per window, landed or not. Do not promote 1.0.38. The foreground design is wiki #112. (John Lauer)
  • 1.0.38: 1.0.38: a KiCad window that was busy loading when the bridge tried to send it behind the user's window is now retried until the push lands. The once-per-window slot was claimed before the push, so a refused push (the editor not answering, usual on a slow machine) used the slot up and KiCad stayed in front for good: kicad_open_board left the PCB Editor on top of the user's window on a 2-core VM, twice. A refusal draws no frame, so the retry cannot strobe. Found by the full verb battery on a from-scratch VM, which otherwise passed 117 of 118 verbs on 1.0.37. The wider problem, that every KiCad window takes the foreground for a few milliseconds before it is bounced, is wiki #112 and is not changed here. (John Lauer)
  • 1.0.38: 1.0.38: a KiCad window that was busy loading when the bridge tried to send it behind the user's window is now retried until the push lands. The once-per-window slot was claimed before the push, so a refused push (the editor not answering, usual on a slow machine) used the slot up and KiCad stayed in front for good: kicad_open_board left the PCB Editor on top of the user's window on a 2-core VM, twice. A refusal draws no frame, so the retry cannot strobe. Found by the full verb battery on a from-scratch VM, which otherwise passed 117 of 118 verbs on 1.0.37. The wider problem, that every KiCad window takes the foreground for a few milliseconds before it is bounced, is wiki #112 and is not changed here. (John Lauer)
  • page.json last so the hero survives (John Lauer)
  • PR #20 declared in bridge.json and the root skill; verb battery 118 verbs; skills package 1.0.146 (John Lauer)
  • Publish 1.0.146 (John Lauer)
  • 1.0.37: 1.0.37: kicad_uninstall_library (PR #20, from the adom-footprint thread): the inverse of kicad_install_library, removes a library row from sym-lib-table and/or fp-lib-table and, with deleteFiles:true, the installed copy under Documents/KiCad/ only; refuses the shared Adom library and KiCad's stock libraries. Owner's additions on top: a row of type Table (how a fresh KiCad 10 holds ALL its stock libraries) is stock and never removed, and the managed-folder test is a path boundary, not a string prefix. Wiki #111: kicad_install_library answers kicadRunning, tableReloadNeeded and a _reloadHint when a running KiCad cannot see the new library yet, and kicad_open_footprint_editor tells three failures apart from the disk (library_not_registered, footprint_not_in_library with availableFootprints, library_not_loaded_by_running_kicad with the exact rescan call) instead of a generic did-not-load. Verb battery: install_library_bundle is a real test now (installs a generated bundle, uninstalls it again); 118 verbs, one stated skip. (John Lauer)
  • 1.0.36: 1.0.36: three more fixes from the full verb battery on a from-scratch Windows VM (KiCad 10.0.6). Stock libraries resolve on a fresh KiCad 10 install: its user sym-lib-table and fp-lib-table hold ONE row of type Table pointing at KiCad's template table, and the bridge only read the top level, so Device and every other stock library looked unregistered (kicad_list_symbols, kicad_sch_place_symbol and kicad_list_footprints now follow the nested table; the writers still never touch that row). kicad_open_symbol_editor and the other tree navigations wait for an editor that is busy loading libraries instead of giving up after 1.5 s. kicad_rescan_libraries gets the same foreground guard as the open verbs, so a footprint that finishes loading late no longer leaves the editor on top of the user's window. (John Lauer)
  • 1.0.36: 1.0.36: three more fixes from the full verb battery on a from-scratch Windows VM (KiCad 10.0.6). Stock libraries resolve on a fresh KiCad 10 install: its user sym-lib-table and fp-lib-table hold ONE row of type Table pointing at KiCad's template table, and the bridge only read the top level, so Device and every other stock library looked unregistered (kicad_list_symbols, kicad_sch_place_symbol and kicad_list_footprints now follow the nested table; the writers still never touch that row). kicad_open_symbol_editor and the other tree navigations wait for an editor that is busy loading libraries instead of giving up after 1.5 s. kicad_rescan_libraries gets the same foreground guard as the open verbs, so a footprint that finishes loading late no longer leaves the editor on top of the user's window. (John Lauer)
  • 1.0.35: 1.0.35: three fixes from a from-scratch install on a clean Windows VM (KiCad 10.0.6, no GPU). kicad_upgrade's first-run seeding now MERGES into the kicad_common.json that kicad-cli writes during the install's own verify step (it used to skip an existing file, so the startup wizard showed on every blank box and the IPC API stayed off); a file whose first-run prompts are answered is still left alone, backup kept. kicad_taskbar_repair also looks under ProgramData, where an all-users install puts its Start Menu shortcuts (it reported all three missing). The 3D verbs answer canvasRendered:false with a _renderHint when KiCad has reported Could not use OpenGL, instead of ok over a black viewer (wiki #100), and point at kicad_enable_software_opengl. kicad_readiness no longer says window verbs are served by the Python bridge. (John Lauer)
  • 1.0.35: 1.0.35: three fixes from a from-scratch install on a clean Windows VM (KiCad 10.0.6, no GPU). kicad_upgrade's first-run seeding now MERGES into the kicad_common.json that kicad-cli writes during the install's own verify step (it used to skip an existing file, so the startup wizard showed on every blank box and the IPC API stayed off); a file whose first-run prompts are answered is still left alone, backup kept. kicad_taskbar_repair also looks under ProgramData, where an all-users install puts its Start Menu shortcuts (it reported all three missing). The 3D verbs answer canvasRendered:false with a _renderHint when KiCad has reported Could not use OpenGL, instead of ok over a black viewer (wiki #100), and point at kicad_enable_software_opengl. kicad_readiness no longer says window verbs are served by the Python bridge. (John Lauer)
  • promote 1.0.34 to public: ok promote to public (John Lauer)
  • page.json last so the hero survives (John Lauer)
  • Publish 1.0.145 (John Lauer)
  • 1.0.34: 1.0.34 (wiki #107): the window placement memory reads the flat file the Python build (0.9.x) wrote, so an upgrading user's remembered windows survive the first native save. Found on arav-rog during the two-monitor tests, which passed: a PCB editor parked on a second display at negative x and a different DPI scale came back there after a force-kill (moved:true), a remembered rect on a display that is not connected was refused, and an idle window was left alone. (John Lauer)
  • 1.0.34: 1.0.34 (wiki #107): the window placement memory reads the flat file the Python build (0.9.x) wrote, so an upgrading user's remembered windows survive the first native save. Found on arav-rog during the two-monitor tests, which passed: a PCB editor parked on a second display at negative x and a different DPI scale came back there after a force-kill (moved:true), a remembered rect on a display that is not connected was refused, and an idle window was left alone. (John Lauer)
  • page.json last so the hero survives (John Lauer)
  • Publish 1.0.144 (John Lauer)
  • 1.0.33: NATIVE (Rust) build. 1.0.33 (wiki #109): model check and 3D show verbs report the 3D viewer's model-visibility toggles and say when a hidden class exists on the board; new kicad_3d_viewer_settings; failed kicad_close lists dialogsSeen; show verbs wait for the file's title before capturing. (John Lauer)
  • 1.0.33: NATIVE (Rust) build. 1.0.33 (wiki #109): model check and 3D show verbs report the 3D viewer's model-visibility toggles and say when a hidden class exists on the board; new kicad_3d_viewer_settings; failed kicad_close lists dialogsSeen; show verbs wait for the file's title before capturing. (John Lauer)
  • Edited via adom-wiki: brief (John Lauer)
  • kicad-bridge-contributing: drop a filler word (John Lauer)
  • Contributing path: kicad-bridge-contributing skill, README Contribute section, native-Rust description; page.json re-pushed last to keep the hero (John Lauer)
  • Publish 1.0.143 (John Lauer)
  • 1.0.32: NATIVE (Rust) build. 1.0.32: contributing is part of the contract: failed replies and kicad_describe point the AI at this page's source and the branch-PR recipe (skill kicad-bridge-contributing, package 1.0.143). (John Lauer)
  • 1.0.31: NATIVE (Rust) build. 1.0.31: the foreground toast is debounced (foregroundToastMinutes setting, default 10, 0 = off); the on-screen caption on the driven box is unchanged. (John Lauer)
  • 1.0.31: NATIVE (Rust) build. 1.0.31: the foreground toast is debounced (foregroundToastMinutes setting, default 10, 0 = off); the on-screen caption on the driven box is unchanged. (John Lauer)
  • 1.0.30: NATIVE (Rust) build. 1.0.30: kicad_taskbar_repair fixes the white taskbar icon on standalone KiCad editors by writing KiCad's own AUMID onto its standalone Start Menu shortcuts, once at every bridge start and on demand; no Adom identity; a stubborn button needs a logon or explorer restart. (John Lauer)
  • 1.0.30: NATIVE (Rust) build. 1.0.30: kicad_taskbar_repair fixes the white taskbar icon on standalone KiCad editors by writing KiCad's own AUMID onto its standalone Start Menu shortcuts, once at every bridge start and on demand; no Adom identity; a stubborn button needs a logon or explorer restart. (John Lauer)
  • 1.0.30: NATIVE (Rust) build. 1.0.30: kicad_taskbar_repair fixes the white taskbar icon on standalone KiCad editors by writing KiCad's own AUMID onto its standalone Start Menu shortcuts, once at every bridge start and on demand; no Adom identity; a stubborn button needs a logon or explorer restart. (John Lauer)
  • 1.0.29: NATIVE (Rust) build. 1.0.29: merges Astra PR #19: KiCad's PCB_FIELD_T refusal is classified as native_field_update_unsupported (kicadVersion, retryable:false) after a confirmed rollback; doc records the 10.0.5 limitation (wiki #104). (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.10.5 2026-08-25
  • Update 4 file(s) (John Lauer)
  • Publish 1.0.104 (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Publish 1.0.103 (John Lauer)
  • Update 1 file(s) (John Lauer)
  • Update 1 file(s) (John Lauer)
  • Update 5 file(s) (John Lauer)
  • Publish 1.0.102 (John Lauer)
  • Publish 1.0.101 (John Lauer)
  • Publish 1.0.100 (John Lauer)
  • Publish 1.0.99 (John Lauer)
  • Publish 1.0.98 (John Lauer)
  • Publish 1.0.97 (John Lauer)
  • Publish 1.0.96 (John Lauer)
  • Publish 1.0.95 (John Lauer)
  • Publish 1.0.94 (John Lauer)
  • Publish 1.0.93 (John Lauer)
  • Publish 1.0.92 (John Lauer)
  • Publish 1.0.91 (John Lauer)
  • Publish 1.0.90 (John Lauer)
  • Publish 1.0.89 (John Lauer)
  • Publish 1.0.88 (John Lauer)
  • Publish 1.0.87 (John Lauer)
  • Publish 1.0.86 (John Lauer)
  • Publish 1.0.85 (John Lauer)
  • Publish 1.0.84 (John Lauer)
  • Publish 1.0.83 (John Lauer)
  • Publish 1.0.82 (John Lauer)
  • Publish 1.0.81 (John Lauer)
  • Publish 1.0.80 (John Lauer)
  • Publish 1.0.79 (John Lauer)
  • Publish 1.0.78 (John Lauer)
  • Publish 1.0.77 (John Lauer)
  • Publish 1.0.76 (John Lauer)
  • Publish 1.0.75 (John Lauer)
  • Publish 1.0.74 (John Lauer)
  • Publish 1.0.73 (John Lauer)
  • Publish 1.0.72 (John Lauer)
  • Publish 1.0.71 (John Lauer)
  • Publish 1.0.70 (John Lauer)
  • Publish 1.0.69 (John Lauer)
  • Publish 1.0.68 (John Lauer)
  • Publish 1.0.67 (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.10.4 2026-08-21
  • Publish 1.0.42 (John Lauer)
  • Update 5 file(s) (John Lauer)
  • Delete dock.json (John Lauer)
  • Rename to dockbar.json: the canonical manifest name (hard cutover) (John Lauer)
  • Publish 1.0.41 (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.10.3 2026-08-21
  • Publish 1.0.42 (John Lauer)
  • Update 5 file(s) (John Lauer)
  • Delete dock.json (John Lauer)
  • Rename to dockbar.json: the canonical manifest name (hard cutover) (John Lauer)
  • Publish 1.0.41 (John Lauer)
  • Update 3 file(s) (John Lauer)
  • Publish 1.0.40 (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Publish 1.0.39 (John Lauer)
  • Update 3 file(s) (John Lauer)
  • Publish 1.0.38 (John Lauer)
  • Update 3 file(s) (John Lauer)
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.10.0 2026-07-23
  • Publish 1.0.16 (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.351 2026-09-11

Rust port plan phase 0: seeds KiCad's six do_not_show_again nags, api.enable_server, update-check and eeschema prompt suppression at first-run config seeding (bridge-created files only, never a user's own settings); deletes dead launch_editor.ps1, unused handlers/foreground_guard.py and the legacy tour/ orchestrator. Plan and comparison sub-readmes published under docs/. Gate: ConfRoomROG 71 pass / 1 fail (known idle-box foreground grant on kicad_launch) / 15 skip; adom_library_heal verified live.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.350 2026-09-09

kicad_model_check and model diagnostics on the 3D show verbs (#88)

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.349 2026-09-09

kicad_status carries operation state for timeout recovery (#87)

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.348 2026-09-08

Focus guardian identity survives hwnd reuse; editors spawn without activation (pre-promotion run findings)

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.347 2026-09-07

kicad_close honours unsaved work (#84); verified footprint rescan (#51)

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.343 2026-09-07

Footprint loads with two pcbnew processes; list_footprints reads the fp-lib-table (#81)

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.342 2026-09-07

First-run wizard deadlock: time-boxed dialog clicks and bounded sweeps (#83)

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.341 2026-09-07

Release-day fixes: stock library path resolution (#80), screenshot_all sizeKB (#81), readiness re-detect (#82), routing DRC completeness (PR 82), verified source pushes (#79), full verb-test coverage (#78)

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.340 2026-09-07

Live routing verbs through KiCad's IPC API (routing_state, route_net, remove_route, routing_validate), offline copper verbs (board_pads, add_track, add_via, route), kicad_ipc_api, KiCad 10 name-based nets, vendored routing deps

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.339 2026-09-05

Tour motion: zoom depth per beat (one step for a single part, two plus one for a sheet or board)

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.338 2026-09-05

Tour: reopen the board when the file on disk is newer than the running pcbnew, so attached 3D bodies actually show

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.337 2026-09-05

Tour: a 3D model file that is not installed on this box counts as dead too; the MOSFETs then get KiCad's TDSON-8-1 body and the board reloads

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.336 2026-09-05

Tour: dead 3D model references are removed as balanced blocks (the regex missed the MOSFETs), so KiCad's TDSON-8-1 body attaches and the board reloads

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.335 2026-09-05

Tour: 3D body attach report lists what it saw for the MOSFET footprints (debug)

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.334 2026-09-05

Tour: two-part beats (A loads with its own line, B explains and moves once verified), part timestamps on the record, 3D body attach report says where it looked

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.333 2026-09-05

Tour: every beat in two parts (A loads the window with its own line, B starts once verified with the explaining line and the motion); part timestamps on the record; dead 3D bodies replaced by KiCad standard ones

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.332 2026-09-05

Footprint open: a hidden Library Tree filter box counts as missing (wx hides the pane, the control survives), so the pane is shown and waited for; tour prep summary (3D bodies attached, cache restart) on the progress record

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.331 2026-09-05

Footprint open: the plugin-free background loader also shows a hidden Library Tree pane before typing (arav-rog: the pane fix only covered the fallback path); tour reloads the board after attaching 3D bodies; prep summary on the record

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.330 2026-09-05

Tour: attach KiCad's standard 3D bodies to footprints the board left without one (six MOSFETs get TDSON-8-1); Footprint Editor Library Tree pane is shown once and waited for, never toggled back off

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.329 2026-09-05

Tour: restart KiCad during prepare when the footprint file is newer than the running KiCad (process start time vs file mtime), not only when it is new; startedAt and narrationAt on each step record

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.328 2026-09-05

Tour: footprint install leaves an identical file untouched (mtime bump made KiCad's cache look stale on every tour after the first); per-beat startedAt and narrationAt on the record for syncing a recording

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.327 2026-09-05

Tour: editor and viewer windows at 98 percent of the work area, centered (John)

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.326 2026-09-05

Tour: all editor and viewer windows at 95 percent of the work area, centered; 2D motion aims at the featured part (position parsed from the board and schematic) and checks the canvas after each gesture; 3D motion re-frames when the board is clipped or tiny

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.325 2026-09-05

Footprint open: when the Footprint Editor's Library Tree pane is hidden, show it through the frame's own View menu (plugin wm_command) before navigating; arav-rog had it hidden and every load failed

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.324 2026-09-05

Footprint open: never restart KiCad for a stale cache when the editor never opened (plugin_not_running restarted KiCad twice on arav-rog); tour footprint beat ensures pcbnew is open and its plugin alive; window rows carry minimized/image so 'in front' skips minimized windows

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.323 2026-09-05

Tour: a brand-new footprint restarts KiCad during prepare (before any window), never mid-beat; the footprint beat waits retryAfterMs on kicad_restarted_retry

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.322 2026-09-05

Tour: a brand-new footprint restarts KiCad during prepare (before any window), not mid-beat; install_footprint reports existedBefore; the footprint beat waits retryAfterMs on kicad_restarted_retry

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.321 2026-09-05

Tour: 'in front' ignores shell popups, minimized windows and our own overlays (arav-rog measured RustDesk minimized and PopupHost as the top window); footprint beat retries twice without the plugin wait; 2D motion recenters when a pan or zoom empties the canvas

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.320 2026-09-05

Tour: leave KiCad's main window as KiCad opens it; footprint beat waits for the project manager plugin and retries (cold KiCad on arav-rog failed both footprint beats)

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.319 2026-09-05

Tour: read the unwrapped desktop_list_windows payload (verify and foreground worked off a local list with no z-order on arav-rog); beat captions bottom-left clear of the demo panel; small top captions announce each foreground and the acks

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.318 2026-09-04

Wiki #48: the 20 s idle healer measured window reachability against the primary monitor only and pulled windows on a second monitor back to the primary; it now measures against the monitor the window overlaps

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.317 2026-09-04

Tour remote: dashboard presses recorded, acked with a caption, and honoured at the next gesture like panel presses

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.316 2026-09-04

Tour remote: FIFO press queue (no press lost), poll-drained presses recorded, presses on progress

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.315 2026-09-04

Tour remote: prev/next/pause cut the beat in flight at the next gesture; back goes to the beat before the one on screen; presses and acks recorded

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.314 2026-09-04

Tour layout: restore a window's bounds before the tour closes it so KiCad's sticky geometry is never corrupted

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.313 2026-09-04

Tour layout: read the unwrapped desktop_list_monitors payload so windows are placed in their 80 percent slots

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.312 2026-09-04

kicad_demo layoutProbe diagnostic; layout uses the monitor work area

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.311 2026-09-04

Fix: demo.py lacked the json import used by the new window-bounds save/restore (0.9.310 would have silently skipped saving bounds).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.310 2026-09-04

Tour layout for the recording (John): each beat's window is placed at 80% of the primary screen in its slot (symbol upper-left, footprint nudged, chip 3D upper-right, schematic lower-left nudged, board 2D lower-left, board 3D lower-right) and the KiCad manager is centered at its own size; every bound is saved first and restored at the tour's end, stop, failure, or the next start (leftovers file), so KiCad's sticky sizes end up as the user had them. Every caption's reply is recorded on progress; a press on the remote gets an immediate acknowledgement caption at the top of the screen; the settle check waits up to 8 s for two identical captures instead of sampling once.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.309 2026-09-04

Tour 3D beats no longer end with Zoom to Fit: in KiCad's 3D viewer that command also resets the orientation, so the board beat ended top-down on John's laptop; the beat now ends on the isometric it built (zoom in/out net to zero, framed at the opening fit).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.308 2026-09-04

Motion gate: GetForegroundWindow can lag AD's z-order right after a raise, which aborted the symbol beat's motion at its first gesture on John's laptop while AD had already measured the window on top; the gate now waits up to 1.5 s for the OS to agree. Panel record keeps the callback URL across stage-advance shows.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.307 2026-09-04

Tour verification (John: 'tool your bridge code to definitively know that the correct thing is showing'): every beat now MEASURES, after its raise, that its own window is the top of AD's z-order, that the live title carries the expected document, that the GL canvas is rendered (kicad_ui canvas probe) and that two captures 0.8 s apart are identical (settled). The result rides on the step and on progress as ; motion runs only on a verified window, otherwise the step says exactly which fact failed and which window was actually on top. Zoom discipline: 2D beats start and end on extents with two wheel clicks in and back out; 3D beats zoom one menu step in and out and end on Zoom to Fit while staying isometric.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.306 2026-09-04

Tour 3D motion is now deterministic: KiCad's own View menu commands (Rotate X/Z by 10 degrees, Zoom In/Out, Zoom to Fit) resolved from the live menu bar and posted as WM_COMMAND, so the isometric and the orbit are the same on every DPI and need no mouse or foreground; mouse drags remain only as the fallback (they flipped the chip viewer and did nothing in the board viewer on 2026-09-03). Each step in the result now carries the window handle and title it drove.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.305 2026-09-04

Tour window targeting (John's laptop: fourteen KiCad windows from days of demos; the 2D beat showed an empty untitled PCB Editor and the 3D beat the old sample cube): every beat now targets the tour's own document titles (esc-g431 schematic and board, the Adom STM32 symbol, the LQFP footprint), reuses an existing window instead of opening a duplicate, and opens each 3D view from that exact editor (open_3d_viewer accepts pcbHwnd/fpHwnd). The clean slate at start also closes old adom-demo documents and an empty untitled PCB Editor.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.304 2026-09-04

Tour identity fix (John's dashboard run, 2026-09-03): ab refused the demo panel, every caption, every raise and every window close from the tour thread with 'carries no caller identity' (toast fallback, no captions, nothing in front). Every loopback call the bridge makes now carries identity: the X-Adom-Caller headers of the request being served, or the bridge's own self caller otherwise; the tour thread and ab's callback thread adopt the identity of the request that started the tour. Also: a failed panel show no longer demotes later tours to the toast (per-tour reset, one retry), and every 3D viewer plus the Footprint Editor are closed before the beats so the footprint beat opens a fresh, re-indexed editor.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.303 2026-09-04

Tour sync: the verb-side control channel (kicad_demo {control}) is cleared at tour start too, so a pause/next/exit queued against a previous tour never steers a new one; completes the stale-press drain of 0.9.302.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.302 2026-09-04

Tour sync fixes (John's run on 0.9.301): stale panel presses from the previous show are drained before a tour starts (his earlier NEXT presses made the new tour jump to step 3 at once); the narration mute is reset from the call's muted flag at thread start and pushed to the panel on the first show; STOP from the remote sets stopping on progress immediately so the dashboard can close its own pill; progress carries stopping.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.301 2026-09-04

Taskbar hygiene (John: frozen progress bars on every KiCad window, no Adom badge): the boot sweep that clears leftover bars ran once at +6 s while ab was still restarting and failed silently; it now retries across the first two minutes until a window answers, and a five-minute idle reaper clears progress and badge on every KiCad window whenever the bridge is driving nothing. Filed adom/adom-bridge#138 for a progress TTL on ab's side.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.300 2026-09-04

Tour 3D motion recalibrated: the orbit drags totalled about a third of the viewer width and turned the board nearly edge-on (KiCad's trackball is roughly 0.1 degree per pixel). Now ~30 degrees of tilt and ~40 of yaw for the isometric, then three gentle orbits with zoom, slower and smoother for the recording.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.299 2026-09-04

Tour board-in-3D fix: KiCad's 3D viewers are unowned top-level windows, so picking 'the viewer owned by the PCB Editor' never matched and the chip's viewer was never closed (0.9.298 test-box run: board3d failed with the viewer actually open). The beats now take the viewer that APPEARS after their open, the chip's viewer is remembered and closed by handle before the board's opens, with the topmost viewer as fallback.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.298 2026-09-04

Fix: the 0.9.297 tour job died on a NameError (_EXIT undefined) before its first progress update, so Play the demo showed the dashboard's transport pill and nothing else (John, lost, 2026-09-03). _EXIT is defined and the job's reset sits inside its try so any early failure lands on progress as an error instead of a silent stall.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.297 2026-09-04

Tour: motion on every beat for the recording (fit, wheel zoom in/out, middle-drag pans in the 2D editors; Home, an isometric left-drag and three orbits with zoom in the 3D viewers), sent only while the beat's window is confirmed in front and aborted at the next gesture on STOP or when the user switches away. The board-in-3D beat now closes the chip's 3D viewer first and picks the viewer owned by the PCB Editor (the last beat was showing the chip's viewer by title match). STOP from the remote's X now clears the caption and ends the tour within the beat, audio already off. Per-beat motion reports ride on the result.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.296 2026-09-04

Tour foreground fix (John: 'why do I not see you foregrounding any kicad window'): the beat raise called SetForegroundWindow from the bridge process and reported true regardless; Windows refuses that from a background process while the user works elsewhere. The bridge now lifts its no-activate mark, asks ab's desktop_bring_to_front to raise the beat's window once, and reports foregrounded only when the z-order afterwards shows that window on top.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.295 2026-09-04

The tour now walks a real Adom board, adom/esc-g431 (149 footprints, 227 symbols): its STM32G431 symbol and LQFP-48 footprint are lifted from the wiki files at tour time and installed into the Adom library, then symbol, footprint, chip in 3D, schematic, board 2D, board 3D in that order. Captions were never painting because ab requires reason on desktop_caption; fixed, medium size, one line per beat. Narration re-rendered to match. Wording no longer claims the background: each beat's window is brought to the user once. Dead local 3D model paths in the board are dropped.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.294 2026-09-04

Demo panel callback URL fix: the bridge read its bound port from a second copy of the server module and sent no eventCallbackUrl to ab (panel presses reached the tour only via poll). The port now travels through the environment, so every press is POSTed to the bridge the instant it is clicked. Verified on the test box: a press to the loopback route paused within the beat, muted at once, and resumed on play.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.293 2026-09-04

kicad_demo progress now reports panel (last show reply, stage, callback URL), muted, muteSource, lastPress and paused; each step in the final result carries foregrounded (whether the beat's window was brought forward once).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.292 2026-09-04

Demo panel: reason is sent on every show (ab marks it required on show; a stage-advance show without it was refused live and the remote stayed at 1/7), and every show's reply is recorded on kicad_demo progress (panel: shown, stage, callbackUrl, error) so a refused show is visible instead of silent.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.291 2026-09-04

kicad_demo adopts the ab 2.1.17 demo-panel contract: the first show passes eventCallbackUrl (loopback POST /demo/event on the bridge's own port) so a press lands the instant it is clicked; mute/unmute silence or replay the beat's narration at once; pause/stop silence at once and apply at the beat boundary; stage-advance shows send only the stage so a user's pause or mute is never undone; the poll stays as backstop and skips presses already delivered. The tour now foregrounds each beat's window exactly once (John: the user must see which window is being demoed, but keeps full control between beats); no persistent focus guardian during the tour. One short ab caption per beat stays.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.290 2026-09-04

kicad_demo drives ab's desktop_demo_panel (Adom Bridge 2.1.0+, wiki adom/adom-bridge#116): the floaty play/pause/next/back/stop remote is shown at stage 0 with the seven stops, polled between beats, stage and state updated per beat, hidden on done/exit/error; the toast transport remains only as the fallback for an older ab. Every beat paints one short ab caption (KiCad tour n/7: ...) for about the beat's length instead of a paragraph for a minute (John, 2026-09-03).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.289 2026-09-03

John, 2026-09-03: no caption on a Symbol Editor launch or rescan reopen (the 0.9.285 one was large, shown too long, and wrong on his laptop: it promised 'behind your window' while KiCad raised itself in front while loading). Launch is silent. _foreground now also reports editorInFrontAtEnd, measured from AD's z-order at return time, so a response never claims background about a window the user can see on top. Dev skill records the rule: one early look, no fighting the user for the foreground, captions only on the opt-in allowFocusSteal path and short.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.288 2026-09-03

Captions before a KiCad window appears now name the calling AI thread (John saw one on his laptop and could not tell which thread was opening the editor). The Symbol Editor close used by rescan goes through ab's desktop_close_window (ab 2.1.12+, graceful, never forced) with the local WM_CLOSE as fallback for older ab; responses say editorCloseVia. Bridge owns KiCad, AD owns Windows (wiki #74 item 3).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.287 2026-09-03

Wiki #71 (Ray, 0.9.286 run): (1) the posted Enter now goes FIRST to the window holding keyboard focus in KiCad's GUI thread (GetGUIThreadInfo), and wxDataView children count as tree candidates regardless of height, so a short Libraries pane no longer yields zero targets; (2) a navigation that ran out of the call budget returns navigation_unconfirmed_within_budget with the trace and _foreground instead of the 'still coming up' contract about an editor that was already driven; (3) an editor the bridge opened after the library file was last written is never judged stale again, so repeated calls stop re-opening it (staleVeto says so); (4) symbol_editor_did_not_open carries pathwaysTried; navigation_failed responses carry errorCode and resolved fields.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.286 2026-09-03

Z-order guard fix: the 0.9.285 guard read AD's window list with the wrong envelope shape and always saw nothing (field test reported 'no window was launched' during a real relaunch). Both the Symbol Editor launch guard and handlers/foreground_guard now read z-order through handlers.kicad_windows, the one parser of AD's desktop_list_windows.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.285 2026-09-03

Foreground etiquette on the Symbol Editor launch (wiki #71 field test): before opening or auto-rescan-relaunching the editor the bridge captions why a KiCad window is about to appear, remembers the user's front window, and the moment the new frame exists looks ONCE at the z-order; if the frame landed above a non-KiCad user window it slides the frame back behind it with SetWindowPos(NOACTIVATE) and then leaves the z-order alone for good (alt-tab and taskbar clicks stay the user's). show_library responses carry _foreground with what happened. kicad_install_symbol success now includes kicadParser (KiCad's verdict on the written file).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.284 2026-09-03

kicad_set_design_rules: response separates fabRuleViolations (DRC items citing one of the fab's rules by name) from otherViolations, and carries drcSummary; the copper layer count is read per layer entry, not per line, so a one-line (layers ...) block no longer infers 1 layer.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.283 2026-09-03

Wiki #73: kicad_list_design_rules and kicad_set_design_rules consume adom/pcb-design-rules at call time (fab, layers, process; layers defaults to the board's copper count; stages .kicad_dru with backup; runs DRC with it). Wiki #62: kicad_list_symbols (bridge inventory + kicadParser), and kicad_show_library resolves an MPN/file name to the real symbol name (exact, case-insensitive, unique prefix) reporting aliasedFrom/aliasHow. Navigation trace no longer implies the filter was not applied when wx answers WM_GETTEXT with ''. kicad-bridge-dev skill records the #71 lessons.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.282 2026-09-03

Wiki #71 (Ray's remaining case): on a fresh Symbol Editor the filtered tree lists the symbol but nothing is selected, so the posted Enter has nothing to activate and the posted double-click depends on row geometry (DPI). Ray measured select-then-real-Enter loads it. show_library now adds keyboard-only rounds: Down x1..3 posted to the tree candidates, then Enter, title-verified, still PostMessage only (no focus, no foreground). Success responses carry the navigation trace too, so a re-run shows which round landed.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.281 2026-09-03

Wiki #71: kicad_show_library failure responses now carry a per-step navigation trace (search Edit found, parent chain, filter text as read back, tree candidates with class and rect, editor title after Down, after posted Enter, after posted double-click). Ray measured on his box that the tree lists the symbol and a real Enter loads it while the bridge's posted Enter and double-click do not; the trace is how the next build finds which hwnd the Enter must reach.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.280 2026-09-03

kicad_install_symbol now passes errorCode (kicad_refuses_symbol), kicadParser and _hint through to the caller; 0.9.279 set them inside add_symbol but the verb wrapper dropped them, so the wire response had errorCode null.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.279 2026-09-03

Wiki #71 second cause, measured on ConfRoomROG with KiCad's own parser: one malformed symbol makes KiCad refuse a whole .kicad_sym (Symbol Editor lists the library EMPTY) while the bridge's structural reader called it clean. New handlers/kicad_parse_check.py runs kicad-cli sym export svg (read-only) as KiCad's verdict and inventory. kicad_install_symbol and kicad_install_library refuse a file KiCad refuses before writing (kicad_refuses_symbol / kicad_refuses_library); kicad_adom_library_status, kicad_lint_library and the kicad_show_library error carry kicadParser; kicad_adom_library_heal mode:prune drops the symbols KiCad refuses (dryRun names them, original kept as .pruned.bak). Lint's checkmark now says whether KiCad was consulted. Also measured: KiCad's library index is process-wide; a reopened editor frame keeps the old symbol set until kicad.exe fully restarts.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.278 2026-09-03

Wiki #72: kicad_install_library handed a single-part .kicad_sym now returns singlePartFile:true plus a hint naming kicad_install_symbol {filePath}, on both the fresh and already-registered success paths; a real multi-symbol library gets no hint. The verb still does what it did (registers the file as its own library); it just stops being silent about the shared Adom library being untouched.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.277 2026-09-03

kicad_adom_library_status: orphanedLibrary now means the orphan holds symbols the registered file lacks (unique-name compare; new orphanMissingFromRegistered and orphanMissingSample). A count compare kept flagging John's orphan after the 0.9.276 merge because its 122 lenient count included 28 duplicate copies. build_release.py refuses a non-semver first argument (a stray flag was once stamped in as the version).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.276 2026-09-03

heal merge reads a corrupt orphan tolerantly: the orphaned Adom library on a redirected box had 94 symbols inside the library plus 28 duplicate copies appended AFTER the closing paren (the old appender bug's fingerprint), so the strict gate refused the whole file. The heal SOURCE is now read block by block with a quote-aware depth scan, each block balance-checked on its own, duplicates deduped first-copy-wins and reported; the file WRITTEN still goes through the strict gate. Measured on the real file: 94 unique recoverable, 0 unparseable, 28 dupes.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.275 2026-09-03

kicad_adom_library_heal (wiki #71 follow-up, John's call: merge): reconcile a split Adom library by merging every symbol from the orphaned bridge-default file into the registered file KiCad reads, one quote-aware add behind the balance gate with a .bak; dryRun previews; repoint mode kept as the other answer. Never runs on its own. Idempotent, refuses an unbalanced source, never edits or deletes the orphan.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.274 2026-09-03

Wiki #71 root cause: on a OneDrive-redirected Documents the bridge used %USERPROFILE%/Documents while KiCad resolves the shell Documents folder, so the bridge wrote and reported symbols in a file KiCad never reads. Fix: kicad_detect resolves user_dir like KiCad (handlers/win_paths), the Adom symbol and footprint libraries are ROW-FIRST (install writes to the file sym-/fp-lib-table registers), adom_library_status reports registeredPath/bridgeDefaultPath/split/orphanedLibrary, and the library_cache_stale verdict is built from that measurement instead of a cache story (both prior explanations were disproved by Ray).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.273 2026-09-03

Adopt the insiders tier: bridge.json declares insidersManifestUrl, build_release ships to insiders by default and refuses to publish without a changelog, tools/promote.py moves the public manifest only on a human's attestation. Wiki #72 groundwork.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.272 2026-09-03
  • Update 40 file(s) (John Lauer)
  • Update 40 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.271 2026-09-01
  • Update 40 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.270 2026-09-01
  • Update 40 file(s) (John Lauer)
  • Update 40 file(s) (John Lauer)
  • Publish 1.0.109 (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.269 2026-09-01
  • Update 40 file(s) (John Lauer)
  • Update 40 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.268 2026-09-01
  • Update 40 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.267 2026-09-01
  • Update 40 file(s) (John Lauer)
  • Update 40 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.266 2026-09-01
  • Update 40 file(s) (John Lauer)
  • Update 40 file(s) (John Lauer)
  • Update 3 file(s) (John Lauer)
  • Publish 1.0.108 (John Lauer)
  • Publish 1.0.107 (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.265 2026-09-01
  • Update 40 file(s) (John Lauer)
  • Update 40 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.264 2026-09-01
  • Update 40 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.263 2026-09-01
  • Update 40 file(s) (John Lauer)
  • Update 40 file(s) (John Lauer)
  • Update 3 file(s) (John Lauer)
  • Publish 1.0.106 (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.262 2026-08-31
  • Update 40 file(s) (John Lauer)
  • Update 40 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.261 2026-08-27
  • Update 3 file(s) (John Lauer)
  • Update 40 file(s) (John Lauer)
  • Update 40 file(s) (John Lauer)
  • Publish 1.0.105 (John Lauer)
  • Update 5 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.260 2026-08-27

The left-open editor's reveal: plugin tree-select when the reverse bridge is alive (4s check), else a plugin-free WM_SETTEXT of the filter to JUST the library name, no Enter, so the loaded symbol stays and the full part list shows. eeschema's embedded Python initializes lazily, so the win32 path is the normal cold-start route.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.259 2026-08-27

The plugin installer's PAYLOAD_VERSION now derives from plugin_payload/adom_bridge.py's own version instead of a hardcoded constant: the constant sat at 0.9.1 while the payload shipped 0.9.2, so deploys no-opped as already-current and reveal_library never reached any machine.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.258 2026-08-27

The library reveal waits up to 15s for a cold-started eeschema's reverse-bridge plugin to bind before selecting the library node, instead of racing the bind and silently leaving the filter.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.257 2026-08-27

The library-reveal step surfaces why it could not run (revealDetail) instead of silently leaving the filter in place.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.256 2026-08-27

New plugin method reveal_library (plugin 0.9.2): after the install proof shot, the left-open Symbol Editor clears its tree filter and selects/expands the new library NODE by name, so the full part list shows and a generic library name (UI) can never lose a fuzzy text match to other libraries' parts.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.255 2026-08-27

After the proof shot, the left-open Symbol Editor's tree filter loosens to just the library name so the user sees the full part list, not only the photographed symbol.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.254 2026-08-27

install_library_bundle capture:true now LEAVES the Symbol Editor open on the installed library, tree filtered to its name and kept behind the user's windows, instead of closing it after the proof shot: the close made a successful install feel unverified. closeEditor:true restores the old behavior. Result carries editorLeftOpen.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.253 2026-08-26

kicad_install_library_bundle capture:true: after a successful install (and only when KiCad was not already running), opens the Symbol Editor on the new library in the background, returns the shot frame (thumbnailDataUrl for browser callers), and closes the editor it opened. proofSkipped names why when no frame is possible. The verb joined the focus-guard sets so the proof window can never land on top of the user.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.252 2026-08-26

kicad_install_library_bundle: install an Adom wiki Cloud Library bundle zip (symbols, footprints, 3D models with ref rewriting) in one consent-gated verb. Built for the wiki Export button's no-AI bridge lane; reports kicadRunning/restartNeeded instead of ever closing the user's KiCad.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.251 2026-08-26
  • install_library: footprint installs carry a bundle's 3D models (0.9.251) (Colby Knox)
  • macos manifest -> 0.10.5 (stats + library-browser TCC gates) (Kyle Bergstedt)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.250 2026-08-24
  • Update 3 file(s) (John Lauer)
  • Publish 1.0.66 (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.249 2026-08-24
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.248 2026-08-24
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.247 2026-08-24
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.246 2026-08-23
  • Update 3 file(s) (John Lauer)
  • Publish 1.0.65 (John Lauer)
  • Publish 1.0.64 (John Lauer)
  • Publish 1.0.63 (John Lauer)
  • Publish 1.0.62 (John Lauer)
  • Publish 1.0.61 (John Lauer)
  • Publish 1.0.60 (John Lauer)
  • Publish 1.0.59 (John Lauer)
  • Publish 1.0.58 (John Lauer)
  • Publish 1.0.57 (John Lauer)
  • Publish 1.0.56 (John Lauer)
  • Publish 1.0.55 (John Lauer)
  • Publish 1.0.54 (John Lauer)
  • Publish 1.0.53 (John Lauer)
  • Publish 1.0.52 (John Lauer)
  • Publish 1.0.51 (John Lauer)
  • Publish 1.0.50 (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.245 2026-08-23
  • Update 3 file(s) (John Lauer)
  • Publish 1.0.49 (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.244 2026-08-23
  • Update 3 file(s) (John Lauer)
  • Publish 1.0.48 (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.243 2026-08-23
  • Update 3 file(s) (John Lauer)
  • Publish 1.0.47 (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.242 2026-08-23
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.241 2026-08-23
  • Update 3 file(s) (John Lauer)
  • Publish 1.0.46 (John Lauer)
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.240 2026-08-23
  • Update 3 file(s) (John Lauer)
  • Publish 1.0.45 (John Lauer)
  • Update 3 file(s) (John Lauer)
  • Update 1 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.239 2026-08-22
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.238 2026-08-22
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.237 2026-08-22
  • Update 3 file(s) (John Lauer)
  • Publish 1.0.44 (John Lauer)
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.236 2026-08-22
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.235 2026-08-22
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.234 2026-08-22
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.233 2026-08-22
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.232 2026-08-22
  • Update 3 file(s) (John Lauer)
  • Publish 1.0.43 (John Lauer)
  • Update 5 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.231 2026-08-22
  • Update 3 file(s) (John Lauer)
  • Update 1 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.230 2026-08-22
  • Update 3 file(s) (John Lauer)
  • add macos-line update manifest (0.10.4); shared windows manifest untouched (Kyle Bergstedt)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.229 2026-08-21
  • Update 3 file(s) (John Lauer)
  • Publish 1.0.37 (John Lauer)
  • Update 5 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.228 2026-08-21
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.227 2026-08-20
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.226 2026-08-20
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.225 2026-08-20
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.224 2026-08-20
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.223 2026-08-20
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.222 2026-08-20
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.221 2026-08-20
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.220 2026-08-20
  • Update 3 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.219 2026-08-20
  • Update 3 file(s) (John Lauer)
  • Update 2 file(s) (John Lauer)
  • Publish 1.0.36 (John Lauer)
  • Update 2 file(s) (John Lauer)
  • Update 2 file(s) (John Lauer)
  • Update 1 file(s) (John Lauer)
  • Update 5 file(s) (John Lauer)
  • Update 1 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Publish 1.0.35 (John Lauer)
  • Update 3 file(s) (John Lauer)
  • dock.json: declare health, pointed at the /api/status you already serve (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 5 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Publish 1.0.34 (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 1 file(s) (John Lauer)
  • Update 1 file(s) (John Lauer)
  • Update 6 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 7 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 5 file(s) (John Lauer)
  • Update 5 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 5 file(s) (John Lauer)
  • Update 4 file(s) (John Lauer)
  • Update 7 file(s) (John Lauer)
  • Update 5 file(s) (John Lauer)
  • Update 6 file(s) (John Lauer)
  • Update 6 file(s) (John Lauer)
adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.191 2026-08-19

Adopts the canonical background/foreground RESPONSE contract from SDK issue #38. Where a window went is now the enum windowEtiquette (background | foreground) rather than the boolean openedInBackground, and a bare foreground:true is refused with errorCode foreground_reason_required rather than the underscore-prefixed _foregroundRefused. Both old keys are still emitted during the migration window so a pinned runner does not break. The reasoning is right and generalizes: what a caller has to BRANCH on is a contract and deserves a stable non-underscore key, and a boolean cannot grow when the states are already three. focusEvents keeps its name, blessed as-is.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.190 2026-08-19

The real cause of wiki issue #34, found by the new kicad_plugin_diagnose verb, and it was mine rather than anything about the reporter's KiCad. While removing an accidental duplicate import in plugin_install.py, a blanket edit stripped EVERY line reading import sys from that file - including the one inside the generated loader's source TEXT. So from that point on, every fresh plugin deploy wrote an adom_bridge_plugin.py that raised NameError: name 'sys' is not defined the instant KiCad imported it. It failed silently because the loader catches its own exceptions into a log file, so KiCad saw a plugin that did nothing and the bridge saw no live instance - which looked exactly like 'this KiCad does not scan its plugin directory'. It scans it fine; the file we put there was broken. Restored, and the class of break is closed: plugin_install now EXECUTES both generated loaders in a throwaway namespace at import time and raises loudly if either fails or logs an error, because generated code is shipped as text and is otherwise never run on this side.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.189 2026-08-19

Adds kicad_plugin_diagnose, a read-only verb that answers 'why is the reverse-bridge plugin not loading' in one call instead of several rounds of file requests. It reports whether the loader is deployed, whether KiCad actually IMPORTED it (a pycache entry beside it is the proof), what the loader logged, which KiCad executables ever ran the bootstrap, whether KiCad's embedded stdlib is complete (a real machine turned out to be missing Lib/urllib entirely, which made every import of the payload fail and which no bridge code can work around), and the live instances - then states a plain verdict: WORKING, NOT DEPLOYED, DEPLOYED BUT NEVER IMPORTED, or IMPORTED BUT DID NOT START. Written for wiki issue #34, where the plugin binds on two of this maintainer's boxes and not on the reporter's, and the distinguishing evidence all lives on his machine.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.188 2026-08-19

Closes wiki issue #37 (Colby Knox): kicad_install_symbol reported 'No symbols found in the provided file content' for a valid KiCad 10 symbol file, because the extraction regex required at least one leading whitespace character before (symbol, and in that file the top-level symbol sits at column 0 while its sub-units are tab-indented. So only the sub-units matched, and they were then correctly dropped by the _N_N suffix filter, leaving nothing. His diagnosis and his fix, verbatim. Worth recording that this regex has now failed in BOTH directions - an earlier version keyed on exactly two spaces and missed every tab-indented library - which is the lesson: indentation is not semantic in s-expressions and must not be load-bearing. Both regexes now accept any leading whitespace including none, and the sub-unit suffix filter does the real work. Verified against both shapes: a column-0 top-level symbol with tab-indented sub-units, and the classic fully indented layout.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.187 2026-08-19

Follows Colby's 0.9.186 retest on wiki issue #34, where kicad_bridge_status showed two plugin instances with exeName python, both alive:false, both on port 8879. Root cause: usercustomize.py had no process guard, so ANY Python with KiCad's user-site on its path started the reverse-bridge RPC server - including the short-lived python.exe probes the bridge itself spawns, which pass the wx check because KiCad's bundled Python ships wx. Each one registered a discovery file, bound a port, and exited moments later, leaving a graveyard that made every plugin tier report plugin_not_running while looking at dead entries. The loader now starts the server only inside real KiCad GUI processes (kicad, eeschema, pcbnew, gerbview, pl_editor, bitmap2component); the .pth loader already had this guard, usercustomize did not. Separately, kicad_bridge_status now prunes discovery files whose PID no longer exists by default, so the status reflects live instances instead of history.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.186 2026-08-19

Closes the second half of wiki issue #34 (Colby Knox): from a genuinely cold start, a user with no board open could not open the Footprint Editor at all. The bridge already opens a board in the background to make KiCad scan its plugin directory (0.9.173), but that assumed a board existed somewhere on the machine. On a fresh box there is none, so the path gave up. It now generates a minimal throwaway board in TEMP purely to trigger the scan, which costs a few kilobytes and makes the cold footprint path work on a machine that has never had a KiCad project.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.185 2026-08-19

Two fixes. (1) John, watching a live launch: the KiCad project manager came to the foreground and the bridge never even attempted to put it behind. Cause: the idle rule added in 0.9.172 says that with no verb running, a KiCad window reaching the foreground is the user's doing and must be left alone - correct for a window the user opened, wrong for one the bridge spawned seconds earlier that took its time appearing. The difference is now bounded by time since OUR spawn: for 60 seconds after the bridge starts a KiCad process, a window of ours that appears in front gets the single background action; after that, hands off. Still exactly one action per window. (2) Wiki issue #35 (Colby Knox): kicad_show_symbol cost about 56 seconds on EVERY call, even when the Symbol Editor was already open on that exact symbol, because the verb always ran the cold path and KiCad re-indexes every symbol library when that editor opens. The show verbs now check first: if an editor is already displaying the requested part, they return it immediately instead of relaunching and rescanning. Same for the Footprint Editor.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.184 2026-08-19

Removes the machine-wide low-level input hooks that 0.9.182 installed. They were added to detect a taskbar click or alt-tab, and the effect was that every mouse event and keystroke on the user's computer passed through this bridge's callback - which degraded his cursor badly enough to cost him four reboots. They are deleted, not repaired, and the prohibition is written into the source: this bridge never installs a system-wide input hook of any kind, and any future idea that seems to need one gets proposed to the user BEFORE it is written, not shipped and observed. Nothing depended on them anyway: the bridge no longer blocks activation at all (WS_EX_NOACTIVATE is gone as of 0.9.181), so a click or alt-tab simply works the way it does for any other window, and there is nothing to detect. Backgrounding remains one SetWindowPos to the bottom of the z-order, once per window, only if that window took the foreground.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.183 2026-08-19

Urgent fix for a regression I introduced in 0.9.182 and John caught within minutes: his cursor was breaking. The user-intent detection added in that release used a WH_MOUSE_LL hook, which is correct in principle, but the callback did real work inline - WindowFromPoint, a cross-process class-name read, a process-image query, and then allow_activation_all() which calls SetWindowLongPtr and therefore SENDS WM_STYLECHANGING cross-process, blocking for as long as the target takes to answer. A low-level hook callback runs inside the system's input path, so every one of those delays the mouse for the entire machine, and Windows silently unhooks a callback that overruns LowLevelHooksTimeout. The callback now does exactly one thing - append a timestamp to a small queue - and returns. A worker thread off the input path does the window classification and the activation release. The lesson, written into the code so it is not repeated: a hook may record a fact and nothing else.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.182 2026-08-19

Two things. (1) John's requirement: if the bridge ever blocks activation it MUST know when the human asks for a window, or the whole experience is broken. The old detector polled GetAsyncKeyState every 120ms, so a taskbar click that began and ended between two polls was invisible - which is exactly how a deliberate click got treated as a self-raise. Detection is now low-level hooks (WH_MOUSE_LL and WH_KEYBOARD_LL) armed at bridge boot: Windows delivers every button and keystroke to them synchronously, so there is no sampling gap and nothing to miss. A press anywhere on the shell (taskbar, Start, tray, alt-tab switcher), a press on a KiCad window, or Alt+Tab immediately releases every activation block, and while the user is driving the bridge performs no background action at all. (2) Wiki issue #34 (Colby Knox): the plugin auto-install cached a false no_kicad_installed for the entire bridge boot on a machine with KiCad 10 installed - the explicit kicad_install_plugin found it moments later - so the reverse bridge never came up on its own and every plugin-dependent verb silently degraded. A failed auto-install is no longer cached, and when the boot hands it an empty version list it re-detects from scratch rather than trusting a list that may simply have been populated too late.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.181 2026-08-19

The backgrounding algorithm, rewritten to John's rules and reduced to a single call. For a KiCad window that actually takes the foreground, the bridge now performs exactly one action for the entire life of that window: SetWindowPos to HWND_BOTTOM with SWP_NOACTIVATE, SWP_NOMOVE and SWP_NOSIZE. Nothing else, ever. Removed: minimize-bounce, because a minimized window cannot be screenshotted and every screenshot-based verb depends on that; off-screen parking, which moved windows to -32000 and back and never delivered what it promised; WS_EX_NOACTIVATE, because it blocks the USER's own click and a user may want the window in front the very next second - their click must work immediately with no hold-off; and all repetition, including the sweep branch that re-parked quiet windows every 50ms and the guardian that re-demoted on every tick. A window that opens quietly behind the user's work is now left completely untouched. Boot also clears any WS_EX_NOACTIVATE left behind by versions up to 0.9.180, which could persist indefinitely and silently break taskbar clicks.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.180 2026-08-19

John, twice, and Colby once: the KiCad window blips - foreground, background, foreground, background. The previous fixes capped how MANY times the bridge did this (3 rounds in 0.9.175 and 0.9.179) which was the wrong shape of fix, because the mechanism itself was visible. Backgrounding used a minimize-bounce (SW_MINIMIZE, then SW_SHOWNOACTIVATE, then z-bottom) and parking moved windows to -32000 and back: a minimize is one visible frame and the restore is another, so every call was a blip by construction and no cap could reach zero. Backgrounding now changes only things the compositor does not animate: WS_EX_NOACTIVATE so Windows refuses the window's own activation attempts, and one SetWindowPos to the bottom of the z-order with SWP_NOACTIVATE|NOMOVE|NOSIZE. No minimize, no restore, no move, no resize, ever. If a window still holds the foreground after that, it is LEFT there - briefly in front beats strobing. Off-screen parking is retired to a shim, unparking no longer touches geometry, and WS_EX_NOACTIVATE is cleared the moment the bridge goes idle so a taskbar click always works.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.179 2026-08-19

Fixes wiki issue #33 (Colby Knox): the focus guardian demoted a self-raising KiCad window on every 100ms tick with no debounce, so a freshly-launched wx frame that Raise()es itself while loading produced a ~10x/sec front-and-back flicker and burned CPU until KiCad was closed. His diagnosis was exactly right, and his suggested fix is what shipped: after three rounds the guardian stops re-demoting a given window, holds it once at the bottom of the z-order with activation suppressed, and leaves it there - one demote that sticks is enough. Note this is a SECOND loop with the same failure mode as the one capped in 0.9.175: that release capped the parking sweep, this one caps the guardian, and both now record every round in kicad_state.focusDebug (parkFights, parkGaveUp, guardianDemotes, guardianDemoteLimit, parkFightLog) so the next occurrence is measurable rather than anecdotal.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.178 2026-08-19

The progress block is now attached to every instrumented verb rather than only to runs that exceeded three seconds. A warm run finishing in half a second is precisely the fact issue #32 wants surfaced - cold and warm differ by 10-50x and the user used to get one pessimistic sentence covering both - and reporting it also feeds the warm history, which is what lets the next estimate be measured instead of guessed.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.177 2026-08-19

Hotfix for 0.9.176: the progress phase map was defined inside the dispatcher AFTER its first use, so Python raised 'cannot access local variable _PHASES where it is not associated with a value' on every verb - the bridge answered nothing but that error. The map is now module-level, defined once at import. My mistake and my apologies; the measured-progress feature itself is unchanged.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.176 2026-08-19

Implements the measured-progress contract from issue #32. Every verb with a p50 over ~3s now returns a progress block (namespaced phase, stepLabel, monotonic percent, elapsedSec, estimatedSec, etaSec, confidence, startKind) and its terminal frame carries the actuals plus a measured{} record. Estimates come from a rolling per-machine history persisted in the bridge's own state dir (last 5 samples per phase, split cold vs warm, p50 and p90) - never a hardcoded literal, which is the thing that made 'can take a couple of minutes' useless. Confidence is honest about sample count: 0 samples reports unknown and seeds from a shipped default, 1-2 reports typical, 3 or more reports measured from this machine's own p50. Both amendments I proposed on the issue are implemented: phase ids are namespaced (kicad.cold_start) so a UI can group histories across bridges, and blockedBy names a human-controlled wait (a modal, a UAC prompt) so a bar can say 'waiting for you' instead of animating through something that cannot progress. Cold versus warm is detected per call rather than assumed. kicad_describe now exposes the whole timing history plus the contract version, so a UI can say 'typically Ns cold, Ms warm on THIS machine' before the user clicks. Instrumentation lives in the dispatcher rather than in each handler, so a verb added tomorrow is covered by default.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.175 2026-08-19

John: 'why do you blink them like 20 times in a row? if you cannot really control the natural behavior of kicad, you should not fight it as hard as you are - you literally look like you are broken.' He is right, and this concedes the argument. KiCad reasserts its own geometry repeatedly while it loads, and a 50ms parking sweep that re-parks on every reassertion turns into 20-30 visible blinks. The sweep now counts fights per window and after 3 rounds STOPS: it concedes the position and keeps only what actually matters - the window stays behind, unfocused, with its taskbar button. A window that is quiet and slightly visible beats one that is invisible and seizuring. Every round is recorded (kicad_state.focusDebug now carries parkFights, parkGaveUp, parkFightLog and parkFightLimit) plus a stderr line naming the window and the round it conceded on, so this is measurable rather than anecdotal.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.174 2026-08-19

The last piece of John's footprint report. With the plugin bound and the correct menu id, the command posts fine and KiCad does open the Footprint Editor - but that frame loads the footprint libraries as it opens and routinely needs 10-30 seconds on a cold pcbnew, while the tier only waited 6. So it declared the background path failed, fell through to paths that could not work, and reported failure while the editor was quietly opening behind it. The wait is now the same 30s ceiling the other tiers use. Verified by firing the same command by hand: the Footprint Editor appears, just later than the old wait allowed.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.173 2026-08-19

Applies the Adom automation doctrine to the part surfaces. 0.9.172 made show_footprint fail honestly when its window never appeared, which was correct but useless: the usual reason is that the reverse-bridge plugin is not bound, and on KiCad 10.0.5 the plugin only loads when KiCad scans its plugin directory - which happens when a board editor comes up, not when the project manager alone is running. So the surface now opens a board in the background itself, waits for the bind, and then does what was asked. The user never sees an error they would have fixed by pressing a button the bridge could have pressed.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.172 2026-08-19

Two things John hit live. (1) 'When I click the taskbar icon to bring KiCad to the foreground, you don't let me.' Bouncing exists only to stop a window flashing into the user's face WHILE the bridge is working, but the sentinel applied it whenever it could not positively attribute the raise to a click - and a fast taskbar click lands entirely between two 120ms polls, so it was invisible. New idle rule: with no verb in flight and no guard armed, a KiCad window reaching the foreground is the USER, and is left alone unconditionally. Click detection also now uses the pressed-since-last-query bit rather than only down-right-now, and a bounce suppression lasts 3s instead of 10s. (2) 'I asked for a footprint and the evidence was the project window.' A show_* verb could report success while its window never appeared, and the caller then screenshotted whatever was on screen - manufacturing wrong evidence rather than reporting a failure. show_footprint, show_symbol and show_3d_chip now verify their own window is present and fail with surface_window_missing when it is not, and the dashboard refuses to render a different window as proof of the requested surface.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.171 2026-08-18

Closes the footprint half of issue #31. The bridge deliberately never trusts hardcoded menu ids across KiCad versions - it asks the live process via the plugin's get_menu_ids RPC - but the parser only understood one response shape (frames[].menus[]). On 10.0.5 pcbnew that RPC returns a FLAT list of {id,label,topMenu}, so the lookup silently found nothing, fell back to the hardcoded 20572, and posted a command that reported success while opening no window. The resolver now walks whatever shape comes back and collects every {id,label} pair; on 10.0.5 it resolves pcbnew's Footprint Editor to 20574 and eeschema's Symbol Editor to 20391.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.170 2026-08-18

The loader now starts the payload on a DEFERRED thread. Diagnosis came straight from the log trail added in 0.9.168: 'loading in pcbnew.exe ... import adom_bridge ... ModuleNotFoundError: No module named urllib', raised deep inside http.server importing email.utils out of KiCad's own Lib. KiCad scans its scripting/plugins directory before the embedded interpreter's sys.path is complete, so importing the payload inline could never work in pcbnew; it only worked in kicad.exe because that scan happens later. The plugin now arms a background thread, retries the import every 5 seconds for a minute, starts the bridge as soon as the payload is importable, and logs the outcome. Dashboard in the same release: every LED gains a live busy state (pulsing, with a running label such as 'launching KiCad in the background' or 'waiting for the plugin to bind'), pushed over the live channel the instant work starts, so background activity never reads as a dead indicator.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.169 2026-08-18

Third and last gate fix in this chain: the installer's already-current check compared the payload by hash but the GENERATED loaders only by existence. So when 0.9.168 rewrote the plugin-dir loader, every box that already had 0.9.166's copy reported already-current and kept running the broken one. The gate now content-compares every generated artifact (the plugin-dir loader, the boot module and the .pth) against what this release would write.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.168 2026-08-18

Fixes the loader shipped in 0.9.166/0.9.167. It guarded against double-starting with an environment variable, and Windows child processes INHERIT the parent environment: once any KiCad process had run the loader, every KiCad it spawned imported the file, compiled a .pyc and then started nothing, which looked exactly like the loader never running. The guard is now a module attribute on sys (per-process, cannot leak to children), the loader calls adom_bridge.start() directly instead of re-importing usercustomize (immune to module-cache subtleties), and it writes a log trail to %TEMP%/adom-kicad-plugin-loader.log so the next diagnosis takes minutes instead of hours.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.167 2026-08-18

Follow-up to 0.9.166: the plugin installer's already-current short-circuit compared only the payload and the .pth, so on a box that already had those it returned early and never wrote the new scripting/plugins loader - the whole point of that release. The check now includes every artifact the installer deploys.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.166 2026-08-18

Issue #31, the KiCad 10.0.5 plugin-bind regression, gets the loader that actually fires. Chain of evidence: usercustomize.py stopped running in 10.0.5 GUI processes (a 10.0.3 kicad.exe wrote its discovery breadcrumb, the 10.0.5 one never did); a .pth in the user-site did not help either; but a probe planted in KiCad's own scripting/plugins directory DID fire inside kicad.exe on 10.0.5, and reported site.USER_SITE already pointing at the bridge's deploy directory. So KiCad still imports its plugin directory at startup even though it no longer runs the usercustomize step. kicad_install_plugin now writes adom_bridge_plugin.py into %APPDATA%/kicad//scripting/plugins for every installed version; it simply imports the existing loader, so the payload and the discovery protocol are unchanged, and an env guard keeps it from starting twice.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.165 2026-08-18

Hotfix for a regression I introduced in 0.9.155-0.9.164 and John hit live: the bridge stopped answering entirely on his laptop. Root cause: the boot path ran ownership-ledger revival, off-screen healing, usability healing, session sanitising and the parking sweep BEFORE binding the server port. Those touch other processes' windows, and SetWindowLongPtr sends WM_STYLECHANGING/WM_STYLECHANGED cross-process - against a hung KiCad that SendMessage never returns, so the bridge deadlocked before it ever listened and every verb timed out (three orphaned bridge processes, no port bound). Two fixes: all desktop-window maintenance now runs on a daemon thread that starts after the server is listening, so the bridge always comes up no matter what state the desktop is in; and style changes first probe the target window with a 150ms SendMessageTimeout, skipping any window whose thread is not pumping messages.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.164 2026-08-18

John: 'why is it that when i try to click to see one of your kicad windows it doesn't work? is this cuz you position during launch and then forget to fix the window position afterwards?' Right on the mechanism, and there was a subtler gap than 0.9.160 closed. Suppression (WS_EX_NOACTIVATE, which also hides the taskbar button) is cleared by walking a set held in the bridge PROCESS. Any window suppressed by an earlier bridge - or by one that was killed mid-verb, which happens on every upgrade - is absent from that set in the new process, so nothing ever clears it and the window stays unclickable and taskbar-less no matter how many fixes ship afterwards. The bridge now heals by INSPECTION rather than memory: it reads the style off every KiCad window at boot and every 20 seconds while idle, clearing stale suppression, restoring the taskbar button, re-stamping the icon and pulling any window that is off-screen back to a reachable position. Windows genuinely mid-verb are left alone.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.163 2026-08-18

Two things. (1) Plugin bind, continued from 0.9.162: asking KiCad 10.0.5's own interpreter reveals ENABLE_USER_SITE is true but site.USER_SITE is the INTERPRETER DEFAULT (%APPDATA%/Python/Python311/site-packages), not the Documents path KiCad's bundled sitecustomize is supposed to install - so on 10.0.5 every file deployed to the Documents user-site was simply invisible to Python. The payload and the .pth loader now deploy to both locations; a guard keeps the loader inert in any non-KiCad interpreter. (2) The dashboard gains the per-part surface ladder from ab's web-control demo: one real wiki part with eight buttons (symbol, footprint, 3D chip, library, schematic, 2D board, 3D board, project) plus show-every-window. Each button fetches the part's files from its wiki page, installs them into the user's real KiCad, opens just that surface in the background and renders it back into the card. Progress streams over the live channel per card AND paints on the KiCad taskbar button's progress bar, so a long job is legible without watching the page.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.162 2026-08-18

The KiCad 10.0.5 plugin-bind regression (issue #31, open since 2026-08-16) is root-caused and fixed. The reverse-bridge plugin was loaded by usercustomize.py, which only runs if the interpreter performs site's execusercustomize() step. KiCad 10.0.5's GUI processes stopped doing that: a 10.0.3 kicad.exe wrote its discovery breadcrumb, the 10.0.5 one never did, so adom_bridge.start() was never called and kicad_bridge_status reported zero live instances while KiCad was plainly running. The loader now also ships as adom_bridge_boot.pth, whose import line is executed by site.addsitedir() - the call KiCad's own sitecustomize.py always makes to expose its 3rdparty packages - so the bridge binds regardless of the usercustomize step. It only starts inside real KiCad GUI processes, and re-importing the shared loader is a no-op thanks to Python's module cache. Dashboard fixes in the same release: the Plugin LED read a top-level alive field that has always lived under summary, so it could never turn green; it now also distinguishes KiCad-closed from KiCad-open-but-not-bound and says which is true. The Daily suite LED is maintainer-only and now hidden unless the dashboard runs with --dev.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.161 2026-08-18

John: 'it is really weird how you open kicad in the background'. He was right, and this is the mechanism. Parking exists for one job: stop a brand-new window flashing into the user's face during the second or two it takes to be created. But the park baseline (the set of windows considered pre-existing when a verb starts) subtracted every window the bridge had ever created, so a bridge-launched KiCad was permanently classified as 'new' and got yanked off-screen again on EVERY later verb - a status poll, a screenshot, anything - for the rest of its life. That is the flicker, the disappearing window, and the sliver at the bottom of the screen. The baseline now includes every window that already exists when a verb starts, bridge-created or not; only windows that appear mid-verb are parked, and they unpark as soon as the verb settles. The park clock is also stamped inside the park call itself, so the 12-second park watchdog covers every path rather than just the sweep.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.160 2026-08-18

John: 'why do i see no windows taskbar icons after you claim you launched'. Root cause, and it is documented Windows behavior the bridge was ignoring: WS_EX_NOACTIVATE - the style the bridge uses to stop KiCad windows stealing focus - also removes the window from the taskbar unless WS_EX_APPWINDOW is set alongside it. Every suppression now pairs the two, so a backgrounded window keeps a normal clickable taskbar button. Background means BEHIND, never INVISIBLE. Three supporting fixes found in the same investigation: (1) a leaked focus guard kept the parking sweep active indefinitely, leaving a launched window parked off-screen and NOACTIVATE'd for five hours - a guard watchdog now resets guards that overrun their own deadline, and a park watchdog releases any window parked longer than 12 seconds regardless of bridge state; (2) window icon probing used blocking SendMessageW, which hangs on a still-loading KiCad and can freeze the sweep and guard threads - now SendMessageTimeoutW with SMTO_ABORTIFHUNG; (3) unparking could restore a window to a position KiCad had never actually chosen (John got a 406x354 sliver under the taskbar), so unpark now verifies the window is genuinely reachable on screen, re-stamps its icon, and re-applies its Adom badge.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.159 2026-08-18

Two things. (1) Every verb response now carries bridgeVersion. It previously only reached /health, so no caller - the dashboard included - could ask which bridge code was actually running, and verifying a deploy meant reading a file on the box. (2) kicad-dashboard 2.0: full parity with fusion-dashboard. Live SSE channel (/events) with state, toast and click events; POST /api/action for launch, close, demo with streamed step screenshots, upgrade, install_plugin, overlay-badge setting and a wiki part tour; ui toast and ui click CLI so an AI can narrate over the page and make the page click its own controls; a _hint on every LED naming the verb that fixes it; a multi-box target picker; console read-back; and a dock.json so the dashboard launches from the Hydrogen dock.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.158 2026-08-18

The parking sweep now starts at bridge boot instead of arming on the first GUI verb. Found reviewing 0.9.157: the 60-second session-sanitize retry lives in the sweep's idle branch, so on a quiet boot (bridge up, no verbs yet) the scrub of bridge projects from KiCad's restore-on-launch list never ran, and neither did the between-verb parked-window defense.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.157 2026-08-17

Session sanitize, closing the last user-collision John found: KiCad restores system.open_projects at every PM launch, and the bridge left ITS demo project there, so each launch of the users own KiCad auto-opened the bridge demo and hit the project lock warning. Project-creating verbs now record their .kicad_pro in the ownership ledger, and the bridge scrubs owned (plus legacy adom-/in--demo) entries from open_projects at boot and from the sweep whenever no KiCad process is running (KiCad rewrites the file at exit, so edits only stick in that window). file_history is left alone.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.156 2026-08-17

Geometry-poison prevention, closing the loop John predicted: a window closed while parked off-screen makes KiCad persist the off-screen position, so the next NORMAL launch opens invisibly. Three defenses: the dispatcher unparks everything before any close verb; atexit unparks on bridge shutdown; and boot heals any KiCad window stranded at parking coordinates (left <= -20000) by moving it to a sane on-screen spot without activation, which repairs even crash-poisoned geometry on windows the user relaunched. The kicad-bridge-background dev skill now documents the full ownership contract, the shell-click intent rule, and the taskbar identity lessons.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.155 2026-08-17

Emergency ownership fix, caught live when John launched his own KiCad: the focus sentinel bounced his taskbar launches 8 times (a taskbar click leaves the cursor over the shell, not the raised window, so click-on-window intent detection missed it) and 0.9.154's boot pass badged every enumerated window. New contract: ownership is decided by process - every kicad-family pid the bridge spawns (children included, via parent-chain walk) is recorded in a persisted ledger (%USERPROFILE%/.adom/kicad-bridge-owned.json); the sentinel, event hook, parking sweep, badges, and identity stamps act ONLY on bridge-owned windows. A KiCad the user launches is in no spawned tree and is never parked, bounced, badged, or stamped. Taskbar/Start/desktop clicks now count as user intent for any KiCad raise. Two instances coexist: the bridge drives its own projects in its own processes alongside the user's.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.154 2026-08-17

Taskbar identity done right, stealing two paid-for lessons. (1) pup/fusion's: in-bridge ITaskbarList3::SetOverlayIcon is in-process-only, so badges now go through AD-core desktop_taskbar (via the fusion-bridge ad_client, ported verbatim) with fusion's exact 32px badge asset, matched size. (2) New one: eeschema.exe and pcbnew.exe buttons showed blank white documents because the shell's per-exe icon cache was poisoned during the pre-0.9.151 parking era; the bridge now stamps those windows with per-exe AUMIDs (desktop_set_window_identity) whose iconPath is a real .ico extracted from the exe, bypassing the poisoned cache without touching Explorer. Applied on window creation, on setting flips, and 5s after boot for windows that survived a bridge restart.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.153 2026-08-17

Overlay badge fix: KiCad windows outlive a bridge restart but the bridge's window-tracking set does not, so the Adom taskbar overlay vanished after every upgrade. The bridge now re-stamps ALL live KiCad windows 5s after boot and on every overlayBadges setting flip (enumeration union tracked set). Also: the container-side dashboard/ directory is no longer shipped in the runtime zip.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.152 2026-08-17

Adom overlay badges, John's design after pup's: every bridge-created KiCad window's taskbar button gets the Adom favicon stamped as an overlay (ITaskbarList3::SetOverlayIcon), so the user sees at a glance which windows Adom is driving. Gated by the new overlayBadges setting (default on) in kicad_get_settings/kicad_set_settings, which persist per box and apply live (flipping the setting stamps/clears badges on existing windows). These settings verbs are the backend for the upcoming kicad dashboard (fusion-dashboard parity).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.151 2026-08-17

Taskbar icon repair: minimize-first parking freezes a window into the taskbar before KiCad assigns its window icon (wx sets it a beat after frame creation), leaving blank document buttons. The parking path now checks WM_GETICON / class icons and, when absent, stamps the window with its own executable's icon (ExtractIconEx, cached per exe) before minimizing.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.150 2026-08-17

Bridge-created windows are now parked by MINIMIZING without activation from their first sighting: positional off-screen parking lost a visible-flicker fight against eeschema's load-phase geometry reassertion (and hwnd churn reset any escalation threshold). Minimized windows are invisible instantly, wx never un-minimizes itself, the taskbar button works with restore-to-maximized preserved, and captures restore off-screen just for the shot. Unparking places non-maximized windows at their true coordinates bottom-z; ex-maximized ones stay in the taskbar.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.149 2026-08-17

Park-fight escalation: eeschema reasserts its saved geometry every ~120ms during load, turning positional off-screen parking into visible flicker. A window that fights the park 4 times is now minimized WITHOUT activation (wx never un-minimizes itself; the taskbar button keeps working, with restore-to-maximized preserved). The screenshot path restores park-minimized windows off-screen, captures, and leaves the sweep in charge - so kicad_state and stepShot evidence keep working.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.148 2026-08-17

The one-line root of the unguarded gaps: restore_foreground_persistent's hwnd parameter has been vestigial since 0.9.104 (the guardian touches only KiCad windows), but its early-return still required an hwnd - so whenever foreground capture returned None, NO post-verb guard armed at all: no guardian sweeps, parking sweep idle during editor load tails, late windows visible and adopted by rebaselining. The guardian now arms regardless.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.147 2026-08-17

The unguarded gap closed: the post-verb focus guardian only armed when a user foreground had been captured, and when capture returned None no guard armed at all - so windows KiCad creates asynchronously after a spawn verb returned appeared in a gap with no guard and no in-flight marker, and the parking rebaseline adopted them as the user's. The guardian (which touches only KiCad windows) now arms unconditionally for every window-spawning verb, keeping the parking sweep continuously active through editor load tails.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.146 2026-08-17

Parking instrumentation: focusDebug now carries parkAttempts, parkLastError, sweepTicks and bridgeWindows so a parking no-op is attributable in one read.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.145 2026-08-17

Parking model fix: windows the bridge creates are tracked as bridge-created for their lifetime, so per-verb rebaselining can no longer adopt the previous verb's window as the user's (which silently exempted everything from parking). Between verbs the sweep defends parked windows against KiCad's own geometry restores, and after 2 seconds of bridge quiet every parked window is placed at its true coordinates at the bottom of the z-order (ex-maximized ones minimized to the taskbar with restore-to-maximized).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.144 2026-08-17

kicad_state.focusDebug: liveness and counters for the parking machinery (sweep/hook/sentinel started, verb-inflight, guard count, parked and baseline counts) so parking failures are diagnosable from one read instead of blind iteration.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.143 2026-08-17

Parking works on maximized windows now: SetWindowPos silently cannot move a maximized window, which is why parking no-opped on the demo's maximized editors. Parking now goes through SetWindowPlacement (demote to normal-size at -32000, SW_SHOWNOACTIVATE, remembering the maximized state); unpark restores true coordinates at bottom-z, and ex-maximized windows are handed to the taskbar minimized with WPF_RESTORETOMAXIMIZED so the user's taskbar click restores them exactly like normal.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.142 2026-08-17

Parking holds now: KiCad applies its saved window geometry late in initialization, moving itself back on-screen after the early off-screen park. The 50ms sweep re-parks on every visible sighting while bridge work is live (recording the true coordinates only at first sighting), so the window stays off-screen until unpark places it at its real position, bottom-z.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.141 2026-08-17

Deterministic off-screen parking: a 50ms sweep, active only while a GUI verb is in flight or a guard is armed, baselines the KiCad windows that existed at verb start (the user's own) and parks anything NEWER off-screen before meaningful paint. Complements the event hook, which arms but receives no events in some sessions. Parked windows return to their true coordinates at bottom-z when bridge work ends.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.140 2026-08-17

Focus-hook diagnostics: log hook arming and each KiCad window event to stderr; SetWinEventHook restype declared for 64-bit safety.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.139 2026-08-17

Parking timing fix: KiCad windows are created DURING handler execution but guards only arm after the handler returns, so 0.9.138's SHOW-hook parking never engaged. The dispatcher now marks GUI-verb-in-flight around every handler call and the hook parks on either signal (in-flight or guard active).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.138 2026-08-17

Off-screen parking, designed by John: NOACTIVATE stops focus theft but a freshly created window still paints near the top of the z-order, visible over the user's work even unfocused. The SHOW event hook now teleports a new KiCad window to (-32000,-32000) before its first visible paint; when bridge work ends every parked window is placed back at its true coordinates at the BOTTOM of the z-order, unfocused. Taskbar buttons work normally, PrintWindow capture works off-screen, and a deliberate foreground (bring_to_user) unparks first. The user sees nothing appear, ever.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.137 2026-08-17

Event-driven focus enforcement: SetWinEventHook on EVENT_OBJECT_SHOW and EVENT_SYSTEM_FOREGROUND with a dedicated message-pump thread. During bridge work (guards active, no sanctioned foreground in progress) a KiCad window is NOACTIVATE-suppressed the instant it appears and, if it still grabs the foreground, bounced within milliseconds - replacing the 120-500ms polling reaction that was the visible flash on KiCad 10.0.5. Outside bridge work the click-aware sentinel still owns policy so user clicks into KiCad always work. Hook-bounced events are logged to focusEvents as guarded-steal (hook-bounced, ms).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.136 2026-08-17

kicad_state now reports userIdleSeconds (seconds since the last human keyboard/mouse input on the box). This is the PRESENCE GATE for automation: anything that spawns windows must check it first and defer while a human is active (the daily verb suite now requires 600s idle and retries for up to 6h). Born from a live incident: a full suite run foregrounding windows while John worked, on KiCad 10.0.5 where WS_EX_NOACTIVATE no longer prevents first-steals (kicad-bridge#31).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.135 2026-08-16

board3d demo beat waits up to 15s for the PCB editor window to be findable before invoking the 3D viewer - the board beat can return while pcbnew is mid-transition and the precheck then missed it.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.134 2026-08-16

The last 10.0.5 demo blocker: eeschema's Symbol Editor menu id changed 20390 -> 20391 (found by asking the LIVE process via the plugin's get_menu_ids). All editor-open tiers now resolve menu ids from the live menu bar through the plugin, with the old constants as offline fallbacks. The demo's warm phase also launches the Project Manager so the part beats' in-process plugin route has a bound target by the time they run.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.133 2026-08-16

#31's primary root cause found and fixed: it was never a 10.0.5 Python regression - dozens of test runs accumulated dead-pid discovery files (92 on the test box), and plugin resolution probed every one with an HTTP timeout, running past callers' budgets so a perfectly-alive plugin reported plugin_not_running. After pruning, the plugin binds in kicad.exe, standalone eeschema AND pcbnew within 10-12s on 10.0.5. Resolution now skips and DELETES dead-pid files inline (a cheap kernel liveness check, no HTTP), and the bridge sweeps stale files at every boot. Remaining true 10.0.5 items stay open on #31: NOACTIVATE no longer prevents first-steal (sentinel bounce covers it), external WM_COMMAND to a project-loaded PM, and the eeschema 20390 menu id.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.132 2026-08-16

Every window-spawning verb response now tells the calling AI explicitly: openedInBackground:true plus a _foregroundHint spelling out the one sanctioned way to show the window to the user (re-call with foreground:true AND foregroundReason; the bridge captions the reason via ab toast for 3 seconds, then brings the window forward; reasonless foreground is refused with _foregroundRefused guidance).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.131 2026-08-16

The foreground contract, hardened per John (2026-08-16): (1) any foreground request now REQUIRES foregroundReason - a bare foreground:true is refused with guidance; (2) every sanctioned foreground shows an ab caption carrying the reason for 3 seconds BEFORE the window moves, then hides; (3) after the focus sentinel bounces a self-raising window it holds WS_EX_NOACTIVATE for 10s so 10.0.5's repeat-steal storms are refused silently instead of flickering (on 10.0.5 NOACTIVATE no longer PREVENTS the first steal - evidence on #31). Also: the icon-less taskbar blips users saw are KiCad's own splash/progress windows surfacing during foreground churn; fixing the churn fixes them.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.130 2026-08-16

Demo beat order is now a reliability decision: schematic, 2D board and 3D board (plain file-opens, no plugin needed) run first; the part beats (symbol, footprint, part 3D) run after, by which time KiCad's lazily-started embedded Python has had 1-2 minutes to bind the in-process plugin - the only reliable editor-open route on 10.0.5. Narration renumbered to match.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.129 2026-08-16

PM plugin bind-wait extended to ~45s: KiCad starts the Project Manager's embedded Python lazily, and on a fresh 10.0.5 PM the reverse-bridge plugin takes 30-45s to come up (15s of retries all hit plugin_not_running while a minutes-old PM answered instantly).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.128 2026-08-16

The 10.0.5 demo-beat mystery, root cause at last (verified with in-process menu introspection): the PM menu ids are UNCHANGED (20011/20013 confirmed live via the plugin's get_menu_ids), and the in-process wm_command 20011 opens the Symbol Editor fine even on a project-loaded PM. What broke the chain: tier 1a posts eeschema's menu id 20390, the post lands 'successfully' but opens nothing (stale id), and the tier treated a successful POST as terminal, never trying tier 1b (the working PM route) before falling to the external PostMessage tier, which a project-loaded 10.0.5 PM ignores. Tier 1 now treats the WINDOW APPEARING as the only success signal and always falls through to the PM in-process post (with plugin bind-wait) when no window shows.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.127 2026-08-16

KiCad 10.0.5 root cause closed: external cross-process WM_COMMAND to the Project Manager no longer opens editors, and the PM menu is no longer a native Win32 menu, so the in-process plugin post is the only working route from a running PM. That plugin takes a few seconds to bind after PM spawn, and tier 1 gave up after a single probe, which is exactly the race the background demo job hit (its beats run back-to-back). Tier 1 now retries the plugin post for up to 15s. Staged and manual calls always passed because human pacing gave the plugin time to bind.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.126 2026-08-16

Hotfix for 0.9.125: find_menu_command returns (cmd_id, label) and the new PM tiers passed the whole tuple into PostMessageW, a ctypes ArgumentError that killed the demo job at beat 1. Proper unpacking in both editors' PM tiers.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.125 2026-08-16

KiCad 10.0.5 renumbered the Project Manager menu command ids the bridge had hardcoded (20011 Symbol Editor, 20013 Footprint Editor) - the WM_COMMAND tier fired into nothing and the demo's first three beats died in background mode. Both PM tiers now resolve the command id from the window's REAL menu bar via the win32 menu walk (the 0.9.99 doctrine), with the old ids as last-resort fallback. Numeric menu ids are never to be trusted across KiCad versions.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.124 2026-08-16

Cold-start hardening: the project-manager WM_COMMAND route waited only 6s for the Symbol Editor to appear, and a cold KiCad 10.0.5 can take 15s+ when the demo job runs beats back-to-back. The wait is now 30s with a one-time command repost at the 10s mark. This was the root of the demo's beats 1-3 failing in background mode on 10.0.5 (staged mode passed because human-paced calls gave KiCad time).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.123 2026-08-16

Failed kicad_demo beats now carry failReason {handlerSuccess, error, output} in result.steps and log the raw step result to stderr. The prior summary discarded the underlying error, which made background-mode beat failures undiagnosable from the outside.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.122 2026-08-16

Background demo beats now run the modal-dialog sweep before their retry. Staged demo calls always got the dispatcher's post-verb dialog sweep, but the background job's internal steps did not, and KiCad 10.0.5 introduced a dialog at editor-open that stalled the first three beats (they only recovered in past runs because the caller's progress polls happened to sweep). The blocking dialog is also logged to stderr when hit.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.121 2026-08-16

stepShot fix: 0.9.120 keyed the per-step capture off the beat's title field, which is the display label ('1/6 - Schematic symbol'), not a window title, so no frame ever matched a window and zero stepShots streamed. The capture now uses the beat's window field. Caught by the live verification run before the web-control page ever saw a frame.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.120 2026-08-16

kicad_demo background jobs now stream per-step screenshot EVIDENCE to the caller: at each beat's completion the bridge captures that beat's own window (it alone knows the moment and the surface) and the next progress poll carries stepShot {step, title, image} (base64 PNG, 640px cap), one per completed step. This implements the web-control contract from #25: the page pins each frame as the step's evidence and stops taking its own racy guess-snaps. The final result.state.shots gallery is unchanged (DURING evidence + AFTER evidence compose).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.119 2026-08-16

The major.minor detection string ('10.0') cannot distinguish point releases, and that blindness lived in three places found during the fleet upgrade to KiCad 10.0.5: (1) install ranking, a freshly installed per-user 10.0.5 lost to an old Program Files 10.0.1 because both read '10.0', the bridge now probes kicad-cli version per install (cached) and ranks by full X.Y.Z; (2) check_for_updates compared '10.0' to '10.0.5' and reported an upgrade forever; (3) kicad_upgrade's post-install verification could never see its own success. Also: the update-nudge's cached installed version is invalidated after a successful upgrade.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.118 2026-08-16

Copy edit in the update-nudge hint.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.117 2026-08-16

Fix for the 0.9.116 update nudge: readiness and bridge_status return through early dispatcher paths and never reached the injection point, so the kicadUpdate field never appeared. The attachment now lives at the HTTP funnel every response passes through.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.116 2026-08-16

Proactive KiCad update nudge: the bridge now checks the latest stable KiCad at most once per 24h (async, never delaying a verb) and, when the installed version is behind, attaches kicadUpdate {installed, latest, _hint} to the everyday status verbs (status, readiness, state, bridge_status, window_info). The hint tells the AI to OFFER the user the update, close KiCad, then run kicad_upgrade (official installer, silent, per-user, no UAC), never mid-design-work. Point releases are compared properly now: the installed version comes from kicad-cli version (X.Y.Z), not the major.minor detection string.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.115 2026-08-16

Focus sentinel classifier fix: recent keyboard/mouse input anywhere wrongly counted as user intent, so a KiCad self-raise WHILE the user typed in another app (the most disruptive case, caught live on ConfRoomROG over RustDesk) was left in the foreground. A foreground transition now only counts as user-initiated when a mouse click landed with the cursor on that window, or an alt-tab was in progress. Everything else bounces.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.114 2026-08-16

Focus sentinel refinement: the bridge's own SANCTIONED foreground paths (foreground:true via bring_to_user, and the allowForeground last resorts which always announce with a toast first) now set expect_foreground(), so the always-on sentinel never bounces a foreground the user explicitly asked for. Sentinel log gains a sanctioned-foreground (allowed) event type.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.113 2026-08-16

Always-on focus sentinel: the per-verb guardians prevent foreground steals while a verb runs, but they expire, and KiCad windows self-raise LATE (a 3D render or footprint-library load finishing minutes after the verb). John caught such flashes live. The sentinel watches foreground transitions for the bridge process lifetime: a KiCad window reaching the foreground with NO user input in the preceding 1.2s is a self-raise and gets minimize-bounced back (never touching any user window); one preceded by user input is the human's own click and is left alone. Every transition is logged to kicad_state.focusEvents and stderr (bridge-logs), so background-contract compliance is now provable from the log instead of sampled by callers.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.112 2026-08-16

kicad_make_part_project now generates SINGLE-COMPONENT demo projects: just the part on the sheet (stub wires off its pins) and just its footprint centered in tight edge cuts with two copper stubs. The synthetic 330R companion is gone (extra components on a one-part demo board confuse the user). The reference designator now comes from the part's own Reference property, so a diode is D1 and a capacitor is C1. Result gains a 'reference' field.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.111 2026-08-16

faulthandler.enable(all_threads=True) at server boot (issue #27): a native ctypes/GDI fault now dumps every thread's Python stack to stderr, and ab 2.0.44+ captures bridge stderr into ~/.adom/bridge-logs/kicad.log, so the next hard crash leaves a usable trace instead of a silent dead port.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.110 2026-08-16

Screenshots no longer require PIL: ab 2.0.44+'s managed Python runtime is stdlib-only, and on a fresh box every capture fell back to .bmp, which kicad_state rejects - so a brand-new install had zero working captures. handlers/png_stdlib.py now encodes the GDI BGRA buffer straight to PNG (zlib + struct, nearest-neighbor downscale to 1568px, ~0.3s/frame) whenever PIL is absent. Found running kicad_demo on ConfRoomROG's first-ever bridge boot.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.109 2026-08-15

New verb kicad_export_part {partName}: writes one-off single-entry library files for an installed part (a .kicad_sym containing ONLY that symbol, a .pretty containing ONLY that footprint, and the bare 3D model), the reverse of install, proving per-asset round-trip. kicad_make_part_project now generates part-dominant boards (tight edge cuts sized from the footprint) so the part's 3D model is clearly visible in the 3D board view instead of being a speck. kicad_uninstall also removes adom-part-exports and adom-part-staging.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.108 2026-08-15

New verb kicad_make_part_project {partName}: generates a small real project (kicad_pro, wired kicad_sch, routed kicad_pcb with edge cuts and the part's 3D model reference) around a part installed in the Adom library, so the project / schematic / 2D board / 3D board surfaces have something true to show for a single component. This is the missing piece for per-part demo buttons: install symbol+footprint+model, make_part_project, then the four show_* file surfaces. Also: install_symbol / install_footprint (and model) now accept filePath as an alternative to base64 fileContent, so large assets (a 214KB step overflows the CLI arg limit as base64) can be staged with ab send_files and installed by path.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.107 2026-08-15

kicad_install_footprint now accepts model:{fileName,fileContent} — a base64 3D model (.step/.wrl) installed to Documents/KiCad//3dmodels/Adom/ and wired into the footprint's (model ...) reference (injected when the footprint ships without one). Closes the wiki-component gap: pages ship symbol+footprint+step, and the step used to be dropped so kicad_show_3d_chip rendered an empty viewer. kicad_uninstall now also removes 3dmodels/Adom.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.106 2026-08-15

send_key chords no longer need the foreground: wx menu items carry their accelerators ('Save\tCtrl+S'), so a chord is resolved from the window's Win32 menu bar and fired as PostMessage(WM_COMMAND) — background, robust, attributed in the response as method:menu-command. The foreground path survives only for chords with no menu accelerator. Both Alt+3 keystroke fallbacks are deleted (the Win32-menu tier owns 3D-viewer opens).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.105 2026-08-15

Forced-foreground courtesy captions: every last-resort allowFocusSteal/allowForeground path now fires a branded ab toast (attributed to the calling AI thread) telling the user WHY their screen is about to be taken, ~1.2s before the grab. Six call sites: Ctrl+Shift+E footprint load, both Alt+3 3D-viewer fallbacks, symbol search typing, send_key chords, real-cursor clicks. Doctrine: a forced foreground without the announce is a bug.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.104 2026-08-15

The final background-window design, per John: the bridge only ever manipulates KICAD's own windows. A KiCad window that reaches the foreground is minimize-bounced (Windows itself re-activates the user's previous window — the bridge never locates or raises any user window), shown again unfocused, dropped to the bottom, and NOACTIVATE-suppressed. All user-window capture/restore/adopt machinery is deleted. foreground:true remains the explicit opt-in to bring a window to the user.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.103 2026-08-15

Focus restore no longer fights the user: the end-of-verb restore only fires when a KICAD window currently holds the foreground. Previously it blindly re-raised the window captured at verb START — if the user switched windows during a long verb, verb completion yanked them back into the old window (reported live: the browser kept coming to the foreground).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.102 2026-08-15

Guardian v2.1: while any guard is active, every visible KiCad window (existing AND newly created, ~0.5s sweep) gets WS_EX_NOACTIVATE up front — the 0.9.101 run showed each fresh window still got one free visible steal before suppression; now the first offense is refused too. Styles cleared at guard end / foreground:true / close as before.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.101 2026-08-15

Focus guardian v2 — prevent, don't react: KiCad windows that grab the foreground get WS_EX_NOACTIVATE so Windows refuses their self-activation outright (the reactive yank-back showed as constant flashes + focus churn during test runs). Style cleared when guards end, on foreground:true, and by kicad_close so the user can always click in afterwards. Plus a verb-suite crash fix.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.100 2026-08-15

Background-contract audit fixes: the background kicad_demo job now arms a focus guardian for its FULL duration from inside the worker thread (the dispatcher's guard expired 45s in while beats kept opening windows for ~100s — including the board_3d render self-raise); the slow-tier dispatcher guard is 120s so cold show_3d_* flows are covered end-to-end.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.99 2026-08-15

#26 3D viewer cold open: new Tier 0 resolves the 3D Viewer command straight from the wxFrame's native Win32 menu bar (GetMenu/GetSubMenu walk) and fires it with PostMessage(WM_COMMAND) — plugin-free, focus-free, works from cold without the late-binding plugin or an opaque toolbar.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.98 2026-08-15

Focus-guardian coverage fix: the show_* surface verbs wrap open_* but the dispatcher keys on the command name, so show_* were bypassing the background guardian AND the foreground:true opt-in. Added all eight to _SPAWNS_WINDOW + SPAWNS_WINDOW_FOCUS; show_3d* get the 45s guard tier.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.97 2026-08-15

Background-first, enforced (John's principle): (1) the symbol/footprint keystroke+SendKeys fallbacks are now OFF by default — they fired GLOBAL keys against a non-foregrounded window, leaking into whatever the user was typing in; opt-in via allowFocusSteal, which now does a real foreground. (2) foreground:true / showToUser on any window verb is the sanctioned user-choice path — the dispatcher brings that KiCad window TO the user instead of keeping it background. (3) the full principle + an audit rule are in the kicad-bridge-background dev skill.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.96 2026-08-15

kicad_show_project completes the surface family: the whole electronics project (KiCad Project Manager, optionally on a .kicad_pro) — the top of the design tree. All eight surfaces (project, schematic, 2d board, 3d board, symbol, footprint, 3d chip, library) now have a clean named verb.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.95 2026-08-14

#26: open_3d_viewer's Footprint-Editor path now has the plugin-free UIA-invoke tier the PCB path already had, so show_3d_chip works from cold without waiting on the late-binding plugin. 3D-window detection now polls up to 9s (software-OpenGL renders lag the invoke).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.94 2026-08-14

show_3d_board and show_3d_chip now wait for the board/footprint editor window to materialize (open is async) before opening the 3D viewer, fixing a 'PCB Editor is not open' race when called with a filePath from cold.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.93 2026-08-14

kicad_show_* family, mirroring the Fusion bridge's fusion_show_*: one clean, named verb per KiCad surface so a caller never hand-assembles a workflow — show_symbol, show_footprint, show_3d_chip, show_schematic, show_2d_board, show_3d_board, show_library. Thin wrappers over the existing open_* handlers (same background-first, verified loads). Plus 0.9.92's library-browse mode.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.92 2026-08-14

Library browse: open_symbol_editor/{libraryName} and open_footprint_editor/{library} with NO part name now filter+select the library in the tree and report success as a browse (libraryShown), instead of failing because no part loaded.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.91 2026-08-14

Footprint editor cold-open: wait up to 34s for the spawned pcbnew to load the full fp-lib-table before declaring failure (stock-library restore made cold opens slower and the old 8s poll always lost).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.90 2026-08-14

Footprint editor cold-start: the PM-menu plugin tier now retries after the project manager launches (it previously only ran before, when nothing existed to answer). With 0.9.89's background load tier this makes footprintName/library work from fully closed.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.89 2026-08-14

Footprint editor parity with the symbol editor: plugin-free background load (WM_SETTEXT filter + Down + tree-targeted Enter/dblclick, title-verified) and honest success:false when a requested footprint doesn't load. Clears the last user-visible symptom of #21.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.88 2026-08-14

Issue #24: kicad_demo {all:true, background:true} runs the six-beat tour as a background job with structured progress — poll kicad_demo {progress:true} for percent/elapsedSec/estimatedSec/stepLabel (a real progress bar, from the bridge's own timing model), final poll returns the kicad_state payload (every window as base64 PNG) + narration. Staged beat mode unchanged and now carries progress fields too.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.87 2026-08-14

Two from live testing: (1) #23 fix — every window finder now requires the window to belong to a real KiCad process, so a browser tab titled 'KiCad ...' can never be mistaken for the app again. (2) #22 — new read-only kicad_state verb: every KiCad-owned window as inline base64 PNG (shots[]) plus logical state (editors inventory, modal dialogs, running flag) so web pages and AIs see the app's true multi-window state in one call.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.86 2026-08-14

Background symbol load, final activation step: Enter posted directly to the LIB_TREE control (geometry-located) with a PostMessage double-click fallback on the selected row. Filter + selection were already working; this closes the activate gap.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.85 2026-08-14

Background symbol load: the win32 tier now sends Down (select first filtered match) then Enter (activate) through the filter box, matching KiCad's own keyboard flow.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.84 2026-08-14

Root-cause fix for Device:R symbol loads (disc #656/#20): early config bootstraps could leave the user's sym/fp-lib-table with NO stock KiCad libraries (empty-table fallback when base_dir was unresolved). The bridge now self-heals at every boot: missing stock-template libraries are merged into the user tables, user rows untouched. Plus 0.9.83's plugin-free background navigate tier.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.83 2026-08-14

open_symbol_editor gains a plugin-free background navigate tier: WM_SETTEXT into the LIB_TREE filter + Enter, title-verified, zero focus theft. Loads the requested symbol even while eeschema's embedded Python (and thus the in-process plugin) is still cold — the #21 latency no longer blocks #20.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.82 2026-08-14

uninstall/testResidue: rmtree now chmods read-only files and retries (Windows git-object dirs inside the demo project's .history were undeletable).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.81 2026-08-14

kicad_uninstall {testResidue:true}: surgical removal of everything the daily verb suite creates (fixture dir, demo project, ADOM_VERBTEST parts inside the Adom libs, AdomVerbTest lib-table row, stale discovery files) without touching the plugin, the libraries themselves, or user data. The suite now runs it as its final phase.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.80 2026-08-14

Dialog sweeper fix from the first verb-suite runs: KiCad progress dialogs (Load PCB, plot/render progress) are now classified and left running — both sweep paths were clicking their only button, which is Cancel, silently aborting the load the verb had just started.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.79 2026-08-14

ALWAYS-background window contract: focus guardian is now KiCad-aware (only acts on KiCad thieves, adopts the user's own window switches, demotes the offender below the user's window), guard extended to 45s for slow async self-raises (3D render completion), launch verb added to the guarded set. New kicad-bridge-background dev skill encodes the doctrine; the daily verb suite now FAILS any verb that leaves a KiCad window in the foreground.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.78 2026-08-14

ab 2.0.35 alignment: docs/skills teach the new adom-bridge CLI name (adom-bridge-cli references swept); kicad_uninstall echoes the cascade flag so ab's bridge_uninstall cascade report shows context. No verb behavior changes.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.77 2026-08-14

Fix #20: kicad_open_symbol_editor now actually loads the requested symbol — waits up to 12s for a cold-started eeschema's plugin to bind, uses a library-qualified LIB_TREE filter (libraryName no longer discarded), and verifies the load: an unloaded symbol now returns success:false + editorOpened:true instead of a silent empty editor.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.76 2026-08-13

kicad_launch: cold-start the project manager (issue #19; open_editors now teaches that it only inventories). kicad_uninstall: full artifact removal for Adom Bridge's uninstall cascade (issue #18), declared via bridge.json uninstall field. SKILL.md legacy CLI-name sweep.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.75 2026-08-09

Naming sweep per adom/definitions: every surviving bare AD/HD abbreviation in hints, docs and skills now says Bridge (ab) / Hydrogen (ah). No functional change.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.74 2026-08-09

Plugin payload 0.9.1: select_and_load now orchestrates on the RPC worker thread — hop 1 sets the search filter, a 0.8s worker-side sleep lets KiCad's LIB_TREE debounce fire on the UI thread, hop 2 activates the pre-selected match (fixed the DataViewEvent constructor to the 3-arg overload). Verified live on AdomLapper: the Symbol Editor title goes to 'Adom:AdomDemo_IC' with zero focus/keyboard/cursor theft. open_symbol_editor now tries this plugin path first and falls back to the PowerShell navigate only when no plugin instance is alive.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.73 2026-08-09

Plugin payload v0.9.0: select_and_load's default transport is now background_activate — after the filter pre-selects the best match, it takes dvc.GetSelection() (avoiding the v0.6.0 whole-model walk that segfaulted) and activates it via a posted DATAVIEW_ITEM_ACTIVATED event plus a native VK_RETURN PostMessage to the tree's own hwnd. Zero focus theft, zero cursor movement, zero global keyboard input. useSendInput:true remains as the explicit noisy fallback.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.72 2026-08-09

Demo hardening from the live AdomLapper run: _prepare deletes stale KiCad .lck lockfiles in the demo project dir (a force-killed KiCad leaves them; the next open then hits a modal File Open Warning and the sheet stays untitled), and warm-up is idempotent (an existing Schematic+PCB editor pair is reused instead of spawning duplicates on every call).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.71 2026-08-08

Three bugs caught in the first live end-to-end demo run on a real laptop: (1) kicad_demo and kicad_export_molecule were missing from the dispatcher's window-spawning verb sets, so the background/focus-restore machinery skipped them and demo windows landed on top of the user's work — both now get capture/restore with the long 16s guard; (2) the demo's self-screenshot helper passed an empty kicad_info to screenshot_all and silently captured nothing; (3) the symbol beat now verifies the part actually loaded onto the canvas instead of narrating over a '[no symbol loaded]' editor.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.70 2026-08-08

Rename cut-over (Adom Desktop -> Adom Bridge, page adom/adom-desktop-kicad-bridge -> adom/kicad-bridge). bridge.json updateManifestUrl, docs, homepage and hero now point at the new slug, restoring auto-update (the old API manifest path 404s). The Mesa llvmpipe download URL moved to the new release store. User-facing copy and the KiCad-visible Adom library descriptions now say Adom Bridge; Hydrogen replaces HD. No verb, env, port, or protocol changes.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.69 2026-07-25

The caller-identity capture read the wrong place. On a relay call AD delivers the caller in args.caller.aiThread (from the --ai-thread flag or an explicit caller), not the X-Adom-Caller-* headers my 0.9.67 code read - so logging and window-labeling never fired. set_from_request() now reads args.caller first and headers as a fallback (headers remain the outbound direct-API format). Verified against the real wire shape from a live 1.9.183 desktop.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.68 2026-07-25

Window labeling for caller identity now locates the raised editor window by its title (Symbol/Footprint/PCB/Schematic Editor, 3D Viewer) instead of needing each open handler to return an hwnd, so desktop_set_window_identity fires for every open verb. Still best-effort and non-blocking.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.67 2026-07-25

AD 1.9.180/1.9.183 caller identity. The bridge now captures the X-Adom-Caller-* headers on every request and logs the owning thread in each per-verb log line (caller="chip-fetcher tab 3"), so concurrent-agent interference is reconstructable. New caller_identity module: forward_headers() echoes the three headers and adds X-Adom-Caller-Delegate:kicad, and ad_callback() makes an outbound AD call that carries the identity through (self_caller() for the bridge's own polls). Best-effort desktop_set_window_identity labeling of a raised KiCad window with the owning thread, gated on an hwnd being present. Values are self-asserted: logging/UX only, never authorization.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.66 2026-07-22

Watcher description no longer sends users to AD's Settings -> KiCad panel, which was removed in AD 1.9.117. Points at the set_project_watch / trigger_project_watch verbs instead; config keys remain honored.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.65 2026-07-20

kicad_demo now returns the SAME shape as fusion_demo (stage, done, narrate, screenshots[{label,path}], steps, _hint), so the AI that HD's installer runs speaks one vocabulary for both bridges. The verb now CAPTURES its own screenshots per beat (labels schematic/board_2d/board_3d match Fusion's) instead of asking the caller to hunt window titles. A beat that cannot open no longer fails the demo: it narrates the skip and moves on ('never end a demo on an error screen'). The not-installed path narrates KiCad's honest advantage — free, open source, no trial clock or feature tier — and installs it on acceptance.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.64 2026-07-20

The bridge no longer takes over the user's screen. navigate_symbol.ps1 previously did an Alt-key foreground trick, SetForegroundWindow, SetCursorPos (moving the user's physical mouse) and SendKeys typing — so if you were working, it typed on top of you. It now sets the search box via UIA ValuePattern (no focus) with a WM_SETTEXT fallback and commits with PostMessage. kicad_send_key and kicad_click now PostMessage directly to the target window by default: no focus theft, no cursor movement, and keys can never leak into the user's active app. Modifier chords and canvas clicks that genuinely need real input return errorCode foreground_required with a hint to WARN the user (~5s) and opt in via allowForeground. launch_editor.ps1 de-foregrounded (UIA Invoke needs no focus).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.63 2026-07-20

kicad_demo: a first-class, narrated six-step showcase (symbol, its footprint, that part in 3D, a schematic, the 2D board, the 3D board). Generates every asset in code (ships no sample files) and borrows KiCad's own bundled 3D models. If KiCad is missing it OFFERS to install it: kicad_demo {installKiCad:true} installs silently then runs the tour. Each step returns say/pointOut/window so the AI can narrate and screenshot.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.62 2026-07-19

Runtime zip slimmed 31%: removed skills/ (already shipped by the container pkg), demo/, README/CONTRIBUTING/plugin-prompt docs, hero fonts and all images. Keeps code, certs/cacert.pem, .ps1 UIA scripts, templates/blank-board.kicad_pcb and the runtime SKILL.md. No functional change.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.61 2026-07-15

kicad_export_molecule: one-shot desktop half of the Adom molecule pipeline (STEP export + silkscreen top/bottom renders + sibling sch/pro discovery + exact container next-steps for step2glb -> adom-molecule). capabilities.py grounds schematic-IPC as a KiCad 11 feature (kipy get_schematic).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.60 2026-07-06

Publishing hygiene (SDK re-audit #84): runtime zip is now a Release /download/ asset (not a /files blob); manifest repointed + updateManifestUrl added. enable_software_opengl now fetches Mesa llvmpipe from the Release /download/ asset instead of a /files blob.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.59 2026-07-06

Legacy-footprint placement + robust background FP-editor 3D. (1) place_footprint now accepts legacy (module ...) footprints (KiCad<=5 / EAGLE-imported / most chip-fetcher parts): the wrapper is normalized to (footprint ...) so the part splices into a preview board cleanly. (2) The Footprint Editor's 3D viewer opens through the embedded plugin instead of an Alt+3 keystroke: the FP editor is a frame inside the pcbnew process, so the bridge resolves that frame index and posts the live-resolved '3D Viewer' menu id to it — no focus theft, and it fixes an UnboundLocalError (VK_MENU) that broke the path entirely. (3) kicad_click rejects out-of-range coords when relative=True instead of clicking far off-screen (which could hit another window's controls and crash KiCad).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.58 2026-07-06

Full winvm verb battery hardening. (1) open_3d_viewer: the PCB '3D Viewer' menu command id drifts across KiCad builds (20563 on one, 20568 on KiCad 10 as shipped to winvm) — the bridge now resolves it LIVE from the plugin's get_menu_ids by matching the menu text, instead of trusting a hardcoded constant, so it works on any build. (2) export_pdf: KiCad 10's kicad-cli now requires --layers for PDF (it errored with none); we now default a full-board layer set for PDF as well as SVG, and accept the layers arg as either a JSON list or a comma string.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.57 2026-07-06

3D viewer background fix. The 3D viewer is an in-process child window pcbnew creates and re-raises repeatedly while it renders the board (several seconds) — unlike a launched editor that self-activates just once, so the 6s restore expired mid-render and the viewer ended up on top. open_3d_viewer and place_footprint now get a 16s persistent focus-restore that covers the render, keeping the user's window on top throughout. Verified via desktop_list_windows z-order.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.56 2026-07-06

Real fix for KiCad windows opening in the foreground. Root cause: open_board/schematic/place_footprint launch a fresh pcbnew/eeschema via subprocess.Popen, and a newly-launched GUI process activates its own window ASYNCHRONOUSLY — a beat after the handler returns and after the one-shot focus restore, so KiCad won. Now: (1) launches pass a STARTUPINFO with SW_SHOWNOACTIVATE so the new window opens without activating, and (2) the dispatcher runs a persistent background restore for ~6s that re-puts the user's window on top whenever KiCad steals foreground during its async startup. Applies to every window-spawning verb.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.55 2026-07-06

UIA background fallback refinement: the substring control search now prefers a control that actually supports InvokePattern (for invoke) or ValuePattern (for setvalue), instead of the first name match. KiCad exposes both a non-invokable 'Footprint Editor' label and the invokable toolbar button under the same name; the old search grabbed the label and returned not_invokable.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.54 2026-07-06

Bridge-side UIA background fallback. New handlers/uia.py shells to PowerShell's System.Windows.Automation to Invoke the 'Footprint Editor' / '3D Viewer' controls by accessible name — programmatic UIA Invoke means no foreground, no focus steal, no cursor movement. Wired as Tier 1.5 in open_footprint_editor/open_3d_viewer, between the embedded-plugin WM_COMMAND path and the now-opt-in disruptive fallbacks. KiCad (wxWidgets) exposes an invokable UIA tree, so this reliably opens editors in the background when the plugin path isn't loaded. It's the bridge's own subprocess, not AD's gated run_script.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.53 2026-07-06

Truly background operation — never steal focus or move the cursor mid-verb. The open handlers no longer call SetForegroundWindow/BringWindowToTop: _force_foreground now only makes a window visible without activating it (SW_SHOWNOACTIVATE). The two inherently-disruptive fallbacks are now OPT-IN and off by default: the launcher-icon click (which moved the user's mouse via SetCursorPos) requires allowCursorClick, and the Alt+3 3D-viewer keystroke (which needs pcbnew foregrounded) requires allowFocusSteal. Default is the background plugin/WM_COMMAND path. The dispatcher's focus capture+restore now wraps EVERY GUI verb (clicks and key sends included), not just window-raisers.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.52 2026-07-06

Latency fixes for two verbs that could hit the 30s client timeout. open_editors now uses the existing budgeted port-prober (3s wall-clock cap + per-port dedup) instead of probing each stale discovery file at 1s — a pile of dead-process files no longer stalls it for 30s when no KiCad is live. The footprint/symbol editor window-appearance poll loops were trimmed from 10s to 6s per tier (they break the instant the window appears). And the read-only reporters (open_editors, screenshot_all, window_info) were removed from the dialog settle-poll set since they don't spawn windows.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.51 2026-07-06

Background-open guarantee: the bridge must never steal the user's focus. The dispatcher now captures the user's foreground window before any window-raising verb (open_board/schematic/symbol/footprint/3d, place/install) and restores it afterward via the AttachThreadInput technique so the cross-process focus hand-back reliably sticks. KiCad windows open behind the user's active work. Documented as a non-negotiable rule in the kicad-bridge-dev skill.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.50 2026-07-05

Three reliability fixes. (1) Self-heal detection: if the startup cache is empty but KiCad is actually installed (e.g. installed after the bridge booted, via a kicad_upgrade whose client call timed out), the not-installed pre-check now does a live re-detect and refreshes the cache instead of wrongly reporting 'not installed' until a manual respawn. (2) install_library is idempotent: an already-registered library returns success (no-op), not an error. (3) Footprint Editor 3D viewer opens via the Alt+3 accelerator (universal across KiCad versions) with legacy WM_COMMAND fallbacks — the hardcoded 20500 was a KiCad-9 id that silently failed on KiCad 10.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.49 2026-07-05

Dialog coverage settle-poll: KiCad's error/parse dialogs are asynchronous and often transient (they appear a beat after the spawning verb's handler returns and auto-close within seconds), so a single post-verb scan raced them. Window-spawning verbs (opens/place/install/screenshot_all) now poll for up to ~3s, catching a late dialog, screenshotting it, and expiring it.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.48 2026-07-05

Hardening for constant dialog coverage: the sweep's window-title reads now use InternalGetWindowText (no cross-thread WM_GETTEXT) and dialog body reads use SendMessageTimeout with SMTO_ABORTIFHUNG, so a modal error dialog blocking KiCad's UI thread can no longer hang the scan that is meant to detect it.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.47 2026-07-05

Constant error-dialog coverage. Root cause of silent verb failures: the dialog scan was entirely PID-gated, so a KiCad #32770 error box owned by an untracked pcbnew/eeschema/orphan process (e.g. 'Cannot enumerate ...Templates (Access denied)') was invisible and silently blocked the next verb. Added a global EnumWindows finder for #32770/error-title dialogs merged into the scan, and a dispatcher-level auto-sweep that runs after every GUI-affecting verb: it screenshots each dialog, reads its body, expires it so the next verb is unblocked, and attaches _autoDialogs + a _dialogHint to the response so the AI is always shown what KiCad popped.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.46 2026-07-04

Hardened first-run wizard handling. The dialog auto-sweep now loops and re-scans (the wizard's Cancel spawns a Confirmation box that a single pass missed), the dismisser clicks Cancel/Finish/Skip and sends Escape for wizards that have no OK button, and ensure_win_user_config now seeds a minimal kicad_common.json (and resolves APPDATA/USERPROFILE robustly, fixing the same stripped-env issue as LOCALAPPDATA) so a freshly installed KiCad never shows the 'Welcome to KiCad' setup wizard. Seeding also runs right after kicad_upgrade so the first GUI open is clean.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.45 2026-07-04

kicad_diagnostics now enumerates running KiCad processes via the ctypes EnumProcesses API in-process, replacing a tasklist subprocess that timed out dumping the full process table on a busy VM.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.44 2026-07-04

Added kicad_diagnostics, a read-only self-inspection verb so an agent can debug the bridge without ever calling AD's approval-gated run_script/shell. It reports the environment the BRIDGE process actually sees (a stripped LOCALAPPDATA here explains a per-user KiCad going undetected), a full KiCad-detection breakdown (every base path scanned and the version dirs/kicad.exe found), running KiCad processes, and current config/user dir state; optional probePaths and readFile args stat/list any path or peek a small config/output file. Works even when KiCad is absent (bypasses the not-installed pre-check).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.43 2026-07-04

Three fixes surfaced by a full verb test on ADOMBASELINE. (1) install_symbol: the top-level symbol extractor only matched 2-space indentation, so every TAB-indented .kicad_sym (modern KiCad, generator kicad_symbol_editor) yielded 'No symbols found'; it now matches any indentation. (2) export_svg: kicad-cli requires --layers for SVG and errored 'At least one layer must be specified'; a sensible full-board layer set is now the default. (3) open_footprint_editor: added a tier that opens the Footprint Editor from a running pcbnew (menu id 20572), so it works when a board is open without needing the kicad.exe project manager (whose first-run wizard otherwise blocked it).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.42 2026-07-04

Two fixes found during a full on-VM verb test. (1) close_windows.py used pathlib.Path without importing it, so the dialog auto-sweep crashed with 'name Path is not defined' — this cascaded: window_info/dismiss_dialogs/screenshot_all failed and blocking dialogs then prevented the symbol/footprint editors and 3D viewer from opening. (2) install_symbol failed 'config/user directory not found' on a never-launched KiCad; the shared adom_library._get_paths now bootstraps the config dir the same way install_footprint does.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.41 2026-07-04

Critical fix: a per-user (/currentuser, no-UAC) kicad_upgrade install lands in %LOCALAPPDATA%\Programs\KiCad, but AD provisions the bridge Python with a stripped environment where LOCALAPPDATA is unset — so the bridge could not detect the KiCad it had just installed and every verb failed 'not installed'. Detection now derives the LocalAppData root from LOCALAPPDATA, USERPROFILE, and Path.home().

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.40 2026-07-04

SDK re-audit follow-ups (issue #64): migrated dev + publish skills to the SKILLPACK layout (real skills//SKILL.md with user-invocable:false and DEVELOPER-only descriptions, retiring the dead dev-skills/ convention). Scoped kicad_send_key to single keys delivered to an exact hwnd (dialog Enter/Escape) and pointed modifier chords at AD's desktop_press_key across the verb catalog and skills.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.39 2026-07-04

Adopt the AD v1.9.79 generic bridge contract. Completed the detect block with installVerb (kicad_upgrade) and hostAppOptionalVerbs so AD's readiness probe uses this bridge's declaration. Added a timeouts block declaring real budgets for slow verbs (upgrade 900s, DRC/ERC/STEP 300s, gerber 210s, 3D viewer 300s) so they aren't cut off at the old flat 130s. Set statusVerb to kicad_status and added the alias handler AD polls after a non-terminal timeout. Not-installed responses now use the generic host_app_not_installed errorCode plus a hostApp field (legacy kicad_not_installed retained in errorCodeLegacy).

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.38 2026-07-04

Auto-dismiss the KiCad first-run Welcome wizard and older-version conversion notice. Full README overhaul with a screenshot per window (schematic, symbol, footprint, 2D board, 3D board) captured on a GPU-less Hyper-V VM via the Mesa software-OpenGL fallback, a control-surfaces SVG diagram, and install/dialog/software-OpenGL sections.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.37 2026-07-04

New LAST-RESORT fallback verb kicad_enable_software_opengl: deploys Mesa llvmpipe (CPU software OpenGL) into KiCad's bin so KiCad renders on a GPU-less host (Hyper-V/RDP/headless). Slow; never suggested proactively; for worst-case only.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.36 2026-07-04

Skills updated with this session's learnings: kicad-interaction now documents the reliable process-based dialog scan + auto-expire + kicad_dismiss_dialogs + Cairo software-canvas self-heal; SKILL.md documents the NsisMultiUser install scope (/allusers vs /currentuser, no-UAC per-user install), the fresh-machine config bootstrap, and elevation diagnostics.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.33 2026-07-04

Dialog detection is now RELIABLE: scans EVERY window owned by a running KiCad process (matched by PID, not title/owner — the old way missed the OpenGL notice), classifies dialogs by #32770 class, auto-expires benign ones, screenshots each expired dialog for the AI, and forces the Cairo software canvas on GPU-less hosts.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.31 2026-07-04

When the bridge dismisses the 'could not use OpenGL' notice (proof the host has no usable GPU), it now persists graphics.canvas_type=2 (Cairo software) to kicad_common.json so KiCad renders without OpenGL on VMs/RDP/servers. Reported via forcedSoftwareCanvas; close+reopen editors to apply.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.29 2026-07-04

Bridge now DETECTS blocking dialogs, returns hints, AND expires the benign ones programmatically: window_info auto-clicks OK on the OpenGL/software-render notice (the modal that stalls editors on GPU-less VMs/RDP), and a new kicad_dismiss_dialogs verb force-clears benign (or all) dialogs.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.27 2026-07-04

install_library/install_footprint now bootstrap %APPDATA%/kicad// + seed lib tables from the install template when KiCad has never been launched (fresh machine), instead of failing 'config directory not found'.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.26 2026-07-04

Root-cause fix for silent install: KiCad 10's NsisMultiUser installer requires an explicit scope in silent mode — bare /S exits rc=666660 (invalid command-line parameters). kicad_upgrade now passes /allusers /S when elevated or /currentuser /S otherwise (per-user install: no admin, no UAC), accepts {scope}, and detect paths include %LocalAppData%\Programs\KiCad.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.22 2026-07-04

kicad_upgrade now reports elevated=true/false (IsUserAnAdmin) so a failed install distinguishes 'AD not elevated' from other causes.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.21 2026-07-03

kicad_upgrade reuses an already-downloaded installer in Temp (valid MZ + size) instead of re-fetching ~1GB; pass reDownload:true to force. Makes retrying after a failed install (e.g. UAC not approved) near-instant.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.20 2026-07-03

Correct the kicad dependency (>=10.0 -> >=7.0; the bridge supports 7/8/9/10 per its own description). Add download/install progress logging to kicad_upgrade + raise the read timeout to 300s so a slow/stuck install is diagnosable via bridge_log_read.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.19 2026-07-03

Bundle certs/cacert.pem (certifi roots) and load it in the SSL context — fixes CERTIFICATE_VERIFY_FAILED on AD's portable Python where the Windows cert enumeration was insufficient.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.18 2026-07-03

kicad_upgrade/check_for_updates now build an SSL context that loads the Windows ROOT/CA trust store, fixing CERTIFICATE_VERIFY_FAILED when AD's provisioned portable Python has no CA bundle. Verification stays on.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.17 2026-07-03

Fix: kicad_upgrade (and check_for_updates) were blocked by the kicad-not-installed pre-check, so a fresh machine could never bootstrap KiCad. Also refresh the detection cache after a successful install so subsequent verbs see KiCad without a bridge restart.

adom-wiki pkg install adom/[email protected]
raw: tarball ·
v0.9.16 2026-07-03

kicad_describe entries now carry hint/related/pitfalls; every verb returns a rich _hint (fix_keyboard). Resolves discussion #14.

adom-wiki pkg install adom/[email protected]
raw: tarball ·