@unbrained/pm-cli 2026.9.7 → 2026.9.9

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 (746) hide show
  1. package/.agents/skills/pm-developer/SKILL.md +12 -4
  2. package/.agents/skills/pm-developer/references/MULTI_AGENT_MERGE.md +19 -10
  3. package/.agents/skills/pm-extensions/SKILL.md +6 -0
  4. package/.agents/skills/pm-sdk/SKILL.md +11 -2
  5. package/.agents/skills/pm-user/SKILL.md +7 -2
  6. package/.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md +95 -0
  7. package/.claude-plugin/marketplace.json +2 -2
  8. package/CHANGELOG.md +231 -182
  9. package/dist/cli/after-command-context-usage.js +1 -48
  10. package/dist/cli/argv-utils.js +1 -40
  11. package/dist/cli/bootstrap-args.js +1 -9
  12. package/dist/cli/bundle-integrity.js +2 -110
  13. package/dist/cli/commander-usage.js +11 -771
  14. package/dist/cli/commands/activity.js +1 -9
  15. package/dist/cli/commands/aggregate.js +1 -5
  16. package/dist/cli/commands/append.js +1 -5
  17. package/dist/cli/commands/claim.js +1 -5
  18. package/dist/cli/commands/close-many.js +1 -5
  19. package/dist/cli/commands/close.js +1 -9
  20. package/dist/cli/commands/comments.js +1 -5
  21. package/dist/cli/commands/config.js +1 -9
  22. package/dist/cli/commands/context.js +1 -9
  23. package/dist/cli/commands/contracts.js +1 -5
  24. package/dist/cli/commands/copy.js +1 -9
  25. package/dist/cli/commands/create.js +1 -9
  26. package/dist/cli/commands/delete.js +1 -9
  27. package/dist/cli/commands/deps.js +1 -9
  28. package/dist/cli/commands/docs.js +1 -9
  29. package/dist/cli/commands/duplicates.js +1 -9
  30. package/dist/cli/commands/eval.js +1 -9
  31. package/dist/cli/commands/extension/describe.js +1 -5
  32. package/dist/cli/commands/extension/scaffold.js +1 -5
  33. package/dist/cli/commands/extension/shared.js +1 -5
  34. package/dist/cli/commands/extension.js +1 -9
  35. package/dist/cli/commands/files.js +1 -9
  36. package/dist/cli/commands/focus.js +1 -9
  37. package/dist/cli/commands/gc.js +1 -9
  38. package/dist/cli/commands/get.js +1 -9
  39. package/dist/cli/commands/graph.js +1 -10
  40. package/dist/cli/commands/health.js +1 -9
  41. package/dist/cli/commands/history-compact.js +1 -10
  42. package/dist/cli/commands/history-redact.js +1 -11
  43. package/dist/cli/commands/history-repair.js +1 -10
  44. package/dist/cli/commands/history.js +1 -5
  45. package/dist/cli/commands/index.js +1 -58
  46. package/dist/cli/commands/init-agent-guidance.js +1 -9
  47. package/dist/cli/commands/init.js +1 -9
  48. package/dist/cli/commands/learnings.js +1 -5
  49. package/dist/cli/commands/lifecycle-transitions.js +1 -5
  50. package/dist/cli/commands/list.js +1 -9
  51. package/dist/cli/commands/merge.js +1 -11
  52. package/dist/cli/commands/next.js +1 -9
  53. package/dist/cli/commands/notes.js +1 -5
  54. package/dist/cli/commands/plan.js +1 -9
  55. package/dist/cli/commands/profile.js +1 -9
  56. package/dist/cli/commands/restore.js +1 -9
  57. package/dist/cli/commands/scheduling-shortcuts.js +1 -9
  58. package/dist/cli/commands/schema.js +1 -10
  59. package/dist/cli/commands/search.js +1 -9
  60. package/dist/cli/commands/stats.js +1 -9
  61. package/dist/cli/commands/telemetry.js +1 -9
  62. package/dist/cli/commands/test-all.js +1 -9
  63. package/dist/cli/commands/test-runs.js +1 -9
  64. package/dist/cli/commands/test.js +1 -9
  65. package/dist/cli/commands/update-many.js +1 -5
  66. package/dist/cli/commands/update.js +1 -9
  67. package/dist/cli/commands/upgrade.js +1 -5
  68. package/dist/cli/commands/validate.js +1 -15
  69. package/dist/cli/context-intent-invocation.js +1 -20
  70. package/dist/cli/description-stdin.js +1 -17
  71. package/dist/cli/error-guidance.js +1 -1353
  72. package/dist/cli/extension-command-help.js +5 -636
  73. package/dist/cli/extension-command-options.js +1 -427
  74. package/dist/cli/extension-recovery.js +1 -126
  75. package/dist/cli/help-content.js +2 -1001
  76. package/dist/cli/help-json-payload.js +4 -570
  77. package/dist/cli/main.d.ts +4 -0
  78. package/dist/cli/main.js +5 -2573
  79. package/dist/cli/migration-gates.js +1 -289
  80. package/dist/cli/public.js +1 -20
  81. package/dist/cli/register-annotations.js +1 -270
  82. package/dist/cli/register-assurance.js +1 -62
  83. package/dist/cli/register-files-lookup.js +1 -56
  84. package/dist/cli/register-history-activity.d.ts +8 -0
  85. package/dist/cli/register-history-activity.js +2 -0
  86. package/dist/cli/register-history-author.js +1 -38
  87. package/dist/cli/register-history-maintenance.d.ts +9 -0
  88. package/dist/cli/register-history-maintenance.js +2 -0
  89. package/dist/cli/register-list-query.js +10 -943
  90. package/dist/cli/register-mutation-options.js +1 -9
  91. package/dist/cli/register-mutation.d.ts +0 -5
  92. package/dist/cli/register-mutation.js +19 -1893
  93. package/dist/cli/register-operations.js +1 -920
  94. package/dist/cli/register-setup.js +1 -716
  95. package/dist/cli/register-structured-mutation.js +1 -196
  96. package/dist/cli/registration-helpers.js +1 -5
  97. package/dist/cli/runtime-compatibility-boundary.js +4 -42
  98. package/dist/cli/schema-registration-helpers.js +1 -73
  99. package/dist/cli/search-refresh.js +1 -13
  100. package/dist/cli/stats-analytics-json.js +1 -68
  101. package/dist/cli/telemetry-flush.js +1 -10
  102. package/dist/cli-bundle/bundle-manifest.json +164 -156
  103. package/dist/cli-bundle/chunks/{chunk-NPN5I67J.js → chunk-3IPRM75M.js} +3 -3
  104. package/dist/cli-bundle/chunks/chunk-4VL5P22L.js +2 -0
  105. package/dist/cli-bundle/chunks/chunk-AAFBV3U3.js +29 -0
  106. package/dist/cli-bundle/chunks/chunk-D3YVILJJ.js +20 -0
  107. package/dist/cli-bundle/chunks/{chunk-WYRZZ5ZE.js → chunk-DEZPZOQ7.js} +2 -2
  108. package/dist/cli-bundle/chunks/chunk-ECBLPN7B.js +3 -0
  109. package/dist/cli-bundle/chunks/chunk-J6ERHBV2.js +235 -0
  110. package/dist/cli-bundle/chunks/chunk-JUNJ5EKI.js +2 -0
  111. package/dist/cli-bundle/chunks/chunk-L5RCDKQ2.js +2 -0
  112. package/dist/cli-bundle/chunks/chunk-NSAPNEYH.js +2 -0
  113. package/dist/cli-bundle/chunks/chunk-OHNLSGGV.js +79 -0
  114. package/dist/cli-bundle/chunks/chunk-WQKMSFBV.js +5 -0
  115. package/dist/cli-bundle/chunks/{chunk-BAX2BYUW.js → chunk-XZ6T7YPP.js} +256 -150
  116. package/dist/cli-bundle/chunks/{chunk-JT6XF6GE.js → chunk-Z3XVXUVF.js} +4 -4
  117. package/dist/cli-bundle/chunks/register-list-query-UIHRCS6D.js +11 -0
  118. package/dist/cli-bundle/chunks/register-mutation-WHWMGRVX.js +20 -0
  119. package/dist/cli-bundle/chunks/register-operations-64YZYTC5.js +2 -0
  120. package/dist/cli-bundle/chunks/register-setup-PERI45EM.js +2 -0
  121. package/dist/cli-bundle/focused-chunks/chunk-2W4XIYOB.js +2 -0
  122. package/dist/cli-bundle/focused-chunks/chunk-2WSBXIGF.js +12 -0
  123. package/dist/cli-bundle/focused-chunks/chunk-5FHTCOHS.js +3 -0
  124. package/dist/cli-bundle/focused-chunks/chunk-7N6DOREF.js +26 -0
  125. package/dist/cli-bundle/focused-chunks/{chunk-3BZEOXLT.js → chunk-7PC4R5QB.js} +2 -2
  126. package/dist/cli-bundle/focused-chunks/chunk-BUCJUZVG.js +6 -0
  127. package/dist/cli-bundle/focused-chunks/chunk-FE3BABLJ.js +2 -0
  128. package/dist/cli-bundle/focused-chunks/chunk-IWITF53W.js +2 -0
  129. package/dist/cli-bundle/focused-chunks/chunk-OQUGRHKV.js +10 -0
  130. package/dist/cli-bundle/focused-chunks/{chunk-M6PBRFSH.js → chunk-PNKIANFZ.js} +2 -2
  131. package/dist/cli-bundle/focused-chunks/{chunk-LIJIA4TY.js → chunk-QQQ4SAUO.js} +3 -3
  132. package/dist/cli-bundle/focused-chunks/chunk-TTYXF5YD.js +177 -0
  133. package/dist/cli-bundle/focused-chunks/chunk-XNR3DM6J.js +2 -0
  134. package/dist/cli-bundle/focused-chunks/chunk-XSS3APUF.js +9 -0
  135. package/dist/cli-bundle/focused-chunks/chunk-YCDQ2N23.js +8 -0
  136. package/dist/cli-bundle/focused-chunks/chunk-YJUXGS57.js +20 -0
  137. package/dist/cli-bundle/focused-chunks/chunk-ZTCE4UO6.js +58 -0
  138. package/dist/cli-bundle/main.js +20 -20
  139. package/dist/cli-bundle/sdk-authoring.js +1 -1
  140. package/dist/cli-bundle/sdk-contracts.js +2 -2
  141. package/dist/cli-bundle/sdk-core.js +37 -37
  142. package/dist/cli-bundle/sdk-governance.js +1 -1
  143. package/dist/cli-bundle/sdk-graph.js +1 -1
  144. package/dist/cli-bundle/sdk-merge.js +42 -42
  145. package/dist/cli-bundle/sdk-query.js +1 -1
  146. package/dist/cli-bundle/sdk-runtime.js +1 -1
  147. package/dist/cli-bundle/sdk-testing.js +1 -1
  148. package/dist/cli-bundle/sdk.js +11 -11
  149. package/dist/cli.js +1 -104
  150. package/dist/core/checkpoint/checkpoint-gc.js +1 -169
  151. package/dist/core/checkpoint/mutation-checkpoint.js +2 -133
  152. package/dist/core/config/nested-settings.js +1 -534
  153. package/dist/core/config/positional-value.js +1 -109
  154. package/dist/core/diagnostics/remediation.js +1 -506
  155. package/dist/core/extensions/activation-summary-markdown.js +2 -145
  156. package/dist/core/extensions/activation-summary.js +1 -92
  157. package/dist/core/extensions/activation-transaction.js +1 -46
  158. package/dist/core/extensions/capability-usage.js +1 -173
  159. package/dist/core/extensions/command-hook-context.js +1 -13
  160. package/dist/core/extensions/command-metadata-contract.js +1 -22
  161. package/dist/core/extensions/command-visibility-tier.js +1 -29
  162. package/dist/core/extensions/contribution-inventory.js +1 -173
  163. package/dist/core/extensions/exporter-output-contract.js +1 -66
  164. package/dist/core/extensions/extension-candidate.js +1 -18
  165. package/dist/core/extensions/extension-capability-aliases.js +1 -158
  166. package/dist/core/extensions/extension-hook-runtime.js +1 -699
  167. package/dist/core/extensions/extension-policy.js +1 -599
  168. package/dist/core/extensions/extension-registries.js +1 -62
  169. package/dist/core/extensions/extension-runtime-helpers.js +1 -33
  170. package/dist/core/extensions/extension-types.js +1 -102
  171. package/dist/core/extensions/flag-definition-validation.js +1 -52
  172. package/dist/core/extensions/flag-value-types.js +1 -64
  173. package/dist/core/extensions/index.js +1 -526
  174. package/dist/core/extensions/item-field-types.js +1 -39
  175. package/dist/core/extensions/item-fields.js +1 -261
  176. package/dist/core/extensions/loader.js +1 -2223
  177. package/dist/core/extensions/manifest-schema.js +1 -69
  178. package/dist/core/extensions/module-graph-snapshot.js +1 -33
  179. package/dist/core/extensions/preflight-ownership.js +1 -41
  180. package/dist/core/extensions/registration-validation.js +1 -82
  181. package/dist/core/extensions/registration-values.js +1 -209
  182. package/dist/core/extensions/reserved-host-flags.js +1 -36
  183. package/dist/core/extensions/runtime-registrations.js +1 -67
  184. package/dist/core/extensions/service-ownership.js +1 -19
  185. package/dist/core/extensions/version-compat.js +1 -216
  186. package/dist/core/fs/fs-utils.js +2 -158
  187. package/dist/core/fs/host-environment-errors.js +1 -141
  188. package/dist/core/fs/index.js +1 -9
  189. package/dist/core/fs/path-utils.js +1 -17
  190. package/dist/core/governance/content-fields.js +1 -160
  191. package/dist/core/governance/issue-codes.js +1 -151
  192. package/dist/core/governance/metadata-coverage.js +1 -358
  193. package/dist/core/history/drift-cache.js +3 -72
  194. package/dist/core/history/drift-scan.js +1 -342
  195. package/dist/core/history/event-classification.js +1 -109
  196. package/dist/core/history/event-index.js +8 -784
  197. package/dist/core/history/history-compact-bulk.js +1 -104
  198. package/dist/core/history/history-diff.js +1 -158
  199. package/dist/core/history/history-rewrite.d.ts +6 -1
  200. package/dist/core/history/history-rewrite.js +1 -107
  201. package/dist/core/history/history-storage-stats.js +1 -102
  202. package/dist/core/history/history-stream-policy.js +1 -62
  203. package/dist/core/history/history.js +2 -617
  204. package/dist/core/history/identity.js +1 -30
  205. package/dist/core/history/index.js +1 -9
  206. package/dist/core/history/projection.js +1 -196
  207. package/dist/core/history/read.d.ts +9 -0
  208. package/dist/core/history/read.js +1 -57
  209. package/dist/core/history/replay.js +2 -439
  210. package/dist/core/history/version-address.js +1 -32
  211. package/dist/core/history/workspace-history.js +2 -433
  212. package/dist/core/io/body-file.js +1 -62
  213. package/dist/core/io/bulk-ids-input.js +1 -112
  214. package/dist/core/item/actionability.js +1 -327
  215. package/dist/core/item/dependency-reference.js +1 -20
  216. package/dist/core/item/id.js +1 -112
  217. package/dist/core/item/index.js +1 -12
  218. package/dist/core/item/item-format-version.js +1 -78
  219. package/dist/core/item/item-format.js +5 -1473
  220. package/dist/core/item/item-record.js +1 -23
  221. package/dist/core/item/item-type-definition.js +1 -133
  222. package/dist/core/item/parent-reference-policy.js +1 -57
  223. package/dist/core/item/parse.js +2 -603
  224. package/dist/core/item/plan-lifecycle.js +1 -19
  225. package/dist/core/item/priority.js +1 -61
  226. package/dist/core/item/sprint-release-format.js +1 -38
  227. package/dist/core/item/status-filter.js +1 -115
  228. package/dist/core/item/status.js +1 -43
  229. package/dist/core/item/toon-decode.js +1 -29
  230. package/dist/core/item/type-registry.js +1 -715
  231. package/dist/core/item/type-synonyms.js +1 -38
  232. package/dist/core/lock/index.js +1 -9
  233. package/dist/core/lock/lock-gc.js +1 -240
  234. package/dist/core/lock/lock.js +3 -590
  235. package/dist/core/output/mutation-projection.js +1 -217
  236. package/dist/core/output/output-control.js +1 -25
  237. package/dist/core/output/output.js +11 -494
  238. package/dist/core/output/query-summary.js +1 -58
  239. package/dist/core/output/tabular.js +1 -77
  240. package/dist/core/packages/manifest.js +1 -244
  241. package/dist/core/packages/root.js +1 -84
  242. package/dist/core/policy/workflow-policy-schema.d.ts +312 -0
  243. package/dist/core/policy/workflow-policy-schema.js +2 -0
  244. package/dist/core/policy/workflow-policy-store.d.ts +24 -0
  245. package/dist/core/policy/workflow-policy-store.js +2 -0
  246. package/dist/core/policy/workflow-policy.d.ts +139 -0
  247. package/dist/core/policy/workflow-policy.js +2 -0
  248. package/dist/core/profile/profile-describe.js +1 -83
  249. package/dist/core/profile/profile-lint.js +1 -415
  250. package/dist/core/profile/profile-plan.js +0 -0
  251. package/dist/core/profile/profile-presets.js +1 -370
  252. package/dist/core/reproducibility/context.js +1 -82
  253. package/dist/core/schema/fields-file.js +2 -288
  254. package/dist/core/schema/item-types-file.js +2 -296
  255. package/dist/core/schema/runtime-field-filters.js +1 -49
  256. package/dist/core/schema/runtime-field-values.js +1 -313
  257. package/dist/core/schema/runtime-schema.js +2 -826
  258. package/dist/core/schema/status-defs-file.js +2 -227
  259. package/dist/core/schema/status-token.js +1 -31
  260. package/dist/core/schema/type-inference.js +1 -95
  261. package/dist/core/schema/type-presets.js +1 -87
  262. package/dist/core/schema/type-workflows.js +1 -104
  263. package/dist/core/search/background-refresh.js +2 -286
  264. package/dist/core/search/bm25.js +1 -146
  265. package/dist/core/search/cache.js +2 -534
  266. package/dist/core/search/corpus.js +1 -311
  267. package/dist/core/search/embedding-batches.js +1 -163
  268. package/dist/core/search/eval.js +1 -225
  269. package/dist/core/search/http-client.js +1 -75
  270. package/dist/core/search/providers.js +1 -242
  271. package/dist/core/search/relevance.js +1 -244
  272. package/dist/core/search/semantic-defaults.js +1 -199
  273. package/dist/core/search/staleness.js +1 -30
  274. package/dist/core/search/vector-stores.js +2 -664
  275. package/dist/core/search/vectorization-metadata.js +1 -81
  276. package/dist/core/sentry/helpers.js +1 -272
  277. package/dist/core/sentry/instrument.js +1 -387
  278. package/dist/core/session/session-state.js +1 -260
  279. package/dist/core/shared/agent-session-context.js +1 -133
  280. package/dist/core/shared/author.js +1 -1172
  281. package/dist/core/shared/command-types.js +1 -4
  282. package/dist/core/shared/conflict-markers.js +1 -31
  283. package/dist/core/shared/constants.js +1 -405
  284. package/dist/core/shared/errors.js +1 -20
  285. package/dist/core/shared/html-entity-decode.js +1 -131
  286. package/dist/core/shared/index.js +1 -12
  287. package/dist/core/shared/item-metadata-contract.js +1 -89
  288. package/dist/core/shared/lazy-module.js +1 -16
  289. package/dist/core/shared/levenshtein.js +1 -61
  290. package/dist/core/shared/memo.js +1 -19
  291. package/dist/core/shared/numeric-parsers.js +1 -20
  292. package/dist/core/shared/option-alias-visibility.js +1 -67
  293. package/dist/core/shared/primitives.js +1 -127
  294. package/dist/core/shared/serial-queue.js +1 -79
  295. package/dist/core/shared/serialization.js +1 -210
  296. package/dist/core/shared/split-comma-list.js +1 -30
  297. package/dist/core/shared/text-normalization.js +1 -38
  298. package/dist/core/shared/time.js +1 -306
  299. package/dist/core/store/index.js +1 -12
  300. package/dist/core/store/item-format-migration.js +1 -125
  301. package/dist/core/store/item-metadata-cache.js +1 -1116
  302. package/dist/core/store/item-metadata-query-index.js +9 -394
  303. package/dist/core/store/item-metadata-read-work.js +1 -43
  304. package/dist/core/store/item-store.js +1 -693
  305. package/dist/core/store/paths.d.ts +1 -1
  306. package/dist/core/store/paths.js +1 -214
  307. package/dist/core/store/settings-read-cache.js +1 -85
  308. package/dist/core/store/settings-validator.d.ts +1 -0
  309. package/dist/core/store/settings-validator.js +1 -421
  310. package/dist/core/store/settings.js +3 -1309
  311. package/dist/core/store/tracker-preflight.js +1 -141
  312. package/dist/core/telemetry/consent.js +5 -108
  313. package/dist/core/telemetry/observability.js +1 -246
  314. package/dist/core/telemetry/runtime.js +4 -1988
  315. package/dist/core/test/background-runs.js +4 -945
  316. package/dist/core/test/item-test-run-tracking.js +1 -63
  317. package/dist/core/test/run-selectors.js +1 -120
  318. package/dist/core/validate/estimate-defaults.js +1 -89
  319. package/dist/core/validate/fix-planning.js +1 -189
  320. package/dist/core/validate/linked-artifact-reference.js +1 -36
  321. package/dist/core/validate/missing-by-type.js +1 -34
  322. package/dist/core/validate/missing-link-owners.js +1 -95
  323. package/dist/core/validate/stale-file-classification.js +1 -82
  324. package/dist/mcp/http-server.js +5 -448
  325. package/dist/mcp/legacy-adapter.js +1 -77
  326. package/dist/mcp/runtime-capabilities.js +1 -200
  327. package/dist/mcp/server.js +4 -1233
  328. package/dist/mcp/tool-definitions.js +1 -804
  329. package/dist/sdk/actionability.js +1 -13
  330. package/dist/sdk/agent/closed-domain-contracts.js +1 -161
  331. package/dist/sdk/agent/command-recovery.js +1 -59
  332. package/dist/sdk/agent/command-suggestions.js +1 -66
  333. package/dist/sdk/agent/create-option-policy.js +1 -31
  334. package/dist/sdk/agent/identity-config.js +1 -106
  335. package/dist/sdk/agent/item-addressing.js +1 -207
  336. package/dist/sdk/agent/refusal-closure-census.js +1 -151
  337. package/dist/sdk/agent/refusal-closure.js +1 -133
  338. package/dist/sdk/agent/refusal-corpus-contracts.js +1 -193
  339. package/dist/sdk/agent/refusal-reachability.js +1 -593
  340. package/dist/sdk/agent/subcommand-recovery.js +1 -83
  341. package/dist/sdk/agent/task-transcript-contracts.js +1 -197
  342. package/dist/sdk/agent/tracker-preflight-contracts.js +1 -126
  343. package/dist/sdk/agent-capability-contracts.js +1 -428
  344. package/dist/sdk/agent-session-context.js +1 -9
  345. package/dist/sdk/annotations.js +1 -448
  346. package/dist/sdk/author-attribution.js +1 -468
  347. package/dist/sdk/authoring.js +1 -20
  348. package/dist/sdk/cli-bootstrap.js +1 -838
  349. package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +1 -1
  350. package/dist/sdk/cli-contracts/agent-output-contracts.js +4 -476
  351. package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -79
  352. package/dist/sdk/cli-contracts/command-aliases.d.ts +4 -0
  353. package/dist/sdk/cli-contracts/command-aliases.js +1 -107
  354. package/dist/sdk/cli-contracts/command-exit-contracts.js +1 -151
  355. package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1081
  356. package/dist/sdk/cli-contracts/commander-types.js +1 -159
  357. package/dist/sdk/cli-contracts/completeness.js +1 -393
  358. package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
  359. package/dist/sdk/cli-contracts/enum-contracts.js +1 -222
  360. package/dist/sdk/cli-contracts/flag-contracts.js +1 -1947
  361. package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -347
  362. package/dist/sdk/cli-contracts/grammar-contracts.js +1 -986
  363. package/dist/sdk/cli-contracts/registration-helpers.js +7 -990
  364. package/dist/sdk/cli-contracts/runtime-contracts.d.ts +5 -0
  365. package/dist/sdk/cli-contracts/runtime-contracts.js +1 -2090
  366. package/dist/sdk/cli-contracts/schemas/assurance-definition.js +1 -324
  367. package/dist/sdk/cli-contracts/string-lists.js +1 -16
  368. package/dist/sdk/cli-contracts/tool-option-contracts.js +1 -461
  369. package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -2167
  370. package/dist/sdk/cli-contracts/tool-schema.d.ts +3 -1
  371. package/dist/sdk/cli-contracts/tool-schema.js +1 -1664
  372. package/dist/sdk/cli-contracts/typed-action-inputs.js +1 -4
  373. package/dist/sdk/cli-contracts.d.ts +1 -1
  374. package/dist/sdk/cli-contracts.js +1 -17
  375. package/dist/sdk/cli-program.js +1 -49
  376. package/dist/sdk/command-line.d.ts +2 -5
  377. package/dist/sdk/command-line.js +1 -78
  378. package/dist/sdk/comments.js +1 -133
  379. package/dist/sdk/compile-cache.js +1 -73
  380. package/dist/sdk/completion.js +174 -839
  381. package/dist/sdk/compose.js +1 -1090
  382. package/dist/sdk/config.js +1 -1204
  383. package/dist/sdk/context/recency.js +1 -33
  384. package/dist/sdk/context/semantic-session-attribution.js +1 -82
  385. package/dist/sdk/context/usage-egress.js +1 -29
  386. package/dist/sdk/context/usage-ledger.js +3 -185
  387. package/dist/sdk/context-intent-contracts.js +1 -709
  388. package/dist/sdk/context-intent-runtime.js +1 -115
  389. package/dist/sdk/context-packing.js +1 -218
  390. package/dist/sdk/context-relevance.js +1 -503
  391. package/dist/sdk/context-signal-store.js +2 -426
  392. package/dist/sdk/context-usage.js +1 -367
  393. package/dist/sdk/contracts.js +1 -23
  394. package/dist/sdk/core-governance.js +1 -14
  395. package/dist/sdk/core.js +1 -14
  396. package/dist/sdk/corpus-shape.js +1 -401
  397. package/dist/sdk/define.js +1 -220
  398. package/dist/sdk/dependencies.js +1 -718
  399. package/dist/sdk/dependency-flag-validation.js +1 -156
  400. package/dist/sdk/dependency-provenance.js +1 -135
  401. package/dist/sdk/docs.js +1 -14
  402. package/dist/sdk/duplicates.js +1 -40
  403. package/dist/sdk/environment/agent-environment.js +1 -466
  404. package/dist/sdk/environment/host-environment-errors.js +1 -8
  405. package/dist/sdk/environment/project-runtime-compatibility.js +1 -481
  406. package/dist/sdk/environment/source-context.js +1 -28
  407. package/dist/sdk/environment/tracker-preflight.js +1 -9
  408. package/dist/sdk/error-code-catalog.js +1 -153
  409. package/dist/sdk/error-runtime.js +1 -58
  410. package/dist/sdk/errors.js +1 -58
  411. package/dist/sdk/eval.js +1 -190
  412. package/dist/sdk/extension/author-manifest.js +1 -92
  413. package/dist/sdk/extension/bundled-catalog.js +1 -332
  414. package/dist/sdk/extension/concurrency.js +1 -25
  415. package/dist/sdk/extension/copy-scope.d.ts +2 -0
  416. package/dist/sdk/extension/copy-scope.js +2 -0
  417. package/dist/sdk/extension/custom-field-collisions.js +1 -30
  418. package/dist/sdk/extension/describe.js +3 -189
  419. package/dist/sdk/extension/doctor.js +1 -606
  420. package/dist/sdk/extension/install-plan.d.ts +69 -0
  421. package/dist/sdk/extension/install-plan.js +2 -0
  422. package/dist/sdk/extension/install-receipts.d.ts +7 -0
  423. package/dist/sdk/extension/install-receipts.js +2 -0
  424. package/dist/sdk/extension/install-runtime.js +3 -313
  425. package/dist/sdk/extension/install-snapshot.js +1 -66
  426. package/dist/sdk/extension/install-sources.js +5 -1057
  427. package/dist/sdk/extension/managed-state.js +2 -252
  428. package/dist/sdk/extension/migrations.js +2 -174
  429. package/dist/sdk/extension/output-ownership.js +1 -25
  430. package/dist/sdk/extension/runtime-summary.js +1 -18
  431. package/dist/sdk/extension/scaffold.js +4 -2308
  432. package/dist/sdk/extension/shared.js +1 -147
  433. package/dist/sdk/extension/source-resolution.js +1 -65
  434. package/dist/sdk/extension/update-check.js +1 -67
  435. package/dist/sdk/extension-command-context.js +1 -44
  436. package/dist/sdk/extension-contracts.js +1 -73
  437. package/dist/sdk/extension.d.ts +7 -2
  438. package/dist/sdk/extension.js +1 -2196
  439. package/dist/sdk/files.js +1 -535
  440. package/dist/sdk/flag-invocation-contracts.d.ts +0 -5
  441. package/dist/sdk/flag-invocation-contracts.js +1 -344
  442. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -2224
  443. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -2236
  444. package/dist/sdk/generated-error-code-catalog.js +1 -16
  445. package/dist/sdk/governance/assurance-action-contracts.js +1 -4
  446. package/dist/sdk/governance/assurance-action.js +1 -411
  447. package/dist/sdk/governance/assurance-limits.js +1 -10
  448. package/dist/sdk/governance/assurance-mutation-error.js +1 -81
  449. package/dist/sdk/governance/assurance-presets.js +1 -135
  450. package/dist/sdk/governance/assurance-runtime.js +1 -238
  451. package/dist/sdk/governance/assurance.js +4 -1182
  452. package/dist/sdk/governance/boundary-fixtures.js +1 -200
  453. package/dist/sdk/governance/coverage-assurance.js +1 -60
  454. package/dist/sdk/governance/defect-recurrence-coverage.js +1 -188
  455. package/dist/sdk/governance/defect-recurrence-graph.js +1 -120
  456. package/dist/sdk/governance/defect-recurrence-signals.js +1 -24
  457. package/dist/sdk/governance/defect-recurrence.js +1 -623
  458. package/dist/sdk/governance/extension-host-version.js +1 -115
  459. package/dist/sdk/governance/gc.js +1 -368
  460. package/dist/sdk/governance/health.js +1 -2367
  461. package/dist/sdk/governance/hierarchy-validation.js +1 -108
  462. package/dist/sdk/governance/linked-file-report.js +1 -71
  463. package/dist/sdk/governance/merge-receipt-history.js +1 -206
  464. package/dist/sdk/governance/provenance-health.js +1 -282
  465. package/dist/sdk/governance/reindex.js +4 -761
  466. package/dist/sdk/governance/stale-work.js +1 -82
  467. package/dist/sdk/governance/status-role-diagnostics.js +1 -35
  468. package/dist/sdk/governance/storage-integrity.js +1 -280
  469. package/dist/sdk/governance/tracked-runtime-cache.js +1 -106
  470. package/dist/sdk/governance/upgrade.js +2 -327
  471. package/dist/sdk/governance/validate-history-drift.js +1 -81
  472. package/dist/sdk/governance/validate-item-reader.js +1 -17
  473. package/dist/sdk/governance/validate-normalization.js +1 -36
  474. package/dist/sdk/governance/validate.d.ts +3 -1
  475. package/dist/sdk/governance/validate.js +1 -2261
  476. package/dist/sdk/governance/workflow-completeness.d.ts +32 -0
  477. package/dist/sdk/governance/workflow-completeness.js +2 -0
  478. package/dist/sdk/governance/workflow-policy.d.ts +47 -0
  479. package/dist/sdk/governance/workflow-policy.js +4 -0
  480. package/dist/sdk/governance/workspace-position.js +1 -163
  481. package/dist/sdk/governance.d.ts +2 -0
  482. package/dist/sdk/governance.js +1 -31
  483. package/dist/sdk/graph/adapter.js +1 -181
  484. package/dist/sdk/graph/analytics.js +1 -474
  485. package/dist/sdk/graph/assembly.js +1 -377
  486. package/dist/sdk/graph/cache.js +1 -160
  487. package/dist/sdk/graph/centrality.js +1 -258
  488. package/dist/sdk/graph/conformance.js +1 -130
  489. package/dist/sdk/graph/deadline-scheduling.d.ts +90 -0
  490. package/dist/sdk/graph/deadline-scheduling.js +2 -0
  491. package/dist/sdk/graph/durable-cache.d.ts +1 -1
  492. package/dist/sdk/graph/durable-cache.js +1 -361
  493. package/dist/sdk/graph/governance-contracts.js +1 -34
  494. package/dist/sdk/graph/governance.d.ts +13 -1
  495. package/dist/sdk/graph/governance.js +1 -735
  496. package/dist/sdk/graph/hierarchy-integrity.js +1 -310
  497. package/dist/sdk/graph/index.d.ts +3 -2
  498. package/dist/sdk/graph/index.js +1 -26
  499. package/dist/sdk/graph/lifecycle-coverage.d.ts +32 -0
  500. package/dist/sdk/graph/lifecycle-coverage.js +2 -0
  501. package/dist/sdk/graph/mutation-advisory.js +1 -176
  502. package/dist/sdk/graph/remediation.js +1 -197
  503. package/dist/sdk/graph/run.d.ts +15 -1
  504. package/dist/sdk/graph/run.js +1 -768
  505. package/dist/sdk/graph/scheduling.js +1 -124
  506. package/dist/sdk/graph/traversal.js +1 -284
  507. package/dist/sdk/graph/workspace-relationship-kind-registry.js +1 -27
  508. package/dist/sdk/graph.js +1 -15
  509. package/dist/sdk/guide-topics.js +1 -707
  510. package/dist/sdk/guide.js +1 -279
  511. package/dist/sdk/history/maintenance.d.ts +71 -0
  512. package/dist/sdk/history/maintenance.js +2 -0
  513. package/dist/sdk/history/salvage.js +2 -247
  514. package/dist/sdk/history/subject.d.ts +19 -0
  515. package/dist/sdk/history/subject.js +2 -0
  516. package/dist/sdk/history-analytics.js +1 -282
  517. package/dist/sdk/history-compact.js +1 -527
  518. package/dist/sdk/history-mcp.js +1 -68
  519. package/dist/sdk/history-provenance.js +1 -182
  520. package/dist/sdk/history-read.js +1 -96
  521. package/dist/sdk/history-redact.d.ts +1 -14
  522. package/dist/sdk/history-redact.js +1 -643
  523. package/dist/sdk/history-repair.d.ts +5 -0
  524. package/dist/sdk/history-repair.js +1 -657
  525. package/dist/sdk/improvement-ledger-validation.js +1 -62
  526. package/dist/sdk/improvement-ledger.js +2 -257
  527. package/dist/sdk/index.d.ts +4 -1
  528. package/dist/sdk/index.js +1 -183
  529. package/dist/sdk/init-agent-guidance.js +2 -496
  530. package/dist/sdk/init.js +2 -820
  531. package/dist/sdk/invocation-author.js +1 -39
  532. package/dist/sdk/item-children.js +1 -90
  533. package/dist/sdk/item-metadata-index.js +1 -15
  534. package/dist/sdk/item-schedule.js +1 -27
  535. package/dist/sdk/item-transaction.js +1 -396
  536. package/dist/sdk/learnings.js +1 -29
  537. package/dist/sdk/lifecycle/append.js +2 -53
  538. package/dist/sdk/lifecycle/claim.d.ts +2 -0
  539. package/dist/sdk/lifecycle/claim.js +1 -242
  540. package/dist/sdk/lifecycle/close-many.js +1 -438
  541. package/dist/sdk/lifecycle/close.js +1 -468
  542. package/dist/sdk/lifecycle/copy.js +1 -212
  543. package/dist/sdk/lifecycle/create.js +1 -1949
  544. package/dist/sdk/lifecycle/delete.js +1 -45
  545. package/dist/sdk/lifecycle/event-validation-messages.js +1 -91
  546. package/dist/sdk/lifecycle/focus.js +1 -91
  547. package/dist/sdk/lifecycle/hierarchy-mutation-lock.js +1 -24
  548. package/dist/sdk/lifecycle/legacy-none-tokens.js +1 -149
  549. package/dist/sdk/lifecycle/lifecycle-transitions.js +1 -40
  550. package/dist/sdk/lifecycle/mcp-actions.d.ts +2 -0
  551. package/dist/sdk/lifecycle/mcp-actions.js +1 -51
  552. package/dist/sdk/lifecycle/metadata-normalizers.js +1 -46
  553. package/dist/sdk/lifecycle/mutation-command-options.js +1 -9
  554. package/dist/sdk/lifecycle/plan.js +1 -1606
  555. package/dist/sdk/lifecycle/recurrence-parsers.d.ts +1 -1
  556. package/dist/sdk/lifecycle/recurrence-parsers.js +1 -147
  557. package/dist/sdk/lifecycle/reopen.js +1 -68
  558. package/dist/sdk/lifecycle/repeatable-metadata-parsers.js +1 -143
  559. package/dist/sdk/lifecycle/restore.d.ts +1 -0
  560. package/dist/sdk/lifecycle/restore.js +1 -330
  561. package/dist/sdk/lifecycle/shared-unset-fields.js +1 -295
  562. package/dist/sdk/lifecycle/update-many.js +1 -861
  563. package/dist/sdk/lifecycle/update.js +1 -2136
  564. package/dist/sdk/lifecycle-completion.js +1 -92
  565. package/dist/sdk/lifecycle-policy.js +1 -120
  566. package/dist/sdk/linked-artifacts.js +1 -530
  567. package/dist/sdk/mcp/apps.js +4 -133
  568. package/dist/sdk/mcp/authorization.js +1 -404
  569. package/dist/sdk/mcp/discovery.js +1 -494
  570. package/dist/sdk/mcp/interactions.js +1 -336
  571. package/dist/sdk/mcp/protocol.d.ts +7 -0
  572. package/dist/sdk/mcp/protocol.js +1 -184
  573. package/dist/sdk/mcp/skills.js +1 -389
  574. package/dist/sdk/mcp/subscriptions.js +1 -211
  575. package/dist/sdk/mcp/tasks.js +2 -430
  576. package/dist/sdk/mcp/transport.js +1 -260
  577. package/dist/sdk/merge/abandoned-receipts.js +1 -46
  578. package/dist/sdk/merge/driver.js +1 -212
  579. package/dist/sdk/merge/index.js +1 -16
  580. package/dist/sdk/merge/install.js +3 -561
  581. package/dist/sdk/merge/receipt-file-boundary.js +1 -46
  582. package/dist/sdk/merge/receipt-operation.js +1 -96
  583. package/dist/sdk/merge/receipt-schema.js +1 -397
  584. package/dist/sdk/merge/receipts.js +4 -525
  585. package/dist/sdk/merge/reconcile.js +1 -352
  586. package/dist/sdk/merge/three-way.js +3 -775
  587. package/dist/sdk/merge.js +1 -10
  588. package/dist/sdk/mutation-events.js +1 -292
  589. package/dist/sdk/mutation-guard.js +1 -216
  590. package/dist/sdk/notes.js +1 -139
  591. package/dist/sdk/output-contracts.js +1 -172
  592. package/dist/sdk/output-projection.js +1 -430
  593. package/dist/sdk/output-token-accounting.js +1 -140
  594. package/dist/sdk/output.js +1 -64
  595. package/dist/sdk/ownership-source.js +1 -21
  596. package/dist/sdk/package-import-adapters.js +1 -442
  597. package/dist/sdk/package-migrations.js +1 -20
  598. package/dist/sdk/package-runtime-options.js +1 -80
  599. package/dist/sdk/pagination.js +1 -162
  600. package/dist/sdk/profile.js +1 -454
  601. package/dist/sdk/provenance.js +1 -258
  602. package/dist/sdk/public-surface.json +1 -1
  603. package/dist/sdk/query/activity.js +1 -401
  604. package/dist/sdk/query/aggregate.d.ts +16 -0
  605. package/dist/sdk/query/aggregate.js +1 -390
  606. package/dist/sdk/query/calendar.js +1 -964
  607. package/dist/sdk/query/complete-list.js +1 -215
  608. package/dist/sdk/query/context.js +1 -1702
  609. package/dist/sdk/query/duplicate-candidates.js +1 -70
  610. package/dist/sdk/query/get.js +1 -450
  611. package/dist/sdk/query/history.js +1 -186
  612. package/dist/sdk/query/item-filter-options.js +1 -9
  613. package/dist/sdk/query/light-metadata.js +1 -18
  614. package/dist/sdk/query/list-filter-shared.js +1 -81
  615. package/dist/sdk/query/list.js +1 -1304
  616. package/dist/sdk/query/multi-value-filters.js +1 -78
  617. package/dist/sdk/query/next.js +1 -513
  618. package/dist/sdk/query/parsers.js +1 -44
  619. package/dist/sdk/query/projection-contracts.js +1 -184
  620. package/dist/sdk/query/search-contracts.d.ts +27 -0
  621. package/dist/sdk/query/search-contracts.js +1 -230
  622. package/dist/sdk/query/search-pagination.js +1 -35
  623. package/dist/sdk/query/search-rendering.js +1 -105
  624. package/dist/sdk/query/search.d.ts +6 -4
  625. package/dist/sdk/query/search.js +2 -1987
  626. package/dist/sdk/query.js +1 -35
  627. package/dist/sdk/read-output/continuation.js +1 -194
  628. package/dist/sdk/read-output-budget.js +1 -135
  629. package/dist/sdk/read-output-contracts.d.ts +1 -1
  630. package/dist/sdk/read-output-contracts.js +1 -1225
  631. package/dist/sdk/read-output-rows.js +1 -186
  632. package/dist/sdk/read-output-session.js +1 -208
  633. package/dist/sdk/relationship-analytics.js +1 -410
  634. package/dist/sdk/relationship-context.js +1 -284
  635. package/dist/sdk/relationship-history.js +4 -519
  636. package/dist/sdk/relationship-kinds/contract.js +1 -22
  637. package/dist/sdk/relationship-migration.js +1 -77
  638. package/dist/sdk/relationships.js +1 -579
  639. package/dist/sdk/reproducibility/process.js +1 -87
  640. package/dist/sdk/runtime-action-aliases.js +1 -59
  641. package/dist/sdk/runtime-extended-actions.js +1 -177
  642. package/dist/sdk/runtime-input.js +1 -614
  643. package/dist/sdk/runtime-primitives.js +1 -84
  644. package/dist/sdk/runtime-public-contracts.d.ts +2 -1
  645. package/dist/sdk/runtime-public-contracts.js +1 -4
  646. package/dist/sdk/runtime-stats-options.js +1 -38
  647. package/dist/sdk/runtime.d.ts +4 -0
  648. package/dist/sdk/runtime.js +1 -1928
  649. package/dist/sdk/scheduling-shortcuts.js +1 -63
  650. package/dist/sdk/schema-migration.js +3 -856
  651. package/dist/sdk/schema.d.ts +2 -1
  652. package/dist/sdk/schema.js +1 -1376
  653. package/dist/sdk/search-refresh-worker.js +1 -18
  654. package/dist/sdk/similarity-scoring.js +1 -53
  655. package/dist/sdk/similarity.js +1 -326
  656. package/dist/sdk/start-task-status.js +1 -14
  657. package/dist/sdk/stats.js +1 -270
  658. package/dist/sdk/structured-mutations.js +1 -580
  659. package/dist/sdk/telemetry-flush.js +1 -13
  660. package/dist/sdk/telemetry.js +1 -405
  661. package/dist/sdk/templates.js +2 -292
  662. package/dist/sdk/test/batch.js +2 -509
  663. package/dist/sdk/test/entry.js +1 -70
  664. package/dist/sdk/test/execution.js +6 -2211
  665. package/dist/sdk/test/linked-command-detection.js +1 -546
  666. package/dist/sdk/test/measurements.js +1 -91
  667. package/dist/sdk/test/parsers.js +1 -545
  668. package/dist/sdk/test/runs.js +1 -193
  669. package/dist/sdk/test/trust.js +2 -206
  670. package/dist/sdk/testing.js +4 -1391
  671. package/dist/sdk/traceability/runtime-files-lookup.js +1 -32
  672. package/dist/sdk/traceability/source-traceability.js +1 -292
  673. package/dist/sdk/tracker-root-discovery.js +1 -9
  674. package/dist/sdk/workspace-contracts-cache.js +1 -28
  675. package/dist/sdk/workspace-contracts.js +1 -33
  676. package/dist/sdk/workspace-memory.js +2 -318
  677. package/dist/sdk/workspace-recipe.js +1 -71
  678. package/dist/sdk/workspace-snapshot.js +4 -613
  679. package/dist/sdk/workspace-transaction-gc.js +1 -149
  680. package/dist/sdk/workspace-transaction.js +2 -363
  681. package/dist/sdk/workspace.js +3 -127
  682. package/dist/types/index.js +1 -9
  683. package/dist/types.d.ts +4 -0
  684. package/dist/types.js +1 -245
  685. package/docs/AGENT_GUIDE.md +1 -1
  686. package/docs/COMMANDS.md +10 -0
  687. package/docs/CONFIGURATION.md +12 -1
  688. package/docs/CONTEXT_ALGORITHM_PORTFOLIO.md +167 -0
  689. package/docs/DIAGNOSTIC_OUTPUT_CONTRACTS.md +9 -3
  690. package/docs/EXTENSIONS.md +1 -0
  691. package/docs/HISTORY_MAINTENANCE.md +125 -0
  692. package/docs/MCP_2026_07_28_CONFORMANCE.md +20 -10
  693. package/docs/PACKAGE_EVIDENCE.md +92 -0
  694. package/docs/PLANNING_MEASUREMENTS.md +183 -0
  695. package/docs/README.md +4 -0
  696. package/docs/READ_OUTPUT_CONTRACTS.md +5 -0
  697. package/docs/SCRIPTING.md +21 -0
  698. package/docs/TESTING.md +33 -0
  699. package/docs/WORKFLOW_POLICIES.md +129 -0
  700. package/docs/generated/FLAG_LEXICON_BUDGETS.md +7 -7
  701. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +11 -5
  702. package/marketplace.json +2 -2
  703. package/package.json +5 -5
  704. package/packages/pm-beads/package.json +1 -1
  705. package/packages/pm-calendar/package.json +1 -1
  706. package/packages/pm-command-kit/package.json +1 -1
  707. package/packages/pm-digital-twin/package.json +1 -1
  708. package/packages/pm-governance-audit/package.json +1 -1
  709. package/packages/pm-guide-shell/package.json +1 -1
  710. package/packages/pm-kanban/package.json +1 -1
  711. package/packages/pm-lifecycle-hooks/package.json +1 -1
  712. package/packages/pm-linked-test-adapters/package.json +1 -1
  713. package/packages/pm-search-advanced/package.json +1 -1
  714. package/packages/pm-templates/package.json +1 -1
  715. package/packages/pm-todos/package.json +1 -1
  716. package/packages/pm-vcs/package.json +1 -1
  717. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  718. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  719. package/scripts/finalize-build.mjs +45 -3
  720. package/dist/cli-bundle/chunks/chunk-AZDFJGH6.js +0 -9
  721. package/dist/cli-bundle/chunks/chunk-CKOL5U7J.js +0 -77
  722. package/dist/cli-bundle/chunks/chunk-JX4DH4WC.js +0 -3
  723. package/dist/cli-bundle/chunks/chunk-OF76PSDQ.js +0 -5
  724. package/dist/cli-bundle/chunks/chunk-QUWFABDM.js +0 -232
  725. package/dist/cli-bundle/chunks/chunk-QWRRFYK3.js +0 -2
  726. package/dist/cli-bundle/chunks/chunk-RWWBOWJ5.js +0 -2
  727. package/dist/cli-bundle/chunks/chunk-WGAOYSYH.js +0 -40
  728. package/dist/cli-bundle/chunks/chunk-WI2AYPA7.js +0 -2
  729. package/dist/cli-bundle/chunks/register-list-query-5JL52D33.js +0 -11
  730. package/dist/cli-bundle/chunks/register-mutation-ZPG7KMVP.js +0 -20
  731. package/dist/cli-bundle/chunks/register-operations-I5W3KMGB.js +0 -2
  732. package/dist/cli-bundle/chunks/register-setup-H4SVAVX7.js +0 -2
  733. package/dist/cli-bundle/focused-chunks/chunk-AL5ON6K6.js +0 -2
  734. package/dist/cli-bundle/focused-chunks/chunk-CHC2IDXA.js +0 -6
  735. package/dist/cli-bundle/focused-chunks/chunk-CK6QFAPZ.js +0 -20
  736. package/dist/cli-bundle/focused-chunks/chunk-EZR3GHFE.js +0 -2
  737. package/dist/cli-bundle/focused-chunks/chunk-H2WJWK7L.js +0 -56
  738. package/dist/cli-bundle/focused-chunks/chunk-NTPY5GSO.js +0 -3
  739. package/dist/cli-bundle/focused-chunks/chunk-P5O7MP5Y.js +0 -2
  740. package/dist/cli-bundle/focused-chunks/chunk-PDMW2E36.js +0 -177
  741. package/dist/cli-bundle/focused-chunks/chunk-PEFABF7E.js +0 -26
  742. package/dist/cli-bundle/focused-chunks/chunk-QTVCLMSZ.js +0 -6
  743. package/dist/cli-bundle/focused-chunks/chunk-QTZRBUYA.js +0 -8
  744. package/dist/cli-bundle/focused-chunks/chunk-SGQST3PQ.js +0 -12
  745. package/dist/cli-bundle/focused-chunks/chunk-UKHASMMP.js +0 -10
  746. package/dist/cli-bundle/focused-chunks/chunk-ZPEKQHOC.js +0 -2
