@unbrained/pm-cli 2026.10.19 → 2026.10.21

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 (192) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +58 -0
  3. package/dist/cli/error-guidance.d.ts +15 -0
  4. package/dist/cli/error-guidance.js +2 -2
  5. package/dist/cli/main.js +1 -1
  6. package/dist/cli/register-list-query.js +2 -2
  7. package/dist/cli/register-operations.js +1 -1
  8. package/dist/cli/register-structured-mutation.js +1 -1
  9. package/dist/cli-bundle/bundle-manifest.json +1 -1
  10. package/dist/cli-bundle/chunks/{chunk-4MJ6WBMA.js → chunk-2B5HAZFK.js} +2 -2
  11. package/dist/cli-bundle/chunks/chunk-4D25HF3V.js +2 -0
  12. package/dist/cli-bundle/chunks/{chunk-LBEMB3BW.js → chunk-4OYU5OXQ.js} +2 -2
  13. package/dist/cli-bundle/chunks/{chunk-4XFVAXA4.js → chunk-5PZ7JNMI.js} +2 -2
  14. package/dist/cli-bundle/chunks/chunk-C6SAXKBO.js +3 -0
  15. package/dist/cli-bundle/chunks/chunk-DIKQ2AL5.js +2 -0
  16. package/dist/cli-bundle/chunks/chunk-DIR3YEFD.js +2 -0
  17. package/dist/cli-bundle/chunks/{chunk-O2ZRRLAP.js → chunk-DJQVNDXO.js} +3 -3
  18. package/dist/cli-bundle/chunks/chunk-DR6DUBTU.js +30 -0
  19. package/dist/cli-bundle/chunks/{chunk-5GZSX5HU.js → chunk-EMGMLKRV.js} +47 -47
  20. package/dist/cli-bundle/chunks/chunk-GWIGZDRS.js +3 -0
  21. package/dist/cli-bundle/chunks/chunk-IB7UB5TE.js +2 -0
  22. package/dist/cli-bundle/chunks/{chunk-QG4LMU7A.js → chunk-KBSVPUFD.js} +46 -45
  23. package/dist/cli-bundle/chunks/{chunk-NX7Q4LGN.js → chunk-MOC5BJHW.js} +2 -2
  24. package/dist/cli-bundle/chunks/chunk-MZZIAC6S.js +20 -0
  25. package/dist/cli-bundle/chunks/{chunk-DMFM5R4G.js → chunk-NNB65OOO.js} +2 -2
  26. package/dist/cli-bundle/chunks/{chunk-D3EDNAN7.js → chunk-QPV6UD55.js} +2 -2
  27. package/dist/cli-bundle/chunks/{chunk-6DS5CAN2.js → chunk-TMXWWOPJ.js} +2 -2
  28. package/dist/cli-bundle/chunks/{chunk-H3XYP24A.js → chunk-V3XONSVC.js} +2 -2
  29. package/dist/cli-bundle/chunks/chunk-V5GJTXYW.js +126 -0
  30. package/dist/cli-bundle/chunks/chunk-XAWE4EAK.js +2 -0
  31. package/dist/cli-bundle/chunks/{chunk-XH7C3A5N.js → chunk-ZNKFMIVA.js} +6 -6
  32. package/dist/cli-bundle/chunks/context-budget-recovery-L2WP5S26.js +2 -0
  33. package/dist/cli-bundle/{focused-chunks/indexed-receipt-blobs-QW2VWWJE.js → chunks/indexed-receipt-blobs-65XXSPPR.js} +2 -2
  34. package/dist/cli-bundle/chunks/mutation-admission-FNWOVJLN.js +2 -0
  35. package/dist/cli-bundle/chunks/{register-list-query-WQUVDJIH.js → register-list-query-6PT5Y2EZ.js} +5 -5
  36. package/dist/cli-bundle/chunks/{register-mutation-IWIBQIO3.js → register-mutation-TAIQV46L.js} +4 -4
  37. package/dist/cli-bundle/chunks/register-operations-ONIRO22G.js +2 -0
  38. package/dist/cli-bundle/chunks/register-setup-OQMUZBJV.js +2 -0
  39. package/dist/cli-bundle/chunks/{settlement-hook-UNFMCKKQ.js → settlement-hook-UVFYSBMU.js} +2 -2
  40. package/dist/cli-bundle/chunks/stage-FCPVFO3B.js +2 -0
  41. package/dist/cli-bundle/focused-chunks/chunk-32ZKLRWM.js +2 -0
  42. package/dist/cli-bundle/focused-chunks/{chunk-3TEIACFU.js → chunk-3LWH2RJC.js} +3 -3
  43. package/dist/cli-bundle/focused-chunks/{chunk-OV2WVLUR.js → chunk-44353U27.js} +2 -2
  44. package/dist/cli-bundle/focused-chunks/chunk-4HJVAUFX.js +2 -0
  45. package/dist/cli-bundle/focused-chunks/{chunk-SKYLOPU2.js → chunk-5IMM7GOF.js} +2 -2
  46. package/dist/cli-bundle/focused-chunks/{chunk-JBJJW2WL.js → chunk-6QSZHRM7.js} +2 -2
  47. package/dist/cli-bundle/focused-chunks/chunk-7UD7XTOE.js +12 -0
  48. package/dist/cli-bundle/focused-chunks/{chunk-H6BVQ63U.js → chunk-CUWNNU4N.js} +2 -2
  49. package/dist/cli-bundle/focused-chunks/chunk-E2S42XCT.js +2 -0
  50. package/dist/cli-bundle/focused-chunks/chunk-GHQVM6K6.js +2 -0
  51. package/dist/cli-bundle/focused-chunks/chunk-GRSQGMRR.js +2 -0
  52. package/dist/cli-bundle/focused-chunks/{chunk-HYMYAGSY.js → chunk-HNCMYF2W.js} +2 -2
  53. package/dist/cli-bundle/focused-chunks/{chunk-WZTEFFQI.js → chunk-IAGFXKMZ.js} +2 -2
  54. package/dist/cli-bundle/focused-chunks/chunk-JI3RXXRN.js +78 -0
  55. package/dist/cli-bundle/focused-chunks/chunk-JMZPZQHR.js +26 -0
  56. package/dist/cli-bundle/focused-chunks/{chunk-RLRMNFLF.js → chunk-KVYUQS6Y.js} +2 -2
  57. package/dist/cli-bundle/focused-chunks/chunk-O3M6YWVL.js +2 -0
  58. package/dist/cli-bundle/focused-chunks/chunk-P5D7MHDS.js +20 -0
  59. package/dist/cli-bundle/focused-chunks/chunk-PDOWLRHC.js +8 -0
  60. package/dist/cli-bundle/focused-chunks/chunk-SVOOGGAK.js +2 -0
  61. package/dist/cli-bundle/focused-chunks/chunk-T27TLSEU.js +65 -0
  62. package/dist/cli-bundle/focused-chunks/{chunk-GWTV45SB.js → chunk-VD64TPXI.js} +2 -2
  63. package/dist/cli-bundle/focused-chunks/{chunk-JDBO7SMR.js → chunk-VE6MTRH5.js} +2 -2
  64. package/dist/cli-bundle/focused-chunks/chunk-XE7P7N5X.js +8 -0
  65. package/dist/cli-bundle/focused-chunks/chunk-YIWDX6KO.js +91 -0
  66. package/dist/cli-bundle/focused-chunks/context-budget-recovery-5MKOCGY5.js +2 -0
  67. package/dist/cli-bundle/{chunks/indexed-receipt-blobs-BVSHK4WQ.js → focused-chunks/indexed-receipt-blobs-CRP6HAZY.js} +2 -2
  68. package/dist/cli-bundle/focused-chunks/mutation-admission-KM57KDDF.js +2 -0
  69. package/dist/cli-bundle/focused-chunks/{settlement-hook-X4FNHTOD.js → settlement-hook-MNCHFCAX.js} +2 -2
  70. package/dist/cli-bundle/focused-chunks/stage-UJYGWNZ7.js +2 -0
  71. package/dist/cli-bundle/main.js +21 -21
  72. package/dist/cli-bundle/sdk-authoring.js +1 -1
  73. package/dist/cli-bundle/sdk-contracts.js +2 -2
  74. package/dist/cli-bundle/sdk-core.js +23 -23
  75. package/dist/cli-bundle/sdk-governance.js +1 -1
  76. package/dist/cli-bundle/sdk-graph.js +1 -1
  77. package/dist/cli-bundle/sdk-merge.js +58 -57
  78. package/dist/cli-bundle/sdk-query.js +1 -1
  79. package/dist/cli-bundle/sdk-runtime.js +1 -1
  80. package/dist/cli-bundle/sdk-testing.js +1 -1
  81. package/dist/cli-bundle/sdk.js +8 -8
  82. package/dist/core/fs/fs-utils.d.ts +2 -2
  83. package/dist/core/fs/fs-utils.js +1 -1
  84. package/dist/core/history/event-index.js +2 -2
  85. package/dist/core/item/actionability.js +1 -1
  86. package/dist/core/lock/lock-gc.d.ts +12 -5
  87. package/dist/core/lock/lock-gc.js +1 -1
  88. package/dist/core/lock/lock-owner.d.ts +33 -0
  89. package/dist/core/lock/lock-owner.js +2 -0
  90. package/dist/core/lock/lock.d.ts +11 -22
  91. package/dist/core/lock/lock.js +4 -3
  92. package/dist/core/output/output.d.ts +7 -2
  93. package/dist/core/output/output.js +5 -5
  94. package/dist/core/shared/errors.d.ts +50 -0
  95. package/dist/core/shared/errors.js +1 -1
  96. package/dist/core/store/settings.js +2 -2
  97. package/dist/mcp/server.js +1 -1
  98. package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
  99. package/dist/sdk/core.d.ts +1 -1
  100. package/dist/sdk/core.js +1 -1
  101. package/dist/sdk/dependencies/context-budget-recovery.d.ts +21 -0
  102. package/dist/sdk/dependencies/context-budget-recovery.js +2 -0
  103. package/dist/sdk/dependencies.js +1 -1
  104. package/dist/sdk/errors.d.ts +4 -1
  105. package/dist/sdk/errors.js +1 -1
  106. package/dist/sdk/extension-command-context.js +2 -2
  107. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  108. package/dist/sdk/governance/assurance-action.js +1 -1
  109. package/dist/sdk/governance/assurance.js +1 -1
  110. package/dist/sdk/governance/health.js +2 -2
  111. package/dist/sdk/index.d.ts +1 -1
  112. package/dist/sdk/index.js +1 -1
  113. package/dist/sdk/item-transaction.d.ts +13 -0
  114. package/dist/sdk/item-transaction.js +1 -1
  115. package/dist/sdk/lifecycle/structured-mutation-plan.d.ts +14 -1
  116. package/dist/sdk/lifecycle/structured-mutation-plan.js +1 -1
  117. package/dist/sdk/output/list-envelope.d.ts +7 -0
  118. package/dist/sdk/output/list-envelope.js +2 -0
  119. package/dist/sdk/output.d.ts +1 -0
  120. package/dist/sdk/output.js +2 -2
  121. package/dist/sdk/pagination.d.ts +3 -3
  122. package/dist/sdk/pagination.js +1 -1
  123. package/dist/sdk/public-surface.json +1 -1
  124. package/dist/sdk/query/context.js +2 -2
  125. package/dist/sdk/query/list.d.ts +2 -0
  126. package/dist/sdk/query/list.js +1 -1
  127. package/dist/sdk/query/projection-contracts.d.ts +1 -1
  128. package/dist/sdk/query/projection-contracts.js +1 -1
  129. package/dist/sdk/relationship-context.d.ts +2 -0
  130. package/dist/sdk/relationship-context.js +1 -1
  131. package/dist/sdk/runtime/mutation-admission.d.ts +2 -0
  132. package/dist/sdk/runtime/mutation-admission.js +2 -0
  133. package/dist/sdk/runtime-input.d.ts +2 -0
  134. package/dist/sdk/runtime-input.js +1 -1
  135. package/dist/sdk/runtime.js +1 -1
  136. package/dist/sdk/structured-mutations.d.ts +2 -0
  137. package/dist/sdk/structured-mutations.js +1 -1
  138. package/dist/sdk/test/execution.d.ts +1 -0
  139. package/dist/sdk/test/execution.js +2 -2
  140. package/docs/AGENT_RUNTIME_PRIMITIVES.md +9 -0
  141. package/docs/ASSURANCE.md +17 -2
  142. package/docs/COMMANDS.md +31 -3
  143. package/docs/CONFIGURATION.md +29 -0
  144. package/docs/CONTEXT_RELEVANCE.md +15 -0
  145. package/docs/DEVELOPMENT_DEPENDENCY_SECURITY.md +26 -3
  146. package/docs/PR_REVIEW_LOOP.md +32 -12
  147. package/docs/SCRIPTING.md +10 -0
  148. package/docs/SDK.md +144 -0
  149. package/docs/TESTING.md +43 -1
  150. package/docs/agent-task-token-baseline.json +1 -1
  151. package/marketplace.json +1 -1
  152. package/package.json +1 -1
  153. package/packages/pm-beads/package.json +1 -1
  154. package/packages/pm-calendar/package.json +1 -1
  155. package/packages/pm-command-kit/package.json +1 -1
  156. package/packages/pm-digital-twin/package.json +1 -1
  157. package/packages/pm-governance-audit/package.json +1 -1
  158. package/packages/pm-guide-shell/package.json +1 -1
  159. package/packages/pm-kanban/package.json +1 -1
  160. package/packages/pm-lifecycle-hooks/package.json +1 -1
  161. package/packages/pm-linked-test-adapters/package.json +1 -1
  162. package/packages/pm-search-advanced/package.json +1 -1
  163. package/packages/pm-templates/package.json +1 -1
  164. package/packages/pm-todos/package.json +1 -1
  165. package/packages/pm-vcs/package.json +1 -1
  166. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  167. package/plugins/pm-claude/package.json +1 -1
  168. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  169. package/plugins/pm-codex/package.json +1 -1
  170. package/plugins/pm-codex/plugin.json +1 -1
  171. package/runtime-dependencies.json +1 -1
  172. package/dist/cli-bundle/chunks/chunk-4CXQSRSP.js +0 -126
  173. package/dist/cli-bundle/chunks/chunk-4ICKT4GH.js +0 -3
  174. package/dist/cli-bundle/chunks/chunk-OEJ3G7XT.js +0 -20
  175. package/dist/cli-bundle/chunks/chunk-QBNEZII5.js +0 -30
  176. package/dist/cli-bundle/chunks/chunk-QKAAZWGC.js +0 -3
  177. package/dist/cli-bundle/chunks/chunk-TK3G3GAP.js +0 -2
  178. package/dist/cli-bundle/chunks/register-operations-SUWOZNDU.js +0 -2
  179. package/dist/cli-bundle/chunks/register-setup-QGM5YJW7.js +0 -2
  180. package/dist/cli-bundle/chunks/stage-7DELI4Z5.js +0 -2
  181. package/dist/cli-bundle/focused-chunks/chunk-2IEWB6MB.js +0 -2
  182. package/dist/cli-bundle/focused-chunks/chunk-5YTOYBTZ.js +0 -65
  183. package/dist/cli-bundle/focused-chunks/chunk-BJMPRB7A.js +0 -91
  184. package/dist/cli-bundle/focused-chunks/chunk-ENZMATOY.js +0 -20
  185. package/dist/cli-bundle/focused-chunks/chunk-EOQ6W25I.js +0 -8
  186. package/dist/cli-bundle/focused-chunks/chunk-FEN7WOOP.js +0 -12
  187. package/dist/cli-bundle/focused-chunks/chunk-JCLC6HKT.js +0 -8
  188. package/dist/cli-bundle/focused-chunks/chunk-KLJN44VY.js +0 -2
  189. package/dist/cli-bundle/focused-chunks/chunk-L4PL3GZR.js +0 -2
  190. package/dist/cli-bundle/focused-chunks/chunk-PXDR77TO.js +0 -78
  191. package/dist/cli-bundle/focused-chunks/chunk-Y54ONBEX.js +0 -25
  192. package/dist/cli-bundle/focused-chunks/stage-MZSVQYO4.js +0 -2
