@unbrained/pm-cli 2026.8.26 → 2026.8.28

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 (196) hide show
  1. package/.agents/skills/HARNESS_COMPATIBILITY.md +32 -0
  2. package/.agents/skills/README.md +47 -0
  3. package/.agents/skills/pm-developer/SKILL.md +117 -0
  4. package/.agents/skills/pm-developer/references/COMMAND_PLAYBOOK.md +49 -0
  5. package/.agents/skills/pm-developer/references/GRAPH_AND_RELATIONSHIPS.md +91 -0
  6. package/.agents/skills/pm-developer/references/MULTI_AGENT_MERGE.md +72 -0
  7. package/.agents/skills/pm-developer/references/PROMPTS.md +17 -0
  8. package/.agents/skills/pm-developer/references/SCRIPTING_COMPOSITION.md +82 -0
  9. package/.agents/skills/pm-developer/references/TOKEN_BUDGETS.md +85 -0
  10. package/.agents/skills/pm-extensions/SKILL.md +106 -0
  11. package/.agents/skills/pm-extensions/references/AUTHORING.md +95 -0
  12. package/.agents/skills/pm-extensions/references/LIFECYCLE.md +40 -0
  13. package/.agents/skills/pm-extensions/references/TROUBLESHOOTING.md +25 -0
  14. package/.agents/skills/pm-sdk/SKILL.md +107 -0
  15. package/.agents/skills/pm-sdk/references/DOMAIN_MODELING.md +78 -0
  16. package/.agents/skills/pm-sdk/references/INTEGRATION_CHECKLIST.md +31 -0
  17. package/.agents/skills/pm-sdk/references/PROMPTS.md +13 -0
  18. package/.agents/skills/pm-sdk/references/SURFACE_MAP.md +82 -0
  19. package/.agents/skills/pm-user/SKILL.md +111 -0
  20. package/.agents/skills/pm-user/references/BACKLOG_SHAPING.md +105 -0
  21. package/.agents/skills/pm-user/references/PROMPTS.md +17 -0
  22. package/.agents/skills/pm-user/references/WORKFLOWS.md +35 -0
  23. package/.claude-plugin/marketplace.json +2 -2
  24. package/CHANGELOG.md +50 -4
  25. package/README.md +8 -5
  26. package/dist/cli/commander-usage.js +11 -7
  27. package/dist/cli/error-guidance.js +62 -8
  28. package/dist/cli/help-content.d.ts +2 -0
  29. package/dist/cli/help-content.js +53 -17
  30. package/dist/cli/help-json-payload.d.ts +8 -2
  31. package/dist/cli/help-json-payload.js +46 -12
  32. package/dist/cli/main.js +52 -74
  33. package/dist/cli/register-annotations.js +83 -60
  34. package/dist/cli/register-setup.js +98 -57
  35. package/dist/cli-bundle/bundle-manifest.json +151 -151
  36. package/dist/cli-bundle/chunks/{chunk-UKBCRPA2.js → chunk-BY2FQ2NI.js} +2 -2
  37. package/dist/cli-bundle/chunks/chunk-E73FDIWT.js +3 -0
  38. package/dist/cli-bundle/chunks/{chunk-WRHJ3MB6.js → chunk-FEVBFFCQ.js} +2 -2
  39. package/dist/cli-bundle/chunks/{chunk-KBFP3E4E.js → chunk-M7OXRQE3.js} +66 -44
  40. package/dist/cli-bundle/chunks/{chunk-S4U76VZF.js → chunk-NBCBFVZI.js} +2 -2
  41. package/dist/cli-bundle/chunks/{chunk-ZNRLJ54C.js → chunk-NTXZHRKA.js} +45 -45
  42. package/dist/cli-bundle/chunks/chunk-QE6WQXFO.js +3 -0
  43. package/dist/cli-bundle/chunks/chunk-TIQ6AMH2.js +13 -0
  44. package/dist/cli-bundle/chunks/chunk-X2RROGZE.js +2 -0
  45. package/dist/cli-bundle/chunks/{chunk-E2GCFJSU.js → chunk-XRVVYRRO.js} +33 -33
  46. package/dist/cli-bundle/chunks/chunk-XWEQGHHG.js +202 -0
  47. package/dist/cli-bundle/chunks/{register-list-query-EMCPMICY.js → register-list-query-J35ZPQQ5.js} +2 -2
  48. package/dist/cli-bundle/chunks/{register-mutation-OJ67ABCB.js → register-mutation-J6XJJOGU.js} +4 -4
  49. package/dist/cli-bundle/chunks/{register-operations-H2GLP7LT.js → register-operations-AE3JEMFT.js} +2 -2
  50. package/dist/cli-bundle/chunks/register-setup-OQERLLWE.js +2 -0
  51. package/dist/cli-bundle/focused-chunks/{chunk-72T6JGAE.js → chunk-4ZDRZYYJ.js} +43 -43
  52. package/dist/cli-bundle/focused-chunks/{chunk-OHIHZ7HS.js → chunk-6GCRSLPG.js} +2 -2
  53. package/dist/cli-bundle/focused-chunks/{chunk-UYBA57GY.js → chunk-AD6ULRAF.js} +2 -2
  54. package/dist/cli-bundle/focused-chunks/{chunk-FXDLT6FL.js → chunk-AHAM2HAU.js} +2 -2
  55. package/dist/cli-bundle/focused-chunks/{chunk-LV5N3LK5.js → chunk-FC2AXLB5.js} +2 -2
  56. package/dist/cli-bundle/focused-chunks/{chunk-IBHXMFE7.js → chunk-HC7ODMH3.js} +2 -2
  57. package/dist/cli-bundle/focused-chunks/{chunk-4K2II4TV.js → chunk-HVQ22RC4.js} +2 -2
  58. package/dist/cli-bundle/focused-chunks/{chunk-MMXUPDDJ.js → chunk-JZYPPMXF.js} +2 -2
  59. package/dist/cli-bundle/focused-chunks/chunk-LLNTHF5X.js +2 -0
  60. package/dist/cli-bundle/focused-chunks/chunk-LYFWQMVC.js +2 -0
  61. package/dist/cli-bundle/focused-chunks/{chunk-A644DUFQ.js → chunk-MEASX544.js} +2 -2
  62. package/dist/cli-bundle/focused-chunks/{chunk-YO3ZF3FI.js → chunk-THEPQMLX.js} +2 -2
  63. package/dist/cli-bundle/focused-chunks/{chunk-57XY346D.js → chunk-XDPYBQCF.js} +9 -9
  64. package/dist/cli-bundle/focused-chunks/{chunk-TMJDFHVD.js → chunk-Y3JJXRVK.js} +2 -2
  65. package/dist/cli-bundle/focused-chunks/{chunk-66VGB23P.js → chunk-Y5A7SJJ7.js} +2 -2
  66. package/dist/cli-bundle/focused-chunks/chunk-YJLDHJOD.js +2 -0
  67. package/dist/cli-bundle/focused-chunks/{chunk-P2E6LDAE.js → chunk-YVVZ3LQ6.js} +3 -3
  68. package/dist/cli-bundle/focused-chunks/chunk-Z2USIBR2.js +5 -0
  69. package/dist/cli-bundle/main.js +15 -14
  70. package/dist/cli-bundle/sdk-authoring.js +1 -1
  71. package/dist/cli-bundle/sdk-contracts.js +2 -2
  72. package/dist/cli-bundle/sdk-core.js +31 -31
  73. package/dist/cli-bundle/sdk-governance.js +1 -1
  74. package/dist/cli-bundle/sdk-graph.js +1 -1
  75. package/dist/cli-bundle/sdk-merge.js +31 -31
  76. package/dist/cli-bundle/sdk-query.js +1 -1
  77. package/dist/cli-bundle/sdk-runtime.js +1 -1
  78. package/dist/cli-bundle/sdk-testing.js +1 -1
  79. package/dist/cli-bundle/sdk.js +32 -7
  80. package/dist/core/governance/issue-codes.d.ts +11 -2
  81. package/dist/core/governance/issue-codes.js +29 -10
  82. package/dist/core/item/item-format.js +3 -3
  83. package/dist/core/store/item-store.js +12 -5
  84. package/dist/mcp/server.js +123 -9
  85. package/dist/mcp/tool-definitions.d.ts +2 -0
  86. package/dist/mcp/tool-definitions.js +5 -5
  87. package/dist/sdk/agent/closed-domain-contracts.d.ts +1 -1
  88. package/dist/sdk/agent/closed-domain-contracts.js +24 -2
  89. package/dist/sdk/agent/command-recovery.js +3 -3
  90. package/dist/sdk/agent/task-transcript-contracts.d.ts +52 -0
  91. package/dist/sdk/agent/task-transcript-contracts.js +198 -0
  92. package/dist/sdk/agent-capability-contracts.js +6 -2
  93. package/dist/sdk/annotations.d.ts +5 -2
  94. package/dist/sdk/annotations.js +66 -36
  95. package/dist/sdk/cli-bootstrap.d.ts +2 -8
  96. package/dist/sdk/cli-bootstrap.js +7 -66
  97. package/dist/sdk/cli-contracts/bootstrap-command-scanner.d.ts +23 -0
  98. package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +80 -0
  99. package/dist/sdk/cli-contracts/command-aliases.js +15 -2
  100. package/dist/sdk/cli-contracts/enum-contracts.d.ts +4 -1
  101. package/dist/sdk/cli-contracts/enum-contracts.js +7 -2
  102. package/dist/sdk/cli-contracts/flag-contracts.js +12 -5
  103. package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +5 -5
  104. package/dist/sdk/cli-contracts/grammar-contracts.d.ts +3 -3
  105. package/dist/sdk/cli-contracts/grammar-contracts.js +24 -17
  106. package/dist/sdk/cli-contracts/runtime-contracts.js +13 -11
  107. package/dist/sdk/cli-contracts/tool-parameter-tables.js +15 -2
  108. package/dist/sdk/cli-contracts/tool-schema.d.ts +1 -1
  109. package/dist/sdk/cli-contracts/tool-schema.js +32 -16
  110. package/dist/sdk/cli-contracts.d.ts +1 -1
  111. package/dist/sdk/cli-contracts.js +3 -3
  112. package/dist/sdk/cli-program.js +3 -2
  113. package/dist/sdk/comments.d.ts +4 -0
  114. package/dist/sdk/comments.js +2 -2
  115. package/dist/sdk/completion.js +47 -16
  116. package/dist/sdk/contracts.d.ts +1 -0
  117. package/dist/sdk/contracts.js +3 -2
  118. package/dist/sdk/extension/install-sources.d.ts +13 -0
  119. package/dist/sdk/extension/install-sources.js +62 -30
  120. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +26 -2
  121. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +38 -14
  122. package/dist/sdk/governance/upgrade.d.ts +2 -0
  123. package/dist/sdk/governance/upgrade.js +30 -8
  124. package/dist/sdk/governance/validate.js +8 -6
  125. package/dist/sdk/guide-topics.js +6 -6
  126. package/dist/sdk/index.d.ts +5 -2
  127. package/dist/sdk/index.js +6 -3
  128. package/dist/sdk/learnings.d.ts +4 -0
  129. package/dist/sdk/learnings.js +7 -4
  130. package/dist/sdk/lifecycle/close.js +4 -3
  131. package/dist/sdk/mcp/apps.d.ts +70 -0
  132. package/dist/sdk/mcp/apps.js +154 -0
  133. package/dist/sdk/mcp/skills.d.ts +127 -0
  134. package/dist/sdk/mcp/skills.js +390 -0
  135. package/dist/sdk/notes.d.ts +4 -0
  136. package/dist/sdk/notes.js +2 -2
  137. package/dist/sdk/read-output-contracts.js +16 -3
  138. package/dist/sdk/runtime-action-aliases.js +7 -3
  139. package/dist/sdk/runtime-input.js +15 -4
  140. package/dist/sdk/runtime-primitives.d.ts +1 -1
  141. package/dist/sdk/runtime-primitives.js +3 -3
  142. package/dist/sdk/runtime.d.ts +6 -6
  143. package/dist/sdk/runtime.js +8 -8
  144. package/docs/CLI_GRAMMAR.md +7 -1
  145. package/docs/COMMANDS.md +5 -4
  146. package/docs/EXTENSIONS.md +33 -32
  147. package/docs/MCP_2026_07_28.md +24 -2
  148. package/docs/MCP_2026_07_28_CONFORMANCE.md +4 -4
  149. package/docs/MCP_SKILLS_AND_APPS.md +107 -0
  150. package/docs/OUTPUT_TOKEN_ACCOUNTING.md +20 -7
  151. package/docs/QUICKSTART.md +15 -15
  152. package/docs/README.md +1 -0
  153. package/docs/RELEASING.md +20 -4
  154. package/docs/SDK.md +12 -0
  155. package/docs/SDK_CONTEXT_INTEGRITY.md +18 -1
  156. package/docs/SDK_EVIDENCE_TRACEABILITY.md +9 -1
  157. package/docs/SDK_RUNTIME_BOUNDARIES.md +10 -0
  158. package/docs/TESTING.md +6 -2
  159. package/docs/agent-task-token-baseline.json +97 -11
  160. package/docs/agent-task-transcripts.json +211 -0
  161. package/docs/generated/AGENT_CAPABILITY_ROUTING.md +1 -1
  162. package/docs/generated/FLAG_LEXICON_BUDGETS.md +3 -3
  163. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +11 -7
  164. package/docs/performance/cli-transport-overhead.md +10 -2
  165. package/marketplace.json +2 -2
  166. package/package.json +10 -8
  167. package/packages/pm-beads/README.md +12 -6
  168. package/packages/pm-beads/docs/MIGRATION.md +53 -0
  169. package/packages/pm-beads/extensions/beads/index.ts +8 -0
  170. package/packages/pm-beads/extensions/beads/runtime.ts +671 -112
  171. package/packages/pm-beads/package.json +1 -1
  172. package/packages/pm-calendar/package.json +1 -1
  173. package/packages/pm-command-kit/package.json +1 -1
  174. package/packages/pm-digital-twin/package.json +1 -1
  175. package/packages/pm-governance-audit/package.json +1 -1
  176. package/packages/pm-guide-shell/package.json +1 -1
  177. package/packages/pm-kanban/package.json +1 -1
  178. package/packages/pm-lifecycle-hooks/package.json +1 -1
  179. package/packages/pm-linked-test-adapters/package.json +1 -1
  180. package/packages/pm-search-advanced/package.json +1 -1
  181. package/packages/pm-templates/package.json +1 -1
  182. package/packages/pm-todos/package.json +1 -1
  183. package/packages/pm-vcs/package.json +1 -1
  184. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  185. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  186. package/sdk/public-surface.json +430 -36
  187. package/dist/cli-bundle/chunks/chunk-ES25LX3D.js +0 -202
  188. package/dist/cli-bundle/chunks/chunk-FRDWWB6R.js +0 -3
  189. package/dist/cli-bundle/chunks/chunk-ICQ3RVIY.js +0 -2
  190. package/dist/cli-bundle/chunks/chunk-IV64RJVE.js +0 -13
  191. package/dist/cli-bundle/chunks/chunk-MVYLQ67M.js +0 -3
  192. package/dist/cli-bundle/chunks/register-setup-GLZAHLVI.js +0 -2
  193. package/dist/cli-bundle/focused-chunks/chunk-4XNH2HM7.js +0 -2
  194. package/dist/cli-bundle/focused-chunks/chunk-7I23XGWO.js +0 -2
  195. package/dist/cli-bundle/focused-chunks/chunk-7YCDTCBC.js +0 -2
  196. package/dist/cli-bundle/focused-chunks/chunk-LMKG3DFE.js +0 -5
