@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
@@ -124,54 +124,54 @@ tests compare complete history bytes while the unrelated tracker's claims change
124
124
 
125
125
  ## Token-Minimal Retrieval
126
126
 
127
- | Need | Command |
128
- | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
129
- | The single next action + why | `pm next` (concrete ready leaves first; completed-container closeout rows surface only when no leaf work is ready; `--ready-only` for the tightest output) |
130
- | Next ready work in one epic | `pm next --parent <id>` |
131
- | Canonical cold-start orientation | `pm context --for orient` (1,055 estimated tokens on the fixed 101-item replay corpus) |
132
- | Next work and agenda | `pm context --limit 10` |
133
- | Comprehensive whole-tracker snapshot | `pm context --depth full` (every section, no per-section row cap) |
134
- | Status of one epic/subtree | `pm context --parent <id> --depth deep` |
135
- | Relevant items | `pm search "<keywords>" --limit 10` (keyword hits are score-ranked; keyword mode defaults to 50 results, `result.total` reports the full pre-limit count) |
136
- | Require every query token | `pm search "<keywords>" --match-mode and` (hard-filter; `exact` = contiguous phrase; default `or` adds an all-terms ranking bonus) |
137
- | Just the match count | `pm search "<keywords>" --count` (no hit rows; `count`/`total` carry the matched total) |
138
- | Per-query score threshold | `pm search "<keywords>" --min-score 5` (overrides settings `search.score_threshold` for this query) |
139
- | Every matched row (no cap) | `pm list --all --no-truncate --brief` (`result.total` reports the full count when a `--limit`/`--offset` truncates) |
140
- | Item bodies in bulk (one call) | `pm list --status open --json --include-body` (avoids one `pm get` per item) |
141
- | Open work only | `pm search "<keywords>" --status open` (drops closed-history noise; did-you-mean on typos) |
142
- | Scope search like list | `pm search "<keywords>" --type Task --assignee <name> --parent <id>` (full `pm list` filter parity) |
143
- | Items changed since last window | `pm list --all --updated-after <prev-run-ISO> --brief` (relative `-2h`/`-7d` also work) |
144
- | Open items changed today | `pm list --status open --today --brief` (local-midnight shorthand; mutually exclusive with `--updated-after`) |
145
- | Items changed recently | `pm list --all --recent --brief` (last seven days; mutually exclusive with `--updated-after`) |
146
- | Single item | `pm get <id>` |
147
- | Full machine payload | `pm get <id> --full --json` |
148
- | Command flags | `pm <command> --help --json` |
149
- | Command intent map | `pm contracts --summary --json` (one command plus terse intent per row; use before command-scoped contracts) |
150
- | Low-noise machine contracts | `pm contracts --command <command> --flags-only --json` |
151
- | Semantic index refresh | `pm reindex --mode semantic --progress` (stale-first by default; add `--full` to force full rebuild; requires the `search-advanced` package) |
152
- | Timeline | `pm activity --id <id> --limit 20` |
153
- | Audited history redaction | `pm history-redact <id> --literal "<secret>" --replacement "[redacted]" --dry-run` |
154
- | Audited history re-anchor | `pm history-repair <id> --dry-run` (clears drift flagged by `pm health`/`pm validate`) |
155
- | Register custom item type | `pm schema add-type <Name> --description "<text>" --default-status open` (then `pm create <Name> "..."`) |
156
- | Remove custom item type | `pm schema remove-type <Name>` (warns if items still use it; built-ins refused) |
157
- | Register custom status | `pm schema add-status <id> --role <active\|terminal\|...> --alias <name> --order <n>` |
158
- | Remove custom status | `pm schema remove-status <id>` (warns if items use it; built-in statuses refused) |
159
- | Agent plan create | `pm plan create --title "<scope>" --harness claude-code --scope "<short>" --claim` |
160
- | Agent plan create with steps | `pm plan create --title "<scope>" --step "<step 1>" --step "<step 2>" --step "<step 3>"` (repeated `--step` seeds ordered steps) |
161
- | Agent plan step update | `pm plan update-step <plan-id> plan-step-001 --step-status in_progress --step-evidence "<short>"` |
162
- | Agent plan read | `pm plan show <plan-id> --depth brief` (or `--fields id,title,steps_summary`) |
163
- | Materialize plan steps | `pm plan materialize <plan-id> --steps plan-step-002 --materialize-type Task` |
164
- | Dependencies | `pm deps <id> --format tree` |
165
- | Graph queries | `pm graph successors <id> --limit 20` (also `ancestors`, `paths`, `impact`, `analyze`, `audit`, `communities`, `redundancy`, `dominators`, `plan`) |
166
- | Bulk update by id allowlist | `pm update-many --ids pm-a,pm-b --priority 1 --dry-run` (preview, then drop `--dry-run`) |
167
- | Audited bulk close (sprint closeout) | `pm close-many --filter-sprint <s> --reason "<text>" --dry-run` (full `pm close` semantics per item; `--rollback <id>` to undo) |
168
- | Local docs routing | `pm install guide-shell --project`, then `pm guide <topic>` |
169
- | Compact mutation echo | `pm --no-changed-fields create "..."` (drops the redundant `changed_fields` array, keeps `changed_field_count`) |
170
- | Minimal mutation echo | `pm --id-only create "..."` (prints only id and status for single-item mutations) |
171
- | Duplicate close | `pm close <duplicate> --duplicate-of <canonical>` (or `-d <canonical>`) |
172
- | Long body from a file | `pm create <Type> "<title>" --body-file ./spec.md` (also on `pm update`; mutually exclusive with `--body`) |
173
- | Close with short flags | `pm close <id> -r "<reason>"` / `-m "<history msg>"` / `-d <canonical>` |
174
- | Close via resolution only | `pm close <id> --resolution "<summary>"` (used as the close reason when one is required) |
127
+ | Need | Command |
128
+ |---|---|
129
+ | The single next action + why | `pm next` (concrete ready leaves first; completed-container closeout rows surface only when no leaf work is ready; `--ready-only` for the tightest output) |
130
+ | Next ready work in one epic | `pm next --parent <id>` |
131
+ | Canonical cold-start orientation | `pm context --for orient` (1,055 estimated tokens on the fixed 101-item replay corpus) |
132
+ | Next work and agenda | `pm context --limit 10` |
133
+ | Comprehensive whole-tracker snapshot | `pm context --depth full` (every section, no per-section row cap) |
134
+ | Status of one epic/subtree | `pm context --parent <id> --depth deep` |
135
+ | Relevant items | `pm search "<keywords>" --limit 10` (keyword hits are score-ranked; keyword mode defaults to 50 results, `result.total` reports the full pre-limit count) |
136
+ | Require every query token | `pm search "<keywords>" --match-mode and` (hard-filter; `exact` = contiguous phrase; default `or` adds an all-terms ranking bonus) |
137
+ | Just the match count | `pm search "<keywords>" --count` (no hit rows; `count`/`total` carry the matched total) |
138
+ | Per-query score threshold | `pm search "<keywords>" --min-score 5` (overrides settings `search.score_threshold` for this query) |
139
+ | Every matched row (no cap) | `pm list --all --no-truncate --brief` (`result.total` reports the full count when a `--limit`/`--offset` truncates) |
140
+ | Item bodies in bulk (one call) | `pm list --status open --json --include-body` (avoids one `pm get` per item) |
141
+ | Open work only | `pm search "<keywords>" --status open` (drops closed-history noise; did-you-mean on typos) |
142
+ | Scope search like list | `pm search "<keywords>" --type Task --assignee <name> --parent <id>` (full `pm list` filter parity) |
143
+ | Items changed since last window | `pm list --all --updated-after <prev-run-ISO> --brief` (relative `-2h`/`-7d` also work) |
144
+ | Open items changed today | `pm list --status open --today --brief` (local-midnight shorthand; mutually exclusive with `--updated-after`) |
145
+ | Items changed recently | `pm list --all --recent --brief` (last seven days; mutually exclusive with `--updated-after`) |
146
+ | Single item | `pm get <id>` |
147
+ | Full machine payload | `pm get <id> --full --json` |
148
+ | Command flags | `pm <command> --help --json` |
149
+ | Command intent map | `pm contracts --summary --json` (one command plus terse intent per row; use before command-scoped contracts) |
150
+ | Low-noise machine contracts | `pm contracts --command <command> --flags-only --json` |
151
+ | Semantic index refresh | `pm reindex --mode semantic --progress` (stale-first by default; add `--full` to force full rebuild; requires the `search-advanced` package) |
152
+ | Timeline | `pm activity --id <id> --limit 20` |
153
+ | Audited history redaction | `pm history-redact <id> --literal "<secret>" --replacement "[redacted]" --dry-run` |
154
+ | Audited history re-anchor | `pm history-repair <id> --dry-run` (clears drift flagged by `pm health`/`pm validate`) |
155
+ | Register custom item type | `pm schema add-type <Name> --description "<text>" --default-status open` (then `pm create <Name> "..."`) |
156
+ | Remove custom item type | `pm schema remove-type <Name>` (warns if items still use it; built-ins refused) |
157
+ | Register custom status | `pm schema add-status <id> --role <active\|terminal\|...> --alias <name> --order <n>` |
158
+ | Remove custom status | `pm schema remove-status <id>` (warns if items use it; built-in statuses refused) |
159
+ | Agent plan create | `pm plan create --title "<scope>" --harness claude-code --scope "<short>" --claim` |
160
+ | Agent plan create with steps | `pm plan create --title "<scope>" --step "<step 1>" --step "<step 2>" --step "<step 3>"` (repeated `--step` seeds ordered steps) |
161
+ | Agent plan step update | `pm plan update-step <plan-id> plan-step-001 --step-status in_progress --step-evidence "<short>"` |
162
+ | Agent plan read | `pm plan show <plan-id> --depth brief` (or `--fields id,title,steps_summary`) |
163
+ | Materialize plan steps | `pm plan materialize <plan-id> --steps plan-step-002 --materialize-type Task` |
164
+ | Dependencies | `pm deps <id> --format tree` |
165
+ | Graph queries | `pm graph successors <id> --limit 20` (also `ancestors`, `paths`, `impact`, `analyze`, `audit`, `communities`, `redundancy`, `dominators`, `plan`) |
166
+ | Bulk update by id allowlist | `pm update-many --ids pm-a,pm-b --priority 1 --dry-run` (preview, then drop `--dry-run`) |
167
+ | Audited bulk close (sprint closeout) | `pm close-many --filter-sprint <s> --reason "<text>" --dry-run` (full `pm close` semantics per item; `--rollback <id>` to undo) |
168
+ | Local docs routing | `pm install guide-shell --project`, then `pm guide <topic>` |
169
+ | Compact mutation echo | `pm --no-changed-fields create "..."` (drops the redundant `changed_fields` array, keeps `changed_field_count`) |
170
+ | Minimal mutation echo | `pm --id-only create "..."` (prints only id and status for single-item mutations) |
171
+ | Duplicate close | `pm close <duplicate> --duplicate-of <canonical>` (or `-d <canonical>`) |
172
+ | Long body from a file | `pm create <Type> "<title>" --body-file ./spec.md` (also on `pm update`; mutually exclusive with `--body`) |
173
+ | Close with short flags | `pm close <id> -r "<reason>"` / `-m "<history msg>"` / `-d <canonical>` |
174
+ | Close via resolution only | `pm close <id> --resolution "<summary>"` (used as the close reason when one is required) |
175
175
 
