@unbrained/pm-cli 2026.8.4 → 2026.8.5

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 (214) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +39 -13
  3. package/dist/cli/error-guidance.js +4 -4
  4. package/dist/cli/register-structured-mutation.d.ts +2 -0
  5. package/dist/cli/register-structured-mutation.js +124 -12
  6. package/dist/cli-bundle/bundle-manifest.json +407 -407
  7. package/dist/cli-bundle/chunks/append-VXXGOXSG.js +2 -0
  8. package/dist/cli-bundle/chunks/{chunk-QVO3VTA4.js → chunk-2WFXWAYX.js} +2 -2
  9. package/dist/cli-bundle/chunks/{chunk-NM5G7RLU.js → chunk-3FTILRJ2.js} +2 -2
  10. package/dist/cli-bundle/chunks/{chunk-VH2EAGUG.js → chunk-42E7YPLG.js} +2 -2
  11. package/dist/cli-bundle/chunks/{chunk-RB65T4RX.js → chunk-43HQQI6S.js} +2 -2
  12. package/dist/cli-bundle/chunks/{chunk-J4EPW4GT.js → chunk-45G53IU4.js} +2 -2
  13. package/dist/cli-bundle/chunks/{chunk-PQXEB7W4.js → chunk-4VN6GS4U.js} +2 -2
  14. package/dist/cli-bundle/chunks/chunk-4YUBDMQM.js +2 -0
  15. package/dist/cli-bundle/chunks/{chunk-D2MBVMVE.js → chunk-54FNT7U2.js} +2 -2
  16. package/dist/cli-bundle/chunks/{chunk-NRDKVOUE.js → chunk-5ZBOIPGP.js} +2 -2
  17. package/dist/cli-bundle/chunks/{chunk-3XZYTRPC.js → chunk-6MSQJOTG.js} +2 -2
  18. package/dist/cli-bundle/chunks/{chunk-GOICHIX4.js → chunk-7A5OT5J2.js} +2 -2
  19. package/dist/cli-bundle/chunks/{chunk-HTYC76A4.js → chunk-7C4PTJG6.js} +2 -2
  20. package/dist/cli-bundle/chunks/{chunk-BKMZTZYL.js → chunk-A62CYISG.js} +2 -2
  21. package/dist/cli-bundle/chunks/{chunk-5H47J5FG.js → chunk-BPELKUQD.js} +2 -2
  22. package/dist/cli-bundle/chunks/{chunk-HE3DZFN4.js → chunk-BXQLRKWF.js} +2 -2
  23. package/dist/cli-bundle/chunks/{chunk-BLINBTMX.js → chunk-CSI3WS5I.js} +2 -2
  24. package/dist/cli-bundle/chunks/{chunk-KH4GVBMC.js → chunk-DXDREUXT.js} +2 -2
  25. package/dist/cli-bundle/chunks/{chunk-KIKLF2W4.js → chunk-E2RKBKWB.js} +2 -2
  26. package/dist/cli-bundle/chunks/{chunk-377OOXUF.js → chunk-EGJ4JTUG.js} +2 -2
  27. package/dist/cli-bundle/chunks/{chunk-SULWTPQO.js → chunk-FPBQHMFT.js} +2 -2
  28. package/dist/cli-bundle/chunks/{chunk-V5K52PYW.js → chunk-GE4KCSZP.js} +35 -35
  29. package/dist/cli-bundle/chunks/{chunk-NPUJ7OLK.js → chunk-HNFD72UK.js} +2 -2
  30. package/dist/cli-bundle/chunks/{chunk-QMWUL66F.js → chunk-HWRRMBJO.js} +5 -5
  31. package/dist/cli-bundle/chunks/chunk-L3AZOELJ.js +2 -0
  32. package/dist/cli-bundle/chunks/{chunk-CGY5I2GO.js → chunk-LKDGK44W.js} +2 -2
  33. package/dist/cli-bundle/chunks/chunk-LN2WFEU4.js +2 -0
  34. package/dist/cli-bundle/chunks/{chunk-ZSH4GNBH.js → chunk-M72BKL5Q.js} +2 -2
  35. package/dist/cli-bundle/chunks/{chunk-HQ2WU7OY.js → chunk-MHK6LIWE.js} +2 -2
  36. package/dist/cli-bundle/chunks/{chunk-H6FITE7D.js → chunk-NE5VRDAI.js} +2 -2
  37. package/dist/cli-bundle/chunks/chunk-NY4T3JWN.js +2 -0
  38. package/dist/cli-bundle/chunks/{chunk-DCJ6CM6F.js → chunk-OMXVBQ2N.js} +2 -2
  39. package/dist/cli-bundle/chunks/chunk-OPVH7SKD.js +8 -0
  40. package/dist/cli-bundle/chunks/{chunk-CU5ENFNP.js → chunk-OTHLDSFP.js} +2 -2
  41. package/dist/cli-bundle/chunks/{chunk-NH35JNK5.js → chunk-PMXJEU3F.js} +2 -2
  42. package/dist/cli-bundle/chunks/{chunk-SVDH5CHC.js → chunk-Q35VBGOQ.js} +4 -4
  43. package/dist/cli-bundle/chunks/{chunk-5PZGZMPG.js → chunk-R546TPDE.js} +2 -2
  44. package/dist/cli-bundle/chunks/{chunk-Q5F6OI7C.js → chunk-RKAVWO3O.js} +2 -2
  45. package/dist/cli-bundle/chunks/{chunk-JMKVCQSE.js → chunk-SSF4PIUR.js} +2 -2
  46. package/dist/cli-bundle/chunks/{chunk-PA5XRN2A.js → chunk-UN66FZRO.js} +3 -3
  47. package/dist/cli-bundle/chunks/{chunk-FQ4EFFDU.js → chunk-UP7DTVMD.js} +2 -2
  48. package/dist/cli-bundle/chunks/{chunk-NFF3JAQR.js → chunk-UZBWIUYD.js} +2 -2
  49. package/dist/cli-bundle/chunks/{chunk-2POYGY53.js → chunk-V3774P7D.js} +2 -2
  50. package/dist/cli-bundle/chunks/{chunk-B5ZLCD5Z.js → chunk-V3EUXXOF.js} +2 -2
  51. package/dist/cli-bundle/chunks/{chunk-6S7I3UKV.js → chunk-VCKLFEUN.js} +19 -19
  52. package/dist/cli-bundle/chunks/{chunk-PYYPQLHC.js → chunk-VN5VITU3.js} +2 -2
  53. package/dist/cli-bundle/chunks/chunk-WRL4KNDL.js +20 -0
  54. package/dist/cli-bundle/chunks/{chunk-UJHUR3LZ.js → chunk-XCEZYMNI.js} +2 -2
  55. package/dist/cli-bundle/chunks/{chunk-JDPKBV5P.js → chunk-YEWNL576.js} +2 -2
  56. package/dist/cli-bundle/chunks/{chunk-OB7TRZ2G.js → chunk-YSO3YFZ4.js} +2 -2
  57. package/dist/cli-bundle/chunks/{chunk-UVZREFZU.js → chunk-ZYHOB3SN.js} +2 -2
  58. package/dist/cli-bundle/chunks/close-VZ3OQPN5.js +2 -0
  59. package/dist/cli-bundle/chunks/close-many-SB4TI27P.js +2 -0
  60. package/dist/cli-bundle/chunks/comments-BIF3Q4KY.js +2 -0
  61. package/dist/cli-bundle/chunks/copy-6AI5Z57X.js +2 -0
  62. package/dist/cli-bundle/chunks/{create-RLLCBCXM.js → create-XLKTXTUF.js} +2 -2
  63. package/dist/cli-bundle/chunks/delete-ZY2VHQTP.js +2 -0
  64. package/dist/cli-bundle/chunks/{deps-J4ONTF4X.js → deps-ITTY3GIC.js} +2 -2
  65. package/dist/cli-bundle/chunks/{docs-YL2DJ4WD.js → docs-W4OSRTYR.js} +2 -2
  66. package/dist/cli-bundle/chunks/{files-NGNAIYKK.js → files-EOK4AZI4.js} +2 -2
  67. package/dist/cli-bundle/chunks/focus-DLBNWL7L.js +2 -0
  68. package/dist/cli-bundle/chunks/{history-compact-HW62K5XP.js → history-compact-7UGTMLL3.js} +2 -2
  69. package/dist/cli-bundle/chunks/{history-redact-HVBKUJOW.js → history-redact-4DZRMD6Z.js} +2 -2
  70. package/dist/cli-bundle/chunks/{history-repair-OPNBH5JJ.js → history-repair-UPOSZW5R.js} +2 -2
  71. package/dist/cli-bundle/chunks/{learnings-F36PZXT6.js → learnings-GMRNCBS3.js} +2 -2
  72. package/dist/cli-bundle/chunks/{profile-N3XMWBM7.js → profile-2MUUMHRE.js} +2 -2
  73. package/dist/cli-bundle/chunks/{register-list-query-BKGHBI7Y.js → register-list-query-LR3SQ5ZF.js} +2 -2
  74. package/dist/cli-bundle/chunks/register-mutation-SUOHFVWM.js +20 -0
  75. package/dist/cli-bundle/chunks/register-operations-ARRRKOVN.js +2 -0
  76. package/dist/cli-bundle/chunks/{register-setup-KWV6UD77.js → register-setup-O6AYP6NP.js} +2 -2
  77. package/dist/cli-bundle/chunks/restore-ZVCVHTB5.js +2 -0
  78. package/dist/cli-bundle/chunks/{schema-4PJQMGUY.js → schema-FJ4EA3XF.js} +2 -2
  79. package/dist/cli-bundle/chunks/update-YHV52CSS.js +2 -0
  80. package/dist/cli-bundle/chunks/update-many-M6YHVNXM.js +2 -0
  81. package/dist/cli-bundle/focused-chunks/chunk-7J5TUBUJ.js +153 -0
  82. package/dist/cli-bundle/focused-chunks/{chunk-ONIX2KKW.js → chunk-A7BJ5SS6.js} +2 -2
  83. package/dist/cli-bundle/focused-chunks/chunk-B7LJWAZE.js +2 -0
  84. package/dist/cli-bundle/focused-chunks/{chunk-QM2BIVK7.js → chunk-BIMTMOS7.js} +3 -3
  85. package/dist/cli-bundle/focused-chunks/{chunk-BOGRY7M6.js → chunk-FGKY4MBE.js} +10 -10
  86. package/dist/cli-bundle/focused-chunks/chunk-G6ETT4QK.js +2 -0
  87. package/dist/cli-bundle/focused-chunks/{chunk-C2QSL62X.js → chunk-GJ2TG2CW.js} +2 -2
  88. package/dist/cli-bundle/focused-chunks/{chunk-RO5BQFG3.js → chunk-IPWSFADF.js} +2 -2
  89. package/dist/cli-bundle/focused-chunks/{chunk-UFCPSWIL.js → chunk-MJ7HWSFK.js} +2 -2
  90. package/dist/cli-bundle/focused-chunks/{chunk-2VIIXOAD.js → chunk-N5XU5UVK.js} +2 -2
  91. package/dist/cli-bundle/focused-chunks/chunk-PG2RIZBX.js +2 -0
  92. package/dist/cli-bundle/focused-chunks/{chunk-OYTK4VNH.js → chunk-PIMMYG7Q.js} +2 -2
  93. package/dist/cli-bundle/focused-chunks/{chunk-K37BB4JL.js → chunk-QVHKCI4T.js} +2 -2
  94. package/dist/cli-bundle/focused-chunks/{chunk-SQXVGHMH.js → chunk-RUR5I3TK.js} +2 -2
  95. package/dist/cli-bundle/focused-chunks/chunk-SV3O7TSH.js +8 -0
  96. package/dist/cli-bundle/focused-chunks/{chunk-L6A4NVQC.js → chunk-UIL2M2NA.js} +2 -2
  97. package/dist/cli-bundle/focused-chunks/{chunk-WVGJAD7L.js → chunk-VLYOEYML.js} +2 -2
  98. package/dist/cli-bundle/focused-chunks/chunk-W7BJEWHX.js +2 -0
  99. package/dist/cli-bundle/focused-chunks/{chunk-DQ4PLKEE.js → chunk-WEM2E2PE.js} +2 -2
  100. package/dist/cli-bundle/focused-chunks/chunk-WVIVUWVL.js +5 -0
  101. package/dist/cli-bundle/focused-chunks/chunk-Y4LDYLLT.js +2 -0
  102. package/dist/cli-bundle/main.js +4 -4
  103. package/dist/cli-bundle/sdk-authoring.js +1 -1
  104. package/dist/cli-bundle/sdk-contracts.js +1 -1
  105. package/dist/cli-bundle/sdk-core.js +28 -28
  106. package/dist/cli-bundle/sdk-governance.js +1 -1
  107. package/dist/cli-bundle/sdk-graph.js +1 -1
  108. package/dist/cli-bundle/sdk-merge.js +1 -1
  109. package/dist/cli-bundle/sdk-query.js +1 -1
  110. package/dist/cli-bundle/sdk-runtime.js +1 -1
  111. package/dist/cli-bundle/sdk-testing.js +1 -1
  112. package/dist/cli-bundle/sdk.js +1 -1
  113. package/dist/core/extensions/loader.js +5 -2
  114. package/dist/core/item/item-format.js +14 -20
  115. package/dist/core/shared/constants.js +3 -2
  116. package/dist/core/store/item-store.js +2 -2
  117. package/dist/core/store/settings.js +2 -2
  118. package/dist/mcp/server.js +12 -6
  119. package/dist/mcp/tool-definitions.js +14 -7
  120. package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +18 -18
  121. package/dist/sdk/cli-contracts/agent-output-contracts.js +51 -23
  122. package/dist/sdk/cli-contracts/commander-mutation-options.js +26 -2
  123. package/dist/sdk/cli-contracts/flag-contracts.d.ts +2 -0
  124. package/dist/sdk/cli-contracts/flag-contracts.js +28 -2
  125. package/dist/sdk/cli-contracts/registration-helpers.js +4 -2
  126. package/dist/sdk/cli-contracts/runtime-contracts.d.ts +10 -2
  127. package/dist/sdk/cli-contracts/runtime-contracts.js +20 -5
  128. package/dist/sdk/cli-contracts/tool-schema.js +4 -2
  129. package/dist/sdk/cli-contracts.d.ts +2 -2
  130. package/dist/sdk/cli-contracts.js +4 -4
  131. package/dist/sdk/cli-program.js +3 -3
  132. package/dist/sdk/contracts.d.ts +1 -0
  133. package/dist/sdk/contracts.js +3 -2
  134. package/dist/sdk/dependency-provenance.d.ts +2 -0
  135. package/dist/sdk/dependency-provenance.js +7 -3
  136. package/dist/sdk/error-code-catalog.d.ts +23 -0
  137. package/dist/sdk/error-code-catalog.js +25 -5
  138. package/dist/sdk/generated-error-code-catalog.js +499 -3
  139. package/dist/sdk/graph/governance.js +3 -3
  140. package/dist/sdk/graph/remediation.js +3 -3
  141. package/dist/sdk/graph/run.js +4 -8
  142. package/dist/sdk/index.d.ts +2 -1
  143. package/dist/sdk/index.js +4 -3
  144. package/dist/sdk/item-transaction.d.ts +51 -6
  145. package/dist/sdk/item-transaction.js +132 -22
  146. package/dist/sdk/lifecycle/create.d.ts +4 -0
  147. package/dist/sdk/lifecycle/create.js +26 -10
  148. package/dist/sdk/lifecycle-policy.d.ts +9 -0
  149. package/dist/sdk/lifecycle-policy.js +22 -9
  150. package/dist/sdk/merge/driver.js +6 -3
  151. package/dist/sdk/output-contracts.d.ts +67 -0
  152. package/dist/sdk/output-contracts.js +173 -0
  153. package/dist/sdk/package-import-adapters.js +2 -2
  154. package/dist/sdk/structured-mutations.d.ts +23 -0
  155. package/dist/sdk/structured-mutations.js +219 -10
  156. package/dist/sdk/workspace-snapshot.js +58 -12
  157. package/dist/sdk/workspace.js +30 -4
  158. package/docs/COMMANDS.md +40 -10
  159. package/docs/EXTENSIONS.md +1 -1
  160. package/docs/MERGE_SAFETY.md +2 -0
  161. package/docs/PR_REVIEW_LOOP.md +10 -4
  162. package/docs/README.md +22 -22
  163. package/docs/RELEASING.md +3 -3
  164. package/docs/SCRIPTING.md +32 -9
  165. package/docs/SDK.md +91 -11
  166. package/docs/SELF_DESCRIBING_CONTEXT_CONTRACTS.md +13 -0
  167. package/docs/TESTING.md +25 -0
  168. package/docs/examples/sdk-contract-consumer/README.md +11 -1
  169. package/docs/examples/sdk-contract-consumer/package.json +2 -1
  170. package/docs/examples/sdk-contract-consumer/parse-receipt.mjs +22 -0
  171. package/marketplace.json +2 -2
  172. package/package.json +3 -2
  173. package/packages/pm-beads/package.json +1 -1
  174. package/packages/pm-calendar/package.json +1 -1
  175. package/packages/pm-command-kit/package.json +1 -1
  176. package/packages/pm-digital-twin/package.json +1 -1
  177. package/packages/pm-governance-audit/package.json +1 -1
  178. package/packages/pm-guide-shell/package.json +1 -1
  179. package/packages/pm-kanban/package.json +1 -1
  180. package/packages/pm-lifecycle-hooks/package.json +1 -1
  181. package/packages/pm-linked-test-adapters/package.json +1 -1
  182. package/packages/pm-search-advanced/package.json +1 -1
  183. package/packages/pm-templates/package.json +1 -1
  184. package/packages/pm-todos/package.json +1 -1
  185. package/packages/pm-vcs/package.json +1 -1
  186. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  187. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  188. package/sdk/public-surface.json +292 -14
  189. package/dist/cli-bundle/chunks/append-DHBRLHHS.js +0 -2
  190. package/dist/cli-bundle/chunks/chunk-2INN52SU.js +0 -8
  191. package/dist/cli-bundle/chunks/chunk-6RSK4IFN.js +0 -20
  192. package/dist/cli-bundle/chunks/chunk-ASJJKA57.js +0 -2
  193. package/dist/cli-bundle/chunks/chunk-IYAVULRN.js +0 -2
  194. package/dist/cli-bundle/chunks/chunk-RRQBHQOV.js +0 -2
  195. package/dist/cli-bundle/chunks/chunk-XBLOD5TZ.js +0 -2
  196. package/dist/cli-bundle/chunks/close-VLHNN6YB.js +0 -2
  197. package/dist/cli-bundle/chunks/close-many-LSJNZKU6.js +0 -2
  198. package/dist/cli-bundle/chunks/comments-AAIA6A6X.js +0 -2
  199. package/dist/cli-bundle/chunks/copy-Z7YMLEHN.js +0 -2
  200. package/dist/cli-bundle/chunks/delete-KNOHHQJM.js +0 -2
  201. package/dist/cli-bundle/chunks/focus-LFRCGALV.js +0 -2
  202. package/dist/cli-bundle/chunks/register-mutation-GU3DCECN.js +0 -20
  203. package/dist/cli-bundle/chunks/register-operations-PTWH727R.js +0 -2
  204. package/dist/cli-bundle/chunks/restore-4HZSLILR.js +0 -2
  205. package/dist/cli-bundle/chunks/update-E6LPS5IV.js +0 -2
  206. package/dist/cli-bundle/chunks/update-many-OSIC6KRO.js +0 -2
  207. package/dist/cli-bundle/focused-chunks/chunk-5MTKO7TV.js +0 -153
  208. package/dist/cli-bundle/focused-chunks/chunk-6GIZK7VQ.js +0 -2
  209. package/dist/cli-bundle/focused-chunks/chunk-AOP2WIZZ.js +0 -2
  210. package/dist/cli-bundle/focused-chunks/chunk-CL75YW32.js +0 -2
  211. package/dist/cli-bundle/focused-chunks/chunk-E7OFMWGT.js +0 -8
  212. package/dist/cli-bundle/focused-chunks/chunk-I5F5UK3Q.js +0 -2
  213. package/dist/cli-bundle/focused-chunks/chunk-T5TSY36R.js +0 -5
  214. package/dist/cli-bundle/focused-chunks/chunk-VT6BF2IX.js +0 -2
