Altium - the Altium Bridge
Public Made by Adomby adom
Adom Bridge for Altium Designer: a resident DelphiScript agent gives the AI eval, the 1,100-command process launcher, all 8 EDA surfaces with screenshots, compile/ERC, DRC, OutJob outputs, native SchLib/PcbLib authoring with STEP 3D bodies, and dialog handling by PID.
main
b3cff1a
1mo ago
name: altium-bridge-publish user-invocable: false description: >- DEVELOPER-only publish recipe for shipping a new altium-bridge version to wiki.adom.inc/adom/altium-bridge: the version lockstep (bridge.json + BRIDGE_VERSION + package.json + manifest), the runtime zip build, repo push + release create, the skills-only pkg publish (stage from files[] to keep the tarball clean), and the studio-gated hero. Read when releasing the altium bridge. Trigger words — publish altium bridge, release altium bridge, ship altium bridge, bump altium bridge, altium bridge manifest, altium bridge pkg.
altium-bridge-publish
Two artifacts: the RUNTIME (zip + manifest on the page /files, what Adom Bridge downloads)
and the SKILLS PKG (adom/altium-bridge, container docs). Use adom-wiki for ALL wiki calls.
0. bridge.json schema — verbs[] are STRINGS
verbs is a flat list of verb names. NEVER objects. 0.1.5–0.1.7 appended four {name, description}
entries and ab's bridge_registry refused the whole file (invalid type: map, expected a string) —
the bridge kept running on its stale in-memory registration until the next reap, then vanished from
bridge_list while bridge_install still reported ✓ (ab issue #971). Lint before every release:
python3 -c "import json;b=json.load(open('src/bridge.json'));assert all(isinstance(v,str) for v in b['verbs'])".
When a bridge disappears from the registry, read %LOCALAPPDATA%\inc.adom.bridge\logs\Adom Bridge.log
(ab's real lifecycle log) for [bridge_registry] parse ... failed.
1. Version lockstep (bump together)
src/bridge.json version, src/BRIDGE_VERSION, package.json version, and the generated
adom-bridge-altium-manifest.json version must match. scripts/release.py builds the zip +
manifest from src/bridge.json.
2. Build + push runtime
python3 scripts/release.py # dist/adom-bridge-altium-v<ver>.zip + manifest
cp dist/adom-bridge-altium-v<ver>.zip dist/adom-bridge-altium-manifest.json . ; cp src/bridge.json .
adom-wiki repo push adom/altium-bridge --files adom-bridge-altium-v<ver>.zip adom-bridge-altium-manifest.json bridge.json <changed docs> -m "v<ver>: ..."
adom-wiki release create adom/altium-bridge <ver> --title "Altium bridge v<ver>" --changelog "..." --binary-path adom-bridge-altium-v<ver>.zip
adom-wiki release upload adom/altium-bridge <ver> adom-bridge-altium-v<ver>.zip --platform windows --arch x64 # REQUIRED: create's --binary-path does NOT attach the asset (measured 2026-08-31: 0.1.4-0.1.7 all had assets:[] and the manifest's /download/<owner>/<slug>/<ver>/<zip> URL 404'd -> bridge_install failed). Verify: curl -I the manifest url == 200.
rm -f adom-bridge-altium-v<ver>.zip bridge.json # don't leave copies in the repo root
3. Publish the skills pkg (stage clean)
Stage ONLY the declared files[] into a fresh dir and pack from there — packing the repo
sweeps up the runtime zip and dist. The pkg is skills + tools, no binaries.
ST=$(mktemp -d); python3 -c "import json,shutil,os
for f in json.load(open('package.json'))['files']:
os.makedirs(os.path.dirname('$ST/'+f) or '$ST',exist_ok=True); shutil.copy(f,'$ST/'+f)"
(cd $ST && adom-wiki pkg publish --org adom --skip-lint --yes)
files[] lists every skill path explicitly (no globs) AND install.sh/uninstall.sh install
each. Dev/publish skills carry user-invocable: false + a description opening "DEVELOPER-only".
4. Hero (first publish only)
New-page heroes are studio-gated: hero-studio pose adom/altium-bridge --surface webview,
load a REAL Altium capture as the showcase, the human clicks Generate, then
adom-wiki page hero adom/altium-bridge --image docs/hero.png. Redeploys keep the icon.
5. Verify
adom-wiki page stats adom/altium-bridge (version), adom-wiki release list (asset present),
adom-wiki repo show adom/altium-bridge adom-bridge-altium-manifest.json (served sha matches).
A docs-only change (README/images) skips the version bump — just repo push.
Standing rules
- Commit source in lockstep with each publish; the changelog must be real (server enforces it).
- Never elevate ab. Never toast for progress — taskbar button only (John).
---
name: altium-bridge-publish
user-invocable: false
description: >-
DEVELOPER-only publish recipe for shipping a new altium-bridge version to
wiki.adom.inc/adom/altium-bridge: the version lockstep (bridge.json + BRIDGE_VERSION +
package.json + manifest), the runtime zip build, repo push + release create, the skills-only
pkg publish (stage from files[] to keep the tarball clean), and the studio-gated hero. Read
when releasing the altium bridge. Trigger words — publish altium bridge, release altium
bridge, ship altium bridge, bump altium bridge, altium bridge manifest, altium bridge pkg.
---
# altium-bridge-publish
Two artifacts: the RUNTIME (zip + manifest on the page `/files`, what Adom Bridge downloads)
and the SKILLS PKG (`adom/altium-bridge`, container docs). Use `adom-wiki` for ALL wiki calls.
## 0. bridge.json schema — verbs[] are STRINGS
`verbs` is a flat list of verb names. NEVER objects. 0.1.5–0.1.7 appended four `{name, description}`
entries and ab's `bridge_registry` refused the whole file (`invalid type: map, expected a string`) —
the bridge kept running on its stale in-memory registration until the next reap, then vanished from
`bridge_list` while `bridge_install` still reported ✓ (ab issue #971). Lint before every release:
`python3 -c "import json;b=json.load(open('src/bridge.json'));assert all(isinstance(v,str) for v in b['verbs'])"`.
When a bridge disappears from the registry, read `%LOCALAPPDATA%\inc.adom.bridge\logs\Adom Bridge.log`
(ab's real lifecycle log) for `[bridge_registry] parse ... failed`.
## 1. Version lockstep (bump together)
`src/bridge.json` `version`, `src/BRIDGE_VERSION`, `package.json` `version`, and the generated
`adom-bridge-altium-manifest.json` `version` must match. `scripts/release.py` builds the zip +
manifest from `src/bridge.json`.
## 2. Build + push runtime
```bash
python3 scripts/release.py # dist/adom-bridge-altium-v<ver>.zip + manifest
cp dist/adom-bridge-altium-v<ver>.zip dist/adom-bridge-altium-manifest.json . ; cp src/bridge.json .
adom-wiki repo push adom/altium-bridge --files adom-bridge-altium-v<ver>.zip adom-bridge-altium-manifest.json bridge.json <changed docs> -m "v<ver>: ..."
adom-wiki release create adom/altium-bridge <ver> --title "Altium bridge v<ver>" --changelog "..." --binary-path adom-bridge-altium-v<ver>.zip
adom-wiki release upload adom/altium-bridge <ver> adom-bridge-altium-v<ver>.zip --platform windows --arch x64 # REQUIRED: create's --binary-path does NOT attach the asset (measured 2026-08-31: 0.1.4-0.1.7 all had assets:[] and the manifest's /download/<owner>/<slug>/<ver>/<zip> URL 404'd -> bridge_install failed). Verify: curl -I the manifest url == 200.
rm -f adom-bridge-altium-v<ver>.zip bridge.json # don't leave copies in the repo root
```
## 3. Publish the skills pkg (stage clean)
Stage ONLY the declared `files[]` into a fresh dir and pack from there — packing the repo
sweeps up the runtime zip and dist. The pkg is skills + tools, no binaries.
```bash
ST=$(mktemp -d); python3 -c "import json,shutil,os
for f in json.load(open('package.json'))['files']:
os.makedirs(os.path.dirname('$ST/'+f) or '$ST',exist_ok=True); shutil.copy(f,'$ST/'+f)"
(cd $ST && adom-wiki pkg publish --org adom --skip-lint --yes)
```
`files[]` lists every skill path explicitly (no globs) AND install.sh/uninstall.sh install
each. Dev/publish skills carry `user-invocable: false` + a description opening "DEVELOPER-only".
## 4. Hero (first publish only)
New-page heroes are studio-gated: `hero-studio pose adom/altium-bridge --surface webview`,
load a REAL Altium capture as the showcase, the human clicks Generate, then
`adom-wiki page hero adom/altium-bridge --image docs/hero.png`. Redeploys keep the icon.
## 5. Verify
`adom-wiki page stats adom/altium-bridge` (version), `adom-wiki release list` (asset present),
`adom-wiki repo show adom/altium-bridge adom-bridge-altium-manifest.json` (served sha matches).
A docs-only change (README/images) skips the version bump — just `repo push`.
## Standing rules
- Commit source in lockstep with each publish; the changelog must be real (server enforces it).
- Never elevate ab. Never toast for progress — taskbar button only (John).