@unbrained/pm-cli 2026.10.30 → 2026.10.31

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 (235) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +32 -0
  3. package/dist/cli/commander-usage.js +2 -2
  4. package/dist/cli/error-guidance.d.ts +45 -5
  5. package/dist/cli/error-guidance.js +5 -3
  6. package/dist/cli/extension-command-help.d.ts +1 -0
  7. package/dist/cli/extension-command-help.js +2 -2
  8. package/dist/cli/main.d.ts +1 -5
  9. package/dist/cli/main.js +5 -5
  10. package/dist/cli/migration-gates.d.ts +1 -1
  11. package/dist/cli/migration-gates.js +1 -1
  12. package/dist/cli/preflight-warnings.d.ts +11 -0
  13. package/dist/cli/preflight-warnings.js +4 -0
  14. package/dist/cli/register-mutation.js +2 -2
  15. package/dist/cli-bundle/bundle-manifest.json +1 -1
  16. package/dist/cli-bundle/chunks/chunk-24J6TNYE.js +8 -0
  17. package/dist/cli-bundle/chunks/{chunk-EHBGHX55.js → chunk-2AHSPMKJ.js} +2 -2
  18. package/dist/cli-bundle/chunks/{chunk-MVL27TAH.js → chunk-35Q2B2GJ.js} +2 -2
  19. package/dist/cli-bundle/chunks/chunk-43R7UTWV.js +2 -0
  20. package/dist/cli-bundle/chunks/chunk-6PSDQ7T7.js +8 -0
  21. package/dist/cli-bundle/chunks/{chunk-UUQX3PFD.js → chunk-BS2KXT24.js} +70 -70
  22. package/dist/cli-bundle/chunks/{chunk-Y6NC3X3E.js → chunk-GMBDZID5.js} +3 -3
  23. package/dist/cli-bundle/chunks/chunk-HSBTITO4.js +3 -0
  24. package/dist/cli-bundle/chunks/{chunk-LWW4F4G2.js → chunk-MRUA2Z43.js} +2 -2
  25. package/dist/cli-bundle/chunks/chunk-P3LNMWL2.js +2 -0
  26. package/dist/cli-bundle/chunks/{chunk-S2U7ECUJ.js → chunk-PT7TS6E7.js} +2 -2
  27. package/dist/cli-bundle/chunks/{chunk-TH5KPAN4.js → chunk-SBVX5CMV.js} +2 -2
  28. package/dist/cli-bundle/chunks/{chunk-4BQD5SW2.js → chunk-TL3O5GZA.js} +30 -30
  29. package/dist/cli-bundle/chunks/chunk-U7JXZMU5.js +6 -0
  30. package/dist/cli-bundle/chunks/{chunk-GRABKNFL.js → chunk-V6EWBTNH.js} +2 -2
  31. package/dist/cli-bundle/chunks/chunk-VC7TA67O.js +20 -0
  32. package/dist/cli-bundle/chunks/chunk-WNF6FOL7.js +31 -0
  33. package/dist/cli-bundle/chunks/chunk-WRXQAW7Q.js +114 -0
  34. package/dist/cli-bundle/chunks/{chunk-RZQNFHXO.js → chunk-WX25MU4N.js} +3 -3
  35. package/dist/cli-bundle/chunks/chunk-XDDPSWIW.js +2 -0
  36. package/dist/cli-bundle/chunks/chunk-YT5D5HNG.js +2 -0
  37. package/dist/cli-bundle/chunks/chunk-ZTJVOBDU.js +128 -0
  38. package/dist/cli-bundle/chunks/{indexed-receipt-blobs-LHLE7PSG.js → indexed-receipt-blobs-KGMJVFH2.js} +2 -2
  39. package/dist/cli-bundle/chunks/item-transaction-UWV6UNSV.js +2 -0
  40. package/dist/cli-bundle/chunks/{mutation-admission-TRGAVS7N.js → mutation-admission-I4RHIT3Q.js} +2 -2
  41. package/dist/cli-bundle/chunks/{register-list-query-BH4F6M7Z.js → register-list-query-MVDL5EXG.js} +3 -3
  42. package/dist/cli-bundle/chunks/register-mutation-GAF7LXRB.js +20 -0
  43. package/dist/cli-bundle/chunks/register-operations-JLFRL36Q.js +2 -0
  44. package/dist/cli-bundle/chunks/{register-setup-QPWSVHFZ.js → register-setup-MZN6ONB3.js} +2 -2
  45. package/dist/cli-bundle/chunks/{settlement-hook-MN3Y7LVX.js → settlement-hook-YWSWFOZY.js} +2 -2
  46. package/dist/cli-bundle/chunks/{stage-RTB6RAAO.js → stage-2ZORTOF6.js} +2 -2
  47. package/dist/cli-bundle/focused-chunks/{chunk-S23ZUASN.js → chunk-2J7T2UCH.js} +2 -2
  48. package/dist/cli-bundle/focused-chunks/chunk-4QPGJO2G.js +26 -0
  49. package/dist/cli-bundle/focused-chunks/{chunk-YU7QOYYV.js → chunk-57HPXGOQ.js} +3 -3
  50. package/dist/cli-bundle/focused-chunks/chunk-5MCGYBOQ.js +91 -0
  51. package/dist/cli-bundle/focused-chunks/chunk-6F6APBCX.js +3 -0
  52. package/dist/cli-bundle/focused-chunks/chunk-AFVN2KCP.js +44 -0
  53. package/dist/cli-bundle/focused-chunks/{chunk-RKPUQDWF.js → chunk-DFUTCKUF.js} +2 -2
  54. package/dist/cli-bundle/focused-chunks/chunk-EA65HVBO.js +12 -0
  55. package/dist/cli-bundle/focused-chunks/chunk-GP2WU43K.js +26 -0
  56. package/dist/cli-bundle/focused-chunks/{chunk-YQUZL2CK.js → chunk-HPWT3RBG.js} +3 -3
  57. package/dist/cli-bundle/focused-chunks/chunk-HSAEEWSI.js +2 -0
  58. package/dist/cli-bundle/focused-chunks/{chunk-BPE6JTKL.js → chunk-JLXGRDTG.js} +3 -3
  59. package/dist/cli-bundle/focused-chunks/{chunk-FRFNGMAK.js → chunk-JNKRUCVZ.js} +2 -2
  60. package/dist/cli-bundle/focused-chunks/{chunk-BCIUAEWX.js → chunk-KH5QJXY7.js} +2 -2
  61. package/dist/cli-bundle/focused-chunks/chunk-KKRIFBSL.js +2 -0
  62. package/dist/cli-bundle/focused-chunks/{chunk-RGQEJFXO.js → chunk-MW77Q3AQ.js} +2 -2
  63. package/dist/cli-bundle/focused-chunks/chunk-NOKG4RFN.js +22 -0
  64. package/dist/cli-bundle/focused-chunks/{chunk-POJPJX64.js → chunk-NRBUMDLF.js} +2 -2
  65. package/dist/cli-bundle/focused-chunks/{chunk-3SRX77ES.js → chunk-PC3R5CJV.js} +2 -2
  66. package/dist/cli-bundle/focused-chunks/{chunk-RYEZSZJ7.js → chunk-PFBQOZPK.js} +2 -2
  67. package/dist/cli-bundle/focused-chunks/{chunk-SAT7IAEB.js → chunk-QFMJGQGO.js} +3 -3
  68. package/dist/cli-bundle/focused-chunks/{chunk-VFWCSQAG.js → chunk-SFQKCA5K.js} +2 -2
  69. package/dist/cli-bundle/focused-chunks/chunk-WHIE2C6Q.js +2 -0
  70. package/dist/cli-bundle/focused-chunks/chunk-Y6UYRMVG.js +6 -0
  71. package/dist/cli-bundle/focused-chunks/{indexed-receipt-blobs-VK2363JB.js → indexed-receipt-blobs-KHWT44EK.js} +2 -2
  72. package/dist/cli-bundle/focused-chunks/item-transaction-LU75EG7D.js +2 -0
  73. package/dist/cli-bundle/focused-chunks/{mutation-admission-7VUODEPJ.js → mutation-admission-KDJ7SCPA.js} +2 -2
  74. package/dist/cli-bundle/focused-chunks/{settlement-hook-OK6A7PG2.js → settlement-hook-SJV52ZTV.js} +2 -2
  75. package/dist/cli-bundle/focused-chunks/{stage-S5RP5SZH.js → stage-R4KEBO37.js} +2 -2
  76. package/dist/cli-bundle/main.js +26 -22
  77. package/dist/cli-bundle/sdk-authoring.js +1 -1
  78. package/dist/cli-bundle/sdk-contracts.js +4 -4
  79. package/dist/cli-bundle/sdk-core.js +1 -1
  80. package/dist/cli-bundle/sdk-governance.js +1 -1
  81. package/dist/cli-bundle/sdk-graph.js +1 -1
  82. package/dist/cli-bundle/sdk-merge.js +57 -57
  83. package/dist/cli-bundle/sdk-query.js +1 -1
  84. package/dist/cli-bundle/sdk-runtime.js +1 -1
  85. package/dist/cli-bundle/sdk-testing.js +1 -1
  86. package/dist/cli-bundle/sdk.js +11 -11
  87. package/dist/core/config/nested-settings.js +1 -1
  88. package/dist/core/extensions/extension-hook-runtime.js +1 -1
  89. package/dist/core/extensions/extension-types.d.ts +4 -0
  90. package/dist/core/extensions/extension-types.js +1 -1
  91. package/dist/core/extensions/loader.js +1 -1
  92. package/dist/core/lock/lock.js +4 -4
  93. package/dist/core/output/output.js +2 -2
  94. package/dist/core/schema/fields-file.js +1 -1
  95. package/dist/core/sentry/helpers.d.ts +6 -0
  96. package/dist/core/sentry/helpers.js +1 -1
  97. package/dist/core/sentry/instrument.d.ts +1 -1
  98. package/dist/core/sentry/instrument.js +1 -1
  99. package/dist/core/shared/constants.js +1 -1
  100. package/dist/core/shared/errors.d.ts +6 -0
  101. package/dist/core/shared/errors.js +1 -1
  102. package/dist/core/shared/output-unicode.d.ts +10 -0
  103. package/dist/core/shared/output-unicode.js +2 -0
  104. package/dist/core/store/settings-validator.d.ts +1 -0
  105. package/dist/core/store/settings-validator.js +1 -1
  106. package/dist/core/store/settings.js +1 -1
  107. package/dist/core/telemetry/policy.d.ts +8 -0
  108. package/dist/core/telemetry/policy.js +1 -1
  109. package/dist/core/telemetry/runtime.js +3 -3
  110. package/dist/sdk/agent/command-recovery.d.ts +15 -0
  111. package/dist/sdk/agent/command-recovery.js +1 -1
  112. package/dist/sdk/cli-bootstrap.js +1 -1
  113. package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +28 -0
  114. package/dist/sdk/cli-contracts/agent-output-contracts.js +2 -2
  115. package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1
  116. package/dist/sdk/cli-contracts/flag-contracts.d.ts +2 -0
  117. package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
  118. package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
  119. package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
  120. package/dist/sdk/cli-contracts.d.ts +1 -1
  121. package/dist/sdk/cli-contracts.js +1 -1
  122. package/dist/sdk/completion/fish.js +4 -4
  123. package/dist/sdk/completion/zsh.js +3 -3
  124. package/dist/sdk/config.d.ts +1 -0
  125. package/dist/sdk/config.js +1 -1
  126. package/dist/sdk/core.d.ts +1 -0
  127. package/dist/sdk/core.js +1 -1
  128. package/dist/sdk/error-runtime.d.ts +9 -0
  129. package/dist/sdk/error-runtime.js +1 -1
  130. package/dist/sdk/errors.js +1 -1
  131. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  132. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  133. package/dist/sdk/index.d.ts +2 -2
  134. package/dist/sdk/index.js +1 -1
  135. package/dist/sdk/lifecycle/claim.js +1 -1
  136. package/dist/sdk/lifecycle/close.js +1 -1
  137. package/dist/sdk/lifecycle/create.js +1 -1
  138. package/dist/sdk/lifecycle/plan.d.ts +2 -3
  139. package/dist/sdk/lifecycle/plan.js +1 -1
  140. package/dist/sdk/lifecycle/repeated-terminal-state.d.ts +45 -0
  141. package/dist/sdk/lifecycle/repeated-terminal-state.js +2 -0
  142. package/dist/sdk/lifecycle/shared-unset-fields.d.ts +9 -0
  143. package/dist/sdk/lifecycle/shared-unset-fields.js +1 -1
  144. package/dist/sdk/lifecycle/update-many.d.ts +0 -1
  145. package/dist/sdk/lifecycle/update-many.js +1 -1
  146. package/dist/sdk/lifecycle/update.d.ts +29 -1
  147. package/dist/sdk/lifecycle/update.js +2 -2
  148. package/dist/sdk/output/table-rows.d.ts +7 -1
  149. package/dist/sdk/output/table-rows.js +1 -1
  150. package/dist/sdk/output.d.ts +1 -0
  151. package/dist/sdk/output.js +2 -2
  152. package/dist/sdk/ownership-source.d.ts +18 -0
  153. package/dist/sdk/ownership-source.js +1 -1
  154. package/dist/sdk/public-surface.json +1 -1
  155. package/dist/sdk/query/get.d.ts +1 -1
  156. package/dist/sdk/query/get.js +1 -1
  157. package/dist/sdk/query/next-ranking-policy.d.ts +35 -0
  158. package/dist/sdk/query/next-ranking-policy.js +2 -0
  159. package/dist/sdk/query/next.d.ts +12 -2
  160. package/dist/sdk/query/next.js +2 -2
  161. package/dist/sdk/query/projection-contracts.d.ts +4 -0
  162. package/dist/sdk/query/projection-contracts.js +1 -1
  163. package/dist/sdk/read-output/surfaces.d.ts +27 -0
  164. package/dist/sdk/read-output/surfaces.js +2 -0
  165. package/dist/sdk/read-output-contracts.js +1 -1
  166. package/dist/sdk/runtime-primitives.d.ts +1 -0
  167. package/dist/sdk/runtime-primitives.js +1 -1
  168. package/dist/sdk/runtime.js +1 -1
  169. package/dist/sdk/test/execution-receipts.d.ts +25 -0
  170. package/dist/sdk/test/execution-receipts.js +2 -2
  171. package/dist/sdk/test/execution.d.ts +5 -0
  172. package/dist/sdk/test/execution.js +2 -2
  173. package/dist/types.d.ts +2 -0
  174. package/dist/types.js +1 -1
  175. package/docs/AGENT_GUIDE.md +1 -1
  176. package/docs/AGENT_OUTPUT_ENCODINGS.md +12 -0
  177. package/docs/AGENT_UX_CONTRACTS.md +2 -1
  178. package/docs/COMMANDS.md +58 -5
  179. package/docs/CONFIGURATION.md +48 -1
  180. package/docs/DEVELOPMENT_DEPENDENCY_SECURITY.md +26 -0
  181. package/docs/PACKED_FIRST_RUN.md +2 -1
  182. package/docs/READ_OUTPUT_CONTRACTS.md +24 -6
  183. package/docs/SDK.md +73 -2
  184. package/docs/TESTING.md +38 -2
  185. package/docs/agent-task-token-baseline.json +1 -1
  186. package/marketplace.json +1 -1
  187. package/package.json +1 -1
  188. package/packages/pm-beads/package.json +1 -1
  189. package/packages/pm-calendar/extensions/calendar/index.ts +1 -0
  190. package/packages/pm-calendar/package.json +1 -1
  191. package/packages/pm-command-kit/package.json +1 -1
  192. package/packages/pm-digital-twin/package.json +1 -1
  193. package/packages/pm-governance-audit/package.json +1 -1
  194. package/packages/pm-guide-shell/package.json +1 -1
  195. package/packages/pm-kanban/package.json +1 -1
  196. package/packages/pm-lifecycle-hooks/package.json +1 -1
  197. package/packages/pm-linked-test-adapters/package.json +1 -1
  198. package/packages/pm-search-advanced/package.json +1 -1
  199. package/packages/pm-templates/package.json +1 -1
  200. package/packages/pm-todos/package.json +1 -1
  201. package/packages/pm-vcs/package.json +1 -1
  202. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  203. package/plugins/pm-claude/package.json +1 -1
  204. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  205. package/plugins/pm-codex/package.json +1 -1
  206. package/plugins/pm-codex/plugin.json +1 -1
  207. package/runtime-dependencies.json +1 -1
  208. package/dist/cli-bundle/chunks/chunk-34MP7WKK.js +0 -6
  209. package/dist/cli-bundle/chunks/chunk-3KMYHYJV.js +0 -2
  210. package/dist/cli-bundle/chunks/chunk-42BHHNTL.js +0 -128
  211. package/dist/cli-bundle/chunks/chunk-I5O3XZOA.js +0 -2
  212. package/dist/cli-bundle/chunks/chunk-LEIVUGDH.js +0 -8
  213. package/dist/cli-bundle/chunks/chunk-OH7WPD42.js +0 -114
  214. package/dist/cli-bundle/chunks/chunk-OOD2A7AF.js +0 -20
  215. package/dist/cli-bundle/chunks/chunk-Q5V7P6NM.js +0 -2
  216. package/dist/cli-bundle/chunks/chunk-QLPFYBXN.js +0 -2
  217. package/dist/cli-bundle/chunks/chunk-SA5NYLPE.js +0 -8
  218. package/dist/cli-bundle/chunks/chunk-VHLAVTJN.js +0 -31
  219. package/dist/cli-bundle/chunks/chunk-XAOVJG52.js +0 -3
  220. package/dist/cli-bundle/chunks/chunk-XPQ4RTSF.js +0 -2
  221. package/dist/cli-bundle/chunks/item-transaction-WIOBZW4E.js +0 -2
  222. package/dist/cli-bundle/chunks/register-mutation-5V2NANIS.js +0 -20
  223. package/dist/cli-bundle/chunks/register-operations-XSFRMUFX.js +0 -2
  224. package/dist/cli-bundle/focused-chunks/chunk-2V6NMNYN.js +0 -26
  225. package/dist/cli-bundle/focused-chunks/chunk-ASHGXMX4.js +0 -3
  226. package/dist/cli-bundle/focused-chunks/chunk-CKBN2D42.js +0 -12
  227. package/dist/cli-bundle/focused-chunks/chunk-I642DXOT.js +0 -22
  228. package/dist/cli-bundle/focused-chunks/chunk-K7DKG5HM.js +0 -91
  229. package/dist/cli-bundle/focused-chunks/chunk-NMQBXU7N.js +0 -44
  230. package/dist/cli-bundle/focused-chunks/chunk-PGM3ENGZ.js +0 -2
  231. package/dist/cli-bundle/focused-chunks/chunk-QFNV4JTA.js +0 -6
  232. package/dist/cli-bundle/focused-chunks/chunk-QVJCQMZY.js +0 -26
  233. package/dist/cli-bundle/focused-chunks/chunk-R2TPPPVU.js +0 -2
  234. package/dist/cli-bundle/focused-chunks/chunk-VJVJ2ZX2.js +0 -2
  235. package/dist/cli-bundle/focused-chunks/item-transaction-ZFDKJIP7.js +0 -2