package/docs/SDK.md CHANGED
@@ -290,7 +290,8 @@ Command/action contract exports:
290
290
  - Relationship graph primitives: `RelationshipKindRegistry`, `createRelationshipKindRegistry`, `assertRelationshipEdgeAllowed`, `RelationshipGraph`, `RelationshipEventLog`, `RelationshipEventStore`, `planRelationshipEventBackfill`, `buildRelationshipContext`, `buildDepsRelationshipContext`, `hierarchyAncestors`, `hierarchyDescendants`, `orderingPredecessors`, `orderingSuccessors`, `enumerateRelationshipPaths`, `auditWorkspaceRelationshipGraph`, `isOrderingRelationshipKind`, and `dependencyToRelationship` provide application-defined edge semantics, durable replay, deterministic legacy migration, bounded semantic traversal, policy-aware governance, and explainable context queries. Mutation adapters should call `assertRelationshipEdgeAllowed` with the active registry before persistence; it resolves aliases and honors custom `allowSelf` definitions while built-in self edges fail before item or history writes. `RelationshipEventLog.stream/project` and their durable-store equivalents page immutable prefixes and fold them into deterministic application state with exact version, processed-count, and as-of metadata. `RelationshipEventStore.appendBatch` validates a complete import under one cross-process lock and atomically publishes it; `skip_identical` resume mode rejects same-id semantic collisions. `RelationshipGraphAdapter`, `createRelationshipGraphSnapshot`, `syncRelationshipGraphAdapter`, `loadRelationshipGraphAdapter`, and `federateRelationshipGraphSnapshots` form the backend-neutral content-addressed projection boundary for database or remote graph packages. `MemoryRelationshipGraphAdapter`, `assertRelationshipGraphAdapterConformance`, and `createRelationshipGraphScaleFixture` give package authors a reference implementation, reusable compatibility contract, and lazy deterministic fixtures through one million nodes. See [Relationship graph semantics](RELATIONSHIP_GRAPH.md).
