@twinsearth/w2m-dsh-plugin 1.0.14 → 1.0.15

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
@@ -2,6 +2,58 @@
2
2
 
3
3
  All notable changes to this project are documented here.
4
4
 
5
+ ## [1.0.15] — 2026-10-17
6
+
7
+ **Every 1.0.x GitHub release was missing its `SHA256SUMS` asset, so updating from GitHub could not be verified and
8
+ would be refused. That is fixed, along with the two tests that were failing on Linux CI.**
9
+
10
+ ### The product defect: un-updatable releases
11
+
12
+ `src/plugin/update-source.mjs` refuses to offer an update without a checksum asset:
13
+
14
+ > `no SHA256SUMS asset for ${tag}; cannot verify a download without it`
15
+
16
+ The 0.x releases carry **two** assets (tarball + sums). **When the 1.0 line was cut, the release script uploaded only the
17
+ tarball** -- so every 1.0.x release looked complete and was, in fact, **un-updatable from GitHub**. Nothing local could
18
+ have caught it: the tarball was present and correct, and only a job that calls the real API noticed.
19
+
20
+ Fixed in three places:
21
+
22
+ * `scripts/github-release.mjs` now derives the sums from the same bytes it uploads and attaches `SHA256SUMS` in the
23
+ same run, **and reads back the asset list** so a missing sums file is a release failure rather than a warning;
24
+ * the asset has been backfilled on **all fourteen** 1.0.x releases (v1.0.1 … v1.0.14), each checksum computed from the
25
+ bytes GitHub actually serves;
26
+ * the live-API test in `test/update-source.test.mjs` now passes -- it was the only thing that ever reported this.
27
+
28
+ ### Two tests that failed only on Linux CI
29
+
30
+ Both were invisible on Windows, and both were **the test's** fault, not the code's:
31
+
32
+ **`test/vision.test.mjs`** created its settings fixture with the default umask, which is `0644` on Linux. The loader
33
+ correctly refuses a file that holds a key and is group-readable, so the test got *"mode 644"* instead of the message it
34
+ asserted. **The fixture should be 0600; the guard was right.**
35
+
36
+ **`test/chatops-bridge.test.mjs`** faked its timer with a real `setTimeout`. The broker calls `record.timer.unref()`,
37
+ so during the await the only pending handle is an **unref'd** timeout -- which does not keep the event loop alive. On
38
+ Linux the loop drained before it fired and node reported
39
+ `cancelledByParent: Promise resolution is still pending but the event loop has already resolved`. **It passed on Windows
40
+ by accident of scheduling.** The timer is now deterministic: the callback is captured and fired explicitly.
41
+
42
+ ### Release titles are version numbers
43
+
44
+ The repository home page sidebar renders the latest release's **name**, and the name was the commit subject:
45
+
46
+ > `test(merge): verify merging while a third machine publishes -- never tears, …`
47
+
48
+ -- where a reader looking for "which version is current?" expects `v1.0.14`. The title is now the tag; **the commit
49
+ subject moved to the first line of the body**, so nothing is lost and the one slot that names the release names the
50
+ version. All fourteen 1.0.x releases were renamed to match.
51
+
52
+ ### Verified
53
+
54
+ Full suite **2380 tests in 93 files, 2366 pass, 0 fail, 14 skip**; pre-flight **GREEN, 15 of 15 checks**.
55
+ `test/update-source.test.mjs` (which makes a real GitHub API call) passes: **50 tests, 49 pass, 0 fail**.
56
+
5
57
  ## [1.0.14] — 2026-10-17
6
58
 
7
59
  **Merging while a third machine publishes is verified: it never tears, never writes, and names its failures.**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twinsearth/w2m-dsh-plugin",
3
- "version": "1.0.14",
3
+ "version": "1.0.15",
4
4
  "description": "Run one project across your own Windows and macOS machines from a single DeepSeek account, through 11 w2m_* tools. Four coordination modes (replicate, split, broadcast, pipeline) and six aggregate verdicts (consistent, divergent, divergent-platform, failed, partial, unverifiable). P2P hole punching by default, with a bundled relay, STUN responder and ledger fallback, so the fleet needs no third-party service. Joining needs a pairing code plus autoStartAgent: true; installing alone does not join.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
package/plugin.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "twinsearth-w2m-dsh",
4
- "version": "1.0.14",
4
+ "version": "1.0.15",
5
5
  "description": "Run one project across your own Windows and macOS machines from a single DeepSeek account, through 11 w2m_* tools. Four coordination modes (replicate, split, broadcast, pipeline) and six aggregate verdicts (consistent, divergent, divergent-platform, failed, partial, unverifiable). P2P hole punching by default, with a bundled relay, STUN responder and ledger fallback, so the fleet needs no third-party service. Joining needs a pairing code plus autoStartAgent: true; installing alone does not join.",
6
6
  "license": "MIT",
7
7
  "keywords": [
@@ -211,7 +211,7 @@ const MAX_STAGES = 16;
211
211
  * `package.json` during `scripts/pack.mjs` rather than hand-maintained, and `W2M_PLUGIN_VERSION`
212
212
  * overrides it at runtime for tests and packagers.
213
213
  */
214
- const PLUGIN_VERSION = '1.0.14';
214
+ const PLUGIN_VERSION = '1.0.15';
215
215
 
216
216
  /** How long any single HTTP call may take before it is aborted, in milliseconds. */
217
217
  const DEFAULT_REQUEST_TIMEOUT_MS = 15_000;