176
176
  Default TOON output is preferred for model-readable loops. Use `--json` only when strict parsing is needed.
177
177
 
@@ -55,19 +55,19 @@ Each includes nested facts. The historical renderer is measured at commit
55
55
  Measurements are committed in `tests/fixtures/agent-encoding-baseline.json`.
56
56
 
57
57
  | Surface / rows | Previous TOON | JSON | Nested TOON | Hoisted cells | Ordinal | Selected |
58
- | -------------- | ------------: | ---: | ----------: | ------------: | ------: | -------: |
59
- | search / 1 | 83 | 110 | 70 | 86 | 88 | 73 |
60
- | search / 8 | 503 | 607 | 406 | 303 | 417 | 303 |
61
- | search / 32 | 1943 | 2311 | 1558 | 1047 | 1545 | 1047 |
62
- | next / 1 | 86 | 122 | 76 | 94 | 93 | 79 |
63
- | next / 8 | 527 | 703 | 454 | 367 | 457 | 367 |
64
- | next / 32 | 2039 | 2695 | 1750 | 1303 | 1705 | 1303 |
65
- | context / 1 | 89 | 118 | 76 | 89 | 95 | 79 |
66
- | context / 8 | 544 | 664 | 447 | 320 | 459 | 321 |
67
- | context / 32 | 2104 | 2536 | 1719 | 1112 | 1707 | 1113 |
68
- | get / 1 | 86 | 124 | 76 | 115 | 106 | 80 |
69
- | get / 8 | 408 | 551 | 279 | 311 | 400 | 264 |
70
- | get / 32 | 1512 | 2015 | 975 | 983 | 1408 | 840 |
58
+ |---|---:|---:|---:|---:|---:|---:|
59
+ | search / 1 | 83 | 110 | 70 | 86 | 88 | 73 |
60
+ | search / 8 | 503 | 607 | 406 | 303 | 417 | 303 |
61
+ | search / 32 | 1943 | 2311 | 1558 | 1047 | 1545 | 1047 |
62
+ | next / 1 | 86 | 122 | 76 | 94 | 93 | 79 |
63
+ | next / 8 | 527 | 703 | 454 | 367 | 457 | 367 |
64
+ | next / 32 | 2039 | 2695 | 1750 | 1303 | 1705 | 1303 |
65
+ | context / 1 | 89 | 118 | 76 | 89 | 95 | 79 |
66
+ | context / 8 | 544 | 664 | 447 | 320 | 459 | 321 |
67
+ | context / 32 | 2104 | 2536 | 1719 | 1112 | 1707 | 1113 |
68
+ | get / 1 | 86 | 124 | 76 | 115 | 106 | 80 |
69
+ | get / 8 | 408 | 551 | 279 | 311 | 400 | 264 |
70
+ | get / 32 | 1512 | 2015 | 975 | 983 | 1408 | 840 |
71
71
 