@@ -15,6 +15,7 @@ capture, avoiding repeated diff hunks that are irrelevant to marker matching.
15
15
  ```bash
16
16
  node scripts/reviews/pr-review-loop.mjs inventory --pr 123 > /tmp/pr-123-review-inventory.json
17
17
  node scripts/reviews/pr-review-loop.mjs watch --pr 123 --interval 30 > /tmp/pr-123-review-inventory.json
18
+ node scripts/reviews/pr-review-loop.mjs watch --pr 123 --phase reviews --interval 30 > /tmp/pr-123-full-review-inventory.json
18
19
  node scripts/reviews/pr-review-loop.mjs react --node-id IC_kw... --reaction THUMBS_UP
19
20
  node scripts/reviews/pr-review-loop.mjs acknowledge --pr 123 --node-id PRR_kw... --revision '<revision>' --reaction THUMBS_UP --body "CodeRabbit feedback implemented: https://github.com/owner/repo/pull/123#pullrequestreview-456. The suggested edge case is covered by test X."
20
21
  node scripts/reviews/pr-review-loop.mjs reply-inline --pr 123 --comment-id 456 --body "Addressed in abc123."
@@ -43,17 +44,34 @@ markers then distinguish revised feedback and suppress duplicate retry replies
43
44
  for that same revision. Inline markers are matched only within the selected
44
45
  reply thread. Legacy calls without the flag retain their existing behavior.
45
46
 
46
- After every push or reviewer retrigger, run `watch`. It delegates waiting to
47
- `gh pr checks --watch`, because reviewer agents report completion through GitHub
48
- checks, and only fetches the complete conversation inventory after those checks
49
- finish. Native watch success covers emitted checks only: a required provider may
47
+ After every push or reviewer retrigger, run `watch`. Its default `checks` phase
48
+ delegates waiting to `gh pr checks --watch --fail-fast`, returning the complete
49
+ exact-head conversation inventory as soon as a check fails, even while an optional
50
+ reviewer remains pending. Fix that failure before starting another wait. Use
51
+ `--phase reviews` for the separate blocking review-completion phase: it delegates
52
+ to `gh pr checks --watch` without fail-fast and waits for every emitted check.
53
+ Both phases record `pendingChecks` and `unavailableChecks` from the final rollup,
54
+ including names, states, URLs and whether each context is required. Neutral,
55
+ skipped, canceled and other unavailable signals do not establish review approval;
56
+ inspect the retained conversations for provider quota or service limitations.
57
+ Pending checks prevent a successful receipt even if GitHub reports `CLEAN`.
58
+ This behavior is tracked by [pm-jm7m3o](../.agents/pm/tasks/pm-jm7m3o.toon).
59
+ Native watch success covers emitted checks only: a required provider may
50
60
  never emit its context. The helper unions classic branch-protection requirements
51
- with all effective ruleset requirements, compares those names with the complete
52
- head rollup, and records `mergeReadiness.requiredContexts`, `missingContexts`, and
53
- GitHub's `mergeStateStatus`. An attempt is `passed` only when no required name is
54
- missing and GitHub reports `CLEAN`. GitHub's merge state also retains enforcement
55
- of expected check publishers and other merge requirements; a matching name alone
56
- does not establish that its expected app passed. Missing contexts and blocked or
61
+ with all effective ruleset requirements and retains publisher bindings in
62
+ `mergeReadiness.requiredChecks` alongside `requiredContexts`. Bound requirements
63
+ need both a name in the head rollup and paginated exact-head check-run evidence
64
+ from the expected app. A wrong or unavailable check-run publisher remains in
65
+ `missingContexts`; unbound legacy contexts retain name-based presence checks.
66
+ Commit statuses expose no app identity in the rollup. Status-only bound contexts
67
+ are disclosed in `publisherUnverifiable` with source `commit_status` and rely on
68
+ GitHub's `CLEAN` verdict to enforce the publisher binding. If the same context is
69
+ also emitted as a check run, that run still requires exact-head app evidence.
70
+ The receipt records GitHub's `mergeStateStatus` independently: an attempt is
71
+ `passed` only when no requirement is missing and GitHub reports `CLEAN`.
72
+ Publisher presence does not establish a passing verdict; GitHub retains that
73
+ enforcement along with other merge requirements. Publisher evidence is tracked by
74
+ [pm-5p48kf](../.agents/pm/tasks/pm-5p48kf.toon). Missing contexts and blocked or
57
75
  unknown merge state remain `incomplete`; native watch failures remain `failed`.
58
76
  Superseded attempts carry `superseded: true` and never certify readiness. Unavailable policy or status reads
59
77
  fail visibly instead of certifying readiness. Successful
@@ -62,8 +80,10 @@ The direct `watch` command emits its complete JSON receipt before exiting `1`
62
80
  for `incomplete` or `failed`, and exits `0` only for `passed`. Shell automation
63
81
  can therefore stop on the exit status while retaining all findings for triage.
64
82
 
65
- A failed reviewer check is still a completed review signal: `watch` records
66
- the failed outcome and returns all findings instead of aborting before inventory.
83
+ A failed check is still an actionable signal: `watch` records the failed outcome
84
+ and returns all findings instead of aborting before inventory. A fail-fast receipt
85
+ does not establish completion of pending reviews; the explicit review phase and
86
+ final inventory retain that separate obligation.
67
87
  If the PR head or target branch changes during the wait or final readiness read,
68
88
  the helper watches the new target, up to three consecutive attempts, before
69
89
  returning exact-head state. It does not poll an absent required provider status.
package/docs/SCRIPTING.md CHANGED
@@ -101,6 +101,16 @@ receipts without that evidence retain their existing envelope.
101
101
 
102
102
  JSON object field order is not an API. Consume fields by name. Read envelopes keep the stable pagination vocabulary `items`, `count`, `total`, `has_more`, and, when another page exists, `next_cursor`. The `filters` object echoes the effective query scope. Plain `pm list` and `pm search` are all-status reads and disclose `filters.status: "all"`; lifecycle-specific commands such as `pm list-open` remain explicit shortcuts.
103
103
 
104
+ Default brief-list TOON presentation omits default projection, sorting, timestamp,
105
+ and redundant zero-count metadata. A `details: "--full"` pointer replaces only
106
+ the standard full-item omission receipt. Unchecked source status, pagination,
107
+ non-default sorting, warnings, and additional diagnostics remain visible.
108
+ Use JSON for the complete typed envelope. TOON object rows preserve explicit
109
+ nulls and empty values, including nested cells. Only genuinely missing keys
110
+ appear in a table's `absent` metadata.
111
+ Successful health checks retain their compact presentation by omitting an empty
112
+ diagnostic `details` object. Material diagnostics and failing checks remain visible.
113
+
104
114
  Projection flags intentionally change row shape. Use `--fields` when a script requires an exact subset, `--brief` or `--compact` only when the documented sparse shape is sufficient, and `--full` when linked metadata is required. Check `row_contract` on generic read surfaces that expose one; do not infer omitted fields as empty values.
105
115
 
106
116
  For long-lived clients, generate or inspect the runtime contract instead of hard-coding recalled flags:
package/docs/SDK.md CHANGED
@@ -164,6 +164,19 @@ snapshot. Breaking SDK changes require a date-based release and matching
164
164
  package compatibility bounds or migration guidance. Never refresh the snapshot
165
165
  merely to silence an unexplained diff.
166
166
 
167
+ The mutation-admission update adds optional `changed?: false` to
168
+ `PmCliErrorContext`. The conservative signature gate records this interface
169
+ addition with a breaking acknowledgement; existing context objects and error
170
+ codes remain valid. Consumers need no data migration or new dependency bounds.
171
+ When adopting this update, read `error.context?.changed === false` as proof of a
172
+ preflight refusal. An absent property gives no guarantee about writes; do not
173
+ coerce it to `false` or treat an executed failure as safe to retry. Consumers
174
+ that enumerate error keys should accept the additional optional property.
175
+ JavaScript create/update callers must also remove misspelled keys and move
176
+ mutation fields into `options` on generic `run` calls: these requests now fail
177
+ instead of silently dropping fields. See [Robust Automation Pattern](#robust-automation-pattern)
178
+ for supported aliases and runtime schema discovery.
179
+
167
180
  The snapshot also records an aggregate-completeness census. Every public symbol
168
181
  from every non-testing SDK subpath must be available from
169
182
  `@unbrained/pm-cli/sdk`; deliberate test-only exclusions require a named reason.
@@ -210,6 +223,36 @@ follow the migration guidance for changed unions or error codes. The shared
210
223
  [primitive inventory](SDK_PRIMITIVE_INVENTORY.md) records CLI/MCP ownership:
211
224
  presentation modules import the SDK and have zero private-core edges.
212
225
 
226
+ ### Lock ownership and recovery
227
+
228
+ Use the public `acquireLock` primitive when a package must serialize its own
229
+ state changes. Always await its release in `finally`:
230
+
231
+ ```ts
232
+ import { acquireLock } from "@unbrained/pm-cli/sdk";
233
+
234
+ async function writePackageState(pmRoot: string, write: () => Promise<void>) {
235
+ const release = await acquireLock(pmRoot, "example.state", 3600, "example-package", false, true, 30_000);
236
+ try {
237
+ await write();
238
+ } finally {
239
+ await release();
240
+ }
241
+ }
242
+ ```
243
+
244
+ The built-in provider automatically recovers a provably dead original Linux
245
+ owner before TTL. Unknown owners retain the existing lease policy. Conflicts
246
+ expose the lock identity, observed process state and wait advice through
247
+ `PmCliError.context`. Force does not bypass an unexpired lock whose owner is
248
+ alive or unverifiable. TTL expiry permits removal regardless of owner liveness.
249
+ An expired holder can continue writing, so mutual exclusion beyond TTL is not
250
+ guaranteed. Choose a TTL longer than the critical section, or fence protected
251
+ resource writes at the caller. See
252
+ [Configuration](CONFIGURATION.md#common-settings) for host identity, local
253
+ recovery audit receipts and `PM_LOCK_WAIT_MS` precedence. Extension lock
254
+ providers retain responsibility for their own ownership and recovery policy.
255
+
213
256
  ### Portable merge settlement
214
257
 
215
258
  Tracked by [pm-gh1475](../.agents/pm/issues/pm-gh1475.toon) and
@@ -1382,6 +1425,22 @@ handlers remain disabled. Package-backed `--template` create input cannot be
1382
1425
  semantically previewed through its package handler; expand it into explicit core
1383
1426
  mutation options before preview.
1384
1427
 
1428
+ Actionable previews are tracked by [pm-ekf2gu](../.agents/pm/issues/pm-ekf2gu.toon)
1429
+ and [pm-fa9olc](../.agents/pm/tasks/pm-fa9olc.toon).
1430
+ `previewItemMutations` returns `warnings` grouped by zero-based operation
1431
+ `index`, canonical `id`, and `op`. These are the original create lifecycle
1432
+ warnings, including advisory `likely_duplicates` and duplicate-recovery tokens.
1433
+ Earlier staged creates participate in later duplicate checks. Strict policy
1434
+ still refuses duplicates; preview never changes the configured policy.
1435
+
1436
+ For a document resolved with `planItemMutationDocument`, call
1437
+ `previewItemMutationDocument({ pmRoot, author, plan })` from the aggregate SDK.
1438
+ It returns `{ validation, rows }`; affected rows retain their source `index`
1439
+ and `ref` and gain `warnings`. Rows without warnings omit that property. The
1440
+ input plan stays unchanged. Both `pm item mutate --dry-run` and MCP `pm_mutate`
1441
+ use this same projection. A `replayed_committed_plan` has no newly evaluated
1442
+ warnings; an empty warning list in that state does not certify current policy.
1443
+
1385
1444
  Staging excludes derived `search` and `locks` content and unrelated runtime state,
1386
1445
  retaining registered item folders, explicitly configured schema files, and
1387
1446
  `runtime/session.json` for core focus and inherited-parent semantics. Root-layout
@@ -1395,6 +1454,17 @@ remapped only in the staged settings. Schema files configured outside the
1395
1454
  tracker fail with `transaction_preview_external_schema`; relocate them inside
1396
1455
  the selected tracker root before retrying.
1397
1456
 
1457
+ `transaction_preview_non_regular_file` includes `preview_storage` in SDK error
1458
+ context and the CLI JSON error envelope. It reports a fixed `storage_area`,
1459
+ `entry_redacted`, and, when safe, `relative_entry` using `/` separators relative
1460
+ to the selected tracker root. Coordinates are limited to 160 ASCII characters
1461
+ from letters, digits, `.`, `_`, `-`, and separators. Absolute paths, traversal,
1462
+ control characters and overlong or otherwise unsafe names are withheld; the
1463
+ storage category remains available. Diagnostics never include link targets.
1464
+ Inspect that entry without following links, restore the intended regular file
1465
+ or directory, and retry the dry run. Native filesystem errors retain their
1466
+ existing diagnostics.
1467
+
1398
1468
  Preview requires trusted, stable directory entries and ancestors. Where Node
1399
1469
  exposes `O_NOFOLLOW` and `O_NONBLOCK`, descriptor opens request those POSIX guards.
1400
1470
  Windows retains entry checks, regular-file descriptor checks and snapshot
@@ -1632,6 +1702,16 @@ contract compact and fail-safe for newly added flags. Use
1632
1702
  package-authored query surface. `encodeQueryCursor`, `decodeQueryCursorState`, and
1633
1703
  `paginateQueryRows` remain the transport-neutral continuation primitives.
1634
1704
 
1705
+ `decodeQueryCursorEnvelope`, `decodeQueryCursorState`, and
1706
+ `resolveQueryCursorStart` accept an optional final `cursorFlag` argument
1707
+ (`"--after"`, the default, or `"--cursor"`) so package-authored queries can
1708
+ name their actual producer flag in refusal guidance. Relationship packets use
1709
+ `--cursor`. The deps action additionally returns a scoped executable
1710
+ `recovery.suggested_retry_args` for a fresh query after a malformed or mismatched
1711
+ cursor; it preserves traversal and output policy while removing the rejected
1712
+ producer cursor and stale output continuation. See
1713
+ [pm-ohgg1b](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-ohgg1b.toon).
1714
+
1635
1715
  At the storage boundary, the metadata cache maintains a rebuildable SQLite
1636
1716
  query projection under the same source cursor and cross-process writer lock as
1637
1717
  the JSON metadata/body/collection tiers. Bounded default-order light `list`
@@ -1640,6 +1720,13 @@ trees, custom runtime fields, dependency-aware filtering, unsupported filters,
1640
1720
  and stale/missing indexes take the canonical fallback path with identical
1641
1721
  result contracts. Custom hosts may call `queryItemMetadataIndex` directly, but
1642
1722
  must treat `null` as an instruction to rebuild or use authoritative storage.
1723
+ The separate history-event index is also optional. Recognized native SQLite
1724
+ failures while starting its write transaction invalidate that projection before
1725
+ appending authoritative history. Native lock contention retains its existing
1726
+ invalidation protocol; unrelated adapter exceptions and authoritative append
1727
+ failures propagate. A later index rebuild restores accelerated history reads.
1728
+ (Repository tracker: [pm-0orupq](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-0orupq.toon);
1729
+ tracker records are excluded from npm.)
1643
1730
 
1644
1731
  List results always expose `total`, `has_more`, `truncated`, and a nullable
1645
1732
  `next_cursor`, whether or not the page was truncated; unset filter echoes are
@@ -1688,6 +1775,16 @@ true. The normal JSON envelope remains unchanged, and an actionable cursor is
1688
1775
  always retained. SDK query functions continue returning their full typed
1689
1776
  results; lean projection belongs to the CLI presentation boundary.
1690
1777
 
1778
+ Custom agent hosts can import `projectPmBriefListEnvelope` from
1779
+ `@unbrained/pm-cli/sdk` to apply the same brief-list presentation without
1780
+ mutating the original result. It retains unchecked source status and actionable
1781
+ continuation, and leaves partial, custom, or inconsistent envelopes intact.
1782
+ The CLI applies this projection only to TOON; ordinary JSON and SDK query
1783
+ results retain their complete contracts. The public `encodePmTableRows` and
1784
+ `decodePmTableRows` primitives distinguish explicit null and empty cells from
1785
+ missing keys. TOON rendering preserves those row facts before selecting the
1786
+ smaller expanded or tabular encoding.
1787
+
1691
1788
  Migration note: before this contract, `total` was present only when pagination
1692
1789
  omitted rows, a completed page omitted `next_cursor`, and verbose results
1693
1790
  emitted unset filter keys with `null` values. Consumers must use `has_more` or
@@ -2468,6 +2565,39 @@ throw createPmCliExpectedError("hello requires --name", {
2468
2565
 
2469
2566
  The helper returns an `Error` whose public name is `PmCliError` and whose `exitCode` is structural. That makes it safe for bundled, linked, and separately installed package code even when class identity is not shared with the running CLI.
2470
2567
 
2568
+ For example, the SDK command layer settles relationship token counts after alias
2569
+ counts, read disclosure, encoding and optional lean/token-accounting policies.
2570
+ It converts an impossible rendered context budget into an expected
2571
+ `invalid_argument_value` usage error. The public `PmTokenBudgetRecovery` type and
2572
+ `isPmTokenBudgetRecovery` guard describe `context.recovery.token_budget`: requested
2573
+ tokens, a verified feasible retry value, and an exact minimum only when every
2574
+ smaller positive budget has been checked. Larger searches report `feasible_only`;
2575
+ query cost limits, exhausted searches or independent output constraints can report
2576
+ `unavailable`. Both states leave the unproved minimum `null`. The bounded search
2577
+ uses the real packer and output policy, including alias disclosure.
2578
+ The public type is a discriminated union: checking `minimum_status` narrows the
2579
+ verified budgets and requires a reason for `unavailable`. Package authors cannot
2580
+ declare unavailable advice with a numeric budget or omit its cause. The runtime
2581
+ guard additionally checks positive safe integers and equal budgets for `exact`;
2582
+ those numeric invariants cannot be expressed by the declaration alone.
2583
+ `suggested_retry_args` preserves the selected tracker, query and output options
2584
+ with the verified feasible budget so it works from another workspace.
2585
+ Retry probes consume canonical summary/full include modes before packing and
2586
+ retain only residual field selectors, matching the emitted CLI command. Recovery
2587
+ work estimates include repeated dangling-reference renders; summary probes count
2588
+ only their single rendering pass. Expensive queries return explicit unavailable
2589
+ budget advice and retain the compact inspection fallback.
2590
+ `next_best_command` retains a separate compact tree-summary inspection, which
2591
+ also supplies the fallback when no working context budget is established.
2592
+ CLI JSON and MCP preserve that recovery. The lower-level
2593
+ `buildRelationshipContext` primitive retains its `TypeError` validation contract;
2594
+ unrelated runtime errors still propagate.
2595
+ (Repository tracker: [pm-odw3j8](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-odw3j8.toon),
2596
+ [pm-0bbc53](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-0bbc53.toon),
2597
+ [pm-k6uglj](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-k6uglj.toon),
2598
+ [pm-8jzcwv](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-8jzcwv.toon);
2599
+ tracker records are excluded from npm.)
2600
+
2471
2601
  For policy, lint, or verification commands that should render their full result
2472
2602
  and report failure without throwing, return a structured object instead:
2473
2603
 
@@ -3212,6 +3342,20 @@ history and retains mutation governance.
3212
3342
 
3213
3343
  ## Robust Automation Pattern
3214
3344
 
3345
+ Native `PmClient.create`, `update`, and their generic `run` routes reject unknown
3346
+ option names at runtime, including JavaScript callers and injected extension
3347
+ clients ([pm-fl3phm](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-fl3phm.toon),
3348
+ a repository-only tracker record excluded from npm). A typo such as
3349
+ `priorty` refuses the whole request with `PmCliError.code =
3350
+ "invalid_argument_value"`, `context.reason = "unknown_mutation_option"`, a
3351
+ nearest-name hint when available, and `context.changed = false`. Put mutation
3352
+ fields under `options` when using `run`; existing declared top-level aliases
3353
+ remain accepted. Workspace schema option identities remain available through
3354
+ `run`, while typed convenience methods support extension item fields through `field`.
3355
+ MCP retains its existing transport-specific admission contract. The no-change
3356
+ receipt applies to these preflight refusals; an executed operation's outcome
3357
+ and evidence must be assessed separately.
3358
+
3215
3359
  1. Read `PM_TOOL_ACTIONS` or `PM_TOOL_PARAMETERS_SCHEMA` for baseline static validation.
3216
3360
  2. Load runtime contracts with `getContracts(pmRoot, { runtimeOnly: true })` or run `pm contracts --runtime-only --json` inside the target project.
3217
3361
  3. Verify the action appears in `actions` and has `action_availability[].invocable: true`.
package/docs/TESTING.md CHANGED
@@ -49,6 +49,19 @@ claims to the same canonical gate IDs. Hosted-only environment isolation and
49
49
  tracker-integrity steps remain explicit entries with reasons rather than
50
50
  silently disappearing from local parity.
51
51
 
52
+ The full-source command-example scan runs after parallel contract files in the
53
+ existing serial cohort. It keeps the same source corpus, assertions and
54
+ 30-second deadline, so concurrent contract workers do not consume its
55
+ policy-check budget. This allocation is tracked by
56
+ [pm-a3c6g4](../.agents/pm/tasks/pm-a3c6g4.toon); broader runner qualification
57
+ remains with [pm-bj7rq0](../.agents/pm/issues/pm-bj7rq0.toon).
58
+
59
+ The same serial cohort runs the ten-thousand-item aggregation, cold governance
60
+ read, and surface-replication fixture files after parallel contracts
61
+ ([pm-ckb8w5](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-ckb8w5.toon),
62
+ a repository-only tracker record excluded from npm). Their original input
63
+ populations, assertions, per-test deadlines and retry policy remain in force.
64
+
52
65
  `node scripts/run-tests.mjs` wraps Vitest in temporary tracker roots, disables
53
66
  external Sentry delivery for the build, test workers, and their nested CLI
54
67
  children, then cleans the roots up. Instrumentation tests can still exercise
@@ -244,6 +257,22 @@ into the pass count; a persistent assertion still fails after the bounded
244
257
  retry. Local runs do not retry, so deterministic failures stay immediate while
245
258
  iterating.
246
259
 
260
+ The complete receipt-operation, aborted-operation recovery, receipt-settlement, merge-portability and
261
+ lossless-collection-union integration files run in the existing serial
262
+ `lifecycle-performance` project after parallel contracts. Both nightly shards and
263
+ full coverage use that same project partition, retaining every case and its
264
+ original assertions, deadlines and retry policy. This allocation is tracked by
265
+ [pm-89297t](../.agents/pm/tasks/pm-89297t.toon); it does not classify or erase
266
+ historical failed attempts.
267
+
268
+ The complete macOS Node 24 and Windows Node 24 nightly suites each use two
269
+ Vitest shards. Both halves must pass within the existing 20-minute job limit;
270
+ sharding retains the same complete file population, serial phase, assertions,
271
+ per-test deadlines and retry policy. The recurrence collector retains the old
272
+ unsharded platform families alongside both current shard identities, so changing
273
+ the matrix does not erase earlier failures. macOS allocation is tracked by
274
+ [pm-qrirz8](../.agents/pm/tasks/pm-qrirz8.toon).
275
+
247
276
  Vitest's GitHub reporter emits annotations and retry evidence. The repository
248
277
  reliability reporter additionally writes
249
278
  `.vitest-reports/reliability-<shard>.json` and appends a job-summary table with
@@ -544,6 +573,18 @@ the descriptor registry does not yet know about.
544
573
  For in-place metadata corrections and context admission/refusal semantics, see
545
574
  [Linked-test edits](LINKED_TEST_EDITS.md).
546
575
 
576
+ Run-option admission is tracked by
577
+ [pm-hdvxqg](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-hdvxqg.toon)
578
+ (a repository-only tracker record excluded from npm).
579
+ `pm test` requires `--run` for `--timeout`, `--progress`, execution context,
580
+ environment directives, and run selectors. Registration-only calls refuse these
581
+ options before saving links. Combined edits and execution validate the effective
582
+ post-edit selection under the item lock before persistence, including out-of-range
583
+ indexes and unmatched selectors. These admission errors carry `changed: false`
584
+ in structured output. A valid request that executes a failing child can still
585
+ save its accepted edits and execution evidence; inspect its run results before
586
+ retrying.
587
+
547
588
  Add tests to the item that owns the work:
548
589
 
549
590
  ```bash
