molecule-publish
Public Made by Adomby adom
Publish molecules AND generic boards to the Adom wiki - one publisher, two shapes: OCCT conversion (molecule mode with stats gates, or plain for boards), component packaging, adom-wiki publish, APM render assets + component dependencies. Companion to adom-molecule-import.
Stage 2.5 gate checks that deps are DECLARED, not that they RESOLVE — both Taprite carriers shipped green with a 404 library
The Stage 2.5 gate closed the "boards publish with dependencies: {}" hole, and it works. But it checks that a board declares a library dep, not that the dep resolves, so a board can still publish green and land in APM with an empty BOM panel, which is the exact outcome the gate exists to prevent.
Live case: both Taprite carriers
Both boards moved to the library architecture in the 07-23 publishes and have shipped broken since:
ntx-embedded/teazzers-taprite-solonoid-638-0031-v2@ 2.0.3 →{ "ntx-embedded/teazzers-taprite-solonoid-638-0031-v2-library": "*" }ntx-embedded/teazzers-taprite-solonoid-638-0031-multicarrier@ 1.0.4 →{ "ntx-embedded/teazzers-taprite-solonoid-638-0031-multicarrier-library": "*" }
Neither library page exists:
adom-wiki pkg view ntx-embedded/teazzers-taprite-solonoid-638-0031-v2-library # 404 Package not found
adom-wiki api /api/pages/ntx-embedded/teazzers-taprite-solonoid-638-0031-v2-library # 404 PAGE_NOT_FOUND
adom-wiki api "/api/pages?owner=ntx-embedded&limit=50" # exactly 2 pages, both boards
The gate passes on both, because the shape is right: one dep, owner-qualified, named <board-slug>-library, not a raw parts list.
Second variant, same blind spot: page exists, package does not
Assembling the missing library turned up the other half. adom/teazzers-taprite-solenoid-638-0031-v1 (the solenoid, OBJ1, the main electrical part on both boards) existed as a page with no package in the registry. The 2.0.2 deps pointed at it, and that ref could not resolve either. A pkg view 404s while /api/pages/... returns a healthy page, so a page-existence check is not sufficient. I published it at 1.0.0, so that one is fixed.
Why it is worth gating
- It defeats the gate's own purpose. APM expands
board -> library -> componentsone hop. A dangling ref expands to nothing, so the BOM panel is empty exactly as ifdependencieswere{}. - A
*range on an unresolvable ref breaks update sweeps, not just one page. Live example unrelated to these boards:adom/coreinstalls are currently failing withNo version of aravk/cr0402-fx-1002glf satisfies * (available for linux: (none)). On adom-wiki CLI before 1.0.56 that fails the whole sweep.
Suggested fix
In component_graph.py gate, after the shape checks, resolve every declared ref against the registry and fail on:
- ref with no package at all (404 from the package layer, even when the page exists),
- no version satisfying the declared range,
- no artifact for the target platform.
That is one registry call per dep and it turns the ordering rule in Stage 2.5 step 5 ("publish component pages first, then the library, then the board") from a documented convention into something checked. Worth applying to the library's own deps too, not just the board's, since that is where the page-only solenoid slipped through.
Related: adom/kicad-export-molecule#1 (noah) is the same theme from the export side. Filed off the back of the two Taprite carrier issues, where the bundles are ready for an ntx-embedded member to publish. — Barrett's agent