72
72
  These are fixture measurements, not universal compression guarantees. Selected
73
73
  output combines the existing scalar presentation with a per-collection choice,
@@ -83,13 +83,13 @@ one for an extra JSON-cell decoding step or two for positional row interpretatio
83
83
  The minimum adopted score is four; it is a design criterion alongside the
84
84
  independent executable equivalence gate.
85
85
 
86
- | Candidate | Readability score / 5 | Interpretation |
87
- | --------------- | --------------------: | ----------------------------------------- |
88
- | JSON | 5 | Named fields and native nested values |
89
- | Nested TOON | 5 | Named fields and standard nested decoding |
90
- | Hoisted cells | 4 | Named columns and declared JSON cells |
91
- | Ordinal | 3 | Column lookup plus positional nested rows |
92
- | Selected hybrid | 4–5 | Expanded small rows or declared tables |
86
+ | Candidate | Readability score / 5 | Interpretation |
87
+ |---|---:|---|
88
+ | JSON | 5 | Named fields and native nested values |
89
+ | Nested TOON | 5 | Named fields and standard nested decoding |
90
+ | Hoisted cells | 4 | Named columns and declared JSON cells |
91
+ | Ordinal | 3 | Column lookup plus positional nested rows |
92
+ | Selected hybrid | 4–5 | Expanded small rows or declared tables |
93
93
 
