@unbrained/pm-cli 2026.9.9 → 2026.9.10

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 (124) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +17 -0
  3. package/dist/cli/command-namespaces.d.ts +9 -0
  4. package/dist/cli/command-namespaces.js +2 -0
  5. package/dist/cli/help-content.js +1 -1
  6. package/dist/cli/help-json-payload.d.ts +5 -1
  7. package/dist/cli/help-json-payload.js +2 -2
  8. package/dist/cli/main.d.ts +1 -0
  9. package/dist/cli/main.js +3 -3
  10. package/dist/cli/register-mutation.js +2 -2
  11. package/dist/cli/register-operations.d.ts +0 -5
  12. package/dist/cli/register-operations.js +1 -1
  13. package/dist/cli-bundle/bundle-manifest.json +154 -154
  14. package/dist/cli-bundle/chunks/chunk-4SFBH77G.js +2233 -0
  15. package/dist/cli-bundle/chunks/{chunk-4VL5P22L.js → chunk-74RGSPLL.js} +2 -2
  16. package/dist/cli-bundle/chunks/{chunk-WQKMSFBV.js → chunk-7WIHZI2M.js} +2 -2
  17. package/dist/cli-bundle/chunks/{chunk-L5RCDKQ2.js → chunk-EOCKPCEY.js} +2 -2
  18. package/dist/cli-bundle/chunks/chunk-GLQMKUGP.js +2 -0
  19. package/dist/cli-bundle/chunks/{chunk-OHNLSGGV.js → chunk-I6XT3DLQ.js} +2 -2
  20. package/dist/cli-bundle/chunks/chunk-MACGGTLQ.js +29 -0
  21. package/dist/cli-bundle/chunks/{chunk-ECBLPN7B.js → chunk-NKOYVKFM.js} +2 -2
  22. package/dist/cli-bundle/chunks/{chunk-Z3XVXUVF.js → chunk-P6BEYAON.js} +2 -2
  23. package/dist/cli-bundle/chunks/{chunk-3IPRM75M.js → chunk-PYUITRSV.js} +2 -2
  24. package/dist/cli-bundle/chunks/chunk-T3AMFUCN.js +2 -0
  25. package/dist/cli-bundle/chunks/{chunk-D3YVILJJ.js → chunk-TSWEX72T.js} +2 -2
  26. package/dist/cli-bundle/chunks/{chunk-J6ERHBV2.js → chunk-YKQTETJI.js} +71 -71
  27. package/dist/cli-bundle/chunks/{register-list-query-UIHRCS6D.js → register-list-query-CUIW7SSE.js} +2 -2
  28. package/dist/cli-bundle/chunks/register-mutation-5F5CYUWZ.js +20 -0
  29. package/dist/cli-bundle/chunks/register-operations-XIZPLPQY.js +2 -0
  30. package/dist/cli-bundle/chunks/{register-setup-PERI45EM.js → register-setup-JVGPCAIL.js} +2 -2
  31. package/dist/cli-bundle/focused-chunks/{chunk-OQUGRHKV.js → chunk-26O2WB73.js} +2 -2
  32. package/dist/cli-bundle/focused-chunks/chunk-5YU75QLV.js +2 -0
  33. package/dist/cli-bundle/focused-chunks/{chunk-QQQ4SAUO.js → chunk-7N5MRONP.js} +2 -2
  34. package/dist/cli-bundle/focused-chunks/chunk-B2CMFYRZ.js +2 -0
  35. package/dist/cli-bundle/focused-chunks/{chunk-PNKIANFZ.js → chunk-CRY5MHEI.js} +2 -2
  36. package/dist/cli-bundle/focused-chunks/{chunk-YCDQ2N23.js → chunk-F6WKFXBT.js} +2 -2
  37. package/dist/cli-bundle/focused-chunks/{chunk-BUCJUZVG.js → chunk-FHUARRMA.js} +2 -2
  38. package/dist/cli-bundle/focused-chunks/{chunk-5FHTCOHS.js → chunk-M36SF4GE.js} +2 -2
  39. package/dist/cli-bundle/focused-chunks/{chunk-TTYXF5YD.js → chunk-OROZM37I.js} +2 -2
  40. package/dist/cli-bundle/focused-chunks/{chunk-XNR3DM6J.js → chunk-PNGYYQY7.js} +2 -2
  41. package/dist/cli-bundle/focused-chunks/{chunk-ZTCE4UO6.js → chunk-SL5YVVPV.js} +3 -3
  42. package/dist/cli-bundle/focused-chunks/{chunk-XSS3APUF.js → chunk-TPOL4TWE.js} +5 -5
  43. package/dist/cli-bundle/focused-chunks/{chunk-7PC4R5QB.js → chunk-U5SHHU7E.js} +2 -2
  44. package/dist/cli-bundle/focused-chunks/{chunk-2WSBXIGF.js → chunk-XSMA2W6Q.js} +2 -2
  45. package/dist/cli-bundle/focused-chunks/chunk-ZAWAL2CG.js +2 -0
  46. package/dist/cli-bundle/focused-chunks/{chunk-7N6DOREF.js → chunk-ZDNAWWQI.js} +2 -2
  47. package/dist/cli-bundle/focused-chunks/{chunk-YJUXGS57.js → chunk-ZJHYQOTM.js} +2 -2
  48. package/dist/cli-bundle/main.js +26 -26
  49. package/dist/cli-bundle/sdk-authoring.js +1 -1
  50. package/dist/cli-bundle/sdk-contracts.js +2 -2
  51. package/dist/cli-bundle/sdk-core.js +37 -37
  52. package/dist/cli-bundle/sdk-governance.js +1 -1
  53. package/dist/cli-bundle/sdk-graph.js +1 -1
  54. package/dist/cli-bundle/sdk-merge.js +42 -42
  55. package/dist/cli-bundle/sdk-query.js +1 -1
  56. package/dist/cli-bundle/sdk-runtime.js +1 -1
  57. package/dist/cli-bundle/sdk-testing.js +1 -1
  58. package/dist/cli-bundle/sdk.js +10 -10
  59. package/dist/sdk/agent/item-addressing.js +1 -1
  60. package/dist/sdk/agent-capability-contracts.js +1 -1
  61. package/dist/sdk/cli-bootstrap.js +1 -1
  62. package/dist/sdk/cli-contracts/command-aliases.d.ts +11 -1
  63. package/dist/sdk/cli-contracts/command-aliases.js +1 -1
  64. package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
  65. package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -1
  66. package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
  67. package/dist/sdk/cli-contracts/runtime-contracts.d.ts +4 -1
  68. package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
  69. package/dist/sdk/cli-contracts/tool-schema.d.ts +3 -3
  70. package/dist/sdk/cli-contracts/tool-schema.js +1 -1
  71. package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +2 -0
  72. package/dist/sdk/cli-contracts.d.ts +1 -1
  73. package/dist/sdk/cli-contracts.js +1 -1
  74. package/dist/sdk/completion.js +359 -346
  75. package/dist/sdk/index.d.ts +2 -1
  76. package/dist/sdk/index.js +1 -1
  77. package/dist/sdk/lifecycle/claim.js +1 -1
  78. package/dist/sdk/lifecycle/lifecycle-transitions.d.ts +1 -1
  79. package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -1
  80. package/dist/sdk/lifecycle/mcp-actions.js +1 -1
  81. package/dist/sdk/lifecycle/task-composition.d.ts +17 -0
  82. package/dist/sdk/lifecycle/task-composition.js +2 -0
  83. package/dist/sdk/public-surface.json +1 -1
  84. package/dist/sdk/query/workspace-contracts.d.ts +3 -0
  85. package/dist/sdk/query/workspace-contracts.js +2 -0
  86. package/dist/sdk/runtime-input.js +1 -1
  87. package/dist/sdk/runtime.d.ts +69 -9
  88. package/dist/sdk/runtime.js +1 -1
  89. package/docs/COMMANDS.md +26 -24
  90. package/docs/COMMAND_NAMESPACES.md +65 -0
  91. package/docs/LIFECYCLE_COMMANDS.md +77 -0
  92. package/docs/README.md +2 -0
  93. package/docs/generated/AGENT_CAPABILITY_ROUTING.md +6 -6
  94. package/docs/generated/AGENT_COMMAND_SURFACE.md +19 -0
  95. package/docs/generated/FLAG_LEXICON_BUDGETS.md +21 -3
  96. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +2 -2
  97. package/marketplace.json +2 -2
  98. package/package.json +1 -1
  99. package/packages/pm-beads/package.json +1 -1
  100. package/packages/pm-calendar/package.json +1 -1
  101. package/packages/pm-command-kit/package.json +1 -1
  102. package/packages/pm-digital-twin/package.json +1 -1
  103. package/packages/pm-governance-audit/README.md +4 -2
  104. package/packages/pm-governance-audit/package.json +1 -1
  105. package/packages/pm-guide-shell/package.json +1 -1
  106. package/packages/pm-kanban/package.json +1 -1
  107. package/packages/pm-lifecycle-hooks/package.json +1 -1
  108. package/packages/pm-linked-test-adapters/package.json +1 -1
  109. package/packages/pm-search-advanced/README.md +6 -4
  110. package/packages/pm-search-advanced/package.json +1 -1
  111. package/packages/pm-templates/package.json +1 -1
  112. package/packages/pm-todos/package.json +1 -1
  113. package/packages/pm-vcs/package.json +1 -1
  114. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  115. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  116. package/dist/cli-bundle/chunks/chunk-AAFBV3U3.js +0 -29
  117. package/dist/cli-bundle/chunks/chunk-JUNJ5EKI.js +0 -2
  118. package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +0 -2
  119. package/dist/cli-bundle/chunks/chunk-XZ6T7YPP.js +0 -2217
  120. package/dist/cli-bundle/chunks/register-mutation-WHWMGRVX.js +0 -20
  121. package/dist/cli-bundle/chunks/register-operations-64YZYTC5.js +0 -2
  122. package/dist/cli-bundle/focused-chunks/chunk-2W4XIYOB.js +0 -2
  123. package/dist/cli-bundle/focused-chunks/chunk-FE3BABLJ.js +0 -2
  124. package/dist/cli-bundle/focused-chunks/chunk-IWITF53W.js +0 -2