@@ -1,64 +1,2 @@
1
- /**
2
- * @module core/test/item-test-run-tracking
3
- *
4
- * Runs and records linked-test orchestration for Item Test Run Tracking.
5
- */
6
-
7
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="62af7c1e-c1c7-529e-ab30-117103ac4607")}catch(e){}}();
8
- import { mutateItem } from "../store/item-store.js";
9
- import { compareTimestampStrings } from "../shared/time.js";
10
- const DEFAULT_TRACKED_TEST_RUN_HISTORY_LIMIT = 20;
11
- function trackedTestRunHistoryLimit() {
12
- const raw = process.env.PM_TRACKED_TEST_RUN_HISTORY_LIMIT;
13
- if (!raw || raw.trim().length === 0) {
14
- return DEFAULT_TRACKED_TEST_RUN_HISTORY_LIMIT;
15
- }
16
- const parsed = Number.parseInt(raw, 10);
17
- if (!Number.isFinite(parsed) || parsed <= 0) {
18
- return DEFAULT_TRACKED_TEST_RUN_HISTORY_LIMIT;
19
- }
20
- return parsed;
21
- }
22
- /** Normalize, order, and bound test-run history using the configured retention policy. */
23
- export function buildTrackedTestRunHistory(entries) {
24
- const normalized = [...entries]
25
- .filter((entry) => entry.run_id.trim().length > 0 &&
26
- entry.started_at.trim().length > 0 &&
27
- entry.finished_at.trim().length > 0 &&
28
- entry.recorded_at.trim().length > 0)
29
- .sort((left, right) => {
30
- const byRecorded = compareTimestampStrings(left.recorded_at, right.recorded_at);
31
- if (byRecorded !== 0)
32
- return byRecorded;
33
- const byRunId = left.run_id.localeCompare(right.run_id);
34
- if (byRunId !== 0)
35
- return byRunId;
36
- return left.kind.localeCompare(right.kind);
37
- });
38
- const historyLimit = trackedTestRunHistoryLimit();
39
- return normalized.length > historyLimit
40
- ? normalized.slice(normalized.length - historyLimit)
41
- : normalized;
42
- }
43
- /** Implements append tracked test run summary for the public runtime surface of this module. */
44
- export async function appendTrackedTestRunSummary(options) {
45
- await mutateItem({
46
- pmRoot: options.pmRoot,
47
- settings: options.settings,
48
- id: options.itemId,
49
- op: "test_run_track",
50
- author: options.author,
51
- message: options.message,
52
- force: false,
53
- mutate(document) {
54
- const current = document.metadata.test_runs ?? [];
55
- document.metadata.test_runs = buildTrackedTestRunHistory([
56
- ...current,
57
- options.entry,
58
- ]);
59
- return { changedFields: ["test_runs"] };
60
- },
61
- });
62
- }
1
+ !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ffa50b5b-d99f-5ab4-a70d-cbf12911a0f2")}catch(e2){}})();import{mutateItem}from"../store/item-store.js";import{compareTimestampStrings}from"../shared/time.js";const DEFAULT_TRACKED_TEST_RUN_HISTORY_LIMIT=20;function trackedTestRunHistoryLimit(){const raw=process.env.PM_TRACKED_TEST_RUN_HISTORY_LIMIT;if(!raw||raw.trim().length===0){return DEFAULT_TRACKED_TEST_RUN_HISTORY_LIMIT}const parsed=Number.parseInt(raw,10);if(!Number.isFinite(parsed)||parsed<=0){return DEFAULT_TRACKED_TEST_RUN_HISTORY_LIMIT}return parsed}function buildTrackedTestRunHistory(entries){const normalized=[...entries].filter(entry=>entry.run_id.trim().length>0&&entry.started_at.trim().length>0&&entry.finished_at.trim().length>0&&entry.recorded_at.trim().length>0).sort((left,right)=>{const byRecorded=compareTimestampStrings(left.recorded_at,right.recorded_at);if(byRecorded!==0)return byRecorded;const byRunId=left.run_id.localeCompare(right.run_id);if(byRunId!==0)return byRunId;return left.kind.localeCompare(right.kind)});const historyLimit=trackedTestRunHistoryLimit();return normalized.length>historyLimit?normalized.slice(normalized.length-historyLimit):normalized}async function appendTrackedTestRunSummary(options){await mutateItem({pmRoot:options.pmRoot,settings:options.settings,id:options.itemId,op:"test_run_track",author:options.author,message:options.message,force:false,mutate(document){const current=document.metadata.test_runs??[];document.metadata.test_runs=buildTrackedTestRunHistory([...current,options.entry]);return{changedFields:["test_runs"]}}})}export{appendTrackedTestRunSummary,buildTrackedTestRunHistory};
63
2
  //# sourceMappingURL=item-test-run-tracking.js.map
