@unbrained/pm-cli 2026.9.16 → 2026.9.17

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.
Files changed (47) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +6 -0
  3. package/dist/cli-bundle/bundle-manifest.json +67 -67
  4. package/dist/cli-bundle/chunks/{chunk-DLVCGXO6.js → chunk-5ZY4WE3F.js} +2 -2
  5. package/dist/cli-bundle/chunks/{chunk-PTMZALZM.js → chunk-DN2RIHRN.js} +2 -2
  6. package/dist/cli-bundle/chunks/{chunk-GX5XSANL.js → chunk-E67MIO3Z.js} +2 -2
  7. package/dist/cli-bundle/chunks/{chunk-GA73HHQG.js → chunk-G2IJF244.js} +48 -48
  8. package/dist/cli-bundle/chunks/{chunk-3UXLVJIM.js → chunk-UF75LUAK.js} +2 -2
  9. package/dist/cli-bundle/chunks/{chunk-A5EKLGOU.js → chunk-YZXB4XGA.js} +4 -4
  10. package/dist/cli-bundle/chunks/{register-mutation-PA5M3X77.js → register-mutation-KHMBJJS6.js} +2 -2
  11. package/dist/cli-bundle/chunks/{register-operations-MBSG5D22.js → register-operations-HHDROJD6.js} +2 -2
  12. package/dist/cli-bundle/chunks/{register-setup-S6MMYN4D.js → register-setup-YAURJMY5.js} +2 -2
  13. package/dist/cli-bundle/focused-chunks/{chunk-SSG62L7U.js → chunk-7ZC4CKOX.js} +2 -2
  14. package/dist/cli-bundle/focused-chunks/{chunk-WHL5CQG3.js → chunk-IVWUQE7T.js} +51 -51
  15. package/dist/cli-bundle/main.js +2 -2
  16. package/dist/cli-bundle/sdk-contracts.js +1 -1
  17. package/dist/cli-bundle/sdk-core.js +1 -1
  18. package/dist/cli-bundle/sdk-governance.js +1 -1
  19. package/dist/cli-bundle/sdk-merge.js +39 -39
  20. package/dist/cli-bundle/sdk-runtime.js +1 -1
  21. package/dist/cli-bundle/sdk-testing.js +1 -1
  22. package/dist/cli-bundle/sdk.js +1 -1
  23. package/dist/core/diagnostics/remediation.js +1 -1
  24. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  25. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  26. package/dist/sdk/merge/install.js +2 -2
  27. package/dist/sdk/public-surface.json +1 -1
  28. package/docs/MERGE_SAFETY.md +13 -2
  29. package/docs/PACKED_FIRST_RUN.md +46 -0
  30. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +6 -3
  31. package/marketplace.json +2 -2
  32. package/package.json +1 -1
  33. package/packages/pm-beads/package.json +1 -1
  34. package/packages/pm-calendar/package.json +1 -1
  35. package/packages/pm-command-kit/package.json +1 -1
  36. package/packages/pm-digital-twin/package.json +1 -1
  37. package/packages/pm-governance-audit/package.json +1 -1
  38. package/packages/pm-guide-shell/package.json +1 -1
  39. package/packages/pm-kanban/package.json +1 -1
  40. package/packages/pm-lifecycle-hooks/package.json +1 -1
  41. package/packages/pm-linked-test-adapters/package.json +1 -1
  42. package/packages/pm-search-advanced/package.json +1 -1
  43. package/packages/pm-templates/package.json +1 -1
  44. package/packages/pm-todos/package.json +1 -1
  45. package/packages/pm-vcs/package.json +1 -1
  46. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  47. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
@@ -38,8 +38,13 @@ git commit -m "chore(pm): install tracker merge drivers"
38
38
 
39
39
  `pm merge install` writes an idempotent, fenced `.gitattributes` block and repository-local `git config` entries. The attributes are committed; the driver commands are clone-local, so every collaborator and fresh CI clone that performs merges must run the install command.
40
40
 
41
- The clone-local driver values record the absolute Node executable and bundled
42
- `dist/cli.js` path resolved by the installing SDK. Git therefore does not depend
41
+ The clone-local driver values record the absolute runtime launcher and bundled
42
+ `dist/cli.js` path resolved by the installing SDK. The installer preserves an
43
+ absolute PATH symlink when it resolves to the executing runtime, so a runtime
44
+ manager can retarget that launcher during upgrades without breaking every clone.
45
+ Relative PATH entries, inaccessible launchers, and different runtimes are ignored;
46
+ without a matching launcher, the installer retains the executing binary path.
47
+ Git therefore does not depend
43
48
  on a bare `pm` command or the caller's later `PATH` when it merges tracker data.
44
49
  The item-path placeholder is stored as bare `%P`: Git performs the required
45
50
  shell quoting when it expands the placeholder. Receipt ingestion also removes