package/docs/COMMANDS.md CHANGED
@@ -54,8 +54,8 @@ JSON ceiling; TOON uses the smaller default agent ceiling.
54
54
  | Family | Commands | Purpose |
55
55
  | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
56
56
  | Bootstrap | `init`, `config`, `health`, `telemetry` | create and inspect tracker setup |
57
- | Lifecycle | `create`, `copy`, `focus`, `claim`, `update`, `item reopen`, `append`, `close`, `release`, `delete`, `start-task`, `pause-task`, `close-task` | mutate item state, including terminal-work recurrence without duplicate creation |
58
- | Bulk | `item mutate`, `item complete`, `update-many`, `close-many` | atomically commit heterogeneous SDK mutation batches or evidence-backed completion, or apply one change across a matched, dry-run-previewed set with a rollback checkpoint |
57
+ | Lifecycle | `create`, `copy`, `focus`, `claim`, `update`, `item reopen`, `append`, `close`, `release`, `close delete` | mutate item state, including terminal-work recurrence without duplicate creation |
58
+ | Bulk | `item mutate`, `item complete`, `update many`, `close many` | atomically commit heterogeneous SDK mutation batches or evidence-backed completion, or apply one change across a matched, dry-run-previewed set with a rollback checkpoint |
59
59
  | Scheduling | `meet`, `event`, `remind` | low-friction Meeting/Event/Reminder creation |
60
60
  | Planning | `plan create`, `plan add-step`, `plan update-step`, `plan complete-step`, `plan link`, `plan approve`, `plan materialize` | agent-optimized living plans with ordered steps, evidence, decisions, validation, and materialization |
61
61
  | Links | `files`, `docs`, `test`, `deps` | connect items to artifacts, tests, and relationships |
@@ -404,28 +404,28 @@ pm list --status open --has-tests --no-files --json
404
404
 
405
405
  ## Bulk Operations
406
406
 