94
94
  Ordinal arrays require an additional positional interpretation and save nothing
95
95
  on these nested fixtures, so they are not adopted. The complete brief-list
package/docs/ASSURANCE.md CHANGED
@@ -33,17 +33,17 @@ The assurance SDK keeps those semantics independent from presentation. Commander
33
33
 
34
34
  Measurements support these built-in sources:
35
35
 
36
- | Source | Purpose |
37
- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
38
- | `items` | Count authoritative full item records matching status, type, tags, an exact metadata field, or a field `state` of `present`/`missing`. |
36
+ | Source | Purpose |
37
+ |---|---|
38
+ | `items` | Count authoritative full item records matching status, type, tags, an exact metadata field, or a field `state` of `present`/`missing`. |
39
39
  | `dependency_kind` | Count typed relationship edges such as `blocked_by` or `verifies`; accepted aliases and canonical spellings measure the same population. |
40
- | `graph` | Select a numeric or labelled-set field from a public graph SDK result. |
41
- | `validate` | Select a validator check status or numeric detail. |
42
- | `health` | Select a health check status, numeric detail, or labelled set. |
43
- | `history` | Count immutable events by operation, author, harness, or model. |
44
- | `links` | Count items with present or missing file, test, or documentation evidence. |
45
- | `derived` | Combine numeric measurements with deterministic arithmetic and cycle detection. |
46
- | `provider` | Delegate a measurement to an explicitly supplied host/package resolver. |
40
+ | `graph` | Select a numeric or labelled-set field from a public graph SDK result. |
41
+ | `validate` | Select a validator check status or numeric detail. |
42
+ | `health` | Select a health check status, numeric detail, or labelled set. |
43
+ | `history` | Count immutable events by operation, author, harness, or model. |
44
+ | `links` | Count items with present or missing file, test, or documentation evidence. |
45
+ | `derived` | Combine numeric measurements with deterministic arithmetic and cycle detection. |
46
+ | `provider` | Delegate a measurement to an explicitly supplied host/package resolver. |
47
47
 
48
48
  `ASSURANCE_MEASUREMENT_SOURCE_KINDS` and `ASSURANCE_GATE_TRIGGERS` are the
49
49
  public SDK constants for these closed vocabularies. Runtime validation rejects
@@ -153,7 +153,7 @@ projection, including feedback writes). The explicit scan includes the cold
153
153
  derived-index rebuild; these are host observations rather than latency gates.
154
154
 
155
155
  | Corpus items | Standard p95 | Brief p95 | Fields p95 | Explicit full scan | Verified scan rows |
156
- | ---: | ---: | ---: | ---: | ---: | ---: |
156
+ |---:|---:|---:|---:|---:|---:|
157
157
  | 100 | 4.53 ms | 4.24 ms | 3.54 ms | 48 ms | 100 |
158
158
  | 10,000 | 3.61 ms | 3.03 ms | 4.08 ms | 4.91 s | 10,000 |
159
159
  | 100,000 | 3.69 ms | 11.00 ms | 3.11 ms | 48.59 s | 100,000 |
@@ -162,7 +162,7 @@ Measured on 2026-09-05 with Node 26.7.0; these are observations, not portable
162
162
  latency guarantees. Duplicate timings exclude filesystem ingestion.
163
163
 
164
164
  | Items | Possible pairs | Scored pairs | Analysis time | Mean bytes written per serve | Compactions / serves | Final ledger bytes |
165
- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
165
+ |---:|---:|---:|---:|---:|---:|---:|
166
166
  | 10,000 | 49,995,000 | 5,000 | 92 ms | 18,138 | 2 / 40 | 237,785 |
167
167
  | 100,000 | 4,999,950,000 | 50,000 | 864 ms | 18,149 | 2 / 40 | 237,821 |
168
168
  | 1,000,000 | 499,999,500,000 | 500,000 | 10,367 ms | 18,135 | 2 / 40 | 237,857 |
@@ -175,7 +175,7 @@ receipts; these are four concurrent tasks sharing a cross-process lock, not a
175
175
  measurement of four separate OS processes.
176
176
 