@@ -668,7 +709,8 @@ pm test <item-id> --run --workspace-context snapshot --override-linked-workspace
668
709
  Windows execution is tracked by [pm-bj7rq0](../.agents/pm/issues/pm-bj7rq0.toon).
669
710
  Script and native keeper cohorts run independently on Windows Node 24. Their
670
711
  source/script keeper steps retain the two-worker cap, and each cohort retains
671
- the 12-minute deadline. The required
712
+ the 12-minute deadline. The four-file Git/worktree receipt slice uses one
713
+ worker to avoid competing subprocess-heavy files at the same case deadlines. The required
672
714
  `Windows regression (Node 24)` check waits for both cohorts and fails if either
673
715
  fails, is cancelled, or is skipped. This preserves every selected regression
674
716
  while avoiding a shared serial job deadline. See GitHub's
@@ -1 +1 @@
1
- {"version":5,"transcript_version":2,"transcript_digest":"sha256:6d4041acfaa4075dde1972d6127a74f18916f7661738b4f5d5fd47a61c179a78","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":2325,"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":2325,"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":878,"accounting_mode":"self_reported"},{"id":"in-progress","max_estimated_tokens":196,"accounting_mode":"self_reported"}]},{"id":"context-bootstrap","max_estimated_tokens":2010,"steps":[{"id":"triage","max_estimated_tokens":552,"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":812,"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":31,"accounting_mode":"self_reported"},{"id":"inspect-closed","max_estimated_tokens":398,"accounting_mode":"self_reported"}]},{"id":"bulk-effect-outcomes","max_estimated_tokens":326,"steps":[{"id":"create-bulk-target","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"partial-effect","max_estimated_tokens":174,"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":13795}
1
+ {"version":5,"transcript_version":2,"transcript_digest":"sha256:6d4041acfaa4075dde1972d6127a74f18916f7661738b4f5d5fd47a61c179a78","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":812,"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":31,"accounting_mode":"self_reported"},{"id":"inspect-closed","max_estimated_tokens":398,"accounting_mode":"self_reported"}]},{"id":"bulk-effect-outcomes","max_estimated_tokens":326,"steps":[{"id":"create-bulk-target","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"partial-effect","max_estimated_tokens":174,"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":13676}
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.19","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.19","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.21","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.21","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.19",
3
+ "version": "2026.10.21",
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.19","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.21","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 +1 @@
1
- {"name":"@unbrained/pm-calendar","version":"2026.10.19","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.21","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.19","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.21","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.19","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.21","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.19","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.21","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.19","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.21","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.19","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.21","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.19","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.21","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.19","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.21","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.19","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.21","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.19","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.21","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.19","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.21","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.19","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.21","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.19","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.21","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.19","dependencies":{"@unbrained/pm-cli":"2026.10.19"}}
1
+ {"name":"pm-claude-runtime","private":true,"type":"module","version":"2026.10.21","dependencies":{"@unbrained/pm-cli":"2026.10.21"}}
@@ -1 +1 @@
1
- {"name":"pm-codex","version":"2026.10.19","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.21","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.19","dependencies":{"@unbrained/pm-cli":"2026.10.19"}}
1
+ {"name":"pm-codex-runtime","private":true,"type":"module","version":"2026.10.21","dependencies":{"@unbrained/pm-cli":"2026.10.21"}}