407
- `update-many` and `close-many` apply one change across a matched set with a dry-run preview and a rollback checkpoint. Both share the `--filter-*` scoping family (`--filter-status/-type/-tag/-priority/-sprint/-release/-parent/-assignee/-deadline-before|after/-updated-after|before/-created-after|before`) plus `--ids` for an explicit comma-separated allowlist intersected with the other filters. `update-many` additionally accepts the missing-metadata selectors `--filter-ac-missing`/`--filter-estimates-missing`/`--filter-resolution-missing`/`--filter-metadata-missing` for bulk metadata backfill.
407
+ `update many` and `close many` apply one change across a matched set with a dry-run preview and a rollback checkpoint. Both share the `--filter-*` scoping family (`--filter-status/-type/-tag/-priority/-sprint/-release/-parent/-assignee/-deadline-before|after/-updated-after|before/-created-after|before`) plus `--ids` for an explicit comma-separated allowlist intersected with the other filters. `update many` additionally accepts the missing-metadata selectors `--filter-ac-missing`/`--filter-estimates-missing`/`--filter-resolution-missing`/`--filter-metadata-missing` for bulk metadata backfill.
408
408
 
409
- Both `update-many` and `close-many` also accept the governance-field selectors `--filter-reviewer-missing`/`--filter-risk-missing`/`--filter-confidence-missing`/`--filter-sprint-missing`/`--filter-release-missing` and the content-field presence selectors under the `--filter-` prefix: `--filter-has-notes`/`--filter-no-notes`, `--filter-has-learnings`/`--filter-no-learnings`, `--filter-has-files`/`--filter-no-files`, `--filter-has-docs`/`--filter-no-docs`, `--filter-has-tests`/`--filter-no-tests`, `--filter-has-comments`/`--filter-no-comments`, `--filter-has-deps`/`--filter-no-deps`, `--filter-has-body`/`--filter-empty-body`, and `--filter-has-linked-command`/`--filter-no-linked-command`. These mirror the list/search presence filters and intersect with the rest of the scoping family, so you can bulk-select (for example) closed Tasks with no documented learnings before applying a change.
409
+ Both `update many` and `close many` also accept the governance-field selectors `--filter-reviewer-missing`/`--filter-risk-missing`/`--filter-confidence-missing`/`--filter-sprint-missing`/`--filter-release-missing` and the content-field presence selectors under the `--filter-` prefix: `--filter-has-notes`/`--filter-no-notes`, `--filter-has-learnings`/`--filter-no-learnings`, `--filter-has-files`/`--filter-no-files`, `--filter-has-docs`/`--filter-no-docs`, `--filter-has-tests`/`--filter-no-tests`, `--filter-has-comments`/`--filter-no-comments`, `--filter-has-deps`/`--filter-no-deps`, `--filter-has-body`/`--filter-empty-body`, and `--filter-has-linked-command`/`--filter-no-linked-command`. These mirror the list/search presence filters and intersect with the rest of the scoping family, so you can bulk-select (for example) closed Tasks with no documented learnings before applying a change.
410
410
 
411
411
  ```bash
412
412
  # Bulk metadata update by explicit id allowlist (compose with search --json | jq)
413
- pm update-many --ids pm-a,pm-b,pm-c --priority 1 --dry-run
414
- pm update-many --filter-tag wave:7 --reviewer maintainer-review
413
+ pm update many --ids pm-a,pm-b,pm-c --priority 1 --dry-run
414
+ pm update many --filter-tag wave:7 --reviewer maintainer-review
415
415
 
416
416
  # Bulk-backfill a placeholder estimate onto open Tasks that have none
417
- pm update-many --filter-status open --filter-type Task --filter-estimates-missing --estimate 60 --dry-run
417
+ pm update many --filter-status open --filter-type Task --filter-estimates-missing --estimate 60 --dry-run
418
418
 
419
419
  # Audited bulk close: routes EACH match through full `pm close` semantics
420
420
  # (close validation, active-child orphan checks, blocked-edge cleanup) — unlike
421
421
  # `update-many --status closed`, which bypasses them. A shared --reason is required
422
422
  # and at least one filter is required so it never matches every item.
423
- pm close-many --filter-sprint S-12 --reason "Sprint S-12 acceptance criteria met" --dry-run
424
- pm close-many --filter-sprint S-12 --reason "Sprint S-12 acceptance criteria met"
425
- pm close-many --rollback close-many-20260604-abc123 # restore the batch
423
+ pm close many --filter-sprint S-12 --reason "Sprint S-12 acceptance criteria met" --dry-run
424
+ pm close many --filter-sprint S-12 --reason "Sprint S-12 acceptance criteria met"
425
+ pm close many --rollback close-many-20260604-abc123 # restore the batch
426
426
  ```
427
427
 
428
- `close-many` skips already-terminal matches by default (pass `--force` to re-close), accepts `--completed-at <timestamp>` to preserve one shared actual-completion time across the batch, reports a per-item plan (`close`/`skip`, plus `active_child_ids` for parents that would be orphaned) under `--dry-run`, and writes a checkpoint by default (`--no-checkpoint` to disable). Checkpoints for both commands live under `.agents/pm/checkpoints/<command>/` and are restored with `--rollback <checkpoint-id>`.
428
+ `close many` skips already-terminal matches by default (pass `--force` to re-close), accepts `--completed-at <timestamp>` to preserve one shared actual-completion time across the batch, reports a per-item plan (`close`/`skip`, plus `active_child_ids` for parents that would be orphaned) under `--dry-run`, and writes a checkpoint by default (`--no-checkpoint` to disable). Checkpoints for both commands live under `.agents/pm/checkpoints/<command>/` and are restored with `--rollback <checkpoint-id>`.
429
429
 
430
430
  When a flag is rejected with `Unknown option`, the error guidance now suggests the nearest supported flag (including abbreviations like `--desc` → `--description`) and notes when the flag is valid on a different command (for example `--type` on `test-all` points to `create`/`list`). Unknown-command guidance ranks agent verb synonyms first, bounded edit distance second, and substring matches last; `pm log` therefore points to `history`, `comments`, and `notes`, never a `catalog` command.
431
431
 
@@ -511,10 +511,10 @@ did-you-mean diagnostic instead of becoming an accidental custom field.
511
511
 
512
512
  Repeated singular/plural list flags now accumulate, so `--tag a --tag b` is equivalent to `--tags a,b` (the same holds for `--status`, `--ids`, and `--fields` on read commands). Earlier versions silently kept only the last value. `list`/`search` also accept `--tags` as a never-block alias for the canonical read filter `--tag`.
513
513
 
514
- `--tags` REPLACES the whole tag list. To edit tags without restating the full set, use the additive/subtractive flags on `create`/`update`/`update-many`:
514
+ `--tags` REPLACES the whole tag list. To edit tags without restating the full set, use the additive/subtractive flags on `create`/`update`/`update many`:
515
515
 
