docks-kit 0.16.11 → 0.16.13

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
 
package/README.md CHANGED
@@ -79,7 +79,7 @@ into core, and the standalone platform package was unused here.
79
79
  | `--claude-plugin=<name>` | Sticky opt-in plugin (supabase, n8n) |
80
80
  | `--codex-model=<m>` | Deploy-time modifier: deployed Codex model |
81
81
  | `--skip-bubblewrap` | Skip optional bubblewrap bootstrap (Codex Linux sandbox) |
82
- | `--skip-plugin-refresh` | Install missing plugins but skip refresh-only updates (used automatically by `docks-kit update`) |
82
+ | `--skip-plugin-refresh` | Install missing plugins but skip refresh-only updates |
83
83
 
84
84
  **Deploy-time modifiers** change deployed config only — the SoT is untouched
85
85
  and a later flag-less sync reverts them. Full reference: `docks-kit docs flags`
@@ -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,21 @@ 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. Verified on Bun 1.4.2.
126
+
116
127
  ## No-Bun recovery
117
128
 
118
129
  No Bun or constrained sandbox: download the platform release binary from GitHub
@@ -168,9 +168,9 @@ export async function syncPlugins(ctx: Ctx, claudeDir: string): Promise<void> {
168
168
  if (separator > 0) kitMarketplaces.add(pluginId.slice(separator + 1))
169
169
  }
170
170
 
171
- // Pass 3 — refresh the kit-owned marketplaces unless the update command
172
- // selected its install-missing-only fast path. Pass 2 already refreshed the
173
- // source marketplace of every plugin it installed, so skip those: a second
171
+ // Pass 3 — refresh the kit-owned marketplaces unless the caller passed
172
+ // --skip-plugin-refresh by hand. Pass 2 already refreshed the source
173
+ // marketplace of every plugin it installed, so skip those: a second
174
174
  // fetch seconds later cannot resolve a newer snapshot, and re-running it
175
175
  // would duplicate one failure in the ledger and in the failed-operation count.
176
176
  if (!ctx.skipPluginRefresh) {
@@ -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.11"
4
+ export const GENERATED_PACKAGE_VERSION = "0.16.13"
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.11",
3
+ "version": "0.16.13",
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
  },