@@ -0,0 +1,211 @@
1
+ {
2
+ "version": 2,
3
+ "tasks": [
4
+ {
5
+ "id": "context-bootstrap",
6
+ "description": "Orient in a scaled workspace and inspect the canonical focus item.",
7
+ "steps": [
8
+ {
9
+ "id": "triage",
10
+ "args": ["list", "--for", "triage", "--limit", "2"],
11
+ "expected_exit_code": 0,
12
+ "expected_output_kind": "collection",
13
+ "expected_accounting_mode": "self_reported",
14
+ "required_fields": ["items"]
15
+ },
16
+ {
17
+ "id": "orient",
18
+ "args": ["context", "--for", "orient", "--limit", "5"],
19
+ "expected_exit_code": 0,
20
+ "expected_output_kind": "diagnostic",
21
+ "expected_accounting_mode": "self_reported",
22
+ "required_fields": ["summary.active_items", "hierarchy", "activity"]
23
+ },
24
+ {
25
+ "id": "inspect",
26
+ "args": ["get", "$ANCHOR_ID", "--for", "inspect"],
27
+ "expected_exit_code": 0,
28
+ "expected_output_kind": "entity",
29
+ "expected_accounting_mode": "self_reported",
30
+ "required_fields": ["item.id"]
31
+ }
32
+ ]
33
+ },
34
+ {
35
+ "id": "closed-domain-recovery",
36
+ "description": "Reject an invalid context intent and execute the advertised shell-free retry.",
37
+ "steps": [
38
+ {
39
+ "id": "refuse-intent",
40
+ "args": ["get", "$ANCHOR_ID", "--for", "invalid-agent-intent"],
41
+ "expected_exit_code": 2,
42
+ "expected_output_kind": "refusal",
43
+ "expected_accounting_mode": "self_reported",
44
+ "required_fields": ["code", "refusal", "recovery"],
45
+ "expected_error_code": "unknown_context_intent",
46
+ "expected_refusal_surface": "--for"
47
+ },
48
+ {
49
+ "id": "retry-intent",
50
+ "args": ["get", "$ANCHOR_ID", "--for", "inspect"],
51
+ "expected_exit_code": 0,
52
+ "expected_output_kind": "entity",
53
+ "expected_accounting_mode": "self_reported",
54
+ "required_fields": ["item.id"],
55
+ "recovery_for": "refuse-intent"
56
+ }
57
+ ]
58
+ },
59
+ {
60
+ "id": "unknown-option-recovery",
61
+ "description": "Identify an unsupported option after valid flags and continue with the corrected command.",
62
+ "steps": [
63
+ {
64
+ "id": "refuse-option",
65
+ "args": [
66
+ "search",
67
+ "agent task",
68
+ "--status",
69
+ "open",
70
+ "--limit",
71
+ "5",
72
+ "--include-body"
73
+ ],
74
+ "expected_exit_code": 2,
75
+ "expected_output_kind": "refusal",
76
+ "expected_accounting_mode": "independent_transport",
77
+ "required_fields": ["code", "refusal", "recovery"],
78
+ "expected_error_code": "unknown_option",
79
+ "expected_refusal_surface": "--include-body"
80
+ },
81
+ {
82
+ "id": "retry-option",
83
+ "args": ["search", "agent task", "--status", "open", "--limit", "5"],
84
+ "expected_exit_code": 0,
85
+ "expected_output_kind": "collection",
86
+ "expected_accounting_mode": "self_reported",
87
+ "required_fields": ["items"],
88
+ "recovery_for": "refuse-option"
89
+ }
90
+ ]
91
+ },
92
+ {
93
+ "id": "lifecycle-mutation",
94
+ "description": "Create, inspect, close, and confirm a project item through public CLI receipts.",
95
+ "steps": [
96
+ {
97
+ "id": "create",
98
+ "args": [
99
+ "create",
100
+ "--id",
101
+ "$LIFECYCLE_ID",
102
+ "--title",
103
+ "Transcript lifecycle item",
104
+ "--description",
105
+ "Golden multi-step lifecycle task",
106
+ "--type",
107
+ "Task",
108
+ "--status",
109
+ "open",
110
+ "--create-mode",
111
+ "progressive"
112
+ ],
113
+ "expected_exit_code": 0,
114
+ "expected_output_kind": "mutation_receipt",
115
+ "expected_accounting_mode": "self_reported",
116
+ "required_fields": ["id", "changed_field_count"]
117
+ },
118
+ {
119
+ "id": "inspect-open",
120
+ "args": ["get", "$LIFECYCLE_ID", "--for", "inspect"],
121
+ "expected_exit_code": 0,
122
+ "expected_output_kind": "entity",
123
+ "expected_accounting_mode": "self_reported",
124
+ "required_fields": ["item.id", "item.status"],
125
+ "expected_field_values": { "item.status": "open" }
126
+ },
127
+ {
128
+ "id": "close",
129
+ "args": ["close", "$LIFECYCLE_ID", "Golden task completed"],
130
+ "expected_exit_code": 0,
131
+ "expected_output_kind": "mutation_receipt",
132
+ "expected_accounting_mode": "self_reported",
133
+ "required_fields": ["id", "status", "close_reason"]
134
+ },
135
+ {
136
+ "id": "inspect-closed",
137
+ "args": ["get", "$LIFECYCLE_ID", "--for", "inspect"],
138
+ "expected_exit_code": 0,
139
+ "expected_output_kind": "entity",
140
+ "expected_accounting_mode": "self_reported",
141
+ "required_fields": ["item.id", "item.status"],
142
+ "expected_field_values": { "item.status": "closed" }
143
+ }
144
+ ]
145
+ },
146
+ {
147
+ "id": "bulk-effect-outcomes",
148
+ "description": "Preserve successful partial-effect and no-effect outcomes across a bulk lifecycle task.",
149
+ "steps": [
150
+ {
151
+ "id": "create-bulk-target",
152
+ "args": [
153
+ "create",
154
+ "--id",
155
+ "$BULK_ID",
156
+ "--title",
157
+ "Transcript bulk effect target",
158
+ "--description",
159
+ "Golden bulk outcome transcript target",
160
+ "--type",
161
+ "Task",
162
+ "--status",
163
+ "open",
164
+ "--create-mode",
165
+ "progressive"
166
+ ],
167
+ "expected_exit_code": 0,
168
+ "expected_output_kind": "mutation_receipt",
169
+ "expected_accounting_mode": "self_reported",
170
+ "required_fields": ["id", "status", "changed_field_count"]
171
+ },
172
+ {
173
+ "id": "partial-effect",
174
+ "args": [
175
+ "close-many",
176
+ "--ids",
177
+ "$BULK_ID,pm-transcript-missing",
178
+ "--reason",
179
+ "Golden partial-effect transcript",
180
+ "--validate-close",
181
+ "off",
182
+ "--no-checkpoint"
183
+ ],
184
+ "expected_exit_code": 7,
185
+ "expected_output_kind": "collection",
186
+ "expected_accounting_mode": "self_reported",
187
+ "required_fields": ["rows", "outcome", "exit_code"],
188
+ "expected_field_values": { "outcome": "partial_effect" }
189
+ },
190
+ {
191
+ "id": "no-effect",
192
+ "args": [
193
+ "close-many",
194
+ "--ids",
195
+ "$BULK_ID",
196
+ "--reason",
197
+ "Golden no-effect transcript",
198
+ "--validate-close",
199
+ "off",
200
+ "--no-checkpoint"
201
+ ],
202
+ "expected_exit_code": 6,
203
+ "expected_output_kind": "collection",
204
+ "expected_accounting_mode": "self_reported",
205
+ "required_fields": ["rows", "outcome", "exit_code"],
206
+ "expected_field_values": { "outcome": "no_effect" }
207
+ }
208
+ ]
209
+ }
210
+ ]
211
+ }
@@ -14,4 +14,4 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
14
14
  | graph | `graph`, `deps`, `plan` |
