@twinsearth/w2m-dsh-plugin 0.10.2 → 0.10.3

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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,33 @@ All notable changes to this project are documented here. The format follows
4
4
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
5
5
  adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.10.3] — 2026-10-15
8
+
9
+ **Fix: the macOS health check walked a user's home directory, and timed out instead of reporting.**
10
+
11
+ Found on a real machine, not by reading the code.
12
+
13
+ `sample()` on macOS was scanning `/Users` for files that grow. On a developer machine that is hundreds of
14
+ thousands of files, and the symptom was not "slow" but **total failure**: the health suite exceeded the
15
+ fleet's own ~50-second lease ceiling and the task expired with `exit_code: null` and no result at all.
16
+
17
+ A monitoring tool that times out because it is too expensive to monitor is worse than no monitoring,
18
+ because **the timeout looks like a machine problem**. The contrast that identified it, measured on the same
19
+ host minutes apart:
20
+
21
+ | Command | Time | Result |
22
+ |---|---|---|
23
+ | `node -e "process.exit(1)"` | 8 s | `exit_code: 1` — the machinery was fine |
24
+ | `health.test.mjs` (before) | > 50 s | expired, no result |
25
+ | the same suite (authoring host) | 280 ms | pass |
26
+
27
+ `/Users` is replaced by `/Library/Logs`, which is where an unbounded system writer actually writes. The rule
28
+ this file already stated — that a health check must not be a load source — was written in the module header
29
+ while the path list violated it, which is the useful part of the lesson: the principle was written down and
30
+ still not applied to the one line that needed it.
31
+
32
+ Sampling now costs 53 ms. 20 tests, 0 failures.
33
+
7
34
  ## [0.10.2] — 2026-10-15
8
35
 
9
36
  **Tiered storage — temporary, compressed, permanent, and the two kinds of knowledge that persist forever.**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twinsearth/w2m-dsh-plugin",
3
- "version": "0.10.2",
3
+ "version": "0.10.3",
4
4
  "description": "DSH: Windows2MacOS — drive the same project on online Windows and macOS machines from one DeepSeek account, across networks and regions. P2P hole punching is the default path (relay + shared server as rendezvous, ledger and fallback), with a bundled STUN responder, Tailscale/public-VPS/tunnel shapes, Rabbit relay + per-machine Localside + eight DSH tools (replicate / split), nine aggregate verdicts and signed requests.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -48,13 +48,20 @@ export const LOG_GROWTH_WARN_BYTES_PER_DAY = 1 * GB;
48
48
  /**
49
49
  * Which paths are worth checking for growth, by platform.
50
50
  *
51
- * Deliberately short. A health check that walks a whole filesystem is itself a load source, and the
52
- * incident was caused by *two* files rather than by a general untidiness — so the check names the places
53
- * where an unbounded writer has actually been observed.
51
+ * Deliberately short, and deliberately **not including a user's home directory**.
52
+ *
53
+ * A health check that walks a whole filesystem is itself a load source, and this list got that wrong on the
54
+ * first attempt: macOS was given `/Users`, and on a developer machine that is hundreds of thousands of files.
55
+ * The symptom appeared on a real machine as a health check that **exceeded the fleet's own ~50-second lease
56
+ * ceiling** and expired with no result at all — a monitoring tool timing out because it was too expensive to
57
+ * monitor. On the machine that wrote it, the same suite runs in 280 ms.
58
+ *
59
+ * So each entry is a place where an unbounded writer has actually been observed, which is what the 14.7
60
+ * GB/day incident was: two files in `/var/log`, not a general untidiness.
54
61
  */
55
62
  export const LOG_PATHS = Object.freeze({
56
63
  linux: ['/var/log', '/var/lib/w2m', '/tmp'],
57
- darwin: ['/var/log', '/tmp', '/Users'],
64
+ darwin: ['/var/log', '/Library/Logs', '/tmp'],
58
65
  win32: ['C:\\Windows\\Logs', 'C:\\Windows\\Temp'],
59
66
  });
60
67
 
@@ -185,7 +185,7 @@ const MAX_STAGES = 16;
185
185
  * `package.json` during `scripts/pack.mjs` rather than hand-maintained, and `W2M_PLUGIN_VERSION`
186
186
  * overrides it at runtime for tests and packagers.
187
187
  */
188
- const PLUGIN_VERSION = '0.10.2';
188
+ const PLUGIN_VERSION = '0.10.3';
189
189
 
190
190
  /** How long any single HTTP call may take before it is aborted, in milliseconds. */
191
191
  const DEFAULT_REQUEST_TIMEOUT_MS = 15_000;