@unbrained/pm-cli 2026.10.18 → 2026.10.20

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 (186) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +43 -0
  3. package/dist/cli/error-guidance.d.ts +7 -0
  4. package/dist/cli/error-guidance.js +2 -2
  5. package/dist/cli/help-content.js +2 -2
  6. package/dist/cli/register-mutation.js +2 -2
  7. package/dist/cli/register-setup.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-PYRREEUB.js → chunk-2GGGOD7P.js} +28 -28
  11. package/dist/cli-bundle/chunks/chunk-7NHA5K77.js +126 -0
  12. package/dist/cli-bundle/chunks/chunk-7ZOIZ2AZ.js +8 -0
  13. package/dist/cli-bundle/chunks/{chunk-4GA4MUTE.js → chunk-GHJOMRSF.js} +2 -2
  14. package/dist/cli-bundle/chunks/chunk-KU4Q3MSI.js +8 -0
  15. package/dist/cli-bundle/chunks/chunk-LS55VKRK.js +3 -0
  16. package/dist/cli-bundle/chunks/chunk-PNPE2OVJ.js +112 -0
  17. package/dist/cli-bundle/chunks/chunk-PTL3TBT6.js +20 -0
  18. package/dist/cli-bundle/chunks/chunk-QETMESEB.js +6 -0
  19. package/dist/cli-bundle/chunks/{chunk-7WIEAGDS.js → chunk-QMZ73FCW.js} +2 -2
  20. package/dist/cli-bundle/chunks/chunk-QQYCB2LO.js +2 -0
  21. package/dist/cli-bundle/chunks/chunk-RUKSEZE7.js +2 -0
  22. package/dist/cli-bundle/chunks/chunk-TZU6U5ZE.js +3 -0
  23. package/dist/cli-bundle/chunks/chunk-VLJLWZBO.js +70 -0
  24. package/dist/cli-bundle/chunks/chunk-VS565KBX.js +2 -0
  25. package/dist/cli-bundle/chunks/chunk-XAWE4EAK.js +2 -0
  26. package/dist/cli-bundle/chunks/chunk-YECCKB4E.js +3 -0
  27. package/dist/cli-bundle/chunks/{chunk-FIJOSX2C.js → chunk-YT2Z3JPC.js} +72 -66
  28. package/dist/cli-bundle/chunks/chunk-YTHI5DTH.js +2 -0
  29. package/dist/cli-bundle/chunks/{chunk-6VZKYJW7.js → chunk-YW6SIKYP.js} +2 -2
  30. package/dist/cli-bundle/chunks/{chunk-ZZED447K.js → chunk-ZA3XXHEE.js} +6 -6
  31. package/dist/cli-bundle/chunks/context-budget-recovery-L2WP5S26.js +2 -0
  32. package/dist/cli-bundle/chunks/indexed-receipt-blobs-U7VGKIYC.js +4 -0
  33. package/dist/cli-bundle/chunks/{register-list-query-PUCVYYBD.js → register-list-query-NNDV6F6I.js} +3 -3
  34. package/dist/cli-bundle/chunks/register-mutation-3GCBSNQS.js +20 -0
  35. package/dist/cli-bundle/chunks/register-operations-YKDGNKUL.js +2 -0
  36. package/dist/cli-bundle/chunks/register-setup-AOUZQQWB.js +2 -0
  37. package/dist/cli-bundle/chunks/settlement-hook-CLRGA6O7.js +7 -0
  38. package/dist/cli-bundle/chunks/stage-6QXYRMSU.js +2 -0
  39. package/dist/cli-bundle/focused-chunks/chunk-37SU7BZI.js +3 -0
  40. package/dist/cli-bundle/focused-chunks/chunk-6IU7BESB.js +65 -0
  41. package/dist/cli-bundle/focused-chunks/chunk-AK2CI2GI.js +2 -0
  42. package/dist/cli-bundle/focused-chunks/chunk-AS3MOBO3.js +25 -0
  43. package/dist/cli-bundle/focused-chunks/chunk-AW35RDKA.js +78 -0
  44. package/dist/cli-bundle/focused-chunks/chunk-E4II2D2B.js +3 -0
  45. package/dist/cli-bundle/focused-chunks/{chunk-A4ZHHTEX.js → chunk-F7FD25TG.js} +12 -12
  46. package/dist/cli-bundle/focused-chunks/chunk-FOA7XKWP.js +2 -0
  47. package/dist/cli-bundle/focused-chunks/{chunk-TB7F4FCR.js → chunk-GYHZ7W6O.js} +2 -2
  48. package/dist/cli-bundle/focused-chunks/chunk-H5Q2HUU6.js +8 -0
  49. package/dist/cli-bundle/focused-chunks/chunk-HUZAXSIJ.js +3 -0
  50. package/dist/cli-bundle/focused-chunks/chunk-J6EYUGAR.js +6 -0
  51. package/dist/cli-bundle/focused-chunks/chunk-JEXZEIAX.js +91 -0
  52. package/dist/cli-bundle/focused-chunks/{chunk-BFEMT5U3.js → chunk-KDGUIIRU.js} +3 -3
  53. package/dist/cli-bundle/focused-chunks/{chunk-ZDBS2DCT.js → chunk-KKRFSI2N.js} +2 -2
  54. package/dist/cli-bundle/focused-chunks/chunk-LJPUJ2KK.js +2 -0
  55. package/dist/cli-bundle/focused-chunks/chunk-MQ42BFGX.js +2 -0
  56. package/dist/cli-bundle/focused-chunks/{chunk-IRVL4UXR.js → chunk-NI6NS44Q.js} +2 -2
  57. package/dist/cli-bundle/focused-chunks/chunk-VAYS754X.js +2 -0
  58. package/dist/cli-bundle/focused-chunks/{chunk-Z7YIFCNE.js → chunk-VLSER3XW.js} +2 -2
  59. package/dist/cli-bundle/focused-chunks/chunk-VS6VTWTZ.js +8 -0
  60. package/dist/cli-bundle/focused-chunks/chunk-VVRXF4JO.js +2 -0
  61. package/dist/cli-bundle/focused-chunks/chunk-ZGEK57KD.js +2 -0
  62. package/dist/cli-bundle/focused-chunks/context-budget-recovery-5MKOCGY5.js +2 -0
  63. package/dist/cli-bundle/focused-chunks/indexed-receipt-blobs-H2G6CCGO.js +4 -0
  64. package/dist/cli-bundle/focused-chunks/settlement-hook-5SNBBT7C.js +7 -0
  65. package/dist/cli-bundle/focused-chunks/stage-EMTISXR7.js +2 -0
  66. package/dist/cli-bundle/main.js +21 -21
  67. package/dist/cli-bundle/sdk-authoring.js +1 -1
  68. package/dist/cli-bundle/sdk-contracts.js +2 -2
  69. package/dist/cli-bundle/sdk-core.js +28 -22
  70. package/dist/cli-bundle/sdk-governance.js +1 -1
  71. package/dist/cli-bundle/sdk-graph.js +1 -1
  72. package/dist/cli-bundle/sdk-merge.js +66 -53
  73. package/dist/cli-bundle/sdk-query.js +1 -1
  74. package/dist/cli-bundle/sdk-runtime.js +1 -1
  75. package/dist/cli-bundle/sdk-testing.js +1 -1
  76. package/dist/cli-bundle/sdk.js +8 -8
  77. package/dist/core/fs/fs-utils.d.ts +2 -2
  78. package/dist/core/fs/fs-utils.js +1 -1
  79. package/dist/core/history/event-index.js +2 -2
  80. package/dist/core/output/output.d.ts +7 -2
  81. package/dist/core/output/output.js +5 -5
  82. package/dist/core/shared/errors.d.ts +48 -0
  83. package/dist/core/shared/errors.js +1 -1
  84. package/dist/core/store/settings.js +2 -2
  85. package/dist/mcp/server.js +1 -1
  86. package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -1
  87. package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
  88. package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -1
  89. package/dist/sdk/cli-contracts/runtime-contracts.d.ts +1 -0
  90. package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
  91. package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
  92. package/dist/sdk/cli-contracts/tool-schema.js +1 -1
  93. package/dist/sdk/core.d.ts +1 -1
  94. package/dist/sdk/core.js +1 -1
  95. package/dist/sdk/dependencies/context-budget-recovery.d.ts +21 -0
  96. package/dist/sdk/dependencies/context-budget-recovery.js +2 -0
  97. package/dist/sdk/dependencies.js +1 -1
  98. package/dist/sdk/errors.d.ts +4 -1
  99. package/dist/sdk/errors.js +1 -1
  100. package/dist/sdk/extension/install-sources.js +3 -3
  101. package/dist/sdk/extension/shared.js +1 -1
  102. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  103. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  104. package/dist/sdk/governance/health.js +1 -1
  105. package/dist/sdk/history-repair.js +1 -1
  106. package/dist/sdk/index.d.ts +1 -1
  107. package/dist/sdk/index.js +1 -1
  108. package/dist/sdk/item-transaction.d.ts +13 -0
  109. package/dist/sdk/item-transaction.js +1 -1
  110. package/dist/sdk/lifecycle/structured-mutation-plan.d.ts +14 -1
  111. package/dist/sdk/lifecycle/structured-mutation-plan.js +1 -1
  112. package/dist/sdk/merge/driver.js +7 -1
  113. package/dist/sdk/merge/indexed-receipt-blobs.d.ts +2 -0
  114. package/dist/sdk/merge/indexed-receipt-blobs.js +4 -0
  115. package/dist/sdk/merge/install.d.ts +8 -0
  116. package/dist/sdk/merge/install.js +3 -3
  117. package/dist/sdk/merge/receipts.d.ts +6 -0
  118. package/dist/sdk/merge/receipts.js +2 -2
  119. package/dist/sdk/merge/reconcile.d.ts +6 -0
  120. package/dist/sdk/merge/reconcile.js +1 -1
  121. package/dist/sdk/merge/settlement-hook.d.ts +12 -0
  122. package/dist/sdk/merge/settlement-hook.js +7 -0
  123. package/dist/sdk/merge/stage.d.ts +13 -0
  124. package/dist/sdk/merge/stage.js +2 -0
  125. package/dist/sdk/output/list-envelope.d.ts +7 -0
  126. package/dist/sdk/output/list-envelope.js +2 -0
  127. package/dist/sdk/output.d.ts +1 -0
  128. package/dist/sdk/output.js +2 -2
  129. package/dist/sdk/public-surface.json +1 -1
  130. package/dist/sdk/query/list.js +1 -1
  131. package/dist/sdk/relationship-context.d.ts +2 -0
  132. package/dist/sdk/relationship-context.js +1 -1
  133. package/dist/sdk/runtime-extended-actions.js +1 -1
  134. package/dist/sdk/structured-mutations.d.ts +2 -0
  135. package/dist/sdk/structured-mutations.js +1 -1
  136. package/docs/COMMANDS.md +27 -0
  137. package/docs/CONFIGURATION.md +14 -0
  138. package/docs/MERGE_SAFETY.md +88 -5
  139. package/docs/PR_REVIEW_LOOP.md +32 -12
  140. package/docs/SCRIPTING.md +10 -0
  141. package/docs/SDK.md +103 -0
  142. package/docs/TESTING.md +32 -1
  143. package/docs/generated/FLAG_LEXICON_BUDGETS.md +2 -2
  144. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +6 -3
  145. package/marketplace.json +1 -1
  146. package/package.json +1 -1
  147. package/packages/pm-beads/package.json +1 -1
  148. package/packages/pm-calendar/package.json +1 -1
  149. package/packages/pm-command-kit/package.json +1 -1
  150. package/packages/pm-digital-twin/package.json +1 -1
  151. package/packages/pm-governance-audit/package.json +1 -1
  152. package/packages/pm-guide-shell/package.json +1 -1
  153. package/packages/pm-kanban/package.json +1 -1
  154. package/packages/pm-lifecycle-hooks/package.json +1 -1
  155. package/packages/pm-linked-test-adapters/package.json +1 -1
  156. package/packages/pm-search-advanced/package.json +1 -1
  157. package/packages/pm-templates/package.json +1 -1
  158. package/packages/pm-todos/package.json +1 -1
  159. package/packages/pm-vcs/package.json +1 -1
  160. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  161. package/plugins/pm-claude/package.json +1 -1
  162. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  163. package/plugins/pm-codex/package.json +1 -1
  164. package/plugins/pm-codex/plugin.json +1 -1
  165. package/runtime-dependencies.json +1 -1
  166. package/dist/cli-bundle/chunks/chunk-4V6ONLI6.js +0 -3
  167. package/dist/cli-bundle/chunks/chunk-7PATQWTH.js +0 -20
  168. package/dist/cli-bundle/chunks/chunk-AETP4JEM.js +0 -3
  169. package/dist/cli-bundle/chunks/chunk-LUKVNL72.js +0 -2
  170. package/dist/cli-bundle/chunks/chunk-OJ77ZQN3.js +0 -8
  171. package/dist/cli-bundle/chunks/chunk-RHQJ6VWC.js +0 -237
  172. package/dist/cli-bundle/chunks/chunk-RNABUEFB.js +0 -80
  173. package/dist/cli-bundle/chunks/chunk-TO6CIV4C.js +0 -2
  174. package/dist/cli-bundle/chunks/register-mutation-GGGVBXD5.js +0 -20
  175. package/dist/cli-bundle/chunks/register-operations-NRZ6Q4QE.js +0 -2
  176. package/dist/cli-bundle/chunks/register-setup-MV3P3YSF.js +0 -2
  177. package/dist/cli-bundle/focused-chunks/chunk-2MPQUMTF.js +0 -2
  178. package/dist/cli-bundle/focused-chunks/chunk-5UKCSZWT.js +0 -2
  179. package/dist/cli-bundle/focused-chunks/chunk-B4YLP5ZB.js +0 -3
  180. package/dist/cli-bundle/focused-chunks/chunk-FW7CSSKL.js +0 -75
  181. package/dist/cli-bundle/focused-chunks/chunk-HYPRPSYD.js +0 -3
  182. package/dist/cli-bundle/focused-chunks/chunk-L55KQ2KT.js +0 -2
  183. package/dist/cli-bundle/focused-chunks/chunk-MASIOFPG.js +0 -8
  184. package/dist/cli-bundle/focused-chunks/chunk-RJ3EIHDU.js +0 -26
  185. package/dist/cli-bundle/focused-chunks/chunk-SEL4Z2OO.js +0 -167
  186. package/dist/cli-bundle/focused-chunks/chunk-TZUIBG3P.js +0 -2