64
- //# debugId=62af7c1e-c1c7-529e-ab30-117103ac4607
@@ -1,121 +1,2 @@
1
- /**
2
- * @module core/test/run-selectors
3
- *
4
- * Runs and records linked-test orchestration for Run Selectors.
5
- */
6
-
7
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="8a6a3402-dae3-56f8-b9ba-a4f6f8a47cda")}catch(e){}}();
8
- import { EXIT_CODE } from "../shared/constants.js";
9
- import { PmCliError } from "../shared/errors.js";
10
- const MAX_SELECTOR_ENTRY_LABEL_LENGTH = 100;
11
- /** Implements parse only index value for the public runtime surface of this module. */
12
- export function parseOnlyIndexValue(raw, optionName = "--only-index") {
13
- const value = typeof raw === "number" ? raw : Number(String(raw).trim());
14
- if (!Number.isInteger(value) || value < 1) {
15
- throw new PmCliError(`${optionName} requires a 1-based integer index into the linked-test list (got "${raw}"). Use pm test <id> --list to inspect positions.`, EXIT_CODE.USAGE);
16
- }
17
- return value;
18
- }
19
- function summarizeSelectorEntry(entry) {
20
- const label = entry.command ?? entry.path ?? "<no command>";
21
- const normalized = label.replaceAll(/\s+/g, " ").trim() || "<no command>";
22
- if (normalized.length <= MAX_SELECTOR_ENTRY_LABEL_LENGTH) {
23
- return normalized;
24
- }
25
- return `${normalized.slice(0, MAX_SELECTOR_ENTRY_LABEL_LENGTH - 3)}...`;
26
- }
27
- /** Implements describe linked test entries for the public runtime surface of this module. */
28
- export function describeLinkedTestEntries(tests) {
29
- return tests
30
- .map((entry, index) => `${index + 1}. ${summarizeSelectorEntry(entry)}`)
31
- .join("; ");
32
- }
33
- function activeSelectorKinds(selector) {
34
- const kinds = [];
35
- if (selector.match !== undefined) {
36
- kinds.push("match");
37
- }
38
- if (selector.onlyIndex !== undefined) {
39
- kinds.push("only-index");
40
- }
41
- if (selector.onlyLast === true) {
42
- kinds.push("only-last");
43
- }
44
- return kinds;
45
- }
46
- function entryMatchesSubstring(entry, needle) {
47
- const command = entry.command?.toLowerCase() ?? "";
48
- const entryPath = entry.path?.toLowerCase() ?? "";
49
- return command.includes(needle) || entryPath.includes(needle);
50
- }
51
- /** Implements resolve linked test run selection for the public runtime surface of this module. */
52
- export function resolveLinkedTestRunSelection(tests, selector) {
53
- const kinds = activeSelectorKinds(selector);
54
- if (kinds.length === 0) {
55
- return {
56
- selector: null,
57
- requested: null,
58
- selected: tests,
59
- selected_indexes: tests.map((_, index) => index + 1),
60
- selected_count: tests.length,
61
- skipped_count: 0,
62
- };
63
- }
64
- if (kinds.length > 1) {
65
- throw new PmCliError(`Combine at most one linked-test selector per run: ${kinds.map((kind) => `--${kind}`).join(" and ")} were provided. Pick one of --match, --only-index, --only-last.`, EXIT_CODE.USAGE);
66
- }
67
- const kind = kinds[0];
68
- if (tests.length === 0) {
69
- throw new PmCliError(`--${kind} matched no linked tests because this item has none. Add one first with --add, --command, or --add-json.`, EXIT_CODE.USAGE);
70
- }
71
- if (kind === "match") {
72
- // kind is "match" only when selector.match is defined (see activeSelectorKinds).
73
- const needle = selector.match.trim().toLowerCase();
74
- if (needle.length === 0) {
75
- throw new PmCliError("--match requires a non-empty substring to match against linked-test command/path values", EXIT_CODE.USAGE);
76
- }
77
- const selectedIndexes = [];
78
- const selected = [];
79
- for (let index = 0; index < tests.length; index += 1) {
80
- if (entryMatchesSubstring(tests[index], needle)) {
81
- selected.push(tests[index]);
82
- selectedIndexes.push(index + 1);
83
- }
84
- }
85
- if (selected.length === 0) {
86
- throw new PmCliError(`--match "${selector.match}" matched none of the ${tests.length} linked test(s). Available entries: ${describeLinkedTestEntries(tests)}`, EXIT_CODE.USAGE);
87
- }
88
- return {
89
- selector: "match",
90
- requested: selector.match,
91
- selected,
92
- selected_indexes: selectedIndexes,
93
- selected_count: selected.length,
94
- skipped_count: tests.length - selected.length,
95
- };
96
- }
97
- if (kind === "only-index") {
98
- const index = parseOnlyIndexValue(selector.onlyIndex);
99
- if (index > tests.length) {
100
- throw new PmCliError(`--only-index ${index} is out of range: this item has ${tests.length} linked test(s). Available entries: ${describeLinkedTestEntries(tests)}`, EXIT_CODE.USAGE);
101
- }
102
- return {
103
- selector: "only-index",
104
- requested: String(index),
105
- selected: [tests[index - 1]],
106
- selected_indexes: [index],
107
- selected_count: 1,
108
- skipped_count: tests.length - 1,
109
- };
110
- }
111
- return {
112
- selector: "only-last",
113
- requested: "last",
114
- selected: [tests[tests.length - 1]],
115
- selected_indexes: [tests.length],
116
- selected_count: 1,
117
- skipped_count: tests.length - 1,
118
- };
119
- }
1
+ !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="328c7577-364c-5869-aa92-199e56d2f6a7")}catch(e2){}})();import{EXIT_CODE}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";const MAX_SELECTOR_ENTRY_LABEL_LENGTH=100;function parseOnlyIndexValue(raw,optionName="--only-index"){const value=typeof raw==="number"?raw:Number(String(raw).trim());if(!Number.isInteger(value)||value<1){throw new PmCliError(`${optionName} requires a 1-based integer index into the linked-test list (got "${raw}"). Use pm test <id> --list to inspect positions.`,EXIT_CODE.USAGE)}return value}function summarizeSelectorEntry(entry){const label=entry.command??entry.path??"<no command>";const normalized=label.replaceAll(/\s+/g," ").trim()||"<no command>";if(normalized.length<=MAX_SELECTOR_ENTRY_LABEL_LENGTH){return normalized}return`${normalized.slice(0,MAX_SELECTOR_ENTRY_LABEL_LENGTH-3)}...`}function describeLinkedTestEntries(tests){return tests.map((entry,index)=>`${index+1}. ${summarizeSelectorEntry(entry)}`).join("; ")}function activeSelectorKinds(selector){const kinds=[];if(selector.match!==void 0){kinds.push("match")}if(selector.onlyIndex!==void 0){kinds.push("only-index")}if(selector.onlyLast===true){kinds.push("only-last")}return kinds}function entryMatchesSubstring(entry,needle){const command=entry.command?.toLowerCase()??"";const entryPath=entry.path?.toLowerCase()??"";return command.includes(needle)||entryPath.includes(needle)}function resolveLinkedTestRunSelection(tests,selector){const kinds=activeSelectorKinds(selector);if(kinds.length===0){return{selector:null,requested:null,selected:tests,selected_indexes:tests.map((_,index)=>index+1),selected_count:tests.length,skipped_count:0}}if(kinds.length>1){throw new PmCliError(`Combine at most one linked-test selector per run: ${kinds.map(kind2=>`--${kind2}`).join(" and ")} were provided. Pick one of --match, --only-index, --only-last.`,EXIT_CODE.USAGE)}const kind=kinds[0];if(tests.length===0){throw new PmCliError(`--${kind} matched no linked tests because this item has none. Add one first with --add, --command, or --add-json.`,EXIT_CODE.USAGE)}if(kind==="match"){const needle=selector.match.trim().toLowerCase();if(needle.length===0){throw new PmCliError("--match requires a non-empty substring to match against linked-test command/path values",EXIT_CODE.USAGE)}const selectedIndexes=[];const selected=[];for(let index=0;index<tests.length;index+=1){if(entryMatchesSubstring(tests[index],needle)){selected.push(tests[index]);selectedIndexes.push(index+1)}}if(selected.length===0){throw new PmCliError(`--match "${selector.match}" matched none of the ${tests.length} linked test(s). Available entries: ${describeLinkedTestEntries(tests)}`,EXIT_CODE.USAGE)}return{selector:"match",requested:selector.match,selected,selected_indexes:selectedIndexes,selected_count:selected.length,skipped_count:tests.length-selected.length}}if(kind==="only-index"){const index=parseOnlyIndexValue(selector.onlyIndex);if(index>tests.length){throw new PmCliError(`--only-index ${index} is out of range: this item has ${tests.length} linked test(s). Available entries: ${describeLinkedTestEntries(tests)}`,EXIT_CODE.USAGE)}return{selector:"only-index",requested:String(index),selected:[tests[index-1]],selected_indexes:[index],selected_count:1,skipped_count:tests.length-1}}return{selector:"only-last",requested:"last",selected:[tests[tests.length-1]],selected_indexes:[tests.length],selected_count:1,skipped_count:tests.length-1}}export{describeLinkedTestEntries,parseOnlyIndexValue,resolveLinkedTestRunSelection};
120
2
  //# sourceMappingURL=run-selectors.js.map
