← Commit history

2.1.2: module version decoupled from pack version so doc-only releases stop churning its bytes; a pre-check on a different dpr is a diagnosis not a proof

John Lauer ·6be50605af ·1mo ago ·parent 985cdff
3 files changed +38−4
assets/module/newbie-panel.js+1−1
@@ -428,6 +428,6 @@     return { ok: ok, rows: rows };   } -  root.AdomNewbiePanel = { mount: mount, toast: toast, selfCheck: selfCheck, version: '2.1.1',+  root.AdomNewbiePanel = { mount: mount, toast: toast, selfCheck: selfCheck, version: '2.1.2',                            TWO_COL_MIN: TWO_COL_MIN, PHRASE_BUDGET: PHRASE_BUDGET }; })(typeof window !== 'undefined' ? window : this);
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "adom-ui-design",-  "version": "2.1.1",+  "version": "2.1.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/newbie-panel/SKILL.md+36−2
@@ -140,8 +140,14 @@ grep -c 'root.AdomNewbiePanel' <that file>       # and it is the IMPLEMENTATION the served file (a truncated or mis-escaped 100KB file satisfies every grep and then throws at the script tag) and publish the module's `sha256sum` with the release, so the next verifier compares bytes rather than counts. The module also self-reports-`AdomNewbiePanel.version`, which is generated from the pack version at build time and cannot-drift from it: that is the string to quote when pasting selfCheck output.+`AdomNewbiePanel.version`, and that is the string to quote when pasting selfCheck output.++**It is the MODULE's version, not the pack's, and they move independently on purpose.** The+first design tracked the pack version, which meant a documentation-only release changed the+module's bytes, invalidated every app's published hash, and asked six apps to re-pull and+re-verify a file that had not functionally changed. So: **if the module's sha256 is unchanged+between two pack versions, the release is documentation and you do not need to re-pull.** The+release note says which it is.  Version sizes are a second, cheap check: 2.0.1 was 120202 bytes and 2.0.2 was 192654. A release that claims to add a 100KB module and does not grow is not carrying it. Deprecate the@@ -177,6 +183,34 @@ Deleting your hand-rolled panel is the part that breaks pages, not mounting the    happened to be right while the install path was broken. `curl` your own route back and    compare its sha256 to the pack's. +### ⛔ A PRE-CHECK ON YOUR OWN MACHINE IS A DIAGNOSIS, NOT THE PROOF++Run selfCheck wherever you like while you work. It only counts from **inside ah, on the+machine the fleet is reviewed on.** The reason is not ceremony, and kicad supplied the clean+example: its pre-check ran at **dpr 2 and returned ok:true**, so the border-width bug that+failed correct panels **at dpr 1.5 specifically** could not appear there. On John's laptop the+same panel would have failed, and kicad would have gone hunting through its own CSS for a+fault that was in the checker.++**A machine that differs from the target in ANY of the ways a bug can depend on will+confidently pass code that fails there.** Device pixel ratio is the one that bit us; pane+width, installed fonts, and the browser engine are the others in this fleet. So report a+pre-check as your diagnosis, name the machine and its dpr, and do not call it conformance.++### Publish the hash with every module release++kicad checked all four of the release claims rather than trusting them (bytes, sha256,+self-reported version, `node --check`) and confirmed the installed copy is byte-identical to+what was published. Its verdict is the reason to keep doing it: **publishing the hash turns+"did the module actually reach the app" from a guess into one command.**++### If you kept your own graduation logic, check you are not driving the toggle from both sides++The module now owns the open/closed memory. An app that kept its own graduation policy is+driving the same state from two places, which is what `onToggle(open, source)` exists to make+visible. The simplest safe position, and kicad's: **do not pass `onToggle` at all** unless you+genuinely need to react to it, and then branch on `source`.+ ### Prove it in one call  ```js