@@ -286,6 +286,28 @@ receipt file that the older writer never created. Incomplete, contradictory, or
286
286
  modern summaries still fail closed. `runMergeReceiptReport` remains the
287
287
  compatible valid-only report.
288
288
 
289
+ ## Portable receipt proof
290
+
291
+ Reconciliation refuses `merge_receipt_not_portable` before any audit write when
292
+ an active clone-local receipt lacks a validated tracked counterpart. `--force`
293
+ does not bypass this boundary, including for direct SDK history-repair calls.
294
+ An earlier aborted operation can leave an unreferenced local receipt whose field
295
+ hashes happen to match a later merge; those hashes do not make its evidence
296
+ portable. Review and preserve unrelated stale receipts outside the active store,
297
+ or restore the original valid durable sidecar. Never copy private local receipt
298
+ values into tracked evidence as a substitute.
299
+
300
+ `inspectMergeReceiptEvidence().durable_receipt_ids` identifies validated durable
301
+ counterparts whose immutable provenance matches the stored blob referenced by the Git index;
302
+ clone-local replacement refs cannot substitute different evidence.
303
+ Untracked files and mismatched staged versions cannot authorize an audit write.
304
+ `unstaged_durable_receipt_ids` reports valid disk candidates for a read-only
305
+ preview; clone-local-only evidence remains refused even in preview. Current readers
306
+ return both arrays; their optional interface properties preserve structural compatibility,
307
+ and a missing property provides no evidence. Health resolves committed history
308
+ references against these durable identities, so a local copy cannot hide evidence
309
+ that a fresh clone will lack. Receipt summaries remain privacy-safe.
310
+
289
311
  ## Historical receipt reader compatibility