177
177
  | Candidate rows per serve | Serves/s/workspace | Minimum wait | p50 wait | p95 wait | Maximum wait |
178
- | ---: | ---: | ---: | ---: | ---: | ---: |
178
+ |---:|---:|---:|---:|---:|---:|
179
179
  | 10,000 | 46.73 | 3.11 ms | 25.15 ms | 84.97 ms | 105.66 ms |
180
180
  | 100,000 | 20.82 | 18.29 ms | 50.10 ms | 193.86 ms | 229.60 ms |
181
181
  | 1,000,000 | 1.92 | 198.10 ms | 809.52 ms | 1,367.67 ms | 1,622.77 ms |
@@ -197,7 +197,7 @@ After installing the plugin:
197
197
  ## Compatibility
198
198
 
199
199
  | pm-cli version | Plugin version | Claude Code version |
200
- |---------------|----------------|---------------------|
200
+ |---|---|---|
201
201
  | Exact same date-based version as the plugin | Exact same date-based version as pm-cli | Current supported Claude Code |
202
202
 
203
203
  The authoritative plugin version is `plugins/pm-claude/.claude-plugin/plugin.json`; `pnpm version:check` also verifies the pinned runtime dependency.
@@ -133,7 +133,7 @@ and cross-workspace evidence exist, published aliases remain executable.
133
133
  Tracked by [pm-m6g87m](../.agents/pm/tasks/pm-m6g87m.toon), [pm-fmy9ih](../.agents/pm/tasks/pm-fmy9ih.toon), and [pm-wfskfn](../.agents/pm/tasks/pm-wfskfn.toon).
134
134
 
135
135
  | Canonical command | Compatibility alias | Responsibility |
136
- | --- | --- | --- |
136
+ |---|---|---|
137
137
  | `item copy` | `copy` | Copy one item to a new ID |
138
138
  | `workspace merge` | `merge` | Install, inspect, or run Git tracker merge drivers |
139
139
  | `item duplicates` | `duplicates` | Discover bounded duplicate clusters in core |
@@ -216,7 +216,7 @@ Tracked by [pm-npr3](../.agents/pm/tasks/pm-npr3.toon) and
216
216
  [pm-uk9dwh](../.agents/pm/tasks/pm-uk9dwh.toon).
217
217
 
218
218
  | Canonical command | Compatibility spelling | Responsibility |
219
- | --- | --- | --- |
219
+ |---|---|---|
220
220
  | `workspace init` | `init` | Bootstrap storage, settings, and optional guidance |
221
221
  | `workspace config` | `config` | Read or change individual project/global settings |
222
222
  | `workspace schema` | `schema` | Define types, statuses, fields, and validation contracts |
package/docs/COMMANDS.md CHANGED
@@ -51,21 +51,21 @@ JSON ceiling; TOON uses the smaller default agent ceiling.
51
51
 
52
52
  ## Command Families
53
53
 
