skill
Adom Wiki Skill Pack
Public Made by Adomby adom
The Adom Wiki Skill Pack : one main skill plus the focused sub-skills that teach the AI to publish to wiki.adom.inc without breaking pages, name the wiki repo archetypes (Page, Skillpack, Family), and publish rich component pages (chips, molecules, boards). The wiki is six tools in one: git, package manager, releases, discussions, pull requests, and discovery. One package manager install drops the whole set onto your container. Includes reviewed Z-up component artwork, surface-selected MPN marki
← Commit history
Publish 0.8.22
7 files changed
+213−7
README.md+2@@ -162,6 +162,7 @@ The pack encodes these; they're worth stating here too: | **wiki-scoring** | Stars / high-fives / installs / trending _(stars live; rest partial)_. | | **wiki-workspaces** | Ship a Hydrogen bench with a project: `hydrogen/workspace.json`, export with adom-cli, push, fork or clone, apply in a container. | | **wiki-brand** | Whose brand a page wears: every owner's guide at `<owner>/brand`, the `adom-wiki brand` verbs, the BRAND_* hints, and the rule that Adom's look belongs only on adom pages. |+| **wiki-hero-glb** | What the wiki's 3D viewer reads from a GLB: declared layers and the hidden-layer intro, tooltips, switchable groups and lights, animation knobs, extensions, materials, naming. | | **wiki-bloat** | The rule against page sprawl: find where a thing already lives before creating anything. | ## Talk to the AI@@ -175,6 +176,7 @@ The pack encodes these; they're worth stating here too: - "Add a child plugin to adom-usb / a bridge to adom-desktop" → wiki-family - "Ship my Hydrogen layout with the project" / "open the author's bench" → wiki-workspaces - "my brand" / "brand guide" / BRAND_GUIDE_STARTER → wiki-brand+- "hero GLB" / "adomLayer" / "layer intro" → wiki-hero-glb ## Dependencies
SKILL.md+5−2@@ -7,7 +7,7 @@ description: >- wiki page. The wiki is six tools in one (git host + wiki package manager (`adom-wiki pkg`) + release database + discussion forum + pull requests + discovery), and three repo archetypes have emerged from real use: Page, Skillpack, and Family. This pack- routes to 23 focused sub-skills and carries the hard rules that keep pages from+ routes to 24 focused sub-skills and carries the hard rules that keep pages from breaking. Trigger words: adompkg (deprecated old name), the wiki, adom wiki, wiki.adom.inc, publish to the wiki, wiki repo, wiki page, what kind of wiki repo, repo archetype, skillpack, super-skill, wiki family, parent child repo, wiki readme, hero unlinked,@@ -17,7 +17,8 @@ description: >- tape and reel, pin 1 orientation, cached chip thumbnails, Z-up component hero, reviewed laser etch, reusable chip outlines, component page widget, shared workspace, hydrogen/workspace.json, ship my Hydrogen layout, open in Hydrogen,- brand guide, my brand, whose brand, owner brand, brand.json.+ brand guide, my brand, whose brand, owner brand, brand.json,+ hero GLB, adomLayer, layer intro, extras.tooltip, viewer_3d, KHR_lights_punctual. --- # Adom Wiki Skill Pack@@ -109,6 +110,7 @@ important enough to state up front: | **wiki-scoring** | Stars / high-fives / installs / trending: what's tracked and how to earn it. | | **wiki-workspaces** | Ship a Hydrogen bench with a project: `hydrogen/workspace.json` (panes + apps by wiki page), export with adom-cli, push, fork or clone, apply in a container; the WORKSPACE_* hints. | | **wiki-brand** | Whose brand a page wears: every owner's guide at `<owner>/brand` (brand.json, fonts, logos), `adom-wiki brand show|pull|set|push|confirm`, the BRAND_* hints, and the rule that Adom's look belongs only on adom pages. |+| **wiki-hero-glb** | What the wiki's 3D viewer reads from a GLB: `extras.adomLayer` (+ the hidden-layer `intro`), `extras.tooltip`, `adomRole` groups and lights, `component.viewer_3d` and the `?repeat= ?loop= ?animate=` knobs, honoured glTF extensions, materials, node naming, which model the page shows. | | **wiki-bloat** | THE rule against page sprawl: find where a thing already lives BEFORE creating anything; "add to the skillpack" means add a SKILL.md there, never mint a page. | ## Talk to the AI@@ -123,6 +125,7 @@ important enough to state up front: - "Keep the source private but let people install it" → wiki-visibility - "Ship my Hydrogen layout with the project" / "open the author's bench" / "WORKSPACE_URL_LOCAL" → wiki-workspaces - "my brand" / "whose colors" / "brand guide" / BRAND_GUIDE_STARTER / BRAND_GUIDE_MISSING / "make it look like my brand" → wiki-brand+- "hero GLB" / "adomLayer" / "layer intro" / "field of view cone" / "what does the viewer read from a glb" / "viewer_3d" → wiki-hero-glb - "Bundle these skills into one package" → wiki-skillpack - "Add a child plugin to adom-usb" → wiki-family - "Publish this chip / molecule / board to the wiki" → wiki-component
install.sh+1@@ -46,6 +46,7 @@ install_skill wiki-subreadme skills/wiki-subreadme/SKILL.md install_skill wiki-hero-studio skills/wiki-hero-studio/SKILL.md install_skill wiki-workspaces skills/wiki-workspaces/SKILL.md install_skill wiki-brand skills/wiki-brand/SKILL.md+install_skill wiki-hero-glb skills/wiki-hero-glb/SKILL.md echo "OK: Installed Adom Wiki Skill Pack and all bundled skills to $DEST" done
package.json+3−2@@ -1,7 +1,7 @@ { "slug": "adom-wiki-skillpack", "title": "Adom Wiki Skill Pack",- "version": "0.8.21",+ "version": "0.8.22", "type": "skill", "hero": { "path": "screenshots/hero.png"@@ -120,7 +120,8 @@ "skills/wiki-component-lod/references/verification.md", "skills/wiki-component-lod/references/runtime.md", "skills/wiki-workspaces/SKILL.md",- "skills/wiki-brand/SKILL.md"+ "skills/wiki-brand/SKILL.md",+ "skills/wiki-hero-glb/SKILL.md" ], "scripts": { "install": "./install.sh",
page.json+3−2@@ -131,7 +131,7 @@ "prompt": "Before I create this wiki page, check whether the thing already has a home." } ],- "version": "0.8.21",+ "version": "0.8.22", "description": "The Adom Wiki Skill Pack : one main skill plus the focused sub-skills that teach the AI to publish to wiki.adom.inc without breaking pages, name the wiki repo archetypes (Page, Skillpack, Family), and publish rich component pages (chips, molecules, boards). The wiki is six tools in one: git, package manager, releases, discussions, pull requests, and discovery. One package manager install drops the whole set onto your container. Includes reviewed Z-up component artwork, surface-selected MPN marking, reusable thumbnail caches and component-page widgets.", "dependencies": { "adom/adom-wiki-hero-image": "^0.2.2",@@ -173,7 +173,8 @@ "skills/wiki-component-lod/references/verification.md", "skills/wiki-component-lod/references/runtime.md", "skills/wiki-workspaces/SKILL.md",- "skills/wiki-brand/SKILL.md"+ "skills/wiki-brand/SKILL.md",+ "skills/wiki-hero-glb/SKILL.md" ], "scripts": { "install": "./install.sh",
skills/wiki-hero-glb/SKILL.mdadded+198@@ -0,0 +1,198 @@+---+name: wiki-hero-glb+description: >-+ What the Adom Wiki's 3D viewer reads from a GLB, in one page: declared layers+ (extras.adomLayer: key, label, group, hidden, the built-in PCB vocabulary,+ the nearest-declaring-ancestor rule, the two-layer minimum), the intro+ preview of a hidden layer (extras.adomLayer.intro), hover tooltips+ (extras.tooltip and the tooltips policy), switchable groups and lights inside+ the GLB (extras.adomRole / Adom.* nodes, KHR_lights_punctual, the light+ budget), animation (which groups autoplay, component.viewer_3d repeat / loop /+ animate / ground / shadows / tooltips / camera and the ?repeat= ?loop=+ ?animate= ?ground= query knobs, the Replay button), which glTF extensions+ the viewer honours, materials for translucent artwork (alphaMode BLEND,+ doubleSided), quantization, Draco, GPU instancing (refused), node naming+ that survives step2glb, and how the page picks the model it shows. Read+ before authoring a hero GLB, a field-of-view cone, an LED that lights, a+ laser-etch overlay, or any GLB whose parts should be switchable or+ introduced. Trigger words: hero GLB, hero glb, adomLayer, layer intro,+ fade in the layer, highlight the toggle, field of view cone, extras.tooltip,+ adomRole, Adom.LED.State, KHR_lights_punctual, viewer_3d, repeat loop+ animate ground, replay animation, KHR_animation_pointer, alphaMode BLEND,+ doubleSided, Draco, gpu instancing warning, what does the wiki viewer read+ from a glb, glb authoring, 3D | Hero toggle.+---+Parent skill: **adom-wiki-skillpack**++# The hero GLB: what the wiki's 3D viewer reads++The 3D slot on a component page is adom/adom-3d-viewer (Babylon 9). Everything+it understands beyond geometry is declared INSIDE the GLB, in glTF `extras` and+node names, plus a few per-page defaults in page.json. This page is the+contract, collected from adom/wiki#35, #48, #55, #57, #95, #162 and+adom/adom-3d-viewer#7, #8. Working examples: adom/vl53l5cx, vl53l7cx, vl53l8cx+(`<slug>-hero.glb`: six declared layers, a hidden field-of-view cone with an+intro, a 24 s yaw animation) and the tooling that made them (`pipeline/` on+adom/vl53l5cx: `hero_step.py`, `glb_alpha.py`).++## Layers: `extras.adomLayer`++```json+{ "name": "Adom.FOV",+ "extras": { "adomLayer": { "key": "fov", "label": "Field of view", "group": "Optics", "hidden": true } } }+```++| Field | Required | Meaning |+|---|---|---|+| `key` | yes | Stable id (1 to 64 chars); what `setLayerVisible(key, ...)` takes. |+| `label` | no | Panel text; defaults to the key with each `_` shown as a space. |+| `group` | no | Section heading in the panel; layers sharing a group list together. |+| `hidden` | no | `true` starts the layer switched off. |+| `intro` | no | Introduce a hidden layer once after load (below). |++Rules that matter:++- Declare on the mesh OR an ancestor node. Babylon splits multi-material+ primitives into child meshes, so the group node that owns them is usually+ the right place. The NEAREST declaration wins per mesh: an ancestor covers+ its subtree except where a descendant declares its own, so a declared group+ and finer declarations under it compose (adom/wiki#162).+- A declared layer wins over the built-in name vocabulary at the same node.+- The built-in vocabulary, matched on node names (`silk`, `silk_top`,+ `silk_bottom`, `pad_top`, `pad_bottom`, `solder_top`, `solder_bottom`,+ `paste_top`, `paste_bottom`, `fr4_board`, `barrel`, `pin1_marker`; a name+ equal to the key or starting with `key_` / `key.`), is DATA in the same+ shape you can declare; solder and paste start hidden. Declared layers list+ after the built-in ones, in file order.+- Fewer than two layers means no panel; a DECLARED layer always surfaces,+ even alone (a lone name-matched one does not).+- Panel state is not persisted per layer; `hidden` is the resting state on+ every load.++## Intro preview of a hidden layer: `extras.adomLayer.intro`++```json+"intro": { "fadeInAt": 1.5, "fadeOutAt": 6.5, "highlightButton": true, "fadeMs": 700 }+```++After the model loads the layer fades in at `fadeInAt` seconds, holds, and+fades out from `fadeOutAt` (always at least 0.5 s later); while it shows, its+toggle in the Layers panel reads as pressed and pulses, so the reader learns+the switch exists. Afterwards the layer rests hidden and the toggle rests off.+Honoured only on a `hidden: true` layer. The fade is mesh visibility, so any+material works, translucent cones included. A click on the toggle during the+intro keeps the layer on. The panel gains a "Replay intro" button, the page's+Replay button replays it too, and `?animate=0` (or `viewer_3d.animate: false`)+holds it off with the rest of the motion. Viewer API: `getIntros()`,+`replayIntros()`, `stopIntros()`. Needs viewer 0.9.0 (wiki bundle 20260921a).++## Hover tooltips: `extras.tooltip`++`"extras": { "tooltip": "Solder ball\nDia 0.30 mm" }` on a mesh or a node up to+five levels above it; `\n` breaks lines. Without it the mesh name is the+fallback, run through the layer-label table, and auto-generated names+(`mesh_*`, `node_*`, `*_primitive3`, `__root__`) show nothing. A manufacturer+GLB full of CAD names (`BODY-SON`) is tamed per page with+`component.viewer_3d.tooltips`: `all` (default), `authored` (only+extras.tooltip), `off`; `?tooltips=` overrides per embed.++There is no pin cross-highlight contract in the GLB today: hovering a symbol+pin does not light a mesh. Name pads and leads descriptively (`pad_1`,+`lead_1`) so a future contract can key on them, but do not expect it yet.++## Switchable groups and lights inside the GLB++A node named `Adom.<Something>` or carrying `extras.adomRole` becomes a+switchable group in the panel's "Parts" section: `Adom.LED.State` holding an+emissive lens mesh and a `KHR_lights_punctual` light switches both together;+`Adom.LaserEtch.MPN` toggles the etched part number. The OUTERMOST declaring+node wins (children ride with it); `extras.defaultEnabled: false` starts a+group off; one row per role, every placement behind it (a board with eight of+the same LED gets one row, with per-placement control on the API).++Lights come in as authored (candela, metres, position from the parent+matrix) with no per-light shadows, under a budget of the nearest and+brightest 4 per view (`setLightBudget`). A light under a scaled node is called+out in the console, never rescaled: put lights under unscaled nodes. Emissive+skins keep glowing when the budget drops a light. Full detail:+adom/adom-3d-viewer#7 and the viewer's docs/CONTENT-CONVENTIONS.md.++## Animation++Every glTF animation group autoplays. The platform default is land-once:+play through once and hold the final frame (the assembled state). Per page in+page.json, and per embed by query, precedence query > page > default:++| page.json `component.viewer_3d` | query | meaning |+|---|---|---|+| `"repeat": 0..10` | `?repeat=N` | play N times then hold; 0 = loop forever |+| `"loop": true/false` | `?loop=1/0` | shorthand for repeat 0 / repeat 1 |+| `"animate": false` | `?animate=0` | hold the first frame; also holds layer intros |+| `"ground": false` | `?ground=0` | hide the ground plane |+| `"shadows": false` | `?shadows=0` | no cast shadows (a moving cast shadow pulls focus) |+| `"tooltips": "authored" / "off"` | `?tooltips=` | hover-label policy, above |+| `"camera": { "alpha", "beta", "radiusScale" }` | `?camera=a,b[,r]` | opening view in radians |++Keys the sanitizer does not know are ignored with a publish hint. A GLB with+animation groups (or a layer intro) shows a Replay button under the viewer.+A looping hero yaw (the VL53Lx `adom-hero-intro`, plus or minus 6 degrees, 24+s) reads well with `"repeat": 0` on that page.++Extensions the loader honours: `KHR_lights_punctual`, `KHR_materials_*`+(transmission, clearcoat, sheen, ior, volume, emissive_strength, ...),+`KHR_texture_transform`, `KHR_mesh_quantization`, `KHR_draco_mesh_compression`+(the decoder is vendored), `KHR_animation_pointer` (Babylon's loader supports+it, so a material `baseColorFactor` fade can be authored as animation; the+layer `intro` is still the way to fade a LAYER, because only the viewer can+highlight the toggle). `EXT_mesh_gpu_instancing` is REFUSED with a console+warning (mis-renders under the Z-up transform): build with+`gltf-transform optimize --instance false`.++## Materials and geometry++- Translucent artwork (a field-of-view cone, a glass lens): `alphaMode:+ "BLEND"`, `doubleSided: true`, a `baseColorFactor` alpha around 0.3 to 0.5.+ The wiki renders with alpha sorting; keep translucent parts few.+- Coplanar decals (silkscreen, pad labels) get z-fighting mitigation from the+ viewer, but lift them by a few micrometres anyway.+- Quantize (`KHR_mesh_quantization`) and Draco-compress freely; both load.+ Do not GPU-instance (above).+- Units are metres (glTF); a 4 mm part is 0.004 across. A wrong unit shows up+ as a light that "does nothing" or a camera that frames a speck.+- Keep the hero GLB under a few MB: it loads on every page view of the+ component (and posters cover it until the reader clicks Load).++## Node naming that survives service-step2glb++STEP to GLB keeps node names, so name the parts in CAD: `Adom.FOV`,+`Adom.LED.State`, `Adom.LaserEtch.MPN`, and instance labels (`U1`, `LED3`)+survive and become the group rows and tooltips. Generic exporter names+(`Body1`, `Mesh_014`) do not; declare `extras` after conversion when you+cannot rename in CAD (`gltf-transform` or the `glb_alpha.py` pattern on+adom/vl53l5cx).++## Which model the page shows++The 3D slot renders `component.parts.model_3d` (the page's one GLB); the+"3D | Hero" chip beside it swaps the frame for the page's hero IMAGE+(screenshots/hero.png), not a second GLB. A hero GLB (annotated: layers,+labels, intros, yaw) is therefore the page's `model_3d`; the clean board LODs+that other pages consume are separate files (see wiki-component-lod: the four+board LODs exclude footprint, pad-label and silkscreen helpers, the hero keeps+them). The 3D slot is click-gated (a poster until the reader clicks Load) and+unloads after 45 s of page inactivity, so a heavy hero costs a first click,+not a page load.++## Checklist before publishing++1. Two or more layers, or a declared one, so the panel appears; hidden layers+ marked `hidden: true`; an intro on the one worth introducing.+2. `extras.tooltip` on anything a reader would hover; `tooltips: "authored"`+ on manufacturer GLBs with CAD names.+3. Lights under unscaled nodes, inside an `Adom.*` group with their emissive+ skin.+4. `component.viewer_3d` set for the page's look (repeat 0 for a looping yaw,+ ground false for a floating part); check with `?animate=0` that the still+ frame reads too.+5. No GPU instancing; Draco or quantization is fine; open the page and read+ the browser console once: the viewer says what it refused.
uninstall.sh+1−1@@ -6,7 +6,7 @@ else DESTINATIONS=("$HOME/.claude/skills" "${CODEX_HOME:-$HOME/.codex}/skills") fi for DEST in "${DESTINATIONS[@]}"; do- for name in adom-wiki-skillpack wiki-anatomy wiki-api wiki-publish-safely wiki-readme wiki-readme-html wiki-readme-slideshow wiki-visibility wiki-repo-styles wiki-component wiki-component-lod wiki-family wiki-skillpack wiki-hero wiki-breadcrumbs wiki-forking wiki-discovery wiki-scoring wiki-bloat wiki-sub-readme wiki-subreadme wiki-hero-studio wiki-workspaces wiki-brand; do+ for name in adom-wiki-skillpack wiki-anatomy wiki-api wiki-publish-safely wiki-readme wiki-readme-html wiki-readme-slideshow wiki-visibility wiki-repo-styles wiki-component wiki-component-lod wiki-family wiki-skillpack wiki-hero wiki-breadcrumbs wiki-forking wiki-discovery wiki-scoring wiki-bloat wiki-sub-readme wiki-subreadme wiki-hero-studio wiki-workspaces wiki-brand wiki-hero-glb; do rm -rf -- "$DEST/$name" done done