Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .agents/skills/mops-cli/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ mops generate candid backend -o <path> # single canister, ad-hoc path
mops toolchain use moc 1.7.0 # pin specific version
mops toolchain use moc latest # pin latest version (non-interactive)
mops toolchain use lintoko 0.10.0 # pin specific version
mops toolchain use pocket-ic 12.0.0 # pin for replica tests / benchmarks (pin a specific version; `latest` may resolve to one the bundled pic-js client doesn't support)
mops toolchain use pocket-ic 12.0.0 # pin for replica tests / benchmarks (pin a specific version; `latest` may resolve to one the vendored `@dfinity/pic` client doesn't support)
mops toolchain use wasm-opt 131 # Binaryen for [optimize] (or `latest`)
mops toolchain update moc # update to latest (requires existing [toolchain] entry)
mops toolchain update # update all tools to latest
Expand All @@ -162,6 +162,8 @@ mops toolchain info <tool> --versions --all # full stable history (cache warming
mops toolchain bin moc # print path to binary
```

**`pocket-ic` versions**: `9.0.0` and newer run on the vendored `@dfinity/pic` client. Pins below `9.0.0` still work on the legacy `pic-ic` client but print a deprecation warning and are removed in mops v3 — pin `9.0.0` or newer.

**Agent note**: `toolchain use <tool>` without a version opens an interactive picker — do not use in scripts or agents. Always pass a version or `latest`. `toolchain update` only works when the tool already has a `[toolchain]` entry. `toolchain info <tool> --versions` works without `mops.toml` (first GitHub page by default; pass `--all` for full history).

### Enhanced migrations
Expand Down
169 changes: 120 additions & 49 deletions NEXT-MAJOR.md

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,15 @@ Refs: GH = `caffeinelabs/mops`, LIN = Linear ticket title.

**Trust / lockfile / registry**
- `mops verify` as an explicit on-disk integrity command. The breaking half (removing the implicit re-hash from `install`) waits for v3. (GH #517)
- `mops ci` (or `--frozen`) with strict-lockfile semantics. Old `mops install` unchanged. The breaking half (dropping `CI` env-var auto-detection in `cli/integrity.ts:40`) waits for v3. (GH #516)
- `--locked` with strict-lockfile semantics (fail if `mops.lock` is missing or would change; never write it), on `install` and every implicitly-resolving command. Old `mops install` unchanged. Decided 2026-07 against a separate `mops ci` command — cargo/pnpm/yarn all use a flag; see `NEXT-MAJOR.md`. The breaking half (dropping `CI` env-var auto-detection in `cli/integrity.ts:50-59`, dropping `--lock`) waits for v3. (GH #516)
- Resolve dependency tree on the backend — additive query method. (GH #19)
- `yank` / `deprecate` / `unpublish`. (GH #291)
- Downloadable package index (cargo/purescript style), additive endpoint. (GH #291)

**Bundling / runtime**
- `MOPS_PASSWORD` / `--password` for non-interactive identity (today `getIdentity()` blocks on stdin for encrypted PEMs — `cli/mops.ts:59-82`).
- Standalone binary distribution alongside npm — additive third channel. (LIN: standalone binary)
- Narrow `files` in `cli/package.json` (currently `["*"]` with a few exclusions). The published npm tarball ships **both** distributions: the unbundled `dist/` tree that `bin` actually points at *and* the 5.9 MB bun `bundle/cli.js` that only the `cli.mops.one` installer uses (that installer downloads `bundle/cli.tgz` from the releases canister instead — `cli-releases/install.sh` → `cli/release-cli.ts:33-41`). Excluding `bundle/` would roughly halve the npm download. Pre-existing; found while investigating the `@dfinity/pic` postinstall (see `NEXT-MAJOR.md`).

**Backend additions**
- File blobs in stable memory (storage canisters). Invisible to clients. (GH #18)
Expand Down
2 changes: 2 additions & 0 deletions cli/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

- `mops publish --dry-run` runs the same local publish steps as a real publish (packaging checks, docs, changelog, tests, benchmarks) and prints the final file list, without contacting the registry or uploading. Honors `--no-docs` / `--no-test` / `--no-bench`. Does not run canister config validation or prove registry acceptance.
- Fix `mops publish` exiting 0 on keyword-length and invalid `package.files` path errors (now exit 1, same as other preflight failures).
- The PocketIC client used by `mops test --mode replica`, `mops bench`, and `mops watch` for `pocket-ic` `9.0.0` and newer is now upstream `@dfinity/pic` (`0.23.0`) instead of the `pic-js-mops` fork. The two patches mops needed — passing an explicit binary path and a server `--ttl` — landed upstream, so the fork no longer has a reason to exist and mops tracks PocketIC releases directly. No behavior change: the same toolchain-managed binary is started with the same `--ttl`. `@dfinity/pic` is a devDependency pre-bundled into the published CLI, because its postinstall downloads a ~94 MB pocket-ic binary and fails without network, and mops manages that binary itself via `[toolchain] pocket-ic`. That bundle carries pic's own `@icp-sdk/core` (`5.x`), so mops itself stays on `4.0.2`: `5.x` drops the IC HTTP API `v2` endpoints, which are the only ones the `dfx` and `dfx-pocket-ic` replicas serve, and projects with no `pocket-ic` pin still use those.
- Deprecated `[toolchain] pocket-ic` pins below `9.0.0`. They still work — the legacy `pic-ic` client is unchanged and still handles them — but now print a warning, and support will be removed in mops v3. Run `mops toolchain use pocket-ic 12.0.0` to move to a supported version.

## 2.19.2

Expand Down
Loading
Loading