290
312
 
291
313
  Tracked by [pm-2xtv84](../.agents/pm/issues/pm-2xtv84.toon) and
@@ -388,8 +410,13 @@ pm config project set ids_token_length 8
388
410
 
389
411
  The SDK item merge refuses an empty common ancestor with
390
412
  `item_identity_conflict`, even for equal item content: document equality alone
391
- cannot prove a common creation. It leaves the driver output untouched instead
392
- of combining two identities through scalar preference. The history merge also
413
+ cannot prove a common creation. The pure merge primitive leaves inputs unchanged.
414
+ The Git driver preserves both original snapshots in visible conflict markers
415
+ and names the item in its refusal, tracked by
416
+ [pm-gh1491](../.agents/pm/issues/pm-gh1491.toon). Staging these files does not
417
+ clear the conflict-marker health and storage failures. A copied creation or
418
+ history prefix alone never authorizes fusion of two independently introduced
419
+ identities. The history merge also
393
420
  refuses different create events across its inputs, multiple creates in either
394
421
  input, or creations on both sides when the ancestor lacks a create event even
395
422
  when their bytes match, before fast-forwarding or reanchoring. A common ancestor
@@ -432,6 +459,54 @@ N-branch conflict fixture compares competing writes to the same scalar set.
432
459
  Arbitrary histories, ordered executable test definitions with receiving-clone