15
15
  | quality | `test`, `test-all`, `validate`, `assurance`, `contracts` |
16
16
  | automation | `meet`, `event`, `remind` |
17
- | extensions | `extension`, `package`, `packages`, `install`, `upgrade` |
17
+ | extensions | `package` |
@@ -48,9 +48,9 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
48
48
  | `close-many` | lifecycle | 72 | 72 |
49
49
  | `delete` | lifecycle | 24 | 24 |
50
50
  | `append` | evidence | 24 | 24 |
51
- | `comments` | evidence | 30 | 30 |
52
- | `notes` | evidence | 34 | 34 |
53
- | `learnings` | evidence | 26 | 26 |
51
+ | `comments` | evidence | 31 | 31 |
52
+ | `notes` | evidence | 35 | 35 |
53
+ | `learnings` | evidence | 27 | 27 |
54
54
  | `files` | evidence | 39 | 39 |
55
55
  | `docs` | evidence | 30 | 30 |
56
56
  | `deps` | graph | 32 | 32 |
@@ -4,14 +4,14 @@ Tracker: `pm-f05lsg`.
4
4
 
5
5
  Every catalog code is listed. An `uncovered` row is an explicit closure obligation, never an omission or implied approval.
6
6
 
7
- - Catalog error codes: 343
8
- - Executable error codes: 18
7
+ - Catalog error codes: 347
8
+ - Executable error codes: 19
9
9
  - Executable-code ratchet floor: 18
