← Commit history

1.9.2: say-send PARKED after live crash; namespaced graduation keys; target chip this-machine fallback; one-X panel dismiss

John Lauer ·4c9fe2d1c6 ·1mo ago ·parent 5df2db7
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