433
460
  trust, and relationship-event ordering retain their separate conformance contracts.
434
461
 
462
+ ## Settle a lossless merge in one commit
463
+
464
+ Tracked by [pm-gh1475](../.agents/pm/issues/pm-gh1475.toon).
465
+ Pause Git before it creates the merge commit, then stage the audited settlement:
466
+
467
+ ```bash
468
+ git merge --no-commit --no-ff <branch>
469
+ pm merge reconcile --stage
470
+ git diff --cached
471
+ git commit
472
+ ```
473
+
474
+ `--stage` first previews reconciliation. It refuses discarded-value decisions,
475
+ untrusted or unrelated repairs, invalid storage, missing durable evidence,
476
+ unresolved Git paths, alternate Git indices, and unstaged edits to the reconciliation paths. It never
477
+ accepts `--force`. Only the verified history streams and receipt sidecars are
478
+ added to the index; unrelated staged changes retain their existing state.
479
+ Validated new sidecars enter the index before any audit history is written.
480
+ If apply fails, their new index entries are reverted while their files and
481
+ unrelated staged work remain available for review. Staged receipt deletions
482
+ remain operator decisions and are refused.
483
+ `--stage --dry-run` checks this boundary without applying or staging anything.
484
+ The result's `staged_paths` lists the repository-relative artifacts added.
485
+ Tracker aliases resolve before preview, so proof verification, repair and staging
486
+ use the same physical tracker root.
487
+
488
+ Repositories can explicitly opt into a merge-aware `pre-commit` hook:
489
+
490
+ ```bash
491
+ pm merge install --pre-commit-hook --dry-run
492
+ pm merge install --pre-commit-hook
493
+ git merge --no-commit --no-ff <branch>
494
+ git commit
495
+ ```
496
+
497
+ The hook runs guarded settlement only when `MERGE_HEAD` exists; ordinary commits
498
+ are unchanged. Installation honors Git's hooks directory, including
499
+ `core.hooksPath`, and preserves any hook without the pm ownership header. For
500
+ an existing hook, integrate `pm merge reconcile --stage` into the reviewed merge
501
+ path yourself. The installation result reports `settlement_hook.path`; removing
502
+ that owned hook restores the manual workflow. Hooks are clone-local and must be
503
+ installed explicitly in each clone. No hook is installed by default.
504
+
505
+ The explicit `--no-commit --no-ff` step is required. Git's automatic merge commit
506
+ can capture its tree before a `pre-merge-commit` hook stages new audit artifacts;
507
+ that hook cannot provide this single-commit guarantee. Rebase and already
508
+ committed merges continue to use the explicit reconciliation gate below.
509
+
435
510
  ## Required post-merge gate