10
10
  - Required executable canonical codes: `bulk_ids_input_empty`, `bulk_ids_input_missing_path`, `bulk_ids_input_unreadable`, `invalid_argument_value`, `manifest_unknown_key`, `missing_lifecycle_target`, `missing_required_argument`, `no_version_bounds_declared`, `projection_options_mutually_exclusive`, `tracker_not_initialized`, `tracker_root_missing`, `tracker_root_not_directory`, `tracker_root_unreadable`, `unknown_context_intent`, `unknown_field_projection`, `unknown_option`, `unknown_subcommand`
11
- - Uncovered error codes: 325
12
- - Coverage fraction: 0.052478
13
- - Closed-domain probes: 18
14
- - Grammar probes: 95
11
+ - Uncovered error codes: 328
12
+ - Coverage fraction: 0.054755
13
+ - Closed-domain probes: 19
14
+ - Grammar probes: 94
15
15
 
16
16
  | Error code | Canonical code | Disposition | Evidence kinds | Probe count |
17
17
  | --- | --- | --- | --- | --- |
@@ -25,6 +25,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
25
25
  | `ambiguous_option_combination` | `ambiguous_option_combination` | uncovered | none | 0 |
26
26
  | `annotation_alias_conflict` | `annotation_alias_conflict` | uncovered | none | 0 |
