@unbrained/pm-cli 2026.11.3 → 2026.11.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 (294) hide show
  1. package/.agents/skills/HARNESS_COMPATIBILITY.md +1 -1
  2. package/.agents/skills/README.md +14 -14
  3. package/.agents/skills/pm-developer/SKILL.md +16 -16
  4. package/.agents/skills/pm-developer/references/GRAPH_AND_RELATIONSHIPS.md +14 -14
  5. package/.agents/skills/pm-developer/references/SCRIPTING_COMPOSITION.md +10 -10
  6. package/.agents/skills/pm-extensions/SKILL.md +13 -13
  7. package/.agents/skills/pm-extensions/references/AUTHORING.md +12 -12
  8. package/.agents/skills/pm-sdk/SKILL.md +27 -27
  9. package/.agents/skills/pm-sdk/references/SURFACE_MAP.md +32 -32
  10. package/.agents/skills/pm-test-audit/references/AUDIT.md +1 -1
  11. package/.agents/skills/pm-user/SKILL.md +35 -35
  12. package/.claude-plugin/marketplace.json +1 -1
  13. package/AGENTS.md +9 -9
  14. package/CHANGELOG.md +19 -0
  15. package/README.md +13 -13
  16. package/dist/cli/error-guidance.d.ts +14 -35
  17. package/dist/cli/error-guidance.js +2 -2
  18. package/dist/cli/expected-revisions.d.ts +55 -0
  19. package/dist/cli/expected-revisions.js +2 -0
  20. package/dist/cli/main.js +2 -2
  21. package/dist/cli/register-setup.js +1 -1
  22. package/dist/cli/runtime/invocation-options.js +1 -1
  23. package/dist/cli-bundle/bundle-manifest.json +1 -1
  24. package/dist/cli-bundle/chunks/chunk-2RPORE7M.js +31 -0
  25. package/dist/cli-bundle/chunks/{chunk-Y7H55PCY.js → chunk-335BZ75D.js} +2 -2
  26. package/dist/cli-bundle/chunks/chunk-5GWEY4P6.js +122 -0
  27. package/dist/cli-bundle/chunks/chunk-6VRX2CM7.js +2 -0
  28. package/dist/cli-bundle/chunks/{chunk-5JZMF4M5.js → chunk-7DEKAXVA.js} +2 -2
  29. package/dist/cli-bundle/chunks/{chunk-32BCU6HN.js → chunk-7ZRCYESH.js} +47 -46
  30. package/dist/cli-bundle/chunks/chunk-AUEKTX7V.js +6 -0
  31. package/dist/cli-bundle/chunks/chunk-D7KYPRK4.js +2 -0
  32. package/dist/cli-bundle/chunks/{chunk-2CBHQXYJ.js → chunk-DAX3AOFI.js} +2 -2
  33. package/dist/cli-bundle/chunks/{chunk-JPKIUWLG.js → chunk-F6NDMKZ4.js} +2 -2
  34. package/dist/cli-bundle/chunks/chunk-FRNMQM45.js +2 -0
  35. package/dist/cli-bundle/chunks/chunk-HNGLDMSZ.js +9 -0
  36. package/dist/cli-bundle/chunks/{chunk-DEJHTFEF.js → chunk-HRCMORE7.js} +2 -2
  37. package/dist/cli-bundle/chunks/chunk-HRFGFIYU.js +2 -0
  38. package/dist/cli-bundle/chunks/{chunk-5IPXDZKU.js → chunk-JI2GDE4I.js} +66 -66
  39. package/dist/cli-bundle/chunks/{chunk-MQJXZX3Q.js → chunk-LS3GI3H4.js} +53 -53
  40. package/dist/cli-bundle/chunks/chunk-OH6WQ7VT.js +3 -0
  41. package/dist/cli-bundle/chunks/{chunk-TZ3D3DPQ.js → chunk-OJDMJT7Y.js} +2 -2
  42. package/dist/cli-bundle/chunks/chunk-S4LPZ4TN.js +20 -0
  43. package/dist/cli-bundle/chunks/chunk-UEGXWXUZ.js +2 -0
  44. package/dist/cli-bundle/chunks/chunk-XLSHFYXZ.js +2 -0
  45. package/dist/cli-bundle/chunks/{chunk-UYNMKUGA.js → chunk-YKXATU2G.js} +2 -2
  46. package/dist/cli-bundle/chunks/item-revision-OJJVPQY7.js +2 -0
  47. package/dist/cli-bundle/chunks/item-transaction-QEPBUCMY.js +2 -0
  48. package/dist/cli-bundle/chunks/mutation-admission-INMM3HHG.js +2 -0
  49. package/dist/cli-bundle/chunks/{register-list-query-I6AZA3IX.js → register-list-query-5Y5JKWU5.js} +2 -2
  50. package/dist/cli-bundle/chunks/{register-mutation-3DAXCLXR.js → register-mutation-WC7OSQID.js} +2 -2
  51. package/dist/cli-bundle/chunks/register-operations-PO63DBZH.js +2 -0
  52. package/dist/cli-bundle/chunks/register-setup-RRFOS7IT.js +2 -0
  53. package/dist/cli-bundle/chunks/{stage-7H36OTDJ.js → stage-E3MMV4TV.js} +2 -2
  54. package/dist/cli-bundle/focused-chunks/chunk-5PMJOJCZ.js +44 -0
  55. package/dist/cli-bundle/focused-chunks/chunk-7KK66ISG.js +2 -0
  56. package/dist/cli-bundle/focused-chunks/{chunk-D4XQOMG4.js → chunk-AHWJPZSJ.js} +2 -2
  57. package/dist/cli-bundle/focused-chunks/chunk-C3O6JJPO.js +2 -0
  58. package/dist/cli-bundle/focused-chunks/{chunk-LKN2WGGB.js → chunk-C6P6HPCX.js} +2 -2
  59. package/dist/cli-bundle/focused-chunks/chunk-CPMSL4HS.js +2 -0
  60. package/dist/cli-bundle/focused-chunks/chunk-CZM75DE3.js +2 -0
  61. package/dist/cli-bundle/focused-chunks/{chunk-TYHDZUL4.js → chunk-D2TBEBNW.js} +2 -2
  62. package/dist/cli-bundle/focused-chunks/chunk-E56OXRYH.js +2 -0
  63. package/dist/cli-bundle/focused-chunks/{chunk-I5FODKYB.js → chunk-F62XGAAY.js} +2 -2
  64. package/dist/cli-bundle/focused-chunks/chunk-G4QP365K.js +2 -0
  65. package/dist/cli-bundle/focused-chunks/chunk-G5PJCR7R.js +2 -0
  66. package/dist/cli-bundle/focused-chunks/chunk-GS3JC5UU.js +23 -0
  67. package/dist/cli-bundle/focused-chunks/chunk-I5LGPUWH.js +2 -0
  68. package/dist/cli-bundle/focused-chunks/chunk-LW64TINU.js +3 -0
  69. package/dist/cli-bundle/focused-chunks/chunk-M6V7UMWL.js +26 -0
  70. package/dist/cli-bundle/focused-chunks/chunk-MC7IE7D7.js +8 -0
  71. package/dist/cli-bundle/focused-chunks/chunk-MG7C3JUY.js +2 -0
  72. package/dist/cli-bundle/focused-chunks/{chunk-F3X6UWMI.js → chunk-MK4HV4JO.js} +2 -2
  73. package/dist/cli-bundle/focused-chunks/{chunk-ZQRCVRGS.js → chunk-NQ7GYFOX.js} +54 -54
  74. package/dist/cli-bundle/focused-chunks/chunk-O7EI33NP.js +91 -0
  75. package/dist/cli-bundle/focused-chunks/{chunk-RY4QEMAE.js → chunk-RFTJZ5VB.js} +2 -2
  76. package/dist/cli-bundle/focused-chunks/chunk-SNOXXRSJ.js +2 -0
  77. package/dist/cli-bundle/focused-chunks/chunk-UPJUTP2V.js +12 -0
  78. package/dist/cli-bundle/focused-chunks/{chunk-HJ27QLZV.js → chunk-VWWTIX5L.js} +2 -2
  79. package/dist/cli-bundle/focused-chunks/{chunk-HOXIIZEO.js → chunk-XHOBYCVE.js} +2 -2
  80. package/dist/cli-bundle/focused-chunks/chunk-YMGB2O4E.js +81 -0
  81. package/dist/cli-bundle/focused-chunks/item-revision-CTDO4H3I.js +2 -0
  82. package/dist/cli-bundle/focused-chunks/item-transaction-AEAYVVHA.js +2 -0
  83. package/dist/cli-bundle/focused-chunks/mutation-admission-4WM7TNHZ.js +2 -0
  84. package/dist/cli-bundle/focused-chunks/{stage-4SQHVI3O.js → stage-WV7QXR4C.js} +2 -2
  85. package/dist/cli-bundle/main.js +25 -25
  86. package/dist/cli-bundle/sdk-authoring.js +1 -1
  87. package/dist/cli-bundle/sdk-contracts.js +5 -5
  88. package/dist/cli-bundle/sdk-core.js +1 -1
  89. package/dist/cli-bundle/sdk-governance.js +1 -1
  90. package/dist/cli-bundle/sdk-graph.js +1 -1
  91. package/dist/cli-bundle/sdk-merge.js +57 -57
  92. package/dist/cli-bundle/sdk-query.js +1 -1
  93. package/dist/cli-bundle/sdk-runtime.js +1 -1
  94. package/dist/cli-bundle/sdk-testing.js +1 -1
  95. package/dist/cli-bundle/sdk.js +11 -11
  96. package/dist/core/config/positional-value.d.ts +7 -1
  97. package/dist/core/config/positional-value.js +1 -1
  98. package/dist/core/extensions/reserved-host-flags.js +1 -1
  99. package/dist/core/history/history-rewrite.js +1 -1
  100. package/dist/core/item/literal-mutation-input.d.ts +17 -0
  101. package/dist/core/item/literal-mutation-input.js +1 -1
  102. package/dist/core/item/parent-reference-policy.d.ts +8 -4
  103. package/dist/core/item/parent-reference-policy.js +1 -1
  104. package/dist/core/item/sprint-release-format.d.ts +2 -1
  105. package/dist/core/item/sprint-release-format.js +1 -1
  106. package/dist/core/output/mutation-projection.js +1 -1
  107. package/dist/core/shared/command-types.d.ts +7 -0
  108. package/dist/core/store/item-mutation-precondition.d.ts +72 -6
  109. package/dist/core/store/item-mutation-precondition.js +1 -1
  110. package/dist/core/store/item-store.js +1 -1
  111. package/dist/core/store/settings-validator.js +1 -1
  112. package/dist/core/store/settings.d.ts +14 -0
  113. package/dist/core/store/settings.js +5 -4
  114. package/dist/core/telemetry/policy.d.ts +27 -1
  115. package/dist/core/telemetry/policy.js +1 -1
  116. package/dist/core/telemetry/runtime.d.ts +18 -7
  117. package/dist/core/telemetry/runtime.js +4 -4
  118. package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -1
  119. package/dist/sdk/cli-contracts/completeness.js +1 -1
  120. package/dist/sdk/cli-contracts/enum-contracts.d.ts +11 -0
  121. package/dist/sdk/cli-contracts/enum-contracts.js +1 -1
  122. package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -1
  123. package/dist/sdk/cli-contracts/registration-helpers.js +1 -1
  124. package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
  125. package/dist/sdk/cli-contracts/tool-schema.js +1 -1
  126. package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +8 -5
  127. package/dist/sdk/cli-contracts.d.ts +1 -1
  128. package/dist/sdk/cli-contracts.js +1 -1
  129. package/dist/sdk/cli-program.js +1 -1
  130. package/dist/sdk/config.d.ts +3 -3
  131. package/dist/sdk/config.js +1 -1
  132. package/dist/sdk/environment/project-runtime-compatibility.js +1 -1
  133. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  134. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  135. package/dist/sdk/governance/health.d.ts +2 -2
  136. package/dist/sdk/governance/health.js +2 -2
  137. package/dist/sdk/governance/validate.js +1 -1
  138. package/dist/sdk/history/salvage.js +3 -3
  139. package/dist/sdk/history-compact.d.ts +7 -1
  140. package/dist/sdk/history-compact.js +1 -1
  141. package/dist/sdk/history-repair.d.ts +2 -1
  142. package/dist/sdk/history-repair.js +1 -1
  143. package/dist/sdk/index.d.ts +6 -1
  144. package/dist/sdk/index.js +1 -1
  145. package/dist/sdk/init.d.ts +4 -4
  146. package/dist/sdk/init.js +8 -8
  147. package/dist/sdk/lifecycle/checkpoint-rollback.d.ts +10 -2
  148. package/dist/sdk/lifecycle/checkpoint-rollback.js +1 -1
  149. package/dist/sdk/lifecycle/claim.d.ts +4 -0
  150. package/dist/sdk/lifecycle/claim.js +1 -1
  151. package/dist/sdk/lifecycle/close-many.d.ts +11 -2
  152. package/dist/sdk/lifecycle/close-many.js +1 -1
  153. package/dist/sdk/lifecycle/close.d.ts +25 -0
  154. package/dist/sdk/lifecycle/close.js +1 -1
  155. package/dist/sdk/lifecycle/create.d.ts +7 -5
  156. package/dist/sdk/lifecycle/create.js +1 -1
  157. package/dist/sdk/lifecycle/item-revision.d.ts +162 -0
  158. package/dist/sdk/lifecycle/item-revision.js +2 -0
  159. package/dist/sdk/lifecycle/restore.js +1 -1
  160. package/dist/sdk/lifecycle/shared-unset-fields.d.ts +628 -4
  161. package/dist/sdk/lifecycle/shared-unset-fields.js +1 -1
  162. package/dist/sdk/lifecycle/start-blockers.d.ts +52 -0
  163. package/dist/sdk/lifecycle/start-blockers.js +2 -0
  164. package/dist/sdk/lifecycle/task-composition.d.ts +11 -0
  165. package/dist/sdk/lifecycle/task-composition.js +1 -1
  166. package/dist/sdk/lifecycle/update-many.d.ts +11 -2
  167. package/dist/sdk/lifecycle/update-many.js +1 -1
  168. package/dist/sdk/lifecycle/update.d.ts +5 -4
  169. package/dist/sdk/lifecycle/update.js +2 -2
  170. package/dist/sdk/public-surface.json +1 -1
  171. package/dist/sdk/query/declared-blockers.d.ts +16 -0
  172. package/dist/sdk/query/declared-blockers.js +2 -0
  173. package/dist/sdk/query/get.d.ts +7 -0
  174. package/dist/sdk/query/get.js +1 -1
  175. package/dist/sdk/query/projection-contracts.js +1 -1
  176. package/dist/sdk/runtime/actions.js +1 -1
  177. package/dist/sdk/runtime/mutation-value-validation.js +1 -1
  178. package/dist/sdk/runtime-input.d.ts +12 -0
  179. package/dist/sdk/runtime-input.js +1 -1
  180. package/dist/sdk/runtime-primitives.d.ts +1 -0
  181. package/dist/sdk/runtime-primitives.js +1 -1
  182. package/dist/sdk/runtime.d.ts +10 -0
  183. package/dist/sdk/runtime.js +1 -1
  184. package/dist/sdk/structured-mutations.js +1 -1
  185. package/dist/sdk/telemetry.d.ts +1 -1
  186. package/dist/sdk/telemetry.js +2 -2
  187. package/dist/sdk/test/batch.js +2 -2
  188. package/dist/sdk/test/execution.js +2 -2
  189. package/dist/sdk/test/linked-command-detection.js +1 -1
  190. package/dist/sdk/workspace-transaction.d.ts +17 -6
  191. package/dist/sdk/workspace-transaction.js +1 -1
  192. package/dist/types.d.ts +6 -0
  193. package/dist/types.js +1 -1
  194. package/docs/AGENT_GUIDE.md +48 -48
  195. package/docs/AGENT_OUTPUT_ENCODINGS.md +20 -20
  196. package/docs/ASSURANCE.md +10 -10
  197. package/docs/BOUNDED_CONTEXT_READS.md +3 -3
  198. package/docs/CLAUDE_CODE_PLUGIN.md +1 -1
  199. package/docs/CLI_GRAMMAR.md +2 -2
  200. package/docs/COMMANDS.md +144 -32
  201. package/docs/COMMAND_NAMESPACES.md +1 -1
  202. package/docs/CONFIGURATION.md +82 -70
  203. package/docs/CONTEXT_ALGORITHM_PORTFOLIO.md +2 -2
  204. package/docs/CONTEXT_INTEGRITY_CONTRACTS.md +5 -5
  205. package/docs/CORPUS_SHAPES.md +1 -1
  206. package/docs/DEPENDENCY_KIND_CONTRACT.md +6 -6
  207. package/docs/DIAGNOSTIC_OUTPUT_CONTRACTS.md +5 -5
  208. package/docs/ECOSYSTEM_PLANNING_REVIEW.md +3 -3
  209. package/docs/EXTENSION_AUTHOR_CONTRACTS.md +4 -4
  210. package/docs/HISTORY_ATTESTATION.md +1 -1
  211. package/docs/HISTORY_MAINTENANCE.md +1 -1
  212. package/docs/LIFECYCLE_COMMANDS.md +1 -1
  213. package/docs/MCP_2026_07_28.md +16 -16
  214. package/docs/MCP_2026_07_28_CONFORMANCE.md +19 -19
  215. package/docs/MCP_REMOTE_TRANSPORT_SECURITY.md +22 -22
  216. package/docs/MCP_SKILLS_AND_APPS.md +1 -1
  217. package/docs/MERGE_SAFETY.md +6 -6
  218. package/docs/MUTATION_INTEGRITY.md +5 -5
  219. package/docs/OUTPUT_PROJECTION_CONTRACTS.md +14 -14
  220. package/docs/PACKED_FIRST_RUN.md +1 -1
  221. package/docs/QUICKSTART.md +10 -10
  222. package/docs/README.md +21 -21
  223. package/docs/READ_OUTPUT_CONTRACTS.md +9 -9
  224. package/docs/RECURRENCE_RECOVERY_CONTRACTS.md +1 -1
  225. package/docs/RELEASING.md +19 -10
  226. package/docs/SCRIPTING.md +10 -10
  227. package/docs/SDK.md +183 -38
  228. package/docs/SDK_ARTIFACT_OUTPUT.md +1 -1
  229. package/docs/SDK_PRIMITIVE_INVENTORY.md +2 -2
  230. package/docs/SELF_DESCRIBING_CONTEXT_CONTRACTS.md +7 -7
  231. package/docs/TESTING.md +1 -1
  232. package/docs/WORKFLOW_POLICIES.md +2 -2
  233. package/docs/WORKSPACE_POSITION_AND_LIFECYCLE.md +8 -8
  234. package/docs/agent-task-token-baseline.json +1 -1
  235. package/docs/generated/AGENT_CAPABILITY_ROUTING.md +1 -1
  236. package/docs/generated/AGENT_COMMAND_SURFACE.md +1 -1
  237. package/docs/generated/FLAG_LEXICON_BUDGETS.md +112 -112
  238. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +13 -4
  239. package/docs/performance/cli-transport-overhead.md +7 -7
  240. package/marketplace.json +1 -1
  241. package/package.json +1 -1
  242. package/packages/pm-beads/package.json +1 -1
  243. package/packages/pm-calendar/package.json +1 -1
  244. package/packages/pm-command-kit/README.md +5 -5
  245. package/packages/pm-command-kit/package.json +1 -1
  246. package/packages/pm-digital-twin/GAP_REPORT.md +16 -16
  247. package/packages/pm-digital-twin/package.json +1 -1
  248. package/packages/pm-governance-audit/package.json +1 -1
  249. package/packages/pm-guide-shell/package.json +1 -1
  250. package/packages/pm-kanban/README.md +1 -1
  251. package/packages/pm-kanban/package.json +1 -1
  252. package/packages/pm-lifecycle-hooks/package.json +1 -1
  253. package/packages/pm-linked-test-adapters/package.json +1 -1
  254. package/packages/pm-search-advanced/package.json +1 -1
  255. package/packages/pm-templates/package.json +1 -1
  256. package/packages/pm-todos/package.json +1 -1
  257. package/packages/pm-vcs/GAP_REPORT.md +1 -1
  258. package/packages/pm-vcs/package.json +1 -1
  259. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  260. package/plugins/pm-claude/README.md +6 -6
  261. package/plugins/pm-claude/package.json +1 -1
  262. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  263. package/plugins/pm-codex/package.json +1 -1
  264. package/plugins/pm-codex/plugin.json +1 -1
  265. package/runtime-dependencies.json +1 -1
  266. package/dist/cli-bundle/chunks/chunk-7ZEFHFAU.js +0 -2
  267. package/dist/cli-bundle/chunks/chunk-B6UTLYLM.js +0 -3
  268. package/dist/cli-bundle/chunks/chunk-HBKD5HZB.js +0 -2
  269. package/dist/cli-bundle/chunks/chunk-L6LCLC37.js +0 -2
  270. package/dist/cli-bundle/chunks/chunk-NR4KABHC.js +0 -31
  271. package/dist/cli-bundle/chunks/chunk-PWD5RY2D.js +0 -2
  272. package/dist/cli-bundle/chunks/chunk-XRMYA4R7.js +0 -20
  273. package/dist/cli-bundle/chunks/chunk-YWS4XV4I.js +0 -6
  274. package/dist/cli-bundle/chunks/chunk-ZOAJNPBL.js +0 -129
  275. package/dist/cli-bundle/chunks/item-transaction-ZHLJTBD7.js +0 -2
  276. package/dist/cli-bundle/chunks/mutation-admission-ZQMRMGIB.js +0 -2
  277. package/dist/cli-bundle/chunks/register-operations-G3QGGQ5Z.js +0 -2
  278. package/dist/cli-bundle/chunks/register-setup-LDXHMNOT.js +0 -2
  279. package/dist/cli-bundle/focused-chunks/chunk-3XGKBVJ3.js +0 -2
  280. package/dist/cli-bundle/focused-chunks/chunk-4HY6EGPB.js +0 -2
  281. package/dist/cli-bundle/focused-chunks/chunk-AK2CI2GI.js +0 -2
  282. package/dist/cli-bundle/focused-chunks/chunk-HUXZCPWT.js +0 -26
  283. package/dist/cli-bundle/focused-chunks/chunk-IKXJ57XA.js +0 -8
  284. package/dist/cli-bundle/focused-chunks/chunk-MOY6KZGJ.js +0 -44
  285. package/dist/cli-bundle/focused-chunks/chunk-PWUTFKSI.js +0 -2
  286. package/dist/cli-bundle/focused-chunks/chunk-PZRB7IXH.js +0 -91
  287. package/dist/cli-bundle/focused-chunks/chunk-WSYPVBKS.js +0 -80
  288. package/dist/cli-bundle/focused-chunks/chunk-WXLG7HZ5.js +0 -3
  289. package/dist/cli-bundle/focused-chunks/chunk-WZDFCVLX.js +0 -12
  290. package/dist/cli-bundle/focused-chunks/chunk-YGO3FWA2.js +0 -2
  291. package/dist/cli-bundle/focused-chunks/chunk-YVLAP3BL.js +0 -23
  292. package/dist/cli-bundle/focused-chunks/chunk-ZYXQACPB.js +0 -2
  293. package/dist/cli-bundle/focused-chunks/item-transaction-PZ2FQ6B2.js +0 -2
  294. package/dist/cli-bundle/focused-chunks/mutation-admission-XOOK6XFH.js +0 -2