516
516
  - `--add-tags <value>` adds tags to the existing list without replacing it (repeatable; CSV or JSON-array values accepted).
517
- - `--remove-tags <value>` prunes the given tags from the existing list (repeatable; CSV or JSON-array). Available on `update`/`update-many` only — `create` has no prior tags to remove.
517
+ - `--remove-tags <value>` prunes the given tags from the existing list (repeatable; CSV or JSON-array). Available on `update`/`update many` only — `create` has no prior tags to remove.
518
518
 
519
519
  ```bash
520
520
  pm update pm-abc1 --add-tags urgent,backend # keeps existing tags, adds two
@@ -522,7 +522,7 @@ pm update pm-abc1 --remove-tags stale # drops "stale", keeps the rest
522
522
  pm create "New backend task" --add-tags backend,p1
523
523
  ```
524
524
 
525
- Acceptance criteria get the same additive treatment on `update`/`update-many`: `--acceptance-criteria`/`--ac` explicitly REPLACES the whole value and returns an `acceptance_criteria_replaced:<before-count>:<after-count>` warning when it changes existing criteria. `--add-ac <text>` appends one criterion (repeatable; deduped on exact text), while `--remove-ac <text>` removes one criterion by exact text match. Every requested removal must match: otherwise the mutation fails atomically with `acceptance_criteria_remove_unmatched` and reports the unmatched selectors, without applying valid removals or additions. Whole-value replacement cannot be combined with additive flags in one mutation. Criteria are stored with semicolon-space separators, so one criterion cannot contain a semicolon. Disjoint `--add-ac` edits from concurrent agents/branches merge cleanly instead of clobbering each other.
525
+ Acceptance criteria get the same additive treatment on `update`/`update many`: `--acceptance-criteria`/`--ac` explicitly REPLACES the whole value and returns an `acceptance_criteria_replaced:<before-count>:<after-count>` warning when it changes existing criteria. `--add-ac <text>` appends one criterion (repeatable; deduped on exact text), while `--remove-ac <text>` removes one criterion by exact text match. Every requested removal must match: otherwise the mutation fails atomically with `acceptance_criteria_remove_unmatched` and reports the unmatched selectors, without applying valid removals or additions. Whole-value replacement cannot be combined with additive flags in one mutation. Criteria are stored with semicolon-space separators, so one criterion cannot contain a semicolon. Disjoint `--add-ac` edits from concurrent agents/branches merge cleanly instead of clobbering each other.
526
526
 
527
527
  ```bash
528
528
  pm update pm-abc1 --add-ac "error path covered by a regression test"
@@ -555,7 +555,7 @@ pm update <id> \
555
555
  --message "Append audit evidence"
556
556
  ```
557
557
 
558
- `--expected` and `--actual` are short aliases for `--expected-result` and `--actual-result` on `create`/`update`/`update-many`, matching the aliases `pm close` already accepts:
558
+ `--expected` and `--actual` are short aliases for `--expected-result` and `--actual-result` on `create`/`update`/`update many`, matching the aliases `pm close` already accepts:
559
559
 
560
560
  ```bash
561
561
  pm update <id> --expected "Retry succeeds after backoff" --actual "Retry threw on first attempt"
@@ -702,12 +702,12 @@ Use `pm close <id> "<reason>"` instead of `pm update --status closed`.
702
702
 
703
703
  ## Lifecycle Aliases
704
704
 
705
- Lifecycle aliases combine claim, status, and close operations into a single command:
705
+ Lifecycle composition flags combine claim, status, and close operations:
706
706
 
707
707
  ```bash
708
- pm start-task <id> # claim + move to in_progress
709
- pm pause-task <id> # move to open + release claim
710
- pm close-task <id> "<reason>" # close + release assignment
708
+ pm claim <id> --start # claim + move to the configured in-progress status
709
+ pm release <id> --pause # move to the configured open status + release claim
710
+ pm close <id> "<reason>" --release-assignment # close with evidence + release assignment
711
711
  ```
712
712
 
713
713
  For lifecycle ownership commands, `--assignee <agent>` is accepted as an alias
@@ -715,9 +715,11 @@ for `--author <agent>` on `claim`, `release`, `start-task`, `pause-task`, and
715
715
  `close-task`. Use `pm update --assignee <person>` when changing item metadata
716
716
  rather than active work ownership.
717
717
 
718
- Tracker references: [pm-qfte](../.agents/pm/tasks/pm-qfte.toon), [pm-98cz](../.agents/pm/features/pm-98cz.toon).
718
+ The old task spellings remain hidden compatibility aliases. See [Lifecycle Commands and Ownership](LIFECYCLE_COMMANDS.md) for migration, typed SDK receipts, MCP controls, and partial-failure semantics.
719
719
 
720
- After `pm create` of a workable item type, the result includes a non-binding `next_transition` hint (`pm start-task <id>` → `in_progress`) when the workflow defines a distinct in-progress status. This nudges agents to move work through `in_progress` instead of jumping straight from `open` to `closed`. Scheduling/reference types (Event, Meeting, Reminder, Milestone, Decision) never receive the hint. (GH-216)
720
+ Tracker references: [pm-eq4x](../.agents/pm/tasks/pm-eq4x.toon), [pm-ik19](../.agents/pm/tasks/pm-ik19.toon), [pm-qfte](../.agents/pm/tasks/pm-qfte.toon), [pm-98cz](../.agents/pm/features/pm-98cz.toon).
721
+
722
+ After `pm create` of a workable item type, the result includes a non-binding `next_transition` hint (`pm claim <id> --start` → `in_progress`) when the workflow defines a distinct in-progress status. This nudges agents to move work through `in_progress` instead of jumping straight from `open` to `closed`. Scheduling/reference types (Event, Meeting, Reminder, Milestone, Decision) never receive the hint. (GH-216)
721
723
 
722
724
  ## Scheduling Shortcuts
723
725
 
@@ -908,7 +910,7 @@ Use dry-run modes before broad lifecycle or cleanup changes.
908
910
  - `embeddings` removes keyword/semantic artifacts (`search/embeddings.jsonl`, `search/vectorization-status.json`, `search/lancedb/`) plus `search/pending-refresh.json` and its gate, preventing a background worker from rebuilding a partial index against an empty ledger. Rebuild with keyword reindex and semantic reindex when enabled.
909
911
  - `locks` removes only provably expired locks, using embedded `created_at + ttl_seconds`. Active, unreadable, or unparseable locks remain. The result reports `scanned`, `removed`, and `retained` counts.
910
912
 
911
- The `checkpoints` scope prunes bulk-mutation rollback checkpoints under `checkpoints/` (written by `pm update-many`/`pm close-many`) that are older than `checkpoints.retention_days` (default 14; set via `pm config <scope> set checkpoints_retention_days <n>`). Checkpoints whose `created_at` cannot be parsed are retained (safety-first, like the locks sweep), and the result includes a `checkpoints` summary (`scanned`/`removed`/`retained`/`retention_days`). Removing aged checkpoints permanently closes their `--rollback` window.
913
+ The `checkpoints` scope prunes bulk-mutation rollback checkpoints under `checkpoints/` (written by `pm update many`/`pm close many`) that are older than `checkpoints.retention_days` (default 14; set via `pm config <scope> set checkpoints_retention_days <n>`). Checkpoints whose `created_at` cannot be parsed are retained (safety-first, like the locks sweep), and the result includes a `checkpoints` summary (`scanned`/`removed`/`retained`/`retention_days`). Removing aged checkpoints permanently closes their `--rollback` window.
912
914
 
913
915
  `--fix-hints` is a read-only flag: each failing check gains `details.fix_hints`, an array of `pm` command templates derived from the warning codes it raised (for example `pm history-repair <id>` for history drift, or `pm update <id> --reviewer "<name>"` for a missing reviewer). Generic hints may contain `<id>`/`<field>`/`<path>` placeholders the agent substitutes from the check's detail rows; the resolution check aliases concrete per-row commands and marks `fix_hints_truncated` when the list is summarized. It never mutates items. The mapping comes from the shared remediation registry that also backs `pm health --json` (see Self-Repair Remediation below), so agents gating on `pm validate` can auto-repair findings without hardcoding warning-code-to-command lookups.
914
916
 
@@ -916,7 +918,7 @@ The `checkpoints` scope prunes bulk-mutation rollback checkpoints under `checkpo
916
918
 