54
- | Family | Commands | Purpose |
55
- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
56
- | Bootstrap | `init`, `config`, `health`, `telemetry` | create and inspect tracker setup |
57
- | Lifecycle | `create`, `copy`, `focus`, `claim`, `update`, `item reopen`, `append`, `close`, `release`, `close delete` | mutate item state, including terminal-work recurrence without duplicate creation |
58
- | Bulk | `item mutate`, `item complete`, `update many`, `close many` | atomically commit heterogeneous SDK mutation batches or evidence-backed completion, or apply one change across a matched, dry-run-previewed set with a rollback checkpoint |
59
- | Scheduling | `meet`, `event`, `remind` | low-friction Meeting/Event/Reminder creation |
60
- | Planning | `plan create`, `plan add-step`, `plan update-step`, `plan complete-step`, `plan link`, `plan approve`, `plan materialize` | agent-optimized living plans with ordered steps, evidence, decisions, validation, and materialization |
61
- | Links | `files`, `docs`, `test`, `deps` | connect items to artifacts, tests, and relationships |
62
- | Verification | `test`, `test-all`, `test-runs`†, `validate`, `gc` | run linked tests and repository checks |
63
- | History | `history`, `history-compact`, `history-redact`, `history-repair`, `activity`, `restore`, `stats` | inspect, compact, redact, re-anchor, and recover item state |
64
- | Schema | `schema add/remove-*` / `rename-type` / `rename-field` / `remap-status` / `apply-preset` | manage config-driven types, statuses, and fields; losslessly migrate existing items when definitions evolve; adopt presets or infer types |
65
- | Profiles | `profile list` / `show` / `apply` / `lint` | compose item types, statuses, fields, workflows, config, templates, and recommended packages into archetype bundles (agile/ops/research); `apply` stages every dimension idempotently; `lint` reports author-time consistency findings without writing |
66
- | Calendar | `calendar`, `cal` | project deadlines, reminders, and events |
67
- | Packages | `install`, `upgrade`, `package`, `packages`, `extension`, package/extension command groups | install, upgrade, manage, and run package-backed extension commands |
68
- | Machines | `contracts`, `help`, optional `guide`/`completion` | command contracts plus optional guide-shell docs routing and shell helpers |
54
+ | Family | Commands | Purpose |
55
+ |---|---|---|
56
+ | Bootstrap | `init`, `config`, `health`, `telemetry` | create and inspect tracker setup |
57
+ | Lifecycle | `create`, `copy`, `focus`, `claim`, `update`, `item reopen`, `append`, `close`, `release`, `close delete` | mutate item state, including terminal-work recurrence without duplicate creation |
58
+ | Bulk | `item mutate`, `item complete`, `update many`, `close many` | atomically commit heterogeneous SDK mutation batches or evidence-backed completion, or apply one change across a matched, dry-run-previewed set with a rollback checkpoint |
59
+ | Scheduling | `meet`, `event`, `remind` | low-friction Meeting/Event/Reminder creation |
60
+ | Planning | `plan create`, `plan add-step`, `plan update-step`, `plan complete-step`, `plan link`, `plan approve`, `plan materialize` | agent-optimized living plans with ordered steps, evidence, decisions, validation, and materialization |
61
+ | Links | `files`, `docs`, `test`, `deps` | connect items to artifacts, tests, and relationships |
62
+ | Verification | `test`, `test-all`, `test-runs`†, `validate`, `gc` | run linked tests and repository checks |
63
+ | History | `history`, `history-compact`, `history-redact`, `history-repair`, `activity`, `restore`, `stats` | inspect, compact, redact, re-anchor, and recover item state |
64
+ | Schema | `schema add/remove-*` / `rename-type` / `rename-field` / `remap-status` / `apply-preset` | manage config-driven types, statuses, and fields; losslessly migrate existing items when definitions evolve; adopt presets or infer types |
65
+ | Profiles | `profile list` / `show` / `apply` / `lint` | compose item types, statuses, fields, workflows, config, templates, and recommended packages into archetype bundles (agile/ops/research); `apply` stages every dimension idempotently; `lint` reports author-time consistency findings without writing |
66
+ | Calendar | `calendar`, `cal` | project deadlines, reminders, and events |
67
+ | Packages | `install`, `upgrade`, `package`, `packages`, `extension`, package/extension command groups | install, upgrade, manage, and run package-backed extension commands |
68
+ | Machines | `contracts`, `help`, optional `guide`/`completion` | command contracts plus optional guide-shell docs routing and shell helpers |
69
69
 
70
70
  `†` `test-runs` subcommands are provided by the optional `linked-test-adapters` package (`pm package install linked-test-adapters --project`).
71
71
 
@@ -963,6 +963,118 @@ pm release <id>
963
963
  `--author` on claim/release flows, not a metadata update. Use `--force` only when
964
964
  explicitly overriding terminal-state or lock conflicts.
965
965
 
