@unbrained/pm-cli 2026.8.16 → 2026.8.18

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 (225) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/AGENTS.md +4 -3
  3. package/CHANGELOG.md +65 -6
  4. package/README.md +16 -16
  5. package/dist/cli/error-guidance.js +7 -4
  6. package/dist/cli/public.d.ts +2 -0
  7. package/dist/cli/public.js +21 -0
  8. package/dist/cli/register-list-query.js +132 -51
  9. package/dist/cli/register-mutation.js +4 -4
  10. package/dist/cli-bundle/bundle-manifest.json +148 -148
  11. package/dist/cli-bundle/chunks/chunk-5UZZAJKR.js +3 -0
  12. package/dist/cli-bundle/chunks/chunk-ALDJGKAK.js +2 -0
  13. package/dist/cli-bundle/chunks/chunk-BSK2IN3C.js +8 -0
  14. package/dist/cli-bundle/chunks/chunk-DY4DMUMC.js +197 -0
  15. package/dist/cli-bundle/chunks/{chunk-73UGEBRS.js → chunk-GNFAFIJI.js} +10 -10
  16. package/dist/cli-bundle/chunks/chunk-L5Q2CLPE.js +35 -0
  17. package/dist/cli-bundle/chunks/{chunk-RIS565OA.js → chunk-PVRUN5ZS.js} +5 -5
  18. package/dist/cli-bundle/chunks/chunk-RZQTVMRQ.js +2 -0
  19. package/dist/cli-bundle/chunks/chunk-SARFF5H5.js +3 -0
  20. package/dist/cli-bundle/chunks/chunk-UYCLQVL2.js +13 -0
  21. package/dist/cli-bundle/chunks/{chunk-URW4QRMI.js → chunk-YRGOLZA7.js} +59 -55
  22. package/dist/cli-bundle/chunks/register-list-query-I23LALEE.js +11 -0
  23. package/dist/cli-bundle/chunks/register-mutation-6YGU3GPH.js +20 -0
  24. package/dist/cli-bundle/chunks/{register-operations-KGDNRMCL.js → register-operations-4HTFC6J7.js} +2 -2
  25. package/dist/cli-bundle/chunks/{register-setup-NVXBOD5I.js → register-setup-PPPEF3SN.js} +2 -2
  26. package/dist/cli-bundle/focused-chunks/chunk-2PN4TJXH.js +2 -0
  27. package/dist/cli-bundle/focused-chunks/{chunk-C7JUBRFP.js → chunk-3TKWMNKF.js} +3 -3
  28. package/dist/cli-bundle/focused-chunks/chunk-5AF3ZBNB.js +155 -0
  29. package/dist/cli-bundle/focused-chunks/chunk-C5IW2NDA.js +2 -0
  30. package/dist/cli-bundle/focused-chunks/{chunk-CODV5LUT.js → chunk-EUEGXZ2A.js} +3 -3
  31. package/dist/cli-bundle/focused-chunks/{chunk-4JPEBFFC.js → chunk-EX6MKP2X.js} +2 -2
  32. package/dist/cli-bundle/focused-chunks/{chunk-SSNDYZTM.js → chunk-K43KKAFS.js} +2 -2
  33. package/dist/cli-bundle/focused-chunks/{chunk-6ROKKT4X.js → chunk-M62NO7EI.js} +2 -2
  34. package/dist/cli-bundle/focused-chunks/{chunk-T46KLOIB.js → chunk-ODOVCP45.js} +47 -47
  35. package/dist/cli-bundle/focused-chunks/chunk-RNDNMARJ.js +16 -0
  36. package/dist/cli-bundle/focused-chunks/chunk-TN4AE665.js +26 -0
  37. package/dist/cli-bundle/focused-chunks/chunk-TVV2DONO.js +2 -0
  38. package/dist/cli-bundle/focused-chunks/chunk-UI6AJ5TD.js +4 -0
  39. package/dist/cli-bundle/focused-chunks/chunk-V5XTGLK7.js +2 -0
  40. package/dist/cli-bundle/focused-chunks/chunk-WGHQVU6P.js +2 -0
  41. package/dist/cli-bundle/focused-chunks/chunk-XYNBXTDQ.js +2 -0
  42. package/dist/cli-bundle/focused-chunks/chunk-Z56ECT7I.js +2 -0
  43. package/dist/cli-bundle/main.js +7 -7
  44. package/dist/cli-bundle/sdk-authoring.js +1 -1
  45. package/dist/cli-bundle/sdk-contracts.js +1 -1
  46. package/dist/cli-bundle/sdk-core.js +31 -31
  47. package/dist/cli-bundle/sdk-governance.js +1 -1
  48. package/dist/cli-bundle/sdk-graph.js +1 -1
  49. package/dist/cli-bundle/sdk-merge.js +32 -32
  50. package/dist/cli-bundle/sdk-query.js +1 -1
  51. package/dist/cli-bundle/sdk-runtime.js +1 -1
  52. package/dist/cli-bundle/sdk-testing.js +1 -1
  53. package/dist/cli-bundle/sdk.js +4 -2
  54. package/dist/core/config/nested-settings.js +8 -2
  55. package/dist/core/extensions/exporter-output-contract.d.ts +12 -0
  56. package/dist/core/extensions/exporter-output-contract.js +67 -0
  57. package/dist/core/extensions/extension-types.d.ts +36 -1
  58. package/dist/core/extensions/extension-types.js +2 -2
  59. package/dist/core/extensions/loader.js +43 -48
  60. package/dist/core/extensions/manifest-schema.d.ts +20 -0
  61. package/dist/core/extensions/manifest-schema.js +52 -0
  62. package/dist/core/history/event-index.d.ts +5 -0
  63. package/dist/core/history/event-index.js +133 -27
  64. package/dist/core/history/replay.js +32 -14
  65. package/dist/core/schema/fields-file.d.ts +1 -1
  66. package/dist/core/schema/fields-file.js +2 -2
  67. package/dist/core/schema/runtime-field-values.js +115 -9
  68. package/dist/core/schema/runtime-schema.d.ts +3 -1
  69. package/dist/core/schema/runtime-schema.js +124 -3
  70. package/dist/core/sentry/helpers.js +3 -3
  71. package/dist/core/shared/constants.js +5 -2
  72. package/dist/core/shared/errors.d.ts +10 -0
  73. package/dist/core/shared/errors.js +2 -2
  74. package/dist/core/shared/time.d.ts +2 -0
  75. package/dist/core/shared/time.js +27 -2
  76. package/dist/core/store/settings-validator.d.ts +4 -0
  77. package/dist/core/store/settings-validator.js +3 -2
  78. package/dist/core/store/settings.js +8 -2
  79. package/dist/mcp/tool-definitions.js +12 -7
  80. package/dist/sdk/agent/refusal-reachability.d.ts +46 -6
  81. package/dist/sdk/agent/refusal-reachability.js +350 -8
  82. package/dist/sdk/authoring.d.ts +1 -1
  83. package/dist/sdk/authoring.js +2 -2
  84. package/dist/sdk/cli-bootstrap.d.ts +2 -2
  85. package/dist/sdk/cli-bootstrap.js +4 -4
  86. package/dist/sdk/cli-contracts/command-aliases.d.ts +34 -2
  87. package/dist/sdk/cli-contracts/command-aliases.js +64 -13
  88. package/dist/sdk/cli-contracts/enum-contracts.d.ts +4 -0
  89. package/dist/sdk/cli-contracts/enum-contracts.js +9 -2
  90. package/dist/sdk/cli-contracts/flag-contracts.js +11 -7
  91. package/dist/sdk/cli-contracts/grammar-contracts.d.ts +70 -0
  92. package/dist/sdk/cli-contracts/grammar-contracts.js +345 -0
  93. package/dist/sdk/cli-contracts/runtime-contracts.d.ts +19 -2
  94. package/dist/sdk/cli-contracts/runtime-contracts.js +61 -14
  95. package/dist/sdk/cli-contracts/tool-parameter-tables.js +10 -4
  96. package/dist/sdk/cli-contracts/tool-schema.d.ts +2 -2
  97. package/dist/sdk/cli-contracts/tool-schema.js +20 -11
  98. package/dist/sdk/cli-contracts.d.ts +2 -2
  99. package/dist/sdk/cli-contracts.js +4 -4
  100. package/dist/sdk/completion.js +13 -15
  101. package/dist/sdk/compose.d.ts +9 -5
  102. package/dist/sdk/compose.js +33 -3
  103. package/dist/sdk/context-intent-contracts.d.ts +8 -4
  104. package/dist/sdk/context-intent-contracts.js +76 -31
  105. package/dist/sdk/contracts.d.ts +1 -0
  106. package/dist/sdk/contracts.js +3 -2
  107. package/dist/sdk/core.d.ts +1 -1
  108. package/dist/sdk/core.js +3 -3
  109. package/dist/sdk/dependency-flag-validation.d.ts +9 -2
  110. package/dist/sdk/dependency-flag-validation.js +101 -35
  111. package/dist/sdk/environment/host-environment-errors.js +25 -7
  112. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +78 -14
  113. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +62 -14
  114. package/dist/sdk/governance/assurance-action.d.ts +3 -7
  115. package/dist/sdk/governance/assurance-action.js +97 -2
  116. package/dist/sdk/governance/boundary-fixtures.d.ts +86 -0
  117. package/dist/sdk/governance/boundary-fixtures.js +201 -0
  118. package/dist/sdk/governance/defect-recurrence-signals.d.ts +10 -0
  119. package/dist/sdk/governance/defect-recurrence-signals.js +25 -0
  120. package/dist/sdk/governance/defect-recurrence.d.ts +242 -0
  121. package/dist/sdk/governance/defect-recurrence.js +523 -0
  122. package/dist/sdk/governance.d.ts +2 -0
  123. package/dist/sdk/governance.js +4 -2
  124. package/dist/sdk/graph/governance.js +3 -2
  125. package/dist/sdk/guide-topics.js +193 -4
  126. package/dist/sdk/index.d.ts +7 -3
  127. package/dist/sdk/index.js +8 -5
  128. package/dist/sdk/init-agent-guidance.js +3 -3
  129. package/dist/sdk/lifecycle/create.js +4 -2
  130. package/dist/sdk/lifecycle/update-many.js +15 -2
  131. package/dist/sdk/lifecycle/update.js +5 -2
  132. package/dist/sdk/linked-artifacts.js +63 -14
  133. package/dist/sdk/mutation-events.d.ts +18 -2
  134. package/dist/sdk/mutation-events.js +59 -16
  135. package/dist/sdk/output.d.ts +44 -0
  136. package/dist/sdk/output.js +28 -2
  137. package/dist/sdk/query/complete-list.d.ts +94 -0
  138. package/dist/sdk/query/complete-list.js +173 -0
  139. package/dist/sdk/query/get.d.ts +2 -0
  140. package/dist/sdk/query/get.js +32 -7
  141. package/dist/sdk/query/list.js +5 -2
  142. package/dist/sdk/query.d.ts +1 -0
  143. package/dist/sdk/query.js +3 -2
  144. package/dist/sdk/read-output-contracts.d.ts +2 -2
  145. package/dist/sdk/read-output-contracts.js +36 -9
  146. package/dist/sdk/relationship-analytics.js +90 -14
  147. package/dist/sdk/relationship-kinds/contract.d.ts +4 -0
  148. package/dist/sdk/relationship-kinds/contract.js +3 -2
  149. package/dist/sdk/relationships.d.ts +1 -1
  150. package/dist/sdk/relationships.js +11 -2
  151. package/dist/sdk/runtime-extended-actions.js +10 -2
  152. package/dist/sdk/runtime.d.ts +8 -2
  153. package/dist/sdk/runtime.js +11 -8
  154. package/dist/sdk/schema.d.ts +1 -0
  155. package/dist/sdk/schema.js +2 -2
  156. package/dist/sdk/test/execution.d.ts +6 -2
  157. package/dist/sdk/test/execution.js +39 -13
  158. package/dist/types.d.ts +34 -2
  159. package/dist/types.js +4 -2
  160. package/docs/AGENT_GUIDE.md +25 -9
  161. package/docs/CLI_GRAMMAR.md +106 -0
  162. package/docs/COMMANDS.md +23 -23
  163. package/docs/CONFIGURATION.md +58 -1
  164. package/docs/CONTEXT_INTEGRITY_CONTRACTS.md +58 -0
  165. package/docs/DEFECT_RECURRENCE.md +134 -0
  166. package/docs/DEPENDENCY_KIND_CONTRACT.md +12 -2
  167. package/docs/ONBOARDING.md +4 -4
  168. package/docs/QUICKSTART.md +1 -1
  169. package/docs/README.md +4 -0
  170. package/docs/RELATIONSHIP_GRAPH.md +16 -2
  171. package/docs/RELEASING.md +30 -6
  172. package/docs/SDK.md +74 -7
  173. package/docs/SDK_ARTIFACT_OUTPUT.md +72 -0
  174. package/docs/SDK_CONTEXT_COORDINATION.md +46 -12
  175. package/docs/SDK_RUNTIME_BOUNDARIES.md +9 -1
  176. package/docs/TESTING.md +18 -1
  177. package/docs/TRUSTWORTHY_CONTEXT_EVIDENCE.md +1 -1
  178. package/docs/agent-task-token-baseline.json +5 -5
  179. package/marketplace.json +2 -2
  180. package/package.json +8 -5
  181. package/packages/pm-beads/package.json +1 -1
  182. package/packages/pm-calendar/package.json +1 -1
  183. package/packages/pm-command-kit/package.json +1 -1
  184. package/packages/pm-digital-twin/package.json +1 -1
  185. package/packages/pm-governance-audit/package.json +1 -1
  186. package/packages/pm-guide-shell/package.json +1 -1
  187. package/packages/pm-kanban/package.json +1 -1
  188. package/packages/pm-lifecycle-hooks/package.json +1 -1
  189. package/packages/pm-linked-test-adapters/package.json +1 -1
  190. package/packages/pm-search-advanced/package.json +1 -1
  191. package/packages/pm-templates/package.json +1 -1
  192. package/packages/pm-todos/package.json +1 -1
  193. package/packages/pm-vcs/package.json +1 -1
  194. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  195. package/plugins/pm-claude/skills/pm-audit/SKILL.md +26 -0
  196. package/plugins/pm-claude/skills/pm-developer/SKILL.md +26 -0
  197. package/plugins/pm-claude/skills/pm-planner/SKILL.md +26 -0
  198. package/plugins/pm-claude/skills/pm-release/SKILL.md +26 -0
  199. package/plugins/pm-claude/skills/pm-workflow/SKILL.md +26 -0
  200. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  201. package/plugins/pm-codex/skills/pm-auditor/SKILL.md +26 -0
  202. package/plugins/pm-codex/skills/pm-native/SKILL.md +26 -0
  203. package/plugins/pm-codex/skills/pm-release/SKILL.md +26 -0
  204. package/sdk/public-surface.json +1243 -54
  205. package/dist/cli-bundle/chunks/chunk-47OQEOQB.js +0 -2
  206. package/dist/cli-bundle/chunks/chunk-HCIYWD6M.js +0 -35
  207. package/dist/cli-bundle/chunks/chunk-I2LUWWR5.js +0 -3
  208. package/dist/cli-bundle/chunks/chunk-IC5W2T34.js +0 -2
  209. package/dist/cli-bundle/chunks/chunk-OAC5NIV4.js +0 -3
  210. package/dist/cli-bundle/chunks/chunk-PANOOBIS.js +0 -13
  211. package/dist/cli-bundle/chunks/chunk-TK6N7HGM.js +0 -8
  212. package/dist/cli-bundle/chunks/chunk-TOFG2URD.js +0 -197
  213. package/dist/cli-bundle/chunks/register-list-query-EYCXHZAG.js +0 -10
  214. package/dist/cli-bundle/chunks/register-mutation-7YVIG54J.js +0 -20
  215. package/dist/cli-bundle/focused-chunks/chunk-5NMFSX26.js +0 -155
  216. package/dist/cli-bundle/focused-chunks/chunk-725JSCMP.js +0 -2
  217. package/dist/cli-bundle/focused-chunks/chunk-DQ6SMTBF.js +0 -2
  218. package/dist/cli-bundle/focused-chunks/chunk-HAACPSUW.js +0 -2
  219. package/dist/cli-bundle/focused-chunks/chunk-J4UFYHOD.js +0 -2
  220. package/dist/cli-bundle/focused-chunks/chunk-JX5Z344Q.js +0 -2
  221. package/dist/cli-bundle/focused-chunks/chunk-L4RDYBIQ.js +0 -2
  222. package/dist/cli-bundle/focused-chunks/chunk-NJ5RLEFD.js +0 -26
  223. package/dist/cli-bundle/focused-chunks/chunk-QYZERYR5.js +0 -4
  224. package/dist/cli-bundle/focused-chunks/chunk-TZATVC4G.js +0 -16
  225. package/dist/cli-bundle/focused-chunks/chunk-WY3WRPVN.js +0 -2
