docks-kit 0.16.12 → 0.16.14

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/AGENTS.md CHANGED
@@ -101,7 +101,7 @@ For per-tool SoT layouts (`SoT/.claude/`, `SoT/.codex/`, `SoT/.omp/`), see the m
101
101
 
102
102
  - No secrets in SoT. The kit's SoT directories are committed; treat them as declarative config only.
103
103
  - Treat external plugin marketplaces and installer downloads as untrusted input. Prefer download-then-run over `curl … | bash` so a truncated stream cannot execute a partial script.
104
- - **Pin, never float.** Every kit-driven install of third-party software is pinned to a `SoT/toolchain.json` `verified` version — no `@latest` npm/bun installs (Shai-Hulud-class worm surface), no mutable action tags in workflows (commit SHAs only), installer scripts fetched from version tags where upstream supports it. New third-party install surface ⇒ manifest pin first. Details: the `toolchain-context` skill and `cli/docs/toolchain.md`.
104
+ - **Pin, never float.** Every kit-driven install of third-party software is pinned to a `SoT/toolchain.json` `verified` version — no `@latest` npm/bun installs (Shai-Hulud-class worm surface), no mutable action tags in workflows (commit SHAs only), installer scripts fetched from version tags where upstream supports it. New third-party install surface ⇒ manifest pin first. The rule also covers a transitive dependency whose declared range is a caret or tilde over a prerelease: `^4.0.0-rc.109` admits every later prerelease of the same version tuple, and a published install resolves that range fresh because `bun.lock` is not packaged, so a runtime pinned in `package.json` meets a newer sibling and the process fails at startup. The fix is an exact root pin plus both guards: the offline `cli/test/unit/dependencyPins.test.ts` and the clean-room `bun run smoke:package`. Details: the `toolchain-context` skill and `cli/docs/toolchain.md`.
105
105
  - **One exemption: the kit's own package.** `install.sh` and `install.ps1` end with `bun add -g docks-kit@latest`, because a global installer that pinned itself would install a fixed old kit forever, and pinning it to `package.json` would request an unpublished version between the release-prep commit and the npm publish. The exemption covers `docks-kit` alone. Both installers still pin the Bun installer they download to the manifest's verified version, and `cli/test/unit/install.test.ts` asserts that pin in all four launcher and installer scripts.
106
106
  ## Testing
107
107
 
@@ -39,17 +39,13 @@ untrusted` reports zero untrusted dependencies with scripts. Neither
39
39
  one package with an `install` script, `msgpackr-extract` by way of
40
40
  `effect > msgpackr`, and Bun raises no trust prompt for it.
41
41
 
42
- The install does print one expected warning:
43
-
44
- ```
45
- warn: incorrect peer dependency "effect@4.0.0-rc.109"
46
- ```
47
-
48
- `@effect/platform-bun` resolves `@effect/platform-node-shared` through a caret
49
- range, which installs rc.111, and that release declares a peer requirement of
50
- `effect@^4.0.0-rc.111`. The kit pins `effect@4.0.0-rc.109` deliberately, so this
51
- newer transitive peer range cannot be satisfied. `docks-kit --version`, model
52
- catalogs, toolchain checks, and real sync are unaffected.
42
+ The install prints no peer dependency warning. The root pins
43
+ `@effect/platform-node-shared` at `4.0.0-rc.109`, the same release as the
44
+ pinned `effect`, so a fresh registry resolution installs exactly one copy of
45
+ each and the transitive peer range `effect@^4.0.0-rc.109` is satisfied. Without
46
+ that root pin, `@effect/platform-bun` requests the shared package through a
47
+ caret range over a prerelease and a fresh install can pair a newer shared
48
+ package with the pinned `effect`.
53
49
 
54
50
  ## 3. curl installer (POSIX)
55
51
 
@@ -113,6 +109,40 @@ the launcher bypasses that now-stale binary and uses updated source until rebuil
113
109
  Every `docks-kit sync` also does a best-effort behind-upstream check and
114
110
  nudges when the checkout is stale (silent offline / detached / no git).
115
111
 
112
+ ## Recovering a broken global install
113
+
114
+ A global install made before the `@effect/platform-node-shared` pin can fail at
115
+ startup with `Cannot find module 'effect/ByteSize'` or another missing
116
+ `effect/...` module. Repair it with a remove followed by a fresh add:
117
+
118
+ ```
119
+ bun rm -g docks-kit && bun add -g docks-kit@latest
120
+ ```
121
+
122
+ A plain reinstall over the broken tree is not enough. Bun keeps the previously
123
+ resolved copy nested under
124
+ `node_modules/@effect/platform-bun/node_modules/@effect/platform-node-shared`,
125
+ and that stale copy still loads.
126
+
127
+ If a plain reinstall was already attempted, the remove-then-add above no longer
128
+ clears that nested copy either. Force a full re-resolve of the global tree:
129
+
130
+ ```
131
+ bun rm -g docks-kit && bun add -g docks-kit@latest --force
132
+ ```
133
+
134
+ `--force` without the remove does not repair it. Other global packages survive
135
+ both sequences.
136
+
137
+ An npm global install repairs itself with a plain upgrade, because npm rebuilds
138
+ the tree it owns:
139
+
140
+ ```
141
+ npm install -g docks-kit@latest
142
+ ```
143
+
144
+ Verified on Bun 1.4.2 and npm 11, each in a clean HOME.
145
+
116
146
  ## No-Bun recovery
117
147
 
118
148
  No Bun or constrained sandbox: download the platform release binary from GitHub
@@ -1,7 +1,7 @@
1
1
  // Generated by cli/scripts/generate-sot-payload.ts. DO NOT EDIT.
2
2
  // Edit SoT/, notification.mp3, or package.json, then run: bun cli/scripts/generate-sot-payload.ts
3
3
 
4
- export const GENERATED_PACKAGE_VERSION = "0.16.12"
4
+ export const GENERATED_PACKAGE_VERSION = "0.16.14"
5
5
 
6
6
  export const GENERATED_PAYLOAD_TEXT = {
7
7
  "SoT/.agents/skills.txt": "# Universal AI-agent skill manifest intentionally empty.\n# Global skill discovery is opt-in: add one <owner>/<repo> slug per line.\n# EngineNative ignores comments and blank lines.\n",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "docks-kit",
3
- "version": "0.16.12",
3
+ "version": "0.16.14",
4
4
  "description": "Portable AI coding agent config kit — SoT sync engine + typed CLI for Claude Code, Codex, and universal agent skills",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -29,6 +29,7 @@
29
29
  "typecheck": "tsc --noEmit -p cli",
30
30
  "build:binaries": "bash cli/build-binaries.sh",
31
31
  "smoke:native": "bun cli/scripts/native-smoke.ts",
32
+ "smoke:package": "bun cli/scripts/package-smoke.ts",
32
33
  "check:generated": "bun cli/scripts/generate-sot-payload.ts --check",
33
34
  "prepack": "bun run check:generated",
34
35
  "golden:dryrun": "bun cli/test/golden-dryrun.ts",
@@ -40,6 +41,7 @@
40
41
  },
41
42
  "dependencies": {
42
43
  "@effect/platform-bun": "4.0.0-rc.109",
44
+ "@effect/platform-node-shared": "4.0.0-rc.109",
43
45
  "effect": "4.0.0-rc.109",
44
46
  "yaml": "2.9.0"
45
47
  },