966
+ Starting work respects declared blockers
967
+ ([pm-urzubi](../.agents/pm/issues/pm-urzubi.toon)). `pm update <id> --status
968
+ in_progress`, `pm claim <id> --start`, `pm claim --next --start` and the
969
+ `start-task` action refuse with `start_blocked_by_open_dependency` (exit 4)
970
+ when the item moves into the start status while a `blocked_by` target is still
971
+ open. `pm claim --next --start` skips a ranked candidate refused this way (its
972
+ blocker opened after ranking, and nothing is written to it), claims the next
973
+ eligible candidate, and lists the skipped ids in `start_refused`. When the walk
974
+ is exhausted, the `no_available_next_item` refusal (or the `--if-available`
975
+ empty result) carries them too. An item already in that status is not
976
+ rechecked, so `claim --start` on it succeeds. The check runs before any write: the
977
+ explicit `claim <id> --start` judges it under the claim's item lock, and its
978
+ status update judges again under its own lock. When the first check refuses,
979
+ nothing is written. When a blocker opens between the two writes, the start
980
+ refuses and, if it took the item from no owner, releases that claim. The release
981
+ is fenced by assignee and claim principal, so another principal's takeover is
982
+ never cleared; principal is pm's unit of ownership, so a concurrent reclaim by
983
+ the same principal is indistinguishable from the original claim. If the item already had an owner, or that
984
+ release cannot run, the claim stays and the refusal's `why` reports the partial
985
+ completion. The
986
+ refusal lists the open blockers in `details.open_blockers` and suggests the
987
+ exact `pm update` that drops the edge. When no single command can do that
988
+ safely (clearing the `blocked_by` scalar would also drop an independent
989
+ `blocked_by` edge, or a legacy row's short id, alias kind or external locator
990
+ would not match a removal selector; see
991
+ [pm-4yxzvd](../.agents/pm/issues/pm-4yxzvd.toon)), it suggests inspecting the
992
+ item instead. The check uses the effective start status, including the
993
+ registered `in_progress` fallback when the workflow names `open`.
994
+ A terminal blocker never blocks, and an update that removes the blocker in the
995
+ same call is admitted. `--force` starts anyway and records
996
+ `start_blocker_override:<id>:<blockers>`. `governance.start_blocker_enforcement`
997
+ selects `strict` (default), `warn` (start and record
998
+ `start_with_open_blockers:<id>:<blockers>`), or `off`. A blocker whose record
999
+ cannot be judged (an invalid or non-UTF-8 document, an unsupported item format,
1000
+ or an ambiguous or conflicting identity) refuses under `strict` with that typed
1001
+ error. `warn` and `--force` still admit the start and record
1002
+ `start_blocker_unverifiable:<id>:<code>`. Filesystem failures and merge-conflict
1003
+ markers always propagate.
1004
+
1005
+ ### Expected revisions (`--expect-hash`)
1006
+
1007
+ Read-decide-write agents guard a write with the revision they decided on
1008
+ ([pm-gh1576](../.agents/pm/features/pm-gh1576.toon)). `pm get <id> --json`
1009
+ reports `item_hash`. The global `--expect-hash <item_hash>` flag makes every
1010
+ locked write the command makes to that item refuse with `item_revision_conflict`
1011
+ (exit 4) if the item changed since:
1012
+
1013
+ ```bash
1014
+ H=$(pm get pm-a1b2 --json | jq -r .item_hash)
1015
+ pm close pm-a1b2 "Delivered by PR 1" --expect-hash "$H"
1016
+ H1=$(pm get pm-a1b2 --json | jq -r .item_hash)
1017
+ H2=$(pm get pm-c3d4 --json | jq -r .item_hash)
1018
+ pm update-many --ids pm-a1b2,pm-c3d4 --priority 1 \
1019
+ --expect-hash "pm-a1b2=$H1" --expect-hash "pm-c3d4=$H2"
1020
+ ```
1021
+
1022
+ A bare hash binds to the command's `<id>` argument (for `plan`, the id after
1023
+ the subcommand; `plan create` has none). `<id>=<item_hash>`
1024
+ (repeatable or comma-separated) names targets explicitly and is required for
1025
+ commands without one item argument. The refusal reports `expected_revision`,
1026
+ `current_revision`, and `details.changes_since` (the newest 10 history entries
1027
+ since the declared revision, with their top-level `fields`). The refused write
1028
+ is suppressed; writes the same command already committed (for example the
1029
+ claim of a composed `claim --start`) stay durable, and the message then says
1030
+ so ("Earlier writes by this same invocation already committed"). Read commands refuse the flag with
1031
+ `expect_hash_requires_mutation`, and an empty value (such as an unset `$H`)
1032
+ refuses with `expect_hash_invalid` instead of running unguarded. Bulk
1033
+ `update-many`/`close-many` fail only stale rows, forward and `--rollback` alike, each
1034
+ carrying `error_code`, `expected_revision`, `current_revision` and
1035
+ `details.changes_since`. When `close` auto-unblocks a guarded dependent whose revision
1036
+ moved, the close stays committed and the command refuses with that dependent's
1037
+ `item_revision_conflict` once the fan-out finishes. `side_effects` names every
1038
+ write that committed first: the close and each dependent already unblocked. Do
1039
+ not retry the close; it is already terminal. `required` and `nextSteps` name
1040
+ only the remaining step for each refused guarded dependent
1041
+ (`details.pending_unblock`): re-read it, confirm every blocker it declares is
1042
+ resolved, then run the scoped unblock `nextSteps` lists (`pm update <dependent>
1043
+ --status <open-status> --unset blocked_by --unset blocked_reason --expect-hash
1044
+ <dependent>=<item_hash>`, carrying the configured open status and tracker
1045
+ scope). `--unset blocked_by` removes every `blocked_by` edge, including one a
1046
+ concurrent change added, so skipping the check can reopen a still-blocked item.
1047
+ Dependents whose unblock failed for another reason are in
1048
+ `details.auto_unblock_failed` with that reason; fix the cause first. Each list
1049
+ names at most 10 ids and counts the rest in `*_omitted`, keeping the details
1050
+ within the error-details size limit. When ids were omitted, or the steps exceed
1051
+ the 20-step cap (ten conflicts plus one other failure make 21), the last step
1052
+ lists every item in a blocked-role status (`pm list --status <blocked-statuses>
1053
+ --fields id,title,blocked_by,dependencies`, over the statuses the fan-out drew
1054
+ from), so a dependent whose step was cut is still found; it returns 200 rows per
1055
+ page, so follow `--after <next_cursor>` while `has_more: true`. `close-many` reports such a row as `closed` (`update-many` closing
1056
+ through `--status`, as `updated`), with the dependent's conflict under
1057
+ `dependent_revision_conflict`. A guarded `restore` refuses to recover
1058
+ over a live file that cannot be read as a document; an unguarded restore still
1059
+ recovers it. `deps` only reads, so it refuses the flag. History maintenance
1060
+ (`history-redact`, `history-repair` including `--salvage-tail`, `history-compact`)
1061
+ is checked under the stream lock. Its bulk forms (`history-compact --ids`,
1062
+ `history-repair --all`) carry the same typed conflict fields on refused rows. An
1063
+ item file whose embedded id differs from its physical file name (even by case on a
1064
+ case-sensitive filesystem) binds no revision: reading or declaring one refuses with
1065
+ `item_identity_conflict` until the identity is repaired. `validate --auto-fix`/`--prune-missing` refuses typed once every fix
1066
+ was attempted. When an extension parser or preflight override rewrites the
1067
+ invocation's tracker or arguments, a guarded invocation refuses with
1068
+ `expect_hash_invocation_rewritten`, since which item it writes cannot be proved.
1069
+ The same refusal covers a parser pass during final dispatch, which must also keep
1070
+ the guard admissible (adding `--background` late refuses with
1071
+ `expect_hash_background_unsupported`). Inventory commands
1072
+ (`package inventory`, `extension inventory`) never write items, so they validate
1073
+ the flag and then refuse with `expect_hash_requires_mutation`. An item the command never wrote produces the
1074
+ warning `expect_hash_unchecked:<id>:no_locked_write_reached_this_item`. MCP
1075
+ tools accept the same tokens as `expectHash`; the SDK exposes
1076
+ `withExpectedItemRevisions` (see [SDK](SDK.md#expected-item-revisions)).
1077
+
966
1078
  ## Logs
967
1079
 
968
1080
  ```bash
@@ -1487,23 +1599,23 @@ pm plan show <plan-id> --fields id,title,steps_summary
1487
1599
 
1488
1600
  Subcommand cheatsheet:
1489
1601
 
1490
- | Subcommand | Purpose |
1491
- | ----------------- | -------------------------------------------------------------------------------------------- |
1492
- | `create` | Create a Plan item with scope, harness, parent, related, blocked-by, and optional auto-claim |
1493
- | `show` | Progressive-disclosure read (brief / standard / deep) with current step + next-action hints |
1494
- | `add-step` | Append a step with title/body/owner/status/dependencies/files/tests/docs |
1495
- | `update-step` | Patch one step (title, body, status, evidence, owner, blocked reason) |
1496
- | `complete-step` | Shortcut for setting a step to `completed` with evidence |
1497
- | `block-step` | Shortcut for setting a step to `blocked` with required `--step-blocked-reason` |
1498
- | `reorder-step` | Move a step to a new 1-based order |
1499
- | `remove-step` | Drop a step and renumber remaining steps |
1500
- | `link` / `unlink` | Add or remove `linked_items` on a step (with optional `--promote-to-item-dep`) |
1501
- | `decision` | Append a decision log entry (decision/rationale/evidence) |
1502
- | `discovery` | Append a discovery log entry |
1503
- | `validation` | Append a validation check (text/command/expected) |
1504
- | `resume` | Replace the resume-context summary for stateless agents |
1505
- | `approve` | Move `plan_mode` to `approved` (default) or any other mode via `--mode` |
1506
- | `materialize` | Create real pm items (default `Task`) from selected steps with bidirectional links |
1602
+ | Subcommand | Purpose |
1603
+ |---|---|
1604
+ | `create` | Create a Plan item with scope, harness, parent, related, blocked-by, and optional auto-claim |
1605
+ | `show` | Progressive-disclosure read (brief / standard / deep) with current step + next-action hints |
1606
+ | `add-step` | Append a step with title/body/owner/status/dependencies/files/tests/docs |
1607
+ | `update-step` | Patch one step (title, body, status, evidence, owner, blocked reason) |
1608
+ | `complete-step` | Shortcut for setting a step to `completed` with evidence |
1609
+ | `block-step` | Shortcut for setting a step to `blocked` with required `--step-blocked-reason` |
1610
+ | `reorder-step` | Move a step to a new 1-based order |
1611
+ | `remove-step` | Drop a step and renumber remaining steps |
1612
+ | `link` / `unlink` | Add or remove `linked_items` on a step (with optional `--promote-to-item-dep`) |
1613
+ | `decision` | Append a decision log entry (decision/rationale/evidence) |
1614
+ | `discovery` | Append a discovery log entry |
1615
+ | `validation` | Append a validation check (text/command/expected) |
1616
+ | `resume` | Replace the resume-context summary for stateless agents |
1617
+ | `approve` | Move `plan_mode` to `approved` (default) or any other mode via `--mode` |
1618
+ | `materialize` | Create real pm items (default `Task`) from selected steps with bidirectional links |
1507
1619
 
1508
1620
  Invariants:
1509
1621
 
@@ -9,7 +9,7 @@ spellings remain executable compatibility aliases with the same arguments,
9
9
  results, exit codes, and SDK behavior.
10
10
 
11
11
  | Native invocation | Compatibility spelling | Purpose |
12
- | --- | --- | --- |
12
+ |---|---|---|
13
13
  | `pm context next` | `pm next` | Select ready work and explain blockers |
14
14
  | `pm context focus` | `pm focus` | Read, set, or clear the focused item |
15
15
  | `pm ops stats` | `pm stats` | Inspect tracker statistics |