436
511
 
437
512
  Reconciliation resolves receipt discovery and settlement from the requested
@@ -443,12 +518,20 @@ After every branch merge that touches `.agents/pm`, run:
443
518
 
444
519
  ```bash
445
520
  pm merge reconcile --dry-run --json
521
+ # When the preview lists unstaged sidecars, review and stage those files first.
446
522
  pm merge reconcile --message "Reconcile merged tracker histories" --json
447
523
  # Required only to accept a receipt that lacks qualifying exact hash proof:
448
524
  pm merge reconcile --force --message "Accept reviewed merge decisions" --json
449
525
  ```
450
526
 
451
527
  The preview reports every drifted stream and pending receipt without mutation.
528
+ `unstaged_durable_receipt_ids` identifies valid filesystem sidecars awaiting
529
+ matching immutable evidence in the Git index. The preview can inspect those
530
+ sidecars, but ordinary apply refuses to cite them until they are staged. For the
531
+ default tracker their paths are `.agents/pm/merge-receipts/<receipt-id>.json`;
532
+ use `git add -- <reviewed sidecar paths>` followed by `git diff --cached`. Use
533
+ `--stage` for the guarded lossless workflow above. After ordinary apply, stage
534
+ the updated history and receipt lifecycle files together before committing.
452
535
  It applies the same exact-snapshot proof requirement as apply: stale or
453
536
  unprovable receipts appear as failed streams in both modes, tracked by
454
537
  [pm-ao0bu9](../.agents/pm/issues/pm-ao0bu9.toon).
@@ -514,9 +597,9 @@ The apply pass uses the audited history rewrite boundary to append a
514
597
  event includes privacy-safe receipt provenance; a clean receipt-bearing stream
515
598
  gets a no-op merge event so the merge remains addressable even when replay
516
599
  already matches. The command immediately validates history drift plus storage
517
- integrity and exits nonzero when an invariant remains red. Default Git hooks
518
- remain unchanged: repositories that want automatic enforcement must opt in by
519
- invoking this command from their own post-merge hook.
600
+ integrity and exits nonzero when an invariant remains red. Default Git hooks remain unchanged. The explicit merge-aware pre-commit option
601
+ above includes settlement before committing; a repository-owned post-merge hook
602
+ can still enforce reconciliation after an already-created merge commit.
520
603
 
521
604
  The default validation surface includes `storage_integrity`. It fails on unreadable item documents, history conflict markers, malformed history tails, live items whose latest history operation is `delete` (a delete/modify resurrection candidate), and unparseable settings/schema files. This prevents the ordinary tolerant read path from turning corruption into a green gate.
522
605
 
@@ -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
@@ -210,6 +210,32 @@ follow the migration guidance for changed unions or error codes. The shared
210
210
  [primitive inventory](SDK_PRIMITIVE_INVENTORY.md) records CLI/MCP ownership:
211
211
  presentation modules import the SDK and have zero private-core edges.
212
212
 