package/docs/SDK.md CHANGED
@@ -107,19 +107,19 @@ Choose the narrowest stable entrypoint that owns the capability you need. This
107
107
  keeps package startup and memory proportional to its purpose while the aggregate
108
108
  barrel remains source-compatible:
109
109
 
110
- | Package export | Intended capability family |
111
- | ------------------------------------------- | -------------------------------------------------------------------------- |
112
- | `@unbrained/pm-cli/sdk/authoring` | Extension blueprints, builders, manifests, and package-author helpers |
113
- | `@unbrained/pm-cli/sdk/contracts` | Static CLI command/action contracts and expected-error protocol |
114
- | `@unbrained/pm-cli/sdk/core` | Broad item, schema, profile, transaction, and runtime primitives |
115
- | `@unbrained/pm-cli/sdk/governance` | Validation, health, garbage collection, and transaction cleanup |
116
- | `@unbrained/pm-cli/sdk/graph` | Relationship stores, graph assembly, traversal, analytics, and remediation |
117
- | `@unbrained/pm-cli/sdk/merge` | VCS-neutral tracker merge contracts |
118
- | `@unbrained/pm-cli/sdk/query` | List/search engines, filtering, pagination, and query rendering |
119
- | `@unbrained/pm-cli/sdk/runtime` | Embedded command execution and package runtime helpers |
120
- | `@unbrained/pm-cli/sdk/testing` | Package and extension assertion/invocation helpers |
121
- | `@unbrained/pm-cli/sdk/public-surface.json` | Published machine-readable SDK compatibility snapshot |
122
- | `@unbrained/pm-cli/sdk` | Compatibility aggregate containing every supported SDK export |
110
+ | Package export | Intended capability family |
111
+ |---|---|
112
+ | `@unbrained/pm-cli/sdk/authoring` | Extension blueprints, builders, manifests, and package-author helpers |
113
+ | `@unbrained/pm-cli/sdk/contracts` | Static CLI command/action contracts and expected-error protocol |
114
+ | `@unbrained/pm-cli/sdk/core` | Broad item, schema, profile, transaction, and runtime primitives |
115
+ | `@unbrained/pm-cli/sdk/governance` | Validation, health, garbage collection, and transaction cleanup |
116
+ | `@unbrained/pm-cli/sdk/graph` | Relationship stores, graph assembly, traversal, analytics, and remediation |
117
+ | `@unbrained/pm-cli/sdk/merge` | VCS-neutral tracker merge contracts |
118
+ | `@unbrained/pm-cli/sdk/query` | List/search engines, filtering, pagination, and query rendering |
119
+ | `@unbrained/pm-cli/sdk/runtime` | Embedded command execution and package runtime helpers |
120
+ | `@unbrained/pm-cli/sdk/testing` | Package and extension assertion/invocation helpers |
121
+ | `@unbrained/pm-cli/sdk/public-surface.json` | Published machine-readable SDK compatibility snapshot |
122
+ | `@unbrained/pm-cli/sdk` | Compatibility aggregate containing every supported SDK export |
123
123
 