291
291
  - Atomic application transactions: `commitWorkspaceTransaction` coordinates ordered, idempotent item and relationship mutations under one workspace writer lock and a durable replay journal. Interrupted work resumes from step inspection; ordinary failures append reverse-order compensations without rewriting immutable histories.
292
292
  - Multi-branch merge primitives: `mergeItemDocuments`, `mergeHistoryStreams`, `mergeRelationshipEventStreams`, `mergeJsonDocuments`, `runMergeDriver`, `runMergeInstall`, and `runMergeReconcile` provide the same field-aware item, hash-chain-preserving history, sequence-renumbering relationship-event, key-level configuration, and audited post-merge repair-and-verify semantics as `pm merge`; `installMergeFence` and `findGitWorkspaceRoot` let custom init hosts install the same contract with explicit roots, while `buildMergeAttributePatterns`, `refreshMergeAttributeFenceIfInstalled`, and `auditMergeAttributeFence` expose fence coverage, refresh, and validation. See [Multi-Branch Merge Safety](MERGE_SAFETY.md).
293
- - Dependency provenance primitives: `EXTERNAL_DEPENDENCY_SOURCE_KIND`, `isExternalDependencySourceKind`, and `normalizeDependencySeedId` let custom importers preserve cross-workspace dependency ids explicitly while retaining local prefix normalization for ordinary seeds. Newly created dependency rows also carry the effective `author`, `author_source` (`asserted` or `detected`), and a mutation `source_kind`; legacy rows remain readable without invented provenance.
293
+ - Dependency provenance primitives: `EXTERNAL_DEPENDENCY_SOURCE_KIND`, `EXTERNAL_DEPENDENCY_SOURCE_KIND_ALIAS`, `isExternalDependencySourceKind`, and `normalizeDependencySeedId` let custom importers preserve cross-workspace dependency ids explicitly while retaining local prefix normalization for ordinary seeds. `source_kind: "external"` is the human-facing alias and persists canonically as `global`; a `blocked_by` row with that provenance is a real external predecessor, so graph governance does not require a fabricated local item or misreport `stale_lifecycle_block`. Newly created dependency rows also carry the effective `author`, `author_source` (`asserted` or `detected`), and a mutation `source_kind`; legacy rows remain readable without invented provenance. Tracked by [pm-6sc8jq](../.agents/pm/issues/pm-6sc8jq.toon).
294
+ - Terminal-create primitive: `CreateCommandOptions.closeReason` and `completedAt` allow importers to create an already-terminal item in the same atomic item/history transaction while preserving the source completion time separately from the local `closed_at` mutation time. The equivalent CLI flags are `--close-reason` and `--completed-at`; direct JSON documents map `close_reason` and `completed_at` to the same SDK operation. A missing governed reason returns `close_reason_required` with same-command `pm create` recovery examples. Tracked by [pm-ykdt4m](../.agents/pm/issues/pm-ykdt4m.toon) and [pm-5uclvd](../.agents/pm/issues/pm-5uclvd.toon).
294
295
  - Compile-cache lifecycle primitive: `pruneCompileCacheGenerations` bounds pm-owned Node bytecode caches to the current package generation; embedded hosts can apply the same upgrade cleanup without importing the executable entrypoint.