@@ -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.8.16"
9
+ "version": "2026.8.18"
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.8.16",
16
+ "version": "2026.8.18",
17
17
  "author": {
18
18
  "name": "unbrained",
19
19
  "url": "https://github.com/unbraind/pm-cli"
package/AGENTS.md CHANGED
@@ -63,8 +63,8 @@ For real repository tracking, do not override `PM_PATH`. If a script must target
63
63
  ```bash
64
64
  pm context --limit 10
65
65
  pm search "<request keywords>" --limit 10
66
- pm list-open --limit 20
67
- pm list-in-progress --limit 20
66
+ pm list --status open --limit 20
67
+ pm list --status in_progress --limit 20
68
68
  pm create --create-mode progressive --title "..." --description "..." --type Task --status open
69
69
  pm claim <id>
70
70
  pm update <id> --status in_progress --message "Start implementation"
@@ -82,12 +82,13 @@ Author identity is automatic; use `--author` only for an explicit override.
82
82
 
83
83
  ## Working Rules
84
84
 
85
- - **Orient:** run `pm context`, `pm search`, `pm list-open`, and `pm list-in-progress` before `pm create`. If net-new work is required, create or reuse the parent lineage first and record duplicate-check evidence in a create-time comment.
85
+ - **Orient:** run `pm context`, `pm search`, `pm list --status open`, and `pm list --status in_progress` before `pm create`. If net-new work is required, create or reuse the parent lineage first and record duplicate-check evidence in a create-time comment.
86
86
  - **Verify before you claim:** the verification recipe for the Non-Negotiable above. A `closed` item whose `resolution`/`close_reason` describes the fix represents completed, shipped work — never describe it as outstanding. Confirm release/CI/infra status against the live system, e.g. `pm get pm-9gxi`, `npm view @unbrained/pm-cli version`, `gh release list`, `gh run list --workflow=auto-release.yml`.
87
87
  - **Implement:** keep edits scoped to the claimed item. Link changed files with `pm files`, docs with `pm docs`, and runnable verification with `pm test`.
88
88
  - **Record:** use `pm comments`, `pm notes`, and `pm learnings` for progress, rationale, and durable lessons. Prefer append-style updates over rewriting item content.
89
89
  - **Verify:** use sandbox-safe commands. For documentation-only work, run at least `pnpm build` and a focused link/content check. For broader work, run linked tests, coverage, validation, and release gates as appropriate.
90
90
  - **Close:** add evidence first, then `pm close <id> "<reason>" --validate-close warn`, then `pm release <id>`.
91
+ - **Land closeout through review:** tracker evidence, item closure, and the generated changelog are part of the reviewed delivery. Never push post-merge closeout commits directly to `main`; if evidence depends on the merge SHA, carry it in a normal `main`-based follow-up PR so the new head retains analyzer provenance. See [Releasing](docs/RELEASING.md#reviewed-delivery-closeout).
91
92
 
92
93
  ## Test Safety
93
94
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,66 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.8.18 - 2026-08-18
4
+
5
+ ### Added
6
+
7
+ - Alias shim layer: config-aware hidden aliases with one-line migration hints (foundation for all consolidations) ([pm-0z7n](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-0z7n.toon))
8
+
9
+ ### Fixed
10
+
11
+ - A commit pushed directly to the default branch can never be released: both analyzer-evidence fallbacks presuppose a pull request, and nothing declares that precondition ([pm-u1baah](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-u1baah.toon))
12
+ - GH-1052: typed fail-closed whole-list SDK primitive ([pm-y4aaol](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-y4aaol.toon))
13
+ - Packed Bun SDK import fails on node:module stripTypeScriptTypes ([pm-ikj8ve](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-ikj8ve.toon))
14
+ - GH-1051: package catalog rejects universal output-budget controls ([pm-2firut](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-2firut.toon))
15
+ - Bun event streaming falls back to authoritative history without node:sqlite ([pm-b8hwfr](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-b8hwfr.toon))
16
+ - Surface replication gate scopes trigger activation to relevant diff content ([pm-mrhwow](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-mrhwow.toon))
17
+ - CodeQL: remove generated-code artifact path interpolation from exporter integration harness ([pm-ozxkm2](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-ozxkm2.toon))
18
+ - Exporter artifact-channel contract: clean stdout, bounded receipts, and binary-safe streaming ([pm-dilou2](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-dilou2.toon))
19
+ - GH-1048: Windows Node 24 numeric EDQUOT fixtures construct NaN on platforms that do not declare that errno ([pm-y4kovm](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-y4kovm.toon))
20
+ - Queued daily releases recognize an already-published same-day release before analyzer provenance ([pm-dm2vfz](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-dm2vfz.toon))
21
+
22
+ ### Security
23
+
24
+ - Adopt Dependabot PR \#1046 pinned CodeQL 4.37.7 and TruffleHog 3.97.0 refresh ([pm-pp6al9](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-pp6al9.toon))
25
+
26
+ ### Deprecated
27
+
28
+ - ADR: noun-verb CLI grammar — accepted consolidation principles and alias-preserving deprecation policy ([pm-pbyu](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/decisions/pm-pbyu.toon))
29
+
30
+ ### Other
31
+
32
+ - Command-grammar conformance gate: the noun-verb table and shared verb vocabulary become machine-checked contracts a non-conforming command cannot pass ([pm-wt43zj](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-wt43zj.toon))
33
+ - Consolidate the 8 list-\* status variants into pm list --status (list-all/open/draft/in-progress/blocked/closed/canceled become hidden aliases) ([pm-pfqi](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-pfqi.toon))
34
+ - Command-destination census: 14 of 76 canonical commands have no declared home in the target grammar, so the surface can be frozen with its shape still undecided ([pm-yy8rmx](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-yy8rmx.toon))
35
+ - Half of the pm events payload is per-row resume cursors an agent never reads: 48 percent of stream bytes buy a capability consumed once per batch ([pm-ez1dfg](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-ez1dfg.toon))
36
+
37
+ ## 2026.8.17 - 2026-08-17
38
+
39
+ ### Added
40
+
41
+ - History-derived defect recurrence gate: turn resolved incident patterns into targeted local and hosted CI protections ([pm-1qkivy](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-1qkivy.toon))
42
+ - Agent skills routed to a workflow loop but named no capability family and no read-cost, so four of twelve command families and the entire output-budget surface were unreachable through progressive disclosure ([pm-f6zjpq](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-f6zjpq.toon))
43
+
44
+ ### Fixed
45
+
46
+ - Linked tests retain high-volume Vitest output without aborting ([pm-giks4s](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-giks4s.toon))
47
+ - A declared context intent returns no context when combined with the narrowing flag, and its refusal receipt reports 122 tokens against a 2400 budget as the reason it does not fit ([pm-3crymx](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-3crymx.toon))
48
+ - The relationship lexicon cannot express recurrence, so a defect family fixed thirty times is thirty unrelated nodes to every graph algorithm ([pm-ouyq3n](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-ouyq3n.toon))
49
+ - The gate contributors run before merging fails on every Claude Code workstation and passes on the runner for the same tree, because a harness probe writes advisory warnings into the surface the token budget measures ([pm-95h7pg](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-95h7pg.toon))
50
+ - The public-surface gate enumerates its own hand-written entrypoint list, so two published code exports ship ungoverned and ./cli publishes 86 internal functions as typed API ([pm-suhxny](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-suhxny.toon))
51
+ - GH-1033: read fields selectors can erase identity and requested empty collections ([pm-4fwgaz](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-4fwgaz.toon))
52
+ - GH-1036/GH-1040: history integrity verdicts and repairs are incompatible across supported CLI versions ([pm-0wfdim](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-0wfdim.toon))
53
+ - GH-1032: extension manifests silently accept unenforced version-floor spellings ([pm-qqoumq](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-qqoumq.toon))
54
+ - GH-1038: docs linked-resource pair syntax corrupts URLs and splits labeled entries ([pm-fpdk37](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-fpdk37.toon))
55
+ - GH-1039: graph impact discards dependency direction and makes the direction selector inert ([pm-jn1x30](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-jn1x30.toon))
56
+
57
+ ### Other
58
+
59
+ - Decision: adopt reviewed defect-evidence field constraints into audited workspace history ([pm-4smp5b](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/decisions/pm-4smp5b.toon))
60
+ - Defect-escape ratchet: every escaped defect must land a gate that would have caught it, tracked as evidence on the fixing item ([pm-rtn5h6](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-rtn5h6.toon))
61
+ - Boundary-fixture gate: every value that must match a system outside this repository is tested against a captured real sample, never against a fixture the production code generated ([pm-0pzgit](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-0pzgit.toon))
62
+ - Disposition the test-only escape hatch published through the ./cli entrypoint: 86 internal functions are consumer-visible API with no support intent ([pm-rf120g](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-rf120g.toon))
63
+
3
64
  ## 2026.8.16 - 2026-08-16
4
65
 
5
66
  ### Fixed
@@ -10,7 +71,6 @@
10
71
  - GH-1028: history-author-acknowledge bulk mutation lacks dry-run and misreports empty selection ([pm-mcxk8v](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-mcxk8v.toon))
11
72
  - GH-1030: contracts --json --full is wholly omitted by the default output budget ([pm-2qvq7a](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-2qvq7a.toon))
12
73
  - Auto Release blocker closure ignores successful recovery dispatch and reruns the stale tag-push workflow ([pm-db8onn](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-db8onn.toon))
13
- - A commit pushed directly to the default branch can never be released: both analyzer-evidence fallbacks presuppose a pull request, and nothing declares that precondition ([pm-u1baah](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-u1baah.toon))
14
74
 
15
75
  ### Other
16
76
 
@@ -25,7 +85,6 @@
25
85
  - Provide an audited repair and severity-migration contract for legacy invalid provenance ([pm-76fkpp](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-76fkpp.toon))
26
86
  - Detect extension-host pm-cli version skew before a workspace reports healthy ([pm-643e0k](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-643e0k.toon))
27
87
  - Restore strict unknown-key parity for docs linked-artifact additions ([pm-22rzjp](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-22rzjp.toon))
28
- - Surface replication gate scopes trigger activation to relevant diff content ([pm-mrhwow](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-mrhwow.toon))
29
88
  - Make every failing health verdict self-indexing and attach gate severity to findings ([pm-larv4r](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-larv4r.toon))
30
89
  - GH-1004: history-repair remains writer-version-specific across 2026.8.7 and 2026.8.13 ([pm-igdvfq](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-igdvfq.toon))
31
90
  - Assurance gates preserve zero-valued counts and report actionable source failures ([pm-xmmafu](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-xmmafu.toon))
@@ -942,10 +1001,10 @@
942
1001
 
943
1002
  ### Fixed
944
1003
 
1004
+ - Sentry no longer captures deliberate Ctrl+C/Ctrl+D interrupts as error-level events (AbortError, PM-CLI-27) ([pm-ksv2](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-ksv2.toon))
945
1005
  - pm get --full omits children for Plan parents while pm list --parent returns them ([pm-y4z5](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-y4z5.toon))
946
1006
  - Intentional package CommandError outcomes create high-severity Sentry issues (PM-CLI-16) ([pm-7071](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-7071.toon))
947
1007
  - Extension install self-copy guard: reject source-inside-destination layouts before fs.cp EINVAL (PM-CLI-28) ([pm-8myl](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-8myl.toon))
948
- - Sentry captures deliberate Ctrl+C interrupts as error-level events (AbortError, PM-CLI-27) ([pm-ksv2](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-ksv2.toon))
949
1008
  - Torn-install bundle transients block scheduled releases: boot-time chunk-integrity self-check + distinct error code for gate classification ([pm-wfvq](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-wfvq.toon))
950
1009
  - GH-446: pm get omits schedule facet (events/start_at/end_at/location) for Meeting/Event/Reminder ([pm-x1g5](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-x1g5.toon))
951
1010
  - GH-533: create/update accept empty --title — required-title contract inconsistent between omitted and empty string ([pm-7je0](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-7je0.toon))
@@ -1269,12 +1328,12 @@
1269
1328
 
1270
1329
  ### Fixed
1271
1330
 
1331
+ - GH-363: Windows nightly (Node 24) red — runtime-loader colon-path + telemetry detached-spawn unhandled error + npm-install regression ([pm-xaib](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-xaib.toon))
1272
1332
  - pm validate --check-files mis-handles remote (URL) doc/file references: flagged as deleted and silently destroyed by --prune-missing ([pm-k2n4](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-k2n4.toon))
1273
1333
  - pm next hides completed-container closeout rows while leaf work exists ([pm-9g87](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-9g87.toon))
1274
1334
  - MCP action-schema contracts drifted from CLI flag tables (guide.list, health.brief, validate.parentCycleSeverity, contracts.full) ([pm-zx13](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-zx13.toon))
1275
1335
  - describeExtensionBlueprint omits importer/exporter-with-options command definitions (parity gap vs describeExtensionActivation) ([pm-zqes](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-zqes.toon))
1276
1336
  - Contracts command lookup should handle package namespace roots ([pm-y1o4](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-y1o4.toon))
1277
- - GH-363: Windows nightly (Node 24) red — runtime-loader colon-path + telemetry detached-spawn unhandled error + npm-install regression ([pm-xaib](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-xaib.toon))
1278
1337
  - CI: make Codecov badge uploads branch-explicit ([pm-x878](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-x878.toon))
1279
1338
  - deriveExtensionCapabilities omits 'schema' for importer/exporter options.flags (declarative blueprint under-grant) ([pm-v3ty](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-v3ty.toon))
1280
1339
  - pm install does not scaffold extension-contributed item-type folders (transient missing_directory health warning) ([pm-rjab](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-rjab.toon))
@@ -1502,6 +1561,7 @@
1502
1561
 
1503
1562
  ### Fixed
1504
1563
 
1564
+ - PR \#266 review feedback: tighten init and dynamic option validation ([pm-at1j](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-at1j.toon))
1505
1565
  - pm templates: unknown subcommand + flags silently fall back to 'list' (exit 0) instead of erroring ([pm-r2kd](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-r2kd.toon))
1506
1566
  - linked-test-adapters package install loses ESM module type ([pm-v8fy](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-v8fy.toon))
1507
1567
  - GH-215: enforce timestamps in history entries ([pm-u42x](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-u42x.toon))
@@ -1511,7 +1571,6 @@
1511
1571
  - GH-262: prevent path-like pm init from corrupting caller tracker settings ([pm-jek2](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-jek2.toon))
1512
1572
  - GH-284: align pm init required schema directories with health ([pm-hl9y](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-hl9y.toon))
1513
1573
  - CI contracts snapshot temp cleanup can fail with ENOTEMPTY ([pm-c61g](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-c61g.toon))
1514
- - PR \#266 review feedback: tighten init and dynamic option validation ([pm-at1j](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-at1j.toon))
1515
1574
  - GH-265: schema unknown subcommands must not create custom types ([pm-ablm](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-ablm.toon))
1516
1575
  - GH-280: pm validate does not detect circular parent references (hierarchy cycles A-\>B-\>A of any length) ([pm-8vul](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-8vul.toon))
1517
1576
  - Auto Release retries branch push after main advances ([pm-5oti](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-5oti.toon))
@@ -2709,6 +2768,7 @@
2709
2768
 
2710
2769
  ### Security
2711
2770
 
2771
+ - Ignore local .env files for telemetry/security operations ([pm-qgvj](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-qgvj.toon))
2712
2772
  - Track GitHub Dependabot alert \#8 for undici (GHSA-wqq4-5wpv-mx2g) ([pm-v6vi](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-v6vi.toon))
2713
2773
  - Track GitHub Dependabot alert \#11 for undici (GHSA-9qxr-qj54-h672) ([pm-tl4d](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-tl4d.toon))
2714
2774
  - Track GitHub Dependabot alert \#12 for undici (GHSA-cxrh-j4jr-qwg3) ([pm-pagj](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-pagj.toon))
@@ -2729,7 +2789,6 @@
2729
2789
  - Track GitHub Dependabot alert \#27 for undici (GHSA-4992-7rv2-5pvq) ([pm-02c4](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-02c4.toon))
2730
2790
  - Issue: Private IP address in committed pm task files ([pm-xk8b](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-xk8b.toon))
2731
2791
  - Track GitHub Dependabot alert \#19 for undici (GHSA-f269-vfmq-vjvj) ([pm-rb9v](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-rb9v.toon))
2732
- - Ignore local .env files for telemetry/security operations ([pm-qgvj](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-qgvj.toon))
2733
2792
  - Track GitHub Dependabot alert \#22 for undici (GHSA-vrm6-8vpv-qv8q) ([pm-i1rm](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-i1rm.toon))
2734
2793
  - Track GitHub Dependabot alert \#21 for undici (GHSA-4992-7rv2-5pvq) ([pm-cg7l](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-cg7l.toon))
2735
2794
  - Track GitHub Dependabot alert \#29 for picomatch (GHSA-3v7f-55p6-f55p) ([pm-5e88](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-5e88.toon))
package/README.md CHANGED
@@ -21,19 +21,19 @@
21
21
 
22
22
  ## Start Here
23
23
 
24
- | Need | Read |
25
- | -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
26
- | Install and create the first item | [Quickstart](docs/QUICKSTART.md) |
27
- | New maintainer onboarding | [Onboarding](docs/ONBOARDING.md) |
28
- | Agent workflow and token-minimal loops | [Agent Guide](docs/AGENT_GUIDE.md) |
29
- | Command families and examples | [Command Reference](docs/COMMANDS.md) |
30
- | Shell, CI, and machine-client composition | [CLI Scripting Contract](docs/SCRIPTING.md) |
31
- | Settings, storage, search, and output | [Configuration](docs/CONFIGURATION.md) |
32
- | Safe test execution and linked tests | [Testing](docs/TESTING.md) |
33
- | Security reporting and resilience controls | [Security Policy](SECURITY.md), [Security Governance](docs/SECURITY_GOVERNANCE.md) |
34
- | Package and extension authoring | [Packages and Extensions](docs/EXTENSIONS.md), [SDK](docs/SDK.md), [Customization Primitives](docs/SDK_CUSTOMIZATION_PRIMITIVES.md), [Evidence Traceability](docs/SDK_EVIDENCE_TRACEABILITY.md), and [Agent Runtime Primitives](docs/AGENT_RUNTIME_PRIMITIVES.md) |
35
- | Maintainer release process (daily auto-release + local parity) | [Releasing](docs/RELEASING.md) |
36
- | Contributor internals | [Architecture](docs/ARCHITECTURE.md) |
24
+ | Need | Read |
25
+ | -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
26
+ | Install and create the first item | [Quickstart](docs/QUICKSTART.md) |
27
+ | New maintainer onboarding | [Onboarding](docs/ONBOARDING.md) |
28
+ | Agent workflow and token-minimal loops | [Agent Guide](docs/AGENT_GUIDE.md) |
29
+ | Command families and examples | [Command Reference](docs/COMMANDS.md) |
30
+ | Shell, CI, and machine-client composition | [CLI Scripting Contract](docs/SCRIPTING.md) |
31
+ | Settings, storage, search, and output | [Configuration](docs/CONFIGURATION.md) |
32
+ | Safe test execution and linked tests | [Testing](docs/TESTING.md) |
33
+ | Security reporting and resilience controls | [Security Policy](SECURITY.md), [Security Governance](docs/SECURITY_GOVERNANCE.md) |
34
+ | Package and extension authoring | [Packages and Extensions](docs/EXTENSIONS.md), [SDK](docs/SDK.md), [Context Integrity](docs/CONTEXT_INTEGRITY_CONTRACTS.md), [Customization Primitives](docs/SDK_CUSTOMIZATION_PRIMITIVES.md), [Evidence Traceability](docs/SDK_EVIDENCE_TRACEABILITY.md), and [Agent Runtime Primitives](docs/AGENT_RUNTIME_PRIMITIVES.md) |
35
+ | Maintainer release process (daily auto-release + local parity) | [Releasing](docs/RELEASING.md) |
36
+ | Contributor internals | [Architecture](docs/ARCHITECTURE.md) |
37
37
 
38
38
  Full documentation starts at [docs/README.md](docs/README.md).
39
39
 
@@ -84,7 +84,7 @@ pm create \
84
84
  --ac "Restore succeeds after stale lock cleanup and has regression coverage." \
85
85
  --create-mode progressive
86
86
 
87
- pm list-open --limit 10
87
+ pm list --status open --limit 10
88
88
  pm claim <item-id>
89
89
  pm update <item-id> --status in_progress --message "Start implementation"
90
90
  pm files <item-id> --add path=src/core/lock/lock.ts
@@ -102,8 +102,8 @@ Use `pm next` to get the single highest-priority ready item (and why), or `pm co
102
102
  pm next # the next actionable item + rationale, ready/blocked queues
103
103
  pm context --limit 10
104
104
  pm search "keywords for the requested work" --limit 10
105
- pm list-open --limit 20
106
- pm list-in-progress --limit 20
105
+ pm list --status open --limit 20
106
+ pm list --status in_progress --limit 20
107
107
  ```
108
108
 
109
109
  If no relevant item exists, create a parent lineage before child work, claim the child item, link changed files/docs/tests, and leave evidence comments before closing. The full workflow is in the [Agent Guide](docs/AGENT_GUIDE.md).
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5251395b-715a-5559-a7d5-ca3bc4a1bb16")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="763daf66-1309-50bc-8783-8c232e4d690d")}catch(e){}}();
3
3
  import { resolveRecoveryCommandName } from "../sdk/agent/command-recovery.js";
4
4
  import { renderPmCommand } from "./argv-utils.js";
5
5
  import { discoverNearbyPmRoot } from "../sdk/tracker-root-discovery.js";
@@ -483,7 +483,7 @@ function buildItemNotFoundGuidance(rawMessage, message, context) {
483
483
  const nextSteps = isPlaceholder
484
484
  ? [
485
485
  "Check that the variable holding the item ID is defined before passing it to pm.",
486
- 'Use "pm list-open --limit 20" to find valid IDs.',
486
+ 'Use "pm list --status open --limit 20" to find valid IDs.',
487
487
  ]
488
488
  : ["Confirm the active --path/PM_PATH scope, then retry with a valid id."];
489
489
  return applyPmCliErrorContext(makeGuidanceMessage({
@@ -492,7 +492,10 @@ function buildItemNotFoundGuidance(rawMessage, message, context) {
492
492
  happened,
493
493
  required: "Use an existing item ID from current tracker data.",
494
494
  why: "Mutation and read commands operate only on known IDs.",
495
- examples: ["pm list-open --limit 20", 'pm search "<keyword>" --limit 10'],
495
+ examples: [
496
+ "pm list --status open --limit 20",
497
+ 'pm search "<keyword>" --limit 10',
498
+ ],
496
499
  nextSteps,
497
500
  }), rawMessage, context);
498
501
  }
@@ -1237,4 +1240,4 @@ export const _testOnly = {
1237
1240
  resolveKnownPackageCommandHint,
1238
1241
  };
1239
1242
  //# sourceMappingURL=error-guidance.js.map
1240
- //# debugId=5251395b-715a-5559-a7d5-ca3bc4a1bb16
1243
+ //# debugId=763daf66-1309-50bc-8783-8c232e4d690d
@@ -0,0 +1,2 @@
1
+ /** Run one embedded CLI invocation without leaking its exit status into the host process. */
2
+ export declare function runPmCli(rawArgv?: string[]): Promise<void>;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @module cli/public
3
+ *
4
+ * Publishes the supported embeddable CLI entrypoint without exposing the
5
+ * implementation module's repository-only test seams to package consumers.
6
+ */
7
+
8
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="8e212bdf-7568-54dd-91aa-7de146d65d03")}catch(e){}}();
9
+ import { runPmCli as runInternalPmCli } from "./main.js";
10
+ /** Run one embedded CLI invocation without leaking its exit status into the host process. */
11
+ export async function runPmCli(rawArgv) {
12
+ const previousExitCode = process.exitCode;
13
+ try {
14
+ await runInternalPmCli(rawArgv);
15
+ }
16
+ finally {
17
+ process.exitCode = previousExitCode;
18
+ }
19
+ }
20
+ //# sourceMappingURL=public.js.map
21
+ //# debugId=8e212bdf-7568-54dd-91aa-7de146d65d03
@@ -1,10 +1,11 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0bcbdc33-3145-54cc-b4b6-10df50aef57a")}catch(e){}}();
3
- import { EXIT_CODE, PmCliError, renderRowsAsCsv, renderRowsAsTable, } from "../sdk/runtime-primitives.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7bcf441b-e211-535f-9502-5624add292e5")}catch(e){}}();
3
+ import { EXIT_CODE, PmCliError, readSettings, renderRowsAsCsv, renderRowsAsTable, resolvePmRoot, } from "../sdk/runtime-primitives.js";
4
+ import { renderPmCommandAliasMigrationHint, resolvePmCommandAlias, } from "../sdk/cli-contracts.js";
4
5
  import { EVAL_QUERY_SET_SCHEMA_ID } from "../sdk/eval.js";
5
6
  import { applyContextIntentProjection } from "../sdk/context-intent-contracts.js";
6
- import { serializeNdjsonRows } from "../sdk/output.js";
7
- import { listMutationEvents, subscribeMutationEvents, } from "../sdk/mutation-events.js";
7
+ import { serializeNdjsonRows, serializeNdjsonStream, } from "../sdk/output.js";
8
+ import { listMutationEvents, subscribeMutationEventBatches, subscribeMutationEvents, } from "../sdk/mutation-events.js";
8
9
  import { runActivity } from "./commands/activity.js";
9
10
  import { runAggregate } from "./commands/aggregate.js";
10
11
  import { renderContextMarkdown, runContext, resolveContextOutputFormat, } from "./commands/context.js";
@@ -103,6 +104,14 @@ function registerContentAndGovernanceFilters(command) {
103
104
  .option("--filter-sprint-missing", "Show only items missing sprint")
104
105
  .option("--filter-release-missing", "Show only items missing release");
105
106
  }
107
+ const CANONICAL_LIST_STATUS_VARIANTS = {
108
+ draft: { name: "list-draft", dependencyBlocked: false },
109
+ open: { name: "list-open", dependencyBlocked: false },
110
+ in_progress: { name: "list-in-progress", dependencyBlocked: false },
111
+ blocked: { name: "list-blocked", dependencyBlocked: true },
112
+ closed: { name: "list-closed", dependencyBlocked: false },
113
+ canceled: { name: "list-canceled", dependencyBlocked: false },
114
+ };
106
115
  /** Resolve and validate the mutually exclusive list rendering modes. */
107
116
  function resolveRegisteredListOutputContext(options, globalOptions) {
108
117
  const streamMode = options.stream === true;
@@ -146,39 +155,63 @@ function renderRegisteredListResult(commandName, result, output) {
146
155
  }
147
156
  }
148
157
  async function runRegisteredListCommand(params) {
149
- const globalOptions = getGlobalOptions(params.actionCommand);
158
+ const parsedGlobalOptions = getGlobalOptions(params.actionCommand);
159
+ const globalOptions = params.aliasContract
160
+ ? { ...parsedGlobalOptions, command: params.aliasContract.canonical }
161
+ : parsedGlobalOptions;
150
162
  const startedAt = Date.now();
151
- if (params.options.all === true) {
152
- throw new PmCliError("List --all was ambiguous and is no longer an alias for --no-truncate. Use `pm list --status all --no-truncate` for every status, or `pm list-all --no-truncate` for the dedicated all-status command.", EXIT_CODE.USAGE, {
153
- code: "ambiguous_list_all",
154
- examples: [
155
- "pm list --status all --no-truncate",
156
- "pm list-all --no-truncate",
157
- ],
158
- });
163
+ if (params.aliasContract?.lifecycle === "deprecated") {
164
+ const deprecationHints = await readSettings(resolvePmRoot(process.cwd(), globalOptions.path)).then((settings) => settings.ux.deprecation_hints);
165
+ if (deprecationHints) {
166
+ printError(renderPmCommandAliasMigrationHint(params.aliasContract));
167
+ }
159
168
  }
160
169
  const intentOptions = applyContextIntentProjection("list", params.options);
161
170
  const listOptions = normalizeListOptions(intentOptions);
162
- applyDefaultListProjection(listOptions, params.name);
163
- if (params.excludeTerminal)
164
- listOptions.excludeTerminal = true;
165
- if (params.name === "list" && listOptions.status === undefined) {
166
- listOptions.status = "all";
171
+ let effectiveName = params.name;
172
+ let effectiveStatus = params.status;
173
+ let effectiveDependencyBlocked = params.dependencyBlocked === true;
174
+ let effectiveExcludeTerminal = params.excludeTerminal === true;
175
+ const requestedStatus = listOptions.status?.trim().toLowerCase();
176
+ const requestedVariant = params.name === "list" && requestedStatus !== undefined
177
+ ? CANONICAL_LIST_STATUS_VARIANTS[requestedStatus]
178
+ : undefined;
179
+ if (params.name === "list") {
180
+ if (params.options.all === true || requestedStatus === "all") {
181
+ effectiveName = "list-all";
182
+ effectiveExcludeTerminal = false;
183
+ listOptions.status = undefined;
184
+ }
185
+ else if (requestedStatus !== undefined && requestedVariant !== undefined) {
186
+ effectiveName = requestedVariant.name;
187
+ effectiveStatus = requestedStatus;
188
+ effectiveDependencyBlocked = requestedVariant.dependencyBlocked;
189
+ effectiveExcludeTerminal = false;
190
+ listOptions.status = undefined;
191
+ }
167
192
  }
168
- listOptions.dependencyBlocked = params.dependencyBlocked;
193
+ applyDefaultListProjection(listOptions, effectiveName);
194
+ if (effectiveExcludeTerminal)
195
+ listOptions.excludeTerminal = true;
196
+ listOptions.dependencyBlocked = effectiveDependencyBlocked;
169
197
  const output = resolveRegisteredListOutputContext(intentOptions, globalOptions);
170
- const result = await runList(params.dependencyBlocked ? undefined : params.status, listOptions, globalOptions);
171
- renderRegisteredListResult(params.name, result, output);
198
+ const result = await runList(effectiveDependencyBlocked ? undefined : effectiveStatus, listOptions, globalOptions);
199
+ renderRegisteredListResult("list", result, output);
172
200
  if (globalOptions.profile) {
173
- printError(`profile:command=${params.name} took_ms=${Date.now() - startedAt}`);
201
+ printError(`profile:command=list took_ms=${Date.now() - startedAt}`);
174
202
  }
175
203
  }
176
204
  function registerListCommand(program, descriptor) {
177
- const { name, description, status, excludeTerminal, allowStatusFilter, dependencyBlocked, } = descriptor;
178
- const command = program.command(name).description(description);
205
+ const { name, description, status, excludeTerminal, allowStatusFilter, dependencyBlocked, aliasContract, } = descriptor;
206
+ const command = program
207
+ .command(name, { hidden: aliasContract?.hidden === true })
208
+ .description(description);
179
209
  if (allowStatusFilter) {
180
210
  command.option("--status <value>", "Filter by status (repeatable or comma-separated; matches any; all selects every status)", collect);
181
211
  }
212
+ if (name === "list") {
213
+ command.option("--all", "Include every lifecycle status");
214
+ }
182
215
  command
183
216
  .option("--for <intent>", "Apply a declared context intent projection")
184
217
  .option("--token-budget <n>", "Override the selected intent's maximum estimated output tokens")
@@ -228,6 +261,7 @@ function registerListCommand(program, descriptor) {
228
261
  dependencyBlocked,
229
262
  options,
230
263
  actionCommand,
264
+ aliasContract,
231
265
  });
232
266
  });
233
267
  // Hidden pure snake_case underscore-duplicate alias (kept parse-functional).
@@ -235,7 +269,6 @@ function registerListCommand(program, descriptor) {
235
269
  addHiddenOption(command, "--assignee_filter <value>", "Alias for --assignee-filter");
236
270
  addHiddenOption(command, "--tree_depth <n>", "Alias for --tree-depth");
237
271
  addHiddenOption(command, "--token_budget <n>", "Alias for --token-budget");
238
- addHiddenOption(command, "--all", "Removed ambiguous alias; emits migration guidance");
239
272
  // Singular alias so `--filter-estimate-missing` works (matches update-many spelling).
240
273
  addHiddenOption(command, "--filter-estimate-missing", "Alias for --filter-estimates-missing");
241
274
  }
@@ -411,6 +444,13 @@ function buildMutationEventOptions(options, pmRoot) {
411
444
  const harness = readRepeatableStringOption(options, "harness");
412
445
  const agentInstance = readRepeatableStringOption(options, "agentInstance");
413
446
  const provenanceFilter = readRepeatableStringOption(options, "provenanceFilter");
447
+ const rawCursorMode = typeof options.cursorMode === "string" ? options.cursorMode : undefined;
448
+ if (rawCursorMode !== undefined &&
449
+ rawCursorMode !== "batch" &&
450
+ rawCursorMode !== "row") {
451
+ throw new PmCliError("Events --cursor-mode must be batch or row.", EXIT_CODE.USAGE, { code: "invalid_event_cursor_mode" });
452
+ }
453
+ const cursorMode = rawCursorMode;
414
454
  return {
415
455
  pmRoot,
416
456
  since: typeof options.since === "string" ? options.since : undefined,
@@ -426,42 +466,76 @@ function buildMutationEventOptions(options, pmRoot) {
426
466
  ...(harness === undefined ? {} : { harness }),
427
467
  ...(agentInstance === undefined ? {} : { agentInstance }),
428
468
  ...(provenanceFilter === undefined ? {} : { provenanceFilter }),
469
+ cursorMode,
429
470
  };
430
471
  }
431
- async function runEventsAction(options, command) {
432
- const globalOptions = getGlobalOptions(command);
433
- const startedAt = Date.now();
434
- const eventOptions = buildMutationEventOptions(options, globalOptions.path);
435
- if (options.follow === true) {
436
- if (options.provenanceSummary === true) {
437
- throw new PmCliError("Events --provenance-summary is bounded to one page and cannot be combined with --follow.", EXIT_CODE.USAGE);
438
- }
439
- const intervalMs = typeof options.intervalMs === "string"
440
- ? Number(options.intervalMs)
441
- : undefined;
472
+ /** Follows mutation events using either compatibility row cursors or the default batch-boundary trailer contract. */
473
+ async function followMutationEvents(eventOptions, options, quiet) {
474
+ if (options.provenanceSummary === true) {
475
+ throw new PmCliError("Events --provenance-summary is bounded to one page and cannot be combined with --follow.", EXIT_CODE.USAGE);
476
+ }
477
+ const intervalMs = typeof options.intervalMs === "string"
478
+ ? Number(options.intervalMs)
479
+ : undefined;
480
+ if (eventOptions.cursorMode === "row") {
442
481
  for await (const event of subscribeMutationEvents({
443
482
  ...eventOptions,
444
483
  intervalMs,
445
484
  })) {
446
- if (!globalOptions.quiet) {
485
+ if (!quiet) {
447
486
  writeStdout(`${JSON.stringify(event)}\n`);
448
487
  }
449
488
  }
450
489
  return;
451
490
  }
491
+ for await (const page of subscribeMutationEventBatches({
492
+ ...eventOptions,
493
+ intervalMs,
494
+ })) {
495
+ if (!quiet) {
496
+ writeStdout(`${serializeNdjsonStream(page.events, {
497
+ count: page.count,
498
+ has_more: page.has_more,
499
+ next_cursor: page.next_cursor ?? null,
500
+ source: page.source,
501
+ heartbeat: page.count === 0,
502
+ })}\n`);
503
+ }
504
+ }
505
+ }
506
+ /** Serializes one bounded mutation-event page using its declared row or batch cursor mode. */
507
+ function renderMutationEventPage(page) {
508
+ if (page.cursor_mode === "row") {
509
+ return serializeNdjsonRows(page.events);
510
+ }
511
+ return serializeNdjsonStream(page.events, {
512
+ count: page.count,
513
+ has_more: page.has_more,
514
+ next_cursor: page.next_cursor ?? null,
515
+ source: page.source,
516
+ ...(page.provenance_summary === undefined
517
+ ? {}
518
+ : { provenance_summary: page.provenance_summary }),
519
+ });
520
+ }
521
+ async function runEventsAction(options, command) {
522
+ const globalOptions = getGlobalOptions(command);
523
+ const startedAt = Date.now();
524
+ const eventOptions = buildMutationEventOptions(options, globalOptions.path);
525
+ if (options.follow === true) {
526
+ await followMutationEvents(eventOptions, options, globalOptions.quiet === true);
527
+ return;
528
+ }
452
529
  const page = await listMutationEvents(eventOptions);
453
530
  setActiveCommandResult(page);
454
- const rendered = serializeNdjsonRows([
455
- ...page.events,
456
- ...(page.provenance_summary === undefined
457
- ? []
458
- : [
459
- {
460
- type: "provenance_summary",
461
- provenance_summary: page.provenance_summary,
462
- },
463
- ]),
464
- ]);
531
+ if (globalOptions.json) {
532
+ printResult(page, globalOptions);
533
+ if (globalOptions.profile) {
534
+ printError(`profile:command=events took_ms=${Date.now() - startedAt}`);
535
+ }
536
+ return;
537
+ }
538
+ const rendered = renderMutationEventPage(page);
465
539
  if (!globalOptions.quiet && rendered.length > 0) {
466
540
  writeStdout(`${rendered}\n`);
467
541
  }
@@ -530,7 +604,7 @@ export function registerListQueryCommands(program, options) {
530
604
  const listCommandDescriptors = [
531
605
  {
532
606
  name: "list",
533
- description: "List items across every lifecycle status with optional filters.",
607
+ description: "List active items with optional lifecycle-status and project filters.",
534
608
  excludeTerminal: true,
535
609
  allowStatusFilter: true,
536
610
  },
@@ -579,7 +653,13 @@ export function registerListQueryCommands(program, options) {
579
653
  ];
580
654
  for (const descriptor of listCommandDescriptors) {
581
655
  if (shouldRegister(descriptor.name)) {
582
- registerListCommand(program, descriptor);
656
+ const aliasContract = resolvePmCommandAlias(descriptor.name);
657
+ registerListCommand(program, {
658
+ ...descriptor,
659
+ ...(aliasContract?.registration === "commander"
660
+ ? { aliasContract }
661
+ : {}),
662
+ });
583
663
  }
584
664
  }
585
665
  if (shouldRegister("aggregate")) {
@@ -775,6 +855,7 @@ export function registerListQueryCommands(program, options) {
775
855
  .option("--author <value>", "Filter by mutation author (repeatable or comma-separated)", collect)
776
856
  .option("--item <value>", "Filter by item or workspace stream id (repeatable or comma-separated)", collect)
777
857
  .option("--limit <n>", "Return at most 1,000 events (default: 100)")
858
+ .option("--cursor-mode <mode>", "Cursor framing: batch emits one terminal trailer (default); row preserves one cursor per event")
778
859
  .option("--full", "Include each complete authoritative history entry")
779
860
  .option("--provenance", "Include patch-free author, harness, instance, and extensible provenance")
780
861
  .option("--provenance-summary", "Include bounded provenance completeness counts")
@@ -838,4 +919,4 @@ export const _testOnlyRegisterListQuery = {
838
919
  parseListFormat,
839
920
  };
840
921
  //# sourceMappingURL=register-list-query.js.map
841
- //# debugId=0bcbdc33-3145-54cc-b4b6-10df50aef57a
922
+ //# debugId=7bcf441b-e211-535f-9502-5624add292e5