@unbrained/pm-cli 2026.6.30 → 2026.7.2

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 (628) hide show
  1. package/AGENTS.md +2 -0
  2. package/CHANGELOG.md +26 -0
  3. package/dist/cli/bootstrap-args.js +89 -79
  4. package/dist/cli/bootstrap-args.js.map +1 -1
  5. package/dist/cli/commander-usage.d.ts +2 -0
  6. package/dist/cli/commander-usage.js +58 -47
  7. package/dist/cli/commander-usage.js.map +1 -1
  8. package/dist/cli/commands/aggregate.js +102 -79
  9. package/dist/cli/commands/aggregate.js.map +1 -1
  10. package/dist/cli/commands/calendar.js +339 -303
  11. package/dist/cli/commands/calendar.js.map +1 -1
  12. package/dist/cli/commands/close-many.js +89 -68
  13. package/dist/cli/commands/close-many.js.map +1 -1
  14. package/dist/cli/commands/close.js +157 -129
  15. package/dist/cli/commands/close.js.map +1 -1
  16. package/dist/cli/commands/comments-audit.js +50 -42
  17. package/dist/cli/commands/comments-audit.js.map +1 -1
  18. package/dist/cli/commands/config.d.ts +2 -0
  19. package/dist/cli/commands/config.js +443 -879
  20. package/dist/cli/commands/config.js.map +1 -1
  21. package/dist/cli/commands/context.js +365 -287
  22. package/dist/cli/commands/context.js.map +1 -1
  23. package/dist/cli/commands/contracts.js +352 -238
  24. package/dist/cli/commands/contracts.js.map +1 -1
  25. package/dist/cli/commands/create.js +483 -434
  26. package/dist/cli/commands/create.js.map +1 -1
  27. package/dist/cli/commands/dedupe-audit.js +46 -39
  28. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  29. package/dist/cli/commands/dedupe-merge.js +88 -69
  30. package/dist/cli/commands/dedupe-merge.js.map +1 -1
  31. package/dist/cli/commands/extension/bundled-catalog.js +59 -46
  32. package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
  33. package/dist/cli/commands/extension/doctor.js +129 -78
  34. package/dist/cli/commands/extension/doctor.js.map +1 -1
  35. package/dist/cli/commands/extension/managed-state.js +101 -57
  36. package/dist/cli/commands/extension/managed-state.js.map +1 -1
  37. package/dist/cli/commands/extension/scaffold.d.ts +7 -0
  38. package/dist/cli/commands/extension/scaffold.js +214 -186
  39. package/dist/cli/commands/extension/scaffold.js.map +1 -1
  40. package/dist/cli/commands/extension.d.ts +6 -1
  41. package/dist/cli/commands/extension.js +1034 -902
  42. package/dist/cli/commands/extension.js.map +1 -1
  43. package/dist/cli/commands/get.js +114 -81
  44. package/dist/cli/commands/get.js.map +1 -1
  45. package/dist/cli/commands/health.d.ts +17 -0
  46. package/dist/cli/commands/health.js +446 -307
  47. package/dist/cli/commands/health.js.map +1 -1
  48. package/dist/cli/commands/history-compact.js +209 -140
  49. package/dist/cli/commands/history-compact.js.map +1 -1
  50. package/dist/cli/commands/history-redact.js +162 -119
  51. package/dist/cli/commands/history-redact.js.map +1 -1
  52. package/dist/cli/commands/history-repair.js +120 -85
  53. package/dist/cli/commands/history-repair.js.map +1 -1
  54. package/dist/cli/commands/init.d.ts +8 -2
  55. package/dist/cli/commands/init.js +263 -162
  56. package/dist/cli/commands/init.js.map +1 -1
  57. package/dist/cli/commands/list-filter-shared.js +55 -48
  58. package/dist/cli/commands/list-filter-shared.js.map +1 -1
  59. package/dist/cli/commands/list.js +152 -102
  60. package/dist/cli/commands/list.js.map +1 -1
  61. package/dist/cli/commands/next.js +49 -32
  62. package/dist/cli/commands/next.js.map +1 -1
  63. package/dist/cli/commands/plan.js +373 -298
  64. package/dist/cli/commands/plan.js.map +1 -1
  65. package/dist/cli/commands/recurrence-parsers.js +43 -25
  66. package/dist/cli/commands/recurrence-parsers.js.map +1 -1
  67. package/dist/cli/commands/reindex.d.ts +21 -5
  68. package/dist/cli/commands/reindex.js +345 -205
  69. package/dist/cli/commands/reindex.js.map +1 -1
  70. package/dist/cli/commands/restore.d.ts +8 -7
  71. package/dist/cli/commands/restore.js +105 -69
  72. package/dist/cli/commands/restore.js.map +1 -1
  73. package/dist/cli/commands/schema.js +33 -30
  74. package/dist/cli/commands/schema.js.map +1 -1
  75. package/dist/cli/commands/search.d.ts +10 -2
  76. package/dist/cli/commands/search.js +595 -536
  77. package/dist/cli/commands/search.js.map +1 -1
  78. package/dist/cli/commands/telemetry.js +98 -87
  79. package/dist/cli/commands/telemetry.js.map +1 -1
  80. package/dist/cli/commands/test-all.js +237 -168
  81. package/dist/cli/commands/test-all.js.map +1 -1
  82. package/dist/cli/commands/test.d.ts +6 -5
  83. package/dist/cli/commands/test.js +530 -464
  84. package/dist/cli/commands/test.js.map +1 -1
  85. package/dist/cli/commands/update-many.js +57 -42
  86. package/dist/cli/commands/update-many.js.map +1 -1
  87. package/dist/cli/commands/update.d.ts +1 -1
  88. package/dist/cli/commands/update.js +764 -747
  89. package/dist/cli/commands/update.js.map +1 -1
  90. package/dist/cli/commands/validate.d.ts +18 -1
  91. package/dist/cli/commands/validate.js +466 -343
  92. package/dist/cli/commands/validate.js.map +1 -1
  93. package/dist/cli/error-guidance.js +399 -357
  94. package/dist/cli/error-guidance.js.map +1 -1
  95. package/dist/cli/extension-command-options.js +48 -21
  96. package/dist/cli/extension-command-options.js.map +1 -1
  97. package/dist/cli/main.d.ts +47 -0
  98. package/dist/cli/main.js +428 -341
  99. package/dist/cli/main.js.map +1 -1
  100. package/dist/cli/migration-gates.js +22 -45
  101. package/dist/cli/migration-gates.js.map +1 -1
  102. package/dist/cli/register-list-query.js +94 -105
  103. package/dist/cli/register-list-query.js.map +1 -1
  104. package/dist/cli/register-mutation.js +400 -416
  105. package/dist/cli/register-mutation.js.map +1 -1
  106. package/dist/cli/register-operations.js +86 -66
  107. package/dist/cli/register-operations.js.map +1 -1
  108. package/dist/cli/register-setup.js +120 -101
  109. package/dist/cli/register-setup.js.map +1 -1
  110. package/dist/cli/registration-helpers.js +117 -122
  111. package/dist/cli/registration-helpers.js.map +1 -1
  112. package/dist/cli-bundle/chunks/{activity-MVSEND6D.js → activity-CUC4JY3U.js} +9 -9
  113. package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
  114. package/dist/cli-bundle/chunks/{aggregate-MOC4TR2G.js → aggregate-DKUTRY6R.js} +109 -85
  115. package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
  116. package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js → aggregate-SW5PNGCS.js} +108 -84
  117. package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js.map → aggregate-SW5PNGCS.js.map} +2 -2
  118. package/dist/cli-bundle/chunks/{append-KDHT4GHI.js → append-H32VOR2Y.js} +6 -6
  119. package/dist/cli-bundle/chunks/{append-LEDBAM3K.js → append-UBM632FK.js} +6 -6
  120. package/dist/cli-bundle/chunks/{chunk-Z55WX4IQ.js → chunk-2227673O.js} +158 -114
  121. package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
  122. package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js → chunk-2ASNV4DH.js} +4 -4
  123. package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js → chunk-2CHRYUXL.js} +2 -2
  124. package/dist/cli-bundle/chunks/{chunk-QE5UFCCO.js → chunk-2KWL5NPW.js} +42 -27
  125. package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
  126. package/dist/cli-bundle/chunks/{chunk-ZEATCVAC.js → chunk-36UGKF4O.js} +21 -29
  127. package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-JZG5ADVE.js → chunk-3AZUFQK6.js} +1103 -963
  129. package/dist/cli-bundle/chunks/chunk-3AZUFQK6.js.map +1 -0
  130. package/dist/cli-bundle/chunks/{chunk-DRPF274X.js → chunk-3LCUASYG.js} +2 -2
  131. package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js → chunk-3Q2HBMTI.js} +2 -2
  132. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +87 -0
  133. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +7 -0
  134. package/dist/cli-bundle/chunks/{chunk-GF7EAR22.js → chunk-4NUOWFBT.js} +109 -72
  135. package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
  136. package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js → chunk-55XRYWEG.js} +6 -6
  137. package/dist/cli-bundle/chunks/{chunk-5IRVSKPS.js → chunk-5GVTFFTC.js} +150 -224
  138. package/dist/cli-bundle/chunks/chunk-5GVTFFTC.js.map +1 -0
  139. package/dist/cli-bundle/chunks/{chunk-CHRNYKNI.js → chunk-5PGBHRY3.js} +41 -26
  140. package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
  141. package/dist/cli-bundle/chunks/{chunk-53ARXF2O.js → chunk-66Z3X7ZG.js} +261 -161
  142. package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
  143. package/dist/cli-bundle/chunks/{chunk-A3UNLXNJ.js → chunk-6ITZLD4T.js} +738 -688
  144. package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
  145. package/dist/cli-bundle/chunks/{chunk-JTRKME24.js → chunk-6YCYF2AI.js} +262 -162
  146. package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
  147. package/dist/cli-bundle/chunks/{chunk-RM6MHL6A.js → chunk-6ZMBJRDJ.js} +580 -467
  148. package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
  149. package/dist/cli-bundle/chunks/{chunk-RPRW26NG.js → chunk-7MYWF4ZX.js} +110 -73
  150. package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
  151. package/dist/cli-bundle/chunks/{chunk-SNUK7H5J.js → chunk-7NSPKJUS.js} +716 -606
  152. package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
  153. package/dist/cli-bundle/chunks/{chunk-KYDYQMNW.js → chunk-7TH5NMVB.js} +95 -53
  154. package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
  155. package/dist/cli-bundle/chunks/{chunk-VD3LKZFX.js → chunk-7W4H4K26.js} +739 -689
  156. package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
  157. package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js → chunk-A6VOGKBA.js} +6 -6
  158. package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js → chunk-AIAIXG7I.js} +2 -2
  159. package/dist/cli-bundle/chunks/{chunk-NIBP3I7A.js → chunk-AJEBCRIY.js} +128 -126
  160. package/dist/cli-bundle/chunks/chunk-AJEBCRIY.js.map +1 -0
  161. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
  162. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
  163. package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js → chunk-BTX5MIQF.js} +2 -2
  164. package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js +809 -0
  165. package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js.map +7 -0
  166. package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js → chunk-CYBDUHNO.js} +3 -3
  167. package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js → chunk-CZPVDLD2.js} +4 -4
  168. package/dist/cli-bundle/chunks/{chunk-FDEVKXC4.js → chunk-EMPGXBUF.js} +22 -30
  169. package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
  170. package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js → chunk-EUKTMRN3.js} +2 -2
  171. package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js → chunk-FFOQHGNH.js} +6 -6
  172. package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js → chunk-GFMSLORL.js} +6 -6
  173. package/dist/cli-bundle/chunks/{chunk-IZQOJR2B.js → chunk-GRRG3MCT.js} +198 -189
  174. package/dist/cli-bundle/chunks/chunk-GRRG3MCT.js.map +7 -0
  175. package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js → chunk-H4GRLYJS.js} +3 -3
  176. package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js → chunk-HQTPRV4D.js} +6 -6
  177. package/dist/cli-bundle/chunks/{chunk-CY5IJMUM.js → chunk-I66WE2HE.js} +712 -602
  178. package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
  179. package/dist/cli-bundle/chunks/{chunk-ZFIEEDTJ.js → chunk-IEEJQCZ4.js} +509 -363
  180. package/dist/cli-bundle/chunks/chunk-IEEJQCZ4.js.map +7 -0
  181. package/dist/cli-bundle/chunks/{chunk-DU66JUGT.js → chunk-IG5JYZGU.js} +488 -420
  182. package/dist/cli-bundle/chunks/chunk-IG5JYZGU.js.map +7 -0
  183. package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js → chunk-JMK5GCK2.js} +2 -2
  184. package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js → chunk-JXAUVO6X.js} +258 -169
  185. package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js.map → chunk-JXAUVO6X.js.map} +2 -2
  186. package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js → chunk-K2VYLVX4.js} +2 -2
  187. package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js → chunk-KCO2EAN5.js} +3 -3
  188. package/dist/cli-bundle/chunks/{chunk-T7ZMQI4J.js → chunk-KIYCOJ63.js} +198 -189
  189. package/dist/cli-bundle/chunks/chunk-KIYCOJ63.js.map +1 -0
  190. package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js → chunk-KLXF7NCC.js} +2 -2
  191. package/dist/cli-bundle/chunks/{chunk-V3KLX7U7.js → chunk-KN3URLKS.js} +510 -364
  192. package/dist/cli-bundle/chunks/chunk-KN3URLKS.js.map +1 -0
  193. package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js → chunk-LRKMWUUV.js} +2 -2
  194. package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js → chunk-LTRAF2D7.js} +3 -3
  195. package/dist/cli-bundle/chunks/{chunk-5T6WPLRO.js → chunk-MNBPX5JS.js} +394 -354
  196. package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
  197. package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js → chunk-MRD4T5LF.js} +2 -2
  198. package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js → chunk-N2JSWVWG.js} +4 -4
  199. package/dist/cli-bundle/chunks/{chunk-7WDETKGP.js → chunk-N3QCJS4M.js} +1105 -965
  200. package/dist/cli-bundle/chunks/chunk-N3QCJS4M.js.map +7 -0
  201. package/dist/cli-bundle/chunks/{chunk-KGQ3W65B.js → chunk-NRZS637N.js} +258 -169
  202. package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
  203. package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js +799 -0
  204. package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js.map +1 -0
  205. package/dist/cli-bundle/chunks/{chunk-ZIE6WXJ2.js → chunk-Q6K2OACU.js} +153 -90
  206. package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
  207. package/dist/cli-bundle/chunks/{chunk-K46GQ265.js → chunk-Q6NXOHS6.js} +489 -421
  208. package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
  209. package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js → chunk-QH3FSKRJ.js} +2 -2
  210. package/dist/cli-bundle/chunks/{chunk-UB3V5WUI.js → chunk-RM37OPYK.js} +394 -354
  211. package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
  212. package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js → chunk-S62UANU7.js} +3 -3
  213. package/dist/cli-bundle/chunks/{chunk-NO6Y6FB2.js → chunk-SPM2XLWI.js} +37 -28
  214. package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
  215. package/dist/cli-bundle/chunks/{chunk-DORJSBGJ.js → chunk-SYNKD3ZG.js} +127 -125
  216. package/dist/cli-bundle/chunks/chunk-SYNKD3ZG.js.map +7 -0
  217. package/dist/cli-bundle/chunks/{chunk-6YRAMXRS.js → chunk-SYVUU7EK.js} +581 -468
  218. package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
  219. package/dist/cli-bundle/chunks/{chunk-D5LYZVGB.js → chunk-TPOFWBMY.js} +95 -53
  220. package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
  221. package/dist/cli-bundle/chunks/{chunk-IHXXUIXS.js → chunk-TTHCEV5Q.js} +92 -77
  222. package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
  223. package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js → chunk-U2BEEM2X.js} +3 -3
  224. package/dist/cli-bundle/chunks/{chunk-Z5BM2FKQ.js → chunk-UGLU6Q2I.js} +91 -76
  225. package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
  226. package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js → chunk-UT73HUPC.js} +3 -3
  227. package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js → chunk-UTSH5GWX.js} +4 -4
  228. package/dist/cli-bundle/chunks/{chunk-AWN4PPH5.js → chunk-UWKEJMZU.js} +157 -113
  229. package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
  230. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +84 -0
  231. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +1 -0
  232. package/dist/cli-bundle/chunks/{chunk-KTMMTOIP.js → chunk-W47SML5B.js} +152 -89
  233. package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
  234. package/dist/cli-bundle/chunks/{chunk-UFKNF23C.js → chunk-WJAMWAHZ.js} +157 -118
  235. package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
  236. package/dist/cli-bundle/chunks/{chunk-HIBK6H4S.js → chunk-XCHUVHKU.js} +685 -544
  237. package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
  238. package/dist/cli-bundle/chunks/{chunk-DJDXAU74.js → chunk-XEWQKDYZ.js} +685 -544
  239. package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
  240. package/dist/cli-bundle/chunks/{chunk-BOWQWXLI.js → chunk-XTHQWXVC.js} +158 -119
  241. package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
  242. package/dist/cli-bundle/chunks/{chunk-6T5ZIWBS.js → chunk-XWGEMNBR.js} +150 -224
  243. package/dist/cli-bundle/chunks/chunk-XWGEMNBR.js.map +7 -0
  244. package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js → chunk-Y4NRKBFW.js} +3 -3
  245. package/dist/cli-bundle/chunks/{chunk-WTRUDJ3R.js → chunk-YLZZ6T54.js} +38 -29
  246. package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
  247. package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js → chunk-YPKFV2JR.js} +6 -6
  248. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
  249. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
  250. package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js → chunk-ZNHEYCDD.js} +2 -2
  251. package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js → chunk-ZNT7KEWE.js} +2 -2
  252. package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js → claim-SENTPZBN.js} +8 -8
  253. package/dist/cli-bundle/chunks/{claim-6NINZYB3.js → claim-Z7MEQCBT.js} +8 -8
  254. package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js → close-424MX4CU.js} +7 -7
  255. package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
  256. package/dist/cli-bundle/chunks/{close-many-CXJBOWWY.js → close-many-2IV4J2TR.js} +103 -82
  257. package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
  258. package/dist/cli-bundle/chunks/{close-many-BFMP6HHK.js → close-many-SWY34BII.js} +102 -81
  259. package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
  260. package/dist/cli-bundle/chunks/{comments-ETHABIY6.js → comments-4FGNTSNV.js} +8 -8
  261. package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js → comments-7YS5MY5X.js} +8 -8
  262. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js +1062 -0
  263. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js.map +1 -0
  264. package/dist/cli-bundle/chunks/config-G74GISC4.js +1072 -0
  265. package/dist/cli-bundle/chunks/config-G74GISC4.js.map +7 -0
  266. package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js → context-LHVKJSPJ.js} +12 -12
  267. package/dist/cli-bundle/chunks/{context-XDI4DKKT.js → context-ZQY54JNS.js} +12 -12
  268. package/dist/cli-bundle/chunks/{contracts-SMOAN5NF.js → contracts-CP2EZJC7.js} +320 -199
  269. package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
  270. package/dist/cli-bundle/chunks/{contracts-KP4QAGVW.js → contracts-FIZLMP7O.js} +321 -200
  271. package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
  272. package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js → copy-GYNQQPW2.js} +5 -5
  273. package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js → copy-TLW7JTQT.js} +5 -5
  274. package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js → create-VSKYSOCD.js} +12 -12
  275. package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
  276. package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js → delete-4W5JYCEG.js} +5 -5
  277. package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js → delete-ANTOTI2I.js} +5 -5
  278. package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js → deps-HPPE6MJN.js} +5 -5
  279. package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js → deps-ZQZN54EZ.js} +5 -5
  280. package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js → docs-RPOVFMP3.js} +7 -7
  281. package/dist/cli-bundle/chunks/{docs-2TIFR62T.js → docs-XJNYBJGE.js} +7 -7
  282. package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js → eval-DM6JBZTS.js} +10 -10
  283. package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js → eval-RFBI5FGS.js} +10 -10
  284. package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js → extension-B3YY4WY5.js} +11 -10
  285. package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js → extension-TTSEFQTS.js} +11 -10
  286. package/dist/cli-bundle/chunks/{files-DF3HO6XK.js → files-5D65CHGE.js} +7 -7
  287. package/dist/cli-bundle/chunks/{files-T5ODMETM.js → files-GPIG77EN.js} +7 -7
  288. package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js → focus-C3PEJV2C.js} +6 -6
  289. package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js → focus-ZHN7WIGX.js} +6 -6
  290. package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js → gc-D4JQ6OWN.js} +3 -3
  291. package/dist/cli-bundle/chunks/{gc-FULIVYR4.js → gc-VZIXDL32.js} +3 -3
  292. package/dist/cli-bundle/chunks/{get-VYPIICPC.js → get-GIBRUUOP.js} +121 -81
  293. package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
  294. package/dist/cli-bundle/chunks/{get-AWK324RS.js → get-IOVAN6RU.js} +120 -80
  295. package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
  296. package/dist/cli-bundle/chunks/{health-Q66C43GN.js → health-L2U3AFKV.js} +437 -264
  297. package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
  298. package/dist/cli-bundle/chunks/{health-FBCVZGSX.js → health-MM7AWXYF.js} +436 -263
  299. package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +7 -0
  300. package/dist/cli-bundle/chunks/history-DD7L7BNL.js +18 -0
  301. package/dist/cli-bundle/chunks/{history-X4OSES6K.js → history-IL7XCEX2.js} +8 -8
  302. package/dist/cli-bundle/chunks/{history-compact-2GHT32UX.js → history-compact-HALOTOU7.js} +214 -135
  303. package/dist/cli-bundle/chunks/history-compact-HALOTOU7.js.map +1 -0
  304. package/dist/cli-bundle/chunks/{history-compact-WLCQEKXS.js → history-compact-MV25P7DM.js} +213 -134
  305. package/dist/cli-bundle/chunks/history-compact-MV25P7DM.js.map +7 -0
  306. package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +19 -0
  307. package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js → history-redact-VYCWQFK7.js} +9 -9
  308. package/dist/cli-bundle/chunks/{history-repair-FY75IC26.js → history-repair-44MODPQF.js} +124 -84
  309. package/dist/cli-bundle/chunks/history-repair-44MODPQF.js.map +1 -0
  310. package/dist/cli-bundle/chunks/{history-repair-GABSDSVD.js → history-repair-CPNAOCNF.js} +123 -83
  311. package/dist/cli-bundle/chunks/history-repair-CPNAOCNF.js.map +7 -0
  312. package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js → init-F27NHENZ.js} +12 -11
  313. package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
  314. package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js → learnings-HJVDQIGY.js} +8 -8
  315. package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js → learnings-XSFSUUWK.js} +8 -8
  316. package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js → list-HPMEKCAA.js} +8 -8
  317. package/dist/cli-bundle/chunks/{list-ROT7JF62.js → list-VMPWTURB.js} +8 -8
  318. package/dist/cli-bundle/chunks/{next-66BJB4N2.js → next-ETXF2ZCN.js} +59 -37
  319. package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
  320. package/dist/cli-bundle/chunks/{next-N5MWJTBY.js → next-QM6YJIIS.js} +60 -38
  321. package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
  322. package/dist/cli-bundle/chunks/{notes-FW6YFLND.js → notes-GDZIKGR6.js} +8 -8
  323. package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js → notes-WDDBPC4D.js} +8 -8
  324. package/dist/cli-bundle/chunks/{plan-ZHKZ7JVF.js → plan-BGDR73Z6.js} +373 -279
  325. package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
  326. package/dist/cli-bundle/chunks/{plan-DQ7G4EDC.js → plan-C5IMM335.js} +372 -278
  327. package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
  328. package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js → profile-CCOKZ2IQ.js} +9 -9
  329. package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js → profile-HUCENIEQ.js} +9 -9
  330. package/dist/cli-bundle/chunks/{register-list-query-Y2VRHPCL.js → register-list-query-ROSNIL52.js} +80 -83
  331. package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +1 -0
  332. package/dist/cli-bundle/chunks/{register-list-query-KY6Z6WV7.js → register-list-query-XN4ZRHSV.js} +79 -82
  333. package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +7 -0
  334. package/dist/cli-bundle/chunks/{register-mutation-PCARIGZS.js → register-mutation-CFSB2MS3.js} +406 -385
  335. package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
  336. package/dist/cli-bundle/chunks/{register-mutation-N6AYSKPM.js → register-mutation-KRLAHEL2.js} +405 -384
  337. package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
  338. package/dist/cli-bundle/chunks/{register-operations-L6CYTOIH.js → register-operations-4PASGJDB.js} +112 -93
  339. package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +7 -0
  340. package/dist/cli-bundle/chunks/{register-operations-YAT6FUUB.js → register-operations-MBN4KGUM.js} +113 -94
  341. package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +1 -0
  342. package/dist/cli-bundle/chunks/{register-setup-N7UGXYJC.js → register-setup-VIAWYFP5.js} +129 -104
  343. package/dist/cli-bundle/chunks/register-setup-VIAWYFP5.js.map +1 -0
  344. package/dist/cli-bundle/chunks/{register-setup-MPANILQF.js → register-setup-ZCGKHDKL.js} +128 -103
  345. package/dist/cli-bundle/chunks/register-setup-ZCGKHDKL.js.map +7 -0
  346. package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js → restore-4CBWUMCX.js} +9 -9
  347. package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
  348. package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
  349. package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
  350. package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js → schema-TDGK6N3I.js} +7 -7
  351. package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js → schema-UE5KKAUX.js} +7 -7
  352. package/dist/cli-bundle/chunks/{search-KP6H7COV.js → search-FP7MEU4S.js} +10 -10
  353. package/dist/cli-bundle/chunks/{search-CX5UMV4H.js → search-K4CFLQ5S.js} +10 -10
  354. package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js → stats-NJJCALEZ.js} +6 -6
  355. package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js → stats-XT6QRKQY.js} +6 -6
  356. package/dist/cli-bundle/chunks/{telemetry-DIFPXCAT.js → telemetry-5SQ5UDXC.js} +84 -70
  357. package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
  358. package/dist/cli-bundle/chunks/{telemetry-WTYFUPRL.js → telemetry-HVXFZA2U.js} +85 -71
  359. package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
  360. package/dist/cli-bundle/chunks/{test-QNDXZQCW.js → test-UFSJ5YIO.js} +15 -14
  361. package/dist/cli-bundle/chunks/{test-HU2BS7EY.js → test-YCDAUBWF.js} +15 -14
  362. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js +427 -0
  363. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js.map +1 -0
  364. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js +430 -0
  365. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js.map +7 -0
  366. package/dist/cli-bundle/chunks/{test-runs-CA6K32RD.js → test-runs-FK5E75AA.js} +185 -147
  367. package/dist/cli-bundle/chunks/test-runs-FK5E75AA.js.map +1 -0
  368. package/dist/cli-bundle/chunks/{test-runs-LANLLPVO.js → test-runs-H4TGWGRN.js} +184 -146
  369. package/dist/cli-bundle/chunks/test-runs-H4TGWGRN.js.map +7 -0
  370. package/dist/cli-bundle/chunks/update-MTCFES6X.js +24 -0
  371. package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js → update-Y5WQVT5O.js} +15 -15
  372. package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js → update-many-6YAYYRLE.js} +83 -68
  373. package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js.map → update-many-6YAYYRLE.js.map} +2 -2
  374. package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js → update-many-JTKKSA7Y.js} +84 -69
  375. package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js.map → update-many-JTKKSA7Y.js.map} +1 -1
  376. package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js → upgrade-DTAHZ236.js} +11 -10
  377. package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js.map → upgrade-DTAHZ236.js.map} +1 -1
  378. package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js → upgrade-JUDU7YL4.js} +13 -12
  379. package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js.map → upgrade-JUDU7YL4.js.map} +1 -1
  380. package/dist/cli-bundle/chunks/{validate-2G566PKQ.js → validate-732RWS5W.js} +440 -319
  381. package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
  382. package/dist/cli-bundle/chunks/{validate-BDPVXHHH.js → validate-W7H5TEDC.js} +441 -320
  383. package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
  384. package/dist/cli-bundle/main.js +986 -1500
  385. package/dist/cli-bundle/main.js.map +4 -4
  386. package/dist/core/config/nested-settings.js +89 -67
  387. package/dist/core/config/nested-settings.js.map +1 -1
  388. package/dist/core/extensions/activation-summary-markdown.js +23 -12
  389. package/dist/core/extensions/activation-summary-markdown.js.map +1 -1
  390. package/dist/core/extensions/extension-policy.d.ts +18 -3
  391. package/dist/core/extensions/extension-policy.js +116 -106
  392. package/dist/core/extensions/extension-policy.js.map +1 -1
  393. package/dist/core/extensions/loader.js +310 -232
  394. package/dist/core/extensions/loader.js.map +1 -1
  395. package/dist/core/governance/metadata-coverage.js +20 -28
  396. package/dist/core/governance/metadata-coverage.js.map +1 -1
  397. package/dist/core/history/drift-scan.js +93 -81
  398. package/dist/core/history/drift-scan.js.map +1 -1
  399. package/dist/core/item/item-format.js +523 -410
  400. package/dist/core/item/item-format.js.map +1 -1
  401. package/dist/core/item/item-type-definition.js +14 -14
  402. package/dist/core/item/item-type-definition.js.map +1 -1
  403. package/dist/core/item/type-registry.js +87 -82
  404. package/dist/core/item/type-registry.js.map +1 -1
  405. package/dist/core/output/mutation-projection.js +42 -26
  406. package/dist/core/output/mutation-projection.js.map +1 -1
  407. package/dist/core/schema/runtime-schema.js +34 -28
  408. package/dist/core/schema/runtime-schema.js.map +1 -1
  409. package/dist/core/search/semantic-defaults.js +64 -37
  410. package/dist/core/search/semantic-defaults.js.map +1 -1
  411. package/dist/core/search/vector-stores.js +32 -17
  412. package/dist/core/search/vector-stores.js.map +1 -1
  413. package/dist/core/sentry/helpers.js +31 -28
  414. package/dist/core/sentry/helpers.js.map +1 -1
  415. package/dist/core/sentry/instrument.js +54 -43
  416. package/dist/core/sentry/instrument.js.map +1 -1
  417. package/dist/core/store/front-matter-cache.js +239 -153
  418. package/dist/core/store/front-matter-cache.js.map +1 -1
  419. package/dist/core/store/item-store.js +33 -26
  420. package/dist/core/store/item-store.js.map +1 -1
  421. package/dist/core/store/settings.js +247 -203
  422. package/dist/core/store/settings.js.map +1 -1
  423. package/dist/core/test/background-runs.js +189 -160
  424. package/dist/core/test/background-runs.js.map +1 -1
  425. package/dist/mcp/server.js +387 -367
  426. package/dist/mcp/server.js.map +1 -1
  427. package/dist/sdk/cli-contracts/flag-contracts.js +111 -180
  428. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  429. package/dist/sdk/cli-contracts/tool-schema.js +76 -45
  430. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  431. package/dist/sdk/compose.d.ts +4 -1
  432. package/dist/sdk/compose.js +181 -115
  433. package/dist/sdk/compose.js.map +1 -1
  434. package/docs/RELEASING.md +2 -3
  435. package/package.json +2 -2
  436. package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
  437. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
  438. package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
  439. package/dist/cli-bundle/chunks/activity-EJBMXUBH.js +0 -16
  440. package/dist/cli-bundle/chunks/aggregate-MOC4TR2G.js.map +0 -1
  441. package/dist/cli-bundle/chunks/chunk-53ARXF2O.js.map +0 -7
  442. package/dist/cli-bundle/chunks/chunk-5IRVSKPS.js.map +0 -1
  443. package/dist/cli-bundle/chunks/chunk-5T6WPLRO.js.map +0 -7
  444. package/dist/cli-bundle/chunks/chunk-6T5ZIWBS.js.map +0 -7
  445. package/dist/cli-bundle/chunks/chunk-6YRAMXRS.js.map +0 -1
  446. package/dist/cli-bundle/chunks/chunk-7WDETKGP.js.map +0 -7
  447. package/dist/cli-bundle/chunks/chunk-A3UNLXNJ.js.map +0 -7
  448. package/dist/cli-bundle/chunks/chunk-AWN4PPH5.js.map +0 -7
  449. package/dist/cli-bundle/chunks/chunk-BOWQWXLI.js.map +0 -1
  450. package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js +0 -115
  451. package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js.map +0 -1
  452. package/dist/cli-bundle/chunks/chunk-CHRNYKNI.js.map +0 -7
  453. package/dist/cli-bundle/chunks/chunk-CY5IJMUM.js.map +0 -1
  454. package/dist/cli-bundle/chunks/chunk-D5LYZVGB.js.map +0 -1
  455. package/dist/cli-bundle/chunks/chunk-DJDXAU74.js.map +0 -7
  456. package/dist/cli-bundle/chunks/chunk-DORJSBGJ.js.map +0 -7
  457. package/dist/cli-bundle/chunks/chunk-DU66JUGT.js.map +0 -7
  458. package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js +0 -118
  459. package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js.map +0 -7
  460. package/dist/cli-bundle/chunks/chunk-FDEVKXC4.js.map +0 -1
  461. package/dist/cli-bundle/chunks/chunk-GF7EAR22.js.map +0 -7
  462. package/dist/cli-bundle/chunks/chunk-HIBK6H4S.js.map +0 -1
  463. package/dist/cli-bundle/chunks/chunk-IHXXUIXS.js.map +0 -1
  464. package/dist/cli-bundle/chunks/chunk-ISEKN64V.js +0 -35
  465. package/dist/cli-bundle/chunks/chunk-ISEKN64V.js.map +0 -7
  466. package/dist/cli-bundle/chunks/chunk-IZQOJR2B.js.map +0 -7
  467. package/dist/cli-bundle/chunks/chunk-JTRKME24.js.map +0 -1
  468. package/dist/cli-bundle/chunks/chunk-JZG5ADVE.js.map +0 -1
  469. package/dist/cli-bundle/chunks/chunk-K46GQ265.js.map +0 -1
  470. package/dist/cli-bundle/chunks/chunk-KGQ3W65B.js.map +0 -1
  471. package/dist/cli-bundle/chunks/chunk-KTMMTOIP.js.map +0 -7
  472. package/dist/cli-bundle/chunks/chunk-KYDYQMNW.js.map +0 -7
  473. package/dist/cli-bundle/chunks/chunk-NIBP3I7A.js.map +0 -1
  474. package/dist/cli-bundle/chunks/chunk-NO6Y6FB2.js.map +0 -7
  475. package/dist/cli-bundle/chunks/chunk-QE5UFCCO.js.map +0 -1
  476. package/dist/cli-bundle/chunks/chunk-RM6MHL6A.js.map +0 -7
  477. package/dist/cli-bundle/chunks/chunk-RPRW26NG.js.map +0 -1
  478. package/dist/cli-bundle/chunks/chunk-SNUK7H5J.js.map +0 -7
  479. package/dist/cli-bundle/chunks/chunk-T7ZMQI4J.js.map +0 -1
  480. package/dist/cli-bundle/chunks/chunk-UB3V5WUI.js.map +0 -1
  481. package/dist/cli-bundle/chunks/chunk-UFKNF23C.js.map +0 -7
  482. package/dist/cli-bundle/chunks/chunk-V3KLX7U7.js.map +0 -1
  483. package/dist/cli-bundle/chunks/chunk-VD3LKZFX.js.map +0 -1
  484. package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js +0 -32
  485. package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js.map +0 -1
  486. package/dist/cli-bundle/chunks/chunk-WTRUDJ3R.js.map +0 -1
  487. package/dist/cli-bundle/chunks/chunk-Z55WX4IQ.js.map +0 -1
  488. package/dist/cli-bundle/chunks/chunk-Z5BM2FKQ.js.map +0 -7
  489. package/dist/cli-bundle/chunks/chunk-ZEATCVAC.js.map +0 -7
  490. package/dist/cli-bundle/chunks/chunk-ZFIEEDTJ.js.map +0 -7
  491. package/dist/cli-bundle/chunks/chunk-ZIE6WXJ2.js.map +0 -1
  492. package/dist/cli-bundle/chunks/close-37KEHLYM.js +0 -14
  493. package/dist/cli-bundle/chunks/close-many-BFMP6HHK.js.map +0 -7
  494. package/dist/cli-bundle/chunks/close-many-CXJBOWWY.js.map +0 -1
  495. package/dist/cli-bundle/chunks/config-FIXJZEQK.js +0 -1541
  496. package/dist/cli-bundle/chunks/config-FIXJZEQK.js.map +0 -7
  497. package/dist/cli-bundle/chunks/config-X3ZVCUUG.js +0 -1531
  498. package/dist/cli-bundle/chunks/config-X3ZVCUUG.js.map +0 -1
  499. package/dist/cli-bundle/chunks/contracts-KP4QAGVW.js.map +0 -1
  500. package/dist/cli-bundle/chunks/contracts-SMOAN5NF.js.map +0 -7
  501. package/dist/cli-bundle/chunks/create-DFMNBKBS.js +0 -28
  502. package/dist/cli-bundle/chunks/get-AWK324RS.js.map +0 -7
  503. package/dist/cli-bundle/chunks/get-VYPIICPC.js.map +0 -1
  504. package/dist/cli-bundle/chunks/health-FBCVZGSX.js.map +0 -7
  505. package/dist/cli-bundle/chunks/health-Q66C43GN.js.map +0 -1
  506. package/dist/cli-bundle/chunks/history-5XUSLAJA.js +0 -18
  507. package/dist/cli-bundle/chunks/history-compact-2GHT32UX.js.map +0 -1
  508. package/dist/cli-bundle/chunks/history-compact-WLCQEKXS.js.map +0 -7
  509. package/dist/cli-bundle/chunks/history-redact-BVHWDXPR.js +0 -19
  510. package/dist/cli-bundle/chunks/history-repair-FY75IC26.js.map +0 -1
  511. package/dist/cli-bundle/chunks/history-repair-GABSDSVD.js.map +0 -7
  512. package/dist/cli-bundle/chunks/init-TRYJELH4.js +0 -21
  513. package/dist/cli-bundle/chunks/next-66BJB4N2.js.map +0 -7
  514. package/dist/cli-bundle/chunks/next-N5MWJTBY.js.map +0 -1
  515. package/dist/cli-bundle/chunks/plan-DQ7G4EDC.js.map +0 -7
  516. package/dist/cli-bundle/chunks/plan-ZHKZ7JVF.js.map +0 -1
  517. package/dist/cli-bundle/chunks/register-list-query-KY6Z6WV7.js.map +0 -7
  518. package/dist/cli-bundle/chunks/register-list-query-Y2VRHPCL.js.map +0 -1
  519. package/dist/cli-bundle/chunks/register-mutation-N6AYSKPM.js.map +0 -7
  520. package/dist/cli-bundle/chunks/register-mutation-PCARIGZS.js.map +0 -1
  521. package/dist/cli-bundle/chunks/register-operations-L6CYTOIH.js.map +0 -7
  522. package/dist/cli-bundle/chunks/register-operations-YAT6FUUB.js.map +0 -1
  523. package/dist/cli-bundle/chunks/register-setup-MPANILQF.js.map +0 -7
  524. package/dist/cli-bundle/chunks/register-setup-N7UGXYJC.js.map +0 -1
  525. package/dist/cli-bundle/chunks/restore-IRAKSWIW.js +0 -17
  526. package/dist/cli-bundle/chunks/telemetry-DIFPXCAT.js.map +0 -7
  527. package/dist/cli-bundle/chunks/telemetry-WTYFUPRL.js.map +0 -1
  528. package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js +0 -360
  529. package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js.map +0 -7
  530. package/dist/cli-bundle/chunks/test-all-XLPI4USF.js +0 -357
  531. package/dist/cli-bundle/chunks/test-all-XLPI4USF.js.map +0 -1
  532. package/dist/cli-bundle/chunks/test-runs-CA6K32RD.js.map +0 -1
  533. package/dist/cli-bundle/chunks/test-runs-LANLLPVO.js.map +0 -7
  534. package/dist/cli-bundle/chunks/update-UXDLTEOZ.js +0 -24
  535. package/dist/cli-bundle/chunks/validate-2G566PKQ.js.map +0 -7
  536. package/dist/cli-bundle/chunks/validate-BDPVXHHH.js.map +0 -1
  537. /package/dist/cli-bundle/chunks/{activity-MVSEND6D.js.map → activity-CUC4JY3U.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{activity-EJBMXUBH.js.map → activity-WEIEMM73.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{append-KDHT4GHI.js.map → append-H32VOR2Y.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{append-LEDBAM3K.js.map → append-UBM632FK.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js.map → chunk-2ASNV4DH.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js.map → chunk-2CHRYUXL.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{chunk-DRPF274X.js.map → chunk-3LCUASYG.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js.map → chunk-3Q2HBMTI.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js.map → chunk-55XRYWEG.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js.map → chunk-A6VOGKBA.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js.map → chunk-AIAIXG7I.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js.map → chunk-BTX5MIQF.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js.map → chunk-CYBDUHNO.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js.map → chunk-CZPVDLD2.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js.map → chunk-EUKTMRN3.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js.map → chunk-FFOQHGNH.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js.map → chunk-GFMSLORL.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js.map → chunk-H4GRLYJS.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js.map → chunk-HQTPRV4D.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js.map → chunk-JMK5GCK2.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js.map → chunk-K2VYLVX4.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js.map → chunk-KCO2EAN5.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js.map → chunk-KLXF7NCC.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js.map → chunk-LRKMWUUV.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js.map → chunk-LTRAF2D7.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js.map → chunk-MRD4T5LF.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js.map → chunk-N2JSWVWG.js.map} +0 -0
  564. /package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js.map → chunk-QH3FSKRJ.js.map} +0 -0
  565. /package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js.map → chunk-S62UANU7.js.map} +0 -0
  566. /package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js.map → chunk-U2BEEM2X.js.map} +0 -0
  567. /package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js.map → chunk-UT73HUPC.js.map} +0 -0
  568. /package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js.map → chunk-UTSH5GWX.js.map} +0 -0
  569. /package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js.map → chunk-Y4NRKBFW.js.map} +0 -0
  570. /package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js.map → chunk-YPKFV2JR.js.map} +0 -0
  571. /package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js.map → chunk-ZNHEYCDD.js.map} +0 -0
  572. /package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
  573. /package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js.map → claim-SENTPZBN.js.map} +0 -0
  574. /package/dist/cli-bundle/chunks/{claim-6NINZYB3.js.map → claim-Z7MEQCBT.js.map} +0 -0
  575. /package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js.map → close-424MX4CU.js.map} +0 -0
  576. /package/dist/cli-bundle/chunks/{close-37KEHLYM.js.map → close-YCWQQPDS.js.map} +0 -0
  577. /package/dist/cli-bundle/chunks/{comments-ETHABIY6.js.map → comments-4FGNTSNV.js.map} +0 -0
  578. /package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js.map → comments-7YS5MY5X.js.map} +0 -0
  579. /package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js.map → context-LHVKJSPJ.js.map} +0 -0
  580. /package/dist/cli-bundle/chunks/{context-XDI4DKKT.js.map → context-ZQY54JNS.js.map} +0 -0
  581. /package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js.map → copy-GYNQQPW2.js.map} +0 -0
  582. /package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js.map → copy-TLW7JTQT.js.map} +0 -0
  583. /package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js.map → create-VSKYSOCD.js.map} +0 -0
  584. /package/dist/cli-bundle/chunks/{create-DFMNBKBS.js.map → create-XTMAPS7I.js.map} +0 -0
  585. /package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js.map → delete-4W5JYCEG.js.map} +0 -0
  586. /package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js.map → delete-ANTOTI2I.js.map} +0 -0
  587. /package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js.map → deps-HPPE6MJN.js.map} +0 -0
  588. /package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js.map → deps-ZQZN54EZ.js.map} +0 -0
  589. /package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js.map → docs-RPOVFMP3.js.map} +0 -0
  590. /package/dist/cli-bundle/chunks/{docs-2TIFR62T.js.map → docs-XJNYBJGE.js.map} +0 -0
  591. /package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js.map → eval-DM6JBZTS.js.map} +0 -0
  592. /package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js.map → eval-RFBI5FGS.js.map} +0 -0
  593. /package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js.map → extension-B3YY4WY5.js.map} +0 -0
  594. /package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js.map → extension-TTSEFQTS.js.map} +0 -0
  595. /package/dist/cli-bundle/chunks/{files-DF3HO6XK.js.map → files-5D65CHGE.js.map} +0 -0
  596. /package/dist/cli-bundle/chunks/{files-T5ODMETM.js.map → files-GPIG77EN.js.map} +0 -0
  597. /package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js.map → focus-C3PEJV2C.js.map} +0 -0
  598. /package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js.map → focus-ZHN7WIGX.js.map} +0 -0
  599. /package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js.map → gc-D4JQ6OWN.js.map} +0 -0
  600. /package/dist/cli-bundle/chunks/{gc-FULIVYR4.js.map → gc-VZIXDL32.js.map} +0 -0
  601. /package/dist/cli-bundle/chunks/{history-5XUSLAJA.js.map → history-DD7L7BNL.js.map} +0 -0
  602. /package/dist/cli-bundle/chunks/{history-X4OSES6K.js.map → history-IL7XCEX2.js.map} +0 -0
  603. /package/dist/cli-bundle/chunks/{history-redact-BVHWDXPR.js.map → history-redact-IX4YEWMY.js.map} +0 -0
  604. /package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js.map → history-redact-VYCWQFK7.js.map} +0 -0
  605. /package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js.map → init-F27NHENZ.js.map} +0 -0
  606. /package/dist/cli-bundle/chunks/{init-TRYJELH4.js.map → init-HHVQQP6C.js.map} +0 -0
  607. /package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js.map → learnings-HJVDQIGY.js.map} +0 -0
  608. /package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js.map → learnings-XSFSUUWK.js.map} +0 -0
  609. /package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js.map → list-HPMEKCAA.js.map} +0 -0
  610. /package/dist/cli-bundle/chunks/{list-ROT7JF62.js.map → list-VMPWTURB.js.map} +0 -0
  611. /package/dist/cli-bundle/chunks/{notes-FW6YFLND.js.map → notes-GDZIKGR6.js.map} +0 -0
  612. /package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js.map → notes-WDDBPC4D.js.map} +0 -0
  613. /package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js.map → profile-CCOKZ2IQ.js.map} +0 -0
  614. /package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js.map → profile-HUCENIEQ.js.map} +0 -0
  615. /package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js.map → restore-4CBWUMCX.js.map} +0 -0
  616. /package/dist/cli-bundle/chunks/{restore-IRAKSWIW.js.map → restore-5UEAGG3W.js.map} +0 -0
  617. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
  618. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
  619. /package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js.map → schema-TDGK6N3I.js.map} +0 -0
  620. /package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js.map → schema-UE5KKAUX.js.map} +0 -0
  621. /package/dist/cli-bundle/chunks/{search-KP6H7COV.js.map → search-FP7MEU4S.js.map} +0 -0
  622. /package/dist/cli-bundle/chunks/{search-CX5UMV4H.js.map → search-K4CFLQ5S.js.map} +0 -0
  623. /package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js.map → stats-NJJCALEZ.js.map} +0 -0
  624. /package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js.map → stats-XT6QRKQY.js.map} +0 -0
  625. /package/dist/cli-bundle/chunks/{test-QNDXZQCW.js.map → test-UFSJ5YIO.js.map} +0 -0
  626. /package/dist/cli-bundle/chunks/{test-HU2BS7EY.js.map → test-YCDAUBWF.js.map} +0 -0
  627. /package/dist/cli-bundle/chunks/{update-UXDLTEOZ.js.map → update-MTCFES6X.js.map} +0 -0
  628. /package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js.map → update-Y5WQVT5O.js.map} +0 -0