213
+ ### Portable merge settlement
214
+
215
+ Tracked by [pm-gh1475](../.agents/pm/issues/pm-gh1475.toon) and
216
+ [pm-gh1491](../.agents/pm/issues/pm-gh1491.toon). Import `runMergeInstall`,
217
+ `runMergeReconcile`, and `inspectMergeReceiptEvidence` from
218
+ `@unbrained/pm-cli/sdk/merge`. `runMergeInstall({ preCommitHook: true }, global)`
219
+ explicitly installs the merge-aware pre-commit hook; the default installs no hook.
220
+ `runMergeReconcile({ stage: true }, global)` previews first and stages only
221
+ verified lossless history and receipt artifacts. It refuses forced acceptance,
222
+ competing values, unrelated drift, dirty reconciliation paths and unresolved Git
223
+ paths. `staged_paths` reports exactly which relative paths were added to the index.
224
+
225
+ The single-commit journey pauses Git with `git merge --no-commit --no-ff` before
226
+ reconciliation or an opted-in pre-commit hook runs. `durable_receipt_ids` on the
227
+ inspection result reports counterparts with matching immutable provenance in
228
+ the active Git index. `unstaged_durable_receipt_ids` separates valid filesystem
229
+ sidecars that a read-only preview may inspect. Guarded staging prepares new
230
+ sidecars before auditing and restores their new index entries if apply fails.
231
+ Inspection lists indexed candidates once and reads bounded object batches.
232
+ Guarded settlement resolves tracker aliases before preview, proof verification
233
+ and apply, so every phase uses the same physical tracker root.
234
+ Ordinary apply requires indexed proof first. Missing portable proof
235
+ refuses an audit write even with `force`; local receipts alone cannot authorize
236
+ committed history references. See [Merge safety](MERGE_SAFETY.md#settle-a-lossless-merge-in-one-commit)
237
+ for the complete operator workflow and recovery boundaries.
238
+
213
239
  ### Build an entire custom project tool
214
240
 
215
241
  The [SDK-only custom-tool exemplar](examples/sdk-custom-tool/README.md)
@@ -1356,6 +1382,22 @@ handlers remain disabled. Package-backed `--template` create input cannot be
1356
1382
  semantically previewed through its package handler; expand it into explicit core
1357
1383
  mutation options before preview.
1358
1384
 
1385
+ Actionable previews are tracked by [pm-ekf2gu](../.agents/pm/issues/pm-ekf2gu.toon)
1386
+ and [pm-fa9olc](../.agents/pm/tasks/pm-fa9olc.toon).
1387
+ `previewItemMutations` returns `warnings` grouped by zero-based operation
1388
+ `index`, canonical `id`, and `op`. These are the original create lifecycle
1389
+ warnings, including advisory `likely_duplicates` and duplicate-recovery tokens.
1390
+ Earlier staged creates participate in later duplicate checks. Strict policy
1391
+ still refuses duplicates; preview never changes the configured policy.
1392
+
1393
+ For a document resolved with `planItemMutationDocument`, call
1394
+ `previewItemMutationDocument({ pmRoot, author, plan })` from the aggregate SDK.
1395
+ It returns `{ validation, rows }`; affected rows retain their source `index`
1396
+ and `ref` and gain `warnings`. Rows without warnings omit that property. The
1397
+ input plan stays unchanged. Both `pm item mutate --dry-run` and MCP `pm_mutate`
1398
+ use this same projection. A `replayed_committed_plan` has no newly evaluated
1399
+ warnings; an empty warning list in that state does not certify current policy.
1400
+
1359
1401
  Staging excludes derived `search` and `locks` content and unrelated runtime state,
1360
1402
  retaining registered item folders, explicitly configured schema files, and
1361
1403
  `runtime/session.json` for core focus and inherited-parent semantics. Root-layout
@@ -1369,6 +1411,17 @@ remapped only in the staged settings. Schema files configured outside the
1369
1411
  tracker fail with `transaction_preview_external_schema`; relocate them inside
1370
1412
  the selected tracker root before retrying.
1371
1413
 
1414
+ `transaction_preview_non_regular_file` includes `preview_storage` in SDK error
1415
+ context and the CLI JSON error envelope. It reports a fixed `storage_area`,
1416
+ `entry_redacted`, and, when safe, `relative_entry` using `/` separators relative
1417
+ to the selected tracker root. Coordinates are limited to 160 ASCII characters
1418
+ from letters, digits, `.`, `_`, `-`, and separators. Absolute paths, traversal,
1419
+ control characters and overlong or otherwise unsafe names are withheld; the
1420
+ storage category remains available. Diagnostics never include link targets.
1421
+ Inspect that entry without following links, restore the intended regular file
1422
+ or directory, and retry the dry run. Native filesystem errors retain their
1423
+ existing diagnostics.
1424
+
1372
1425
  Preview requires trusted, stable directory entries and ancestors. Where Node
1373
1426
  exposes `O_NOFOLLOW` and `O_NONBLOCK`, descriptor opens request those POSIX guards.
1374
1427
  Windows retains entry checks, regular-file descriptor checks and snapshot
@@ -1614,6 +1667,13 @@ trees, custom runtime fields, dependency-aware filtering, unsupported filters,
1614
1667
  and stale/missing indexes take the canonical fallback path with identical
1615
1668
  result contracts. Custom hosts may call `queryItemMetadataIndex` directly, but
1616
1669
  must treat `null` as an instruction to rebuild or use authoritative storage.
1670
+ The separate history-event index is also optional. Recognized native SQLite
1671
+ failures while starting its write transaction invalidate that projection before
1672
+ appending authoritative history. Native lock contention retains its existing
1673
+ invalidation protocol; unrelated adapter exceptions and authoritative append
1674
+ failures propagate. A later index rebuild restores accelerated history reads.
1675
+ (Repository tracker: [pm-0orupq](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-0orupq.toon);
1676
+ tracker records are excluded from npm.)
1617
1677
 
1618
1678
  List results always expose `total`, `has_more`, `truncated`, and a nullable
1619
1679
  `next_cursor`, whether or not the page was truncated; unset filter echoes are
@@ -1662,6 +1722,16 @@ true. The normal JSON envelope remains unchanged, and an actionable cursor is
1662
1722
  always retained. SDK query functions continue returning their full typed
1663
1723
  results; lean projection belongs to the CLI presentation boundary.
1664
1724
 
1725
+ Custom agent hosts can import `projectPmBriefListEnvelope` from
1726
+ `@unbrained/pm-cli/sdk` to apply the same brief-list presentation without
1727
+ mutating the original result. It retains unchecked source status and actionable
1728
+ continuation, and leaves partial, custom, or inconsistent envelopes intact.
1729
+ The CLI applies this projection only to TOON; ordinary JSON and SDK query
1730
+ results retain their complete contracts. The public `encodePmTableRows` and
1731
+ `decodePmTableRows` primitives distinguish explicit null and empty cells from
1732
+ missing keys. TOON rendering preserves those row facts before selecting the
1733
+ smaller expanded or tabular encoding.
1734
+
1665
1735
  Migration note: before this contract, `total` was present only when pagination
1666
1736
  omitted rows, a completed page omitted `next_cursor`, and verbose results
1667
1737
  emitted unset filter keys with `null` values. Consumers must use `has_more` or
@@ -2442,6 +2512,39 @@ throw createPmCliExpectedError("hello requires --name", {
2442
2512
 
2443
2513
  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.
2444
2514
 
2515
+ For example, the SDK command layer settles relationship token counts after alias
2516
+ counts, read disclosure, encoding and optional lean/token-accounting policies.
2517
+ It converts an impossible rendered context budget into an expected
2518
+ `invalid_argument_value` usage error. The public `PmTokenBudgetRecovery` type and
2519
+ `isPmTokenBudgetRecovery` guard describe `context.recovery.token_budget`: requested
2520
+ tokens, a verified feasible retry value, and an exact minimum only when every
2521
+ smaller positive budget has been checked. Larger searches report `feasible_only`;
2522
+ query cost limits, exhausted searches or independent output constraints can report
2523
+ `unavailable`. Both states leave the unproved minimum `null`. The bounded search
2524
+ uses the real packer and output policy, including alias disclosure.
2525
+ The public type is a discriminated union: checking `minimum_status` narrows the
2526
+ verified budgets and requires a reason for `unavailable`. Package authors cannot
2527
+ declare unavailable advice with a numeric budget or omit its cause. The runtime
2528
+ guard additionally checks positive safe integers and equal budgets for `exact`;
2529
+ those numeric invariants cannot be expressed by the declaration alone.
2530
+ `suggested_retry_args` preserves the selected tracker, query and output options
2531
+ with the verified feasible budget so it works from another workspace.
2532
+ Retry probes consume canonical summary/full include modes before packing and
2533
+ retain only residual field selectors, matching the emitted CLI command. Recovery
2534
+ work estimates include repeated dangling-reference renders; summary probes count
2535
+ only their single rendering pass. Expensive queries return explicit unavailable
2536
+ budget advice and retain the compact inspection fallback.
2537
+ `next_best_command` retains a separate compact tree-summary inspection, which
2538
+ also supplies the fallback when no working context budget is established.
2539
+ CLI JSON and MCP preserve that recovery. The lower-level
2540
+ `buildRelationshipContext` primitive retains its `TypeError` validation contract;
2541
+ unrelated runtime errors still propagate.
2542
+ (Repository tracker: [pm-odw3j8](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-odw3j8.toon),
2543
+ [pm-0bbc53](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-0bbc53.toon),
2544
+ [pm-k6uglj](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-k6uglj.toon),
2545
+ [pm-8jzcwv](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-8jzcwv.toon);
2546
+ tracker records are excluded from npm.)
2547
+
2445
2548
  For policy, lint, or verification commands that should render their full result
2446
2549
  and report failure without throwing, return a structured object instead:
2447
2550
 
package/docs/TESTING.md CHANGED
@@ -49,6 +49,13 @@ 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
+
52
59
  `node scripts/run-tests.mjs` wraps Vitest in temporary tracker roots, disables
53
60
  external Sentry delivery for the build, test workers, and their nested CLI
54
61
  children, then cleans the roots up. Instrumentation tests can still exercise
@@ -97,6 +104,13 @@ so PR-local CodeFactor maintainability annotations fail locally before commit or
97
104
  push. Existing legacy high-complexity test fixtures are tracked separately and
98
105
  must not be used as precedent for new changed production/script code.
99
106
 
107
+ Module-usage checks share the SDK boundary's literal-specifier parser and walk
108
+ nested AST nodes, including lazy `import("./module.js")` references. Unused
109
+ modules, comment-only references, and computed paths do not gain incoming
110
+ references. The regression is tracked by
111
+ [pm-f38ovr](../.agents/pm/issues/pm-f38ovr.toon); no module allowance or threshold
112
+ increase is required to keep optional SDK capabilities lazy.
113
+
100
114
  The same required static gate validates an explicit seven-day Dependabot
101
115
  cooldown for every updater and requires both npm and GitHub Actions entries.
102
116
  Missing values, semver overrides outside 7–90 days, invalid YAML, removed
@@ -237,6 +251,22 @@ into the pass count; a persistent assertion still fails after the bounded
237
251
  retry. Local runs do not retry, so deterministic failures stay immediate while
238
252
  iterating.
239
253
 
254
+ The complete receipt-operation, aborted-operation recovery, receipt-settlement, merge-portability and
255
+ lossless-collection-union integration files run in the existing serial
256
+ `lifecycle-performance` project after parallel contracts. Both nightly shards and
257
+ full coverage use that same project partition, retaining every case and its
258
+ original assertions, deadlines and retry policy. This allocation is tracked by
259
+ [pm-89297t](../.agents/pm/tasks/pm-89297t.toon); it does not classify or erase
260
+ historical failed attempts.
261
+
262
+ The complete macOS Node 24 and Windows Node 24 nightly suites each use two
263
+ Vitest shards. Both halves must pass within the existing 20-minute job limit;
264
+ sharding retains the same complete file population, serial phase, assertions,
265
+ per-test deadlines and retry policy. The recurrence collector retains the old
266
+ unsharded platform families alongside both current shard identities, so changing
267
+ the matrix does not erase earlier failures. macOS allocation is tracked by
268
+ [pm-qrirz8](../.agents/pm/tasks/pm-qrirz8.toon).
269
+
240
270
  Vitest's GitHub reporter emits annotations and retry evidence. The repository
241
271
  reliability reporter additionally writes
242
272
  `.vitest-reports/reliability-<shard>.json` and appends a job-summary table with
@@ -661,7 +691,8 @@ pm test <item-id> --run --workspace-context snapshot --override-linked-workspace
661
691
  Windows execution is tracked by [pm-bj7rq0](../.agents/pm/issues/pm-bj7rq0.toon).
662
692
  Script and native keeper cohorts run independently on Windows Node 24. Their
663
693
  source/script keeper steps retain the two-worker cap, and each cohort retains
664
- the 12-minute deadline. The required
694
+ the 12-minute deadline. The four-file Git/worktree receipt slice uses one
695
+ worker to avoid competing subprocess-heavy files at the same case deadlines. The required
665
696
  `Windows regression (Node 24)` check waits for both cohorts and fails if either
666
697
  fails, is cancelled, or is skipped. This preserves every selected regression
667
698
  while avoiding a shared serial job deadline. See GitHub's
@@ -39,7 +39,7 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
39
39
  | `history-repair` | evidence | 27 | 27 |
40
40
  | `history-compact` | evidence | 30 | 30 |
41
41
  | `history-author-acknowledge` | evidence | 28 | 28 |
42
- | `merge` | workspace | 27 | 27 |
42
+ | `merge` | workspace | 29 | 29 |
43
43
  | `schema` | workspace | 43 | 43 |
44
44
  | `profile` | workspace | 22 | 22 |
45
45
  | `activity` | context | 35 | 35 |
@@ -110,7 +110,7 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
110
110
  | `item test worker` | internal | 20 | 20 |
111
111
  | `history acknowledge` | evidence | 28 | 28 |
112
112
  | `item copy` | intake | 24 | 24 |
113
- | `workspace merge` | workspace | 27 | 27 |
113
+ | `workspace merge` | workspace | 29 | 29 |
114
114
  | `item duplicates` | context | 25 | 25 |
115
115
  | `calendar meet` | automation | 33 | 33 |
116
116
  | `calendar event` | automation | 33 | 33 |
@@ -4,12 +4,12 @@ Tracker: `pm-f05lsg`.
4
4
 
5
5
  Every catalog code is listed. An `uncovered` row is an explicit closure obligation, never an omission or implied approval.
6
6
 
7
- - Catalog error codes: 419
7
+ - Catalog error codes: 422
8
8
  - Executable error codes: 19
9
9
  - Executable-code ratchet floor: 18
10
10
  - Required executable canonical codes: `bulk_ids_input_empty`, `bulk_ids_input_missing_path`, `bulk_ids_input_unreadable`, `invalid_argument_value`, `manifest_unknown_key`, `missing_lifecycle_target`, `missing_required_argument`, `no_version_bounds_declared`, `projection_options_mutually_exclusive`, `tracker_not_initialized`, `tracker_root_missing`, `tracker_root_not_directory`, `tracker_root_unreadable`, `unknown_context_intent`, `unknown_field_projection`, `unknown_option`, `unknown_subcommand`
11
- - Uncovered error codes: 400
12
- - Coverage fraction: 0.045346
11
+ - Uncovered error codes: 403
12
+ - Coverage fraction: 0.045024
13
13
  - Closed-domain probes: 19
14
14
  - Grammar probes: 117
15
15
 
@@ -221,9 +221,12 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
221
221
  | `merge_git_config_unwritable` | `merge_git_config_unwritable` | uncovered | none | 0 |
222
222
  | `merge_receipt_evidence_invalid` | `merge_receipt_evidence_invalid` | uncovered | none | 0 |
223
223
  | `merge_receipt_history_reference_missing` | `merge_receipt_history_reference_missing` | uncovered | none | 0 |
224
+ | `merge_receipt_not_portable` | `merge_receipt_not_portable` | uncovered | none | 0 |
224
225
  | `merge_receipts_pending` | `merge_receipts_pending` | uncovered | none | 0 |
225
226
  | `merge_reconcile_receipt_evidence_untrusted` | `merge_reconcile_receipt_evidence_untrusted` | uncovered | none | 0 |
226
227
  | `merge_root_not_found` | `merge_root_not_found` | uncovered | none | 0 |
228
+ | `merge_settlement_hook_conflict` | `merge_settlement_hook_conflict` | uncovered | none | 0 |
229
+ | `merge_settlement_review_required` | `merge_settlement_review_required` | uncovered | none | 0 |
227
230
  | `missing_allowed_values` | `missing_allowed_values` | uncovered | none | 0 |
228
231
  | `missing_budget` | `missing_budget` | uncovered | none | 0 |
229
232
  | `missing_cli_flag` | `missing_cli_flag` | uncovered | none | 0 |
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.18","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.18","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.20","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.20","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.18",
3
+ "version": "2026.10.20",
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.18","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.20","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.18","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.20","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.18","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.20","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.18","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.20","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.18","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.20","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.18","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.20","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.18","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.20","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.18","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.20","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.18","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.20","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.18","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.20","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"]}}