121
- //# debugId=8a6a3402-dae3-56f8-b9ba-a4f6f8a47cda
@@ -1,90 +1,2 @@
1
- /**
2
- * Per-type default estimate resolution for `pm validate --auto-fix` (GH-212).
3
- *
4
- * When an item is missing `estimated_minutes`, the auto-fix path backfills a
5
- * config-driven default based on the item's type. This module is the pure
6
- * resolution layer: given an item type and an optional settings-derived override
7
- * map, it returns the default estimate in minutes. The planning + apply path is
8
- * wired separately by the validate command.
9
- *
10
- * Pure module: no filesystem access, no heavy imports. Bad input is never
11
- * thrown on — invalid override entries are dropped, not errored (mirrors the
12
- * deterministic, non-throwing style of stale-file-classification.ts).
13
- */
14
- /** Built-in per-type default estimates in MINUTES used by `pm validate --auto-fix` (GH-212) to backfill missing `estimated_minutes`. Keys are canonical built-in type names. Lookups are case-insensitive (see resolveEstimateDefaultMinutes). */
15
-
16
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2d377bc4-c624-561c-9856-405c82099070")}catch(e){}}();
17
- export const DEFAULT_ESTIMATE_MINUTES_BY_TYPE = {
18
- Epic: 2880,
19
- Feature: 480,
20
- Story: 480,
21
- Milestone: 2880,
22
- Task: 120,
23
- Issue: 60,
24
- Bug: 60,
25
- Chore: 30,
26
- Decision: 15,
27
- Plan: 120,
28
- };
29
- /** Fallback when neither overrides nor the built-in map have the type. */
30
- export const FALLBACK_ESTIMATE_MINUTES = 120;
31
- /** A value is honored only when it is a finite number strictly greater than zero. */
32
- function isHonoredMinutes(value) {
33
- return typeof value === "number" && Number.isFinite(value) && value > 0;
34
- }
35
- /** Build a case-insensitive lookup keyed by lowercased type name. When two source keys collide case-insensitively, last-wins (later entries overwrite earlier ones); callers normalize overrides up front so collisions are rare. */
36
- function toLowercasedLookup(source) {
37
- const lookup = new Map();
38
- for (const [key, value] of Object.entries(source)) {
39
- lookup.set(key.toLowerCase(), value);
40
- }
41
- return lookup;
42
- }
43
- /** Built-in lookup is type-static, so build the lowercased index once. */
44
- const BUILTIN_LOWERCASED_LOOKUP = toLowercasedLookup(DEFAULT_ESTIMATE_MINUTES_BY_TYPE);
45
- /** Cache lowercased override lookups keyed on the override object reference so a backfill that resolves once per item does not rebuild the same Map each call. A WeakMap keeps this allocation-free for callers that reuse one normalized settings map across the whole run. */
46
- const OVERRIDE_LOOKUP_CACHE = new WeakMap();
47
- function lowercasedOverrideLookup(overrides) {
48
- const cached = OVERRIDE_LOOKUP_CACHE.get(overrides);
49
- if (cached) {
50
- return cached;
51
- }
52
- const lookup = toLowercasedLookup(overrides);
53
- OVERRIDE_LOOKUP_CACHE.set(overrides, lookup);
54
- return lookup;
55
- }
56
- /** Resolve the default estimated-minutes for an item type. Precedence: overrides (case-insensitive key match) > DEFAULT_ESTIMATE_MINUTES_BY_TYPE (case-insensitive) > FALLBACK_ESTIMATE_MINUTES. - `type` undefined/empty -> FALLBACK. - Only finite values > 0 are honored from overrides/defaults; a non-positive or non-finite override value is ignored and resolution continues to the next tier. - Returned value is a positive integer (floor of the resolved value). */
57
- export function resolveEstimateDefaultMinutes(type, overrides) {
58
- const key = (type ?? "").trim().toLowerCase();
59
- if (key.length === 0) {
60
- return FALLBACK_ESTIMATE_MINUTES;
61
- }
62
- if (overrides) {
63
- const overrideValue = lowercasedOverrideLookup(overrides).get(key);
64
- if (isHonoredMinutes(overrideValue)) {
65
- return Math.floor(overrideValue);
66
- }
67
- }
68
- const builtinValue = BUILTIN_LOWERCASED_LOOKUP.get(key);
69
- if (isHonoredMinutes(builtinValue)) {
70
- return Math.floor(builtinValue);
71
- }
72
- return FALLBACK_ESTIMATE_MINUTES;
73
- }
74
- /** Validate + normalize a raw `validation.estimate_defaults_by_type` settings object into a clean Record<string, number> of positive integers, dropping invalid entries. Used so the pure resolver always receives a sane override map. Returns {} for undefined/null/non-object input. Trims keys; ignores empty keys and non-positive / non-finite / non-number values. Floors values to integers. */
75
- export function normalizeEstimateDefaultOverrides(raw) {
76
- const normalized = {};
77
- if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
78
- return normalized;
79
- }
80
- for (const [rawKey, rawValue] of Object.entries(raw)) {
81
- const key = rawKey.trim();
82
- if (key.length === 0 || !isHonoredMinutes(rawValue)) {
83
- continue;
84
- }
85
- normalized[key] = Math.floor(rawValue);
86
- }
87
- return normalized;
88
- }
1
+ !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="833a4f8a-7e5d-5480-a526-4e1ebaadd0a8")}catch(e2){}})();const DEFAULT_ESTIMATE_MINUTES_BY_TYPE={Epic:2880,Feature:480,Story:480,Milestone:2880,Task:120,Issue:60,Bug:60,Chore:30,Decision:15,Plan:120};const FALLBACK_ESTIMATE_MINUTES=120;function isHonoredMinutes(value){return typeof value==="number"&&Number.isFinite(value)&&value>0}function toLowercasedLookup(source){const lookup=new Map;for(const[key,value]of Object.entries(source)){lookup.set(key.toLowerCase(),value)}return lookup}const BUILTIN_LOWERCASED_LOOKUP=toLowercasedLookup(DEFAULT_ESTIMATE_MINUTES_BY_TYPE);const OVERRIDE_LOOKUP_CACHE=new WeakMap;function lowercasedOverrideLookup(overrides){const cached=OVERRIDE_LOOKUP_CACHE.get(overrides);if(cached){return cached}const lookup=toLowercasedLookup(overrides);OVERRIDE_LOOKUP_CACHE.set(overrides,lookup);return lookup}function resolveEstimateDefaultMinutes(type,overrides){const key=(type??"").trim().toLowerCase();if(key.length===0){return FALLBACK_ESTIMATE_MINUTES}if(overrides){const overrideValue=lowercasedOverrideLookup(overrides).get(key);if(isHonoredMinutes(overrideValue)){return Math.floor(overrideValue)}}const builtinValue=BUILTIN_LOWERCASED_LOOKUP.get(key);if(isHonoredMinutes(builtinValue)){return Math.floor(builtinValue)}return FALLBACK_ESTIMATE_MINUTES}function normalizeEstimateDefaultOverrides(raw){const normalized={};if(raw===null||typeof raw!=="object"||Array.isArray(raw)){return normalized}for(const[rawKey,rawValue]of Object.entries(raw)){const key=rawKey.trim();if(key.length===0||!isHonoredMinutes(rawValue)){continue}normalized[key]=Math.floor(rawValue)}return normalized}export{DEFAULT_ESTIMATE_MINUTES_BY_TYPE,FALLBACK_ESTIMATE_MINUTES,normalizeEstimateDefaultOverrides,resolveEstimateDefaultMinutes};
89
2
  //# sourceMappingURL=estimate-defaults.js.map