@@ -10,7 +10,10 @@ import {
10
10
  parseLinkedTestMinLines,
11
11
  parseLinkedTestRegexList,
12
12
  parseLinkedTestStringList
13
- } from "./chunk-JIP67N2K.js";
13
+ } from "./chunk-Y4NRKBFW.js";
14
+ import {
15
+ getFocusedItem
16
+ } from "./chunk-MRD4T5LF.js";
14
17
  import {
15
18
  assertNoUnknownCsvKeys,
16
19
  createStdinTokenResolver,
@@ -19,21 +22,18 @@ import {
19
22
  parseCsvKv,
20
23
  parseOptionalNumber,
21
24
  parseTags
22
- } from "./chunk-BN3CWK6G.js";
23
- import {
24
- getFocusedItem
25
- } from "./chunk-4TXTVZL3.js";
25
+ } from "./chunk-ZNHEYCDD.js";
26
26
  import {
27
27
  normalizeParentReferenceValue,
28
28
  validateMissingParentReference,
29
29
  validateSprintOrReleaseValue
30
- } from "./chunk-HUYYMTGW.js";
30
+ } from "./chunk-EUKTMRN3.js";
31
31
  import {
32
32
  buildInvalidTypeError
33
- } from "./chunk-DRPF274X.js";
33
+ } from "./chunk-3LCUASYG.js";
34
34
  import {
35
35
  printError
36
- } from "./chunk-CHRNYKNI.js";
36
+ } from "./chunk-5PGBHRY3.js";
37
37
  import {
38
38
  acquireLock,
39
39
  appendHistoryEntry,
@@ -44,18 +44,18 @@ import {
44
44
  locateItem,
45
45
  normalizeItemId,
46
46
  parseRegisteredItemFieldAssignments
47
- } from "./chunk-LBH7UYKY.js";
47
+ } from "./chunk-JXAUVO6X.js";
48
48
  import {
49
49
  canonicalDocument,
50
50
  collectRuntimeCreateFieldValues,
51
51
  normalizeFrontMatter,
52
52
  normalizeStatusInput,
53
53
  serializeItemDocument
54
- } from "./chunk-ZFIEEDTJ.js";
54
+ } from "./chunk-IEEJQCZ4.js";
55
55
  import {
56
56
  nowIso,
57
57
  resolveIsoOrRelative
58
- } from "./chunk-MLHX6DN5.js";
58
+ } from "./chunk-AIAIXG7I.js";
59
59
  import {
60
60
  CONFIDENCE_TEXT_VALUES,
61
61
  CREATE_DIRECT_CLOSE_REASON_DEFAULT,
@@ -93,7 +93,7 @@ import {
93
93
  validateTypeOptions,
94
94
  weekdayOrderIndex,
95
95
  writeFileAtomic
96
- } from "./chunk-SNUK7H5J.js";
96
+ } from "./chunk-7NSPKJUS.js";
97
97
 
