@noy-db/hub 0.7.0-pre.17 → 0.7.0-pre.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/package.json +4 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,78 @@
1
1
  # Changelog — hub
2
2
 
3
+ ## 0.7.0-pre.18
4
+
5
+ ### Patch Changes
6
+
7
+ - Two dependency-declaration defects, both invisible to every gate because both
8
+ were satisfied by something that never promised anything.
9
+
10
+ **`happy-dom` was used by 22 packages and declared by 4.** The `as-*`, `on-*`
11
+ and `by-*` families named it in their vitest `environment:` and never declared
12
+ it; it resolved only because `in-react`, `in-pinia`, `in-nuxt` and
13
+ `to-browser-idb` happened to declare it — at **three different majors**
14
+ (`^15.11.7`, `^17.4.4`, `^18.0.0`). So those suites ran against whichever
15
+ version won hoisting, pinned by nothing, and a devDependency bump in an
16
+ unrelated package could have silently changed the DOM implementation under
17
+ them. Every user now declares it, all at one range.
18
+
19
+ ⚠️ It is named by no `import` anywhere — only by a vitest config string, or (in
20
+ hub's case) by an `@vitest-environment` DOCBLOCK PRAGMA, which is invisible to
21
+ an import scan and a config grep alike. Found by extracting a family and
22
+ watching it fail to stand alone.
23
+
24
+ ⛔ **Declaring it does NOT make the mistake self-detecting, and a sweep alone
25
+ would have implied otherwise.** pnpm's virtual store still satisfies an
26
+ undeclared package from a sibling that declares it — deleting a declaration and
27
+ reinstalling leaves the suite green, including the test that needs the
28
+ environment. So correct manifests today prevent nothing tomorrow. A static
29
+ check (`pnpm check:test-env-deps`, wired into CI) is the part that enforces it;
30
+ the manifests are merely honest. (`require.resolve` reports the opposite —
31
+ Node's algorithm is not pnpm's store, so the probe has to read manifests rather
32
+ than resolve.)
33
+
34
+ **Sibling `peerDependencies` published as EXACT versions**, completing the fix
35
+ started in #1228. That issue converted the `hub` peer to `workspace:^` (which
36
+ publishes as a caret) and left sibling peers at `workspace:*` (which publishes
37
+ as an exact pin), so two satellites from different cuts were mutually
38
+ uninstallable by name. Install-proven with a discriminating control:
39
+
40
+ ```
41
+ as-xlsx@pre.17 + as-zip@pre.16 -> exit 1 the defect
42
+ as-xlsx@pre.17 + as-zip@pre.17 -> exit 0 control: it is the SKEW, not the pair
43
+ as-csv@pre.17 + in-vue@pre.16 -> exit 0 caret peers DO cross cuts
44
+ ```
45
+
46
+ Nine sibling edges across seven packages move `workspace:*` → `workspace:^`.
47
+ That changes the FORM without changing the KIND: they stay peers, so a consumer
48
+ still controls instance identity, and no per-pair judgement about whether
49
+ deduplication matters was required.
50
+
51
+ Already-published versions stay broken — an exact peer is frozen in a published
52
+ manifest. What this buys is that the next cut is not broken too.
53
+
54
+ - `check:test-env-deps` now catches OVER-declaration too, and one live instance is
55
+ removed.
56
+
57
+ The guard shipped with the previous fix caught only the missing direction — a
58
+ package running tests in an environment it does not declare. The mirror case
59
+ turns out to be the mechanism the whole class rests on: **a package that
60
+ declares an environment it never runs in is what silently satisfies the packages
61
+ that use it and do not declare it.** The over-declaration is what makes the
62
+ under-declaration invisible.
63
+
64
+ `to-browser-idb` carried exactly that — `happy-dom ^18.0.0` while running
65
+ `environment: 'node'` with a fake-indexeddb polyfill. It was plausibly the
66
+ declarer supplying 18.x to the nine `as-*` suites that named the environment and
67
+ declared nothing. Removed; every genuine user now declares its own.
68
+
69
+ Added after the same mistake was made twice in one day: a substring scan gave
70
+ `by-peer` a declaration for a mention in a COMMENT, and this predated all of it.
71
+
72
+ Mutation-checked in both directions — a package that genuinely uses the
73
+ environment keeps its declaration without firing (no false positive on
74
+ legitimate declarers), and restoring the phantom fails the check.
75
+
3
76
  ## 0.7.0-pre.17
4
77
 
5
78
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noy-db/hub",
3
- "version": "0.7.0-pre.17",
3
+ "version": "0.7.0-pre.18",
4
4
  "description": "Zero-knowledge, offline-first, encrypted document store — core library with AES-256-GCM, PBKDF2, multi-user keyring, and sync engine",
5
5
  "license": "MIT",
6
6
  "author": "vLannaAi <vicio@lanna.ai>",
@@ -233,14 +233,15 @@
233
233
  "node": ">=22.0.0"
234
234
  },
235
235
  "dependencies": {
236
- "@noy-db/attestation": "0.7.0-pre.17"
236
+ "@noy-db/attestation": "0.7.0-pre.18"
237
237
  },
238
238
  "devDependencies": {
239
239
  "@types/node": "^22.0.0",
240
240
  "esbuild": "^0.25.0",
241
+ "happy-dom": "^18.0.0",
241
242
  "zod": "^4.0.0",
242
243
  "zod-to-json-schema": "^3.25.2",
243
- "@noy-db/on-shamir": "0.7.0-pre.17"
244
+ "@noy-db/on-shamir": "0.7.0-pre.18"
244
245
  },
245
246
  "peerDependencies": {
246
247
  "zod": "^3.0.0 || ^4.0.0",