917
919
  `--counts` keeps the validation envelope, check statuses, warning codes, scalar counts/totals, nested count maps, and fix summary totals while recursively omitting diagnostic and fix row arrays. False `*_truncated` markers are omitted; true markers, other false values, and zero counts remain. It is the preferred agent projection when deciding whether drift exists; remove it only when the affected ids or remediation rows are needed. The public SDK `projectValidateCounts` helper applies the identical projection to an already-computed `ValidateResult`.
918
920
 
919
- By default the human view caps each diagnostic `*_item_ids` list at 5 entries and sets the matching `*_truncated` flag. `--json` **never** truncates those lists (machine consumers always receive the complete arrays), and `--all-affected-ids` (equivalent to `--verbose-diagnostics`) emits the full lists in human mode too — so bulk remediation can pipe every affected id straight into `pm update-many`:
921
+ By default the human view caps each diagnostic `*_item_ids` list at 5 entries and sets the matching `*_truncated` flag. `--json` **never** truncates those lists (machine consumers always receive the complete arrays), and `--all-affected-ids` (equivalent to `--verbose-diagnostics`) emits the full lists in human mode too — so bulk remediation can pipe every affected id straight into `pm update many`:
920
922
 
921
923
  ```bash
922
924
  pm validate --check-metadata --all-affected-ids
@@ -1238,7 +1240,7 @@ Invariants:
1238
1240
  - Promoting a step link preserves its semantic kind. `depends_on` normalizes to the canonical top-level `blocked_by`; `implements` and `verifies` remain first-class directed dependency kinds available to SDK relationship registries and graph consumers.
1239
1241
  - Search keyword corpus includes plan_scope, step titles/bodies, decisions, discoveries, validation, and step linked items.
1240
1242
 
1241
- `pm delete <id> --json` reports an explicit `outcome` (`deleted` or `would_delete`), `deleted` boolean, and `previous_status`. Compact and `--id-only` output use the mutation outcome as `status`, so agents never mistake the deleted item's former lifecycle state for the delete result.
1243
+ `pm close delete <id> --json` reports an explicit `outcome` (`deleted` or `would_delete`), `deleted` boolean, and `previous_status`. Compact and `--id-only` output use the mutation outcome as `status`, so agents never mistake the deleted item's former lifecycle state for the delete result.
1242
1244
 
1243
1245
  ## Machine Contracts
1244
1246
 
@@ -0,0 +1,65 @@
1
+ # Context and operations command namespaces
2
+
3
+ Tracked in [pm-kcs4](../.agents/pm/tasks/pm-kcs4.toon),
4
+ [pm-6apl](../.agents/pm/tasks/pm-6apl.toon), and
5
+ [pm-3i9q8g](../.agents/pm/tasks/pm-3i9q8g.toon).
6
+
7
+ The CLI groups navigation and maintenance under stable nouns. Existing root
8
+ spellings remain executable compatibility aliases with the same arguments,
9
+ results, exit codes, and SDK behavior.
10
+
11
+ | Native invocation | Compatibility spelling | Purpose |
12
+ | --- | --- | --- |
13
+ | `pm context next` | `pm next` | Select ready work and explain blockers |
14
+ | `pm context focus` | `pm focus` | Read, set, or clear the focused item |
15
+ | `pm ops stats` | `pm stats` | Inspect tracker statistics |
16
+ | `pm ops health` | `pm health` | Diagnose tracker health |
17
+ | `pm ops validate` | `pm validate` | Validate metadata and history |
18
+ | `pm ops gc` | `pm gc` | Clean optional cache artifacts |
19
+ | `pm ops telemetry` | `pm telemetry` | Inspect and manage telemetry |
20
+ | `pm ops eval` | `pm eval` | Evaluate retrieval quality |
21
+ | `pm ops test-all` | `pm test-all` | Run selected linked tests |
22
+ | `pm ops reindex` | `pm reindex` | Refresh indexes through search-advanced |
23
+ | `pm ops normalize` | `pm normalize` | Normalize through an active governance package |
24
+ | `pm history events` | `pm events` | Read or follow committed mutation events |
25
+
26
+ `pm context --limit 10 --for orient` still produces a context snapshot.
27
+ `pm history <id> --verify` still reads and verifies one item's history.
28
+ Namespace leaves do not change either default operation.
29
+
30
+ ## Discover only what the current task needs
31
+
32
+ ```bash
33
+ pm context next --limit 5 --ready-only
34
+ pm context focus --id pm-example
35
+ pm ops health --check-only --summary
36
+ pm ops validate --check-history-drift
37
+ pm history events --item pm-example --limit 10
38
+ pm ops --help
39
+ pm contracts --command "ops stats" --flags-only
40
+ ```
41
+
42
+ Help, contracts, and shell completion expose native paths. Compatibility aliases
43
+ remain declared in the SDK alias table. Alias guidance uses the existing
44
+ `ux.deprecation_hints` setting. Human-readable calls emit it on stderr; JSON and
45
+ quiet calls suppress it. Compact contract summaries omit duplicate root alias
46
+ rows; full and explicitly selected contracts retain them. Optional commands appear only when their providing package is active;
47
+ namespace placement does not promote package behavior into core.
48
+
49
+ ## SDK and package integration
50
+
51
+ `PM_NAMESPACED_COMMAND_ALIASES` and `resolvePmCommandOperation` are exported
52
+ from `@unbrained/pm-cli/sdk` and `@unbrained/pm-cli/sdk/contracts`.
53
+ The resolver maps a native path such as `context next` to the existing SDK
54
+ operation identity `next`. Unknown paths are preserved. SDK functions, MCP
55
+ action names, extension activation selectors, and command hooks retain their
56
+ existing operation identities.
57
+
58
+ Packages that provide `reindex` or `normalize` keep their existing command
59
+ registration. The CLI places the registered handler beneath `ops` after
60
+ activation, preserving flags, argument parsing, and nested commands. A conflicting
61
+ native destination fails explicitly instead of silently replacing a handler.
62
+
63
+ Generated Bash, Zsh, and Fish scripts recognize namespace command positions and
64
+ skip global option values when selecting a leaf. Re-generate installed completion
65
+ scripts after upgrading with `pm completion <shell>` from guide-shell.
@@ -0,0 +1,77 @@
1
+ # Lifecycle Commands and Ownership
2
+
3
+ Tracked by [pm-ik19](../.agents/pm/tasks/pm-ik19.toon) and
4
+ [pm-eq4x](../.agents/pm/tasks/pm-eq4x.toon).
5
+
6
+ Bulk mutations and ownership compositions share SDK implementations with their
7
+ compatibility spellings. Runtime help and contracts describe the active surface:
8
+
9
+ ```bash
10
+ pm update many --help
11
+ pm close many --help
12
+ pm close delete --help
13
+ pm contracts --command 'close many' --flags-only --json
14
+ ```
15
+
16
+ ## Command migration
17
+
18
+ | Canonical invocation | Compatibility invocation |
19
+ | --- | --- |
20
+ | `pm update many --ids <ids> --priority 1` | `pm update-many --ids <ids> --priority 1` |
21
+ | `pm close many --ids <ids> --reason "Verified"` | `pm close-many --ids <ids> --reason "Verified"` |
22
+ | `pm close delete <id> --dry-run` | `pm delete <id> --dry-run` |
23
+ | `pm claim <id> --start` | `pm start-task <id>` |
24
+ | `pm release <id> --pause` | `pm pause-task <id>` |
25
+ | `pm close <id> "Verified" --release-assignment` | `pm close-task <id> "Verified"` |
26
+
27
+ The old spellings remain accepted as hidden aliases. Bulk aliases are permanent;
28
+ the three task aliases are deprecated. Human output for deprecated aliases can
29
+ include migration hints according to `ux.deprecation_hints`; JSON and quiet
30
+ invocations suppress those hints. Bulk commands retain their existing filters,
31
+ stdin selection, dry runs, rollback behavior, and evidence flags. Put bulk flags
32
+ after `many`. Deletion recovery remains `pm history restore <id> <version>`.
33
+
34
+ Plain `claim`, `release`, `update`, and `close` keep their original semantics.
35
+ `claim --start` requires an explicit item and rejects `--next` and
36
+ `--if-available` before mutation. It claims ownership, then moves the item to the
37
+ configured in-progress status. `release --pause` moves work to the configured
38
+ open status, then releases ownership. `close --release-assignment` records the
39
+ close and its inline evidence, then releases ownership.
40
+
41
+ Each constituent operation enforces its own policy and writes its own history.
42
+ Compositions do not provide rollback across operations: for example, if the
43
+ status transition fails after a successful claim, the claim remains. Inspect the
44
+ item before retrying after an error.
45
+
46
+ ## SDK and MCP
47
+
48
+ ```ts
49
+ import { PmClient } from "@unbrained/pm-cli/sdk";
50
+
51
+ const pm = new PmClient({ pmRoot: "/project/.agents/pm" });
52
+ const started = await pm.claim("pm-example", { start: true });
53
+ const paused = await pm.release("pm-example", { pause: true });
54
+ const closed = await pm.close("pm-example", "Acceptance verified", {
55
+ releaseAssignment: true,
56
+ resolution: "Implemented the requested behavior",
57
+ expectedResult: "Acceptance checks pass",
58
+ actualResult: "Acceptance checks passed",
59
+ validateClose: "warn",
60
+ });
61
+ ```
62
+
63
+ Literal `true` options return typed `StartTaskResult`, `PauseTaskResult`, or
64
+ `CloseTaskResult` receipts. Their discriminators remain `start_task`,
65
+ `pause_task`, and `close_task`, with the constituent results available under
66
+ `claim`, `update`, `close`, or `release`. Public `runStartTask`, `runPauseTask`, and
67
+ `runCloseTask` primitives expose the same SDK-owned compositions.
68
+
69
+ MCP actions remain `claim`, `release`, and `close`, using `start`, `pause`, and
70
+ `releaseAssignment`. Action-specific discovery types claim's `start` as boolean;
71
+ scheduling actions retain string timestamps. For the broad provider tool schema,
72
+ pass the claim boolean through `options: { start: true }` because its shared flat
73
+ `start` property retains the scheduling string contract. Bulk action names remain
74
+ `update_many`, `close_many`, and `delete` for transport compatibility.
75
+
76
+ See [SDK Lifecycle Policy](SDK_LIFECYCLE.md) for transaction and policy ownership
77
+ and [CLI Scripting Contract](SCRIPTING.md) for output projection.
package/docs/README.md CHANGED
@@ -35,6 +35,7 @@ pm guide release --json
35
35
  - [Onboarding](ONBOARDING.md) - first-two-hours maintainer and contributor setup.
36
36
  - [Agent Guide](AGENT_GUIDE.md) - canonical agent loop, tracker linking, and token-minimal command choices.
37
37
  - [Command Reference](COMMANDS.md) - command families with examples and when to use each family.
38
+ - [Context and Operations Namespaces](COMMAND_NAMESPACES.md) - native navigation, diagnostics, event streams, and compatibility aliases.
38
39
  - [CLI Scripting Contract](SCRIPTING.md) - exit codes, flat mutation receipts versus read envelopes, stdout/stderr boundaries, stable JSON fields, uniform OR filters, and shell composition recipes.
39
40
  - [Configuration](CONFIGURATION.md) - settings, storage formats, output, search, validation, and environment variables.
40
41
  - [Testing](TESTING.md) - sandbox-safe local tests and linked-test orchestration.
@@ -100,6 +101,7 @@ Additional SDK, operations, and generated contracts:
100
101
  - [Item Read Projections](ITEM_READ_PROJECTIONS.md) - identity, projections, and read completeness.
101
102
  - [MCP Capability Surfaces](MCP_CAPABILITY_SURFACES.md) - negotiated MCP discovery contracts.
102
103
  - [PR Review Loop](PR_REVIEW_LOOP.md) - complete review inventories and feedback acknowledgment.
104
+ - [Lifecycle Commands and Ownership](LIFECYCLE_COMMANDS.md) - canonical bulk commands, ownership compositions, and SDK/MCP migration.
103
105
  - [SDK Lifecycle](SDK_LIFECYCLE.md) - lifecycle primitives and package integration.
104
106
  - [SDK Runtime Boundaries](SDK_RUNTIME_BOUNDARIES.md) - runtime ownership and import boundaries.
105
107
  - [Sentry Contract Epochs](SENTRY_CONTRACT_EPOCHS.md) - diagnostic compatibility and release epochs.
@@ -6,12 +6,12 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
6
6
 
7
7
  | Capability family | Commands |
8
8
  | --- | --- |
9
- | workspace | `init`, `config`, `merge`, `schema`, `profile`, `telemetry`, `health`, `gc`, `workspace` |
10
- | intake | `create`, `copy`, `focus`, `restore` |
11
- | context | `list`, `aggregate`, `context`, `get`, `search`, `duplicates`, `eval`, `next`, `activity`, `stats`, `help` |
12
- | lifecycle | `update`, `update-many`, `close`, `close-many`, `delete`, `claim`, `release`, `start-task`, `pause-task`, `close-task` |
13
- | evidence | `history`, `events`, `history-redact`, `history-repair`, `history-compact`, `history-author-acknowledge`, `append`, `comments`, `notes`, `learnings`, `files`, `docs` |
9
+ | workspace | `init`, `config`, `merge`, `schema`, `profile`, `ops telemetry`, `ops health`, `ops gc`, `workspace` |
10
+ | intake | `create`, `copy`, `context focus`, `history restore` |
11
+ | context | `list`, `aggregate`, `context`, `get`, `search`, `duplicates`, `ops eval`, `context next`, `history activity`, `ops stats`, `help` |
12
+ | lifecycle | `update`, `update many`, `close`, `close many`, `close delete`, `claim`, `release` |
13
+ | evidence | `history`, `history events`, `history redact`, `history repair`, `history compact`, `history-author-acknowledge`, `append`, `comments`, `notes`, `learnings`, `files`, `docs` |
14
14
  | graph | `graph`, `deps`, `plan` |
15
- | quality | `test`, `test-all`, `validate`, `assurance`, `contracts` |
15
+ | quality | `test`, `ops test-all`, `ops validate`, `assurance`, `contracts`, `ops` |
16
16
  | automation | `meet`, `event`, `remind` |
17
17
  | extensions | `package` |
@@ -15,6 +15,7 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
15
15
  | `item-reopen` | full | lifecycle |
16
16
  | `copy` | full | intake |
17
17
  | `focus` | standard | intake |
18
+ | `context focus` | standard | intake |
18
19
  | `list` | core | context |
19
20
  | `list-all` | standard | context |
20
21
  | `list-draft` | full | context |
@@ -31,23 +32,34 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
31
32
  | `search` | core | context |
32
33
  | `duplicates` | full | context |
33
34
  | `eval` | full | context |
35
+ | `ops eval` | full | context |
34
36
  | `next` | core | context |
37
+ | `context next` | core | context |
35
38
  | `history` | standard | evidence |
36
39
  | `events` | standard | evidence |
40
+ | `history events` | standard | evidence |
37
41
  | `history-redact` | full | evidence |
42
+ | `history redact` | full | evidence |
38
43
  | `history-repair` | full | evidence |
44
+ | `history repair` | full | evidence |
39
45
  | `history-compact` | full | evidence |
46
+ | `history compact` | full | evidence |
40
47
  | `history-author-acknowledge` | full | evidence |
41
48
  | `merge` | full | workspace |
42
49
  | `schema` | standard | workspace |
43
50
  | `profile` | standard | workspace |
44
51
  | `activity` | full | context |
52
+ | `history activity` | full | context |
45
53
  | `restore` | full | intake |
54
+ | `history restore` | full | intake |
46
55
  | `update` | core | lifecycle |
47
56
  | `update-many` | full | lifecycle |
57
+ | `update many` | full | lifecycle |
48
58
  | `close` | core | lifecycle |
49
59
  | `close-many` | full | lifecycle |
60
+ | `close many` | full | lifecycle |
50
61
  | `delete` | full | lifecycle |
62
+ | `close delete` | full | lifecycle |
51
63
  | `append` | standard | evidence |
52
64
  | `comments` | standard | evidence |
53
65
  | `notes` | standard | evidence |
@@ -58,12 +70,18 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
58
70
  | `plan` | core | graph |
59
71
  | `test` | standard | quality |
60
72
  | `test-all` | full | quality |
73
+ | `ops test-all` | full | quality |
61
74
  | `telemetry` | full | workspace |
75
+ | `ops telemetry` | full | workspace |
62
76
  | `stats` | full | context |
77
+ | `ops stats` | full | context |
63
78
  | `health` | standard | workspace |
79
+ | `ops health` | standard | workspace |
64
80
  | `validate` | core | quality |
81
+ | `ops validate` | core | quality |
65
82
  | `assurance` | full | quality |
66
83
  | `gc` | full | workspace |
84
+ | `ops gc` | full | workspace |
67
85
  | `workspace` | full | workspace |
68
86
  | `contracts` | standard | quality |
69
87
  | `claim` | core | lifecycle |
@@ -75,6 +93,7 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
75
93
  | `event` | full | automation |
76
94
  | `remind` | full | automation |
77
95
  | `help` | core | context |
96
+ | `ops` | core | quality |
78
97
  | `completion-statuses` | internal | internal |
79
98
  | `completion-tags` | internal | internal |
80
99
  | `completion-types` | internal | internal |
@@ -44,7 +44,7 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
44
44
  | `restore` | intake | 23 | 23 |
45
45
  | `update` | lifecycle | 105 | 105 |
46
46
  | `update-many` | lifecycle | 146 | 146 |
47
- | `close` | lifecycle | 31 | 31 |
47
+ | `close` | lifecycle | 32 | 32 |
48
48
  | `close-many` | lifecycle | 72 | 72 |
49
49
  | `delete` | lifecycle | 24 | 24 |
50
50
  | `append` | evidence | 25 | 25 |
@@ -65,8 +65,8 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
65
65
  | `gc` | workspace | 22 | 22 |
66
66
  | `workspace` | workspace | 23 | 23 |
67
67
  | `contracts` | quality | 29 | 29 |
68
- | `claim` | lifecycle | 38 | 38 |
69
- | `release` | lifecycle | 23 | 23 |
68
+ | `claim` | lifecycle | 39 | 39 |
69
+ | `release` | lifecycle | 24 | 24 |
70
70
  | `start-task` | lifecycle | 23 | 23 |
71
71
  | `pause-task` | lifecycle | 23 | 23 |
72
72
  | `close-task` | lifecycle | 24 | 24 |
@@ -74,3 +74,21 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
74
74
  | `event` | automation | 33 | 33 |
75
75
  | `remind` | automation | 29 | 29 |
76
76
  | `test-runs-worker` | internal | 25 | 25 |
77
+ | `history redact` | evidence | 27 | 27 |
78
+ | `history repair` | evidence | 27 | 27 |
79
+ | `history compact` | evidence | 30 | 30 |
80
+ | `history activity` | context | 35 | 35 |
81
+ | `history restore` | intake | 23 | 23 |
82
+ | `context next` | context | 38 | 38 |
83
+ | `context focus` | intake | 22 | 22 |
84
+ | `ops stats` | context | 29 | 29 |
85
+ | `ops health` | workspace | 36 | 36 |
86
+ | `ops validate` | quality | 46 | 46 |
87
+ | `ops gc` | workspace | 22 | 22 |
88
+ | `ops telemetry` | workspace | 21 | 21 |
89
+ | `ops eval` | context | 25 | 25 |
90
+ | `ops test-all` | quality | 40 | 40 |
91
+ | `history events` | evidence | 33 | 33 |
92
+ | `update many` | lifecycle | 146 | 146 |
93
+ | `close many` | lifecycle | 72 | 72 |
94
+ | `close delete` | lifecycle | 24 | 24 |
@@ -11,7 +11,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
11
11
  - Uncovered error codes: 352
12
12
  - Coverage fraction: 0.051213
13
13
  - Closed-domain probes: 19
14
- - Grammar probes: 97
14
+ - Grammar probes: 98
15
15
 
16
16
  | Error code | Canonical code | Disposition | Evidence kinds | Probe count |
17
17
  | --- | --- | --- | --- | --- |
@@ -211,7 +211,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
211
211
  | `missing_parameter_alias` | `missing_parameter_alias` | uncovered | none | 0 |
212
212
  | `missing_positive_execution_receipt` | `missing_positive_execution_receipt` | uncovered | none | 0 |
213
213
  | `missing_probe` | `missing_probe` | uncovered | none | 0 |
214
- | `missing_required_argument` | `missing_required_argument` | executable | grammar | 60 |
214
+ | `missing_required_argument` | `missing_required_argument` | executable | grammar | 61 |
215
215
  | `missing_required_option` | `missing_required_option` | uncovered | none | 0 |
216
216
  | `missing_suggested_retry` | `missing_suggested_retry` | uncovered | none | 0 |
217
217
  | `missing_suggested_retry_args` | `missing_suggested_retry_args` | 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.9"
9
+ "version": "2026.9.10"
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.9",
16
+ "version": "2026.9.10",
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.9",
3
+ "version": "2026.9.10",
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.9",
3
+ "version": "2026.9.10",
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.9",
3
+ "version": "2026.9.10",
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.9",
3
+ "version": "2026.9.10",
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.9",
3
+ "version": "2026.9.10",
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.",
@@ -23,7 +23,7 @@ bodies and full before/after snapshots.
23
23
  - `pm dedupe-audit`
24
24
  - `pm dedupe-merge`
25
25
  - `pm comments-audit`
26
- - `pm normalize`
26
+ - `pm ops normalize`
27
27
 
28
28
  The package also augments existing commands with audit-only flags:
29
29
 
@@ -63,7 +63,7 @@ pm install audit --project
63
63
  pm dedupe-audit --mode parent_scope --status all --limit 20 --json
64
64
  pm dedupe-merge --keep pm-canonical --close pm-duplicate --dry-run --json
65
65
  pm comments-audit --latest 3 --limit-items 20 --limit-rows 50 --json
66
- pm normalize --dry-run --json
66
+ pm ops normalize --dry-run --json
67
67
  ```
68
68
 
69
69
  `dedupe-audit --status all` explicitly selects every status and is equivalent
@@ -80,3 +80,5 @@ For `comments-audit`, `--limit-items` caps item
80
80
  scanning while `--limit-rows` caps emitted comment rows across the whole
81
81
  result. The older `--limit` spelling remains a deprecated alias for
82
82
  `--limit-rows`; do not combine the two row-limit spellings.
83
+
84
+ `pm normalize` remains a compatibility alias for `pm ops normalize`.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-governance-audit",
3
- "version": "2026.9.9",
3
+ "version": "2026.9.10",
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.9",
3
+ "version": "2026.9.10",
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.9",
3
+ "version": "2026.9.10",
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.9",
3
+ "version": "2026.9.10",
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.9",
3
+ "version": "2026.9.10",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for optional linked-test run management adapters and reporters.",