98
98
  // dist/core/item/priority.js
99
99
  !(function() {
@@ -466,7 +466,7 @@ function resolveRuntimeUnsetFieldDefinition(token, command, runtimeFieldRegistry
466
466
  !(function() {
467
467
  try {
468
468
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
469
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "53948d99-ccdf-5f05-b75b-6885238982f1");
469
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "6a8f99fb-f5b4-5d82-986e-934fac3cfb6a");
470
470
  } catch (e2) {
471
471
  }
472
472
  })();
@@ -501,6 +501,41 @@ var RECURRENCE_CSV_KEYS = [
501
501
  "recur_by_month_day",
502
502
  "recur_exdates"
503
503
  ];
504
+ function numericRecurrenceValueProvided(raw, guard) {
505
+ return guard === "defined" ? raw !== void 0 : Boolean(raw);
506
+ }
507
+ function parsePositiveRecurrenceInteger(raw, label, guard) {
508
+ if (!numericRecurrenceValueProvided(raw, guard)) {
509
+ return void 0;
510
+ }
511
+ const parsed = parseOptionalNumber(raw, `event ${label}`);
512
+ if (!Number.isInteger(parsed) || parsed < 1) {
513
+ throw new PmCliError(`--event ${label} must be an integer >= 1`, EXIT_CODE.USAGE);
514
+ }
515
+ return parsed;
516
+ }
517
+ function parseRecurrenceUntil(untilRaw, startAt, nowValue) {
518
+ const until = untilRaw ? resolveIsoOrRelative(untilRaw, nowValue, "event.recur_until") : void 0;
519
+ if (until && until < startAt) {
520
+ throw new PmCliError("--event recur_until must be at or after start", EXIT_CODE.USAGE);
521
+ }
522
+ return until;
523
+ }
524
+ function parseRecurrenceWeekdays(raw) {
525
+ return Array.from(new Set(parseDelimitedList(raw).map((value) => ensureEnumValue(value.toLowerCase(), RECURRENCE_WEEKDAY_VALUES, "event weekday")))).sort((left, right) => weekdayOrderIndex(left) - weekdayOrderIndex(right));
526
+ }
527
+ function parseRecurrenceMonthDays(raw) {
528
+ return Array.from(new Set(parseDelimitedList(raw).map((value) => {
529
+ const day = parseOptionalNumber(value, "event recur_by_month_day");
530
+ if (!Number.isInteger(day) || day < 1 || day > 31) {
531
+ throw new PmCliError("--event recur_by_month_day values must be integers 1..31", EXIT_CODE.USAGE);
532
+ }
533
+ return day;
534
+ }))).sort((left, right) => left - right);
535
+ }
536
+ function parseRecurrenceExdates(raw, nowValue) {
537
+ return Array.from(new Set(parseDelimitedList(raw).map((value) => resolveIsoOrRelative(value, nowValue, "event.recur_exdates")))).sort((left, right) => left.localeCompare(right));
538
+ }
504
539
  function parseRecurrenceRule(kv, startAt, nowValue, emptyNumericGuard) {
505
540
  const freqRaw = kv.recur_freq?.trim();
506
541
  const intervalRaw = kv.recur_interval?.trim();
@@ -516,29 +551,13 @@ function parseRecurrenceRule(kv, startAt, nowValue, emptyNumericGuard) {
516
551
  if (!freqRaw) {
517
552
  throw new PmCliError("--event recurrence fields require recur_freq=<daily|weekly|monthly|yearly>", EXIT_CODE.USAGE);
518
553
  }
519
- const numericProvided = (raw) => emptyNumericGuard === "defined" ? raw !== void 0 : Boolean(raw);
520
554
  const freq = ensureEnumValue(freqRaw.toLowerCase(), RECURRENCE_FREQUENCY_VALUES, "event recurrence frequency");
521
- const interval = numericProvided(intervalRaw) ? parseOptionalNumber(intervalRaw, "event recur_interval") : void 0;
522
- if (interval !== void 0 && (!Number.isInteger(interval) || interval < 1)) {
523
- throw new PmCliError("--event recur_interval must be an integer >= 1", EXIT_CODE.USAGE);
524
- }
525
- const count = numericProvided(countRaw) ? parseOptionalNumber(countRaw, "event recur_count") : void 0;
526
- if (count !== void 0 && (!Number.isInteger(count) || count < 1)) {
527
- throw new PmCliError("--event recur_count must be an integer >= 1", EXIT_CODE.USAGE);
528
- }
529
- const until = untilRaw ? resolveIsoOrRelative(untilRaw, nowValue, "event.recur_until") : void 0;
530
- if (until && until < startAt) {
531
- throw new PmCliError("--event recur_until must be at or after start", EXIT_CODE.USAGE);
532
- }
533
- const byWeekday = Array.from(new Set(parseDelimitedList(byWeekdayRaw).map((value) => ensureEnumValue(value.toLowerCase(), RECURRENCE_WEEKDAY_VALUES, "event weekday")))).sort((left, right) => weekdayOrderIndex(left) - weekdayOrderIndex(right));
534
- const byMonthDay = Array.from(new Set(parseDelimitedList(byMonthDayRaw).map((value) => {
535
- const day = parseOptionalNumber(value, "event recur_by_month_day");
536
- if (!Number.isInteger(day) || day < 1 || day > 31) {
537
- throw new PmCliError("--event recur_by_month_day values must be integers 1..31", EXIT_CODE.USAGE);
538
- }
539
- return day;
540
- }))).sort((left, right) => left - right);
541
- const exdates = Array.from(new Set(parseDelimitedList(exdatesRaw).map((value) => resolveIsoOrRelative(value, nowValue, "event.recur_exdates")))).sort((left, right) => left.localeCompare(right));
555
+ const interval = parsePositiveRecurrenceInteger(intervalRaw, "recur_interval", emptyNumericGuard);
556
+ const count = parsePositiveRecurrenceInteger(countRaw, "recur_count", emptyNumericGuard);
557
+ const until = parseRecurrenceUntil(untilRaw, startAt, nowValue);
558
+ const byWeekday = parseRecurrenceWeekdays(byWeekdayRaw);
559
+ const byMonthDay = parseRecurrenceMonthDays(byMonthDayRaw);
560
+ const exdates = parseRecurrenceExdates(exdatesRaw, nowValue);
542
561
  return {
543
562
  freq,
544
563
  interval,
@@ -757,7 +776,7 @@ function parseTypeOptionEntries(raw) {
757
776
  !(function() {
758
777
  try {
759
778
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
760
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "aa70c8da-5e95-5356-b118-cc0dcc4d1835");
779
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "39253884-2bdf-54e5-9cf2-6ac279638287");
761
780
  } catch (e2) {
762
781
  }
763
782
  })();
@@ -1448,14 +1467,96 @@ function ensureInitHasRun(pmRoot) {
1448
1467
  }
1449
1468
  });
1450
1469
  }
