← Commit history

README: dock bar card, web control lane, 10-skill pack, tri-vendor rule, zero-dialog doctrine, lineage (+4 screenshots)

John Lauer ·c18f9152e0 ·1mo ago ·parent 9e5d46f
5 files changed +89
README.md+89
@@ -135,6 +135,95 @@ placed part; wiring survives), `pcb_report` (ground truth: pads, bodies, nets, t  **Dialogs & desktop** — `check_dialogs`, `dismiss_dialogs` +## The dock bar card++The bridge is a card in the Hydrogen **dock bar** — the launcher rail on the right edge of the+workspace — alongside KiCad and Fusion. It is in the curated fleet list+(`hydrogen-bootstrap/dock/apps.json`, order 35, featured), so every Adom user's rail picks it up+on the next poll, or instantly with *Refresh list from wiki*.++![The Altium Dashboard the card opens](docs/img/dock-dashboard.png)++Clicking the card runs this repo's `dockbar.json`: an install-or-update step+(`adom-wiki pkg update altium-bridge || pkg install adom/altium-bridge` — this is how the+skillpack propagates to every container), then `altium-dashboard serve --print-url`, which+self-backgrounds and prints its URL; the dock opens it in a webview tab and starts a named AI+thread with the Altium prompt. The dashboard is the standard dock anatomy:++| Region | What it does here |+|---|---|+| **Say it** strip | six phrases you can send straight to a new AI thread — "show me my board in altium 3d", "add this wiki part to my altium library", "run drc on my altium board", … — plus the 2-minute demo player |+| **Status LEDs** | Relay · Box · Bridge · Altium (version) · Licence · Running · Agent (resident) · Updates — each with a hover hint, live over SSE from `/api/status` |+| **Boxes & actions** | the target machine, Setup / Launch Altium / Close Altium |+| **Guided demo** | the six-beat background tour of the examples that ship with Altium |++Progress for long verbs rides the **Windows taskbar button** (the app icon fills up), never a toast.++## Web control — "Add to Altium library" from a wiki page++Component and molecule pages carry an **EXPORTS TO: KiCad · Fusion · Altium** row. The bridge's+half is `altium_install_library_bundle`, the exact peer of `kicad_install_library_bundle`:++![A component page's export chips](docs/img/component-page-exports.png)++```js+AdomWebControl.run('altium_install_library_bundle', { zipPath, libraryName, capture: true })+// → { success, symbols, footprints, intlibs, installed:[{lib,ok}], altiumRunning, restartNeeded, thumbnailDataUrl? }+```++The page fetches the bundle (`<Lib>.SchLib` + `<Lib>.PcbLib`, or an `.IntLib`), stages it on the+box with `write_file_chunk`, and calls the verb; the user clicks *Allow* once on Adom Bridge's+consent prompt. The verb is zip-slip hardened (256 MB / 512 MB caps), registers the libraries in+Installed Libraries, **never closes a running Altium** (it reports `restartNeeded`), and returns a+proof frame — the library as Altium actually opened it:++![Proof frame returned by the bundle install](docs/img/webcontrol-bundle-proof.png)++`docs/webcontrol-altium-test.html` is the acceptance harness (it loads the wiki's live+`webcontrol.js`); `docs/HANDOFF-COLBY.md` is the contract for the page side.++## The skillpack — ten skills, propagated like KiCad's and Fusion's++`adom-wiki pkg install adom/altium-bridge` delivers these into `~/.claude/skills/` on every+container, and the dock's install step keeps them current:++| Skill | For |+|---|---|+| `altium-bridge` | the user skill: every verb, what it returns, and when to reach for it |+| `altium-install` | installing Altium Designer + the trial sign-in, measured step by step |+| `altium-libraries` | display modes, footprint variants, STEP bodies, the tri-vendor rule, the pin-1 check |+| `altium-boards` | test boards, board shape, placement laws, footprint swaps with surviving nets, 3D camera facts |+| `altium-outputs` | compile/ERC, DRC, OutJob media (Gerber, ODB++, NC drill, BOM, pick-and-place) |+| `altium-part-import` | add any catalog part with **Mouser (preferred) + DigiKey + LCSC** part numbers — REUSE / CREATE / APPEND |+| `altium-kicad-import` | KiCad → Altium, incl. the KiCad-10 downgrade and the native no-importer lane |+| `altium-bridge-plan` | the plan of record: every automation surface Altium exposes, measured |+| `altium-bridge-dev` | developer-only: the agent architecture, the dialog doctrine, the engine-halting identifiers |+| `altium-bridge-publish` | developer-only: the release recipe (lockstep versions, asset upload, pkg staging) |++## Parts carry all three vendors++Every component the bridge authors gets `Mouser Part #` (Adom's preferred vendor), `DigiKey Part #`,+and the exact `LCSC Part #` (so JLCPCB BOM/CPL round-trip), plus MPN / Manufacturer / Value /+Package — looked up with one `adom-parts-search` call. Parameters land hidden; `altium_set_visibility`+shows the one you want on the schematic.++## Zero dialogs, by construction++Altium's scripting debugger breaks on **any** raised exception, so a raise is a modal. The bridge+designs the class out rather than dismissing it: file reads probe with `FileOpen` before loading,+every save is preceded by a transaction clear (a dangling `PreProcess` is what draws the+save-a-copy warning), engine-halting identifiers are catalogued in the dev skill, and every verb+that could draw one scans Altium's child windows afterwards and attaches a frame if it finds any.+A dialog the user sees is logged as a defect, not handled.++## Lineage++The bridge consolidates Barrett Land's summer-2026 Altium work — `adom-desktop-altium-bridge`,+`altium-part-importer`, `kicad10-to-altium` — into one master repo: every verb ported onto the+resident agent (his bridge forwarded one `X2.EXE` command per call), his three-path part workflow+and KiCad-10 findings carried into the skillpack, his v10→v9 downgrader vendored under `tools/`.+His pages stay up with pointers here.+ ## Running / dependencies  Bridge provisions everything; nothing to install by hand.
docs/img/component-page-exports.pngadded
⋯ 1 unchanged line ⋯
docs/img/dock-dashboard.pngadded
⋯ 1 unchanged line ⋯
docs/img/webcontrol-bundle-proof.pngadded
⋯ 1 unchanged line ⋯
docs/img/wiki-page-pup.pngadded
⋯ 1 unchanged line ⋯