packages: - '.' # The control plane. Its own package because it is its own service with its # own database, and because nothing in the daemon may ever import from it — # the dependency runs one way, at enrollment, over HTTP. - 'packages/*' # **The native shell is a directory under `packages/` and deliberately not a # member of this workspace**, which is a stranger shape than it looks and is # three measurements rather than a preference. # # `deploy/bootstrap.sh` and `deploy/deploy.sh` both run `pnpm install # --frozen-lockfile` at the repository root, **unfiltered**, on every machine # in the fleet — and `deploy.sh`'s `INSTALL_DEPS` matches # `^packages/[^/]+/package\.json$`, so a native-only edit re-runs it. As a # member, `@tauri-apps/cli` and the one platform binary pnpm picks for the host # would install on every daemon host, to be run by none of them. That is # Q4.114's argument again at a smaller number, and it has the same answer. # # Second: `deploy.sh`'s `RELAY_INPUTS` matches `^pnpm-lock\.yaml$`, because the # lockfile decides which `tsx` the relay runs. A member writes that file on # every Tauri bump, so **every tunnel in the fleet would drop** for a change no # relay contains. Out of the workspace, the root lockfile never moves for it. # # Third: the build context for the control plane's image is deny-first, and # `deploy/docker/Dockerfile`'s `--frozen-lockfile` verifies the lockfile against # *every* importer before installing the filtered subset. A member would be an # importer the context cannot see, and the image would stop building — caught # only by `imagecheck`, which is a separate CI job needing docker. # # The cost is stated rather than hidden: `packages/native` has its own # `node_modules` and its own lockfile, `pnpm install` at the root does not # install it, and `pnpm --filter @reemoat/native` does not resolve — the root # scripts say `pnpm --dir packages/native` instead. `pnpm nativecheck` asserts # this exclusion is still here, because deleting one line quietly undoes all # three. - '!packages/native' allowBuilds: # esbuild's install script links its prebuilt platform binary; tsx needs it. esbuild: true # `opencode-ai` used to sit here too, its postinstall allowed so that the # platform binary its shim re-execs was linked. It is no longer a dependency at # all (Q4.114) — and ⚠ a `pnpm install` that meets a package with a build script # and no verdict here writes `: set this to true or false` into this list # by itself, which is how a placeholder for a package that had just been removed # came to ship in a draft of this change. `pincheck` reads this list now. # **The coding-agent CLIs are not installed by `pnpm install`, and these lines are # what keeps them out.** Two adapters this repository pins bring a CLI with them # as *optional* platform packages — `@anthropic-ai/claude-agent-sdk` under # `claude-agent-acp`, the `@openai/codex` shim under `codex-acp` — one build per # OS and architecture, of which pnpm installs the one that matches. Measured on # this repository's own darwin-arm64 checkout: 245 MB and 307 MB, 552 MB of a # 907 MB `node_modules`, for two programs `deploy/agents.sh` installs anyway with # each vendor's own installer and keeps current from there. The pinned copy was # exactly as old as the release and never the one that ran once a vendor's copy # was on the machine, so it bought nothing but the download (Q4.114). # # `-` removes a dependency; the adapters still resolve, and each is told where its # CLI is by `CLAUDE_CODE_EXECUTABLE` / `CODEX_PATH`, which `LocalRuntime.launch` # writes on every spawn from the copy `deploy/agents.sh` installed. A machine that # cannot reach the vendors' hosts installs the same four from the npm registry # instead — `REEMOAT_AGENT_SOURCE=npm`, in `.env.example` — never from here. # # **One line per platform package, and `pnpm pincheck` asserts the list is exactly # what the installed adapters declare**: a platform the vendor adds is a package # that would ride back in with every check green, and a line left over after one # is dropped is a pin on nothing. overrides: '@anthropic-ai/claude-agent-sdk-darwin-arm64': '-' '@anthropic-ai/claude-agent-sdk-darwin-x64': '-' '@anthropic-ai/claude-agent-sdk-linux-arm64': '-' '@anthropic-ai/claude-agent-sdk-linux-arm64-musl': '-' '@anthropic-ai/claude-agent-sdk-linux-x64': '-' '@anthropic-ai/claude-agent-sdk-linux-x64-musl': '-' '@anthropic-ai/claude-agent-sdk-win32-arm64': '-' '@anthropic-ai/claude-agent-sdk-win32-x64': '-' '@openai/codex-darwin-arm64': '-' '@openai/codex-darwin-x64': '-' '@openai/codex-linux-arm64': '-' '@openai/codex-linux-x64': '-' '@openai/codex-win32-arm64': '-' '@openai/codex-win32-x64': '-' # **`minimumReleaseAge` is not set, so this exclusion currently excludes nothing.** # # Said here rather than left to be discovered, because the shape reads like a policy # and is not one: `pnpm config get minimumReleaseAge` answers `undefined`, and the # setting appears in no `.npmrc`, here or in either package. `pnpm pincheck` reports # the state in its output for the same reason — a line that looks load-bearing and # is inert is worse than no line, and this one had a driver asserting on it. # # Turning it on is a real decision with a measured cost, which is why it is left to # be taken rather than taken here. With `minimumReleaseAge: 10080`, on 2026-08-02: # 27 lockfile entries are rejected — every `@rollup/rollup-*@4.62.3` platform # binary, published six days earlier as a transitive dependency of Vite — so every # `pnpm