← Commit history

2.22.0 (doc only, module unchanged at 2.20.1): a catch-all route answers three checks instead of failing them; grep the entities too; the shot-webview slug is the wrapper's

John Lauer ·40497737c1 ·1mo ago ·parent e31cebe
3 files changed +39−1
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "adom-ui-design",-  "version": "2.21.1",+  "version": "2.22.0",   "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-screenshot/SKILL.md+6
@@ -63,6 +63,12 @@ if (!t) return 'NOTAB'; if (!t.classList.contains('active')) t.click(); ``` +**⛔ `--slug` IS A SUBSTRING OF THE DOCK-LAUNCH WRAPPER's src, NOT YOUR PORT AND NOT YOUR URL.**+The wrapper is `dock-launch.html?slug=dock-<your-dock-slug>-<stamp>`, so nb's is+`dock-adom-nb-bridge`. nb lost a call guessing its port number. **Free sanity check: the only+dock iframe with a non-zero width is the ACTIVE one**, which confirms you activated the right+tab at the same time as it confirms the slug.+ **2. READ YOUR IFRAME'S RECT FROM THE SHELL TARGET**, not from inside your own page. Your page does not know where it sits in the window, and `window.frameElement` is cross-origin. 
skills/newbie-panel/SKILL.md+32
@@ -708,6 +708,38 @@ the asset stood still. **When both move together, a version match is luck rather correctness, and the sweep passes for the wrong reason.** A check that can pass for the wrong reason has not been shown to work; it has been shown not to have complained yet. +### ⛔ A CATCH-ALL ROUTE MAKES THREE DIFFERENT CHECKS PASS FOR THE WRONG REASON++**Test it in one line:**++```sh+curl -o /dev/null -w '%{http_code}' <your base>/nonsense     # 404 expected. 200 means read on.+```++nb served `page()` for every unmatched path. Three consequences, and it had a clean pass on all+three before it looked:++1. **The 404 watch on a virgin install could never fire.** A missing settings PNG, demo mp3 or+   favicon came back as HTML 200 instead of 404 — and the launch-console 404 watch is the ONE+   thing watched on a fresh install.+2. **`proxy-fidelity` row 3 passed wrongly.** It asserts "not upstream's 418"; a catch-all+   returns 200, which is not 418, so a blanket-proxy check passed on an app that was blanket+   -serving.+3. **`checkSend`'s "send route wired" row passed wrongly**, and this only surfaced once #1 was+   fixed. The module probes with **OPTIONS**; nb's route matched **POST only**, so the+   catch-all was answering the probe with HTML 200. With unmatched paths 404ing, the row went+   red and honest. **If your dashboard proxies those two routes and matches POST only, your+   green on that row is your catch-all, not your route.** Answer a real CORS preflight (204).++This is kicad's "passes for the wrong reason" arriving three times in one app, hours after it+was named. **A permissive default does not fail your checks; it answers them.**++### ⛔ GREP THE ENTITIES TOO++nb's Layer 2 heading carried an em-dash written as `&mdash;`, so it **survived every plain-text+grep for the character** while rendering as one on screen. If you sweep for a forbidden+character, sweep for its HTML entity and its escape forms as well.+ ### ⛔ TEST A FIX BY REPRODUCING THE FAILURE, NOT BY READING THE DIFF  kicad verified the `rows: []` fix by **hiding the panel and making the same naive