90
- //# debugId=2d377bc4-c624-561c-9856-405c82099070
@@ -1,190 +1,2 @@
1
- /**
2
- * Fix planning for `pm validate --auto-fix` / `--prune-missing` (pm-c3sz,
3
- * pm-8jss, pm-0v2m).
4
- *
5
- * Pure module: planners turn check findings into declarative
6
- * {@link ValidateFixRecord}s; the validate command decides whether to apply
7
- * them (apply mode), preview them (`--dry-run`), or withhold gated fixes
8
- * (lifecycle structural changes require an explicit `--fix-scope lifecycle`).
9
- *
10
- * Safety invariants:
11
- * - Every planned fix is deterministic and non-destructive: it only sets a
12
- * derivable field value or removes a stale LINK (never a real file).
13
- * - No fix ever closes, deletes, or cancels an item.
14
- * - Lifecycle fixes (reparent / unset parent) are structural, so they are
15
- * planned with `gate: "lifecycle"` and only applied when that scope was
16
- * explicitly granted.
17
- */
18
-
19
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="98a73818-c4ef-5bce-8b23-6c40f7312cc3")}catch(e){}}();
20
- import { EXIT_CODE } from "../shared/constants.js";
21
- import { PmCliError } from "../shared/errors.js";
22
- import { resolveEstimateDefaultMinutes } from "./estimate-defaults.js";
23
- /** Scopes auto-applied without an explicit `--fix-scope` (safe field backfills). */
24
- export const DEFAULT_GRANTED_FIX_SCOPES = [
25
- "metadata",
26
- "resolution",
27
- ];
28
- /** Scopes accepted by `--fix-scope`. `estimates` and `lifecycle` are opt-in: estimate backfills are heuristic per-type guesses (not derived facts) and lifecycle changes are structural, so neither is granted by default. */
29
- export const SUPPORTED_FIX_SCOPES = [
30
- "metadata",
31
- "resolution",
32
- "estimates",
33
- "lifecycle",
34
- ];
35
- /** Default resolution backfilled onto closed items with no derivable source text. */
36
- const DEFAULT_RESOLUTION_BACKFILL_VALUE = "completed";
37
- function quoteForCommand(value) {
38
- return `"${value.replaceAll("\\", "\\\\").replaceAll('"', '\\"')}"`;
39
- }
40
- function toMeaningfulValue(value) {
41
- const trimmed = value?.trim();
42
- return trimmed !== undefined && trimmed.length > 0 ? trimmed : undefined;
43
- }
44
- /** Plan resolution backfills for closed items flagged by the resolution check. Only the `resolution` field is mechanical enough to auto-fix: it derives from the item's own `close_reason` when present and falls back to the `"completed"` default. `expected_result` / `actual_result` stay hint-only — no deterministic source text exists for them. */
45
- export function planResolutionBackfillFixes(rows) {
46
- const fixes = [];
47
- for (const row of rows) {
48
- if (!row.missing_fields.includes("resolution")) {
49
- continue;
50
- }
51
- const value = toMeaningfulValue(row.close_reason) ?? DEFAULT_RESOLUTION_BACKFILL_VALUE;
52
- fixes.push({
53
- item_id: row.id,
54
- check: "resolution",
55
- field: "resolution",
56
- kind: "set_resolution",
57
- value,
58
- command: `pm update ${row.id} --resolution ${quoteForCommand(value)}`,
59
- gate: "resolution",
60
- });
61
- }
62
- return fixes;
63
- }
64
- /** Plan close_reason backfills for closed items flagged by the metadata check. Only derivable when the item already carries a resolution; items missing both stay hint-only (any synthesized reason would be fabricated, not derived). */
65
- export function planCloseReasonBackfillFixes(rows) {
66
- const fixes = [];
67
- for (const row of rows) {
68
- const value = toMeaningfulValue(row.resolution);
69
- if (value === undefined) {
70
- continue;
71
- }
72
- fixes.push({
73
- item_id: row.id,
74
- check: "metadata",
75
- field: "close_reason",
76
- kind: "set_close_reason",
77
- value,
78
- command: `pm update ${row.id} --close-reason ${quoteForCommand(value)}`,
79
- gate: "metadata",
80
- });
81
- }
82
- return fixes;
83
- }
84
- /** Plan estimate backfills for items flagged by the metadata check as missing `estimated_minutes` (GH-212). The value is a config-driven per-type default (overrides > built-in map > fallback), never a derived fact — so these fixes carry `gate: "estimates"`, an opt-in scope that is NOT granted by default. `overrides` is the already-normalized `validation.estimate_defaults_by_type` map; pass `undefined`/`{}` to use the built-in defaults. */
85
- export function planEstimateBackfillFixes(rows, overrides) {
86
- return rows.map((row) => {
87
- const minutes = resolveEstimateDefaultMinutes(row.type, overrides);
88
- return {
89
- item_id: row.id,
90
- check: "metadata",
91
- field: "estimated_minutes",
92
- kind: "set_estimate",
93
- value: String(minutes),
94
- command: `pm update ${row.id} --estimate ${minutes}`,
95
- gate: "estimates",
96
- };
97
- });
98
- }
99
- /** Plan lifecycle fixes for active items whose parent is terminal (pm-8jss / GH-168). When the terminal parent has an active grandparent, the child is reparented one level up (it stays inside the same hierarchy); otherwise the parent link is cleared so the item surfaces as unparented active work. Either way the item itself is never closed or mutated beyond `parent` — and every fix carries `gate: "lifecycle"` so it is only applied under an explicit `--fix-scope lifecycle`. */
100
- export function planTerminalParentFixes(rows) {
101
- return rows.map((row) => {
102
- if (row.grandparent_id !== undefined && row.grandparent_active === true) {
103
- return {
104
- item_id: row.id,
105
- check: "lifecycle",
106
- field: "parent",
107
- kind: "reparent",
108
- parent_id: row.grandparent_id,
109
- command: `pm update ${row.id} --parent ${row.grandparent_id}`,
110
- gate: "lifecycle",
111
- };
112
- }
113
- return {
114
- item_id: row.id,
115
- check: "lifecycle",
116
- field: "parent",
117
- kind: "unset_parent",
118
- command: `pm update ${row.id} --unset parent`,
119
- gate: "lifecycle",
120
- };
121
- });
122
- }
123
- /** Plan link prunes for `--prune-missing` (pm-0v2m / GH-184). Only links whose stale path classified as `deleted` are pruned; `moved` links keep their relink candidates in the files-check details instead of being dropped, so recoverable link information is never destroyed. Link removal only — real files are never touched. */
124
- export function planStaleLinkPruneFixes(rows) {
125
- const fixes = [];
126
- for (const row of rows) {
127
- if (row.classification !== "deleted") {
128
- continue;
129
- }
130
- const noun = row.link_kind === "files" ? "files" : "docs";
131
- fixes.push({
132
- item_id: row.item_id,
133
- check: "files",
134
- field: row.link_kind,
135
- kind: row.link_kind === "files" ? "prune_file_link" : "prune_doc_link",
136
- path: row.path,
137
- command: `pm ${noun} ${row.item_id} --remove ${quoteForCommand(row.path)}`,
138
- });
139
- }
140
- return fixes;
141
- }
142
- /** Resolve the granted `--fix-scope` set (repeatable and/or comma-separated). With no explicit scopes the safe field-backfill scopes (metadata, resolution) are granted; lifecycle must always be named explicitly. Unknown values fail fast with the supported list. */
143
- export function resolveGrantedFixScopes(rawScopes) {
144
- const tokens = (rawScopes ?? [])
145
- .flatMap((raw) => raw.split(","))
146
- .map((raw) => raw.trim())
147
- .filter((raw) => raw.length > 0);
148
- if (tokens.length === 0) {
149
- if (rawScopes !== undefined && rawScopes.length > 0) {
150
- throw new PmCliError(`--fix-scope values must not be empty. Supported values: ${SUPPORTED_FIX_SCOPES.join(", ")}.`, EXIT_CODE.USAGE);
151
- }
152
- return new Set(DEFAULT_GRANTED_FIX_SCOPES);
153
- }
154
- const granted = new Set();
155
- for (const raw of tokens) {
156
- const normalized = raw.toLowerCase().replaceAll("-", "_");
157
- if (SUPPORTED_FIX_SCOPES.includes(normalized)) {
158
- granted.add(normalized);
159
- continue;
160
- }
161
- throw new PmCliError(`Unknown --fix-scope value "${raw}". Supported values: ${SUPPORTED_FIX_SCOPES.join(", ")}.`, EXIT_CODE.USAGE);
162
- }
163
- return granted;
164
- }
165
- /** Split a fix plan into the records that may be applied under the granted scopes and the gated records that were withheld. `--fix-scope` is an exact allowlist: every `--auto-fix` record requires its gate scope in `granted`. Ungated records (`--prune-missing` link prunes, governed by their own flag) are always applicable. */
166
- export function partitionFixesByGrant(fixes, granted) {
167
- const applicable = [];
168
- const gated = [];
169
- for (const fix of fixes) {
170
- if (fix.gate !== undefined && !granted.has(fix.gate)) {
171
- gated.push(fix);
172
- }
173
- else {
174
- applicable.push(fix);
175
- }
176
- }
177
- return { applicable, gated };
178
- }
179
- /** Compact serialization of a fix for planned/applied output rows. */
180
- export function toFixOutputRow(fix) {
181
- return {
182
- item_id: fix.item_id,
183
- check: fix.check,
184
- field: fix.field,
185
- command: fix.command,
186
- ...(fix.gate !== undefined ? { gate: fix.gate } : {}),
187
- };
188
- }
1
+ !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="55d5ac7a-9aa4-569e-9bb6-f504a0ac7421")}catch(e2){}})();import{EXIT_CODE}from"../shared/constants.js";import{PmCliError}from"../shared/errors.js";import{resolveEstimateDefaultMinutes}from"./estimate-defaults.js";const DEFAULT_GRANTED_FIX_SCOPES=["metadata","resolution"];const SUPPORTED_FIX_SCOPES=["metadata","resolution","estimates","lifecycle"];const DEFAULT_RESOLUTION_BACKFILL_VALUE="completed";function quoteForCommand(value){return`"${value.replaceAll("\\","\\\\").replaceAll('"','\\"')}"`}function toMeaningfulValue(value){const trimmed=value?.trim();return trimmed!==void 0&&trimmed.length>0?trimmed:void 0}function planResolutionBackfillFixes(rows){const fixes=[];for(const row of rows){if(!row.missing_fields.includes("resolution")){continue}const value=toMeaningfulValue(row.close_reason)??DEFAULT_RESOLUTION_BACKFILL_VALUE;fixes.push({item_id:row.id,check:"resolution",field:"resolution",kind:"set_resolution",value,command:`pm update ${row.id} --resolution ${quoteForCommand(value)}`,gate:"resolution"})}return fixes}function planCloseReasonBackfillFixes(rows){const fixes=[];for(const row of rows){const value=toMeaningfulValue(row.resolution);if(value===void 0){continue}fixes.push({item_id:row.id,check:"metadata",field:"close_reason",kind:"set_close_reason",value,command:`pm update ${row.id} --close-reason ${quoteForCommand(value)}`,gate:"metadata"})}return fixes}function planEstimateBackfillFixes(rows,overrides){return rows.map(row=>{const minutes=resolveEstimateDefaultMinutes(row.type,overrides);return{item_id:row.id,check:"metadata",field:"estimated_minutes",kind:"set_estimate",value:String(minutes),command:`pm update ${row.id} --estimate ${minutes}`,gate:"estimates"}})}function planTerminalParentFixes(rows){return rows.map(row=>{if(row.grandparent_id!==void 0&&row.grandparent_active===true){return{item_id:row.id,check:"lifecycle",field:"parent",kind:"reparent",parent_id:row.grandparent_id,command:`pm update ${row.id} --parent ${row.grandparent_id}`,gate:"lifecycle"}}return{item_id:row.id,check:"lifecycle",field:"parent",kind:"unset_parent",command:`pm update ${row.id} --unset parent`,gate:"lifecycle"}})}function planStaleLinkPruneFixes(rows){const fixes=[];for(const row of rows){if(row.classification!=="deleted"){continue}const noun=row.link_kind==="files"?"files":"docs";fixes.push({item_id:row.item_id,check:"files",field:row.link_kind,kind:row.link_kind==="files"?"prune_file_link":"prune_doc_link",path:row.path,command:`pm ${noun} ${row.item_id} --remove ${quoteForCommand(row.path)}`})}return fixes}function resolveGrantedFixScopes(rawScopes){const tokens=(rawScopes??[]).flatMap(raw=>raw.split(",")).map(raw=>raw.trim()).filter(raw=>raw.length>0);if(tokens.length===0){if(rawScopes!==void 0&&rawScopes.length>0){throw new PmCliError(`--fix-scope values must not be empty. Supported values: ${SUPPORTED_FIX_SCOPES.join(", ")}.`,EXIT_CODE.USAGE)}return new Set(DEFAULT_GRANTED_FIX_SCOPES)}const granted=new Set;for(const raw of tokens){const normalized=raw.toLowerCase().replaceAll("-","_");if(SUPPORTED_FIX_SCOPES.includes(normalized)){granted.add(normalized);continue}throw new PmCliError(`Unknown --fix-scope value "${raw}". Supported values: ${SUPPORTED_FIX_SCOPES.join(", ")}.`,EXIT_CODE.USAGE)}return granted}function partitionFixesByGrant(fixes,granted){const applicable=[];const gated=[];for(const fix of fixes){if(fix.gate!==void 0&&!granted.has(fix.gate)){gated.push(fix)}else{applicable.push(fix)}}return{applicable,gated}}function toFixOutputRow(fix){return{item_id:fix.item_id,check:fix.check,field:fix.field,command:fix.command,...fix.gate!==void 0?{gate:fix.gate}:{}}}export{DEFAULT_GRANTED_FIX_SCOPES,SUPPORTED_FIX_SCOPES,partitionFixesByGrant,planCloseReasonBackfillFixes,planEstimateBackfillFixes,planResolutionBackfillFixes,planStaleLinkPruneFixes,planTerminalParentFixes,resolveGrantedFixScopes,toFixOutputRow};
189
2
  //# sourceMappingURL=fix-planning.js.map
