skill
Adom UI Design System
Public Made by Adomby adom
How the AI builds and tests interfaces people love to use in Adom. Ships as one installable skill that bundles focused skills (tooltips, floating-windows, toasts, responsive-ui, app-shell, ai-driven-apps, clickable-paths).
← Commit history
1.9.2: say-send PARKED after live crash; namespaced graduation keys; target chip this-machine fallback; one-X panel dismiss
4 files changed
+26−6
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "adom-ui-design",- "version": "1.9.1",+ "version": "1.9.2", "type": "skill", "description": "The Adom UI Design System plus a bundle of focused UI skills (tooltips, floating-windows, toasts, responsive-ui, app-shell, ai-driven-apps, clickable-paths, dark-default, input-feedback, settings-layout). One install drops the whole set of skill files onto your container, plus shared icon assets (the settings cog) so every Adom app draws the same glyph.", "dependencies": {},
skills/dash-header/SKILL.md+3−1@@ -35,7 +35,9 @@ This skill adds the dashboard-specific rulings the 2026-08-24 audit showed being component is fine THERE. - **The target chip is standard.** Bridge-backed dashboards show which box answers: a small mono chip, `target: <BoxName>`, subject zone, with the connection LED inside it.- Same spot on every app so a user's eye learns it once.+ Same spot on every app so a user's eye learns it once. A full app served in-container+ that cannot learn the box name (ab's cross-origin /status projection does not carry it+ yet) says `target: this machine` honestly rather than guessing or hiding the chip. - **The ? lives left of the gear** and recalls the newbie scaffolding - see **newbie-graduation**. Gear opens settings per **settings-layout**.
skills/newbie-graduation/SKILL.md+8−4@@ -37,7 +37,9 @@ dashboard's newbie job is to hand the user to their AI. ## Graduation triggers (any one graduates that scaffold) -- The user dismissed it (the X). Immediate, it was their choice.+- The user dismissed it (the X). Immediate, it was their choice. One X for the WHOLE+ newbie panel (setting all dismissed flags at once) is the sanctioned shape, per John's+ ruling on chip-fetcher; the folded say one-liner still survives. - **N successful launches**, default 3. Count a launch as successful when the dashboard loads AND its status row is green within the first minute. - **The user's AI drove the app once.** The bridge knows when a verb ran that a human did@@ -49,11 +51,13 @@ else folds at 3 launches, it folds at 5, or on dismissal/AI-driven-action). ## Storage -localStorage, no server, no sync - each dashboard's port is its own origin so keys are-naturally per-app:+localStorage, no server, no sync. The key MUST be namespaced with the app slug: behind the+cloud proxy every dashboard shares ONE origin, and un-namespaced keys cross-talk between+apps (found live 2026-08-24: a sibling app's aiDriven flag landed in adom-lbr's state).+Direct ports being separate origins does not save you; the proxy world exists: ```js-const GRAD_KEY = 'adom-dash-graduation'; // {launches: n, aiDriven: bool, dismissed: {say: bool, start: bool}}+const GRAD_KEY = '<slug>:dash-graduation'; // e.g. 'adom-lbr:dash-graduation' - ALWAYS namespaced // {launches: n, aiDriven: bool, dismissed: {say: bool, start: bool}} function gradState() { try { return JSON.parse(localStorage.getItem(GRAD_KEY)) ?? {} } catch { return {} } } function gradSave(patch) { try { localStorage.setItem(GRAD_KEY, JSON.stringify({ ...gradState(), ...patch })) } catch {} } ```
skills/say-strip/SKILL.md+14@@ -102,6 +102,20 @@ The toast is the standard toasts-skill toast: success green, bottom center, ~4s. string is EXACTLY `Copied to clipboard. Paste it into any AI thread.` - fleet-wide, so the behavior reads as one product. +## ⛔ PARKED (2026-08-24, second half of the day): the send path crashed the panel++The first live test of the success path (kicad 3.0.0's /api/say-send on ConfRoomROG)+CRASHED the Hydrogen shell: the historical run-prompt kill, not covered by the gate fix.+Until the ah build thread certifies the panel fix and the un-park is broadcast:++- Keep the two-button UI exactly as specced.+- `/api/say-send` short-circuits to `{ok:false, parked:true, why:"..."}` BEFORE any+ control-API call (zero /ai-threads traffic while parked).+- The button's failure path carries users: honest error toast + the phrase copied.+- Keep the real implementation dormant behind one flag so un-park is a backend flip.++The section below is the contract that resumes on the un-park broadcast.+ ## Send to AI: the server side The page never talks to the panel directly; its backend does, via the workspace control