← Commit history

Publish 2.5.1

Drew Owens ·9291ff8c3d ·2mo ago ·parent e47c2d6
4 files changed +24−4
SKILL.md+7
@@ -180,6 +180,13 @@ in APM with no BOM panel (#247, the Taprite carriers). Do it every publish:    `board -> library -> components` (matches APM's board->library    architecture; reference shape:    barrett-land/usb3-to-ethernet-dataonly-molecule-library).+   **A library page's tags are `["library", <topical>...]` and MUST NOT+   contain `board` or `molecule` (#5).** The kind tag is what Nucleus keys+   on (priority `project > molecule > circuit > board > library`), so a+   stray `board`/`molecule` on a library wins and the page renders as a+   board/molecule in the gallery instead of a hidden library. Do NOT copy+   the parent board's/molecule's kind tag onto its library — the library is+   neither. 5. **Order + one version per cycle**: publish component pages first, then    the library, then the board — a dep must exist when the depender    publishes. Merge everything BEFORE the board's Stage 3 publish so each
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "molecule-publish",-  "version": "2.5.0",+  "version": "2.5.1",   "type": "skill",   "description": "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.",   "tags": [
page.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "molecule-publish",-  "version": "2.5.0",+  "version": "2.5.1",   "type": "skill",   "description": "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.",   "tags": [
scripts/component_graph.py+15−2
@@ -180,8 +180,21 @@ def cmd_gate(a):     slug = pkg.get("slug", "")     fails, warns = [], [] -    # the board's OWN slug must be MPN-shaped for components (#142)-    if pkg.get("type") == "component" and pkg.get("component", {}).get("category") != "board":+    tags = [str(t).lower() for t in (pkg.get("tags") or [])]+    is_library = "library" in tags or slug.endswith("-library")++    # A library page must NOT carry a board/molecule KIND tag (#5): Nucleus keys+    # on the kind (project > molecule > circuit > board > library), so a stray+    # 'board'/'molecule' wins and the library renders as a board/molecule. The+    # library inherits the parent's kind tag if the generator isn't careful.+    if is_library:+        stray = [t for t in ("board", "molecule", "circuit", "project") if t in tags]+        if stray:+            fails.append(f"library page carries kind tag(s) {stray} - a library is none of "+                         "these; tag it ['library', <topical>...] only (#5)")++    # the board's OWN slug must be MPN-shaped for components (#142) - NOT libraries+    elif pkg.get("type") == "component" and pkg.get("component", {}).get("category") != "board":         if LCSC_RE.match(slug):             fails.append(f"slug '{slug}' is an LCSC/distributor code, not an MPN (#142)")         if VALUE_NAMED_RE.match(slug) or VALUE_RE.match(slug):