← Commit history

1.12.1: the slug namespace provides isolation, not the origin (that claim was false); the server emits the pill's short state

John Lauer ·4f37a5f555 ·1mo ago ·parent c9b6301
3 files changed +20−5
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "adom-ui-design",-  "version": "1.12.0",+  "version": "1.12.1",   "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/newbie-graduation/SKILL.md+13−4
@@ -51,10 +51,19 @@ else folds at 3 launches, it folds at 5, or on dismissal/AI-driven-action).  ## Storage -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:+localStorage, no server, no sync. **The slug namespace is what provides isolation, not the+origin.** Do not believe the comforting story that a per-port origin keeps apps apart; it is+false twice over:++1. **Ports are assigned fresh on every serve**, so per-port state would be LOST on every+   restart and the panel would silently un-graduate itself.+2. **A proxied dashboard shares ONE origin with every other app.** Dumped live on+   2026-08-24, a single dashboard's localStorage held `adom-lbr:dash-graduation`,+   `adom-dash-graduation`, `kdTarget`, `kdBusySince`, `fdTarget` and `psSettings` beside its+   own keys. Un-namespaced keys DO collide (a sibling's aiDriven flag once landed in+   adom-lbr's state).++So namespace every key with your app slug, always:  ```js const GRAD_KEY = '<slug>:dash-graduation';   // e.g. 'adom-lbr:dash-graduation' - ALWAYS namespaced   // {launches: n, aiDriven: bool, dismissed: {say: bool, start: bool}}
skills/status-leds/SKILL.md+6
@@ -27,6 +27,12 @@ every dashboard says it the same way: one compact pill row, directly under the s ```  - One pill per subsystem: LED dot, label, and a 1-4 word state. Nothing else visible.+- **The SERVER emits that short state as its own field; the page NEVER truncates a+  sentence to produce it.** Slicing prose gives you mid-word cuts like "no pup windows open+  right" or "in talled and pinned", and every app that derives its pill text from its detail+  text ships that bug eventually (two did on 2026-08-24). Send both: a short `state`+  (`installed`, `answering`, `1 open`, `adom-you`) for the pill, and the full prose for the+  tap-to-expand detail. - LED colors from tokens ONLY: `--led-green` healthy, `--led-amber` busy or degraded,   `--led-red` broken. Gray = unknown or not yet probed. Brand colors never carry health. - The row wraps on narrow screens; it never becomes a grid of cards.