295
296
  - Typed mutation inputs (pm-x29o / GH-601): `PmCreateActionOptions`, `PmUpdateActionOptions`, and `PmCloseActionOptions` (`PmClientCloseActionOptions` on the client method) strip the permissive custom-field index signature from the executable command-option contracts, retaining their exact public keys and value types without a second hand-written shape; the free `create`/`update`/`close` functions and `PmClient` methods share those types. `PmUpdateManyActionOptions`, `PmCloseManyActionOptions`, and `OptionsFromContracts` cover flat action-contract composition. Field typos, object values, invalid scalar kinds, and MCP-only aliases on a `PmClient` command-option bag fail `tsc` under strict. Runtime-schema custom fields use the repeatable `field` option and `PmClient.run` remains the wide escape hatch. Projected list rows expose the typed `ListProjectedItemCore` fields (`row.id` is `string | undefined`, never `unknown`).
296
297
  - Typed customization primitives on `PmClient`: `init`, `config`, `schema`, `schemaList`, `schemaShow`, `schemaAddType`, `schemaRemoveType`, `schemaAddStatus`, `schemaRemoveStatus`, `schemaAddField`, `schemaRemoveField`, `schemaListFields`, `schemaShowField`, `schemaApplyPreset`, `schemaInferTypes`, `schemaShowStatus`, `profile`, `profileList`, `profileShow`, `profileApply`, and `profileLint`