27
27
  | `annotation_flag_like_value` | `annotation_flag_like_value` | uncovered | none | 0 |
28
+ | `annotation_if_absent_without_append` | `annotation_if_absent_without_append` | uncovered | none | 0 |
28
29
  | `annotation_message_without_text` | `annotation_message_without_text` | uncovered | none | 0 |
29
30
  | `annotation_transposed_subcommand` | `annotation_transposed_subcommand` | uncovered | none | 0 |
30
31
  | `append_empty_body` | `append_empty_body` | uncovered | none | 0 |
@@ -198,7 +199,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
198
199
  | `missing_observed_signature` | `missing_observed_signature` | uncovered | none | 0 |
199
200
  | `missing_parameter_alias` | `missing_parameter_alias` | uncovered | none | 0 |
200
201
  | `missing_probe` | `missing_probe` | uncovered | none | 0 |
201
- | `missing_required_argument` | `missing_required_argument` | executable | grammar | 58 |
202
+ | `missing_required_argument` | `missing_required_argument` | executable | grammar | 57 |
202
203
  | `missing_required_option` | `missing_required_option` | uncovered | none | 0 |
203
204
  | `missing_suggested_retry` | `missing_suggested_retry` | uncovered | none | 0 |
204
205
  | `missing_suggested_retry_args` | `missing_suggested_retry_args` | uncovered | none | 0 |
