main
Colby Knox 0.2.11: install.sh installs only user skills; altium-bridge-publish -> publish-skills/ (source-only, #10) 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).