190
- //# debugId=98a73818-c4ef-5bce-8b23-6c40f7312cc3
@@ -1,37 +1,2 @@
1
- /**
2
- * Remote-reference detection for linked artifacts (`pm files` / `pm docs`
3
- * `path` values).
4
- *
5
- * A linked artifact path is normally a workspace-relative or absolute local
6
- * filesystem path, but `pm docs --add` legitimately records *remote*
7
- * references too — most commonly an `https://` URL to a pull request, issue, or
8
- * external design doc. Such references are not local files, so they must never
9
- * be:
10
- * - probed with `fs.stat` for existence (the resolved path is meaningless),
11
- * - classified as `moved`/`deleted` by the stale-path classifier,
12
- * - counted among `missing_linked_paths` in `pm validate --check-files`, or
13
- * - pruned by `pm validate --prune-missing` — which would silently destroy an
14
- * intentionally-recorded reference (project management = context management).
15
- *
16
- * Pure module: no filesystem or network access — callers pass the stored path
17
- * string and branch on the boolean result.
18
- */
19
- /**
20
- * Matches an RFC 3986 URI that carries an authority component
21
- * (`scheme://…`) — e.g. `https://`, `http://`, `ftp://`, `ssh://`, `file://`.
22
- *
23
- * The scheme is required to be at least two characters so a Windows drive
24
- * prefix (`C:/…`, which is a single letter followed by a single slash and never
25
- * `://`) can never be mistaken for a remote reference. A relative or absolute
26
- * POSIX path (`src/api.ts`, `/dev/null`) and a UNC path (`//server/share`) all
27
- * lack the `scheme://` shape and are correctly treated as local.
28
- */
29
-
30
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2b9ba0a4-396f-5870-bc89-e7fc789bb49d")}catch(e){}}();
31
- const REMOTE_ARTIFACT_REFERENCE_PATTERN = /^[a-z][a-z0-9+.-]+:\/\//i;
32
- /** Return `true` when a linked-artifact path is a remote reference (a URL with a `scheme://` authority) rather than a local filesystem path. Whitespace is trimmed before matching so a stored `" https://…"` is still recognized. */
33
- export function isRemoteLinkedArtifactReference(path) {
34
- return REMOTE_ARTIFACT_REFERENCE_PATTERN.test(path.trim());
35
- }
1
+ !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="6f94fb3c-3d6c-5543-a2f0-e12680459e71")}catch(e2){}})();const REMOTE_ARTIFACT_REFERENCE_PATTERN=/^[a-z][a-z0-9+.-]+:\/\//i;function isRemoteLinkedArtifactReference(path){return REMOTE_ARTIFACT_REFERENCE_PATTERN.test(path.trim())}export{isRemoteLinkedArtifactReference};
36
2
  //# sourceMappingURL=linked-artifact-reference.js.map
