← Commit history
README.md+1−1
@@ -11,7 +11,7 @@ verbs.  ```bash adom-wiki pkg install barrett-land/adom-desktop-altium-bridge   # the skill, in the container-adom-desktop bridge_install '{"manifestUrl":"https://wiki.adom.inc/download/barrett-land/adom-desktop-altium-bridge/latest/altium-bridge-manifest.json"}'+adom-desktop bridge_install '{"manifestUrl":"https://wiki.adom.inc/download/barrett-land/adom-desktop-altium-bridge/0.0.39/altium-bridge-manifest.json"}' adom-desktop --ai-thread "<your thread>" altium_ping '{}' ``` 
SKILL.md+1−1
@@ -12,7 +12,7 @@ forwards work into the running GUI as DelphiScript via `X2.EXE`. ## Install  ```bash-adom-desktop bridge_install '{"manifestUrl":"https://wiki.adom.inc/download/barrett-land/adom-desktop-altium-bridge/latest/altium-bridge-manifest.json"}'+adom-desktop bridge_install '{"manifestUrl":"https://wiki.adom.inc/download/barrett-land/adom-desktop-altium-bridge/0.0.39/altium-bridge-manifest.json"}' adom-desktop --ai-thread "<your thread>" altium_ping '{}'   # -> {"altiumInstalled": true, "version": "..."} ``` 
altium-bridge-manifest.json+3−3
@@ -1,3 +1,3 @@-{ "manifest_version": 1, "name": "altium", "version": "0.0.38",-  "url": "https://wiki.adom.inc/download/barrett-land/adom-desktop-altium-bridge/0.0.38/altium-bridge-v0.0.38.zip",-  "sha256": "344a652908fb81506e9f99ae37510714b8561fed297d3880cc5ec374cce7d4e9", "size": 26084, "released_at": "2026-08-05T20:48:33Z" }+{ "manifest_version": 1, "name": "altium", "version": "0.0.39",+  "url": "https://wiki.adom.inc/download/barrett-land/adom-desktop-altium-bridge/0.0.39/altium-bridge-v0.0.39.zip",+  "sha256": "d509064f91dc6492b4eed977e24cf8c34677bc19b1a5c77340de219eef4c664f", "size": 26085, "released_at": "2026-08-05T20:53:15Z" }
altium-bridge-v0.0.39.zipadded
⋯ 1 unchanged line ⋯
bridge-src/BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.0.38+0.0.39
bridge-src/bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "altium",   "displayName": "Altium Bridge",-  "version": "0.0.38",+  "version": "0.0.39",   "description": "Drives Altium Designer from a container: build, clone and edit file-based symbol/footprint/Integrated libraries with LCSC/JLCPCB part numbers attached, and generate batch outputs (STEP, PDF, Gerber, BOM, CPL) from an OutJob. Pairs with the container-side altium-jlc orchestrator (adom-jlcpcb + chip-fetcher).",   "homepage": "https://wiki.adom.inc/adom/adom-desktop-altium-bridge",   "author": "Adom Inc.",
bridge-src/deploy.sh+33−12
@@ -11,8 +11,13 @@ # hardcoded :8088 proxy on a different container. The source of truth is now this # repo, and the artifact is served by the wiki itself. #-# Publishing uses `adom-wiki repo push` (the git layer) and NOT `pkg publish`,-# which overwrites page files such as package.json and README from the tarball.+# Publishing writes three separate layers, in this order:+#   1. pkg publish     — the registry: install payload + the release row itself+#   2. repo push       — the git layer behind the Files tab (the readable source)+#   3. release upload  — the downloadable bridge zip + its manifest+# The order matters: `release upload` needs the release to exist, and `pkg publish`+# rewrites page files (README/SKILL/package.json) from the tarball, so the repo+# push has to follow it to have the last word. set -euo pipefail  VER="${1:?usage: deploy.sh <version> [--publish] [--install]}"; shift || true@@ -28,7 +33,6 @@ done SRC="$(cd "$(dirname "$0")" && pwd)"     # bridge-src/ REPO="$(dirname "$SRC")"                 # page repo root REF="barrett-land/adom-desktop-altium-bridge"-BASE="https://wiki.adom.inc/download/${REF}/latest" ZIP_NAME="altium-bridge-v${VER}.zip" ZIP="$REPO/$ZIP_NAME" MANIFEST="$REPO/altium-bridge-manifest.json"@@ -59,6 +63,25 @@ for p in paths: PY  # --- 3. build the artifact ---------------------------------------------------+# The docs quote a manifest URL that users paste into bridge_install, so it has to+# name this exact version. The /latest/ alias is NOT usable: it is served with+# `cache-control: immutable, max-age=31536000`, so it pins to whatever it first+# served and keeps handing out a stale manifest long after a new release lands.+echo "==> stamping the manifest URL into the docs"+for f in "$REPO/install.sh" "$REPO/SKILL.md" "$REPO/README.md"; do+  python3 - "$f" "$VER" <<'PY'+import re, sys+path, ver = sys.argv[1], sys.argv[2]+src = open(path).read()+new = re.sub(+    r"(/download/barrett-land/adom-desktop-altium-bridge/)[^/]+(/altium-bridge-manifest\.json)",+    lambda m: m.group(1) + ver + m.group(2), src)+if new != src:+    open(path, "w").write(new)+    print(f"    {path}")+PY+done+ echo "==> building $ZIP_NAME" # Exactly one zip in the repo at a time. Remember which ones we drop so they can be # removed from the page too — a superseded zip stays served until it is git-rm'd.@@ -74,14 +97,12 @@ rm -f "$REPO"/altium-bridge-v*.zip SHA=$(sha256sum "$ZIP" | cut -d' ' -f1) SIZE=$(stat -c%s "$ZIP") -# /download/<owner>/<slug>/<...>/<file> serves RELEASE ASSETS, and the /latest/-# segment resolves per-platform: it picks an asset whose platform tag matches the-# requester. So the two files are addressed differently on purpose:-#   - the manifest is uploaded as platform "any" and read from the stable /latest/-#     URL, which is what install docs and callers hardcode;-#   - the zip is windows-tagged, so it is referenced by its VERSION-PINNED url,-#     which resolves regardless of who is asking.-# Pointing the manifest at /latest/<zip> instead 404s for any non-Windows caller.+# /download/<owner>/<slug>/<version>/<file> serves RELEASE ASSETS. Always address+# them by VERSION, never through the /latest/ alias: that alias is served with+# `cache-control: immutable, max-age=31536000`, so it keeps handing out whatever it+# first served — currently a manifest from the 0.0.33 asset bucket advertising+# v0.0.35 — no matter how many newer releases land. Uploading a corrected manifest+# onto that bucket does not dislodge it either. cat > "$MANIFEST" <<EOF { "manifest_version": 1, "name": "altium", "version": "${VER}",   "url": "https://wiki.adom.inc/download/${REF}/${VER}/${ZIP_NAME}",@@ -117,7 +138,7 @@ adom-wiki release upload "$REF" "$VER" "$ZIP"      --platform windows --arch any adom-wiki release upload "$REF" "$VER" "$MANIFEST" --platform any     --arch any >/dev/null  echo "==> verifying the published artifacts resolve"-PUB_URL="${BASE}/altium-bridge-manifest.json"+PUB_URL="https://wiki.adom.inc/download/${REF}/${VER}/altium-bridge-manifest.json" curl -fsS "$PUB_URL" > /tmp/altium-manifest-check.json python3 - "$VER" <<'PY' import json, sys, urllib.request
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "adom-desktop-altium-bridge",-  "version": "0.0.38",+  "version": "0.0.39",   "type": "app",   "description": "Adom Desktop bridge for Altium Designer \u2014 build and edit file-based symbol/footprint/Integrated libraries with LCSC/JLCPCB part numbers attached, and generate batch outputs (STEP, PDF, Gerber, BOM, CPL) from an OutJob, by driving Altium via DelphiScript.",   "tags": [
page.json+4−3
@@ -1,8 +1,8 @@ {   "slug": "adom-desktop-altium-bridge",-  "version": "0.0.37",+  "version": "0.0.39",   "type": "app",-  "description": "Adom Desktop bridge for Altium Designer \u2014 build and edit file-based symbol/footprint/Integrated libraries with LCSC/JLCPCB part numbers attached, and generate batch outputs (STEP, PDF, Gerber, BOM, CPL) from an OutJob, by driving Altium via DelphiScript.",+  "description": "Adom Desktop bridge for Altium Designer — build and edit file-based symbol/footprint/Integrated libraries with LCSC/JLCPCB part numbers attached, and generate batch outputs (STEP, PDF, Gerber, BOM, CPL) from an OutJob, by driving Altium via DelphiScript.",   "tags": [     "app",     "adom-desktop",@@ -18,6 +18,7 @@   },   "needs_sudo": false,   "hero": {+    "type": "image",     "path": "docs/hero.png"   },   "author": {@@ -48,4 +49,4 @@       "prompt": "Is the Altium bridge connected and what version is it?"     }   ]-}+}\ No newline at end of file