@@ -213,11 +214,14 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
213
214
  | `no_update_fields` | `no_update_fields` | uncovered | none | 0 |
214
215
  | `no_version_bounds_declared` | `no_version_bounds_declared` | executable | owned_state | 1 |
215
216
  | `non_refusal_exit` | `non_refusal_exit` | uncovered | none | 0 |
217
+ | `npm_package_archive_missing` | `npm_package_archive_missing` | uncovered | none | 0 |
218
+ | `npm_package_archive_unsafe` | `npm_package_archive_unsafe` | uncovered | none | 0 |
216
219
  | `npm_package_not_found` | `npm_package_not_found` | uncovered | none | 0 |
217
220
  | `ownership_conflict` | `ownership_conflict` | uncovered | none | 0 |
218
221
  | `ownership_dependency_bypass_restricted_options` | `ownership_dependency_bypass_restricted_options` | uncovered | none | 0 |
219
222
  | `ownership_metadata_bypass_restricted_options` | `ownership_metadata_bypass_restricted_options` | uncovered | none | 0 |
220
223
  | `package_spec_empty` | `package_spec_empty` | uncovered | none | 0 |
224
+ | `package_upgrade_modes_mutually_exclusive` | `package_upgrade_modes_mutually_exclusive` | executable | closed_domain | 1 |
221
225
  | `positional_shape_budget_exceeded` | `positional_shape_budget_exceeded` | uncovered | none | 0 |
222
226
  | `positional_signature_mismatch` | `positional_signature_mismatch` | uncovered | none | 0 |
223
227
  | `profile_name_empty` | `profile_name_empty` | uncovered | none | 0 |
@@ -1,12 +1,20 @@
1
1
  # CLI transport overhead
2
2
 
3
- Tracked by [pm-yse5dt](../../.agents/pm/tasks/pm-yse5dt.toon).
3
+ Tracked by [pm-yse5dt](../../.agents/pm/tasks/pm-yse5dt.toon), with RSS
4
+ admission reliability owned by
5
+ [pm-pz49xc](../../.agents/pm/issues/pm-pz49xc.toon).
4
6
 
5
7
  Each result starts from a fresh isolated workspace containing exactly one item.
6
8
  The command runs in a fresh Node v26.5.0 process on
7
9
  linux/x64; setup and fixture generation are
8
10
  outside the timed interval. Short local gates use the best observed latency,
9
- while the report retains p50 and p95 evidence.
11
+ while the report retains p50 and p95 evidence. RSS admission uses the measured
12
+ median so one page-level outlier cannot false-fail the gate; the maximum remains
13
+ in the report as diagnostic evidence. Every post-warmup RSS sample must be a
14
+ finite measurement; an unavailable sample makes the admission median unavailable
15
+ and fails closed when a budget exists. Admission adds a fixed 512 KiB noise margin
16
+ without changing the committed budget; a majority persistent increase beyond
17
+ that bounded margin still fails.
10
18
 
11
19
  | Command | best | p50 | p95 |
12
20
  | --------- | -----: | -----: | -----: |
package/marketplace.json CHANGED
@@ -6,14 +6,14 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.",
9
- "version": "2026.8.26"
9
+ "version": "2026.8.28"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "pm-claude",
14
14
  "source": "./plugins/pm-claude",
15
15
  "description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