37
- //# debugId=2b9ba0a4-396f-5870-bc89-e7fc789bb49d
@@ -1,35 +1,2 @@
1
- /**
2
- * Per-item-type grouping of missing-required-field counts for
3
- * `pm validate --check-metadata` (pm-pmyq / GH-172).
4
- *
5
- * Pure module: callers stream `(item_type, field)` pairs — one per missing
6
- * required field occurrence — and receive a compact, deterministically sorted
7
- * `missing_by_type` map of counts (never row dumps), e.g.
8
- * `{ Task: { close_reason: 3, reviewer: 1 } }`.
9
- */
10
- /** Aggregate missing-field occurrences into `{ type: { field: count } }` with both levels sorted lexicographically for stable, diff-friendly output. Zero counts never appear (only observed occurrences are aggregated). */
11
-
12
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="1951b0f1-11fa-5728-b516-7458a55b1e29")}catch(e){}}();
13
- export function buildMissingByTypeCounts(occurrences) {
14
- const countsByType = new Map();
15
- for (const occurrence of occurrences) {
16
- let fieldCounts = countsByType.get(occurrence.item_type);
17
- if (!fieldCounts) {
18
- fieldCounts = new Map();
19
- countsByType.set(occurrence.item_type, fieldCounts);
20
- }
21
- fieldCounts.set(occurrence.field, (fieldCounts.get(occurrence.field) ?? 0) + 1);
22
- }
23
- const result = {};
24
- for (const type of [...countsByType.keys()].sort((left, right) => left.localeCompare(right))) {
25
- const fieldCounts = countsByType.get(type);
26
- const fields = {};
27
- for (const field of [...fieldCounts.keys()].sort((left, right) => left.localeCompare(right))) {
28
- fields[field] = fieldCounts.get(field);
29
- }
30
- result[type] = fields;
31
- }
32
- return result;
33
- }
1
+ !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="b51a9fba-7bbe-573b-a708-5ffea6fa040f")}catch(e2){}})();function buildMissingByTypeCounts(occurrences){const countsByType=new Map;for(const occurrence of occurrences){let fieldCounts=countsByType.get(occurrence.item_type);if(!fieldCounts){fieldCounts=new Map;countsByType.set(occurrence.item_type,fieldCounts)}fieldCounts.set(occurrence.field,(fieldCounts.get(occurrence.field)??0)+1)}const result={};for(const type of[...countsByType.keys()].sort((left,right)=>left.localeCompare(right))){const fieldCounts=countsByType.get(type);const fields={};for(const field of[...fieldCounts.keys()].sort((left,right)=>left.localeCompare(right))){fields[field]=fieldCounts.get(field)}result[type]=fields}return result}export{buildMissingByTypeCounts};
34
2
  //# sourceMappingURL=missing-by-type.js.map
35
- //# debugId=1951b0f1-11fa-5728-b516-7458a55b1e29