@@ -110,7 +110,43 @@ capture an opaque boot/PID-namespace coordinate and the owner's process start
110
110
  tick. A matching host can reclaim a provably dead original owner before TTL,
111
111
  including when its PID has been reused. Foreign hosts, legacy receipts, denied
112
112
  process probes and unavailable identity remain subject to the existing TTL
113
- policy. Early recovery writes an immutable `locks/recoveries/*.json` intent
113
+ policy. A commit gate with a provably dead same-host owner can also be recovered
114
+ immediately, before its ordinary age threshold. Its original owner receipt is
115
+ retained in `locks/recoveries/gate-<generation-hash>/owner.json`. These nonempty
116
+ generation directories prevent concurrent recoverers from retiring a replacement
117
+ gate and must be retained while writers may still hold observations of that
118
+ generation. Recovery after the age grace requires a dead PID or verified PID
119
+ reuse for a readable owner, and uses the same retained generation protocol.
120
+ A live PID with unavailable start identity keeps its gate regardless of age;
121
+ elapsed time alone cannot safely distinguish a paused writer from abandonment.
122
+ Recorded host coordinates must be verified before recovery; a recorded foreign
123
+ host or unavailable recorded host evidence cannot be replaced by a local PID
124
+ comparison. Legacy receipts without `host_identity` use a local PID probe after
125
+ the grace period. On shared storage, that probe can retire a gate owned by a
126
+ writer on another host whose PID appears dead locally; these legacy receipts
127
+ do not provide cross-host recovery safety.
128
+ Non-missing owner-file read errors also retain the gate regardless of age.
129
+ Lock wait durations use a monotonic clock independently of the
130
+ wall-clock timestamps used for TTL policy. This recovery is tracked by
131
+ [pm-gh1609](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1609.toon)
132
+ (repository tracker record excluded from npm).
133
+
134
+ If a reboot, PID-namespace change or tracker relocation leaves an unverifiable
135
+ `locks/<lock-file>.stale-cleanup` gate, automatic age-based recovery intentionally
136
+ refuses it. `pm gc --scope locks` does not remove these gate directories.
137
+ For manual recovery, first stop every CLI, MCP server, watcher and service that
138
+ can write this tracker, including writers on other hosts when storage is shared.
139
+ Independently establish that the recorded original owner cannot still run; a
140
+ different host hash or an old timestamp alone is insufficient. While exclusive
141
+ access is maintained, preserve the complete gate directory and its `owner.json`
142
+ receipt by moving it to a unique backup location outside `locks`, without
143
+ overwriting any existing backup. Keep `locks/recoveries` evidence intact. Then
144
+ retry the original command, run `pm health --check-only`, and verify the affected
145
+ item's history with `pm history <id> --verify --strict-exit`. If exclusive access
146
+ or owner death cannot be established, retain the gate and investigate ownership.
147
+ This procedure does not override the remaining lease's TTL or ownership checks.
148
+
149
+ Early recovery writes an immutable `locks/recoveries/*.json` intent
114
150
  receipt before removal; it records the original owner and is an attempted