124
124
  `@unbrained/pm-cli/cli` is the supported embeddable CLI entrypoint and exports
125
125
  only `runPmCli`. Repository tests import their internal seams from source; those
@@ -177,6 +177,13 @@ preflight refusal. An absent property gives no guarantee about writes; do not
177
177
  coerce it to `false` or treat an executed failure as safe to retry. Consumers
178
178
  that enumerate error keys should accept the additional optional property.
179
179
 
180
+ The telemetry consent update (pm-gh1660) records two conservative breaking
181
+ acknowledgements. `WriteSettingsOptions` gains optional `omitSections` and
182
+ `skipIfStored`; existing calls compile and behave unchanged. `ConfigResult.values`
183
+ becomes `Partial`, because project-scope `list` and `export` omit the global-only
184
+ `telemetry_tracking` key: treat that key as possibly absent, and read consent
185
+ from a global-scope export. No data migration or new dependency bounds are needed.
186
+
180
187
  Validation refusals for item status and priority carry producer-owned
181
188
  `code: "invalid_argument_value"` and `context.field`, `context.value` and
182
189
  `context.allowed`. The allowed spellings come from the active status schema or
@@ -228,7 +235,7 @@ entrypoint from [Import Surfaces](#import-surfaces) for direct primitives.
228
235
  Use these focused guides to choose the primitive and understand its policy:
229
236
 
230
237
  | Capability | Reference |
231
- | --- | --- |
238
+ |---|---|
232
239
  | Item lifecycle, schema, profiles and initialization | [Customization primitives](SDK_CUSTOMIZATION_PRIMITIVES.md), [Lifecycle](SDK_LIFECYCLE.md) |
233
240
  | History, whole-item input, transactions and previews | [Audited mutations](SDK_AUDITED_MUTATIONS.md), [Atomic transactions](#atomic-workspace-transactions), [Schema evolution](#schema-evolution-and-workspace-history) |
234
241
  | Context ranking, packing, memory and evaluation | [Context relevance](#context-relevance-and-evaluation), [Context coordination](SDK_CONTEXT_COORDINATION.md) |
@@ -1220,8 +1227,31 @@ SDK `create`, `update`, and `append` inputs are data: `"-"` remains text,
1220
1227
  file. This also applies to the corresponding `runCreate`, `runUpdate`,
1221
1228
  `runAppend` operations and update-many mutation values. Normal field validation,
1222
1229
  whitespace handling, structured collection syntax, and project schemas still
1223
- apply. Clear fields explicitly with `unset: ["assignee"]` or the declared
1224
- `clear*` collection options; JavaScript `null` is not an unset directive.
1230
+ apply. Clear a scalar field with `unset: ["assignee"]`, or pass JavaScript
1231
+ `null` for any option the command's `unset` list covers: `{ parent: null }` is
1232
+ `unset: ["parent"]`, and `tags: null` clears the tags (`tags` takes a CSV string,
1233
+ not an array, and has no `clearTags`).
1234
+ The nullable keys are exactly the unset table's option keys
1235
+ (`CreateNullClearableOptionKey`, `UpdateNullClearableOptionKey`). `rank` is only
1236
+ an unset alias of `order`, so `rank: null` is refused (pass `order: null`), and
1237
+ create accepts `unset: ["author"]` but refuses `author: null`. `null` on any
1238
+ other option (`title`, `author`, collection options such as `comment` or `dep`)
1239
+ refuses by name; clear collections with their `clear*` options. When typed input
1240
+ stores a former clear sentinel (`"none"`, `"null"` or `"-"`) in a clearable
1241
+ field, the result warns `literal_sentinel_stored:<field>:<value>`: the value is
1242
+ now data (an assignee called `none`). The advisory appears only while the
1243
+ document pm committed and recorded in history still holds the value, so an
1244
+ `item_store_write` override that rewrites stored contents can drop it from
1245
+ storage while the advisory still reports it. Typed SDK and MCP refusals name the
1246
+ option key and the `unset` remedy both accept, for example `parent must not be
1247
+ the placeholder "none". Pass unset: ["parent"] to clear it, or omit parent.`;
1248
+ CLI refusals keep their flag wording. `PmCreateActionOptions`,
1249
+ `PmUpdateActionOptions`, `CreateOperationOptions` and `UpdateOperationOptions`
1250
+ type the clearable fields as nullable, so `runCreate`/`runUpdate` accept the
1251
+ same input as `PmClient.create`/`update`. A direct SDK `runUpdateMany` folds a
1252
+ null in its update record like `runUpdate`, but `runAction("update-many")` drops
1253
+ it (pm-w7clh6), so `PmUpdateManyActionOptions` stays non-nullable: use `unset`
1254
+ there and in MCP tools.
1225
1255
  CLI adapters retain `--description -`, append stdin, file flags, and legacy
1226
1256
  clear-token compatibility. Values inside CLI `--stdin-json` documents are
1227
1257
  literal data, including `"none"` and `"null"`. Explicit CLI flags override
@@ -1236,7 +1266,7 @@ For example, `estimatedMinutes` requires `"45"`, while `priority` accepts a
1236
1266
  string or finite number. JavaScript and JSON bridge callers must correct invalid
1237
1267
  types instead of relying on coercion. Integrations that previously used `"-"`
1238
1268
  to request stdin should read that input themselves and pass the resulting text;
1239
- integrations that used `"none"` to clear must migrate to `unset`.
1269
+ integrations that used `"none"` to clear must migrate to `unset` or `null`.
1240
1270
  Direct `runCreate`/`runUpdate` calls require the declared string arrays for
1241
1271
  repeatable fields. Generic action dispatch retains its documented scalar-to-array
1242
1272
  normalization before invoking those operations.
@@ -1307,8 +1337,21 @@ atomic evidence-backed completion tracked by
1307
1337
  commands that must coordinate several SDK mutations. A plan supplies a stable
1308
1338
  transaction id plus ordered steps. Each step can inspect its durable state,
1309
1339
  apply an idempotent forward mutation, and append an idempotent compensation.
1310
- The coordinator serializes transaction writers with one workspace lock and
1340
+ The coordinator serializes transaction coordinators with one workspace lock and
1311
1341
  persists `.agents/pm/transactions/sdk/<transaction-id>.json` after every step.
1342
+ That lock does not exclude ordinary writers ([GH-1620](https://github.com/unbraind/pm-cli/issues/1620)):
1343
+ `update`, `close`, `pm comments --add` and every other SDK, CLI or MCP mutation
1344
+ take per-item locks, so a peer can commit between a step's `inspect()` and
1345
+ `apply()`. A step that decides from what it read guards its write with an
1346
+ [expected item revision](#expected-item-revisions): in `inspect()`, take both
1347
+ the decision data and `item_hash` from one `get()`, then run the write inside
1348
+ `withExpectedItemRevisions()`. The
1349
+ write then refuses with `item_revision_conflict` instead of overwriting the
1350
+ peer's change, and the transaction compensates. The coordinator invokes
1351
+ `compensate()`, including during recovery, without an expected revision.
1352
+ Built-in item compensations detect intervening writes. A custom adapter must
1353
+ fence or reconcile its own compensation, or it can restore a stale value over a
1354
+ peer's write.
1312
1355
  Before invoking a pending step, it also persists that step's durable ownership
1313
1356
  marker. Recovery and compensation therefore distinguish mutations begun by
1314
1357
  this transaction from matching domain state that existed before the attempt.
@@ -1348,6 +1391,108 @@ failures and the journal keeps recovery data. Repeated compensation recognizes
1348
1391
  its durable marker even when a peer adds context afterward. Legacy timestamp
1349
1392
  receipts remain supported, with ambiguous partial effects refused.
1350
1393
 
1394
+ ### Expected item revisions
1395
+
1396
+ Expected-revision preconditions are tracked by
1397
+ [pm-gh1576](../.agents/pm/features/pm-gh1576.toon).
1398
+
1399
+ Read-decide-write agents and packages guard a write with the revision their
1400
+ decision was based on. Every current `pm get` / `PmClient.get` read reports
1401
+ `item_hash`, the SHA-256 of the canonical item document and the same value as
1402
+ the item's latest history `after_hash` (a field-projected read includes it only
1403
+ when the selection names the bare `item_hash`, for example `--fields title,tags,item_hash`;
1404
+ the item-qualified `item.item_hash` still projects a custom metadata field of that name).
1405
+ `readItemRevision(id)` returns it alone. Take the hash from the same read your
1406
+ decision uses: a separate read could observe a newer revision than the data you
1407
+ decided on. Run the write inside `withExpectedItemRevisions`:
1408
+
1409
+ ```ts
1410
+ import { PmClient, isItemRevisionConflict } from "@unbrained/pm-cli/sdk";
1411
+
1412
+ const pm = new PmClient({ pmRoot });
1413
+ // Decide from the same read that reports the revision, never from a separate one.
1414
+ const read = await pm.get(id);
1415
+ const reason = `Delivered by ${read.item.tags?.find((tag) => tag.startsWith("delivery-pr:"))}`;
1416
+ try {
1417
+ const { result, unchecked } = await pm.withExpectedItemRevisions(
1418
+ [{ id, itemHash: read.item_hash! }],
1419
+ () => pm.close(id, reason),
1420
+ );
1421
+ } catch (error) {
1422
+ if (!isItemRevisionConflict(error)) throw error;
1423
+ // error.context.current_revision and error.context.details.changes_since
1424
+ // describe what changed; re-read, decide again, retry with the new hash.
1425
+ }
1426
+ ```
1427
+
1428
+ The check runs inside the locked item store, after the item lock is held and
1429
+ before that write. It therefore covers every item write the wrapped
1430
+ operation makes: lifecycle commands, annotations, linked files/docs/tests,
1431
+ dependency edits, `restore`, `delete`, history maintenance (`history-redact`,
1432
+ `history-repair`, `history-compact`, checked under the stream lock), bulk
1433
+ transactions and extension commands that mutate through the SDK. A `delete`
1434
+ advances the expectation to the item's absent (tombstone) revision, and a
1435
+ `restore` of a deleted item is judged under its own id, so a peer deletion
1436
+ between the read and the restore refuses instead of being resurrected over. A mismatch refuses that write with `item_revision_conflict`
1437
+ (exit 4); writes the operation already committed stay durable. The refusal carries `item_id`, `expected_revision`,
1438
+ `current_revision` and `details` with `changes_since`, the newest
1439
+ 10 history entries after the declared revision
1440
+ (`op`, `author`, `ts`, top-level `fields`), plus `changes_since_omitted`.
1441
+ `expected_revision_recorded: false` means no history entry ever had that hash.
1442
+ After one of the operation's own writes commits, the expectation advances to
1443
+ that revision, so a multi-write composition such as `claim --start` does not
1444
+ refuse itself; an interleaved peer write still refuses the next step. The
1445
+ result lists `checked` ids and `unchecked` ids that the operation never wrote:
1446
+ an unchecked expectation proved nothing. Expectations bind to the item's embedded id, so every
1447
+ spelling that locates the item (a short id, or a case variant on a
1448
+ case-insensitive filesystem) is guarded. The scope is shared process-wide across the
1449
+ published SDK entrypoints (`/sdk`, `/sdk/core`, ...), and
1450
+ `isItemRevisionConflict` checks the refusal structurally, so mixing entrypoints
1451
+ neither drops a guard nor hides its conflict. Trackers are compared by physical
1452
+ path (`realpath`), so a symlinked spelling of the same tracker is guarded too. `PmClient.readItemRevision` and
1453
+ `PmClient.withExpectedItemRevisions` resolve targets inside the client's
1454
+ extension context, so extension item types bind exactly as `get` reads them,
1455
+ then run the operation outside it, so its own actions (extension commands
1456
+ included) activate and dispatch normally. The standalone `readItemRevision` /
1457
+ `withExpectedItemRevisions` functions use the registrations already active in
1458
+ the calling context. A deleted item with retained history binds too: its
1459
+ revision is the empty tombstone its `delete` recorded (the delete entry's
1460
+ `after_hash`), so a guarded `restore` or history maintenance of a deleted item
1461
+ can declare it. Bulk `update-many`
1462
+ and `close-many` keep their partial-success semantics: a stale row fails with
1463
+ `error_code: "item_revision_conflict"` plus its `expected_revision`,
1464
+ `current_revision` and the same `details` (`changes_since`,
1465
+ `changes_since_omitted`) a single-item refusal carries, while fresh rows
1466
+ proceed. The exported `ItemRevisionConflictRowFields` type declares those row
1467
+ fields; `HistoryCompactBulkItemResult` and `HistoryRepairAllStreamResult` extend
1468
+ it. When an `item_store_write` or `item_store_delete` override transforms,
1469
+ redirects or skips a guarded write, the scope advances to the revision read back
1470
+ from storage under the item lock: its own next write is admitted, a competing
1471
+ one refuses. If the item cannot be read back, or its embedded id was rewritten,
1472
+ the next guarded write refuses (fail closed). When a peer writes while `restore` or history maintenance waits for
1473
+ its lock, a declared revision turns the generic drift refusal into this typed
1474
+ conflict. Linked-test result recording (`test --run`, `test-all` with
1475
+ `test_result_tracking` enabled) stays best-effort, except that a stale declared
1476
+ revision refuses with `item_revision_conflict` instead of a warning. A guard cannot reach a `--background` test worker,
1477
+ which runs in another process, so `test`/`test-all --background` with an
1478
+ expected revision refuses with `expect_hash_background_unsupported`. Only the CLI invocation scope reads `GlobalOptions.expectHash`;
1479
+ direct `run*` SDK calls ignore it, so guard SDK writes with the functions above
1480
+ or `runAction`/MCP `expectHash`.
1481
+
1482
+ Transports use the same grammar. The CLI's global `--expect-hash <item_hash>`
1483
+ binds to the command's `<id>`; `--expect-hash <id>=<item_hash>` (repeatable or
1484
+ comma-separated) names targets explicitly and is required for bulk commands.
1485
+ MCP tools and `PmClient.run` accept `expectHash` (string or string array) on
1486
+ every item-writing action, at the top level or inside `options`; either
1487
+ placement is enforced. A native read action refuses the flag with
1488
+ `expect_hash_requires_mutation`, and a malformed, supplied-but-empty or `null`
1489
+ value (for example an unset shell variable) refuses with `expect_hash_invalid`
1490
+ rather than silently dropping the guard. An expectation no write reached is reported as the
1491
+ warning `expect_hash_unchecked:<id>:no_locked_write_reached_this_item`. This
1492
+ precondition guards the gap between an agent's read and its write; lease
1493
+ fencing ([pm-gh1549](../.agents/pm/issues/pm-gh1549.toon)) still guards the
1494
+ write itself against lock takeover, and the two compose.
1495
+
1351
1496
  ### Schema evolution and workspace history
1352
1497
 
1353
1498
  Tracked by [pm-dijg](../.agents/pm/features/pm-dijg.toon) and
@@ -2559,25 +2704,25 @@ For provider-safe schemas, use `PM_PROVIDER_TOOL_PARAMETERS_SCHEMA`. It is flat
2559
2704
 
2560
2705
  ## Capability Requirements
2561
2706
 
2562
- | Registration | Manifest capability |
2563
- | ---------------------------- | ------------------- |
2564
- | `registerCommand` | `commands` |
2565
- | inline command flags | `schema` |
2566
- | `registerFlags` | `schema` |
2567
- | `registerItemFields` | `schema` |
2568
- | `registerItemTypes` | `schema` |
2569
- | `registerRelationshipKinds` | `schema` |
2570
- | `registerMigration` | `schema` |
2571
- | `registerProfile` | `schema` |
2572
- | `registerImporter` | `importers` |
2573
- | `registerExporter` | `importers` |
2574
- | `registerParser` | `parser` |
2575
- | `registerPreflight` | `preflight` |
2576
- | `registerService` | `services` |
2577
- | `registerRenderer` | `renderers` |
2578
- | lifecycle hooks | `hooks` |
2579
- | `registerSearchProvider` | `search` |
2580
- | `registerVectorStoreAdapter` | `search` |
2707
+ | Registration | Manifest capability |
2708
+ |---|---|
2709
+ | `registerCommand` | `commands` |
2710
+ | inline command flags | `schema` |
2711
+ | `registerFlags` | `schema` |
2712
+ | `registerItemFields` | `schema` |
2713
+ | `registerItemTypes` | `schema` |
2714
+ | `registerRelationshipKinds` | `schema` |
2715
+ | `registerMigration` | `schema` |
2716
+ | `registerProfile` | `schema` |
2717
+ | `registerImporter` | `importers` |
2718
+ | `registerExporter` | `importers` |
2719
+ | `registerParser` | `parser` |
2720
+ | `registerPreflight` | `preflight` |
2721
+ | `registerService` | `services` |
2722
+ | `registerRenderer` | `renderers` |
2723
+ | lifecycle hooks | `hooks` |
2724
+ | `registerSearchProvider` | `search` |
2725
+ | `registerVectorStoreAdapter` | `search` |
2581
2726
 
2582
2727
  Some override surfaces are single-winner: command overrides, parser overrides,
2583
2728
  preflight overrides, and output renderers. Preflight overrides can declare
@@ -3608,7 +3753,7 @@ const report = assertExtensionPreflight(blueprint, {
3608
3753
  When a custom harness needs individual registries, use this ownership map:
3609
3754
 
3610
3755
  | Surface | Registry from `activateExtensionForTest` | Assertion / invocation |
3611
- | --- | --- | --- |
3756
+ |---|---|---|
3612
3757
  | Commands, schema types/fields, migrations, importers/exporters, search/vector providers | `registrations` | `assertRegisteredCommandContract`, corresponding `assertRegistered*` |
3613
3758
  | Command overrides | `commands` | `assertRegisteredCommandOverride`, `runRegisteredCommandOverrideForTest` |
3614
3759
  | Parser overrides | `parsers` | `assertRegisteredParserOverride`, `runRegisteredParserOverrideForTest` |
@@ -49,7 +49,7 @@ description.
49
49
  ## Channel behavior
50
50
 
51
51
  | Artifact channel | Default receipt | stdout | stderr |
52
- | --- | --- | --- | --- |
52
+ |---|---|---|---|
53
53
  | `stdout` | `suppress` | Artifact bytes only | Extension-owned diagnostics or summary |
54
54
  | `file` | `render` | Bounded structured receipt | Extension-owned diagnostics |
55
55
 
@@ -35,7 +35,7 @@ inline tracker-not-initialized message anywhere under `src/sdk`.
35
35
  ## Promotion Partition
36
36
 
37
37
  | Promotion item | Primitive family | Primary private domains to promote |
38
- | --- | --- | --- |
38
+ |---|---|---|
39
39
  | [pm-98cz](../.agents/pm/features/pm-98cz.toon) | Item lifecycle | `core/item`, `core/store`, `core/lock`, mutation checkpoints |
40
40
  | [pm-rjqr](../.agents/pm/features/pm-rjqr.toon) | Query and read | `core/search`, read projections, context/next/list/get aggregation |
41
41
  | [pm-zwpp](../.agents/pm/features/pm-zwpp.toon) | Annotations and links | comments, notes, learnings, files, docs, deps, append metadata |
@@ -48,7 +48,7 @@ inline tracker-not-initialized message anywhere under `src/sdk`.
48
48
  ## Command Family Map
49
49
 
50
50
  | CLI/MCP source family | SDK destination | Notes |
51
- | --- | --- | --- |
51
+ |---|---|---|
52
52
  | `create`, `update`, `update-many`, `copy`, `delete`, `restore` | [pm-98cz](../.agents/pm/features/pm-98cz.toon) | Item CRUD and replay paths should become typed lifecycle SDK calls. |
53
53
  | `claim`, `release`, `focus`, lifecycle shortcut helpers | [pm-98cz](../.agents/pm/features/pm-98cz.toon) | Ownership and actionable-state changes belong beside lifecycle primitives. |
54
54
  | `list`, `get`, `search`, `context`, `next`, `aggregate`, `stats` | [pm-rjqr](../.agents/pm/features/pm-rjqr.toon) | `list` and `search` implementations now live under `src/sdk/query/**`; remaining read models should follow the same SDK-owned pattern. |
@@ -17,13 +17,13 @@ Use `pm contracts --summary --json` for the bounded bootstrap and `pm contracts
17
17
 
18
18
  The read primitives accept `--for <intent>`:
19
19
 
20
- | Command | Built-in intent | Purpose |
21
- | ----------------------- | ------------------- | ------------------------------------------------ |
22
- | `context` | `orient`, `handoff` | Active hierarchy or continuation context |
23
- | `get` | `inspect` | Complete item lifecycle and relationship context |
24
- | `list` and list aliases | `triage` | Compact governance and ownership fields |
25
- | `next` | `execute` | One actionable recommendation |
26
- | `search` | `discover` | Ranked canonical-lineage candidates |
20
+ | Command | Built-in intent | Purpose |
21
+ |---|---|---|
22
+ | `context` | `orient`, `handoff` | Active hierarchy or continuation context |
23
+ | `get` | `inspect` | Complete item lifecycle and relationship context |
24
+ | `list` and list aliases | `triage` | Compact governance and ownership fields |
25
+ | `next` | `execute` | One actionable recommendation |
26
+ | `search` | `discover` | Ranked canonical-lineage candidates |
27
27
 
28
28
  Explicit projection and token flags win over intent defaults:
29
29
 
package/docs/TESTING.md CHANGED
@@ -280,7 +280,7 @@ required CI asks for as few runners as the proofs allow
280
280
  ([pm-m6ig79](../.agents/pm/issues/pm-m6ig79.toon)):
281
281
 
282
282
  | Job | Runs |
283
- | --- | --- |
283
+ |---|---|
284
284
  | `Build foundation (Ubuntu, Node 24)` | Build, `dist` artifact, packed tarball. |
285
285
  | `Packed runtime (<os>)` × 3 | Packed first run on Node 22.18.0 and 24 in isolated prefixes, dist version smoke; Ubuntu adds the Node 22 telemetry and snapshot regressions, macOS the native shell and portability checks, Windows the full npm npx and Bun bunx acceptance. |
286
286
  | `Gates (static)` | Typecheck, version, changelog, secret scan, `pnpm lint` (`quality:static`), package artifact, token budgets, tracker merge-safety and assurance gates. |
@@ -40,7 +40,7 @@ match the destination; other selectors inspect both snapshots so a mutation cann
40
40
  escape a protected scope by removing its tag or changing its type.
41
41
 
42
42
  | Rule kind | Required properties | Behavior |
43
- | --- | --- | --- |
43
+ |---|---|---|
44
44
  | `require_fields` | `fields` | Checks evidence on lifecycle, scope, or required-field changes |
45
45
  | `transition` | `allowed` | Allows listed `[from, to]` status pairs; `$create` and `$delete` represent absent records |
46
46
  | `authors` | `authors` | Requires a listed mutation actor |
@@ -153,7 +153,7 @@ violated. It does not establish that a project declared any requirements.
153
153
  The receipt exposes these independent measurements even in counts mode:
154
154
 
155
155
  | Field | Meaning |
156
- | --- | --- |
156
+ |---|---|
157
157
  | `declared_requirement_count` | Number of `require_fields` declarations, including operation-specific ones |
158
158
  | `state_requirement_count` | Number eligible for a state scan, without operation selectors |
159
159
  | `applicable_requirement_count` | Distinct requirements that matched at least one supplied item |
@@ -69,14 +69,14 @@ tokenized recovery actions.
69
69
 
70
70
  Recovery precedence is intentional:
71
71
 
72
- | State | Next action | Why it comes first |
73
- | ------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------- |
74
- | `merge_evidence_invalid` | `pm merge report` | Untrusted evidence must be inspected before it can drive repair. |
75
- | `history_evidence_invalid` | `pm validate --check-history-drift --full` | Required history evidence could not be interpreted safely. |
76
- | `merge_reconciliation_required` | `pm merge reconcile` | Pending scalar decisions can explain and settle merge-created divergence. |
77
- | `history_repair_required` | `pm history-repair --all` | Remaining append-only drift needs an audited re-anchor. |
78
- | `merge_fence_unprepared` | `pm merge install` | The committed fence or clone-local drivers are absent or drifted. |
79
- | `ready` | none | All included readiness predicates passed. |
72
+ | State | Next action | Why it comes first |
73
+ |---|---|---|
74
+ | `merge_evidence_invalid` | `pm merge report` | Untrusted evidence must be inspected before it can drive repair. |
75
+ | `history_evidence_invalid` | `pm validate --check-history-drift --full` | Required history evidence could not be interpreted safely. |
76
+ | `merge_reconciliation_required` | `pm merge reconcile` | Pending scalar decisions can explain and settle merge-created divergence. |
77
+ | `history_repair_required` | `pm history-repair --all` | Remaining append-only drift needs an audited re-anchor. |
78
+ | `merge_fence_unprepared` | `pm merge install` | The committed fence or clone-local drivers are absent or drifted. |
79
+ | `ready` | none | All included readiness predicates passed. |
80
80
 
81
81
  `pm health --strict-exit` also treats missing clone-local merge drivers as blocking. Default health remains advisory for never-installed drivers so ordinary diagnostics retain backward compatibility.
82
82
 
@@ -1 +1 @@
1
- {"version":5,"transcript_version":2,"transcript_digest":"sha256:b4b151f3d36860e73cd535d0520e9f03b4ecec4444ee81a8b868896b5b0bba47","estimator":"ceil(utf8_bytes / 4)","comparison_scope":"plan_recovery_tracker_root_canonicalized","measurement_scope":"output_before_token_accounting","published_with_release":true,"orientation":{"canonical_task_id":"orientation-context-intent","required_capabilities":["actionable_work","active_ownership","workspace_state"],"measured_winner_tokens":1051,"protocols":[{"task_id":"orientation-context-intent","command_count":1,"estimated_tokens":1051,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"context","field_path":"hierarchy"}],"active_ownership":[{"step_id":"context","field_path":"activity"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-operating-rules","command_count":4,"estimated_tokens":2067,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"open","field_path":"items"}],"active_ownership":[{"step_id":"in-progress","field_path":"items"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-contracts-next","command_count":2,"estimated_tokens":5213,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"next","field_path":"recommended.id"}],"active_ownership":[{"step_id":"next","field_path":"held_by_others"}],"workspace_state":[{"step_id":"next","field_path":"summary.in_progress"}]}}]},"tasks":[{"id":"orientation-context-intent","max_estimated_tokens":1051,"steps":[{"id":"context","max_estimated_tokens":1051,"accounting_mode":"self_reported"}]},{"id":"orientation-contracts-next","max_estimated_tokens":5213,"steps":[{"id":"contracts","max_estimated_tokens":4481,"accounting_mode":"self_reported"},{"id":"next","max_estimated_tokens":732,"accounting_mode":"self_reported"}]},{"id":"orientation-operating-rules","max_estimated_tokens":2067,"steps":[{"id":"context","max_estimated_tokens":1015,"accounting_mode":"self_reported"},{"id":"search","max_estimated_tokens":164,"accounting_mode":"self_reported"},{"id":"open","max_estimated_tokens":712,"accounting_mode":"self_reported"},{"id":"in-progress","max_estimated_tokens":176,"accounting_mode":"self_reported"}]},{"id":"context-bootstrap","max_estimated_tokens":2005,"steps":[{"id":"triage","max_estimated_tokens":619,"accounting_mode":"self_reported"},{"id":"orient","max_estimated_tokens":1015,"accounting_mode":"self_reported"},{"id":"inspect","max_estimated_tokens":371,"accounting_mode":"self_reported"}]},{"id":"closed-domain-recovery","max_estimated_tokens":630,"steps":[{"id":"refuse-intent","max_estimated_tokens":259,"accounting_mode":"self_reported"},{"id":"retry-intent","max_estimated_tokens":371,"accounting_mode":"self_reported"}]},{"id":"unknown-option-recovery","max_estimated_tokens":596,"steps":[{"id":"refuse-option","max_estimated_tokens":433,"accounting_mode":"self_reported"},{"id":"retry-option","max_estimated_tokens":163,"accounting_mode":"self_reported"}]},{"id":"lifecycle-mutation","max_estimated_tokens":873,"steps":[{"id":"create","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"inspect-open","max_estimated_tokens":363,"accounting_mode":"self_reported"},{"id":"close","max_estimated_tokens":92,"accounting_mode":"self_reported"},{"id":"inspect-closed","max_estimated_tokens":398,"accounting_mode":"self_reported"}]},{"id":"bulk-effect-outcomes","max_estimated_tokens":392,"steps":[{"id":"create-bulk-target","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"partial-effect","max_estimated_tokens":240,"accounting_mode":"self_reported"},{"id":"no-effect","max_estimated_tokens":132,"accounting_mode":"self_reported"}]},{"id":"plan-execution-mutations","max_estimated_tokens":806,"steps":[{"id":"create-plan","max_estimated_tokens":21,"accounting_mode":"self_reported"},{"id":"add-step","max_estimated_tokens":254,"accounting_mode":"self_reported"},{"id":"complete-step","max_estimated_tokens":253,"accounting_mode":"self_reported"},{"id":"inspect-plan","max_estimated_tokens":278,"accounting_mode":"self_reported"}]}],"composite_max_estimated_tokens":13633}
1
+ {"version":5,"transcript_version":2,"transcript_digest":"sha256:b4b151f3d36860e73cd535d0520e9f03b4ecec4444ee81a8b868896b5b0bba47","estimator":"ceil(utf8_bytes / 4)","comparison_scope":"plan_recovery_tracker_root_canonicalized","measurement_scope":"output_before_token_accounting","published_with_release":true,"orientation":{"canonical_task_id":"orientation-context-intent","required_capabilities":["actionable_work","active_ownership","workspace_state"],"measured_winner_tokens":1051,"protocols":[{"task_id":"orientation-context-intent","command_count":1,"estimated_tokens":1051,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"context","field_path":"hierarchy"}],"active_ownership":[{"step_id":"context","field_path":"activity"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-operating-rules","command_count":4,"estimated_tokens":2067,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"open","field_path":"items"}],"active_ownership":[{"step_id":"in-progress","field_path":"items"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-contracts-next","command_count":2,"estimated_tokens":5213,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"next","field_path":"recommended.id"}],"active_ownership":[{"step_id":"next","field_path":"held_by_others"}],"workspace_state":[{"step_id":"next","field_path":"summary.in_progress"}]}}]},"tasks":[{"id":"orientation-context-intent","max_estimated_tokens":1051,"steps":[{"id":"context","max_estimated_tokens":1051,"accounting_mode":"self_reported"}]},{"id":"orientation-contracts-next","max_estimated_tokens":5213,"steps":[{"id":"contracts","max_estimated_tokens":4481,"accounting_mode":"self_reported"},{"id":"next","max_estimated_tokens":732,"accounting_mode":"self_reported"}]},{"id":"orientation-operating-rules","max_estimated_tokens":2067,"steps":[{"id":"context","max_estimated_tokens":1015,"accounting_mode":"self_reported"},{"id":"search","max_estimated_tokens":164,"accounting_mode":"self_reported"},{"id":"open","max_estimated_tokens":712,"accounting_mode":"self_reported"},{"id":"in-progress","max_estimated_tokens":176,"accounting_mode":"self_reported"}]},{"id":"context-bootstrap","max_estimated_tokens":2025,"steps":[{"id":"triage","max_estimated_tokens":619,"accounting_mode":"self_reported"},{"id":"orient","max_estimated_tokens":1015,"accounting_mode":"self_reported"},{"id":"inspect","max_estimated_tokens":391,"accounting_mode":"self_reported"}]},{"id":"closed-domain-recovery","max_estimated_tokens":650,"steps":[{"id":"refuse-intent","max_estimated_tokens":259,"accounting_mode":"self_reported"},{"id":"retry-intent","max_estimated_tokens":391,"accounting_mode":"self_reported"}]},{"id":"unknown-option-recovery","max_estimated_tokens":596,"steps":[{"id":"refuse-option","max_estimated_tokens":433,"accounting_mode":"self_reported"},{"id":"retry-option","max_estimated_tokens":163,"accounting_mode":"self_reported"}]},{"id":"lifecycle-mutation","max_estimated_tokens":915,"steps":[{"id":"create","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"inspect-open","max_estimated_tokens":384,"accounting_mode":"self_reported"},{"id":"close","max_estimated_tokens":92,"accounting_mode":"self_reported"},{"id":"inspect-closed","max_estimated_tokens":419,"accounting_mode":"self_reported"}]},{"id":"bulk-effect-outcomes","max_estimated_tokens":392,"steps":[{"id":"create-bulk-target","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"partial-effect","max_estimated_tokens":240,"accounting_mode":"self_reported"},{"id":"no-effect","max_estimated_tokens":132,"accounting_mode":"self_reported"}]},{"id":"plan-execution-mutations","max_estimated_tokens":806,"steps":[{"id":"create-plan","max_estimated_tokens":21,"accounting_mode":"self_reported"},{"id":"add-step","max_estimated_tokens":254,"accounting_mode":"self_reported"},{"id":"complete-step","max_estimated_tokens":253,"accounting_mode":"self_reported"},{"id":"inspect-plan","max_estimated_tokens":278,"accounting_mode":"self_reported"}]}],"composite_max_estimated_tokens":13715}
@@ -5,7 +5,7 @@ Tracker: `pm-kxci8x`.
5
5
  This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it manually.
6
6
 
7
7
  | Capability family | Commands |
8
- | --- | --- |
8
+ |---|---|
9
9
  | workspace | `workspace init`, `workspace config`, `workspace merge`, `workspace schema`, `workspace profile`, `ops telemetry`, `ops health`, `ops gc`, `workspace` |
10
10
  | intake | `create`, `item`, `item copy`, `context focus`, `history restore` |
11
11
  | context | `list`, `aggregate`, `context`, `get`, `search`, `item duplicates`, `ops eval`, `context next`, `history activity`, `ops stats`, `help` |
@@ -3,7 +3,7 @@
3
3
  This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it manually.
4
4
 
5
5
  | Command | Minimum visibility tier | Capability family |
6
- | --- | --- | --- |
6
+ |---|---|---|
7
7
  | `init` | core | workspace |
8
8
  | `workspace init` | core | workspace |
9
9
  | `config` | standard | workspace |