16
- "version": "2026.8.26",
16
+ "version": "2026.8.28",
17
17
  "author": {
18
18
  "name": "unbrained",
19
19
  "url": "https://github.com/unbraind/pm-cli"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-cli",
3
- "version": "2026.8.26",
3
+ "version": "2026.8.28",
4
4
  "description": "Git-native project management CLI for humans and agents.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.10.0",
@@ -104,6 +104,7 @@
104
104
  "scripts/finalize-build.mjs",
105
105
  "scripts/install.sh",
106
106
  "scripts/install.ps1",
107
+ ".agents/skills/**",
107
108
  "scripts/prepare-build-cache.mjs",
108
109
  "marketplace.json"
109
110
  ],
@@ -121,7 +122,7 @@
121
122
  "lint:complexity:baseline": "eslint . --suppress-rule complexity --suppress-rule sonarjs/cognitive-complexity",
122
123
  "lint:duplicates": "jscpd --config .jscpd.json",
123
124
  "lint:codefactor": "pnpm quality:static",
124
- "quality:static": "pnpm build && node scripts/contracts-snapshot.mjs --check && node scripts/generate-agent-capability-surfaces.mjs --check && node scripts/generate-error-code-catalog.mjs --check && node scripts/release/repository-assurance.mjs repository-static-quality --trigger ci --json && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/surface-replication-gate.mjs && node scripts/release/command-grammar-gate.mjs && node scripts/release/flag-invocation-parity.mjs && node scripts/release/flag-lexicon-gate.mjs && node scripts/release/refusal-closure-gate.mjs && pnpm quality:mcp-deprecations && node dist/cli.js assurance run tracker-context-quality --trigger ci --dry-run --json --output-budget unbounded && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check && node dist/cli.js assurance run graph-composition --trigger ci --dry-run --json --output-budget unbounded && node dist/cli.js assurance run record-integrity --trigger ci --dry-run --json --output-budget unbounded",
125
+ "quality:static": "pnpm build && node scripts/contracts-snapshot.mjs --check && node scripts/generate-agent-capability-surfaces.mjs --check && node scripts/generate-error-code-catalog.mjs --check && node scripts/release/repository-assurance.mjs repository-static-quality --trigger ci --json && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/surface-replication-gate.mjs && node scripts/release/command-grammar-gate.mjs && node scripts/release/flag-invocation-parity.mjs && node scripts/release/flag-lexicon-gate.mjs && node scripts/release/refusal-closure-gate.mjs && node scripts/release/agent-task-token-gate.mjs && pnpm quality:mcp-deprecations && node dist/cli.js assurance run tracker-context-quality --trigger ci --dry-run --json --output-budget unbounded && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check && node dist/cli.js assurance run graph-composition --trigger ci --dry-run --json --output-budget unbounded && node dist/cli.js assurance run record-integrity --trigger ci --dry-run --json --output-budget unbounded",
125
126
  "quality:command-grammar": "pnpm build && node scripts/release/command-grammar-gate.mjs && node scripts/release/flag-invocation-parity.mjs && node scripts/release/flag-lexicon-gate.mjs",
126
127
  "quality:recovery-closure": "pnpm build && node scripts/release/refusal-closure-gate.mjs",
127
128
  "quality:token-budget": "node scripts/release/token-budget-gate.mjs",
@@ -167,7 +168,7 @@
167
168
  "version:check": "node scripts/release-version.mjs check && node scripts/sync-versions.mjs check",
168
169
  "version:next": "node scripts/release-version.mjs next",
169
170
  "version:sync": "node scripts/sync-versions.mjs apply",
170
- "changelog:pm:install": "node dist/cli.js install npm:pm-changelog --project",
171
+ "changelog:pm:install": "node dist/cli.js package install npm:pm-changelog --project",
171
172
  "changelog:pm": "pnpm changelog:pm:install && node dist/cli.js changelog generate --output CHANGELOG.md --title \"Changelog\" --mode replace --all-release-tags --status closed --exclude-tag changelog-exclude --item-url-base https://github.com/unbraind/pm-cli/blob/main/.agents/pm",
172
173
  "changelog:pm:check": "pnpm changelog:pm:install && node dist/cli.js changelog generate --output CHANGELOG.md --title \"Changelog\" --mode replace --all-release-tags --status closed --exclude-tag changelog-exclude --item-url-base https://github.com/unbraind/pm-cli/blob/main/.agents/pm --check",
173
174
  "release:notes": "node scripts/generate-release-notes.mjs",
@@ -212,17 +213,19 @@
212
213
  "fast-glob": "^3.3.3",
213
214
  "fast-json-patch": "^3.1.1",
214
215
  "npm-package-arg": "^13.0.2",
215
- "tar": "7.5.22"
216
+ "tar": "7.5.22",
217
+ "yaml": "^2.9.0"
216
218
  },
