Adom USB
Public Unreviewedby John Lauer
See every USB device across the entire Adom ecosystem — laptop, WSL2, cloud container, Azure VM, workcells — in one dashboard, and mount / unmount / reset / test / force-class / sniff any of them. USB/IP slingshot for the whole mesh.
name: adom-usb-publish description: > How to publish or republish adom-usb and its plugins to the Adom Wiki (wiki.adom.inc). Carries the naming + hero + publish-order conventions for the whole Adom USB family so they travel with the repo. Use when: release adom-usb, publish adom-usb, cut an adom-usb version, publish an adom-usb plugin, add a new USB sniffer/firmware plugin to the wiki, fix an adom-usb hero, rename a plugin title. Trigger words: publish adom-usb, release adom-usb, bump adom-usb, adom-usb plugin publish, adom-usb wiki, adom-usb hero, name an adom-usb plugin.
Publishing Adom USB (app + plugins) to the wiki
The canonical wiki is https://wiki.adom.inc via adompkg (see the
adom-wiki-v2 skill for the general flow). This skill pins the conventions that
keep the Adom USB family consistent. Follow them every time.
1. Naming — every family member announces it's Adom USB
Users meet plugins out of context (a wiki card, a search hit, a billboard in the adom-screensaver), so the relationship must be obvious without reading the slug:
- Slug:
adom-usb-<kind>-<chip>— e.g.adom-usb-stub-rp2040,adom-usb-sniffer-cdc. Dash separators; never a colon (illegal in slugs). - Title (the human name shown on cards / search / screensaver — the one that
matters; nobody reads slugs): MUST lead with
Adom USBand use a plain ASCII hyphen with spaces as the separator —Adom USB - RP2040 persona pack,Adom USB - CDC serial sniffer. NEVER an em-dash (—) — keep it identical to the sibling packages. A bare title like "RP2040 persona pack" hides the family. - Hero billboard: carry the family chip
ADOM-USB · FIRMWARE/ADOM-USB · SNIFFER(built per theadom-wiki-hero-imageskill). - Tag/keyword: include
adom-usb-pluginsoadom-usb plugins searchfinds it.
2. The hero gotcha — push page.json LAST
The page-header hero renders from the DB hero_type/hero_path, which the wiki
indexer derives from the repo's page.json hero:{type,path}.
adompkg publish OVERWRITES page.json in the repo with the package manifest
(which has no hero), clobbering the hero on every publish. So the order is:
adompkg publish(the tarball / registry step) FIRST.- THEN push a complete
page.json(type, slug, title, brief, version, visibility,hero:{type:"image",path:"screenshots/hero.png"}, install, tags, license, metadata) toPOST /api/v1/pages/<slug>/filesas the LAST step. That re-indexes and setshero_path. Verify:GET /api/v1/pages/<slug>→hero_type:"image", hero_path:"screenshots/hero.png".
3. App-page requirements (the wiki rejects publishes missing these)
type:"app", top-level version, install.binary_name, a hero (page.json +
push the PNG to screenshots/hero.png), a SKILL.md (root or skills/<slug>/),
and a non-empty tags array.
4. Publish steps
export ADOMPKG_REGISTRY=https://wiki.adom.inc
# org packages (canonical) — publish into the adom org, not your personal namespace:
adompkg publish --org adom -y
# downloadable per-platform binary (adds the "Download for your machine" button):
adompkg release upload adom/<slug>@<ver> ./bin/<bin> --platform linux
# push source + a complete page.json (with title + hero) to the git layer LAST.
For the main app, also: bump VERSION/Cargo.toml/package.json/page.json together,
cargo build --release, GitHub release, then the steps above.
Binary-not-in-tarball gotcha: bin/ is gitignored (keeps the binary off
GitHub) and adompkg pack HONORS .gitignore, so the binary is NOT in the
tarball. install.sh therefore downloads it from the wiki release asset
(/download/john/adom-usb/<ver>/adom-usb). So you MUST adompkg release upload
the binary BEFORE anyone installs that version, and install.sh must read the
version from package.json to build the URL (don't bundle the binary; don't
un-gitignore bin/).
5. After ANY title/hero/page.json change — verify the card
GET /api/v1/pages/<slug> and confirm title leads with Adom USB - … and
hero_path is set; the card/search/screensaver read those fields.
---
name: adom-usb-publish
description: >
How to publish or republish adom-usb and its plugins to the Adom Wiki
(wiki.adom.inc). Carries the naming + hero + publish-order conventions for the
whole Adom USB family so they travel with the repo. Use when: release adom-usb,
publish adom-usb, cut an adom-usb version, publish an adom-usb plugin, add a new
USB sniffer/firmware plugin to the wiki, fix an adom-usb hero, rename a plugin
title. Trigger words: publish adom-usb, release adom-usb, bump adom-usb, adom-usb
plugin publish, adom-usb wiki, adom-usb hero, name an adom-usb plugin.
---
# Publishing Adom USB (app + plugins) to the wiki
The canonical wiki is **https://wiki.adom.inc** via `adompkg` (see the
`adom-wiki-v2` skill for the general flow). This skill pins the conventions that
keep the Adom USB family consistent. Follow them every time.
## 1. Naming — every family member announces it's Adom USB
Users meet plugins out of context (a wiki card, a search hit, a billboard in the
adom-screensaver), so the relationship must be obvious without reading the slug:
- **Slug**: `adom-usb-<kind>-<chip>` — e.g. `adom-usb-stub-rp2040`,
`adom-usb-sniffer-cdc`. Dash separators; never a colon (illegal in slugs).
- **Title** (the human name shown on cards / search / screensaver — the one that
matters; nobody reads slugs): MUST lead with **`Adom USB`** and use a **plain
ASCII hyphen with spaces** as the separator — `Adom USB - RP2040 persona pack`,
`Adom USB - CDC serial sniffer`. **NEVER an em-dash (—)** — keep it identical to
the sibling packages. A bare title like "RP2040 persona pack" hides the family.
- **Hero billboard**: carry the family chip `ADOM-USB · FIRMWARE` /
`ADOM-USB · SNIFFER` (built per the `adom-wiki-hero-image` skill).
- **Tag/keyword**: include `adom-usb-plugin` so `adom-usb plugins search` finds it.
## 2. The hero gotcha — push page.json LAST
The page-header hero renders from the DB `hero_type`/`hero_path`, which the wiki
indexer derives from the repo's **`page.json` `hero:{type,path}`**.
**`adompkg publish` OVERWRITES `page.json` in the repo with the package manifest
(which has no `hero`), clobbering the hero on every publish.** So the order is:
1. `adompkg publish` (the tarball / registry step) FIRST.
2. THEN push a **complete** `page.json` (type, slug, **title**, brief, version,
visibility, `hero:{type:"image",path:"screenshots/hero.png"}`, install,
tags, license, metadata) to `POST /api/v1/pages/<slug>/files` as the LAST
step. That re-indexes and sets `hero_path`. Verify:
`GET /api/v1/pages/<slug>` → `hero_type:"image", hero_path:"screenshots/hero.png"`.
## 3. App-page requirements (the wiki rejects publishes missing these)
`type:"app"`, top-level `version`, `install.binary_name`, a hero (page.json +
push the PNG to `screenshots/hero.png`), a `SKILL.md` (root or `skills/<slug>/`),
and a non-empty `tags` array.
## 4. Publish steps
```bash
export ADOMPKG_REGISTRY=https://wiki.adom.inc
# org packages (canonical) — publish into the adom org, not your personal namespace:
adompkg publish --org adom -y
# downloadable per-platform binary (adds the "Download for your machine" button):
adompkg release upload adom/<slug>@<ver> ./bin/<bin> --platform linux
# push source + a complete page.json (with title + hero) to the git layer LAST.
```
For the main app, also: bump VERSION/Cargo.toml/package.json/page.json together,
`cargo build --release`, GitHub release, then the steps above.
**Binary-not-in-tarball gotcha:** `bin/` is gitignored (keeps the binary off
GitHub) and `adompkg pack` HONORS `.gitignore`, so the binary is NOT in the
tarball. `install.sh` therefore **downloads it from the wiki release asset**
(`/download/john/adom-usb/<ver>/adom-usb`). So you MUST `adompkg release upload`
the binary BEFORE anyone installs that version, and `install.sh` must read the
version from `package.json` to build the URL (don't bundle the binary; don't
un-gitignore `bin/`).
## 5. After ANY title/hero/page.json change — verify the card
`GET /api/v1/pages/<slug>` and confirm `title` leads with `Adom USB - …` and
`hero_path` is set; the card/search/screensaver read those fields.