1451
- async function runCreate(options, global2) {
1452
- let resolvedOptions = normalizeLegacyNoneCreateOptions(await resolveCreateStdinInputs(options));
1453
- const pmRoot = resolvePmRoot(process.cwd(), global2.path);
1454
- await ensureInitHasRun(pmRoot);
1455
- const settings = await readSettings(pmRoot);
1456
- const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);
1457
- const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);
1458
- const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1470
+ function resolveUnsettableOptionalString(unsetKeys, frontMatterKey, raw) {
1471
+ return unsetKeys.has(frontMatterKey) || raw === void 0 ? void 0 : parseOptionalString(raw);
1472
+ }
1473
+ function resolveUnsettableTransformed(unsetKeys, frontMatterKey, raw, transform) {
1474
+ return unsetKeys.has(frontMatterKey) || raw === void 0 ? void 0 : transform(raw);
1475
+ }
1476
+ var CALENDAR_RELEVANT_CREATE_TYPES = /* @__PURE__ */ new Set(["milestone", "meeting", "reminder", "event"]);
1477
+ function createItemLacksSchedule(type, deadline, reminders, events) {
1478
+ const hasDeadline = deadline !== void 0;
1479
+ const hasReminders = reminders !== void 0 && reminders.length > 0;
1480
+ const hasEvents = events !== void 0 && events.length > 0;
1481
+ return CALENDAR_RELEVANT_CREATE_TYPES.has(type.toLowerCase()) && !hasDeadline && !hasReminders && !hasEvents;
1482
+ }
1483
+ function collectCreateScheduleWarnings(type, id, deadline, reminders, events) {
1484
+ const warnings = [];
1485
+ if (type.toLowerCase() === "event" && (events === void 0 || events.length === 0)) {
1486
+ warnings.push(`event_without_schedule:${id}:no_time_set`);
1487
+ }
1488
+ if (createItemLacksSchedule(type, deadline, reminders, events)) {
1489
+ warnings.push(`calendar_item_without_schedule:${id}:no_deadline_or_reminder_or_event (hint: set --deadline <ISO> or --reminder "<when>", or link an Event via --event "start=<ISO>,end=<ISO>"; otherwise this item never appears on pm calendar)`);
1490
+ }
1491
+ return warnings;
1492
+ }
1493
+ async function inheritFocusedParent(parent, resolvedOptions, unsetKeys, pmRoot) {
1494
+ if (parent !== void 0 || unsetKeys.has("parent") || resolvedOptions.parent !== void 0) {
1495
+ return { parent, parentSource: void 0 };
1496
+ }
1497
+ const focused = await getFocusedItem(pmRoot);
1498
+ if (focused === void 0) {
1499
+ return { parent, parentSource: void 0 };
1500
+ }
1501
+ return { parent: focused, parentSource: "focus" };
1502
+ }
1503
+ async function validateCreateParentReference(pmRoot, settings, typeRegistry, parent, policy) {
1504
+ const normalized = normalizeParentReferenceValue(parent);
1505
+ const parentLocated = await locateItem(pmRoot, normalized, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
1506
+ if (parentLocated) {
1507
+ return { parent: normalized, warnings: [] };
1508
+ }
1509
+ const normalizedParentId = normalizeItemId(normalized, settings.id_prefix);
1510
+ return { parent: normalized, warnings: validateMissingParentReference(normalizedParentId, policy).warnings };
1511
+ }
1512
+ function resolveCreateSprintOrRelease(unsetKeys, frontMatterKey, raw, field, policy) {
1513
+ const resolved = resolveUnsettableOptionalString(unsetKeys, frontMatterKey, raw);
1514
+ if (resolved === void 0) {
1515
+ return { value: void 0, warnings: [] };
1516
+ }
1517
+ const validation = validateSprintOrReleaseValue(field, resolved, policy);
1518
+ return { value: validation.value, warnings: validation.warnings };
1519
+ }
1520
+ async function resolveCreateBlockedByDependency(params) {
1521
+ const { pmRoot, settings, typeRegistry, statusRegistry, blockedBy, status, statusExplicit, nowValue, author } = params;
1522
+ let dependencyValues = params.dependencyValues;
1523
+ if (blockedBy === void 0) {
1524
+ return { dependencyValues, status };
1525
+ }
1526
+ const normalizedBlockedBy = normalizeItemId(blockedBy, settings.id_prefix);
1527
+ const blockedByLocated = await locateItem(pmRoot, normalizedBlockedBy, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
1528
+ if (!blockedByLocated) {
1529
+ return { dependencyValues, status };
1530
+ }
1531
+ const hasBlockedByDependency = (dependencyValues ?? []).some((dependency) => dependency.id === blockedByLocated.id && dependency.kind === "blocked_by");
1532
+ if (!hasBlockedByDependency) {
1533
+ dependencyValues = [
1534
+ ...dependencyValues ?? [],
1535
+ { id: blockedByLocated.id, kind: "blocked_by", created_at: nowValue, author }
1536
+ ];
1537
+ }
1538
+ if (statusExplicit) {
1539
+ return { dependencyValues, status };
1540
+ }
1541
+ const blockedStatus = statusRegistry.blocked_statuses.has("blocked") ? "blocked" : [...statusRegistry.blocked_statuses].sort((left, right) => left.localeCompare(right))[0] ?? statusRegistry.open_status;
1542
+ return { dependencyValues, status: blockedStatus };
1543
+ }
1544
+ function applyCreateDefaultType(resolvedOptions, settings, typeRegistry) {
1545
+ const explicitStrictMode = typeof resolvedOptions.createMode === "string" && resolvedOptions.createMode.trim().toLowerCase() === "strict";
1546
+ if (explicitStrictMode) {
1547
+ return;
1548
+ }
1549
+ const defaultType = settings.governance.create_default_type?.trim();
1550
+ if (defaultType && defaultType.length > 0 && resolveTypeName(defaultType, typeRegistry)) {
1551
+ resolvedOptions.type = defaultType;
1552
+ return;
1553
+ }
1554
+ if (resolveTypeName("Task", typeRegistry)) {
1555
+ resolvedOptions.type = "Task";
1556
+ }
1557
+ }
1558
+ async function resolveCreateTypeSelection(options, global2, pmRoot, settings, typeRegistry) {
1559
+ let resolvedOptions = options;
1459
1560
  if (resolvedOptions.template !== void 0) {
1460
1561
  const templateName = resolvedOptions.template.trim();
1461
1562
  if (templateName.length === 0) {
@@ -1465,17 +1566,7 @@ async function runCreate(options, global2) {
1465
1566
  resolvedOptions = normalizeLegacyNoneCreateOptions(mergeCreateOptionsWithTemplate(templateOptions, resolvedOptions));
1466
1567
  }
1467
1568
  if (resolvedOptions.type === void 0) {
1468
- const explicitStrictMode = typeof resolvedOptions.createMode === "string" && resolvedOptions.createMode.trim().toLowerCase() === "strict";
1469
- if (!explicitStrictMode) {
1470
- const defaultType = settings.governance.create_default_type?.trim();
1471
- if (defaultType && defaultType.length > 0 && resolveTypeName(defaultType, typeRegistry)) {
1472
- resolvedOptions.type = defaultType;
1473
- } else {
1474
- if (resolveTypeName("Task", typeRegistry)) {
1475
- resolvedOptions.type = "Task";
1476
- }
1477
- }
1478
- }
1569
+ applyCreateDefaultType(resolvedOptions, settings, typeRegistry);
1479
1570
  }
1480
1571
  if (resolvedOptions.type === void 0) {
1481
1572
  throw new PmCliError("Missing required option --type <value>", EXIT_CODE.USAGE);
@@ -1502,90 +1593,22 @@ async function runCreate(options, global2) {
1502
1593
  throw new PmCliError(`--schedule-preset ${schedulePreset} is only supported for Reminder, Meeting, or Event types`, EXIT_CODE.USAGE);
1503
1594
  }
1504
1595
  const createMode = resolveEffectiveCreateMode(resolvedOptions.createMode, schedulePreset, settings.governance.create_mode_default);
1505
- const unsetTargets = parseCreateUnsetTargets(resolvedOptions.unset, runtimeFieldRegistry);
1596
+ return { resolvedOptions, typeDefinition, type, schedulePreset, createMode };
1597
+ }
1598
+ function collectCreateClearTargets(resolvedOptions, unsetTargets) {
1506
1599
  const explicitUnsets = new Set(unsetTargets.frontMatterKeys);
1507
1600
  const clearOptionKeys = new Set(unsetTargets.optionKeys);
1508
1601
  const clearCollectionDefinitions = [
1509
- {
1510
- enabled: resolvedOptions.clearDeps,
1511
- optionKey: "dep",
1512
- clearFlag: "--clear-deps",
1513
- valueFlag: "--dep",
1514
- values: resolvedOptions.dep,
1515
- frontMatterKey: "dependencies"
1516
- },
1517
- {
1518
- enabled: resolvedOptions.clearComments,
1519
- optionKey: "comment",
1520
- clearFlag: "--clear-comments",
1521
- valueFlag: "--comment",
1522
- values: resolvedOptions.comment,
1523
- frontMatterKey: "comments"
1524
- },
1525
- {
1526
- enabled: resolvedOptions.clearNotes,
1527
- optionKey: "note",
1528
- clearFlag: "--clear-notes",
1529
- valueFlag: "--note",
1530
- values: resolvedOptions.note,
1531
- frontMatterKey: "notes"
1532
- },
1533
- {
1534
- enabled: resolvedOptions.clearLearnings,
1535
- optionKey: "learning",
1536
- clearFlag: "--clear-learnings",
1537
- valueFlag: "--learning",
1538
- values: resolvedOptions.learning,
1539
- frontMatterKey: "learnings"
1540
- },
1541
- {
1542
- enabled: resolvedOptions.clearFiles,
1543
- optionKey: "file",
1544
- clearFlag: "--clear-files",
1545
- valueFlag: "--file",
1546
- values: resolvedOptions.file,
1547
- frontMatterKey: "files"
1548
- },
1549
- {
1550
- enabled: resolvedOptions.clearTests,
1551
- optionKey: "test",
1552
- clearFlag: "--clear-tests",
1553
- valueFlag: "--test",
1554
- values: resolvedOptions.test,
1555
- frontMatterKey: "tests"
1556
- },
1557
- {
1558
- enabled: resolvedOptions.clearDocs,
1559
- optionKey: "doc",
1560
- clearFlag: "--clear-docs",
1561
- valueFlag: "--doc",
1562
- values: resolvedOptions.doc,
1563
- frontMatterKey: "docs"
1564
- },
1565
- {
1566
- enabled: resolvedOptions.clearReminders,
1567
- optionKey: "reminder",
1568
- clearFlag: "--clear-reminders",
1569
- valueFlag: "--reminder",
1570
- values: resolvedOptions.reminder,
1571
- frontMatterKey: "reminders"
1572
- },
1573
- {
1574
- enabled: resolvedOptions.clearEvents,
1575
- optionKey: "event",
1576
- clearFlag: "--clear-events",
1577
- valueFlag: "--event",
1578
- values: resolvedOptions.event,
1579
- frontMatterKey: "events"
1580
- },
1581
- {
1582
- enabled: resolvedOptions.clearTypeOptions,
1583
- optionKey: "typeOption",
1584
- clearFlag: "--clear-type-options",
1585
- valueFlag: "--type-option",
1586
- values: resolvedOptions.typeOption,
1587
- frontMatterKey: "type_options"
1588
- }
1602
+ { enabled: resolvedOptions.clearDeps, optionKey: "dep", clearFlag: "--clear-deps", valueFlag: "--dep", values: resolvedOptions.dep, frontMatterKey: "dependencies" },
1603
+ { enabled: resolvedOptions.clearComments, optionKey: "comment", clearFlag: "--clear-comments", valueFlag: "--comment", values: resolvedOptions.comment, frontMatterKey: "comments" },
1604
+ { enabled: resolvedOptions.clearNotes, optionKey: "note", clearFlag: "--clear-notes", valueFlag: "--note", values: resolvedOptions.note, frontMatterKey: "notes" },
1605
+ { enabled: resolvedOptions.clearLearnings, optionKey: "learning", clearFlag: "--clear-learnings", valueFlag: "--learning", values: resolvedOptions.learning, frontMatterKey: "learnings" },
1606
+ { enabled: resolvedOptions.clearFiles, optionKey: "file", clearFlag: "--clear-files", valueFlag: "--file", values: resolvedOptions.file, frontMatterKey: "files" },
1607
+ { enabled: resolvedOptions.clearTests, optionKey: "test", clearFlag: "--clear-tests", valueFlag: "--test", values: resolvedOptions.test, frontMatterKey: "tests" },
1608
+ { enabled: resolvedOptions.clearDocs, optionKey: "doc", clearFlag: "--clear-docs", valueFlag: "--doc", values: resolvedOptions.doc, frontMatterKey: "docs" },
1609
+ { enabled: resolvedOptions.clearReminders, optionKey: "reminder", clearFlag: "--clear-reminders", valueFlag: "--reminder", values: resolvedOptions.reminder, frontMatterKey: "reminders" },
1610
+ { enabled: resolvedOptions.clearEvents, optionKey: "event", clearFlag: "--clear-events", valueFlag: "--event", values: resolvedOptions.event, frontMatterKey: "events" },
1611
+ { enabled: resolvedOptions.clearTypeOptions, optionKey: "typeOption", clearFlag: "--clear-type-options", valueFlag: "--type-option", values: resolvedOptions.typeOption, frontMatterKey: "type_options" }
1589
1612
  ];
1590
1613
  for (const definition of clearCollectionDefinitions) {
1591
1614
  if (!definition.enabled) {
@@ -1597,6 +1620,9 @@ async function runCreate(options, global2) {
1597
1620
  explicitUnsets.add(definition.frontMatterKey);
1598
1621
  clearOptionKeys.add(definition.optionKey);
1599
1622
  }
1623
+ return { explicitUnsets, clearOptionKeys };
1624
+ }
1625
+ function assertNoCreateScalarUnsetConflicts(resolvedOptions, unsetTargets) {
1600
1626
  const scalarOptionPresence = {
1601
1627
  tags: resolvedOptions.tags !== void 0,
1602
1628
  deadline: resolvedOptions.deadline !== void 0,
@@ -1642,10 +1668,12 @@ async function runCreate(options, global2) {
1642
1668
  const unsetField = CREATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey) ?? optionKey;
1643
1669
  throw new PmCliError(`Cannot combine --unset ${unsetField} with ${commandOptionFlagLabel("create", optionKey)}`, EXIT_CODE.USAGE);
1644
1670
  }
1645
- const assertNoLegacyScalarToken = (value2, optionKey) => {
1671
+ }
1672
+ function assertNoLegacyCreateScalarTokens(resolvedOptions) {
1673
+ const assertNoLegacyScalarToken = (value, optionKey) => {
1646
1674
  const unsetField = CREATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey);
1647
1675
  const hint = unsetField ? `Use --unset ${unsetField} to clear this field.` : void 0;
1648
- assertNoLegacyNoneToken(value2, commandOptionFlagLabel("create", optionKey), hint);
1676
+ assertNoLegacyNoneToken(value, commandOptionFlagLabel("create", optionKey), hint);
1649
1677
  };
1650
1678
  assertNoLegacyScalarToken(resolvedOptions.tags, "tags");
1651
1679
  assertNoLegacyScalarToken(resolvedOptions.deadline, "deadline");
@@ -1682,6 +1710,143 @@ async function runCreate(options, global2) {
1682
1710
  assertNoLegacyScalarToken(resolvedOptions.component, "component");
1683
1711
  assertNoLegacyScalarToken(resolvedOptions.regression, "regression");
1684
1712
  assertNoLegacyScalarToken(resolvedOptions.customerImpact, "customerImpact");
1713
+ }
1714
+ function assertNoCreateFieldUnsetConflicts(registeredItemFieldValues, runtimeCreateFieldValues, unsetTargets) {
1715
+ for (const fieldKey of Object.keys(registeredItemFieldValues)) {
1716
+ if (!unsetTargets.frontMatterKeys.has(fieldKey)) {
1717
+ continue;
1718
+ }
1719
+ throw new PmCliError(`Cannot combine --unset ${fieldKey.replaceAll("_", "-")} with --field ${fieldKey}=...`, EXIT_CODE.USAGE);
1720
+ }
1721
+ for (const fieldKey of Object.keys(runtimeCreateFieldValues.values ?? {})) {
1722
+ if (!unsetTargets.frontMatterKeys.has(fieldKey)) {
1723
+ continue;
1724
+ }
1725
+ throw new PmCliError(`Cannot combine --unset ${fieldKey.replaceAll("_", "-")} with its value flag`, EXIT_CODE.USAGE);
1726
+ }
1727
+ }
1728
+ function assertNoMissingRequiredCreateOptions(params) {
1729
+ const { combinedMissingFlags, typeDefinition, missingRequiredCreateFlags, missingRequiredTypeOptionKeys, openStatus, type, createMode } = params;
1730
+ if (combinedMissingFlags.length === 0) {
1731
+ return;
1732
+ }
1733
+ const nextValidExample = buildTypeSpecificCreateExample(typeDefinition, missingRequiredCreateFlags, missingRequiredTypeOptionKeys, openStatus);
1734
+ const nextSteps = [`Run "pm create --help --type ${type}" for type-aware required option guidance.`];
1735
+ if (combinedMissingFlags.includes("--title")) {
1736
+ nextSteps.push('Title can also be passed as the first positional argument (example: pm create "Your title" --type ' + type + ").");
1737
+ }
1738
+ if (createMode === "strict") {
1739
+ nextSteps.push('For staged onboarding, retry with "--create-mode progressive".');
1740
+ if (SCHEDULE_CREATE_PRESET_TYPES.has(type)) {
1741
+ nextSteps.push('For minimal scheduling inputs, try "--schedule-preset lightweight".');
1742
+ }
1743
+ }
1744
+ const errorMessage = combinedMissingFlags.length === 1 ? `Missing required option ${combinedMissingFlags[0]} for type "${type}"` : `Missing required options ${combinedMissingFlags.join(", ")} for type "${type}"`;
1745
+ throw new PmCliError(errorMessage, EXIT_CODE.USAGE, {
1746
+ code: "missing_required_option",
1747
+ required: `Provide all required create options and type options for type "${type}" in one invocation.`,
1748
+ examples: [nextValidExample],
1749
+ nextSteps,
1750
+ recovery: createMode === "strict" ? {
1751
+ recovery_mode: "compact",
1752
+ missing_required_fields: combinedMissingFlags,
1753
+ suggested_flags: ["--create-mode progressive", ...combinedMissingFlags]
1754
+ } : void 0
1755
+ });
1756
+ }
1757
+ function resolveCreateTags(unsetKeys, resolvedOptions) {
1758
+ if (unsetKeys.has("tags") && Array.isArray(resolvedOptions.addTags) && resolvedOptions.addTags.length > 0) {
1759
+ throw new PmCliError("Cannot combine --unset tags with --add-tags", EXIT_CODE.USAGE);
1760
+ }
1761
+ const baseTags = unsetKeys.has("tags") ? [] : resolvedOptions.tags !== void 0 ? parseTags(resolvedOptions.tags) : [];
1762
+ return mergeAdditiveTags(baseTags, resolvedOptions.addTags);
1763
+ }
1764
+ function resolveCreateOrder(unsetKeys, resolvedOptions) {
1765
+ if (resolvedOptions.order !== void 0 && resolvedOptions.rank !== void 0 && resolvedOptions.order !== resolvedOptions.rank) {
1766
+ throw new PmCliError("--order and --rank must match when both are provided", EXIT_CODE.USAGE);
1767
+ }
1768
+ const orderRaw = resolvedOptions.order ?? resolvedOptions.rank;
1769
+ const order = resolveUnsettableTransformed(unsetKeys, "order", orderRaw, (raw) => parseOptionalNumber(raw, "order"));
1770
+ if (order !== void 0 && !Number.isInteger(order)) {
1771
+ throw new PmCliError("Order must be an integer", EXIT_CODE.USAGE);
1772
+ }
1773
+ return order;
1774
+ }
1775
+ function resolveCreateCloseReason(status, statusRegistry, settings, resolvedOptions, resolution) {
1776
+ if (status !== statusRegistry.close_status || !settings.governance.require_close_reason) {
1777
+ return { closeReason: void 0, warnings: [] };
1778
+ }
1779
+ const messageText = typeof resolvedOptions.message === "string" ? resolvedOptions.message.trim() : "";
1780
+ const resolutionText = typeof resolution === "string" ? resolution.trim() : "";
1781
+ const closeReason = messageText || resolutionText || CREATE_DIRECT_CLOSE_REASON_DEFAULT;
1782
+ const warnings = messageText.length === 0 && resolutionText.length === 0 ? ["close_reason_defaulted"] : [];
1783
+ return { closeReason, warnings };
1784
+ }
1785
+ async function writeCreatedItem(params) {
1786
+ const { pmRoot, type, id, settings, typeRegistry, author, extensionFieldNames, afterDocument, beforeDocument, historyMessage, changedFields, nowValue } = params;
1787
+ const itemPath = getItemPath(pmRoot, type, id, settings.item_format, typeRegistry.type_to_folder);
1788
+ const historyPath = getHistoryPath(pmRoot, id);
1789
+ const lockRelease = await acquireLock(pmRoot, id, settings.locks.ttl_seconds, author, false, settings.governance.force_required_for_stale_lock);
1790
+ let hookWarnings = [];
1791
+ try {
1792
+ await writeFileAtomic(itemPath, serializeItemDocument(afterDocument, { format: settings.item_format, schema: settings.schema, extensionFieldNames }));
1793
+ try {
1794
+ const entry = createHistoryEntry({ nowIso: nowValue, author, op: "create", before: beforeDocument, after: afterDocument, message: historyMessage });
1795
+ await appendHistoryEntry(historyPath, entry);
1796
+ } catch (error) {
1797
+ await removeFileIfExists(itemPath);
1798
+ throw error;
1799
+ }
1800
+ hookWarnings = [
1801
+ ...await runActiveOnWriteHooks({
1802
+ path: itemPath,
1803
+ scope: "project",
1804
+ op: "create",
1805
+ item_id: afterDocument.metadata.id,
1806
+ item_type: afterDocument.metadata.type,
1807
+ before: beforeDocument,
1808
+ after: afterDocument,
1809
+ changed_fields: changedFields
1810
+ }),
1811
+ ...await runActiveOnWriteHooks({
1812
+ path: historyPath,
1813
+ scope: "project",
1814
+ op: "create:history",
1815
+ item_id: afterDocument.metadata.id,
1816
+ item_type: afterDocument.metadata.type,
1817
+ before: beforeDocument,
1818
+ after: afterDocument,
1819
+ changed_fields: changedFields
1820
+ })
1821
+ ];
1822
+ recordAfterCommandAffectedItem({
1823
+ id: afterDocument.metadata.id,
1824
+ op: "create",
1825
+ item_type: afterDocument.metadata.type,
1826
+ status: afterDocument.metadata.status,
1827
+ current: projectAfterCommandItemSnapshot(afterDocument.metadata, changedFields),
1828
+ changed_fields: changedFields
1829
+ });
1830
+ } finally {
1831
+ await lockRelease();
1832
+ }
1833
+ return hookWarnings;
1834
+ }
1835
+ async function runCreate(options, global2) {
1836
+ let resolvedOptions = normalizeLegacyNoneCreateOptions(await resolveCreateStdinInputs(options));
1837
+ const pmRoot = resolvePmRoot(process.cwd(), global2.path);
1838
+ await ensureInitHasRun(pmRoot);
1839
+ const settings = await readSettings(pmRoot);
1840
+ const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);
1841
+ const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);
1842
+ const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1843
+ const typeSelection = await resolveCreateTypeSelection(resolvedOptions, global2, pmRoot, settings, typeRegistry);
1844
+ resolvedOptions = typeSelection.resolvedOptions;
1845
+ const { typeDefinition, type, createMode } = typeSelection;
1846
+ const unsetTargets = parseCreateUnsetTargets(resolvedOptions.unset, runtimeFieldRegistry);
1847
+ const { explicitUnsets, clearOptionKeys } = collectCreateClearTargets(resolvedOptions, unsetTargets);
1848
+ assertNoCreateScalarUnsetConflicts(resolvedOptions, unsetTargets);
1849
+ assertNoLegacyCreateScalarTokens(resolvedOptions);
1685
1850
  const missingRequiredCreateFlags = requireCreateOptionByType(typeDefinition, resolvedOptions, createMode, clearOptionKeys);
1686
1851
  const nowValue = nowIso();
1687
1852
  const author = selectAuthor(resolvedOptions.author, settings.author_default);
@@ -1699,19 +1864,8 @@ async function runCreate(options, global2) {
1699
1864
  const extensionRegistrations = getActiveExtensionRegistrations();
1700
1865
  const extensionFieldNames = collectRegisteredItemFieldNames(extensionRegistrations);
1701
1866
  const registeredItemFieldValues = parseRegisteredItemFieldAssignments(resolvedOptions.field, extensionRegistrations);
1702
- for (const fieldKey of Object.keys(registeredItemFieldValues)) {
1703
- if (!unsetTargets.frontMatterKeys.has(fieldKey)) {
1704
- continue;
1705
- }
1706
- throw new PmCliError(`Cannot combine --unset ${fieldKey.replaceAll("_", "-")} with --field ${fieldKey}=...`, EXIT_CODE.USAGE);
1707
- }
1708
1867
  const runtimeCreateFieldValues = collectRuntimeCreateFieldValues(resolvedOptions, runtimeFieldRegistry, type);
1709
- for (const fieldKey of Object.keys(runtimeCreateFieldValues.values ?? {})) {
1710
- if (!unsetTargets.frontMatterKeys.has(fieldKey)) {
1711
- continue;
1712
- }
1713
- throw new PmCliError(`Cannot combine --unset ${fieldKey.replaceAll("_", "-")} with its value flag`, EXIT_CODE.USAGE);
1714
- }
1868
+ assertNoCreateFieldUnsetConflicts(registeredItemFieldValues, runtimeCreateFieldValues, unsetTargets);
1715
1869
  const missingRequiredTypeOptionKeys = collectMissingRequiredTypeOptionKeys(validatedTypeOptions.errors, type);
1716
1870
  const missingRequiredTypeOptionFlags = missingRequiredTypeOptionKeys.map((key) => `--type-option ${key}=<value>`);
1717
1871
  const combinedMissingFlags = [
@@ -1722,31 +1876,15 @@ async function runCreate(options, global2) {
1722
1876
  ...runtimeCreateFieldValues.missing_required_flags
1723
1877
  ])
1724
1878
  ].sort((left, right) => left.localeCompare(right));
1725
- if (combinedMissingFlags.length > 0) {
1726
- const nextValidExample = buildTypeSpecificCreateExample(typeDefinition, missingRequiredCreateFlags, missingRequiredTypeOptionKeys, statusRegistry.open_status);
1727
- const nextSteps = [`Run "pm create --help --type ${type}" for type-aware required option guidance.`];
1728
- if (combinedMissingFlags.includes("--title")) {
1729
- nextSteps.push('Title can also be passed as the first positional argument (example: pm create "Your title" --type ' + type + ").");
1730
- }
1731
- if (createMode === "strict") {
1732
- nextSteps.push('For staged onboarding, retry with "--create-mode progressive".');
1733
- if (SCHEDULE_CREATE_PRESET_TYPES.has(type)) {
1734
- nextSteps.push('For minimal scheduling inputs, try "--schedule-preset lightweight".');
1735
- }
1736
- }
1737
- const errorMessage = combinedMissingFlags.length === 1 ? `Missing required option ${combinedMissingFlags[0]} for type "${type}"` : `Missing required options ${combinedMissingFlags.join(", ")} for type "${type}"`;
1738
- throw new PmCliError(errorMessage, EXIT_CODE.USAGE, {
1739
- code: "missing_required_option",
1740
- required: `Provide all required create options and type options for type "${type}" in one invocation.`,
1741
- examples: [nextValidExample],
1742
- nextSteps,
1743
- recovery: createMode === "strict" ? {
1744
- recovery_mode: "compact",
1745
- missing_required_fields: combinedMissingFlags,
1746
- suggested_flags: ["--create-mode progressive", ...combinedMissingFlags]
1747
- } : void 0
1748
- });
1749
- }
1879
+ assertNoMissingRequiredCreateOptions({
1880
+ combinedMissingFlags,
1881
+ typeDefinition,
1882
+ missingRequiredCreateFlags,
1883
+ missingRequiredTypeOptionKeys,
1884
+ openStatus: statusRegistry.open_status,
1885
+ type,
1886
+ createMode
1887
+ });
1750
1888
  const nonMissingTypeOptionErrors = filterNonMissingTypeOptionErrors(validatedTypeOptions.errors, type);
1751
1889
  if (nonMissingTypeOptionErrors.length > 0) {
1752
1890
  const nextValidExample = buildTypeSpecificCreateExample(typeDefinition, [], [], statusRegistry.open_status);
@@ -1760,132 +1898,77 @@ async function runCreate(options, global2) {
1760
1898
  const id = await generateItemId(pmRoot, settings.id_prefix);
1761
1899
  let status = resolvedOptions.status !== void 0 ? parseStatusValue(resolvedOptions.status, statusRegistry) : resolveCreateDefaultStatus(typeDefinition, statusRegistry);
1762
1900
  const priority = resolvedOptions.priority !== void 0 ? ensurePriority(resolvedOptions.priority) : 2;
1763
- if (unsetTargets.frontMatterKeys.has("tags") && Array.isArray(resolvedOptions.addTags) && resolvedOptions.addTags.length > 0) {
1764
- throw new PmCliError("Cannot combine --unset tags with --add-tags", EXIT_CODE.USAGE);
1765
- }
1766
- const baseTags = unsetTargets.frontMatterKeys.has("tags") ? [] : resolvedOptions.tags !== void 0 ? parseTags(resolvedOptions.tags) : [];
1767
- const tags = mergeAdditiveTags(baseTags, resolvedOptions.addTags);
1768
- const deadline = unsetTargets.frontMatterKeys.has("deadline") ? void 0 : resolvedOptions.deadline === void 0 ? void 0 : resolveIsoOrRelative(resolvedOptions.deadline, new Date(nowValue), "deadline");
1769
- const estimatedMinutes = unsetTargets.frontMatterKeys.has("estimated_minutes") ? void 0 : resolvedOptions.estimatedMinutes === void 0 ? void 0 : parseOptionalNumber(resolvedOptions.estimatedMinutes, "estimated-minutes");
1770
- const acceptanceCriteria = unsetTargets.frontMatterKeys.has("acceptance_criteria") ? void 0 : resolvedOptions.acceptanceCriteria === void 0 ? void 0 : resolvedOptions.acceptanceCriteria;
1771
- const definitionOfReady = unsetTargets.frontMatterKeys.has("definition_of_ready") || resolvedOptions.definitionOfReady === void 0 ? void 0 : parseOptionalString(resolvedOptions.definitionOfReady);
1772
- if (resolvedOptions.order !== void 0 && resolvedOptions.rank !== void 0 && resolvedOptions.order !== resolvedOptions.rank) {
1773
- throw new PmCliError("--order and --rank must match when both are provided", EXIT_CODE.USAGE);
1774
- }
1775
- const orderRaw = resolvedOptions.order ?? resolvedOptions.rank;
1776
- const order = unsetTargets.frontMatterKeys.has("order") || orderRaw === void 0 ? void 0 : parseOptionalNumber(orderRaw, "order");
1777
- if (order !== void 0 && !Number.isInteger(order)) {
1778
- throw new PmCliError("Order must be an integer", EXIT_CODE.USAGE);
1779
- }
1780
- const goal = unsetTargets.frontMatterKeys.has("goal") || resolvedOptions.goal === void 0 ? void 0 : parseOptionalString(resolvedOptions.goal);
1781
- const objective = unsetTargets.frontMatterKeys.has("objective") || resolvedOptions.objective === void 0 ? void 0 : parseOptionalString(resolvedOptions.objective);
1782
- const value = unsetTargets.frontMatterKeys.has("value") || resolvedOptions.value === void 0 ? void 0 : parseOptionalString(resolvedOptions.value);
1783
- const impact = unsetTargets.frontMatterKeys.has("impact") || resolvedOptions.impact === void 0 ? void 0 : parseOptionalString(resolvedOptions.impact);
1784
- const outcome = unsetTargets.frontMatterKeys.has("outcome") || resolvedOptions.outcome === void 0 ? void 0 : parseOptionalString(resolvedOptions.outcome);
1785
- const whyNow = unsetTargets.frontMatterKeys.has("why_now") || resolvedOptions.whyNow === void 0 ? void 0 : parseOptionalString(resolvedOptions.whyNow);
1786
- const assignee = unsetTargets.frontMatterKeys.has("assignee") || resolvedOptions.assignee === void 0 ? void 0 : parseOptionalString(resolvedOptions.assignee);
1787
- const authorValue = unsetTargets.frontMatterKeys.has("author") ? void 0 : parseOptionalString(resolvedOptions.author) ?? author;
1788
- let parent = unsetTargets.frontMatterKeys.has("parent") || resolvedOptions.parent === void 0 ? void 0 : parseOptionalString(resolvedOptions.parent);
1789
- let parentSource;
1790
- if (parent === void 0 && !unsetTargets.frontMatterKeys.has("parent") && resolvedOptions.parent === void 0) {
1791
- const focused = await getFocusedItem(pmRoot);
1792
- if (focused !== void 0) {
1793
- parent = focused;
1794
- parentSource = "focus";
1795
- }
1796
- }
1797
- const reviewer = unsetTargets.frontMatterKeys.has("reviewer") || resolvedOptions.reviewer === void 0 ? void 0 : parseOptionalString(resolvedOptions.reviewer);
1798
- const riskRaw = unsetTargets.frontMatterKeys.has("risk") || resolvedOptions.risk === void 0 ? void 0 : parseOptionalString(resolvedOptions.risk);
1799
- const risk = riskRaw !== void 0 ? ensureEnumValue(normalizeRiskInput(riskRaw), RISK_VALUES, "risk") : void 0;
1800
- const confidenceRaw = unsetTargets.frontMatterKeys.has("confidence") || resolvedOptions.confidence === void 0 ? void 0 : parseOptionalString(resolvedOptions.confidence);
1801
- const confidence = confidenceRaw !== void 0 ? parseConfidenceInput(confidenceRaw) : void 0;
1901
+ const unsetKeys = unsetTargets.frontMatterKeys;
1902
+ const tags = resolveCreateTags(unsetKeys, resolvedOptions);
1903
+ const deadline = resolveUnsettableTransformed(unsetKeys, "deadline", resolvedOptions.deadline, (raw) => resolveIsoOrRelative(raw, new Date(nowValue), "deadline"));
1904
+ const estimatedMinutes = resolveUnsettableTransformed(unsetKeys, "estimated_minutes", resolvedOptions.estimatedMinutes, (raw) => parseOptionalNumber(raw, "estimated-minutes"));
1905
+ const acceptanceCriteria = resolveUnsettableOptionalString(unsetKeys, "acceptance_criteria", resolvedOptions.acceptanceCriteria);
1906
+ const definitionOfReady = resolveUnsettableOptionalString(unsetKeys, "definition_of_ready", resolvedOptions.definitionOfReady);
1907
+ const order = resolveCreateOrder(unsetKeys, resolvedOptions);
1908
+ const goal = resolveUnsettableOptionalString(unsetKeys, "goal", resolvedOptions.goal);
1909
+ const objective = resolveUnsettableOptionalString(unsetKeys, "objective", resolvedOptions.objective);
1910
+ const value = resolveUnsettableOptionalString(unsetKeys, "value", resolvedOptions.value);
1911
+ const impact = resolveUnsettableOptionalString(unsetKeys, "impact", resolvedOptions.impact);
1912
+ const outcome = resolveUnsettableOptionalString(unsetKeys, "outcome", resolvedOptions.outcome);
1913
+ const whyNow = resolveUnsettableOptionalString(unsetKeys, "why_now", resolvedOptions.whyNow);
1914
+ const assignee = resolveUnsettableOptionalString(unsetKeys, "assignee", resolvedOptions.assignee);
1915
+ const authorValue = unsetKeys.has("author") ? void 0 : parseOptionalString(resolvedOptions.author) ?? author;
1916
+ const initialParent = resolveUnsettableOptionalString(unsetKeys, "parent", resolvedOptions.parent);
1917
+ const inheritedParent = await inheritFocusedParent(initialParent, resolvedOptions, unsetKeys, pmRoot);
1918
+ let parent = inheritedParent.parent;
1919
+ const parentSource = inheritedParent.parentSource;
1920
+ const reviewer = resolveUnsettableOptionalString(unsetKeys, "reviewer", resolvedOptions.reviewer);
1921
+ const risk = resolveUnsettableTransformed(unsetKeys, "risk", resolvedOptions.risk, (raw) => ensureEnumValue(normalizeRiskInput(raw), RISK_VALUES, "risk"));
1922
+ const confidence = resolveUnsettableTransformed(unsetKeys, "confidence", resolvedOptions.confidence, (raw) => parseConfidenceInput(raw));
1802
1923
  const parentReferencePolicy = resolvedOptions.allowMissingParent === true && settings.validation.parent_reference === "strict_error" ? "warn" : settings.validation.parent_reference;
1803
1924
  const sprintReleasePolicy = settings.validation.sprint_release_format;
1804
- const validationWarnings = [];
1805
- if (type.toLowerCase() === "event" && (events.values === void 0 || events.values.length === 0)) {
1806
- validationWarnings.push(`event_without_schedule:${id}:no_time_set`);
1807
- }
1808
- const calendarRelevantTypes = /* @__PURE__ */ new Set(["milestone", "meeting", "reminder", "event"]);
1809
- const hasDeadline = deadline !== void 0;
1810
- const hasReminders = reminders.values !== void 0 && reminders.values.length > 0;
1811
- const hasEvents = events.values !== void 0 && events.values.length > 0;
1812
- if (calendarRelevantTypes.has(type.toLowerCase()) && !hasDeadline && !hasReminders && !hasEvents) {
1813
- validationWarnings.push(`calendar_item_without_schedule:${id}:no_deadline_or_reminder_or_event (hint: set --deadline <ISO> or --reminder "<when>", or link an Event via --event "start=<ISO>,end=<ISO>"; otherwise this item never appears on pm calendar)`);
1814
- }
1925
+ const validationWarnings = collectCreateScheduleWarnings(type, id, deadline, reminders.values, events.values);
1815
1926
  if (parent !== void 0) {
1816
- parent = normalizeParentReferenceValue(parent);
1817
- const parentLocated = await locateItem(pmRoot, parent, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
1818
- if (!parentLocated) {
1819
- const normalizedParentId = normalizeItemId(parent, settings.id_prefix);
1820
- validationWarnings.push(...validateMissingParentReference(normalizedParentId, parentReferencePolicy).warnings);
1821
- }
1822
- }
1823
- let sprint = unsetTargets.frontMatterKeys.has("sprint") || resolvedOptions.sprint === void 0 ? void 0 : parseOptionalString(resolvedOptions.sprint);
1824
- if (sprint !== void 0) {
1825
- const sprintValidation = validateSprintOrReleaseValue("sprint", sprint, sprintReleasePolicy);
1826
- sprint = sprintValidation.value;
1827
- validationWarnings.push(...sprintValidation.warnings);
1828
- }
1829
- let release = unsetTargets.frontMatterKeys.has("release") || resolvedOptions.release === void 0 ? void 0 : parseOptionalString(resolvedOptions.release);
1830
- if (release !== void 0) {
1831
- const releaseValidation = validateSprintOrReleaseValue("release", release, sprintReleasePolicy);
1832
- release = releaseValidation.value;
1833
- validationWarnings.push(...releaseValidation.warnings);
1834
- }
1835
- const blockedBy = unsetTargets.frontMatterKeys.has("blocked_by") || resolvedOptions.blockedBy === void 0 ? void 0 : parseOptionalString(resolvedOptions.blockedBy);
1836
- let dependencyValues = dependencies.values;
1837
- if (blockedBy !== void 0) {
1838
- const normalizedBlockedBy = normalizeItemId(blockedBy, settings.id_prefix);
1839
- const blockedByLocated = await locateItem(pmRoot, normalizedBlockedBy, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
1840
- if (blockedByLocated) {
1841
- const hasBlockedByDependency = (dependencyValues ?? []).some((dependency) => dependency.id === blockedByLocated.id && dependency.kind === "blocked_by");
1842
- if (!hasBlockedByDependency) {
1843
- dependencyValues = [
1844
- ...dependencyValues ?? [],
1845
- {
1846
- id: blockedByLocated.id,
1847
- kind: "blocked_by",
1848
- created_at: nowValue,
1849
- author
1850
- }
1851
- ];
1852
- }
1853
- if (resolvedOptions.status === void 0) {
1854
- status = statusRegistry.blocked_statuses.has("blocked") ? "blocked" : [...statusRegistry.blocked_statuses].sort((left, right) => left.localeCompare(right))[0] ?? statusRegistry.open_status;
1855
- }
1856
- }
1857
- }
1858
- const blockedReason = unsetTargets.frontMatterKeys.has("blocked_reason") || resolvedOptions.blockedReason === void 0 ? void 0 : parseOptionalString(resolvedOptions.blockedReason);
1859
- const unblockNote = unsetTargets.frontMatterKeys.has("unblock_note") || resolvedOptions.unblockNote === void 0 ? void 0 : parseOptionalString(resolvedOptions.unblockNote);
1860
- const reporter = (
1861
- /* c8 ignore next -- reporter normalization branch is covered in issue-template integration tests. */
1862
- unsetTargets.frontMatterKeys.has("reporter") || resolvedOptions.reporter === void 0 ? void 0 : parseOptionalString(resolvedOptions.reporter)
1863
- );
1864
- const severityRaw = unsetTargets.frontMatterKeys.has("severity") || resolvedOptions.severity === void 0 ? void 0 : parseOptionalString(resolvedOptions.severity);
1865
- const severity = severityRaw !== void 0 ? ensureEnumValue(normalizeSeverityInput(severityRaw), ISSUE_SEVERITY_VALUES, "severity") : void 0;
1866
- const environment = unsetTargets.frontMatterKeys.has("environment") || resolvedOptions.environment === void 0 ? void 0 : parseOptionalString(resolvedOptions.environment);
1867
- const reproSteps = unsetTargets.frontMatterKeys.has("repro_steps") || resolvedOptions.reproSteps === void 0 ? void 0 : parseOptionalString(resolvedOptions.reproSteps);
1868
- const resolution = unsetTargets.frontMatterKeys.has("resolution") || resolvedOptions.resolution === void 0 ? void 0 : parseOptionalString(resolvedOptions.resolution);
1869
- const expectedResult = unsetTargets.frontMatterKeys.has("expected_result") || resolvedOptions.expectedResult === void 0 ? void 0 : parseOptionalString(resolvedOptions.expectedResult);
1870
- const actualResult = unsetTargets.frontMatterKeys.has("actual_result") || resolvedOptions.actualResult === void 0 ? void 0 : parseOptionalString(resolvedOptions.actualResult);
1871
- const affectedVersion = unsetTargets.frontMatterKeys.has("affected_version") || resolvedOptions.affectedVersion === void 0 ? void 0 : parseOptionalString(resolvedOptions.affectedVersion);
1872
- const fixedVersion = unsetTargets.frontMatterKeys.has("fixed_version") || resolvedOptions.fixedVersion === void 0 ? void 0 : parseOptionalString(resolvedOptions.fixedVersion);
1873
- const component = unsetTargets.frontMatterKeys.has("component") || resolvedOptions.component === void 0 ? void 0 : parseOptionalString(resolvedOptions.component);
1874
- const regressionRaw = unsetTargets.frontMatterKeys.has("regression") || resolvedOptions.regression === void 0 ? void 0 : parseOptionalString(resolvedOptions.regression);
1875
- const regression = regressionRaw !== void 0 ? parseRegressionInput(regressionRaw) : void 0;
1876
- const customerImpact = unsetTargets.frontMatterKeys.has("customer_impact") || resolvedOptions.customerImpact === void 0 ? void 0 : parseOptionalString(resolvedOptions.customerImpact);
1927
+ const parentValidation = await validateCreateParentReference(pmRoot, settings, typeRegistry, parent, parentReferencePolicy);
1928
+ parent = parentValidation.parent;
1929
+ validationWarnings.push(...parentValidation.warnings);
1930
+ }
1931
+ const sprintResolved = resolveCreateSprintOrRelease(unsetKeys, "sprint", resolvedOptions.sprint, "sprint", sprintReleasePolicy);
1932
+ const sprint = sprintResolved.value;
1933
+ validationWarnings.push(...sprintResolved.warnings);
1934
+ const releaseResolved = resolveCreateSprintOrRelease(unsetKeys, "release", resolvedOptions.release, "release", sprintReleasePolicy);
1935
+ const release = releaseResolved.value;
1936
+ validationWarnings.push(...releaseResolved.warnings);
1937
+ const blockedBy = resolveUnsettableOptionalString(unsetKeys, "blocked_by", resolvedOptions.blockedBy);
1938
+ const blockedByResolution = await resolveCreateBlockedByDependency({
1939
+ pmRoot,
1940
+ settings,
1941
+ typeRegistry,
1942
+ statusRegistry,
1943
+ blockedBy,
1944
+ dependencyValues: dependencies.values,
1945
+ status,
1946
+ statusExplicit: resolvedOptions.status !== void 0,
1947
+ nowValue,
1948
+ author
1949
+ });
1950
+ const dependencyValues = blockedByResolution.dependencyValues;
1951
+ status = blockedByResolution.status;
1952
+ const blockedReason = resolveUnsettableOptionalString(unsetKeys, "blocked_reason", resolvedOptions.blockedReason);
1953
+ const unblockNote = resolveUnsettableOptionalString(unsetKeys, "unblock_note", resolvedOptions.unblockNote);
1954
+ const reporter = resolveUnsettableOptionalString(unsetKeys, "reporter", resolvedOptions.reporter);
1955
+ const severity = resolveUnsettableTransformed(unsetKeys, "severity", resolvedOptions.severity, (raw) => ensureEnumValue(normalizeSeverityInput(raw), ISSUE_SEVERITY_VALUES, "severity"));
1956
+ const environment = resolveUnsettableOptionalString(unsetKeys, "environment", resolvedOptions.environment);
1957
+ const reproSteps = resolveUnsettableOptionalString(unsetKeys, "repro_steps", resolvedOptions.reproSteps);
1958
+ const resolution = resolveUnsettableOptionalString(unsetKeys, "resolution", resolvedOptions.resolution);
1959
+ const expectedResult = resolveUnsettableOptionalString(unsetKeys, "expected_result", resolvedOptions.expectedResult);
1960
+ const actualResult = resolveUnsettableOptionalString(unsetKeys, "actual_result", resolvedOptions.actualResult);
1961
+ const affectedVersion = resolveUnsettableOptionalString(unsetKeys, "affected_version", resolvedOptions.affectedVersion);
1962
+ const fixedVersion = resolveUnsettableOptionalString(unsetKeys, "fixed_version", resolvedOptions.fixedVersion);
1963
+ const component = resolveUnsettableOptionalString(unsetKeys, "component", resolvedOptions.component);
1964
+ const regression = resolveUnsettableTransformed(unsetKeys, "regression", resolvedOptions.regression, (raw) => parseRegressionInput(raw));
1965
+ const customerImpact = resolveUnsettableOptionalString(unsetKeys, "customer_impact", resolvedOptions.customerImpact);
1877
1966
  const title = requireStringOption(resolvedOptions.title, "--title");
1878
1967
  const description = resolvedOptions.description ?? "";
1879
1968
  const body = resolvedOptions.body ?? "";
1880
- let closeReason;
1881
- if (status === statusRegistry.close_status && settings.governance.require_close_reason) {
1882
- const messageText = typeof resolvedOptions.message === "string" ? resolvedOptions.message.trim() : "";
1883
- const resolutionText = typeof resolution === "string" ? resolution.trim() : "";
1884
- closeReason = messageText || resolutionText || CREATE_DIRECT_CLOSE_REASON_DEFAULT;
1885
- if (messageText.length === 0 && resolutionText.length === 0) {
1886
- validationWarnings.push("close_reason_defaulted");
1887
- }
1888
- }
1969
+ const closeReasonResolution = resolveCreateCloseReason(status, statusRegistry, settings, resolvedOptions, resolution);
1970
+ const closeReason = closeReasonResolution.closeReason;
1971
+ validationWarnings.push(...closeReasonResolution.warnings);
1889
1972
  const frontMatter = normalizeFrontMatter({
1890
1973
  id,
1891
1974
  title,
@@ -1957,9 +2040,6 @@ async function runCreate(options, global2) {
1957
2040
  metadata: {},
1958
2041
  body: ""
1959
2042
  };
1960
- const itemPath = getItemPath(pmRoot, type, id, settings.item_format, typeRegistry.type_to_folder);
1961
- const historyPath = getHistoryPath(pmRoot, id);
1962
- const lockRelease = await acquireLock(pmRoot, id, settings.locks.ttl_seconds, author, false, settings.governance.force_required_for_stale_lock);
1963
2043
  const explicitUnsetKeys = [...explicitUnsets].sort((left, right) => left.localeCompare(right));
1964
2044
  const historyMessage = buildHistoryMessage(resolvedOptions.message, explicitUnsetKeys);
1965
2045
  const changedFields = buildChangedFields(frontMatter, body, explicitUnsetKeys, [
@@ -1968,63 +2048,23 @@ async function runCreate(options, global2) {
1968
2048
  ...Object.keys(runtimeCreateFieldValues.values ?? {})
1969
2049
  /* c8 ignore stop */
1970
2050
  ]);
1971
- let hookWarnings = [];
1972
- try {
1973
- await writeFileAtomic(itemPath, serializeItemDocument(afterDocument, {
1974
- format: settings.item_format,
1975
- schema: settings.schema,
1976
- extensionFieldNames
1977
- }));
1978
- try {
1979
- const entry = createHistoryEntry({
1980
- nowIso: nowValue,
1981
- author,
1982
- op: "create",
1983
- before: beforeDocument,
1984
- after: afterDocument,
1985
- message: historyMessage
1986
- });
1987
- await appendHistoryEntry(historyPath, entry);
1988
- } catch (error) {
1989
- await removeFileIfExists(itemPath);
1990
- throw error;
1991
- }
1992
- hookWarnings = [
1993
- ...await runActiveOnWriteHooks({
1994
- path: itemPath,
1995
- scope: "project",
1996
- op: "create",
1997
- item_id: afterDocument.metadata.id,
1998
- item_type: afterDocument.metadata.type,
1999
- before: beforeDocument,
2000
- after: afterDocument,
2001
- changed_fields: changedFields
2002
- }),
2003
- ...await runActiveOnWriteHooks({
2004
- path: historyPath,
2005
- scope: "project",
2006
- op: "create:history",
2007
- item_id: afterDocument.metadata.id,
2008
- item_type: afterDocument.metadata.type,
2009
- before: beforeDocument,
2010
- after: afterDocument,
2011
- changed_fields: changedFields
2012
- })
2013
- ];
2014
- recordAfterCommandAffectedItem({
2015
- id: afterDocument.metadata.id,
2016
- op: "create",
2017
- item_type: afterDocument.metadata.type,
2018
- status: afterDocument.metadata.status,
2019
- current: projectAfterCommandItemSnapshot(afterDocument.metadata, changedFields),
2020
- changed_fields: changedFields
2021
- });
2022
- } finally {
2023
- await lockRelease();
2024
- }
2051
+ const hookWarnings = await writeCreatedItem({
2052
+ pmRoot,
2053
+ type,
2054
+ id,
2055
+ settings,
2056
+ typeRegistry,
2057
+ author,
2058
+ extensionFieldNames,
2059
+ afterDocument,
2060
+ beforeDocument,
2061
+ historyMessage,
2062
+ changedFields,
2063
+ nowValue
2064
+ });
2025
2065
  const outputItem = structuredClone(frontMatter);
2026
2066
  const nextTransition = suggestNextLifecycleTransition(id, type, status, statusRegistry);
2027
- if (calendarRelevantTypes.has(type.toLowerCase()) && !hasDeadline && !hasReminders && !hasEvents) {
2067
+ if (createItemLacksSchedule(type, deadline, reminders.values, events.values)) {
2028
2068
  printError(`[pm] warning: ${type} '${id}' has no deadline/reminder/event \u2014 it will not appear on the calendar. Add one via 'pm update ${id} --deadline <ISO>' or 'pm update ${id} --event "start=<ISO>,end=<ISO>"'.`);
2029
2069
  }
2030
2070
  return {
@@ -2081,4 +2121,4 @@ export {
2081
2121
  runCreate,
2082
2122
  _testOnlyCreateCommand
2083
2123
  };
2084
- //# sourceMappingURL=chunk-5T6WPLRO.js.map
2124
+ //# sourceMappingURL=chunk-MNBPX5JS.js.map