You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Consolidate the unreleased changelog into a release summary: 8 entries to 7, ordered breaking-first, each tightened to a single sentence.
In cli.py, lift the cooldown-supported manager list to a pool-derived `COOLDOWN_SUPPORTED_MANAGERS` constant and fix the `--cooldown` help to list pnpm; drop an unused `Context` import. Repair two docstring cross-references in execution.py.
Add targeted type-ignore comments clearing 24 mypy errors in the new concurrency, pool, and metadata tests.
Fix two lint violations in the Guix deps-check workflow: a shellcheck SC2024 redirect warning and an over-length line.
List pnpm among the cooldown-enforcing managers in docs/configuration.md.
Co-Authored-By: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: changelog.md
+7-8Lines changed: 7 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,14 +5,13 @@
5
5
> [!WARNING]
6
6
> This version is **not released yet** and is under active development.
7
7
8
-
-**Breaking:**[mpm] Rename the `--allow-no-cooldown` flag (shipped in `6.6.0`) to the `--require-cooldown-support`/`--allow-unsupported-managers` boolean pair, and rename its `allow_no_cooldown` config to `require_cooldown_support` (default `true`). Pass `--allow-unsupported-managers` (or set `require_cooldown_support = false`) for the previous `--allow-no-cooldown` behavior.
9
-
-[pnpm] Add the pnpm package manager, with `installed`, `outdated`, `search`, `install`, `upgrade`, `remove` and `cleanup` support. Enforce the supply-chain `--cooldown` through pnpm's native `minimumReleaseAge` gate.
10
-
-[mpm] Bundle the click-extra config-format extras (`toml`, `yaml`, `json5`, `jsonc`, `hjson`, `xml`) into the standalone binary via `[tool.repomatic] nuitka.extras` plus matching `[tool.nuitka] include-package` entries, so the binary can read configs in all six formats (the source distribution already supported them as optional extras).
11
-
-[mpm]`install` and `remove` now exit with a non-zero status when a requested package could not be installed or removed by any selected manager. Both commands previously always exited `0`, masking failures. As part of this, `install` installs every requested package instead of stopping after the first one that succeeds.
12
-
-[mpm]`--timeout` now defaults to a per-operation value instead of a flat 500s: read-only queries (`installed`, `outdated`, `search`) and the version-detection probe get a shorter 120s cap so a wedged or pathologically slow CLI (like `guix search` scanning every package) fails fast, while state-changing operations (`install`, `upgrade`, `remove`, `sync`, `cleanup`) keep the 500s cap for source builds and channel syncs. Passing `--timeout` or setting a per-manager `timeout` still overrides every operation.
13
-
- [mpm] Read-only operations (`installed`, `outdated`, `search`) now query managers in parallel: a slow manager (like `guix search` scanning every package) no longer blocks the others, dropping the wall-clock from the sum of every manager to the slowest single one. Manager availability detection (the per-manager `--version` probe run while selecting managers) is warmed in parallel the same way, shaving startup latency off every command that touches many managers. Add a `--jobs`/`-j` option (default: CPU count minus one) to size the thread pool; `--jobs 1` or `--verbosity DEBUG` runs sequentially. State-changing operations (`install`, `upgrade`, `remove`, `sync`, `cleanup`) stay sequential, and a single aggregate spinner replaces the per-manager ones while a batch runs concurrently: it shows a live `8/12 managers` count, leaves a `✓`/`✗` trail naming each manager (and whether it erred) as it finishes, and ends with a persistent `✓ Searched 12 managers (15s)` line when it was on screen. Refs {issue}`529`.
14
-
-[mpm] Show a progress spinner on stderr while a manager CLI call runs longer than a second, so a slow operation (like `guix search` scanning every package) no longer looks like a hang. It carries the elapsed time (`⠙ guix search (12.3s)`) so a long call reads as progressing rather than stuck. Built on the `Spinner` widget and the `--progress`/`--no-progress` default option from click-extra; mpm additionally suppresses it for serialized output and at DEBUG verbosity (where logs already narrate). The spinner self-disables off a terminal (pipes, `TERM=dumb`, CI) and under `--no-progress`/`--accessible`.
15
-
-[mpm] Widen the binary smoke tests in `tests/cli-test-plan.yaml`: per-format `--validate-config` against a tiny fixture for each of the seven readers; `--table-format` rendering in JSON, YAML, TOML, and XML; the cycle's new `--man`, `--show-params`, `--accessible`, `--summary`, and `--cooldown` globals; the `config-template`, `help`, and `search` subcommands; and negative cases that assert click-extra's usage errors stay surfaced as exit code 2 instead of leaking a Python traceback from the onefile binary.
8
+
-**Breaking:**[mpm] Rename the `--allow-no-cooldown` flag to the `--require-cooldown-support`/`--allow-unsupported-managers` pair, and its `allow_no_cooldown` config to `require_cooldown_support` (default `true`).
9
+
-[pnpm] Add the pnpm package manager (`installed`, `outdated`, `search`, `install`, `upgrade`, `remove`, `cleanup`), enforcing `--cooldown` via pnpm's native `minimumReleaseAge` gate.
10
+
-[mpm] Read-only operations (`installed`, `outdated`, `search`) now query managers in parallel, as does the manager-availability probe, via a new `--jobs`/`-j` option (default: CPU count minus one); state-changing operations stay sequential. Refs {issue}`529`.
11
+
-[mpm] Show a progress spinner with elapsed time on stderr for manager CLI calls running longer than a second, with a single aggregate spinner during parallel batches; toggle it with click-extra's `--progress`/`--no-progress`.
12
+
-[mpm] The standalone binary now reads configuration in all six formats (`toml`, `yaml`, `json5`, `jsonc`, `hjson`, `xml`), matching the source distribution.
13
+
-[mpm]`--timeout` now defaults per-operation — 120s for read-only queries (`installed`, `outdated`, `search`) and 500s for state-changing operations — instead of a flat 500s; an explicit `--timeout` still overrides.
14
+
-[mpm]`install` and `remove` now exit non-zero when no manager could fulfill a request (previously always `0`); `install` also installs every requested package, not just the first to succeed.
Copy file name to clipboardExpand all lines: docs/configuration.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -78,7 +78,7 @@ These go under `[mpm]` (or `[tool.mpm]` in `pyproject.toml`):
78
78
79
79
`cooldown` is a supply-chain safeguard: it refuses to install or upgrade any package version published more recently than the given age, giving a freshly-published (and possibly compromised) release time to be caught and pulled before it reaches the system.
80
80
81
-
`mpm` enforces the cooldown through each manager's own release-age mechanism, so only managers that ship one are covered: `uv` and `uvx` (via `exclude-newer`), `npm` (via `min-release-age`), `pip` (via `--uploaded-prior-to`), and `pipx` (which inherits the pip setting). Managers without native support cannot honor the gate. By default they are skipped during install and upgrade (fail-closed), so nothing slips in unguarded. Pass `--allow-unsupported-managers` (or set `require_cooldown_support = false`) to run them anyway, without the safeguard. Read-only operations (`outdated`, `installed`, `search`) are never blocked.
81
+
`mpm` enforces the cooldown through each manager's own release-age mechanism, so only managers that ship one are covered: `uv` and `uvx` (via `exclude-newer`), `npm` (via `min-release-age`), `pnpm` (via `minimumReleaseAge`), `pip` (via `--uploaded-prior-to`), and `pipx` (which inherits the pip setting). Managers without native support cannot honor the gate. By default they are skipped during install and upgrade (fail-closed), so nothing slips in unguarded. Pass `--allow-unsupported-managers` (or set `require_cooldown_support = false`) to run them anyway, without the safeguard. Read-only operations (`outdated`, `installed`, `search`) are never blocked.
82
82
83
83
See {doc}`cooldown` for the full support matrix and the rationale.
0 commit comments