@@ -567,18 +568,20 @@ Tracked by [pm-5t33or](../.agents/pm/features/pm-5t33or.toon),
567
568
  [pm-gmdzaa](../.agents/pm/issues/pm-gmdzaa.toon), and
568
569
  [pm-dpqa3h](../.agents/pm/chores/pm-dpqa3h.toon).
569
570
 
570
- `PM_COMMAND_OUTPUT_BUDGET_CONTRACTS` declares one default estimated-token
571
- ceiling for every built-in command. Each row also carries its workload class,
571
+ `PM_COMMAND_OUTPUT_BUDGET_CONTRACTS` declares generated TOON and JSON
572
+ estimated-token ceilings for every built-in command. Each row also carries its workload class,
572
573
  the stable `ceil(UTF-8 bytes / 4)` estimate, whether an explicit unbounded
573
574
  request is allowed, and the shared deterministic degradation ladder:
574
575
  `full → compact → brief → summary → counts`. These contracts are policy data,
575
576
  not renderer-specific code, so package authors can reuse
576
- `definePmCommandOutputBudget`, `resolvePmCommandOutputBudget`, and
577
+ `createPmCommandOutputBudget`, `definePmCommandOutputBudget`,
578
+ `resolvePmCommandOutputBudget`, and
577
579
  `estimatePmOutputTokens` in custom transports.
578
580
 
579
581
  ```ts
580
582
  import {
581
583
  definePmCommandOutputBudget,
584
+ parseMutationReceipt,
582
585
  estimatePmOutputTokens,
583
586
  resolvePmCommandOutputBudget,
584
587
  } from "@unbraind/pm-cli/sdk/contracts";
@@ -587,6 +590,7 @@ const compactRead = definePmCommandOutputBudget({
587
590
  command: "get",
588
591
  budget_class: "read",
589
592
  default_max_estimated_tokens: 800,
593
+ default_max_estimated_tokens_by_format: { toon: 800, json: 1200 },
590
594
  degradation_ladder: ["compact", "summary"],
591
595
  allows_unbounded_opt_out: false,
592
596
  token_estimate: "ceil(utf8_bytes / 4)",
@@ -596,8 +600,21 @@ const builtIn = resolvePmCommandOutputBudget("contracts --summary");
596
600
  const measured = estimatePmOutputTokens(
597
601
  new TextEncoder().encode(JSON.stringify(result)).byteLength,
598
602
  );
603
+
604
+ const receipt = parseMutationReceipt(mutationStdout);
605
+ // receipt.id and receipt.changedFieldCount are typed; wrapped read envelopes
606
+ // throw instead of silently producing an undefined id.
599
607
  ```
600
608
 
609
+ `PM_COMMAND_OUTPUT_ENVELOPE_CONTRACTS` and
610
+ `resolvePmCommandOutputEnvelope` declare whether the default structured result
611
+ is a flat mutation receipt, wrapped entity, collection, diagnostic, or stream.
612
+ The contracts command keeps summary bootstrap output compact and publishes
613
+ complete budget/envelope pairs under `command_output_contracts` only in the
614
+ explicit full projection. Active package commands receive deterministic
615
+ fallback contracts, so extension authors can discover a bounded surface before
616
+ they invoke it.
617
+
601
618
  `pm activity` applies a compact 20-row default bound; direct SDK calls default