@@ -53,6 +58,9 @@ also accepted when its Node and `dist/cli.js` paths exist, its manifest owns the
53
58
  copied worktrees and upgraded global installs healthy without accepting an
54
59
  arbitrary executable. A missing, malformed, or semantically stale definition is
55
60
  reported even when the committed attribute fence is correct.
61
+ Health and validation name `pm merge install` as the repair command for missing
62
+ or drifted drivers. This upgrade behavior is tracked by
63
+ [pm-rcjyft](../.agents/pm/issues/pm-rcjyft.toon).
56
64
 
57
65
  The installer publishes the shared `.gitattributes` fence only after the clone-local driver commands are configured. If the repository Git config is read-only or another Git process holds its lock, the command returns the stable `merge_git_config_unwritable` error with recovery guidance and leaves an absent fence absent. Use `pm merge install --dry-run --json` to inspect the contract in intentionally read-only workspaces.
58
66
 
@@ -476,3 +484,6 @@ Only aged `committed` or `compensated` journals are removed. `applying`, `compen
476
484
  ## Temporary-clone acceptance test
477
485
 
478
486
  Before releasing merge-contract changes, validate the packed package in a temporary Git repository: initialize pm, install the merge contract, create one base item, branch twice, append disjoint metadata/history on both branches, merge, and run the strict validation commands above. Include a same-key conflict case and prove Git leaves it unresolved while the output remains parseable.
487
+
488
+ The [packed first-run matrix](PACKED_FIRST_RUN.md) exercises the installed
489
+ README workflow, a real comment/history merge, and MCP on supported platforms.
@@ -0,0 +1,46 @@
1
+ # Packed First-Run Acceptance
2
+
3
+ Tracked by [pm-ygli86](../.agents/pm/tasks/pm-ygli86.toon) and
4
+ [pm-rcjyft](../.agents/pm/issues/pm-rcjyft.toon).
5
+
6
+ The `Packed first run` CI matrix installs the same tarball globally into an
7
+ isolated npm prefix on Ubuntu, macOS, and Windows, using Node 22.18.0 and Node 24.
8
+ It executes the installed `pm` shim before passing the installed package directory
9
+ to the acceptance harness:
10
+
11
+ ```bash
12
+ node scripts/release/packed-first-run.mjs /path/to/installed/@unbrained/pm-cli
13
+ ```
14
+
15
+ The harness extracts the first three commands from the installed README's
16
+ `60 Second Example` section. It executes `init`, `create`, and `list` in a
17
+ temporary Git workspace, requires nonempty output below 4,096 characters per
18
+ command, and checks that the created item was persisted. Missing sections,
19
+ reordered commands, unsupported shell expressions, and unbalanced quotes fail.
20
+ Arguments are passed directly to the installed CLI without a shell.
21
+
22
+ Two branches then append independent comments through that CLI. A real Git merge
23
+ must preserve both comments and their history. The installed reconciliation and
24
+ strict history verifier must succeed. The installed MCP server must complete an
25
+ initialize round trip and advertise the installed package version. An additional
26
+ mutation enables telemetry only against a loopback HTTP collector. The harness
27
+ waits for the detached worker's request and then verifies the physical queue is
28
+ empty and a successful flush is recorded. It removes inherited inline-flush and
29
+ test-runner overrides so this exercises the real detached process. Other commands
30
+ and MCP keep telemetry disabled; the install and workspace use isolated home
31
+ and global tracker directories.
32
+
33
+ MCP cleanup waits for process closure before removing its workspace. It allows
34
+ five seconds after SIGTERM, then sends SIGKILL and allows five more seconds. If
35
+ the child still does not close, the harness fails with captured diagnostics and
36
+ retains that workspace rather than attempting removal while it is in use.
37
+
38
+ The separate runtime-upgrade regression installs drivers through an absolute
39
+ runtime symlink, removes the original runtime directory, retargets the symlink,
40
+ and performs a real Git merge. It verifies the upgrade failure from GitHub #1248
41
+ without altering any developer runtime or repository.
42
+
43
+ This matrix proves the packed artifact's first-run behavior. Registry propagation,
44
+ npm/Bun installed agent sessions, npx/bunx execution, production telemetry, and
45
+ previous-release compatibility remain separate acceptance claims under the
46
+ [release workflow](RELEASING.md).
@@ -4,12 +4,12 @@ Tracker: `pm-f05lsg`.
4
4
 
5
5
  Every catalog code is listed. An `uncovered` row is an explicit closure obligation, never an omission or implied approval.
6
6
 
7
- - Catalog error codes: 374
7
+ - Catalog error codes: 377
8
8
  - Executable error codes: 19
9
9
  - Executable-code ratchet floor: 18
10
10
  - Required executable canonical codes: `bulk_ids_input_empty`, `bulk_ids_input_missing_path`, `bulk_ids_input_unreadable`, `invalid_argument_value`, `manifest_unknown_key`, `missing_lifecycle_target`, `missing_required_argument`, `no_version_bounds_declared`, `projection_options_mutually_exclusive`, `tracker_not_initialized`, `tracker_root_missing`, `tracker_root_not_directory`, `tracker_root_unreadable`, `unknown_context_intent`, `unknown_field_projection`, `unknown_option`, `unknown_subcommand`
11
- - Uncovered error codes: 355
12
- - Coverage fraction: 0.050802
11
+ - Uncovered error codes: 358
12
+ - Coverage fraction: 0.050398
13
13
  - Closed-domain probes: 19
14
14
  - Grammar probes: 113
15
15
 
@@ -196,6 +196,8 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
196
196
  | `mcp_task_not_found_or_not_authorized` | `mcp_task_not_found_or_not_authorized` | uncovered | none | 0 |
197
197
  | `merge_conflict_markers_detected` | `merge_conflict_markers_detected` | uncovered | none | 0 |
198
198
  | `merge_decisions_unreviewed` | `merge_decisions_unreviewed` | uncovered | none | 0 |
199
+ | `merge_driver_configuration_drift` | `merge_driver_configuration_drift` | uncovered | none | 0 |
200
+ | `merge_driver_configuration_missing` | `merge_driver_configuration_missing` | uncovered | none | 0 |
199
201
  | `merge_git_config_unwritable` | `merge_git_config_unwritable` | uncovered | none | 0 |
200
202
  | `merge_receipt_evidence_invalid` | `merge_receipt_evidence_invalid` | uncovered | none | 0 |
201
203
  | `merge_receipt_history_reference_missing` | `merge_receipt_history_reference_missing` | uncovered | none | 0 |
@@ -345,6 +347,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
345
347
  | `validate_lifecycle_dependency_cycles_error` | `validate_lifecycle_dependency_cycles_error` | uncovered | none | 0 |
346
348
  | `validate_lifecycle_stale_blockers` | `validate_lifecycle_stale_blockers` | uncovered | none | 0 |
347
349
  | `validate_merge_decisions_unreviewed` | `validate_merge_decisions_unreviewed` | uncovered | none | 0 |
350
+ | `validate_merge_driver_configuration` | `validate_merge_driver_configuration` | uncovered | none | 0 |
348
351
  | `validate_merge_fence_drift` | `validate_merge_fence_drift` | uncovered | none | 0 |
349
352
  | `validate_metadata_custom_profile_missing_required_fields` | `validate_metadata_custom_profile_missing_required_fields` | uncovered | none | 0 |
350
353
  | `validate_metadata_duplicate_issue_codes` | `validate_metadata_duplicate_issue_codes` | uncovered | none | 0 |
package/marketplace.json CHANGED
@@ -6,14 +6,14 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.",
9
- "version": "2026.9.16"
9
+ "version": "2026.9.17"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "pm-claude",
14
14
  "source": "./plugins/pm-claude",
15
15
  "description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
16
- "version": "2026.9.16",
16
+ "version": "2026.9.17",
17
17
  "author": {
18
18
  "name": "unbrained",
19
19
  "url": "https://github.com/unbraind/pm-cli"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-cli",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.17",
4
4
  "description": "Git-native project management CLI for humans and agents.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.10.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-beads",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.17",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for importing Beads JSONL records.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-calendar",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.17",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for calendar and agenda views.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-command-kit",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.17",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm exemplar package for the commands capability: registerCommand, registerFlags, and registerParser.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-digital-twin",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.17",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-governance-audit",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.17",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for governance audit and normalization workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-guide-shell",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.17",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for guide and shell completion workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-kanban",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.17",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm archetype package: a complete Kanban continuous-flow profile built on public SDK primitives.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-lifecycle-hooks",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.17",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package demonstrating safe lifecycle hook registration.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-linked-test-adapters",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.17",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for optional linked-test run management adapters and reporters.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-search-advanced",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.17",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for semantic, hybrid, and reindex search workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-templates",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.17",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for reusable create templates.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-todos",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.17",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for Todo markdown import and export.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-vcs-sdk-exemplar",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.17",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Beyond-PM exemplar: a VCS-style changeset workflow built entirely on public pm SDK and extension primitives.",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pm-claude",
3
3
  "description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents (coordinator, delivery-chain, triage, verification), hybrid TUI task tracking (pm as persistent store + Claude Code task panel as live view), session context injection, and full git-based project management without leaving Claude Code.",
4
- "version": "2026.9.16",
4
+ "version": "2026.9.17",
5
5
  "author": {
6
6
  "name": "unbrained",
7
7
  "url": "https://github.com/unbraind/pm-cli"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-codex",
3
- "version": "2026.9.16",
3
+ "version": "2026.9.17",
4
4
  "description": "Native Codex integration for pm-cli with bundled MCP tools, skills, commands, and agent workflows.",
5
5
  "author": {
6
6
  "name": "unbrained",