217
219
  "devDependencies": {
220
+ "@modelcontextprotocol/ext-apps": "1.7.5",
218
221
  "@codspeed/vitest-plugin": "^5.7.1",
219
222
  "@eslint/js": "^10.0.1",
220
223
  "@sentry/cli": "^3.6.2",
221
- "@types/node": "^26.2.0",
224
+ "@types/node": "^26.3.0",
222
225
  "@types/npm-package-arg": "^6.1.4",
223
226
  "@vitest/coverage-v8": "^4.1.11",
224
227
  "esbuild": "0.28.2",
225
- "eslint": "^10.9.0",
228
+ "eslint": "^10.9.1",
226
229
  "eslint-plugin-sonarjs": "^4.2.0",
227
230
  "eslint-plugin-unicorn": "^73.0.0",
228
231
  "fast-check": "^4.9.0",
@@ -231,7 +234,6 @@
231
234
  "tsx": "^4.23.12",
232
235
  "typescript": "^6.0.3",
233
236
  "typescript-eslint": "^8.68.0",
234
- "vitest": "^4.1.11",
235
- "yaml": "^2.9.0"
237
+ "vitest": "^4.1.11"
236
238
  }
237
239
  }
@@ -1,10 +1,16 @@
1
1
  # pm Beads Package
2
2
 
3
- First-party pm package for importing Beads JSONL records.
3
+ First-party pm package for lossless Beads migration through public pm SDK
4
+ contracts. The importer preserves issue identity, comments, structured events,
5
+ relationships, labels, and terminal closure evidence before reporting a
6
+ complete count-parity receipt.
4
7
 
5
- ```bash
6
- pm install ./packages/pm-beads --project
7
- pm beads import --file .beads/issues.jsonl
8
- ```
8
+ ## Migration
9
9
 
10
- The package exposes the `beads import` extension command through the `pm.extensions` package manifest. Runtime sources are authored in TypeScript and shipped with JavaScript entry artifacts for Node extension loading.
10
+ Use a current portable backup for lossless relational migration. The focused
11
+ [migration guide](docs/MIGRATION.md) covers installation, source validation,
12
+ ID preservation, legacy exports, parity receipts, and post-import checks.
13
+
14
+ The package exposes the `beads import` extension command through the
15
+ `pm.extensions` package manifest. Runtime sources are TypeScript and use only
16
+ the published `@unbrained/pm-cli/sdk` surface.
@@ -0,0 +1,53 @@
1
+ # Beads Migration
2
+
3
+ Tracker: [pm-tpwde6](../../../.agents/pm/issues/pm-tpwde6.toon)
4
+
5
+ ## Lossless portable-backup migration
6
+
7
+ Install the package, create a current Beads portable backup, and import the
8
+ backup directory without modifying the source project:
9
+
10
+ ```bash
11
+ pm package install ./packages/pm-beads --project
12
+ bd backup --force
13
+ pm beads import --backup-dir .beads/backup --preserve-source-ids
14
+ ```
15
+
16
+ Current Beads backups contain relational `issues.jsonl`, `comments.jsonl`,
17
+ `events.jsonl`, `dependencies.jsonl`, and `labels.jsonl` files plus
18
+ `backup_state.json`. The importer validates those files, their foreign keys,
19
+ the backup counts, source-ID collisions, and every issue before the first pm
20
+ write. Structural source failures therefore cannot leave a partially imported
21
+ tracker; each later item commit also retains pm's normal lock and rollback
22
+ guarantees.
23
+
24
+ Successful output includes `complete: true`, source and imported counts for
25
+ each relation, and an exact `id_mapping`. Source IDs are preserved only when
26
+ they are safe path identifiers and do not collide case-insensitively with one
27
+ another or with the target tracker. Comments remain comments, Beads events are
28
+ stored as structured JSON notes, dependencies retain their source identity,
29
+ label text is normalized to canonical lowercase pm tags, and a
30
+ terminal Beads close reason becomes the pm resolution when no explicit source
31
+ resolution exists.
32
+
33
+ Verify representative records and the final tracker after import:
34
+
35
+ ```bash
36
+ pm get Tokenwerk-A1
37
+ pm comments Tokenwerk-A1
38
+ pm validate --check-resolution --check-history-drift
39
+ ```
40
+
41
+ ## Legacy single-file import
42
+
43
+ Older JSON/JSONL exports with embedded `comments`, `events`, `dependencies`,
44
+ and `labels` remain supported:
45
+
46
+ ```bash
47
+ pm beads import --file .beads/issues.jsonl
48
+ ```
49
+
50
+ A current plain `bd export` that advertises `comment_count` but omits comment
51
+ bodies is intentionally rejected before any write. Run `bd backup --force` and
52
+ use `--backup-dir` instead so the migration cannot silently lose discussion or
53
+ event history.
@@ -37,6 +37,7 @@ function toBeadsImportOptions(
37
37
  ): BeadsImportOptions {
38
38
  return {
39
39
  file: asOptionalString(options.file),
40
+ backupDir: asOptionalString(options.backupDir),
40
41
  author: global.author,
41
42
  message: asOptionalString(options.message),
42
43
  preserveSourceIds: asBoolean(options.preserveSourceIds),
@@ -69,6 +70,13 @@ export function activate(api: ExtensionApi): void {
69
70
  value_type: "string",
70
71
  description: "Path to the Beads JSONL source file.",
71
72
  },
73
+ {
74
+ long: "--backup-dir",
75
+ value_name: "path",
76
+ value_type: "string",
77
+ description:
78
+ "Path to a complete bd portable-backup directory with issue, event, comment, dependency, label, and count files.",
79
+ },
72
80
  {
73
81
  long: "--message",
74
82
  value_name: "text",