602
619
  to five full rows. Results disclose `total_count`, `omitted_count`, `has_more`,
603
620
  and `applied_bound`. An explicit `limit` remains authoritative, while
@@ -1053,7 +1070,10 @@ tools that need to own item state without spawning `pm`.
1053
1070
  Tracked by [pm-4e12](../.agents/pm/features/pm-4e12.toon), with the VCS
1054
1071
  acceptance story [pm-8ngt](../.agents/pm/stories/pm-8ngt.toon) and the structured
1055
1072
  SDK adapters tracked by [pm-xm7c](../.agents/pm/features/pm-xm7c.toon) and
1056
- [pm-kipd](../.agents/pm/features/pm-kipd.toon).
1073
+ [pm-kipd](../.agents/pm/features/pm-kipd.toon), versioned batch-local
1074
+ references tracked by [pm-o8z748](../.agents/pm/issues/pm-o8z748.toon), and
1075
+ atomic evidence-backed completion tracked by
1076
+ [pm-cyn0y6](../.agents/pm/issues/pm-cyn0y6.toon).
1057
1077
 
1058
1078
  `commitWorkspaceTransaction` is the public unit-of-work primitive for domain
1059
1079
  commands that must coordinate several SDK mutations. A plan supplies a stable
@@ -1193,12 +1213,15 @@ previously compensated retry without package-private file access.
1193
1213
  For the ubiquitous "commit N item mutations atomically" case (bulk import,
1194
1214
  bulk sync), `commitItemMutations` wraps the coordinator so callers describe
1195
1215
  the mutations instead of hand-writing a step array. The helper wires the
1196
- crash-consistency contract for you: creates use their explicit stable `id` as
1216
+ crash-consistency contract for you: creates use their resolved stable `id` as
1197
1217
  the idempotency key (exists-by-id inspection) and are compensated by closing
1198
1218
  the item (or deleting it with `createCompensation: "delete"`); updates stamp a
1199
1219
  durable history marker for applied-detection and are compensated by restoring
1200
1220
  the captured pre-mutation version; closes treat an already-terminal target as
1201
- applied and are likewise compensated by version restore. A stable
1221
+ applied and are likewise compensated by version restore; releases restore the
1222
+ prior claim when a later step fails. The journal step identity includes a
1223
+ canonical mutation fingerprint, so reusing a transaction id with changed
1224
+ payload fails before new work. A stable
1202
1225
  `transactionId` makes interrupted batches resumable across processes and
1203
1226
  agents.
1204
1227
 
@@ -1249,7 +1272,7 @@ each `addAc`/`removeAc` entry must be semicolon-free; unmatched removals are
1249
1272
  reported as `remove_ac_unmatched:<text>` warnings rather than disappearing as
1250
1273
  silent no-ops.
1251
1274
 
1252
- `parseItemMutationBatch` is the strict JSON boundary for that primitive. It
1275
+ `parseItemMutationBatch` is the strict legacy JSON boundary for that primitive. It
1253
1276
  accepts either a non-empty mutation array or `{ "mutations": [...] }`, derives
1254
1277
  allowed option names from the exported create/update/close command contracts,
1255
1278
  and rejects unknown row or option keys with a did-you-mean diagnostic before a
@@ -1271,6 +1294,61 @@ await commitItemMutations({
1271
1294
  });