115
151
  recovery audit, not proof that a later mutation committed. Keep these local
116
152
  runtime receipts out of version control.
@@ -390,6 +426,16 @@ pm get <id> --full --json
390
426
  pm contracts --json
391
427
  ```
392
428
 
429
+ With JSON output, preflight advisories are deferred until the command outcome.
430
+ A failed command includes their stable codes in the error envelope's `warnings`
431
+ array on stderr, preserving one parseable error and its original exit code.
432
+ Additional explanatory or remediation text is retained in `warning_details`.
433
+ A successful command emits one `{ "type": "warning", "warnings": [...] }`
434
+ diagnostic on stderr when needed; its result remains on stdout. Human output
435
+ keeps immediate warning text. See
436
+ [pm-gh1602](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1602.toon)
437
+ (repository tracker record excluded from npm).
438
+
393
439
  `--output-format json|toon` selects encoding on both reads and mutations.
394
440
  Item collection and lifecycle commands accept `--format json|toon` as a
395
441
  compatibility alias, before or after the command:
@@ -593,6 +639,7 @@ Useful commands:
593
639
 
594
640
  ```bash
595
641
  pm config project set search_default_mode keyword
642
+ pm config project set context_next_ranking_policy weighted # pm next: priority_floor (default) or weighted
596
643
  pm config project set search_mutation_refresh_policy cache_only
597
644
  pm config project set search_embedding_corpus_max_characters 12000
598
645
  pm config project set search_query_expansion_enabled true
@@ -130,6 +130,32 @@ patterns, absolute paths and invocation-relative anchoring remain supported.
130
130
  The regression uses a real temporary directory and the same deeply nested input
131
131
  that failed before the replacement. Audit errors remain mandatory failures.
132
132
 