1272
1295
  ```
1273
1296
 
1297
+ For coherent heterogeneous specifications, use
1298
+ `resolveItemMutationDocument`. It accepts the legacy array or a versioned
1299
+ `{ schema_version: 1, mutations }` document. Create rows may declare a unique
1300
+ `ref`, omit `id`, and use exact `@ref` values in target ids, `parent`,
1301
+ `blockedBy`, and dependency `id` fields. Omitted ids are derived from the
1302
+ transaction id, alias, and workspace prefix; explicit ids are normalized.
1303
+ Malformed, duplicate, unknown, and cyclic references fail before tracker
1304
+ mutation. Commit the returned mutations and retain its alias-to-id receipt:
1305
+
1306
+ ```ts
1307
+ import {
1308
+ commitItemMutations,
1309
+ resolveItemMutationDocument,
1310
+ } from "@unbrained/pm-cli/sdk";
1311
+ import path from "node:path";
1312
+
1313
+ const pmRoot = path.join(process.cwd(), ".agents", "pm");
1314
+ const specificationJson = JSON.stringify({
1315
+ schema_version: 1,
1316
+ mutations: [
1317
+ {
1318
+ op: "create",
1319
+ ref: "initiative",
1320
+ options: { title: "Initiative", type: "Epic" },
1321
+ },
1322
+ {
1323
+ op: "create",
1324
+ ref: "delivery",
1325
+ options: {
1326
+ title: "Delivery",
1327
+ type: "Feature",
1328
+ parent: "@initiative",
1329
+ },
1330
+ },
1331
+ ],
1332
+ });
1333
+
1334
+ const resolved = resolveItemMutationDocument(specificationJson, {
1335
+ transactionId: "specification-2026-08-05-001",
1336
+ idPrefix: "pm-",
1337
+ });
1338
+ await commitItemMutations({
1339
+ pmRoot,
1340
+ author: "specification-agent",
1341
+ transactionId: "specification-2026-08-05-001",
1342
+ mutations: resolved.mutations,
1343
+ });
1344
+ ```
1345
+
1346
+ `buildItemCompletionMutations` creates the ordered evidence/update, close, and
1347
+ release plan for inspection. `commitItemCompletion` executes that plan through
1348
+ the same durable coordinator, restoring annotations, linked artifacts,
1349
+ lifecycle fields, and claim ownership on failure. It is the SDK primitive
1350
+ behind `pm item complete`.
1351
+
1274
1352
  `itemDocumentToMutationOptions` is the companion full-document adapter. It
1275
1353
  accepts either a direct `ItemDocument` or the envelope returned by
1276
1354
  `pm get <id> --json`, strips read-only metadata, maps canonical snake-case item
@@ -1281,9 +1359,11 @@ through the public `field` escape hatch.
1281
1359
 
1282
1360
  The built-in adapters stay deliberately thin:
1283
1361
 
1284
- - `pm item mutate --transaction-id <stable-id> --stdin-json` validates and
1285
- commits a batch with `commitItemMutations`; `--dry-run` performs validation
1286
- only, and reusing the transaction id resumes or replays the durable journal.
1362
+ - `pm item mutate --transaction-id <stable-id> --stdin-json` resolves aliases,
1363
+ validates, and commits a versioned batch; `--dry-run` returns the concrete
1364
+ graph and alias receipt without writes.
1365
+ - `pm item complete <id> <reason> --transaction-id <stable-id>` records linked
1366
+ evidence, closes, and releases a claim as one compensating transaction.
1287
1367
  - `pm create --stdin-json` and `pm update <id> --stdin-json` accept a whole item
1288
1368
  document. This supports the lossless `get → edit → update` agent workflow
1289
1369
  without translating every field into argv.
@@ -75,8 +75,21 @@ The default summary stays bounded. Larger intent and error catalogs are emitted
75
75
  - the stable snake-case code;
76
76
  - meaning and stability;
77
77
  - CLI exit code;
78
+ - semantic exit class (`generic_failure`, `usage`, `not_found`, `conflict`, or `dependency_failed`);
78
79
  - recovery guidance;
79
80
  - source modules that emit the code.
81
+ - inferred CLI command roots (`*` for cross-cutting runtime failures).
82
+
83
+ Existing catalog entries are recorded in `scripts/error-code-stability.json`.
84
+ The generator refuses to remove one of those stable codes unless the reviewed
85
+ compatibility ledger is changed explicitly. Newly discovered codes are emitted
86
+ as provisional until deliberately promoted, so adding a runtime declaration
87
+ does not accidentally promise permanent compatibility.
88
+
89
+ `PM_ERROR_CODE_EXIT_CLASS_CONTRACTS` is the portable shell taxonomy: exit 1 is
90
+ generic failure, 2 is usage, 3 is not-found, 4 is conflict, and 5 is dependency
91
+ failure. Catalog validation rejects a code whose declared semantic class and
92
+ transport exit disagree.
80
93
 
81
94
  Run the drift gate after adding or removing a structured error:
82
95
 
package/docs/TESTING.md CHANGED
@@ -248,6 +248,31 @@ step also fails until stale policy is reconciled. Public source claims are
248
248
  mapped to exact evidence strings and an enforced registry entry so
249
249
  documentation cannot silently advertise advisory behavior.
250
250
 
251
+ ## Tracker Context-Quality Ratchets
252
+
253
+ Tracked by [pm-ips23h](../.agents/pm/issues/pm-ips23h.toon) and
254
+ [pm-kpftft](../.agents/pm/tasks/pm-kpftft.toon).
255
+
256
+ `scripts/release/tracker-measurements.json` turns measured tracker populations
257
+ into reviewed, shrinking-only ceilings. Each declaration names its canonical
258
+ pm owner and a selector over stored dependency kinds, validator warnings,
259
+ graph-profile fields, or health-check severity. Open owners enforce their
260
+ ceiling; terminal owners retire it. Validator warnings and health checks are
261
+ exhaustive, so a newly observed class fails until it has a canonical owner and
262
+ reviewed declaration.
263
+
264
+ Run the same gate used by hosted CI:
265
+
266
+ ```bash
267
+ pnpm quality:tracker-measurements
268
+ node scripts/release/tracker-measurement-gate.mjs --negative-control
269
+ ```
270
+
271
+ `--update` can only lower a ceiling. It refuses to write while any population
272
+ has regressed or remains undeclared, so updating the baseline cannot absorb a
273
+ failure. Dependency-kind regressions include the post-measurement item, target,
274
+ author, timestamp, and mutation-source rows in the JSON receipt.
275
+
251
276
  ## Agent Output Token Budgets
252
277
 
253
278
  Run the required PR gate locally:
@@ -6,6 +6,7 @@ This example shows how to consume `pm` contracts programmatically in a script an
6
6
 
7
7
  - `package.json` -> installs `@unbrained/pm-cli` and script aliases
8
8
  - `inspect-contracts.mjs` -> loads contracts + SDK helpers and prints required/optional parameter metadata
9
+ - `parse-receipt.mjs` -> executes a real create and parses its flat mutation receipt with the SDK
9
10
 
10
11
  ## Run
11
12
 
@@ -20,6 +21,7 @@ npm install "$PM_CLI_REPO_ROOT"
20
21
  # npm install @unbrained/pm-cli@latest
21
22
 
22
23
  node inspect-contracts.mjs create
24
+ npm run parse:receipt
23
25
  ```
24
26
 
25
27
  Expected output shape:
@@ -27,7 +29,14 @@ Expected output shape:
27
29
  ```json
28
30
  {
29
31
  "action": "create",
30
- "required_parameters": ["title", "description", "type", "status", "priority", "message"],
32
+ "required_parameters": [
33
+ "title",
34
+ "description",
35
+ "type",
36
+ "status",
37
+ "priority",
38
+ "message"
39
+ ],
31
40
  "optional_parameters": ["template", "createMode", "schedulePreset"],
32
41
  "any_of_required_groups": [],
33
42
  "runtime_available": true,
@@ -55,3 +64,4 @@ node inspect-contracts.mjs extension-reload
55
64
  - Uses `PM_TOOL_ACTION_PARAMETER_CONTRACTS` for deterministic required/optional metadata.
56
65
  - Uses runtime `pm contracts --json` so extension-provided actions and command availability are reflected.
57
66
  - Includes policy-state and compatibility metadata so CI/app callers can gate behavior during v1 -> v2 migrations.
67
+ - Uses `parseMutationReceipt()` at the process boundary instead of guessing that mutation output has the read-only `{ item: ... }` wrapper.
@@ -5,6 +5,7 @@
5
5
  "scripts": {
6
6
  "inspect:create": "node inspect-contracts.mjs create",
7
7
  "inspect:update": "node inspect-contracts.mjs update",
8
- "inspect:reload": "node inspect-contracts.mjs extension-reload"
8
+ "inspect:reload": "node inspect-contracts.mjs extension-reload",
9
+ "parse:receipt": "node parse-receipt.mjs"
9
10
  }
10
11
  }
@@ -0,0 +1,22 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { parseMutationReceipt } from "@unbrained/pm-cli/sdk";
3
+
4
+ const completed = spawnSync(
5
+ "pm",
6
+ ["create", "SDK receipt example", "--type", "Task", "--json"],
7
+ { encoding: "utf8", env: { ...process.env, NO_COLOR: "1" } },
8
+ );
9
+
10
+ if (completed.error) {
11
+ throw new Error(`Failed to run pm create: ${completed.error.message}`, {
12
+ cause: completed.error,
13
+ });
14
+ }
15
+ if (completed.status !== 0) {
16
+ throw new Error(
17
+ completed.stderr.trim() || `pm create failed with ${completed.status}`,
18
+ );
19
+ }
20
+
21
+ const receipt = parseMutationReceipt(completed.stdout);
22
+ process.stdout.write(`${JSON.stringify(receipt, null, 2)}\n`);
package/marketplace.json CHANGED
@@ -6,14 +6,14 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.",
9
- "version": "2026.8.4"
9
+ "version": "2026.8.5"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "pm-claude",
14
14
  "source": "./plugins/pm-claude",
15
15
  "description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
16
- "version": "2026.8.4",
16
+ "version": "2026.8.5",
17
17
  "author": {
18
18
  "name": "unbrained",
19
19
  "url": "https://github.com/unbraind/pm-cli"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-cli",
3
- "version": "2026.8.4",
3
+ "version": "2026.8.5",
4
4
  "description": "Git-native project management CLI for humans and agents.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.10.0",
@@ -120,7 +120,7 @@
120
120
  "lint:complexity:baseline": "eslint . --suppress-rule complexity --suppress-rule sonarjs/cognitive-complexity",
121
121
  "lint:duplicates": "jscpd --config .jscpd.json",
122
122
  "lint:codefactor": "pnpm quality:static",
123
- "quality:static": "pnpm build && pnpm exec tsx scripts/release/static-quality-gate.mts --max-eslint-suppressions 127 --max-coverage-ignore-pragmas 477 --min-docstring-coverage 100 --min-exported-docstring-coverage 100 --min-member-docstring-coverage 100 && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/token-budget-gate.mjs && node scripts/release/context-intent-calibration-gate.mjs && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check",
123
+ "quality:static": "pnpm build && pnpm exec tsx scripts/release/static-quality-gate.mts --max-eslint-suppressions 114 --max-coverage-ignore-pragmas 477 --min-docstring-coverage 100 --min-exported-docstring-coverage 100 --min-member-docstring-coverage 100 && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/token-budget-gate.mjs && node scripts/release/context-intent-calibration-gate.mjs && node scripts/release/tracker-measurement-gate.mjs && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check",
124
124
  "quality:token-budget": "node scripts/release/token-budget-gate.mjs",
125
125
  "quality:token-surface": "node scripts/measure-agent-token-surface.mjs --check",
126
126
  "quality:token-surface:update": "pnpm build && node scripts/measure-agent-token-surface.mjs --update",
@@ -130,6 +130,7 @@
130
130
  "quality:retrieval-eval": "pnpm build && node scripts/release/retrieval-eval-gate.mjs",
131
131
  "quality:retrieval-eval:update": "pnpm build && node scripts/release/retrieval-eval-gate.mjs --update",
132
132
  "quality:gate-registry": "pnpm build && node scripts/release/gate-registry.mjs",
133
+ "quality:tracker-measurements": "pnpm build && node scripts/release/tracker-measurement-gate.mjs",
133
134
  "quality:package-artifact": "pnpm build && node scripts/release/package-artifact-gate.mjs",
134
135
  "quality:docs-skills": "node scripts/release/docs-skills-gate.mjs",
135
136
  "quality:docs-links": "node scripts/release/docs-skills-gate.mjs --links-only",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-beads",
3
- "version": "2026.8.4",
3
+ "version": "2026.8.5",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for importing Beads JSONL records.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-calendar",
3
- "version": "2026.8.4",
3
+ "version": "2026.8.5",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for calendar and agenda views.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-command-kit",
3
- "version": "2026.8.4",
3
+ "version": "2026.8.5",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm exemplar package for the commands capability: registerCommand, registerFlags, and registerParser.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-digital-twin",
3
- "version": "2026.8.4",
3
+ "version": "2026.8.5",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-governance-audit",
3
- "version": "2026.8.4",
3
+ "version": "2026.8.5",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for governance audit and normalization workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-guide-shell",
3
- "version": "2026.8.4",
3
+ "version": "2026.8.5",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for guide and shell completion workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-kanban",
3
- "version": "2026.8.4",
3
+ "version": "2026.8.5",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm archetype package: a complete Kanban continuous-flow profile built on public SDK primitives.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-lifecycle-hooks",
3
- "version": "2026.8.4",
3
+ "version": "2026.8.5",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package demonstrating safe lifecycle hook registration.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-linked-test-adapters",
3
- "version": "2026.8.4",
3
+ "version": "2026.8.5",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for optional linked-test run management adapters and reporters.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-search-advanced",
3
- "version": "2026.8.4",
3
+ "version": "2026.8.5",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for semantic, hybrid, and reindex search workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-templates",
3
- "version": "2026.8.4",
3
+ "version": "2026.8.5",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for reusable create templates.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-todos",
3
- "version": "2026.8.4",
3
+ "version": "2026.8.5",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for Todo markdown import and export.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-vcs-sdk-exemplar",
3
- "version": "2026.8.4",
3
+ "version": "2026.8.5",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Beyond-PM exemplar: a VCS-style changeset workflow built entirely on public pm SDK and extension primitives.",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pm-claude",
3
3
  "description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 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.",
4
- "version": "2026.8.4",
4
+ "version": "2026.8.5",
5
5
  "author": {
6
6
  "name": "unbrained",
7
7
  "url": "https://github.com/unbraind/pm-cli"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-codex",
3
- "version": "2026.8.4",
3
+ "version": "2026.8.5",
4
4
  "description": "Native Codex integration for pm-cli with bundled MCP tools, skills, commands, and agent workflows.",
5
5
  "author": {
6
6
  "name": "unbrained",