133
+ ## Redirect credential and glob amplification advisories
134
+
135
+ [pm-irviv0](../.agents/pm/issues/pm-irviv0.toon) tracks
136
+ [GHSA-mrwp-f3q8-3g9p](https://github.com/advisories/GHSA-mrwp-f3q8-3g9p)
137
+ (`follow-redirects` 1.16.0 through 1.16.1: cross-realm `sensitiveHeaders`
138
+ arrays are discarded, so custom credentials can follow redirects) and
139
+ [GHSA-g3hv-75wg-m249](https://github.com/advisories/GHSA-g3hv-75wg-m249)
140
+ (`minimatch` before 11.0.1: denial of service through glob-part
141
+ amplification). Both were published on October 30 and the registry feed
142
+ reported them from the next run on `main` while OSV was still clean, so the
143
+ advisory gate refused every PR and the scheduled release path until the lock
144
+ changed. `follow-redirects` is reached only through the CodSpeed benchmark
145
+ plugin's Axios client, and `minimatch` through ESLint and its config array
146
+ and as a direct dependency of `@stryker-mutator/core` (mutation testing); all
147
+ of these are development dependencies and none establishes a CLI or SDK
148
+ route. The pnpm overrides require `follow-redirects` 1.16.2 or a newer
149
+ 1.x release and `minimatch` 11.0.1 or a newer 11.x release. `minimatch` 11
150
+ keeps dual CommonJS and ES module exports, so ESLint's `require` path is
151
+ unchanged and the full lint run passes; the override applies to the Stryker
152
+ path as well. Both releases satisfy pnpm's one-day
153
+ minimum release age without an exclusion; the seven-day Dependabot cooldown
154
+ is unchanged. The gate's catch-all refusal said that no feed success could be
155
+ inferred, which hid the real cause (a non-empty registry id list); read
156
+ `.cache/dependency-security/receipt.json` before treating that message as a
157
+ feed outage.
158
+
133
159
  ## CodSpeed 5.7.1 patch
134
160
 
135
161
  CodSpeed's declared dependency previously resolved Axios 1.19.0, and both
@@ -6,7 +6,8 @@ Trackers: [pm-ygli86](../.agents/pm/tasks/pm-ygli86.toon),
6
6
  [pm-p5u6](../.agents/pm/chores/pm-p5u6.toon).
7
7
 
8
8
  CI globally installs one tarball in isolated npm prefixes on Ubuntu/macOS/Windows
9
- with Node 22.18.0 and 24, runs the installed `pm` shim, then invokes:
9
+ with Node 22.18.0 and 24, one `Packed runtime (<os>)` job per OS with a fresh
10
+ prefix, cache and home per Node version, runs the installed `pm` shim, then invokes:
10
11
 
11
12
  ```bash
12
13
  node scripts/release/packed-first-run.mjs /path/to/installed/@unbrained/pm-cli
@@ -221,12 +221,30 @@ Read-option recovery is tracked by
221
221
  use `--output-format toon|json` across read commands. Completeness uses
222
222
  `--output-include full` on list, search and get; context detail depth uses
223
223
  `--depth full`. These controls retain the normal row and token ceilings.
224
- When `context --full`, `list/search --depth full`, or `--toon` on list, search,
225
- context or get is refused,
226
- the error provides `recovery.suggested_retry_args` for the same command with the
227
- supported spelling. The SDK's `resolveReadOptionRetryArgs` exposes the same
228
- token-preserving correction. Conflicting controls or ambiguous operands do not
229
- receive a guessed retry.
224
+ When a completeness spelling is refused on a read command that has an
225
+ equivalent spelling of its own, the error provides
226
+ `recovery.suggested_retry_args` for that same command. Examples are
227
+ `get/context --brief`, which becomes `--depth brief`, and
228
+ `list/search/history --depth full`, which becomes `--full`. The same applies to
229
+ `--toon` on list, search, context or get, which becomes `--output-format toon`.
230
+ The correction is derived from runtime contracts, not from a hand-maintained
231
+ list. A boolean `--<level>` maps to `--depth <level>` only when that command's
232
+ `--depth` flag contract declares the level in its `values` domain. A
233
+ `--depth <level>` maps to `--<level>` only when the level is one of the
234
+ command's declared read-output projection modes. `--depth standard` on a
235
+ command without `--depth` replays without the flag, because standard is every
236
+ command's default level. Aliased paths such as `deps` and `health` replay on
237
+ their canonical noun-first path (`pm item deps`, `pm ops health`). When a
238
+ command has no equivalent, for example `search --depth brief`, no retry is
239
+ guessed. The refusal instead lists the controls that command accepts: for
240
+ search, `Completeness controls accepted by pm search: --compact, --full.`
241
+ ([pm-gh1626](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1626.toon);
242
+ repository-only tracker record excluded from npm). The SDK's
243
+ `resolveReadOptionRetryArgs` exposes the same token-preserving correction, and
244
+ `resolveReadCompletenessControls` returns each command's declared vocabulary.
245
+ Conflicting controls such as `--fields`, `--output-include`, `--section`, `--for`
246
+ or another completeness flag, and ambiguous operands, do not receive a guessed
247
+ retry.
230
248
  An explicit `--json` conflicts with `--toon`, so that invocation receives no
231
249
  encoding-changing retry. Non-conflicting TOON refusals include the corrected
232
250
  command in human output without requiring JSON diagnostics.
package/docs/SDK.md CHANGED
@@ -278,7 +278,17 @@ async function writePackageState(pmRoot: string, write: () => Promise<void>) {
278
278
  ```
279
279
 
280
280
  The built-in provider automatically recovers a provably dead original Linux
281
- owner before TTL. Unknown owners retain the existing lease policy. Conflicts
281
+ owner before TTL, including an owner killed inside its commit fence. Recovery
282
+ retains the gate generation as evidence so concurrent recoverers cannot
283
+ remove its replacement, including recovery after the age grace when a dead PID
284
+ or verified PID reuse establishes abandonment. A readable gate with a live PID
285
+ and unavailable start identity is retained regardless of age. An unreadable
286
+ gate owner is also retained; age and failed reads do not prove abandonment.
287
+ Recorded host coordinates must be verified; a local PID comparison cannot
288
+ authorize recovery of foreign or unverifiable host evidence.
289
+ Acquisition, commit-gate and release wait budgets use
290
+ a monotonic clock; wall-clock adjustments do not extend those budgets.
291
+ Unknown owners retain the existing lease policy. Conflicts
282
292
  expose the lock identity, observed process state, `waited_ms`, observed
283
293
  `owner_handoffs` and wait advice through `PmCliError.context`. The wait budget
284
294
  is a fixed total by default. Pass `{ waitPolicy: "progress" }` in the options
@@ -675,7 +685,7 @@ import {
675
685
  parseMutationReceipt,
676
686
  estimatePmOutputTokens,
677
687
  resolvePmCommandOutputBudget,
678
- } from "@unbraind/pm-cli/sdk/contracts";
688
+ } from "@unbrained/pm-cli/sdk/contracts";
679
689
 
680
690
  const compactRead = definePmCommandOutputBudget({
681
691
  command: "get",
@@ -2040,6 +2050,19 @@ contract compact and fail-safe for newly added flags. Use
2040
2050
  package-authored query surface. `encodeQueryCursor`, `decodeQueryCursorState`, and
2041
2051
  `paginateQueryRows` remain the transport-neutral continuation primitives.
2042
2052
 
2053
+ A flag with a closed value domain declares it in `CliFlagContract.values`. For
2054
+ example, `get` and `context` declare `--depth brief|standard|deep|full`, and
2055
+ `plan` declares `--depth brief|standard|deep`, so `pm contracts --command <c>
2056
+ --flags-only --json` shows the accepted spellings without parsing help prose.
2057
+ `resolveReadCompletenessControls(command)` combines that domain with the
2058
+ command's read-output projection modes. `resolveReadOptionRetryArgs` uses the
2059
+ result to correct a completeness spelling only into a flag the attempted
2060
+ command declares
2061
+ ([pm-gh1626](../.agents/pm/issues/pm-gh1626.toon)). A flag that accepts a
2062
+ comma-separated value list declares `list: true`. `--unset` on create, update
2063
+ and update-many does, so repeated flags and comma lists reach the parser as the
2064
+ same field set ([pm-gh1633](../.agents/pm/issues/pm-gh1633.toon)).
2065
+
2043
2066
  `decodeQueryCursorEnvelope`, `decodeQueryCursorState`, and
2044
2067
  `resolveQueryCursorStart` accept an optional final `cursorFlag` argument
2045
2068
  (`"--after"`, the default, or `"--cursor"`) so package-authored queries can
@@ -2341,6 +2364,13 @@ const signalRead = await store.readOrRebuild(itemsFromDerivedIndex, {
2341
2364
  const report = await scoreContextCandidates(signalRead.candidates);
2342
2365
  ```
2343
2366
 
2367
+ `pm next` applies a ranking policy after scoring: `priority_floor` (the
2368
+ default, from `context.next_ranking_policy` or the `rankingPolicy` option)
2369
+ resumes in-progress work, then orders by priority tier with relevance inside a
2370
+ tier; `weighted` keeps the blended score order. The response discloses it as
2371
+ `filters.ranking_policy`, and the recommendation reasons name the disagreement
2372
+ when the score leader differs from the recommendation (GH-1618).
2373
+
2344
2374
  Use `--explain-ranking --json` on `pm context` or `pm next` to include the model,
2345
2375
  available signals, baseline rank, final rank, score, and per-signal
2346
2376
  contributions. Explanation data is opt-in so default agent output stays bounded.
@@ -2849,6 +2879,19 @@ delivered to the registered positional arguments unchanged.
2849
2879
 
2850
2880
  ## Output Ownership
2851
2881
 
2882
+ Unicode output policy ([pm-gh1624](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1624.toon), tracker record excluded from npm):
2883
+ the built-in JSON and TOON formatters refuse unpaired UTF-16 surrogates in
2884
+ structured output values or object keys with `text_unpaired_surrogate` and a
2885
+ field path. Custom `toJSON()` values and boxed primitives are materialized once
2886
+ per render using their native JSON semantics; the resulting snapshot is validated
2887
+ and shared by both formatters. Valid astral characters and caller data are preserved. Extension
2888
+ producers can call `assertWellFormedOutputText(value)` before returning
2889
+ JSON-compatible data. When replacing malformed external text is intentional,
2890
+ use `toWellFormedText(text)` from `@unbrained/pm-cli/sdk/core` (also available from
2891
+ `@unbrained/pm-cli/sdk`); it replaces lone
2892
+ surrogates with U+FFFD without splitting valid pairs. Apply normalization before
2893
+ constructing object keys so the producer can handle possible key collisions.
2894
+
2852
2895
  Command handlers should normally return structured data and let the host select
2853
2896
  TOON, JSON, service, or registered renderer output. A renderer override returns a
2854
2897
  string when it owns the matching payload and `null` to fall back to native
@@ -2915,6 +2958,34 @@ A typo fails activation with a did-you-mean hint (e.g. `type: "strnig"` →
2915
2958
  `Did you mean "string"?`) instead of silently passing and failing opaquely at use
2916
2959
  time.
2917
2960
 
2961
+ ## Package Error Provenance
2962
+
2963
+ Expected package errors retain their structured `context` across separately
2964
+ bundled SDK copies. Use `createPmCliExpectedError` to declare an expected refusal.
2965
+ A custom exception carrying only `code`, `exitCode: 1` and `remediation` remains
2966
+ an unexpected fault. Sentry error attribution uses the same bounded source
2967
+ context as telemetry without requiring telemetry delivery or command tracing, with host version
2968
+ and the registered command owner's manifest version. Noninteractive traffic
2969
+ uses `automation`; explicit `test`/`dogfood` contexts retain their own environments.
2970
+ Error events and usage logs tagged `user` use `production`, including when CI was inferred at initialization.
2971
+ Early errors retain `--json` and `--quiet` automation attribution. Original
2972
+ extension causes remain available locally through the SDK; Sentry's extra error
2973
+ data integration does not copy cause payload fields into diagnostic contexts.
2974
+ Explicit `SENTRY_ENVIRONMENT`, consent and test isolation remain authoritative.
2975
+ Sequential commands clear previous extension attribution. Tracked by
2976
+ [pm-gh1625](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1625.toon)
2977
+ (tracker record excluded from npm).
2978
+
2979
+ `resolveTelemetrySourceAttribution(options?, env?, interactive?)` exposes that
2980
+ same pure attribution policy to custom SDK hosts without reading configuration,
2981
+ creating an installation identity, or sending data. Expected refusals use
2982
+ `createPmCliExpectedError`; unexpected handler failures retain their original
2983
+ non-enumerable `cause` in `CommandHandlerResult` and become
2984
+ `ExtensionCommandError` in the CLI host. The host preserves structured diagnostics
2985
+ and reports these faults as exceptions. An exception name alone cannot declare
2986
+ an expected refusal when the original error violates the public contract.
2987
+ SDK extension actions and delegated template reads retain the same failure kind.
2988
+
2918
2989
  ## Expected CLI Errors
2919
2990
 
2920
2991
  `resolveLifecycleVerbRecovery(verb, availablePaths)` returns explicit argument
package/docs/TESTING.md CHANGED
@@ -58,6 +58,14 @@ node scripts/run-tests.mjs test
58
58
  node scripts/run-tests.mjs coverage
59
59
  ```
60
60
 
61
+ The Linux killed-owner integration suite always exercises Node. Its additional
62
+ Bun case runs locally when `bun --version` succeeds; CI requires Bun and retains
63
+ the case even when the executable is missing, so a broken CI setup fails visibly.
64
+ Install Bun before claiming local Node-and-Bun recovery coverage. This fixture
65
+ policy is tracked by
66
+ [pm-gh1609](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1609.toon)
67
+ (repository tracker record excluded from npm).
68
+
61
69
  For the exact ordered local preflight used to make release-readiness claims,
62
70
  run the registry-owned entrypoint:
63
71
 
@@ -264,6 +272,26 @@ node scripts/run-tests.mjs test -- tests/integration/cli.integration.spec.ts
264
272
 
265
273
  Use focused runs while iterating, then run coverage before closure when risk or scope warrants it.
266
274
 
275
+ ## CI Job Layout and Runner Budget
276
+
277
+ Every pull-request push draws from the account-wide hosted-runner pool (20
278
+ concurrent jobs, 5 on macOS, shared by every repository on the account), so the
279
+ required CI asks for as few runners as the proofs allow
280
+ ([pm-m6ig79](../.agents/pm/issues/pm-m6ig79.toon)):
281
+
282
+ | Job | Runs |
283
+ | --- | --- |
284
+ | `Build foundation (Ubuntu, Node 24)` | Build, `dist` artifact, packed tarball. |
285
+ | `Packed runtime (<os>)` × 3 | Packed first run on Node 22.18.0 and 24 in isolated prefixes, dist version smoke; Ubuntu adds the Node 22 telemetry and snapshot regressions, macOS the native shell and portability checks, Windows the full npm npx and Bun bunx acceptance. |
286
+ | `Gates (static)` | Typecheck, version, changelog, secret scan, `pnpm lint` (`quality:static`), package artifact, token budgets, tracker merge-safety and assurance gates. |
287
+ | `Gates (smokes)` | Shell completion, npx/plugin smokes, host isolation, context evaluation, compatibility migration and published workspace compatibility. |
288
+ | `Coverage shard N/4` × 4, `Gates (coverage)` | Sharded coverage, then the merged 100% threshold. |
289
+ | `Windows regression cohort` × 3, `Windows regression (Node 24)` | Script and native Windows cohorts, all running at once, then their aggregate. |
290
+
291
+ Add a proof as a step inside the job that owns its platform and runtime rather
292
+ than as a new job: a sub-minute job still waits in the shared queue before it
293
+ starts.
294
+
267
295
  ## CI Retry and Timeout Diagnostics
268
296
 
269
297
  The required `Gates (coverage)` job runs after the coverage matrix settles and
@@ -759,8 +787,9 @@ pm test <item-id> --run --workspace-context snapshot --override-linked-workspace
759
787
  Node 24 releases retain the same dangling-link behavior; the async `stat`
760
788
  `throwIfNoEntry` option was added in
761
789
  [Node 24.15](https://nodejs.org/download/release/v24.20.0/docs/api/fs.html#fspromisesstatpath-options).
762
- The real filesystem and CLI snapshot suite runs in the required Node 22
763
- telemetry regression job and native Windows regression job before merge.
790
+ The real filesystem and CLI snapshot suite runs on Node 22 in the required
791
+ `Packed runtime (ubuntu-latest)` job and in the native Windows regression job
792
+ before merge.
764
793
 
765
794
  Windows execution is tracked by [pm-bj7rq0](../.agents/pm/issues/pm-bj7rq0.toon).
766
795
  Script and native keeper cohorts run independently on Windows Node 24. Their
@@ -878,6 +907,13 @@ pm test <item-id> --run --only-index 2
878
907
  pm test <item-id> --run --only-last
879
908
  ```
880
909
 
910
+ A selective run's receipt lists only the tests it selected. When the
911
+ receipt includes `tests_omitted`, copy and run the complete
912
+ `tests_omitted.restore_with` command to read the whole stored collection. It
913
+ keeps the invocation's `--pm-path` (including a tracker chosen through
914
+ `PM_PATH`) and `--no-extensions`, which a bare `pm test <item-id> --list` would
915
+ drop.
916
+
881
917
  Linked-command stdout and stderr are captured through temporary regular files,
882
918
  then read back with the 20 MiB per-stream retention bound. This keeps inherited
883
919
  descriptors blocking for Bun, Rust, and other runtimes that treat `EAGAIN` on a
@@ -1 +1 @@
1
- {"version":5,"transcript_version":2,"transcript_digest":"sha256:83d4523ca528ad5e8801cf5c7c02dcebbf2b87dc72422d4b8e648755dcdc36c2","estimator":"ceil(utf8_bytes / 4)","comparison_scope":"plan_recovery_tracker_root_canonicalized","measurement_scope":"output_before_token_accounting","published_with_release":true,"orientation":{"canonical_task_id":"orientation-context-intent","required_capabilities":["actionable_work","active_ownership","workspace_state"],"measured_winner_tokens":1087,"protocols":[{"task_id":"orientation-context-intent","command_count":1,"estimated_tokens":1087,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"context","field_path":"hierarchy"}],"active_ownership":[{"step_id":"context","field_path":"activity"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-operating-rules","command_count":4,"estimated_tokens":2139,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"open","field_path":"items"}],"active_ownership":[{"step_id":"in-progress","field_path":"items"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-contracts-next","command_count":2,"estimated_tokens":5203,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"next","field_path":"recommended.id"}],"active_ownership":[{"step_id":"next","field_path":"held_by_others"}],"workspace_state":[{"step_id":"next","field_path":"summary.in_progress"}]}}]},"tasks":[{"id":"orientation-context-intent","max_estimated_tokens":1087,"steps":[{"id":"context","max_estimated_tokens":1087,"accounting_mode":"self_reported"}]},{"id":"orientation-contracts-next","max_estimated_tokens":5203,"steps":[{"id":"contracts","max_estimated_tokens":4481,"accounting_mode":"self_reported"},{"id":"next","max_estimated_tokens":722,"accounting_mode":"self_reported"}]},{"id":"orientation-operating-rules","max_estimated_tokens":2139,"steps":[{"id":"context","max_estimated_tokens":1087,"accounting_mode":"self_reported"},{"id":"search","max_estimated_tokens":164,"accounting_mode":"self_reported"},{"id":"open","max_estimated_tokens":712,"accounting_mode":"self_reported"},{"id":"in-progress","max_estimated_tokens":176,"accounting_mode":"self_reported"}]},{"id":"context-bootstrap","max_estimated_tokens":2077,"steps":[{"id":"triage","max_estimated_tokens":619,"accounting_mode":"self_reported"},{"id":"orient","max_estimated_tokens":1087,"accounting_mode":"self_reported"},{"id":"inspect","max_estimated_tokens":371,"accounting_mode":"self_reported"}]},{"id":"closed-domain-recovery","max_estimated_tokens":630,"steps":[{"id":"refuse-intent","max_estimated_tokens":259,"accounting_mode":"self_reported"},{"id":"retry-intent","max_estimated_tokens":371,"accounting_mode":"self_reported"}]},{"id":"unknown-option-recovery","max_estimated_tokens":596,"steps":[{"id":"refuse-option","max_estimated_tokens":433,"accounting_mode":"self_reported"},{"id":"retry-option","max_estimated_tokens":163,"accounting_mode":"self_reported"}]},{"id":"lifecycle-mutation","max_estimated_tokens":888,"steps":[{"id":"create","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"inspect-open","max_estimated_tokens":363,"accounting_mode":"self_reported"},{"id":"close","max_estimated_tokens":107,"accounting_mode":"self_reported"},{"id":"inspect-closed","max_estimated_tokens":398,"accounting_mode":"self_reported"}]},{"id":"bulk-effect-outcomes","max_estimated_tokens":406,"steps":[{"id":"create-bulk-target","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"partial-effect","max_estimated_tokens":254,"accounting_mode":"self_reported"},{"id":"no-effect","max_estimated_tokens":132,"accounting_mode":"self_reported"}]},{"id":"plan-execution-mutations","max_estimated_tokens":806,"steps":[{"id":"create-plan","max_estimated_tokens":21,"accounting_mode":"self_reported"},{"id":"add-step","max_estimated_tokens":254,"accounting_mode":"self_reported"},{"id":"complete-step","max_estimated_tokens":253,"accounting_mode":"self_reported"},{"id":"inspect-plan","max_estimated_tokens":278,"accounting_mode":"self_reported"}]}],"composite_max_estimated_tokens":13832}
1
+ {"version":5,"transcript_version":2,"transcript_digest":"sha256:83d4523ca528ad5e8801cf5c7c02dcebbf2b87dc72422d4b8e648755dcdc36c2","estimator":"ceil(utf8_bytes / 4)","comparison_scope":"plan_recovery_tracker_root_canonicalized","measurement_scope":"output_before_token_accounting","published_with_release":true,"orientation":{"canonical_task_id":"orientation-context-intent","required_capabilities":["actionable_work","active_ownership","workspace_state"],"measured_winner_tokens":1051,"protocols":[{"task_id":"orientation-context-intent","command_count":1,"estimated_tokens":1051,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"context","field_path":"hierarchy"}],"active_ownership":[{"step_id":"context","field_path":"activity"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-operating-rules","command_count":4,"estimated_tokens":2067,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"open","field_path":"items"}],"active_ownership":[{"step_id":"in-progress","field_path":"items"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-contracts-next","command_count":2,"estimated_tokens":5213,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"next","field_path":"recommended.id"}],"active_ownership":[{"step_id":"next","field_path":"held_by_others"}],"workspace_state":[{"step_id":"next","field_path":"summary.in_progress"}]}}]},"tasks":[{"id":"orientation-context-intent","max_estimated_tokens":1051,"steps":[{"id":"context","max_estimated_tokens":1051,"accounting_mode":"self_reported"}]},{"id":"orientation-contracts-next","max_estimated_tokens":5213,"steps":[{"id":"contracts","max_estimated_tokens":4481,"accounting_mode":"self_reported"},{"id":"next","max_estimated_tokens":732,"accounting_mode":"self_reported"}]},{"id":"orientation-operating-rules","max_estimated_tokens":2067,"steps":[{"id":"context","max_estimated_tokens":1015,"accounting_mode":"self_reported"},{"id":"search","max_estimated_tokens":164,"accounting_mode":"self_reported"},{"id":"open","max_estimated_tokens":712,"accounting_mode":"self_reported"},{"id":"in-progress","max_estimated_tokens":176,"accounting_mode":"self_reported"}]},{"id":"context-bootstrap","max_estimated_tokens":2005,"steps":[{"id":"triage","max_estimated_tokens":619,"accounting_mode":"self_reported"},{"id":"orient","max_estimated_tokens":1015,"accounting_mode":"self_reported"},{"id":"inspect","max_estimated_tokens":371,"accounting_mode":"self_reported"}]},{"id":"closed-domain-recovery","max_estimated_tokens":630,"steps":[{"id":"refuse-intent","max_estimated_tokens":259,"accounting_mode":"self_reported"},{"id":"retry-intent","max_estimated_tokens":371,"accounting_mode":"self_reported"}]},{"id":"unknown-option-recovery","max_estimated_tokens":596,"steps":[{"id":"refuse-option","max_estimated_tokens":433,"accounting_mode":"self_reported"},{"id":"retry-option","max_estimated_tokens":163,"accounting_mode":"self_reported"}]},{"id":"lifecycle-mutation","max_estimated_tokens":873,"steps":[{"id":"create","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"inspect-open","max_estimated_tokens":363,"accounting_mode":"self_reported"},{"id":"close","max_estimated_tokens":92,"accounting_mode":"self_reported"},{"id":"inspect-closed","max_estimated_tokens":398,"accounting_mode":"self_reported"}]},{"id":"bulk-effect-outcomes","max_estimated_tokens":392,"steps":[{"id":"create-bulk-target","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"partial-effect","max_estimated_tokens":240,"accounting_mode":"self_reported"},{"id":"no-effect","max_estimated_tokens":132,"accounting_mode":"self_reported"}]},{"id":"plan-execution-mutations","max_estimated_tokens":806,"steps":[{"id":"create-plan","max_estimated_tokens":21,"accounting_mode":"self_reported"},{"id":"add-step","max_estimated_tokens":254,"accounting_mode":"self_reported"},{"id":"complete-step","max_estimated_tokens":253,"accounting_mode":"self_reported"},{"id":"inspect-plan","max_estimated_tokens":278,"accounting_mode":"self_reported"}]}],"composite_max_estimated_tokens":13633}
package/marketplace.json CHANGED
@@ -1 +1 @@
1
- {"name":"pm","owner":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"description":"Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.","version":"2026.10.30","plugins":[{"name":"pm-claude","source":"./plugins/pm-claude","description":"Native pm CLI integration for Claude Code — 32 MCP tools, 14 workflow skills with slash invocations, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.","version":"2026.10.30","author":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"homepage":"https://github.com/unbraind/pm-cli","repository":"https://github.com/unbraind/pm-cli","license":"MIT","keywords":["pm-cli","project-management","mcp","tasks","agents","workflows","git-native","task-tracker","ai"],"category":"productivity"}]}
1
+ {"name":"pm","owner":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"description":"Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.","version":"2026.10.31","plugins":[{"name":"pm-claude","source":"./plugins/pm-claude","description":"Native pm CLI integration for Claude Code — 32 MCP tools, 14 workflow skills with slash invocations, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.","version":"2026.10.31","author":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"homepage":"https://github.com/unbraind/pm-cli","repository":"https://github.com/unbraind/pm-cli","license":"MIT","keywords":["pm-cli","project-management","mcp","tasks","agents","workflows","git-native","task-tracker","ai"],"category":"productivity"}]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-cli",
3
- "version": "2026.10.30",
3
+ "version": "2026.10.31",
4
4
  "description": "Git-native project management CLI for humans and agents.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.28.5",
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-beads","version":"2026.10.30","private":true,"type":"module","description":"First-party pm package for importing Beads JSONL records.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-beads#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-beads"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","beads"],"pm":{"aliases":["beads"],"extensions":["extensions/beads"],"catalog":{"display_name":"Beads Import","category":"migration","summary":"Import Beads JSONL records into pm while preserving source IDs.","tags":["migration","beads","import"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-beads#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-beads","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-beads","version":"2026.10.31","private":true,"type":"module","description":"First-party pm package for importing Beads JSONL records.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-beads#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-beads"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","beads"],"pm":{"aliases":["beads"],"extensions":["extensions/beads"],"catalog":{"display_name":"Beads Import","category":"migration","summary":"Import Beads JSONL records into pm while preserving source IDs.","tags":["migration","beads","import"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-beads#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-beads","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -20,6 +20,7 @@ const CALENDAR_VIEW_NAMES = ["agenda", "day", "week", "month"] as const;
20
20
  // not leak into Sentry as crashes.
21
21
  class PmCliError extends Error {
22
22
  exitCode: number;
23
+ context: Record<string, unknown> = {};
23
24
  constructor(message: string, exitCode: number) {
24
25
  super(message);
25
26
  this.name = "PmCliError";
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-calendar","version":"2026.10.30","private":true,"type":"module","description":"First-party pm package for calendar and agenda views.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-calendar#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-calendar"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","calendar","agenda"],"pm":{"aliases":["calendar"],"extensions":["extensions/calendar"],"catalog":{"display_name":"Calendar Views","category":"workflow","summary":"Show agenda, day, week, and month views for deadlines, reminders, and scheduled events.","tags":["calendar","agenda","workflow"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-calendar#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-calendar","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-calendar","version":"2026.10.31","private":true,"type":"module","description":"First-party pm package for calendar and agenda views.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-calendar#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-calendar"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","calendar","agenda"],"pm":{"aliases":["calendar"],"extensions":["extensions/calendar"],"catalog":{"display_name":"Calendar Views","category":"workflow","summary":"Show agenda, day, week, and month views for deadlines, reminders, and scheduled events.","tags":["calendar","agenda","workflow"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-calendar#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-calendar","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-command-kit","version":"2026.10.30","private":true,"type":"module","description":"First-party pm exemplar package for the commands capability: registerCommand, registerFlags, and registerParser.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-command-kit#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-command-kit"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","sdk","commands","exemplar"],"pm":{"aliases":["command-kit"],"extensions":["extensions/command-kit"],"catalog":{"display_name":"Command Kit Exemplar","category":"sdk","summary":"Copy-paste-able exemplar for registerCommand, registerFlags, and registerParser.","tags":["sdk","commands","parser","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-command-kit#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-command-kit","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-command-kit","version":"2026.10.31","private":true,"type":"module","description":"First-party pm exemplar package for the commands capability: registerCommand, registerFlags, and registerParser.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-command-kit#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-command-kit"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","sdk","commands","exemplar"],"pm":{"aliases":["command-kit"],"extensions":["extensions/command-kit"],"catalog":{"display_name":"Command Kit Exemplar","category":"sdk","summary":"Copy-paste-able exemplar for registerCommand, registerFlags, and registerParser.","tags":["sdk","commands","parser","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-command-kit#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-command-kit","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-digital-twin","version":"2026.10.30","private":true,"type":"module","description":"Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-digital-twin"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","sdk","digital-twin","event-sourcing","temporal-graph","exemplar"],"pm":{"aliases":["digital-twin","twin"],"extensions":["extensions/digital-twin"],"catalog":{"display_name":"Digital Twin SDK Exemplar","category":"sdk","summary":"Temporal facility graph proving event replay, point-in-time state, invariants, federation, checkpoints, and compact exports through public SDK contracts.","tags":["sdk","digital-twin","event-sourcing","graph","offline-first","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin","report":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin/GAP_REPORT.md"}},"docs":["README.md","GAP_REPORT.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-digital-twin","version":"2026.10.31","private":true,"type":"module","description":"Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-digital-twin"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","sdk","digital-twin","event-sourcing","temporal-graph","exemplar"],"pm":{"aliases":["digital-twin","twin"],"extensions":["extensions/digital-twin"],"catalog":{"display_name":"Digital Twin SDK Exemplar","category":"sdk","summary":"Temporal facility graph proving event replay, point-in-time state, invariants, federation, checkpoints, and compact exports through public SDK contracts.","tags":["sdk","digital-twin","event-sourcing","graph","offline-first","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin","report":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin/GAP_REPORT.md"}},"docs":["README.md","GAP_REPORT.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-governance-audit","version":"2026.10.30","private":true,"type":"module","description":"First-party pm package for governance audit and normalization workflows.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-governance-audit#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-governance-audit"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","governance","audit","normalize","hooks"],"pm":{"aliases":["governance-audit","audit"],"extensions":["extensions/governance-audit"],"catalog":{"display_name":"Governance Audit","category":"governance","summary":"Run dedupe audits, comments audits, and normalize sweeps as package-owned workflows.","tags":["governance","audit","normalize","hooks"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-governance-audit#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-governance-audit","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-governance-audit","version":"2026.10.31","private":true,"type":"module","description":"First-party pm package for governance audit and normalization workflows.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-governance-audit#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-governance-audit"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","governance","audit","normalize","hooks"],"pm":{"aliases":["governance-audit","audit"],"extensions":["extensions/governance-audit"],"catalog":{"display_name":"Governance Audit","category":"governance","summary":"Run dedupe audits, comments audits, and normalize sweeps as package-owned workflows.","tags":["governance","audit","normalize","hooks"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-governance-audit#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-governance-audit","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-guide-shell","version":"2026.10.30","private":true,"type":"module","description":"First-party pm package for guide and shell completion workflows.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-guide-shell#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-guide-shell"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","guide","completion","shell"],"pm":{"aliases":["guide-shell"],"extensions":["extensions/guide-shell"],"catalog":{"display_name":"Guide + Shell UX","category":"workflow","summary":"Restore guide documentation and shell completion commands as package-owned UX surfaces.","tags":["guide","completion","shell"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-guide-shell#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-guide-shell","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-guide-shell","version":"2026.10.31","private":true,"type":"module","description":"First-party pm package for guide and shell completion workflows.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-guide-shell#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-guide-shell"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","guide","completion","shell"],"pm":{"aliases":["guide-shell"],"extensions":["extensions/guide-shell"],"catalog":{"display_name":"Guide + Shell UX","category":"workflow","summary":"Restore guide documentation and shell completion commands as package-owned UX surfaces.","tags":["guide","completion","shell"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-guide-shell#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-guide-shell","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-kanban","version":"2026.10.30","private":true,"type":"module","description":"First-party pm archetype package: a complete Kanban continuous-flow profile built on public SDK primitives.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-kanban#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-kanban"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","sdk","profile","archetype","kanban","exemplar"],"pm":{"aliases":["kanban"],"extensions":["extensions/kanban"],"catalog":{"display_name":"Kanban Archetype","category":"sdk","summary":"Installable Kanban continuous-flow archetype: Card item type, flow fields, and a ProjectProfileDefinition built on public SDK primitives.","tags":["sdk","profile","archetype","kanban","schema","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-kanban#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-kanban","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-kanban","version":"2026.10.31","private":true,"type":"module","description":"First-party pm archetype package: a complete Kanban continuous-flow profile built on public SDK primitives.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-kanban#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-kanban"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","sdk","profile","archetype","kanban","exemplar"],"pm":{"aliases":["kanban"],"extensions":["extensions/kanban"],"catalog":{"display_name":"Kanban Archetype","category":"sdk","summary":"Installable Kanban continuous-flow archetype: Card item type, flow fields, and a ProjectProfileDefinition built on public SDK primitives.","tags":["sdk","profile","archetype","kanban","schema","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-kanban#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-kanban","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-lifecycle-hooks","version":"2026.10.30","private":true,"type":"module","description":"First-party pm package demonstrating safe lifecycle hook registration.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-lifecycle-hooks#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-lifecycle-hooks"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","hooks","lifecycle","sdk"],"pm":{"aliases":["lifecycle-hooks"],"extensions":["extensions/lifecycle-hooks"],"catalog":{"display_name":"Lifecycle Hooks","category":"sdk","summary":"Default-inert lifecycle hook exemplar for package authors.","tags":["hooks","lifecycle","sdk"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-lifecycle-hooks#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-lifecycle-hooks","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-lifecycle-hooks","version":"2026.10.31","private":true,"type":"module","description":"First-party pm package demonstrating safe lifecycle hook registration.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-lifecycle-hooks#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-lifecycle-hooks"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","hooks","lifecycle","sdk"],"pm":{"aliases":["lifecycle-hooks"],"extensions":["extensions/lifecycle-hooks"],"catalog":{"display_name":"Lifecycle Hooks","category":"sdk","summary":"Default-inert lifecycle hook exemplar for package authors.","tags":["hooks","lifecycle","sdk"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-lifecycle-hooks#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-lifecycle-hooks","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-linked-test-adapters","version":"2026.10.30","private":true,"type":"module","description":"First-party pm package for optional linked-test run management adapters and reporters.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-linked-test-adapters#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-linked-test-adapters"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","linked-tests","background-runs","test-runs"],"pm":{"aliases":["linked-test-adapters"],"extensions":["extensions/linked-test-adapters"],"catalog":{"display_name":"Linked Test Adapters","category":"testing","summary":"Restore optional linked-test run management/reporting command surfaces.","tags":["tests","linked-tests","background","reporting"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-linked-test-adapters#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-linked-test-adapters","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-linked-test-adapters","version":"2026.10.31","private":true,"type":"module","description":"First-party pm package for optional linked-test run management adapters and reporters.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-linked-test-adapters#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-linked-test-adapters"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","linked-tests","background-runs","test-runs"],"pm":{"aliases":["linked-test-adapters"],"extensions":["extensions/linked-test-adapters"],"catalog":{"display_name":"Linked Test Adapters","category":"testing","summary":"Restore optional linked-test run management/reporting command surfaces.","tags":["tests","linked-tests","background","reporting"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-linked-test-adapters#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-linked-test-adapters","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-search-advanced","version":"2026.10.30","private":true,"type":"module","description":"First-party pm package for semantic, hybrid, and reindex search workflows.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-search-advanced#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-search-advanced"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","search","reindex","semantic","hybrid"],"pm":{"aliases":["search-advanced"],"extensions":["extensions/search-advanced"],"catalog":{"display_name":"Advanced Search","category":"search","summary":"Enable semantic/hybrid search modes and reindex workflows.","tags":["search","semantic","hybrid","reindex"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-search-advanced#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-search-advanced","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-search-advanced","version":"2026.10.31","private":true,"type":"module","description":"First-party pm package for semantic, hybrid, and reindex search workflows.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-search-advanced#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-search-advanced"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","search","reindex","semantic","hybrid"],"pm":{"aliases":["search-advanced"],"extensions":["extensions/search-advanced"],"catalog":{"display_name":"Advanced Search","category":"search","summary":"Enable semantic/hybrid search modes and reindex workflows.","tags":["search","semantic","hybrid","reindex"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-search-advanced#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-search-advanced","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-templates","version":"2026.10.30","private":true,"type":"module","description":"First-party pm package for reusable create templates.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-templates#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-templates"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","templates"],"pm":{"aliases":["templates"],"extensions":["extensions/templates"],"catalog":{"display_name":"Create Templates","category":"workflow","summary":"Save, list, show, and apply reusable pm create option templates.","tags":["templates","create","workflow"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-templates#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-templates","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-templates","version":"2026.10.31","private":true,"type":"module","description":"First-party pm package for reusable create templates.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-templates#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-templates"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","templates"],"pm":{"aliases":["templates"],"extensions":["extensions/templates"],"catalog":{"display_name":"Create Templates","category":"workflow","summary":"Save, list, show, and apply reusable pm create option templates.","tags":["templates","create","workflow"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-templates#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-templates","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-todos","version":"2026.10.30","private":true,"type":"module","description":"First-party pm package for Todo markdown import and export.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-todos#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-todos"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","todos"],"pm":{"aliases":["todos"],"extensions":["extensions/todos"],"catalog":{"display_name":"Todos Import/Export","category":"migration","summary":"Import and export Todo markdown tasks through pm package commands.","tags":["migration","todos","import","export"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-todos#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-todos","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-todos","version":"2026.10.31","private":true,"type":"module","description":"First-party pm package for Todo markdown import and export.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-todos#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-todos"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","todos"],"pm":{"aliases":["todos"],"extensions":["extensions/todos"],"catalog":{"display_name":"Todos Import/Export","category":"migration","summary":"Import and export Todo markdown tasks through pm package commands.","tags":["migration","todos","import","export"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-todos#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-todos","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-vcs-sdk-exemplar","version":"2026.10.30","private":true,"type":"module","description":"Beyond-PM exemplar: a VCS-style changeset workflow built entirely on public pm SDK and extension primitives.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-vcs#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-vcs"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","sdk","vcs","event-sourcing","exemplar"],"pm":{"aliases":["vcs-exemplar"],"extensions":["extensions/vcs"],"catalog":{"display_name":"VCS SDK Exemplar","category":"sdk","summary":"Non-PM changeset/ref workflow proving custom schema, domain commands, hooks, history replay, and typed relationship events through public SDK contracts.","tags":["sdk","vcs","event-sourcing","graph","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-vcs#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-vcs","report":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-vcs/GAP_REPORT.md"}},"docs":["README.md","GAP_REPORT.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-vcs-sdk-exemplar","version":"2026.10.31","private":true,"type":"module","description":"Beyond-PM exemplar: a VCS-style changeset workflow built entirely on public pm SDK and extension primitives.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-vcs#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-vcs"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","sdk","vcs","event-sourcing","exemplar"],"pm":{"aliases":["vcs-exemplar"],"extensions":["extensions/vcs"],"catalog":{"display_name":"VCS SDK Exemplar","category":"sdk","summary":"Non-PM changeset/ref workflow proving custom schema, domain commands, hooks, history replay, and typed relationship events through public SDK contracts.","tags":["sdk","vcs","event-sourcing","graph","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-vcs#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-vcs","report":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-vcs/GAP_REPORT.md"}},"docs":["README.md","GAP_REPORT.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"$schema":"https://json.schemastore.org/claude-code-plugin-manifest.json","name":"pm-claude","displayName":"pm CLI","description":"Native pm CLI integration for Claude Code — 32 MCP tools, 14 skills with slash invocations, 4 subagents (coordinator, delivery-chain, triage, verification), hybrid TUI task tracking (pm as persistent store + Claude Code task panel as live view), session context injection, and full git-based project management without leaving Claude Code.","version":"2026.10.30","author":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"homepage":"https://github.com/unbraind/pm-cli","repository":"https://github.com/unbraind/pm-cli","license":"MIT","keywords":["pm-cli","project-management","mcp","tasks","agents","workflows","git-native","task-tracker","ai"]}
1
+ {"$schema":"https://json.schemastore.org/claude-code-plugin-manifest.json","name":"pm-claude","displayName":"pm CLI","description":"Native pm CLI integration for Claude Code — 32 MCP tools, 14 skills with slash invocations, 4 subagents (coordinator, delivery-chain, triage, verification), hybrid TUI task tracking (pm as persistent store + Claude Code task panel as live view), session context injection, and full git-based project management without leaving Claude Code.","version":"2026.10.31","author":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"homepage":"https://github.com/unbraind/pm-cli","repository":"https://github.com/unbraind/pm-cli","license":"MIT","keywords":["pm-cli","project-management","mcp","tasks","agents","workflows","git-native","task-tracker","ai"]}
@@ -1 +1 @@
1
- {"name":"pm-claude-runtime","private":true,"type":"module","version":"2026.10.30","dependencies":{"@unbrained/pm-cli":"2026.10.30"}}
1
+ {"name":"pm-claude-runtime","private":true,"type":"module","version":"2026.10.31","dependencies":{"@unbrained/pm-cli":"2026.10.31"}}
@@ -1 +1 @@
1
- {"name":"pm-codex","version":"2026.10.30","description":"Native Codex integration for pm-cli with bundled MCP tools, skills, commands, and agent workflows.","author":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"homepage":"https://github.com/unbraind/pm-cli/tree/main/plugins/pm-codex","repository":"https://github.com/unbraind/pm-cli","license":"MIT","keywords":["pm-cli","codex","mcp","project-management","agents","tasks","workflows"],"skills":"./skills/","mcpServers":"./.mcp.json","interface":{"displayName":"pm CLI","shortDescription":"Native pm tracker tools and agent workflows","longDescription":"Use pm CLI from Codex through native MCP tools instead of shelling out to the pm command. The plugin bundles tracker operations, skills, command prompts, and subagent workflow guidance for planning, execution, validation, release, and audit work.","developerName":"unbrained","category":"Coding","capabilities":["Interactive","Read","Write"],"websiteURL":"https://github.com/unbraind/pm-cli","privacyPolicyURL":"https://github.com/unbraind/pm-cli/blob/main/SECURITY.md","termsOfServiceURL":"https://github.com/unbraind/pm-cli/blob/main/LICENSE","defaultPrompt":["Use pm CLI to orient, claim, track, verify, and close this repository task"],"composerIcon":"./assets/pm-cli-small.svg","logo":"./assets/pm-cli-small.svg","screenshots":[],"brandColor":"#2563EB"}}
1
+ {"name":"pm-codex","version":"2026.10.31","description":"Native Codex integration for pm-cli with bundled MCP tools, skills, commands, and agent workflows.","author":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"homepage":"https://github.com/unbraind/pm-cli/tree/main/plugins/pm-codex","repository":"https://github.com/unbraind/pm-cli","license":"MIT","keywords":["pm-cli","codex","mcp","project-management","agents","tasks","workflows"],"skills":"./skills/","mcpServers":"./.mcp.json","interface":{"displayName":"pm CLI","shortDescription":"Native pm tracker tools and agent workflows","longDescription":"Use pm CLI from Codex through native MCP tools instead of shelling out to the pm command. The plugin bundles tracker operations, skills, command prompts, and subagent workflow guidance for planning, execution, validation, release, and audit work.","developerName":"unbrained","category":"Coding","capabilities":["Interactive","Read","Write"],"websiteURL":"https://github.com/unbraind/pm-cli","privacyPolicyURL":"https://github.com/unbraind/pm-cli/blob/main/SECURITY.md","termsOfServiceURL":"https://github.com/unbraind/pm-cli/blob/main/LICENSE","defaultPrompt":["Use pm CLI to orient, claim, track, verify, and close this repository task"],"composerIcon":"./assets/pm-cli-small.svg","logo":"./assets/pm-cli-small.svg","screenshots":[],"brandColor":"#2563EB"}}
@@ -1 +1 @@
1
- {"name":"pm-codex-runtime","private":true,"type":"module","version":"2026.10.30","dependencies":{"@unbrained/pm-cli":"2026.10.30"}}
1
+ {"name":"pm-codex-runtime","private":true,"type":"module","version":"2026.10.31","dependencies":{"@unbrained/pm-cli":"2026.10.31"}}
@@ -1 +1 @@
1
- {"$schema":"https://agent-plugins.org/schemas/1.0.0/plugin.schema.json","name":"pm-codex","version":"2026.10.30","description":"Repository-native project context workflows and a version-pinned pm MCP server for Codex.","author":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"homepage":"https://github.com/unbraind/pm-cli/tree/main/plugins/pm-codex","repository":"https://github.com/unbraind/pm-cli","license":"MIT","keywords":["pm-cli","codex","mcp","project-management","agents"],"extensions":{"com.openai":{"interface":{"displayName":"pm CLI","shortDescription":"Track project context with pm","longDescription":"Orient, plan, implement, verify, and hand off work with repository-native pm records and a bundled MCP server.","developerName":"unbrained","category":"Coding","capabilities":["Interactive","Read","Write"],"websiteURL":"https://github.com/unbraind/pm-cli","privacyPolicyURL":"https://github.com/unbraind/pm-cli/blob/main/SECURITY.md","termsOfServiceURL":"https://github.com/unbraind/pm-cli/blob/main/LICENSE","defaultPrompt":["Use pm to orient, track, verify, and hand off this repository task."],"composerIcon":"./assets/pm-cli-small.svg","logo":"./assets/pm-cli-small.svg","brandColor":"#2563EB"}}}}
1
+ {"$schema":"https://agent-plugins.org/schemas/1.0.0/plugin.schema.json","name":"pm-codex","version":"2026.10.31","description":"Repository-native project context workflows and a version-pinned pm MCP server for Codex.","author":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"homepage":"https://github.com/unbraind/pm-cli/tree/main/plugins/pm-codex","repository":"https://github.com/unbraind/pm-cli","license":"MIT","keywords":["pm-cli","codex","mcp","project-management","agents"],"extensions":{"com.openai":{"interface":{"displayName":"pm CLI","shortDescription":"Track project context with pm","longDescription":"Orient, plan, implement, verify, and hand off work with repository-native pm records and a bundled MCP server.","developerName":"unbrained","category":"Coding","capabilities":["Interactive","Read","Write"],"websiteURL":"https://github.com/unbraind/pm-cli","privacyPolicyURL":"https://github.com/unbraind/pm-cli/blob/main/SECURITY.md","termsOfServiceURL":"https://github.com/unbraind/pm-cli/blob/main/LICENSE","defaultPrompt":["Use pm to orient, track, verify, and hand off this repository task."],"composerIcon":"./assets/pm-cli-small.svg","logo":"./assets/pm-cli-small.svg","brandColor":"#2563EB"}}}}