@unbrained/pm-cli 2026.7.19 → 2026.7.20

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 (600) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/AGENTS.md +2 -0
  3. package/CHANGELOG.md +36 -0
  4. package/dist/cli/commands/append.js +13 -6
  5. package/dist/cli/commands/append.js.map +1 -1
  6. package/dist/cli/commands/calendar.d.ts +1 -1
  7. package/dist/cli/commands/calendar.js +2 -2
  8. package/dist/cli/commands/calendar.js.map +1 -1
  9. package/dist/cli/commands/comments.js +2 -5
  10. package/dist/cli/commands/comments.js.map +1 -1
  11. package/dist/cli/commands/completion.js +11 -3
  12. package/dist/cli/commands/completion.js.map +1 -1
  13. package/dist/cli/commands/context.d.ts +1 -1
  14. package/dist/cli/commands/context.js +2 -2
  15. package/dist/cli/commands/context.js.map +1 -1
  16. package/dist/cli/commands/contracts.js +4 -3
  17. package/dist/cli/commands/contracts.js.map +1 -1
  18. package/dist/cli/commands/copy.js +5 -3
  19. package/dist/cli/commands/copy.js.map +1 -1
  20. package/dist/cli/commands/create.d.ts +3 -1
  21. package/dist/cli/commands/create.js +5 -3
  22. package/dist/cli/commands/create.js.map +1 -1
  23. package/dist/cli/commands/merge.d.ts +8 -0
  24. package/dist/cli/commands/merge.js +12 -0
  25. package/dist/cli/commands/merge.js.map +1 -0
  26. package/dist/cli/commands/plan.d.ts +1 -1
  27. package/dist/cli/commands/plan.js +2 -2
  28. package/dist/cli/commands/plan.js.map +1 -1
  29. package/dist/cli/commands/update-many.d.ts +5 -0
  30. package/dist/cli/commands/update-many.js +81 -6
  31. package/dist/cli/commands/update-many.js.map +1 -1
  32. package/dist/cli/commands/update.d.ts +5 -1
  33. package/dist/cli/commands/update.js +50 -4
  34. package/dist/cli/commands/update.js.map +1 -1
  35. package/dist/cli/register-list-query.js +14 -2
  36. package/dist/cli/register-list-query.js.map +1 -1
  37. package/dist/cli/register-mutation.js +61 -2
  38. package/dist/cli/register-mutation.js.map +1 -1
  39. package/dist/cli/register-operations.js +5 -3
  40. package/dist/cli/register-operations.js.map +1 -1
  41. package/dist/cli/registration-helpers.js +4 -2
  42. package/dist/cli/registration-helpers.js.map +1 -1
  43. package/dist/cli-bundle/bundle-manifest.json +365 -333
  44. package/dist/cli-bundle/chunks/{append-MBXHNWSX.js → append-E6V54WOQ.js} +5 -5
  45. package/dist/cli-bundle/chunks/append-NNJ3EFIT.js +11 -0
  46. package/dist/cli-bundle/chunks/{chunk-M4B4RK4J.js → chunk-2BO4CA46.js} +14 -238
  47. package/dist/cli-bundle/chunks/{chunk-M4B4RK4J.js.map → chunk-2BO4CA46.js.map} +1 -1
  48. package/dist/cli-bundle/chunks/{chunk-MQOSMBWV.js → chunk-3AO5VSDR.js} +25 -6
  49. package/dist/cli-bundle/chunks/chunk-3AO5VSDR.js.map +7 -0
  50. package/dist/cli-bundle/chunks/{chunk-ODEIDKGW.js → chunk-3LPFHE3P.js} +596 -154
  51. package/dist/cli-bundle/chunks/chunk-3LPFHE3P.js.map +1 -0
  52. package/dist/cli-bundle/chunks/{chunk-YGEA4CLH.js → chunk-3MCTMJXI.js} +4 -4
  53. package/dist/cli-bundle/chunks/{chunk-N7FCFJ76.js → chunk-3P7UJQOX.js} +2 -2
  54. package/dist/cli-bundle/chunks/{chunk-7B7IHMLH.js → chunk-3VY6MIEO.js} +3 -3
  55. package/dist/cli-bundle/chunks/{chunk-3EZZTFL2.js → chunk-4F6BWJ4J.js} +51 -43
  56. package/dist/cli-bundle/chunks/chunk-4F6BWJ4J.js.map +7 -0
  57. package/dist/cli-bundle/chunks/{chunk-VA3H7VVC.js → chunk-4L23AGQ7.js} +9 -7
  58. package/dist/cli-bundle/chunks/chunk-4L23AGQ7.js.map +1 -0
  59. package/dist/cli-bundle/chunks/{chunk-5S6IZXK7.js → chunk-4U4Z6AHI.js} +7 -7
  60. package/dist/cli-bundle/chunks/{chunk-UOIFZ66L.js → chunk-4XGJLADW.js} +3 -3
  61. package/dist/cli-bundle/chunks/{chunk-SUNZKVAH.js → chunk-5IZJWSDB.js} +5 -5
  62. package/dist/cli-bundle/chunks/{chunk-QQ77W23U.js → chunk-5NTE36LD.js} +4 -4
  63. package/dist/cli-bundle/chunks/{chunk-EVAN5VJA.js → chunk-5OK4UGFV.js} +5 -8
  64. package/dist/cli-bundle/chunks/{chunk-EVAN5VJA.js.map → chunk-5OK4UGFV.js.map} +2 -2
  65. package/dist/cli-bundle/chunks/{chunk-H3YKUVDR.js → chunk-5UX66S6U.js} +26 -7
  66. package/dist/cli-bundle/chunks/chunk-5UX66S6U.js.map +1 -0
  67. package/dist/cli-bundle/chunks/{chunk-KGPLSHJD.js → chunk-6C2ZZX5Z.js} +2 -2
  68. package/dist/cli-bundle/chunks/{chunk-Q5NHJ6RO.js → chunk-6JUTHVQS.js} +2 -2
  69. package/dist/cli-bundle/chunks/{chunk-NTS2RKHN.js → chunk-6VIJ7UA5.js} +15 -15
  70. package/dist/cli-bundle/chunks/{chunk-BBGR4FKQ.js → chunk-6XMUURSS.js} +6 -6
  71. package/dist/cli-bundle/chunks/chunk-6XMUURSS.js.map +1 -0
  72. package/dist/cli-bundle/chunks/{chunk-XVB6BATY.js → chunk-72LQ4TKV.js} +3 -3
  73. package/dist/cli-bundle/chunks/{chunk-WCBB6VI3.js → chunk-7AVEY74G.js} +8 -5
  74. package/dist/cli-bundle/chunks/chunk-7AVEY74G.js.map +7 -0
  75. package/dist/cli-bundle/chunks/{chunk-YG56M3NE.js → chunk-7DOJC3HS.js} +8 -8
  76. package/dist/cli-bundle/chunks/chunk-7DOJC3HS.js.map +1 -0
  77. package/dist/cli-bundle/chunks/{chunk-KZ5AC6B5.js → chunk-7WCE6Y64.js} +2 -2
  78. package/dist/cli-bundle/chunks/{chunk-VQOG2ETB.js → chunk-AF2CCM5U.js} +4 -4
  79. package/dist/cli-bundle/chunks/{chunk-P24ZU5QV.js → chunk-AOEOYL3S.js} +49 -12
  80. package/dist/cli-bundle/chunks/chunk-AOEOYL3S.js.map +7 -0
  81. package/dist/cli-bundle/chunks/{chunk-BZKE2O5V.js → chunk-BKIAH72N.js} +8 -6
  82. package/dist/cli-bundle/chunks/chunk-BKIAH72N.js.map +1 -0
  83. package/dist/cli-bundle/chunks/{chunk-RWAIRGBC.js → chunk-C3KD7U3T.js} +12 -243
  84. package/dist/cli-bundle/chunks/chunk-C3KD7U3T.js.map +7 -0
  85. package/dist/cli-bundle/chunks/chunk-CFHAODHQ.js +334 -0
  86. package/dist/cli-bundle/chunks/chunk-CFHAODHQ.js.map +1 -0
  87. package/dist/cli-bundle/chunks/{chunk-TELI67UP.js → chunk-CQTQKUUV.js} +6 -9
  88. package/dist/cli-bundle/chunks/{chunk-TELI67UP.js.map → chunk-CQTQKUUV.js.map} +1 -1
  89. package/dist/cli-bundle/chunks/{chunk-ZUCBPXNA.js → chunk-D6NXDNP3.js} +5 -5
  90. package/dist/cli-bundle/chunks/chunk-D6NXDNP3.js.map +7 -0
  91. package/dist/cli-bundle/chunks/{chunk-EAV3P54W.js → chunk-DAQ45GCS.js} +5 -5
  92. package/dist/cli-bundle/chunks/{chunk-6V4T4RD3.js → chunk-DVDBQA3B.js} +79 -22
  93. package/dist/cli-bundle/chunks/chunk-DVDBQA3B.js.map +1 -0
  94. package/dist/cli-bundle/chunks/chunk-E6LEMURX.js +249 -0
  95. package/dist/cli-bundle/chunks/chunk-E6LEMURX.js.map +7 -0
  96. package/dist/cli-bundle/chunks/{chunk-ZF52NVRT.js → chunk-E7ICD63T.js} +131 -179
  97. package/dist/cli-bundle/chunks/chunk-E7ICD63T.js.map +7 -0
  98. package/dist/cli-bundle/chunks/{chunk-RX53WHFI.js → chunk-EJDGV4GR.js} +3 -3
  99. package/dist/cli-bundle/chunks/{chunk-IXG5CMBR.js → chunk-FDHPAVVB.js} +4 -4
  100. package/dist/cli-bundle/chunks/{chunk-KAE727L2.js → chunk-FSRHYUDA.js} +2 -2
  101. package/dist/cli-bundle/chunks/chunk-FSRHYUDA.js.map +7 -0
  102. package/dist/cli-bundle/chunks/{chunk-46Z6FAVP.js → chunk-G3COA6GS.js} +51 -43
  103. package/dist/cli-bundle/chunks/chunk-G3COA6GS.js.map +1 -0
  104. package/dist/cli-bundle/chunks/{chunk-A4FVWFZY.js → chunk-GFQP7HAZ.js} +8 -6
  105. package/dist/cli-bundle/chunks/chunk-GFQP7HAZ.js.map +7 -0
  106. package/dist/cli-bundle/chunks/{chunk-2XPDCXK5.js → chunk-GIQSU6S2.js} +6 -6
  107. package/dist/cli-bundle/chunks/chunk-GIQSU6S2.js.map +1 -0
  108. package/dist/cli-bundle/chunks/{chunk-V4QHAMI5.js → chunk-GROYI4RB.js} +3 -3
  109. package/dist/cli-bundle/chunks/{chunk-77XFQRTD.js → chunk-GSJSM5BJ.js} +3 -3
  110. package/dist/cli-bundle/chunks/{chunk-QYGK2XQ3.js → chunk-GTLCVJOE.js} +3 -3
  111. package/dist/cli-bundle/chunks/{chunk-VSQE43NO.js → chunk-GV2262OF.js} +4 -4
  112. package/dist/cli-bundle/chunks/{chunk-N2TEEOXJ.js → chunk-GVI6FAFG.js} +8 -6
  113. package/dist/cli-bundle/chunks/chunk-GVI6FAFG.js.map +7 -0
  114. package/dist/cli-bundle/chunks/{chunk-A5EQPNV7.js → chunk-GVT754PX.js} +44 -3
  115. package/dist/cli-bundle/chunks/chunk-GVT754PX.js.map +7 -0
  116. package/dist/cli-bundle/chunks/{chunk-Y2VSGFT4.js → chunk-HB3P4M52.js} +22 -7
  117. package/dist/cli-bundle/chunks/chunk-HB3P4M52.js.map +1 -0
  118. package/dist/cli-bundle/chunks/{chunk-STBCBDKF.js → chunk-HCEBZNC3.js} +6 -6
  119. package/dist/cli-bundle/chunks/{chunk-EEECAV5M.js → chunk-HEWM6CEN.js} +80 -25
  120. package/dist/cli-bundle/chunks/chunk-HEWM6CEN.js.map +7 -0
  121. package/dist/cli-bundle/chunks/{chunk-GKCEEXMA.js → chunk-HQ3SB4CN.js} +21 -6
  122. package/dist/cli-bundle/chunks/{chunk-GKCEEXMA.js.map → chunk-HQ3SB4CN.js.map} +2 -2
  123. package/dist/cli-bundle/chunks/{chunk-U6RYD446.js → chunk-HRW7GF6T.js} +7 -7
  124. package/dist/cli-bundle/chunks/{chunk-D35WYXWC.js → chunk-HYW67VJ5.js} +6 -3
  125. package/dist/cli-bundle/chunks/chunk-HYW67VJ5.js.map +1 -0
  126. package/dist/cli-bundle/chunks/{chunk-OKWJUL6F.js → chunk-I577UHC7.js} +16 -9
  127. package/dist/cli-bundle/chunks/{chunk-OKWJUL6F.js.map → chunk-I577UHC7.js.map} +2 -2
  128. package/dist/cli-bundle/chunks/{chunk-XDWXPG2E.js → chunk-IAQE32BI.js} +4 -4
  129. package/dist/cli-bundle/chunks/{chunk-66SRNEBK.js → chunk-IJNK6WW2.js} +3 -3
  130. package/dist/cli-bundle/chunks/chunk-INSTSQNZ.js +623 -0
  131. package/dist/cli-bundle/chunks/chunk-INSTSQNZ.js.map +7 -0
  132. package/dist/cli-bundle/chunks/{chunk-A3GAQLBH.js → chunk-IX677TRO.js} +75 -12
  133. package/dist/cli-bundle/chunks/chunk-IX677TRO.js.map +7 -0
  134. package/dist/cli-bundle/chunks/{chunk-RLLOZAM2.js → chunk-IY6VZ3IW.js} +29 -8
  135. package/dist/cli-bundle/chunks/chunk-IY6VZ3IW.js.map +7 -0
  136. package/dist/cli-bundle/chunks/{chunk-SVAWG7EE.js → chunk-J4FBIFU6.js} +45 -4
  137. package/dist/cli-bundle/chunks/chunk-J4FBIFU6.js.map +1 -0
  138. package/dist/cli-bundle/chunks/{chunk-AGEBQRBG.js → chunk-JAPE62Y5.js} +9 -9
  139. package/dist/cli-bundle/chunks/{chunk-UWAQI3B7.js → chunk-JGUKMMRS.js} +3 -3
  140. package/dist/cli-bundle/chunks/{chunk-UU6EP25G.js → chunk-JH2ZSLO3.js} +2 -2
  141. package/dist/cli-bundle/chunks/{chunk-GRDK25BN.js → chunk-JHJSFOAM.js} +6 -6
  142. package/dist/cli-bundle/chunks/{chunk-FQO5THHM.js → chunk-JM6YAXTR.js} +2 -2
  143. package/dist/cli-bundle/chunks/{chunk-E7KBMWEF.js → chunk-JSLT7WVE.js} +2 -2
  144. package/dist/cli-bundle/chunks/{chunk-FIUTBFC6.js → chunk-K4CI6Y45.js} +2 -2
  145. package/dist/cli-bundle/chunks/{chunk-IEMXESIS.js → chunk-KSPWRNVP.js} +7 -7
  146. package/dist/cli-bundle/chunks/{chunk-3QNUDDY2.js → chunk-KZEANWJS.js} +14 -12
  147. package/dist/cli-bundle/chunks/{chunk-3QNUDDY2.js.map → chunk-KZEANWJS.js.map} +2 -2
  148. package/dist/cli-bundle/chunks/{chunk-BFJP4VYC.js → chunk-L7BH7IWU.js} +4 -4
  149. package/dist/cli-bundle/chunks/{chunk-2UCG5H6B.js → chunk-LPEYZRUR.js} +3 -3
  150. package/dist/cli-bundle/chunks/{chunk-FQF6VVPH.js → chunk-MYSS5H2A.js} +9 -7
  151. package/dist/cli-bundle/chunks/{chunk-FQF6VVPH.js.map → chunk-MYSS5H2A.js.map} +1 -1
  152. package/dist/cli-bundle/chunks/{chunk-IR3GOO6E.js → chunk-NHT3F4WZ.js} +15 -15
  153. package/dist/cli-bundle/chunks/{chunk-6BNV3G6C.js → chunk-NLR32VFS.js} +2 -2
  154. package/dist/cli-bundle/chunks/{chunk-BDC4TW4B.js → chunk-OV7MSW3I.js} +15 -13
  155. package/dist/cli-bundle/chunks/chunk-OV7MSW3I.js.map +1 -0
  156. package/dist/cli-bundle/chunks/{chunk-EI3UIMZM.js → chunk-OWXOPDHD.js} +4 -4
  157. package/dist/cli-bundle/chunks/chunk-P7JTWYLH.js +246 -0
  158. package/dist/cli-bundle/chunks/chunk-P7JTWYLH.js.map +1 -0
  159. package/dist/cli-bundle/chunks/{chunk-AQUNTB7G.js → chunk-PEQGTJ5Q.js} +3 -3
  160. package/dist/cli-bundle/chunks/{chunk-QFG4MB7P.js → chunk-POG76WWZ.js} +28 -7
  161. package/dist/cli-bundle/chunks/chunk-POG76WWZ.js.map +1 -0
  162. package/dist/cli-bundle/chunks/{chunk-MI3346YW.js → chunk-QANSTTC7.js} +129 -170
  163. package/dist/cli-bundle/chunks/chunk-QANSTTC7.js.map +1 -0
  164. package/dist/cli-bundle/chunks/{chunk-T6MOTLOJ.js → chunk-QJKL5PHS.js} +2 -2
  165. package/dist/cli-bundle/chunks/{chunk-SBW7EQC4.js → chunk-QLZ643FM.js} +76 -13
  166. package/dist/cli-bundle/chunks/chunk-QLZ643FM.js.map +1 -0
  167. package/dist/cli-bundle/chunks/{chunk-XKVHL3MB.js → chunk-QWRVBJ4D.js} +2 -2
  168. package/dist/cli-bundle/chunks/chunk-R3EWPG4A.js +106 -0
  169. package/dist/cli-bundle/chunks/chunk-R3EWPG4A.js.map +1 -0
  170. package/dist/cli-bundle/chunks/chunk-R5U2VZ3K.js +344 -0
  171. package/dist/cli-bundle/chunks/chunk-R5U2VZ3K.js.map +7 -0
  172. package/dist/cli-bundle/chunks/{chunk-VFA5EIEN.js → chunk-R7QV7ICM.js} +4 -4
  173. package/dist/cli-bundle/chunks/{chunk-NPEYH6CE.js → chunk-RDV4ZFYS.js} +12 -10
  174. package/dist/cli-bundle/chunks/{chunk-NPEYH6CE.js.map → chunk-RDV4ZFYS.js.map} +1 -1
  175. package/dist/cli-bundle/chunks/{chunk-K2L6FZBX.js → chunk-RJO3YAFM.js} +4 -4
  176. package/dist/cli-bundle/chunks/{chunk-YIC5NGXF.js → chunk-RMF7LMBS.js} +7 -7
  177. package/dist/cli-bundle/chunks/{chunk-YIC5NGXF.js.map → chunk-RMF7LMBS.js.map} +2 -2
  178. package/dist/cli-bundle/chunks/{chunk-MRXAHR4B.js → chunk-RZJLNXFG.js} +50 -13
  179. package/dist/cli-bundle/chunks/chunk-RZJLNXFG.js.map +1 -0
  180. package/dist/cli-bundle/chunks/{chunk-DJAGYYCQ.js → chunk-SC2HMDGB.js} +19 -3
  181. package/dist/cli-bundle/chunks/chunk-SC2HMDGB.js.map +1 -0
  182. package/dist/cli-bundle/chunks/{chunk-SGJB6PXA.js → chunk-SF3DT5HJ.js} +3 -3
  183. package/dist/cli-bundle/chunks/chunk-SG74J6MV.js +604 -0
  184. package/dist/cli-bundle/chunks/chunk-SG74J6MV.js.map +1 -0
  185. package/dist/cli-bundle/chunks/{chunk-Q3K5XPAQ.js → chunk-SR3JOATZ.js} +18 -2
  186. package/dist/cli-bundle/chunks/chunk-SR3JOATZ.js.map +7 -0
  187. package/dist/cli-bundle/chunks/{chunk-DUDLSQFG.js → chunk-SSKOQNMS.js} +14 -12
  188. package/dist/cli-bundle/chunks/{chunk-DUDLSQFG.js.map → chunk-SSKOQNMS.js.map} +1 -1
  189. package/dist/cli-bundle/chunks/{chunk-UNNCT5QY.js → chunk-SZVB53Y3.js} +3 -3
  190. package/dist/cli-bundle/chunks/{chunk-JBW2S2C6.js → chunk-T44FMVRL.js} +613 -157
  191. package/dist/cli-bundle/chunks/chunk-T44FMVRL.js.map +7 -0
  192. package/dist/cli-bundle/chunks/{chunk-GFZB5CLP.js → chunk-T6PPNM7V.js} +4 -4
  193. package/dist/cli-bundle/chunks/{chunk-UE7LK3RE.js → chunk-THAOZG4U.js} +9 -7
  194. package/dist/cli-bundle/chunks/chunk-THAOZG4U.js.map +1 -0
  195. package/dist/cli-bundle/chunks/{chunk-IGBBTPM5.js → chunk-TOBGV45Y.js} +4 -4
  196. package/dist/cli-bundle/chunks/chunk-TOBGV45Y.js.map +1 -0
  197. package/dist/cli-bundle/chunks/{chunk-W6IEJXNC.js → chunk-TVYYO5A7.js} +2 -2
  198. package/dist/cli-bundle/chunks/chunk-TYHJDFYW.js +109 -0
  199. package/dist/cli-bundle/chunks/chunk-TYHJDFYW.js.map +7 -0
  200. package/dist/cli-bundle/chunks/{chunk-DOASIOQR.js → chunk-UQLXSG72.js} +2 -2
  201. package/dist/cli-bundle/chunks/{chunk-IDUTGRDM.js → chunk-URXVHN3L.js} +3 -3
  202. package/dist/cli-bundle/chunks/chunk-URXVHN3L.js.map +1 -0
  203. package/dist/cli-bundle/chunks/{chunk-7CHWLT2J.js → chunk-UVN66B3M.js} +2 -2
  204. package/dist/cli-bundle/chunks/{chunk-Q6JPYR7I.js → chunk-UX6SSO2I.js} +2 -2
  205. package/dist/cli-bundle/chunks/{chunk-JPWUZOMR.js → chunk-UZDQXNUB.js} +75 -20
  206. package/dist/cli-bundle/chunks/chunk-UZDQXNUB.js.map +1 -0
  207. package/dist/cli-bundle/chunks/{chunk-OK7VSX3N.js → chunk-UZLJOEAC.js} +3 -3
  208. package/dist/cli-bundle/chunks/{chunk-4PSJVGRE.js → chunk-VDO2JMD4.js} +7 -7
  209. package/dist/cli-bundle/chunks/{chunk-IRJ6F23W.js → chunk-VQIHNHMJ.js} +2 -2
  210. package/dist/cli-bundle/chunks/{chunk-FQODDTE7.js → chunk-WUVEBQW6.js} +7 -5
  211. package/dist/cli-bundle/chunks/{chunk-FQODDTE7.js.map → chunk-WUVEBQW6.js.map} +1 -1
  212. package/dist/cli-bundle/chunks/{chunk-Q4PSG2GV.js → chunk-WVA4DVNV.js} +5 -5
  213. package/dist/cli-bundle/chunks/{chunk-Q4PSG2GV.js.map → chunk-WVA4DVNV.js.map} +1 -1
  214. package/dist/cli-bundle/chunks/{chunk-4M6RZJXF.js → chunk-WWNL6WMH.js} +3 -3
  215. package/dist/cli-bundle/chunks/chunk-WWNL6WMH.js.map +7 -0
  216. package/dist/cli-bundle/chunks/{chunk-3KPNOZOH.js → chunk-X6K5XTTN.js} +78 -21
  217. package/dist/cli-bundle/chunks/chunk-X6K5XTTN.js.map +7 -0
  218. package/dist/cli-bundle/chunks/{chunk-G33XIMRT.js → chunk-XJF7CDNH.js} +17 -10
  219. package/dist/cli-bundle/chunks/{chunk-G33XIMRT.js.map → chunk-XJF7CDNH.js.map} +1 -1
  220. package/dist/cli-bundle/chunks/{chunk-AR24KW26.js → chunk-YBT7O4KT.js} +17 -112
  221. package/dist/cli-bundle/chunks/chunk-YBT7O4KT.js.map +7 -0
  222. package/dist/cli-bundle/chunks/{chunk-CZA2DXCV.js → chunk-YQQNAKW3.js} +17 -105
  223. package/dist/cli-bundle/chunks/chunk-YQQNAKW3.js.map +1 -0
  224. package/dist/cli-bundle/chunks/{chunk-OKPZDH43.js → chunk-YQWCZ5AC.js} +7 -5
  225. package/dist/cli-bundle/chunks/{chunk-OKPZDH43.js.map → chunk-YQWCZ5AC.js.map} +2 -2
  226. package/dist/cli-bundle/chunks/{chunk-LT5UWU7H.js → chunk-ZOJ3LR7O.js} +2 -2
  227. package/dist/cli-bundle/chunks/{chunk-3HSRP6T2.js → chunk-ZOY5K4D3.js} +2 -2
  228. package/dist/cli-bundle/chunks/{chunk-XXWDEQ6O.js → chunk-ZV2NTVMJ.js} +4 -4
  229. package/dist/cli-bundle/chunks/{chunk-UW6HCMP2.js → chunk-ZYPFOO3L.js} +9 -9
  230. package/dist/cli-bundle/chunks/close-O5QVZ6ET.js +12 -0
  231. package/dist/cli-bundle/chunks/{close-7NWA3GLA.js → close-QEMOYZN3.js} +5 -5
  232. package/dist/cli-bundle/chunks/close-many-SDA426VT.js +24 -0
  233. package/dist/cli-bundle/chunks/{close-many-YALQ7AXS.js → close-many-UTZANOCQ.js} +15 -14
  234. package/dist/cli-bundle/chunks/{comments-SQIQ5WYR.js → comments-LZN6FXXC.js} +7 -7
  235. package/dist/cli-bundle/chunks/comments-VBQ345ND.js +13 -0
  236. package/dist/cli-bundle/chunks/{copy-YDAMENCP.js → copy-DKTSSCK7.js} +4 -4
  237. package/dist/cli-bundle/chunks/copy-M7DDI6LS.js +9 -0
  238. package/dist/cli-bundle/chunks/{create-JSL6CXU3.js → create-GG4RBCGC.js} +11 -11
  239. package/dist/cli-bundle/chunks/create-JBC5KUW6.js +29 -0
  240. package/dist/cli-bundle/chunks/{delete-IGVOZEU2.js → delete-LCS3VPDH.js} +4 -4
  241. package/dist/cli-bundle/chunks/delete-MD7YXQLH.js +10 -0
  242. package/dist/cli-bundle/chunks/{deps-BQAXUQAK.js → deps-DELOO4TL.js} +6 -6
  243. package/dist/cli-bundle/chunks/{deps-CBPPSS6J.js → deps-FI4O6NQS.js} +6 -6
  244. package/dist/cli-bundle/chunks/docs-2UYBP5D6.js +14 -0
  245. package/dist/cli-bundle/chunks/{docs-NS2AZWCN.js → docs-6Z2MP526.js} +6 -6
  246. package/dist/cli-bundle/chunks/{files-XUUBQ76I.js → files-HEUGSJZL.js} +6 -6
  247. package/dist/cli-bundle/chunks/{files-PVWEPT5J.js → files-HKEAN5MA.js} +6 -6
  248. package/dist/cli-bundle/chunks/{focus-DHBHKK3E.js → focus-7SOUT5PZ.js} +5 -5
  249. package/dist/cli-bundle/chunks/focus-DRQ6FQH6.js +10 -0
  250. package/dist/cli-bundle/chunks/history-compact-65YVN5DB.js +17 -0
  251. package/dist/cli-bundle/chunks/{history-compact-3TNPYVFG.js → history-compact-7NDVP3PT.js} +7 -6
  252. package/dist/cli-bundle/chunks/{history-redact-KKFDICCF.js → history-redact-7YBL4XSG.js} +5 -4
  253. package/dist/cli-bundle/chunks/{history-redact-ELRL73XN.js → history-redact-IZGNJBU4.js} +5 -4
  254. package/dist/cli-bundle/chunks/{history-repair-J7WKZFAG.js → history-repair-7M4PYQUH.js} +8 -6
  255. package/dist/cli-bundle/chunks/history-repair-GNGETJLI.js +18 -0
  256. package/dist/cli-bundle/chunks/learnings-3YXDRWFT.js +13 -0
  257. package/dist/cli-bundle/chunks/{learnings-X4D6JCCG.js → learnings-ALC6IMNL.js} +7 -7
  258. package/dist/cli-bundle/chunks/notes-7JMLQ447.js +13 -0
  259. package/dist/cli-bundle/chunks/{notes-UQC6VS6N.js → notes-JFCLTC5C.js} +7 -7
  260. package/dist/cli-bundle/chunks/plan-KOIPWVOZ.js +26 -0
  261. package/dist/cli-bundle/chunks/{plan-5GKRBJJO.js → plan-T3XB3WTK.js} +12 -12
  262. package/dist/cli-bundle/chunks/{profile-5PQAPCLF.js → profile-OILJHKUW.js} +12 -11
  263. package/dist/cli-bundle/chunks/{profile-CW4BD3FO.js → profile-RJXA7PGS.js} +12 -11
  264. package/dist/cli-bundle/chunks/{register-list-query-PHIPDFP2.js → register-list-query-CFVG75P3.js} +30 -21
  265. package/dist/cli-bundle/chunks/{register-list-query-PHIPDFP2.js.map → register-list-query-CFVG75P3.js.map} +1 -1
  266. package/dist/cli-bundle/chunks/{register-list-query-HTDQE6VI.js → register-list-query-E7UVY4TN.js} +29 -20
  267. package/dist/cli-bundle/chunks/{register-list-query-HTDQE6VI.js.map → register-list-query-E7UVY4TN.js.map} +2 -2
  268. package/dist/cli-bundle/chunks/{register-mutation-BLEWM5I6.js → register-mutation-4VJTXBZW.js} +86 -32
  269. package/dist/cli-bundle/chunks/register-mutation-4VJTXBZW.js.map +7 -0
  270. package/dist/cli-bundle/chunks/{register-mutation-OTYHR7J6.js → register-mutation-IQ55E25C.js} +78 -33
  271. package/dist/cli-bundle/chunks/register-mutation-IQ55E25C.js.map +1 -0
  272. package/dist/cli-bundle/chunks/{register-operations-AMCUFYEW.js → register-operations-AR7RMX4W.js} +42 -38
  273. package/dist/cli-bundle/chunks/register-operations-AR7RMX4W.js.map +1 -0
  274. package/dist/cli-bundle/chunks/{register-operations-MRLHOZYR.js → register-operations-NOLZGORC.js} +41 -37
  275. package/dist/cli-bundle/chunks/register-operations-NOLZGORC.js.map +7 -0
  276. package/dist/cli-bundle/chunks/{register-setup-ZVKTDL4G.js → register-setup-BB77VUEE.js} +17 -16
  277. package/dist/cli-bundle/chunks/{register-setup-ZVKTDL4G.js.map → register-setup-BB77VUEE.js.map} +1 -1
  278. package/dist/cli-bundle/chunks/{register-setup-N2FOSWAG.js → register-setup-EYZ7VTPZ.js} +15 -14
  279. package/dist/cli-bundle/chunks/{register-setup-N2FOSWAG.js.map → register-setup-EYZ7VTPZ.js.map} +1 -1
  280. package/dist/cli-bundle/chunks/restore-L6IAGOD7.js +15 -0
  281. package/dist/cli-bundle/chunks/{restore-HEQAG6EK.js → restore-ZH65GZFB.js} +7 -6
  282. package/dist/cli-bundle/chunks/{schema-Q5DAWJ2S.js → schema-4ERWM5QJ.js} +7 -6
  283. package/dist/cli-bundle/chunks/{schema-MAXAIHEC.js → schema-55DL3Q52.js} +7 -6
  284. package/dist/cli-bundle/chunks/{update-DWFXXJKP.js → update-FW6FKDOP.js} +15 -15
  285. package/dist/cli-bundle/chunks/update-TJHSPRPT.js +23 -0
  286. package/dist/cli-bundle/chunks/update-many-NNALYQCN.js +35 -0
  287. package/dist/cli-bundle/chunks/update-many-PWXX5WHO.js +39 -0
  288. package/dist/cli-bundle/main.js +62 -59
  289. package/dist/cli-bundle/main.js.map +1 -1
  290. package/dist/cli-bundle/sdk-runtime.js +62 -59
  291. package/dist/cli-bundle/sdk-testing.js +8 -8
  292. package/dist/cli-bundle/sdk.js +327 -57
  293. package/dist/cli-bundle/sdk.js.map +4 -4
  294. package/dist/core/config/nested-settings.d.ts +2 -0
  295. package/dist/core/config/nested-settings.js +18 -2
  296. package/dist/core/config/nested-settings.js.map +1 -1
  297. package/dist/core/diagnostics/remediation.js +38 -2
  298. package/dist/core/diagnostics/remediation.js.map +1 -1
  299. package/dist/core/extensions/extension-types.d.ts +1 -1
  300. package/dist/core/extensions/extension-types.js +2 -2
  301. package/dist/core/extensions/extension-types.js.map +1 -1
  302. package/dist/core/item/id.d.ts +19 -2
  303. package/dist/core/item/id.js +27 -6
  304. package/dist/core/item/id.js.map +1 -1
  305. package/dist/core/item/parse.d.ts +7 -0
  306. package/dist/core/item/parse.js +48 -2
  307. package/dist/core/item/parse.js.map +1 -1
  308. package/dist/core/schema/item-types-file.d.ts +2 -2
  309. package/dist/core/schema/item-types-file.js +2 -2
  310. package/dist/core/schema/item-types-file.js.map +1 -1
  311. package/dist/core/schema/runtime-schema.d.ts +3 -3
  312. package/dist/core/schema/runtime-schema.js +2 -2
  313. package/dist/core/schema/runtime-schema.js.map +1 -1
  314. package/dist/core/schema/type-workflows.d.ts +2 -2
  315. package/dist/core/schema/type-workflows.js +2 -2
  316. package/dist/core/schema/type-workflows.js.map +1 -1
  317. package/dist/core/shared/constants.js +5 -2
  318. package/dist/core/shared/constants.js.map +1 -1
  319. package/dist/core/store/settings-validator.d.ts +4 -0
  320. package/dist/core/store/settings-validator.js +8 -2
  321. package/dist/core/store/settings-validator.js.map +1 -1
  322. package/dist/core/store/settings.js +8 -2
  323. package/dist/core/store/settings.js.map +1 -1
  324. package/dist/sdk/annotations.js +24 -2
  325. package/dist/sdk/annotations.js.map +1 -1
  326. package/dist/sdk/cli-bootstrap.d.ts +1 -1
  327. package/dist/sdk/cli-bootstrap.js +3 -3
  328. package/dist/sdk/cli-bootstrap.js.map +1 -1
  329. package/dist/sdk/cli-contracts/commander-mutation-options.js +22 -2
  330. package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
  331. package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
  332. package/dist/sdk/cli-contracts/enum-contracts.js +3 -2
  333. package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
  334. package/dist/sdk/cli-contracts/flag-contracts.d.ts +2 -0
  335. package/dist/sdk/cli-contracts/flag-contracts.js +17 -2
  336. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  337. package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +512 -0
  338. package/dist/sdk/cli-contracts/tool-option-contracts.js +21 -11
  339. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  340. package/dist/sdk/cli-contracts/tool-parameter-tables.js +13 -3
  341. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  342. package/dist/sdk/cli-contracts/tool-schema.d.ts +2 -0
  343. package/dist/sdk/cli-contracts/tool-schema.js +14 -10
  344. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  345. package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +69 -0
  346. package/dist/sdk/cli-contracts/typed-action-inputs.js +5 -0
  347. package/dist/sdk/cli-contracts/typed-action-inputs.js.map +1 -0
  348. package/dist/sdk/cli-contracts.d.ts +4 -3
  349. package/dist/sdk/cli-contracts.js +5 -5
  350. package/dist/sdk/cli-contracts.js.map +1 -1
  351. package/dist/sdk/extension/describe.d.ts +1 -1
  352. package/dist/sdk/extension/describe.js +2 -2
  353. package/dist/sdk/extension/describe.js.map +1 -1
  354. package/dist/sdk/extension/install-runtime.js +5 -3
  355. package/dist/sdk/extension/install-runtime.js.map +1 -1
  356. package/dist/sdk/extension.d.ts +2 -2
  357. package/dist/sdk/extension.js +2 -2
  358. package/dist/sdk/extension.js.map +1 -1
  359. package/dist/sdk/governance/gc.d.ts +14 -1
  360. package/dist/sdk/governance/gc.js +38 -2
  361. package/dist/sdk/governance/gc.js.map +1 -1
  362. package/dist/sdk/governance/storage-integrity.d.ts +84 -0
  363. package/dist/sdk/governance/storage-integrity.js +240 -0
  364. package/dist/sdk/governance/storage-integrity.js.map +1 -0
  365. package/dist/sdk/governance/validate.d.ts +3 -1
  366. package/dist/sdk/governance/validate.js +56 -2
  367. package/dist/sdk/governance/validate.js.map +1 -1
  368. package/dist/sdk/history-read.d.ts +1 -1
  369. package/dist/sdk/history-read.js +2 -2
  370. package/dist/sdk/history-read.js.map +1 -1
  371. package/dist/sdk/history-repair.d.ts +36 -0
  372. package/dist/sdk/history-repair.js +69 -4
  373. package/dist/sdk/history-repair.js.map +1 -1
  374. package/dist/sdk/index.d.ts +5 -2
  375. package/dist/sdk/index.js +5 -2
  376. package/dist/sdk/index.js.map +1 -1
  377. package/dist/sdk/init.js +3 -3
  378. package/dist/sdk/init.js.map +1 -1
  379. package/dist/sdk/item-transaction.d.ts +131 -0
  380. package/dist/sdk/item-transaction.js +280 -0
  381. package/dist/sdk/item-transaction.js.map +1 -0
  382. package/dist/sdk/merge/driver.d.ts +75 -0
  383. package/dist/sdk/merge/driver.js +166 -0
  384. package/dist/sdk/merge/driver.js.map +1 -0
  385. package/dist/sdk/merge/index.d.ts +11 -0
  386. package/dist/sdk/merge/index.js +15 -0
  387. package/dist/sdk/merge/index.js.map +1 -0
  388. package/dist/sdk/merge/install.d.ts +90 -0
  389. package/dist/sdk/merge/install.js +318 -0
  390. package/dist/sdk/merge/install.js.map +1 -0
  391. package/dist/sdk/merge/three-way.d.ts +126 -0
  392. package/dist/sdk/merge/three-way.js +545 -0
  393. package/dist/sdk/merge/three-way.js.map +1 -0
  394. package/dist/sdk/query/list.d.ts +19 -2
  395. package/dist/sdk/query/list.js +5 -2
  396. package/dist/sdk/query/list.js.map +1 -1
  397. package/dist/sdk/runtime.d.ts +17 -14
  398. package/dist/sdk/runtime.js +5 -5
  399. package/dist/sdk/runtime.js.map +1 -1
  400. package/dist/sdk/schema.d.ts +2 -2
  401. package/dist/sdk/schema.js +29 -2
  402. package/dist/sdk/schema.js.map +1 -1
  403. package/dist/sdk/stats.d.ts +1 -1
  404. package/dist/sdk/stats.js +2 -2
  405. package/dist/sdk/stats.js.map +1 -1
  406. package/dist/sdk/workspace-transaction-gc.d.ts +46 -0
  407. package/dist/sdk/workspace-transaction-gc.js +155 -0
  408. package/dist/sdk/workspace-transaction-gc.js.map +1 -0
  409. package/dist/sdk/workspace.d.ts +28 -4
  410. package/dist/sdk/workspace.js +61 -15
  411. package/dist/sdk/workspace.js.map +1 -1
  412. package/dist/types.d.ts +11 -7
  413. package/dist/types.js +2 -2
  414. package/dist/types.js.map +1 -1
  415. package/docs/AGENT_GUIDE.md +58 -47
  416. package/docs/COMMANDS.md +7 -0
  417. package/docs/CONFIGURATION.md +2 -0
  418. package/docs/MERGE_SAFETY.md +99 -0
  419. package/docs/README.md +1 -0
  420. package/docs/SDK.md +56 -0
  421. package/marketplace.json +2 -2
  422. package/package.json +3 -2
  423. package/packages/pm-beads/package.json +1 -1
  424. package/packages/pm-calendar/package.json +1 -1
  425. package/packages/pm-command-kit/package.json +1 -1
  426. package/packages/pm-governance-audit/package.json +1 -1
  427. package/packages/pm-guide-shell/package.json +1 -1
  428. package/packages/pm-kanban/package.json +1 -1
  429. package/packages/pm-lifecycle-hooks/package.json +1 -1
  430. package/packages/pm-linked-test-adapters/package.json +1 -1
  431. package/packages/pm-search-advanced/package.json +1 -1
  432. package/packages/pm-templates/package.json +1 -1
  433. package/packages/pm-todos/package.json +1 -1
  434. package/packages/pm-vcs/package.json +1 -1
  435. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  436. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  437. package/dist/cli-bundle/chunks/append-XUYF7NON.js +0 -11
  438. package/dist/cli-bundle/chunks/chunk-2XPDCXK5.js.map +0 -1
  439. package/dist/cli-bundle/chunks/chunk-3EZZTFL2.js.map +0 -7
  440. package/dist/cli-bundle/chunks/chunk-3KPNOZOH.js.map +0 -7
  441. package/dist/cli-bundle/chunks/chunk-46Z6FAVP.js.map +0 -1
  442. package/dist/cli-bundle/chunks/chunk-4M6RZJXF.js.map +0 -7
  443. package/dist/cli-bundle/chunks/chunk-6V4T4RD3.js.map +0 -1
  444. package/dist/cli-bundle/chunks/chunk-A3GAQLBH.js.map +0 -7
  445. package/dist/cli-bundle/chunks/chunk-A4FVWFZY.js.map +0 -7
  446. package/dist/cli-bundle/chunks/chunk-A5EQPNV7.js.map +0 -7
  447. package/dist/cli-bundle/chunks/chunk-AR24KW26.js.map +0 -7
  448. package/dist/cli-bundle/chunks/chunk-BBGR4FKQ.js.map +0 -1
  449. package/dist/cli-bundle/chunks/chunk-BDC4TW4B.js.map +0 -1
  450. package/dist/cli-bundle/chunks/chunk-BZKE2O5V.js.map +0 -1
  451. package/dist/cli-bundle/chunks/chunk-CZA2DXCV.js.map +0 -1
  452. package/dist/cli-bundle/chunks/chunk-D35WYXWC.js.map +0 -1
  453. package/dist/cli-bundle/chunks/chunk-DJAGYYCQ.js.map +0 -1
  454. package/dist/cli-bundle/chunks/chunk-EEECAV5M.js.map +0 -7
  455. package/dist/cli-bundle/chunks/chunk-H3YKUVDR.js.map +0 -1
  456. package/dist/cli-bundle/chunks/chunk-IDUTGRDM.js.map +0 -1
  457. package/dist/cli-bundle/chunks/chunk-IGBBTPM5.js.map +0 -1
  458. package/dist/cli-bundle/chunks/chunk-JBW2S2C6.js.map +0 -7
  459. package/dist/cli-bundle/chunks/chunk-JPWUZOMR.js.map +0 -1
  460. package/dist/cli-bundle/chunks/chunk-KAE727L2.js.map +0 -7
  461. package/dist/cli-bundle/chunks/chunk-MI3346YW.js.map +0 -1
  462. package/dist/cli-bundle/chunks/chunk-MQOSMBWV.js.map +0 -7
  463. package/dist/cli-bundle/chunks/chunk-MRXAHR4B.js.map +0 -1
  464. package/dist/cli-bundle/chunks/chunk-N2TEEOXJ.js.map +0 -7
  465. package/dist/cli-bundle/chunks/chunk-ODEIDKGW.js.map +0 -1
  466. package/dist/cli-bundle/chunks/chunk-P24ZU5QV.js.map +0 -7
  467. package/dist/cli-bundle/chunks/chunk-Q3K5XPAQ.js.map +0 -7
  468. package/dist/cli-bundle/chunks/chunk-QFG4MB7P.js.map +0 -1
  469. package/dist/cli-bundle/chunks/chunk-RLLOZAM2.js.map +0 -7
  470. package/dist/cli-bundle/chunks/chunk-RWAIRGBC.js.map +0 -7
  471. package/dist/cli-bundle/chunks/chunk-SBW7EQC4.js.map +0 -1
  472. package/dist/cli-bundle/chunks/chunk-SVAWG7EE.js.map +0 -1
  473. package/dist/cli-bundle/chunks/chunk-UE7LK3RE.js.map +0 -1
  474. package/dist/cli-bundle/chunks/chunk-VA3H7VVC.js.map +0 -1
  475. package/dist/cli-bundle/chunks/chunk-WCBB6VI3.js.map +0 -7
  476. package/dist/cli-bundle/chunks/chunk-Y2VSGFT4.js.map +0 -1
  477. package/dist/cli-bundle/chunks/chunk-YG56M3NE.js.map +0 -1
  478. package/dist/cli-bundle/chunks/chunk-ZF52NVRT.js.map +0 -7
  479. package/dist/cli-bundle/chunks/chunk-ZUCBPXNA.js.map +0 -7
  480. package/dist/cli-bundle/chunks/close-ZZCDDWJT.js +0 -12
  481. package/dist/cli-bundle/chunks/close-many-QCZHFCON.js +0 -23
  482. package/dist/cli-bundle/chunks/comments-FMQNYPSZ.js +0 -13
  483. package/dist/cli-bundle/chunks/copy-GI3RCVZP.js +0 -9
  484. package/dist/cli-bundle/chunks/create-LXMLYJNM.js +0 -29
  485. package/dist/cli-bundle/chunks/delete-5DFAXJNI.js +0 -10
  486. package/dist/cli-bundle/chunks/docs-KCWPLQOV.js +0 -14
  487. package/dist/cli-bundle/chunks/focus-3EJVFI3D.js +0 -10
  488. package/dist/cli-bundle/chunks/history-compact-JHYVDYLW.js +0 -16
  489. package/dist/cli-bundle/chunks/history-repair-REMI7DDI.js +0 -16
  490. package/dist/cli-bundle/chunks/learnings-O6V5WDCV.js +0 -13
  491. package/dist/cli-bundle/chunks/notes-ZSZREWZA.js +0 -13
  492. package/dist/cli-bundle/chunks/plan-EZW2YDDY.js +0 -26
  493. package/dist/cli-bundle/chunks/register-mutation-BLEWM5I6.js.map +0 -7
  494. package/dist/cli-bundle/chunks/register-mutation-OTYHR7J6.js.map +0 -1
  495. package/dist/cli-bundle/chunks/register-operations-AMCUFYEW.js.map +0 -1
  496. package/dist/cli-bundle/chunks/register-operations-MRLHOZYR.js.map +0 -7
  497. package/dist/cli-bundle/chunks/restore-A55MLFAI.js +0 -14
  498. package/dist/cli-bundle/chunks/update-5DTSCWVF.js +0 -23
  499. package/dist/cli-bundle/chunks/update-many-6T4ZLZS7.js +0 -34
  500. package/dist/cli-bundle/chunks/update-many-MYRK6VBJ.js +0 -38
  501. /package/dist/cli-bundle/chunks/{append-MBXHNWSX.js.map → append-E6V54WOQ.js.map} +0 -0
  502. /package/dist/cli-bundle/chunks/{append-XUYF7NON.js.map → append-NNJ3EFIT.js.map} +0 -0
  503. /package/dist/cli-bundle/chunks/{chunk-YGEA4CLH.js.map → chunk-3MCTMJXI.js.map} +0 -0
  504. /package/dist/cli-bundle/chunks/{chunk-N7FCFJ76.js.map → chunk-3P7UJQOX.js.map} +0 -0
  505. /package/dist/cli-bundle/chunks/{chunk-7B7IHMLH.js.map → chunk-3VY6MIEO.js.map} +0 -0
  506. /package/dist/cli-bundle/chunks/{chunk-5S6IZXK7.js.map → chunk-4U4Z6AHI.js.map} +0 -0
  507. /package/dist/cli-bundle/chunks/{chunk-UOIFZ66L.js.map → chunk-4XGJLADW.js.map} +0 -0
  508. /package/dist/cli-bundle/chunks/{chunk-SUNZKVAH.js.map → chunk-5IZJWSDB.js.map} +0 -0
  509. /package/dist/cli-bundle/chunks/{chunk-QQ77W23U.js.map → chunk-5NTE36LD.js.map} +0 -0
  510. /package/dist/cli-bundle/chunks/{chunk-KGPLSHJD.js.map → chunk-6C2ZZX5Z.js.map} +0 -0
  511. /package/dist/cli-bundle/chunks/{chunk-Q5NHJ6RO.js.map → chunk-6JUTHVQS.js.map} +0 -0
  512. /package/dist/cli-bundle/chunks/{chunk-NTS2RKHN.js.map → chunk-6VIJ7UA5.js.map} +0 -0
  513. /package/dist/cli-bundle/chunks/{chunk-XVB6BATY.js.map → chunk-72LQ4TKV.js.map} +0 -0
  514. /package/dist/cli-bundle/chunks/{chunk-KZ5AC6B5.js.map → chunk-7WCE6Y64.js.map} +0 -0
  515. /package/dist/cli-bundle/chunks/{chunk-VQOG2ETB.js.map → chunk-AF2CCM5U.js.map} +0 -0
  516. /package/dist/cli-bundle/chunks/{chunk-EAV3P54W.js.map → chunk-DAQ45GCS.js.map} +0 -0
  517. /package/dist/cli-bundle/chunks/{chunk-RX53WHFI.js.map → chunk-EJDGV4GR.js.map} +0 -0
  518. /package/dist/cli-bundle/chunks/{chunk-IXG5CMBR.js.map → chunk-FDHPAVVB.js.map} +0 -0
  519. /package/dist/cli-bundle/chunks/{chunk-V4QHAMI5.js.map → chunk-GROYI4RB.js.map} +0 -0
  520. /package/dist/cli-bundle/chunks/{chunk-77XFQRTD.js.map → chunk-GSJSM5BJ.js.map} +0 -0
  521. /package/dist/cli-bundle/chunks/{chunk-QYGK2XQ3.js.map → chunk-GTLCVJOE.js.map} +0 -0
  522. /package/dist/cli-bundle/chunks/{chunk-VSQE43NO.js.map → chunk-GV2262OF.js.map} +0 -0
  523. /package/dist/cli-bundle/chunks/{chunk-STBCBDKF.js.map → chunk-HCEBZNC3.js.map} +0 -0
  524. /package/dist/cli-bundle/chunks/{chunk-U6RYD446.js.map → chunk-HRW7GF6T.js.map} +0 -0
  525. /package/dist/cli-bundle/chunks/{chunk-XDWXPG2E.js.map → chunk-IAQE32BI.js.map} +0 -0
  526. /package/dist/cli-bundle/chunks/{chunk-66SRNEBK.js.map → chunk-IJNK6WW2.js.map} +0 -0
  527. /package/dist/cli-bundle/chunks/{chunk-AGEBQRBG.js.map → chunk-JAPE62Y5.js.map} +0 -0
  528. /package/dist/cli-bundle/chunks/{chunk-UWAQI3B7.js.map → chunk-JGUKMMRS.js.map} +0 -0
  529. /package/dist/cli-bundle/chunks/{chunk-UU6EP25G.js.map → chunk-JH2ZSLO3.js.map} +0 -0
  530. /package/dist/cli-bundle/chunks/{chunk-GRDK25BN.js.map → chunk-JHJSFOAM.js.map} +0 -0
  531. /package/dist/cli-bundle/chunks/{chunk-FQO5THHM.js.map → chunk-JM6YAXTR.js.map} +0 -0
  532. /package/dist/cli-bundle/chunks/{chunk-E7KBMWEF.js.map → chunk-JSLT7WVE.js.map} +0 -0
  533. /package/dist/cli-bundle/chunks/{chunk-FIUTBFC6.js.map → chunk-K4CI6Y45.js.map} +0 -0
  534. /package/dist/cli-bundle/chunks/{chunk-IEMXESIS.js.map → chunk-KSPWRNVP.js.map} +0 -0
  535. /package/dist/cli-bundle/chunks/{chunk-BFJP4VYC.js.map → chunk-L7BH7IWU.js.map} +0 -0
  536. /package/dist/cli-bundle/chunks/{chunk-2UCG5H6B.js.map → chunk-LPEYZRUR.js.map} +0 -0
  537. /package/dist/cli-bundle/chunks/{chunk-IR3GOO6E.js.map → chunk-NHT3F4WZ.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{chunk-6BNV3G6C.js.map → chunk-NLR32VFS.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{chunk-EI3UIMZM.js.map → chunk-OWXOPDHD.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{chunk-AQUNTB7G.js.map → chunk-PEQGTJ5Q.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{chunk-T6MOTLOJ.js.map → chunk-QJKL5PHS.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{chunk-XKVHL3MB.js.map → chunk-QWRVBJ4D.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{chunk-VFA5EIEN.js.map → chunk-R7QV7ICM.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{chunk-K2L6FZBX.js.map → chunk-RJO3YAFM.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{chunk-SGJB6PXA.js.map → chunk-SF3DT5HJ.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{chunk-UNNCT5QY.js.map → chunk-SZVB53Y3.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{chunk-GFZB5CLP.js.map → chunk-T6PPNM7V.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{chunk-W6IEJXNC.js.map → chunk-TVYYO5A7.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{chunk-DOASIOQR.js.map → chunk-UQLXSG72.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{chunk-7CHWLT2J.js.map → chunk-UVN66B3M.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{chunk-Q6JPYR7I.js.map → chunk-UX6SSO2I.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{chunk-OK7VSX3N.js.map → chunk-UZLJOEAC.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{chunk-4PSJVGRE.js.map → chunk-VDO2JMD4.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{chunk-IRJ6F23W.js.map → chunk-VQIHNHMJ.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{chunk-LT5UWU7H.js.map → chunk-ZOJ3LR7O.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{chunk-3HSRP6T2.js.map → chunk-ZOY5K4D3.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{chunk-XXWDEQ6O.js.map → chunk-ZV2NTVMJ.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{chunk-UW6HCMP2.js.map → chunk-ZYPFOO3L.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{close-ZZCDDWJT.js.map → close-O5QVZ6ET.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{close-7NWA3GLA.js.map → close-QEMOYZN3.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{close-many-QCZHFCON.js.map → close-many-SDA426VT.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{close-many-YALQ7AXS.js.map → close-many-UTZANOCQ.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{comments-SQIQ5WYR.js.map → comments-LZN6FXXC.js.map} +0 -0
  564. /package/dist/cli-bundle/chunks/{comments-FMQNYPSZ.js.map → comments-VBQ345ND.js.map} +0 -0
  565. /package/dist/cli-bundle/chunks/{copy-YDAMENCP.js.map → copy-DKTSSCK7.js.map} +0 -0
  566. /package/dist/cli-bundle/chunks/{copy-GI3RCVZP.js.map → copy-M7DDI6LS.js.map} +0 -0
  567. /package/dist/cli-bundle/chunks/{create-JSL6CXU3.js.map → create-GG4RBCGC.js.map} +0 -0
  568. /package/dist/cli-bundle/chunks/{create-LXMLYJNM.js.map → create-JBC5KUW6.js.map} +0 -0
  569. /package/dist/cli-bundle/chunks/{delete-IGVOZEU2.js.map → delete-LCS3VPDH.js.map} +0 -0
  570. /package/dist/cli-bundle/chunks/{delete-5DFAXJNI.js.map → delete-MD7YXQLH.js.map} +0 -0
  571. /package/dist/cli-bundle/chunks/{deps-BQAXUQAK.js.map → deps-DELOO4TL.js.map} +0 -0
  572. /package/dist/cli-bundle/chunks/{deps-CBPPSS6J.js.map → deps-FI4O6NQS.js.map} +0 -0
  573. /package/dist/cli-bundle/chunks/{docs-KCWPLQOV.js.map → docs-2UYBP5D6.js.map} +0 -0
  574. /package/dist/cli-bundle/chunks/{docs-NS2AZWCN.js.map → docs-6Z2MP526.js.map} +0 -0
  575. /package/dist/cli-bundle/chunks/{files-XUUBQ76I.js.map → files-HEUGSJZL.js.map} +0 -0
  576. /package/dist/cli-bundle/chunks/{files-PVWEPT5J.js.map → files-HKEAN5MA.js.map} +0 -0
  577. /package/dist/cli-bundle/chunks/{focus-DHBHKK3E.js.map → focus-7SOUT5PZ.js.map} +0 -0
  578. /package/dist/cli-bundle/chunks/{focus-3EJVFI3D.js.map → focus-DRQ6FQH6.js.map} +0 -0
  579. /package/dist/cli-bundle/chunks/{history-compact-JHYVDYLW.js.map → history-compact-65YVN5DB.js.map} +0 -0
  580. /package/dist/cli-bundle/chunks/{history-compact-3TNPYVFG.js.map → history-compact-7NDVP3PT.js.map} +0 -0
  581. /package/dist/cli-bundle/chunks/{history-redact-KKFDICCF.js.map → history-redact-7YBL4XSG.js.map} +0 -0
  582. /package/dist/cli-bundle/chunks/{history-redact-ELRL73XN.js.map → history-redact-IZGNJBU4.js.map} +0 -0
  583. /package/dist/cli-bundle/chunks/{history-repair-J7WKZFAG.js.map → history-repair-7M4PYQUH.js.map} +0 -0
  584. /package/dist/cli-bundle/chunks/{history-repair-REMI7DDI.js.map → history-repair-GNGETJLI.js.map} +0 -0
  585. /package/dist/cli-bundle/chunks/{learnings-O6V5WDCV.js.map → learnings-3YXDRWFT.js.map} +0 -0
  586. /package/dist/cli-bundle/chunks/{learnings-X4D6JCCG.js.map → learnings-ALC6IMNL.js.map} +0 -0
  587. /package/dist/cli-bundle/chunks/{notes-ZSZREWZA.js.map → notes-7JMLQ447.js.map} +0 -0
  588. /package/dist/cli-bundle/chunks/{notes-UQC6VS6N.js.map → notes-JFCLTC5C.js.map} +0 -0
  589. /package/dist/cli-bundle/chunks/{plan-EZW2YDDY.js.map → plan-KOIPWVOZ.js.map} +0 -0
  590. /package/dist/cli-bundle/chunks/{plan-5GKRBJJO.js.map → plan-T3XB3WTK.js.map} +0 -0
  591. /package/dist/cli-bundle/chunks/{profile-5PQAPCLF.js.map → profile-OILJHKUW.js.map} +0 -0
  592. /package/dist/cli-bundle/chunks/{profile-CW4BD3FO.js.map → profile-RJXA7PGS.js.map} +0 -0
  593. /package/dist/cli-bundle/chunks/{restore-A55MLFAI.js.map → restore-L6IAGOD7.js.map} +0 -0
  594. /package/dist/cli-bundle/chunks/{restore-HEQAG6EK.js.map → restore-ZH65GZFB.js.map} +0 -0
  595. /package/dist/cli-bundle/chunks/{schema-Q5DAWJ2S.js.map → schema-4ERWM5QJ.js.map} +0 -0
  596. /package/dist/cli-bundle/chunks/{schema-MAXAIHEC.js.map → schema-55DL3Q52.js.map} +0 -0
  597. /package/dist/cli-bundle/chunks/{update-DWFXXJKP.js.map → update-FW6FKDOP.js.map} +0 -0
  598. /package/dist/cli-bundle/chunks/{update-5DTSCWVF.js.map → update-TJHSPRPT.js.map} +0 -0
  599. /package/dist/cli-bundle/chunks/{update-many-6T4ZLZS7.js.map → update-many-NNALYQCN.js.map} +0 -0
  600. /package/dist/cli-bundle/chunks/{update-many-MYRK6VBJ.js.map → update-many-PWXX5WHO.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ca54ddb8-df6d-5185-a6d3-6788e0fd8628")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f7652cf1-aaa9-5fe4-97b5-23dcce2a9d9f")}catch(e){}}();
3
3
  import {
4
4
  COMMON_UNSET_FIELD_DEFINITIONS_AFTER_AUTHOR,
5
5
  COMMON_UNSET_FIELD_DEFINITIONS_AFTER_CLOSE_REASON_BEFORE_AUTHOR,
@@ -27,22 +27,23 @@ import {
27
27
  requireStringOption,
28
28
  resolvePriority,
29
29
  resolveRuntimeUnsetFieldDefinition
30
- } from "./chunk-BDC4TW4B.js";
30
+ } from "./chunk-OV7MSW3I.js";
31
31
  import {
32
32
  assertParentReferenceIsNotSelf,
33
33
  normalizeParentReferenceValue,
34
34
  validateMissingParentReference,
35
35
  validateSprintOrReleaseValue
36
- } from "./chunk-AQUNTB7G.js";
36
+ } from "./chunk-PEQGTJ5Q.js";
37
37
  import {
38
38
  describeAllowedTransitions,
39
39
  evaluateTransition,
40
40
  resolveTypeWorkflows
41
- } from "./chunk-IDUTGRDM.js";
41
+ } from "./chunk-URXVHN3L.js";
42
42
  import {
43
43
  buildInvalidTypeError
44
- } from "./chunk-IGBBTPM5.js";
44
+ } from "./chunk-TOBGV45Y.js";
45
45
  import {
46
+ applyAcceptanceCriteriaMutations,
46
47
  applyTagRemovals,
47
48
  assertNoUnknownCsvKeys,
48
49
  createStdinTokenResolver,
@@ -51,11 +52,12 @@ import {
51
52
  parseCsvKv,
52
53
  parseOptionalNonNegativeInteger,
53
54
  parseOptionalNumber,
54
- parseTags
55
- } from "./chunk-SVAWG7EE.js";
55
+ parseTags,
56
+ splitAcceptanceCriteria
57
+ } from "./chunk-J4FBIFU6.js";
56
58
  import {
57
59
  runClose
58
- } from "./chunk-EI3UIMZM.js";
60
+ } from "./chunk-OWXOPDHD.js";
59
61
  import {
60
62
  buildItemNotFoundError,
61
63
  collectRuntimeUpdateFieldValues,
@@ -70,7 +72,7 @@ import {
70
72
  resolveIsoOrRelative,
71
73
  stableValueEquals,
72
74
  toItemRecord
73
- } from "./chunk-QFG4MB7P.js";
75
+ } from "./chunk-POG76WWZ.js";
74
76
  import {
75
77
  COMMON_MUTATION_COMMAND_OPTION_KEYS,
76
78
  DEPENDENCY_KIND_VALUES,
@@ -94,7 +96,7 @@ import {
94
96
  resolveTypeDefinition,
95
97
  resolveTypeName,
96
98
  validateTypeOptions
97
- } from "./chunk-D35WYXWC.js";
99
+ } from "./chunk-HYW67VJ5.js";
98
100
 
99
101
  // dist/cli/commands/update.js
100
102
  var UPDATE_UNSET_FIELD_DEFINITIONS = [
@@ -255,6 +257,8 @@ function enforceOwnershipBypassScope(id, options, clearItemMetadataKeys) {
255
257
  pushIf(options.deadline !== void 0, "--deadline", disallowedFlags2);
256
258
  pushIf(options.estimatedMinutes !== void 0, "--estimate", disallowedFlags2);
257
259
  pushIf(options.acceptanceCriteria !== void 0, "--acceptance-criteria", disallowedFlags2);
260
+ pushIf(Array.isArray(options.addAc) && options.addAc.length > 0, "--add-ac", disallowedFlags2);
261
+ pushIf(Array.isArray(options.removeAc) && options.removeAc.length > 0, "--remove-ac", disallowedFlags2);
258
262
  pushIf(options.definitionOfReady !== void 0, "--definition-of-ready", disallowedFlags2);
259
263
  pushIf(options.order !== void 0 || options.rank !== void 0, "--order/--rank", disallowedFlags2);
260
264
  pushIf(options.goal !== void 0, "--goal", disallowedFlags2);
@@ -612,7 +616,7 @@ function collectProvidedUpdatePolicyOptions(options, runtimeFieldRegistry, exten
612
616
  mark("tags", options.tags !== void 0 || Array.isArray(options.addTags) && options.addTags.length > 0 || Array.isArray(options.removeTags) && options.removeTags.length > 0);
613
617
  mark("deadline", options.deadline !== void 0);
614
618
  mark("estimatedMinutes", options.estimatedMinutes !== void 0);
615
- mark("acceptanceCriteria", options.acceptanceCriteria !== void 0);
619
+ mark("acceptanceCriteria", options.acceptanceCriteria !== void 0 || Array.isArray(options.addAc) && options.addAc.length > 0 || Array.isArray(options.removeAc) && options.removeAc.length > 0);
616
620
  mark("definitionOfReady", options.definitionOfReady !== void 0);
617
621
  mark("order", options.order !== void 0 || options.rank !== void 0);
618
622
  mark("goal", options.goal !== void 0);
@@ -956,6 +960,14 @@ function rejectUnsetScalarConflicts(options, unsetTargets) {
956
960
  const unsetField = UPDATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey) ?? optionKey;
957
961
  throw new PmCliError(`Cannot combine --unset ${unsetField} with ${commandOptionFlagLabel("update", optionKey)}`, EXIT_CODE.USAGE);
958
962
  }
963
+ if (unsetTargets.metadataKeys.has("acceptance_criteria")) {
964
+ if (Array.isArray(options.addAc) && options.addAc.length > 0) {
965
+ throw new PmCliError("Cannot combine --unset acceptance-criteria with --add-ac", EXIT_CODE.USAGE);
966
+ }
967
+ if (Array.isArray(options.removeAc) && options.removeAc.length > 0) {
968
+ throw new PmCliError("Cannot combine --unset acceptance-criteria with --remove-ac", EXIT_CODE.USAGE);
969
+ }
970
+ }
959
971
  if (!unsetTargets.metadataKeys.has("tags")) {
960
972
  return;
961
973
  }
@@ -987,6 +999,8 @@ function buildUpdateFieldFlags(options, runtimeFieldUpdates) {
987
999
  flags.tags = options.tags !== void 0;
988
1000
  flags.addTags = Array.isArray(options.addTags) && options.addTags.length > 0;
989
1001
  flags.removeTags = Array.isArray(options.removeTags) && options.removeTags.length > 0;
1002
+ flags.addAc = Array.isArray(options.addAc) && options.addAc.length > 0;
1003
+ flags.removeAc = Array.isArray(options.removeAc) && options.removeAc.length > 0;
990
1004
  flags.order = options.order !== void 0;
991
1005
  flags.rank = options.rank !== void 0;
992
1006
  flags.replaceDeps = options.replaceDeps === true;
@@ -1324,6 +1338,28 @@ function applyTagsAndPlanningMutations(document, context, scalarMutationContext)
1324
1338
  applyUpdateScalarMutations(UPDATE_POST_TAG_SCALAR_MUTATIONS, context.options, scalarMutationContext);
1325
1339
  applyOrderMutation(document, context, scalarMutationContext.changedFields);
1326
1340
  }
1341
+ function applyAcceptanceCriteriaAdditiveMutation(document, context, scalarMutationContext, warnings) {
1342
+ const addValues = context.options.addAc;
1343
+ const removeValues = context.options.removeAc;
1344
+ if (!(Array.isArray(addValues) && addValues.length > 0) && !(Array.isArray(removeValues) && removeValues.length > 0)) {
1345
+ return;
1346
+ }
1347
+ const mutation = applyAcceptanceCriteriaMutations(splitAcceptanceCriteria(document.metadata.acceptance_criteria), addValues, removeValues);
1348
+ for (const unmatched of mutation.unmatchedRemovals) {
1349
+ warnings.push(`remove_ac_unmatched:${unmatched}`);
1350
+ }
1351
+ const nextValue = mutation.criteria.join("; ");
1352
+ if (document.metadata.acceptance_criteria === nextValue) {
1353
+ return;
1354
+ }
1355
+ if (nextValue === "" && document.metadata.acceptance_criteria === void 0) {
1356
+ return;
1357
+ }
1358
+ document.metadata.acceptance_criteria = nextValue;
1359
+ if (!scalarMutationContext.changedFields.includes("acceptance_criteria")) {
1360
+ scalarMutationContext.changedFields.push("acceptance_criteria");
1361
+ }
1362
+ }
1327
1363
  function applyOrderMutation(document, context, changedFields) {
1328
1364
  const orderRaw = context.options.order ?? context.options.rank;
1329
1365
  if (orderRaw === void 0 && !context.clearItemMetadataKeys.has("order")) {
@@ -1480,6 +1516,7 @@ function mutateUpdateDocument(document, context) {
1480
1516
  applyLogCollectionMutations(document, context, changedFields);
1481
1517
  applyEvidenceCollectionMutations(document, context, changedFields);
1482
1518
  applyTagsAndPlanningMutations(document, context, scalarMutationContext);
1519
+ applyAcceptanceCriteriaAdditiveMutation(document, context, scalarMutationContext, warnings);
1483
1520
  applyOwnershipAndIssueMutations(document, context, scalarMutationContext, warnings);
1484
1521
  if (normalizeStatusInput(document.metadata.status, context.statusRegistry) === context.statusRegistry.canceled_status && document.metadata.assignee !== void 0) {
1485
1522
  delete document.metadata.assignee;
@@ -1661,6 +1698,6 @@ export {
1661
1698
  runUpdate,
1662
1699
  _testOnlyUpdateCommand
1663
1700
  };
1664
- //# sourceMappingURL=chunk-MRXAHR4B.js.map
1701
+ //# sourceMappingURL=chunk-RZJLNXFG.js.map
1665
1702
 
1666
- //# debugId=ca54ddb8-df6d-5185-a6d3-6788e0fd8628
1703
+ //# debugId=f7652cf1-aaa9-5fe4-97b5-23dcce2a9d9f
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../cli/commands/update.ts"],"sourcesContent":["/**\n * @module cli/commands/update\n *\n * Implements the pm update command surface and its agent-facing runtime behavior.\n */\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport {\n COMMON_MUTATION_COMMAND_OPTION_KEYS,\n canonicalizeCommandOptionKey,\n commandOptionFlagLabel,\n resolveItemTypeRegistry,\n resolveCommandOptionPolicyState,\n resolveTypeDefinition,\n resolveTypeName,\n validateTypeOptions,\n} from \"../../core/item/type-registry.js\";\nimport { normalizeItemId } from \"../../core/item/id.js\";\nimport { toItemRecord } from \"../../core/item/item-record.js\";\nimport { buildInvalidTypeError } from \"../../core/schema/item-types-file.js\";\nimport {\n assertParentReferenceIsNotSelf,\n normalizeParentReferenceValue,\n validateMissingParentReference,\n} from \"../../core/item/parent-reference-policy.js\";\nimport { validateSprintOrReleaseValue } from \"../../core/item/sprint-release-format.js\";\nimport {\n applyAcceptanceCriteriaMutations,\n applyTagRemovals,\n assertNoUnknownCsvKeys,\n createStdinTokenResolver,\n looksLikeGenericKeyValueEntry,\n mergeAdditiveTags,\n parseCsvKv,\n parseOptionalNonNegativeInteger,\n parseOptionalNumber,\n parseTags,\n splitAcceptanceCriteria,\n} from \"../../core/item/parse.js\";\nimport { resolvePriority } from \"../../core/item/priority.js\";\nimport { normalizeStatusInput } from \"../../core/item/status.js\";\nimport { collectRuntimeUpdateFieldValues } from \"../../core/schema/runtime-field-values.js\";\nimport {\n resolveItemTypesFilePath,\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeFieldRegistry,\n type RuntimeStatusRegistry,\n} from \"../../core/schema/runtime-schema.js\";\nimport {\n describeAllowedTransitions,\n evaluateTransition,\n resolveTypeWorkflows,\n type NormalizedTypeWorkflow,\n} from \"../../core/schema/type-workflows.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { stableValueEquals } from \"../../core/shared/serialization.js\";\nimport { resolveIsoOrRelative } from \"../../core/shared/time.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport {\n collectRegisteredItemFieldNames,\n applyRegisteredItemFieldDefaultsAndValidation,\n parseRegisteredItemFieldAssignments,\n} from \"../../core/extensions/item-fields.js\";\nimport {\n buildItemNotFoundError,\n listAllItemMetadataLight,\n locateItem,\n mutateItem,\n readLocatedItem,\n} from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport { runClose } from \"./close.js\";\nimport {\n normalizeRiskInput,\n normalizeSeverityInput,\n parseConfidenceInput,\n parseRegressionInput,\n} from \"./metadata-normalizers.js\";\nimport {\n applyLegacyNoneCollectionNormalizers,\n createLegacyNoneCollectionNormalizers,\n assertNoLegacyNoneToken,\n assertNoLegacyNoneTokens,\n isLegacyNoneToken,\n} from \"./legacy-none-tokens.js\";\nimport { ensureEnumValue as ensureEnum } from \"./recurrence-parsers.js\";\nimport {\n parseEventEntries,\n parseReminderEntries,\n parseTypeOptionEntries,\n} from \"./repeatable-metadata-parsers.js\";\nimport { assertValidBareDependencyFlagValue } from \"../../sdk/dependency-flag-validation.js\";\nimport { collectNewOrderingCycleWarnings } from \"../../sdk/graph/mutation-advisory.js\";\nimport type {\n Comment,\n Dependency,\n GovernanceWorkflowEnforcement,\n ItemFormat,\n ItemDocument,\n ItemMetadata,\n ItemStatus,\n LinkedDoc,\n LinkedFile,\n LinkedTest,\n LogNote,\n} from \"../../types/index.js\";\nimport {\n DEPENDENCY_KIND_VALUES,\n ISSUE_SEVERITY_VALUES,\n RISK_VALUES,\n} from \"../../types/index.js\";\nimport {\n parseDocs,\n parseFiles,\n parseLogSeed,\n parseTests,\n requireStringOption,\n} from \"./create.js\";\nimport {\n COMMON_UNSET_FIELD_DEFINITIONS_AFTER_CLOSE_REASON_BEFORE_AUTHOR,\n COMMON_UNSET_FIELD_DEFINITIONS_AFTER_AUTHOR,\n COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_CLOSE_REASON,\n parseCommandUnsetTargets,\n resolveRuntimeUnsetFieldDefinition,\n type CommandUnsetFieldDefinition,\n} from \"./shared-unset-fields.js\";\nimport type {\n MutationMetadataCommandOptions,\n SharedLinkedResourceClearOptions,\n SharedLinkedResourceOptions,\n} from \"./mutation-command-options.js\";\n\n/** Documents the update command options payload exchanged by command, SDK, and package integrations. */\nexport interface UpdateCommandOptions\n extends\n MutationMetadataCommandOptions,\n SharedLinkedResourceOptions,\n SharedLinkedResourceClearOptions {\n /** Value that configures or reports title for this contract. */\n title?: string;\n /** Value that configures or reports description for this contract. */\n description?: string;\n /** Value that configures or reports body for this contract. */\n body?: string;\n /** Lifecycle state reported for status. */\n status?: string;\n /** Value that configures or reports close reason for this contract. */\n closeReason?: string;\n /** Value that configures or reports priority for this contract. */\n priority?: string | number;\n /** Schema type that determines the shape and validation rules for this value. */\n type?: string;\n /** Value that configures or reports tags for this contract. */\n tags?: string;\n /** Value that configures or reports add tags for this contract. */\n addTags?: string[];\n /** Value that configures or reports remove tags for this contract. */\n removeTags?: string[];\n /** Acceptance criteria appended individually without replacing the existing list. */\n addAc?: string[];\n /** Acceptance criteria removed individually by exact text match. */\n removeAc?: string[];\n /** Value that configures or reports force for this contract. */\n force?: boolean;\n /** Value that configures or reports dep remove for this contract. */\n depRemove?: string[];\n /** Value that configures or reports replace deps for this contract. */\n replaceDeps?: boolean;\n /** Value that configures or reports replace tests for this contract. */\n replaceTests?: boolean;\n /** Value that configures or reports runtime field commands for this contract. */\n runtimeFieldCommands?: Array<\"update\" | \"update_many\">;\n [key: string]: unknown;\n}\n\n/** Documents the update result payload exchanged by command, SDK, and package integrations. */\nexport interface UpdateResult {\n /** Value that configures or reports item for this contract. */\n item: Record<string, unknown>;\n /** Value that configures or reports changed fields for this contract. */\n changed_fields: string[];\n /** Value that configures or reports warnings for this contract. */\n warnings: string[];\n}\n\ninterface UpdateUnsetFieldDefinition {\n optionKey: string;\n metadataKey: string;\n}\n\nconst UPDATE_UNSET_FIELD_DEFINITIONS: readonly CommandUnsetFieldDefinition[] = [\n ...COMMON_UNSET_FIELD_DEFINITIONS_BEFORE_CLOSE_REASON,\n {\n canonical: \"close-reason\",\n aliases: [\"close_reason\", \"close-reason\"],\n optionKey: \"closeReason\",\n metadataKey: \"close_reason\",\n },\n ...COMMON_UNSET_FIELD_DEFINITIONS_AFTER_CLOSE_REASON_BEFORE_AUTHOR,\n ...COMMON_UNSET_FIELD_DEFINITIONS_AFTER_AUTHOR,\n];\n\nconst UPDATE_UNSET_ALIAS_MAP: Map<string, UpdateUnsetFieldDefinition> = (() => {\n const map = new Map<string, UpdateUnsetFieldDefinition>();\n for (const definition of UPDATE_UNSET_FIELD_DEFINITIONS) {\n for (const alias of definition.aliases) {\n map.set(alias, {\n optionKey: definition.optionKey,\n metadataKey: definition.metadataKey,\n });\n }\n }\n return map;\n})();\n\nconst UPDATE_OPTION_KEY_TO_UNSET_CANONICAL = new Map<string, string>(\n UPDATE_UNSET_FIELD_DEFINITIONS.map((definition) => [\n definition.optionKey,\n definition.canonical,\n ]),\n);\n\nconst UPDATE_UNSET_SUPPORTED_CANONICAL_FIELDS =\n UPDATE_UNSET_FIELD_DEFINITIONS.map((definition) => definition.canonical)\n .sort((left, right) => left.localeCompare(right))\n .join(\", \");\n\nconst OWNERSHIP_BYPASS_DISALLOWED_UNSET_ITEM_METADATA_KEYS = new Set<string>([\n \"close_reason\",\n \"assignee\",\n \"parent\",\n \"blocked_by\",\n \"blocked_reason\",\n \"unblock_note\",\n \"dependencies\",\n \"comments\",\n \"notes\",\n \"learnings\",\n \"files\",\n \"tests\",\n \"docs\",\n \"reminders\",\n \"events\",\n]);\n\nfunction toAuthor(\n candidate: string | undefined,\n defaultAuthor: string,\n): string {\n const resolved = candidate ?? process.env.PM_AUTHOR ?? defaultAuthor;\n const trimmed = resolved.trim();\n return trimmed || \"unknown\";\n}\n\nconst UPDATE_LEGACY_NONE_COLLECTION_NORMALIZERS =\n createLegacyNoneCollectionNormalizers<UpdateCommandOptions>({\n depDisableFlagKey: \"replaceDeps\",\n testDisableFlagKey: \"replaceTests\",\n });\n\nfunction normalizeLegacyNoneUpdateOptions(\n options: UpdateCommandOptions,\n): UpdateCommandOptions {\n const normalized: UpdateCommandOptions = {\n ...options,\n unset: options.unset ? [...options.unset] : undefined,\n };\n /* c8 ignore start -- unset dedupe helper branch permutations are covered by legacy option compatibility suites. */\n const appendUnsetTarget = (value: string): void => {\n const current = normalized.unset ? [...normalized.unset] : [];\n if (!current.includes(value)) {\n current.push(value);\n }\n normalized.unset = current;\n };\n /* c8 ignore stop */\n\n const scalarOptionKeys = new Set<string>([\n ...UPDATE_OPTION_KEY_TO_UNSET_CANONICAL.keys(),\n \"rank\",\n ]);\n for (const optionKey of scalarOptionKeys) {\n const candidate = normalized[optionKey];\n if (typeof candidate !== \"string\" || !isLegacyNoneToken(candidate)) {\n continue;\n }\n /* c8 ignore start -- rank alias canonicalization is exercised in legacy-option compatibility tests. */\n const canonicalUnset =\n optionKey === \"rank\"\n ? \"order\"\n : (UPDATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey) ?? optionKey);\n appendUnsetTarget(canonicalUnset);\n normalized[optionKey] = undefined;\n /* c8 ignore stop */\n }\n\n return applyLegacyNoneCollectionNormalizers(\n normalized,\n UPDATE_LEGACY_NONE_COLLECTION_NORMALIZERS,\n );\n}\n\nfunction parseUpdateUnsetTargets(\n raw: string[] | undefined,\n runtimeFieldRegistry?: RuntimeFieldRegistry,\n extensionFieldNames: readonly string[] = [],\n): { metadataKeys: Set<string>; optionKeys: Set<string> } {\n return parseCommandUnsetTargets({\n raw,\n supportedFields: UPDATE_UNSET_SUPPORTED_CANONICAL_FIELDS,\n resolveDefinition: (trimmed) => {\n const extensionFieldName = extensionFieldNames.find((fieldName) => {\n const normalizedFieldName = fieldName.toLowerCase();\n return (\n normalizedFieldName === trimmed ||\n normalizedFieldName.replaceAll(\"_\", \"-\") === trimmed ||\n normalizedFieldName.replaceAll(\"-\", \"_\") === trimmed\n );\n });\n const definition =\n UPDATE_UNSET_ALIAS_MAP.get(trimmed) ??\n resolveRuntimeUnsetFieldDefinition(\n trimmed,\n \"update\",\n runtimeFieldRegistry,\n ) ??\n (extensionFieldName\n ? { optionKey: \"field\", metadataKey: extensionFieldName }\n : undefined);\n return definition;\n },\n });\n}\n\n// Restricted append-style flags have dedicated commands with their own\n// ownership semantics; map each one to its exact replacement invocation so\n// scope errors tell the agent how to retry instead of dead-ending. The\n// evidence append flags are allowed by the metadata ownership bypass, but still used by\n// narrower scopes such as the dependency ownership bypass.\nconst OWNERSHIP_BYPASS_RESTRICTED_FLAG_REPLACEMENTS: ReadonlyMap<\n string,\n (id: string) => string\n> = new Map([\n [\n \"--comment\",\n (id: string) => `pm comments ${id} --add \"<text>\" --force`,\n ],\n [\n \"--file\",\n (id: string) =>\n `pm files ${id} --add \"path=<path>,scope=<scope>,note=<note>\" --force`,\n ],\n [\n \"--doc\",\n (id: string) =>\n `pm docs ${id} --add \"path=<path>,scope=<scope>,note=<note>\" --force`,\n ],\n]);\n\nfunction buildOwnershipBypassRestrictedOptionsError(params: {\n id: string;\n code: string;\n message: string;\n required: string;\n why: string;\n disallowedFlags: string[];\n}): PmCliError {\n // Only surface replacement commands for restricted flags the caller actually\n // passed, so the guidance is an exact retry path.\n const replacementCommands = params.disallowedFlags.flatMap((flag) => {\n const replacement = OWNERSHIP_BYPASS_RESTRICTED_FLAG_REPLACEMENTS.get(flag);\n return replacement ? [replacement(params.id)] : [];\n });\n const replacementSteps = params.disallowedFlags.flatMap((flag) => {\n const replacement = OWNERSHIP_BYPASS_RESTRICTED_FLAG_REPLACEMENTS.get(flag);\n return replacement\n ? [`Replace ${flag} with: ${replacement(params.id)}`]\n : [];\n });\n return new PmCliError(params.message, EXIT_CODE.USAGE, {\n code: params.code,\n required: params.required,\n why: params.why,\n ...(replacementCommands.length > 0\n ? { examples: replacementCommands }\n : {}),\n nextSteps: [\n `Re-run without: ${params.disallowedFlags.join(\", \")}`,\n ...replacementSteps,\n ],\n });\n}\n\nfunction enforceOwnershipBypassScope(\n id: string,\n options: UpdateCommandOptions,\n clearItemMetadataKeys: Set<string>,\n): void {\n const ownershipMetadataBypass = options.ownershipMetadataBypass === true;\n const ownershipDependencyBypass = options.ownershipDependencyBypass === true;\n if (!ownershipMetadataBypass && !ownershipDependencyBypass) {\n return;\n }\n if (ownershipMetadataBypass && ownershipDependencyBypass) {\n throw new PmCliError(\n \"Choose only one package-provided ownership bypass mode.\",\n EXIT_CODE.USAGE,\n );\n }\n const pushIf = (condition: boolean, flag: string, list: string[]): void => {\n if (condition) {\n list.push(flag);\n }\n };\n if (ownershipDependencyBypass) {\n const disallowedFlags: string[] = [];\n pushIf(options.title !== undefined, \"--title\", disallowedFlags);\n pushIf(options.description !== undefined, \"--description\", disallowedFlags);\n pushIf(options.body !== undefined, \"--body\", disallowedFlags);\n pushIf(options.status !== undefined, \"--status\", disallowedFlags);\n pushIf(\n options.closeReason !== undefined,\n \"--close-reason\",\n disallowedFlags,\n );\n pushIf(options.priority !== undefined, \"--priority\", disallowedFlags);\n pushIf(options.type !== undefined, \"--type\", disallowedFlags);\n pushIf(options.tags !== undefined, \"--tags\", disallowedFlags);\n pushIf(\n Array.isArray(options.addTags) && options.addTags.length > 0,\n \"--add-tags\",\n disallowedFlags,\n );\n pushIf(\n Array.isArray(options.removeTags) && options.removeTags.length > 0,\n \"--remove-tags\",\n disallowedFlags,\n );\n pushIf(options.deadline !== undefined, \"--deadline\", disallowedFlags);\n pushIf(\n options.estimatedMinutes !== undefined,\n \"--estimate\",\n disallowedFlags,\n );\n pushIf(\n options.acceptanceCriteria !== undefined,\n \"--acceptance-criteria\",\n disallowedFlags,\n );\n pushIf(\n Array.isArray(options.addAc) && options.addAc.length > 0,\n \"--add-ac\",\n disallowedFlags,\n );\n pushIf(\n Array.isArray(options.removeAc) && options.removeAc.length > 0,\n \"--remove-ac\",\n disallowedFlags,\n );\n pushIf(\n options.definitionOfReady !== undefined,\n \"--definition-of-ready\",\n disallowedFlags,\n );\n pushIf(\n options.order !== undefined || options.rank !== undefined,\n \"--order/--rank\",\n disallowedFlags,\n );\n pushIf(options.goal !== undefined, \"--goal\", disallowedFlags);\n pushIf(options.objective !== undefined, \"--objective\", disallowedFlags);\n pushIf(options.value !== undefined, \"--value\", disallowedFlags);\n pushIf(options.impact !== undefined, \"--impact\", disallowedFlags);\n pushIf(options.outcome !== undefined, \"--outcome\", disallowedFlags);\n pushIf(options.whyNow !== undefined, \"--why-now\", disallowedFlags);\n pushIf(options.assignee !== undefined, \"--assignee\", disallowedFlags);\n pushIf(options.parent !== undefined, \"--parent\", disallowedFlags);\n pushIf(options.reviewer !== undefined, \"--reviewer\", disallowedFlags);\n pushIf(options.risk !== undefined, \"--risk\", disallowedFlags);\n pushIf(options.confidence !== undefined, \"--confidence\", disallowedFlags);\n pushIf(options.sprint !== undefined, \"--sprint\", disallowedFlags);\n pushIf(options.release !== undefined, \"--release\", disallowedFlags);\n pushIf(options.blockedBy !== undefined, \"--blocked-by\", disallowedFlags);\n pushIf(\n options.blockedReason !== undefined,\n \"--blocked-reason\",\n disallowedFlags,\n );\n pushIf(\n options.unblockNote !== undefined,\n \"--unblock-note\",\n disallowedFlags,\n );\n pushIf(options.reporter !== undefined, \"--reporter\", disallowedFlags);\n pushIf(options.severity !== undefined, \"--severity\", disallowedFlags);\n pushIf(options.environment !== undefined, \"--environment\", disallowedFlags);\n pushIf(options.reproSteps !== undefined, \"--repro-steps\", disallowedFlags);\n pushIf(options.resolution !== undefined, \"--resolution\", disallowedFlags);\n pushIf(\n options.expectedResult !== undefined,\n \"--expected-result\",\n disallowedFlags,\n );\n pushIf(\n options.actualResult !== undefined,\n \"--actual-result\",\n disallowedFlags,\n );\n pushIf(\n options.affectedVersion !== undefined,\n \"--affected-version\",\n disallowedFlags,\n );\n pushIf(\n options.fixedVersion !== undefined,\n \"--fixed-version\",\n disallowedFlags,\n );\n pushIf(options.component !== undefined, \"--component\", disallowedFlags);\n pushIf(options.regression !== undefined, \"--regression\", disallowedFlags);\n pushIf(\n options.customerImpact !== undefined,\n \"--customer-impact\",\n disallowedFlags,\n );\n pushIf(options.depRemove !== undefined, \"--dep-remove\", disallowedFlags);\n pushIf(options.replaceDeps === true, \"--replace-deps\", disallowedFlags);\n pushIf(options.replaceTests === true, \"--replace-tests\", disallowedFlags);\n pushIf(options.comment !== undefined, \"--comment\", disallowedFlags);\n pushIf(options.note !== undefined, \"--note\", disallowedFlags);\n pushIf(options.learning !== undefined, \"--learning\", disallowedFlags);\n pushIf(options.file !== undefined, \"--file\", disallowedFlags);\n pushIf(options.test !== undefined, \"--test\", disallowedFlags);\n pushIf(options.doc !== undefined, \"--doc\", disallowedFlags);\n pushIf(options.reminder !== undefined, \"--reminder\", disallowedFlags);\n pushIf(options.event !== undefined, \"--event\", disallowedFlags);\n pushIf(options.typeOption !== undefined, \"--type-option\", disallowedFlags);\n pushIf(options.clearDeps === true, \"--clear-deps\", disallowedFlags);\n pushIf(options.clearComments === true, \"--clear-comments\", disallowedFlags);\n pushIf(options.clearNotes === true, \"--clear-notes\", disallowedFlags);\n pushIf(\n options.clearLearnings === true,\n \"--clear-learnings\",\n disallowedFlags,\n );\n pushIf(options.clearFiles === true, \"--clear-files\", disallowedFlags);\n pushIf(options.clearTests === true, \"--clear-tests\", disallowedFlags);\n pushIf(options.clearDocs === true, \"--clear-docs\", disallowedFlags);\n pushIf(\n options.clearReminders === true,\n \"--clear-reminders\",\n disallowedFlags,\n );\n pushIf(options.clearEvents === true, \"--clear-events\", disallowedFlags);\n pushIf(\n options.clearTypeOptions === true,\n \"--clear-type-options\",\n disallowedFlags,\n );\n pushIf(options.force === true, \"--force\", disallowedFlags);\n pushIf(clearItemMetadataKeys.size > 0, \"--unset\", disallowedFlags);\n if (options.dep === undefined || options.dep.length === 0) {\n throw new PmCliError(\n \"The dependency ownership bypass requires at least one --dep value\",\n EXIT_CODE.USAGE,\n );\n }\n if (disallowedFlags.length > 0) {\n throw buildOwnershipBypassRestrictedOptionsError({\n id,\n code: \"ownership_dependency_bypass_restricted_options\",\n message: `The dependency ownership bypass supports append-only dependency additions via --dep. Remove restricted options: ${disallowedFlags.join(\", \")}`,\n required:\n \"Pass only --dep additions (plus --message/--author) with the dependency ownership bypass.\",\n why: \"the dependency ownership bypass is a narrow non-owner override scoped to append-only dependency additions; every other mutation keeps its normal ownership rules.\",\n disallowedFlags,\n });\n }\n return;\n }\n\n const disallowedFlags: string[] = [];\n pushIf(options.status !== undefined, \"--status\", disallowedFlags);\n pushIf(options.closeReason !== undefined, \"--close-reason\", disallowedFlags);\n pushIf(options.assignee !== undefined, \"--assignee\", disallowedFlags);\n pushIf(options.parent !== undefined, \"--parent\", disallowedFlags);\n pushIf(options.blockedBy !== undefined, \"--blocked-by\", disallowedFlags);\n pushIf(\n options.blockedReason !== undefined,\n \"--blocked-reason\",\n disallowedFlags,\n );\n pushIf(options.unblockNote !== undefined, \"--unblock-note\", disallowedFlags);\n pushIf(options.dep !== undefined, \"--dep\", disallowedFlags);\n pushIf(options.depRemove !== undefined, \"--dep-remove\", disallowedFlags);\n pushIf(options.replaceDeps === true, \"--replace-deps\", disallowedFlags);\n pushIf(options.replaceTests === true, \"--replace-tests\", disallowedFlags);\n pushIf(options.note !== undefined, \"--note\", disallowedFlags);\n pushIf(options.learning !== undefined, \"--learning\", disallowedFlags);\n pushIf(options.test !== undefined, \"--test\", disallowedFlags);\n pushIf(options.reminder !== undefined, \"--reminder\", disallowedFlags);\n pushIf(options.event !== undefined, \"--event\", disallowedFlags);\n pushIf(options.clearDeps === true, \"--clear-deps\", disallowedFlags);\n pushIf(options.clearComments === true, \"--clear-comments\", disallowedFlags);\n pushIf(options.clearNotes === true, \"--clear-notes\", disallowedFlags);\n pushIf(options.clearLearnings === true, \"--clear-learnings\", disallowedFlags);\n pushIf(options.clearFiles === true, \"--clear-files\", disallowedFlags);\n pushIf(options.clearTests === true, \"--clear-tests\", disallowedFlags);\n pushIf(options.clearDocs === true, \"--clear-docs\", disallowedFlags);\n pushIf(options.clearReminders === true, \"--clear-reminders\", disallowedFlags);\n pushIf(options.clearEvents === true, \"--clear-events\", disallowedFlags);\n\n /* c8 ignore start -- unset ordering fallback is validated by package-governance integration coverage. */\n const disallowedUnset = [...clearItemMetadataKeys]\n .filter((field) =>\n OWNERSHIP_BYPASS_DISALLOWED_UNSET_ITEM_METADATA_KEYS.has(field),\n )\n .sort((left, right) => left.localeCompare(right))\n .map((field) => `--unset ${field.replaceAll(\"_\", \"-\")}`);\n /* c8 ignore stop */\n disallowedFlags.push(...disallowedUnset);\n\n if (disallowedFlags.length > 0) {\n throw buildOwnershipBypassRestrictedOptionsError({\n id,\n code: \"ownership_metadata_bypass_restricted_options\",\n message: `The metadata ownership bypass only supports non-lifecycle metadata fields and evidence appends. Remove restricted options: ${disallowedFlags.join(\", \")}`,\n required:\n \"Limit the metadata ownership bypass to non-lifecycle metadata fields plus append-only --comment/--file/--doc evidence; route restricted appends and lifecycle changes through their dedicated commands.\",\n why: \"the metadata ownership bypass is a non-owner override scoped to metadata maintenance and append-only evidence; lifecycle, ownership, dependency mutations, restricted append fields, and clear/replace operations keep their normal ownership rules.\",\n disallowedFlags,\n });\n }\n}\n\n/* c8 ignore start -- lifecycle/dependency edge branches are exercised by dedicated update workflow integration tests. */\nfunction parseStatus(\n value: string,\n statusRegistry: RuntimeStatusRegistry,\n): ItemStatus {\n const normalized = normalizeStatusInput(value, statusRegistry);\n if (!normalized) {\n const allowedStatuses = statusRegistry.definitions.map(\n (definition) => definition.id,\n );\n throw new PmCliError(\n `Invalid --status value \"${value}\". Allowed: ${allowedStatuses.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return normalized;\n}\n\n/** Enforce per-type allowed-transition rules (governance.workflow_enforcement). `off` (default) or an unrestricted type is a no-op. `strict` throws on a disallowed transition; `warn` returns a warning string surfaced on the update result. The target status is the raw `--status` value (resolved case-insensitively through the registry inside evaluateTransition). */\nfunction enforceTypeWorkflowTransition(params: {\n enforcement: GovernanceWorkflowEnforcement;\n typeWorkflows: NormalizedTypeWorkflow[];\n statusRegistry: RuntimeStatusRegistry;\n typeName: string;\n fromStatus: string;\n toStatus: string;\n}): string | undefined {\n if (params.enforcement === \"off\" || params.typeWorkflows.length === 0) {\n return undefined;\n }\n const result = evaluateTransition({\n typeName: params.typeName,\n fromStatus: params.fromStatus,\n toStatus: params.toStatus,\n typeWorkflows: params.typeWorkflows,\n statusRegistry: params.statusRegistry,\n });\n if (!result.hasRule || result.allowed) {\n return undefined;\n }\n const normalizedFrom =\n normalizeStatusInput(params.fromStatus, params.statusRegistry) ??\n params.fromStatus;\n const normalizedTo =\n normalizeStatusInput(params.toStatus, params.statusRegistry) ??\n params.toStatus;\n const message =\n `Disallowed transition for type \"${params.typeName}\": ${normalizedFrom} -> ${normalizedTo}. ` +\n `Allowed transitions: ${describeAllowedTransitions(result.allowedTransitions)}.`;\n if (params.enforcement === \"strict\") {\n throw new PmCliError(message, EXIT_CODE.USAGE);\n }\n return `workflow_transition_not_allowed: ${message}`;\n}\n\ninterface ParsedDependencyUpdates {\n additions: Dependency[];\n}\n\ninterface DependencyRemovalSelector {\n id: string;\n kind?: (typeof DEPENDENCY_KIND_VALUES)[number];\n source_kind?: string;\n}\n\nfunction parseDependencyCreatedAt(\n value: string | undefined,\n currentIso: string,\n): string {\n if (!value || value.trim() === \"\" || value.trim().toLowerCase() === \"now\") {\n return currentIso;\n }\n const parsed = Date.parse(value);\n if (!Number.isFinite(parsed)) {\n throw new PmCliError(\n `Invalid dependency created_at timestamp \"${value}\"`,\n EXIT_CODE.USAGE,\n );\n }\n return new Date(parsed).toISOString();\n}\n\nfunction parseOptionalDependencyString(\n value: string | undefined,\n): string | undefined {\n if (value === undefined) return undefined;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\n/** Allowed CSV/markdown keys for the update `--dep` addition seed (GH-258). */\nconst DEP_ADDITION_KEYS = [\n \"id\",\n \"kind\",\n \"type\",\n \"author\",\n \"created_at\",\n \"source_kind\",\n] as const;\n/** Allowed CSV/markdown keys for the `--dep-remove` selector (GH-258). */\nconst DEP_REMOVE_KEYS = [\"id\", \"kind\", \"type\", \"source_kind\"] as const;\n\nfunction looksLikeStructuredDependencyEntry(raw: string): boolean {\n if (raw.startsWith(\"```\") || raw.includes(\"\\n\")) {\n return true;\n }\n if (\n /^(?:[-*+]\\s+)?(?:id|kind|type|author|created_at|source_kind)\\s*[:=]/i.test(\n raw,\n )\n ) {\n return true;\n }\n // A first-key typo (e.g. `bogus=v,id=pm-2`) must still be parsed so the unknown\n // key is rejected rather than swallowed as a bare item id (GH-258).\n return looksLikeGenericKeyValueEntry(raw);\n}\n\n// pm-fl0c #4 (2026-05-28): `pm plan` accepts `depends_on` as a link kind\n// (`PLAN_STEP_LINK_KIND_VALUES`) but `pm update --dep kind=depends_on` rejected\n// it because `DEPENDENCY_KIND_VALUES` only lists `blocked_by`. The two terms\n// are semantically identical from this side (\"X depends on Y\" === \"X blocked\n// by Y\"), so we normalize input here rather than expanding the persisted enum\n// — the stored kind stays canonical (`blocked_by`) and downstream consumers\n// (closing logic, dependency graphs, blockers views) keep working unchanged.\nconst DEPENDENCY_KIND_INPUT_ALIASES: Readonly<Record<string, string>> = {\n \"blocked-by\": \"blocked_by\",\n depends_on: \"blocked_by\",\n \"depends-on\": \"blocked_by\",\n};\n\nfunction normalizeDependencyKindInput(\n raw: string | undefined,\n): string | undefined {\n if (typeof raw !== \"string\") {\n return raw;\n }\n const trimmed = raw.trim();\n const alias = DEPENDENCY_KIND_INPUT_ALIASES[trimmed.toLowerCase()];\n return alias ?? trimmed;\n}\n\nfunction parseDependencyAdditions(\n raw: string[] | undefined,\n prefix: string,\n nowIso: string,\n): ParsedDependencyUpdates {\n if (!raw) {\n return { additions: [] };\n }\n assertNoLegacyNoneTokens(\n raw,\n \"--dep\",\n \"Use --clear-deps to clear dependencies.\",\n );\n const additions: Dependency[] = raw.map((entry) => {\n const trimmedEntry = entry.trim();\n const isStructured = looksLikeStructuredDependencyEntry(trimmedEntry);\n assertValidBareDependencyFlagValue(trimmedEntry, isStructured);\n const kv = isStructured\n ? parseCsvKv(entry, \"--dep\")\n : { id: trimmedEntry, kind: \"related\" };\n if (isStructured) {\n assertNoUnknownCsvKeys(kv, \"--dep\", DEP_ADDITION_KEYS);\n }\n const id = kv.id?.trim();\n const kind = normalizeDependencyKindInput((kv.kind ?? kv.type)?.trim());\n if (!id || !kind) {\n throw new PmCliError(\n \"--dep requires id and kind, or a bare item id to add a related dependency\",\n EXIT_CODE.USAGE,\n );\n }\n if (id.toLowerCase() === \"undefined\") {\n throw new PmCliError(\n `--dep id must not use placeholder token \"${id}\". Use --clear-deps to clear dependencies.`,\n EXIT_CODE.USAGE,\n );\n }\n const sourceKind = parseOptionalDependencyString(kv.source_kind);\n return {\n id: normalizeItemId(id, prefix),\n kind: ensureEnum(kind, DEPENDENCY_KIND_VALUES, \"dependency kind\"),\n created_at: parseDependencyCreatedAt(kv.created_at, nowIso),\n author: parseOptionalDependencyString(kv.author),\n source_kind: sourceKind,\n };\n });\n return { additions };\n}\n\nfunction parseDependencyRemovals(\n raw: string[] | undefined,\n prefix: string,\n): DependencyRemovalSelector[] {\n if (!raw) {\n return [];\n }\n assertNoLegacyNoneTokens(raw, \"--dep-remove\");\n return raw.map((entry) => {\n const trimmed = entry.trim();\n if (!trimmed) {\n throw new PmCliError(\n \"--dep-remove requires id or key/value selectors\",\n EXIT_CODE.USAGE,\n );\n }\n if (\n trimmed.includes(\"=\") ||\n /^(?:[-*+]\\s+)?(?:id|kind|type|source_kind)\\s*[:=]/i.test(trimmed) ||\n trimmed.startsWith(\"```\")\n ) {\n const kv = parseCsvKv(trimmed, \"--dep-remove\");\n assertNoUnknownCsvKeys(kv, \"--dep-remove\", DEP_REMOVE_KEYS);\n const idRaw = kv.id?.trim();\n if (!idRaw) {\n throw new PmCliError(\n \"--dep-remove key/value form requires id=<value>\",\n EXIT_CODE.USAGE,\n );\n }\n if (idRaw.toLowerCase() === \"undefined\") {\n throw new PmCliError(\n `--dep-remove id must not use placeholder token \"${idRaw}\"`,\n EXIT_CODE.USAGE,\n );\n }\n const kindRaw = normalizeDependencyKindInput(\n parseOptionalDependencyString(kv.kind ?? kv.type),\n );\n const sourceKind = parseOptionalDependencyString(kv.source_kind);\n return {\n id: normalizeItemId(idRaw, prefix),\n kind: kindRaw\n ? ensureEnum(kindRaw, DEPENDENCY_KIND_VALUES, \"dependency kind\")\n : undefined,\n source_kind: sourceKind,\n };\n }\n if (trimmed.toLowerCase() === \"undefined\") {\n throw new PmCliError(\n `--dep-remove id must not use placeholder token \"${trimmed}\"`,\n EXIT_CODE.USAGE,\n );\n }\n return {\n id: normalizeItemId(trimmed, prefix),\n };\n });\n}\n\nfunction dependencyKey(\n value: Pick<Dependency, \"id\" | \"kind\" | \"source_kind\">,\n): string {\n return `${value.id}::${value.kind}::${value.source_kind ?? \"\"}`;\n}\n\n// pm-kyd6: `--blocked-by` writes the `blocked_by` scalar, but the dependency\n// graph (`pm deps`) is built only from the `dependencies` array. Mirror the\n// behaviour create.ts already has so the metadata and the graph agree: a\n// resolvable blocker also gets a `blocked_by` dependency edge. Repeated\n// `--blocked-by` updates preserve prior blocker edges because the graph is the\n// full dependency record; the scalar remains the latest primary blocker for\n// backward compatibility. Clearing the scalar removes all derived blocker edges.\nfunction reconcileBlockedByDependency(\n current: Dependency[] | undefined,\n nextBlockedById: string | undefined,\n nowIsoValue: string,\n author: string,\n): { dependencies: Dependency[] | undefined; changed: boolean } {\n let next = [...(current ?? [])];\n let changed = false;\n if (nextBlockedById === undefined) {\n const filtered = next.filter((dep) => dep.kind !== \"blocked_by\");\n if (filtered.length !== next.length) {\n next = filtered;\n changed = true;\n }\n if (!changed) {\n return { dependencies: current, changed: false };\n }\n return { dependencies: next.length > 0 ? next : undefined, changed: true };\n }\n if (\n !next.some((dep) => dep.kind === \"blocked_by\" && dep.id === nextBlockedById)\n ) {\n next.push({\n id: nextBlockedById,\n kind: \"blocked_by\",\n created_at: nowIsoValue,\n author,\n });\n changed = true;\n }\n if (!changed) {\n return { dependencies: current, changed: false };\n }\n return { dependencies: next.length > 0 ? next : undefined, changed: true };\n}\n\n// pm-kyd6: resolve the --blocked-by target before the synchronous mutate\n// callback so a real blocker can also become a `blocked_by` dependency edge.\n// `id` is set when the target resolves; `unresolved` carries the raw value when\n// --blocked-by points at an item that does not exist (the scalar is still set,\n// mirroring create.ts and the never-block missing-parent behaviour, but the\n// caller surfaces a warning so the metadata/graph mismatch is visible).\nasync function resolveBlockedByDependencyTarget(\n blockedByOption: string | undefined,\n blockedByCleared: boolean,\n pmRoot: string,\n idPrefix: string,\n itemFormat: ItemFormat,\n typeToFolder: Record<string, string>,\n): Promise<{ id?: string; unresolved?: string }> {\n if (blockedByOption === undefined || blockedByCleared) {\n return {};\n }\n const blockedByValue = blockedByOption.trim();\n if (blockedByValue.length === 0) {\n return {};\n }\n const located = await locateItem(\n pmRoot,\n normalizeItemId(blockedByValue, idPrefix),\n idPrefix,\n itemFormat,\n typeToFolder,\n );\n return located ? { id: located.id } : { unresolved: blockedByValue };\n}\n\n// pm-kyd6: apply the reconciled blocked_by dependency edge to the item metadata\n// and record the `dependencies` change. Kept out of the mutate callback so the\n// large runUpdate function stays under the static-quality complexity budget.\nfunction applyBlockedByDependencyEdge(\n metadata: ItemMetadata,\n resolvedBlockedById: string | undefined,\n nowIsoValue: string,\n author: string,\n changedFields: string[],\n): void {\n const reconciled = reconcileBlockedByDependency(\n metadata.dependencies,\n resolvedBlockedById,\n nowIsoValue,\n author,\n );\n if (!reconciled.changed) {\n return;\n }\n if (reconciled.dependencies === undefined) {\n delete metadata.dependencies;\n } else {\n metadata.dependencies = reconciled.dependencies;\n }\n if (!changedFields.includes(\"dependencies\")) {\n changedFields.push(\"dependencies\");\n }\n}\n\nfunction fileKey(value: Pick<LinkedFile, \"path\" | \"scope\">): string {\n return `${value.path}::${value.scope}`;\n}\n\nfunction docKey(value: Pick<LinkedDoc, \"path\" | \"scope\">): string {\n return `${value.path}::${value.scope}`;\n}\n\nfunction testKey(\n value: Pick<LinkedTest, \"command\" | \"path\" | \"scope\" | \"pm_context_mode\">,\n): string {\n return `${value.command}::${value.path ?? \"\"}::${value.scope}::${value.pm_context_mode ?? \"\"}`;\n}\n\nfunction matchesDependencySelector(\n value: Dependency,\n selector: DependencyRemovalSelector,\n): boolean {\n if (value.id !== selector.id) {\n return false;\n }\n if (selector.kind && value.kind !== selector.kind) {\n return false;\n }\n if (\n selector.source_kind !== undefined &&\n (value.source_kind ?? undefined) !== selector.source_kind\n ) {\n return false;\n }\n return true;\n}\n\nfunction ensurePriority(raw: string | number): 0 | 1 | 2 | 3 | 4 {\n return resolvePriority(raw);\n}\n\nfunction normalizeUpdatePolicyOptionKey(raw: string, typeName: string): string {\n const canonical = canonicalizeCommandOptionKey(\"update\", raw);\n if (!canonical) {\n throw new PmCliError(\n `Unsupported command_option_policies option \"${raw}\" for update command on type \"${typeName}\"`,\n EXIT_CODE.CONFLICT,\n );\n }\n return canonical;\n}\n\nfunction collectProvidedUpdatePolicyOptions(\n options: UpdateCommandOptions,\n runtimeFieldRegistry: RuntimeFieldRegistry,\n extensionFieldNames: readonly string[],\n): Set<string> {\n const provided = new Set<string>();\n const mark = (optionKey: string, isProvided: boolean): void => {\n if (isProvided) {\n provided.add(optionKey);\n }\n };\n mark(\"title\", options.title !== undefined);\n mark(\"description\", options.description !== undefined);\n mark(\"body\", options.body !== undefined);\n mark(\"status\", options.status !== undefined);\n mark(\"closeReason\", options.closeReason !== undefined);\n mark(\"priority\", options.priority !== undefined);\n mark(\"type\", options.type !== undefined);\n // `--add-tags` / `--remove-tags` mutate the same `tags` field as `--tags`, so\n // they count toward the `tags` command_option_policy (disabled + required).\n mark(\n \"tags\",\n options.tags !== undefined ||\n (Array.isArray(options.addTags) && options.addTags.length > 0) ||\n (Array.isArray(options.removeTags) && options.removeTags.length > 0),\n );\n mark(\"deadline\", options.deadline !== undefined);\n mark(\"estimatedMinutes\", options.estimatedMinutes !== undefined);\n // `--add-ac` / `--remove-ac` mutate the same `acceptance_criteria` field as\n // `--acceptance-criteria`, so they count toward its command_option_policy.\n mark(\n \"acceptanceCriteria\",\n options.acceptanceCriteria !== undefined ||\n (Array.isArray(options.addAc) && options.addAc.length > 0) ||\n (Array.isArray(options.removeAc) && options.removeAc.length > 0),\n );\n mark(\"definitionOfReady\", options.definitionOfReady !== undefined);\n mark(\"order\", options.order !== undefined || options.rank !== undefined);\n mark(\"goal\", options.goal !== undefined);\n mark(\"objective\", options.objective !== undefined);\n mark(\"value\", options.value !== undefined);\n mark(\"impact\", options.impact !== undefined);\n mark(\"outcome\", options.outcome !== undefined);\n mark(\"whyNow\", options.whyNow !== undefined);\n mark(\"author\", options.author !== undefined);\n mark(\"message\", options.message !== undefined);\n mark(\"assignee\", options.assignee !== undefined);\n mark(\"parent\", options.parent !== undefined);\n mark(\"reviewer\", options.reviewer !== undefined);\n mark(\"risk\", options.risk !== undefined);\n mark(\"confidence\", options.confidence !== undefined);\n mark(\"sprint\", options.sprint !== undefined);\n mark(\"release\", options.release !== undefined);\n mark(\"blockedBy\", options.blockedBy !== undefined);\n mark(\"blockedReason\", options.blockedReason !== undefined);\n mark(\"unblockNote\", options.unblockNote !== undefined);\n mark(\"reporter\", options.reporter !== undefined);\n mark(\"severity\", options.severity !== undefined);\n mark(\"environment\", options.environment !== undefined);\n mark(\"reproSteps\", options.reproSteps !== undefined);\n mark(\"resolution\", options.resolution !== undefined);\n mark(\"expectedResult\", options.expectedResult !== undefined);\n mark(\"actualResult\", options.actualResult !== undefined);\n mark(\"affectedVersion\", options.affectedVersion !== undefined);\n mark(\"fixedVersion\", options.fixedVersion !== undefined);\n mark(\"component\", options.component !== undefined);\n mark(\"regression\", options.regression !== undefined);\n mark(\"customerImpact\", options.customerImpact !== undefined);\n mark(\"dep\", options.dep !== undefined);\n mark(\"depRemove\", options.depRemove !== undefined);\n mark(\"dep\", options.replaceDeps === true);\n mark(\"comment\", options.comment !== undefined);\n mark(\"note\", options.note !== undefined);\n mark(\"learning\", options.learning !== undefined);\n mark(\"file\", options.file !== undefined);\n mark(\"test\", options.test !== undefined);\n mark(\"test\", options.replaceTests === true);\n mark(\"doc\", options.doc !== undefined);\n mark(\"reminder\", options.reminder !== undefined);\n mark(\"event\", options.event !== undefined);\n mark(\"typeOption\", options.typeOption !== undefined);\n mark(\"field\", options.field !== undefined);\n mark(\"force\", options.force === true);\n mark(\"ownershipMetadataBypass\", options.ownershipMetadataBypass === true);\n mark(\"ownershipDependencyBypass\", options.ownershipDependencyBypass === true);\n mark(\"dep\", options.clearDeps === true);\n mark(\"comment\", options.clearComments === true);\n mark(\"note\", options.clearNotes === true);\n mark(\"learning\", options.clearLearnings === true);\n mark(\"file\", options.clearFiles === true);\n mark(\"test\", options.clearTests === true);\n mark(\"doc\", options.clearDocs === true);\n mark(\"reminder\", options.clearReminders === true);\n mark(\"event\", options.clearEvents === true);\n mark(\"typeOption\", options.clearTypeOptions === true);\n if (options.unset && options.unset.length > 0) {\n const unsetTargets = parseUpdateUnsetTargets(\n options.unset,\n runtimeFieldRegistry,\n extensionFieldNames,\n );\n for (const optionKey of unsetTargets.optionKeys) {\n mark(optionKey, true);\n }\n }\n return provided;\n}\n\nfunction enforceUpdateOptionsByType(\n typeName: string,\n options: UpdateCommandOptions,\n typeRegistry: ReturnType<typeof resolveItemTypeRegistry>,\n runtimeFieldRegistry: RuntimeFieldRegistry,\n extensionFieldNames: readonly string[],\n): void {\n const typeDefinition = resolveTypeDefinition(typeName, typeRegistry);\n if (!typeDefinition) {\n throw new PmCliError(`Invalid type value \"${typeName}\"`, EXIT_CODE.USAGE);\n }\n const policyState = resolveCommandOptionPolicyState(\n typeDefinition,\n \"update\",\n [],\n );\n if (policyState.errors.length > 0) {\n throw new PmCliError(policyState.errors.join(\"; \"), EXIT_CODE.CONFLICT);\n }\n\n const provided = collectProvidedUpdatePolicyOptions(\n options,\n runtimeFieldRegistry,\n extensionFieldNames,\n );\n for (const disabled of policyState.disabled) {\n if (provided.has(normalizeUpdatePolicyOptionKey(disabled, typeName))) {\n throw new PmCliError(\n `Option ${commandOptionFlagLabel(\"update\", disabled)} is disabled for type \"${typeName}\" by command_option_policies`,\n EXIT_CODE.USAGE,\n );\n }\n }\n\n for (const required of policyState.required) {\n if (!provided.has(normalizeUpdatePolicyOptionKey(required, typeName))) {\n throw new PmCliError(\n `Missing required option ${commandOptionFlagLabel(\"update\", required)} for type \"${typeName}\"`,\n EXIT_CODE.USAGE,\n );\n }\n }\n}\n\ninterface UpdateScalarMutationContext {\n metadataRecord: Record<string, unknown>;\n clearItemMetadataKeys: ReadonlySet<string>;\n changedFields: string[];\n nowValue: Date;\n}\n\ninterface UpdateScalarMutationDefinition {\n optionKey: keyof UpdateCommandOptions;\n metadataKey: string;\n transform?: (value: string, context: UpdateScalarMutationContext) => unknown;\n}\n\ninterface UpdateClearCollectionDefinition {\n enabled: boolean | undefined;\n optionKey: string;\n clearFlag: string;\n valueFlag: string;\n values: string[] | undefined;\n metadataKey: string;\n}\n\ninterface UpdateMutationContext {\n options: UpdateCommandOptions;\n settings: Awaited<ReturnType<typeof readSettings>>;\n typeRegistry: ReturnType<typeof resolveItemTypeRegistry>;\n statusRegistry: RuntimeStatusRegistry;\n runtimeFieldRegistry: RuntimeFieldRegistry;\n extensionRegistrations: ReturnType<typeof getActiveExtensionRegistrations>;\n extensionFieldNames: readonly string[];\n clearItemMetadataKeys: ReadonlySet<string>;\n dependencyUpdates: ParsedDependencyUpdates;\n dependencyRemovals: DependencyRemovalSelector[];\n commentUpdates: ReturnType<typeof parseLogSeed>;\n noteUpdates: ReturnType<typeof parseLogSeed>;\n learningUpdates: ReturnType<typeof parseLogSeed>;\n fileUpdates: ReturnType<typeof parseFiles>;\n testUpdates: ReturnType<typeof parseTests>;\n docUpdates: ReturnType<typeof parseDocs>;\n resolvedParentValue: string | undefined;\n resolvedBlockedByDependencyId: string | undefined;\n runtimeFieldUpdates: Record<string, unknown>;\n nowValue: Date;\n nowIso: string;\n author: string;\n pmRoot: string;\n}\n\ninterface CloseRouteContext {\n options: UpdateCommandOptions;\n fieldFlags: Record<string, boolean>;\n statusRegistry: RuntimeStatusRegistry;\n workflowTransitionWarnings: readonly string[];\n global: GlobalOptions;\n id: string;\n}\n\n// `rank` is a legacy alias for `order`; keep it out of the scalar loop if the\n// shared mutation key list ever grows to include that alias.\nconst UPDATE_LEGACY_COMMON_SCALAR_OPTION_EXCLUSIONS = new Set<string>([\n \"order\",\n \"rank\",\n]);\nconst UPDATE_LEGACY_COMMON_SCALAR_OPTION_KEYS =\n COMMON_MUTATION_COMMAND_OPTION_KEYS.filter(\n (key) => !UPDATE_LEGACY_COMMON_SCALAR_OPTION_EXCLUSIONS.has(key),\n ) as readonly (keyof UpdateCommandOptions)[];\n\nconst UPDATE_LEGACY_SCALAR_OPTION_KEYS: readonly (keyof UpdateCommandOptions)[] =\n [\"tags\", \"closeReason\", ...UPDATE_LEGACY_COMMON_SCALAR_OPTION_KEYS];\n\nconst UPDATE_SIMPLE_FIELD_FLAG_KEYS: readonly (keyof UpdateCommandOptions)[] = [\n \"title\",\n \"description\",\n \"body\",\n \"status\",\n \"closeReason\",\n \"priority\",\n \"type\",\n ...COMMON_MUTATION_COMMAND_OPTION_KEYS,\n \"dep\",\n \"depRemove\",\n \"comment\",\n \"note\",\n \"learning\",\n \"file\",\n \"test\",\n \"doc\",\n \"reminder\",\n \"event\",\n \"typeOption\",\n \"field\",\n];\n\nconst UPDATE_POST_TAG_SCALAR_MUTATIONS: ReadonlyArray<UpdateScalarMutationDefinition> =\n [\n {\n optionKey: \"deadline\",\n metadataKey: \"deadline\",\n transform: (value, context) =>\n resolveIsoOrRelative(value, context.nowValue, \"deadline\"),\n },\n {\n optionKey: \"estimatedMinutes\",\n metadataKey: \"estimated_minutes\",\n transform: (value) =>\n parseOptionalNonNegativeInteger(value, \"estimated-minutes\"),\n },\n {\n optionKey: \"acceptanceCriteria\",\n metadataKey: \"acceptance_criteria\",\n transform: (value) => value,\n },\n { optionKey: \"definitionOfReady\", metadataKey: \"definition_of_ready\" },\n { optionKey: \"goal\", metadataKey: \"goal\" },\n { optionKey: \"objective\", metadataKey: \"objective\" },\n { optionKey: \"value\", metadataKey: \"value\" },\n { optionKey: \"impact\", metadataKey: \"impact\" },\n { optionKey: \"outcome\", metadataKey: \"outcome\" },\n { optionKey: \"whyNow\", metadataKey: \"why_now\" },\n ];\n\nconst UPDATE_STAKEHOLDER_SCALAR_MUTATIONS: ReadonlyArray<UpdateScalarMutationDefinition> =\n [\n { optionKey: \"reviewer\", metadataKey: \"reviewer\" },\n {\n optionKey: \"risk\",\n metadataKey: \"risk\",\n transform: (value) =>\n ensureEnum(normalizeRiskInput(value), RISK_VALUES, \"risk\"),\n },\n {\n optionKey: \"confidence\",\n metadataKey: \"confidence\",\n transform: (value) => parseConfidenceInput(value),\n },\n ];\n\nconst UPDATE_ISSUE_SCALAR_MUTATIONS: ReadonlyArray<UpdateScalarMutationDefinition> =\n [\n { optionKey: \"blockedReason\", metadataKey: \"blocked_reason\" },\n { optionKey: \"unblockNote\", metadataKey: \"unblock_note\" },\n { optionKey: \"reporter\", metadataKey: \"reporter\" },\n {\n optionKey: \"severity\",\n metadataKey: \"severity\",\n transform: (value) =>\n ensureEnum(\n normalizeSeverityInput(value),\n ISSUE_SEVERITY_VALUES,\n \"severity\",\n ),\n },\n { optionKey: \"environment\", metadataKey: \"environment\" },\n { optionKey: \"reproSteps\", metadataKey: \"repro_steps\" },\n { optionKey: \"resolution\", metadataKey: \"resolution\" },\n { optionKey: \"expectedResult\", metadataKey: \"expected_result\" },\n { optionKey: \"actualResult\", metadataKey: \"actual_result\" },\n { optionKey: \"affectedVersion\", metadataKey: \"affected_version\" },\n { optionKey: \"fixedVersion\", metadataKey: \"fixed_version\" },\n { optionKey: \"component\", metadataKey: \"component\" },\n {\n optionKey: \"regression\",\n metadataKey: \"regression\",\n transform: (value) => parseRegressionInput(value),\n },\n { optionKey: \"customerImpact\", metadataKey: \"customer_impact\" },\n ];\n\nfunction applyUpdateScalarMutations(\n definitions: ReadonlyArray<UpdateScalarMutationDefinition>,\n options: UpdateCommandOptions,\n context: UpdateScalarMutationContext,\n): void {\n for (const definition of definitions) {\n const optionValue = options[definition.optionKey];\n const shouldClear = context.clearItemMetadataKeys.has(\n definition.metadataKey,\n );\n if (optionValue === undefined && !shouldClear) {\n continue;\n }\n if (shouldClear) {\n delete context.metadataRecord[definition.metadataKey];\n context.changedFields.push(definition.metadataKey);\n continue;\n }\n if (typeof optionValue !== \"string\") {\n throw new PmCliError(\n `${commandOptionFlagLabel(\"update\", String(definition.optionKey))} must be a string value`,\n EXIT_CODE.USAGE,\n );\n }\n context.metadataRecord[definition.metadataKey] = definition.transform\n ? definition.transform(optionValue, context)\n : optionValue.trim();\n context.changedFields.push(definition.metadataKey);\n }\n}\n\nasync function resolveStdinUpdateOptions(\n options: UpdateCommandOptions,\n): Promise<UpdateCommandOptions> {\n const stdinResolver = createStdinTokenResolver();\n return normalizeLegacyNoneUpdateOptions({\n ...options,\n body: await stdinResolver.resolveValue(options.body, \"--body\"),\n dep: await stdinResolver.resolveList(options.dep, \"--dep\"),\n depRemove: await stdinResolver.resolveList(\n options.depRemove,\n \"--dep-remove\",\n ),\n comment: await stdinResolver.resolveList(options.comment, \"--comment\"),\n note: await stdinResolver.resolveList(options.note, \"--note\"),\n learning: await stdinResolver.resolveList(options.learning, \"--learning\"),\n file: await stdinResolver.resolveList(options.file, \"--file\"),\n test: await stdinResolver.resolveList(options.test, \"--test\"),\n doc: await stdinResolver.resolveList(options.doc, \"--doc\"),\n reminder: await stdinResolver.resolveList(options.reminder, \"--reminder\"),\n event: await stdinResolver.resolveList(options.event, \"--event\"),\n typeOption: await stdinResolver.resolveList(\n options.typeOption,\n \"--type-option\",\n ),\n field: await stdinResolver.resolveList(options.field, \"--field\"),\n });\n}\n\nfunction buildClearCollectionDefinitions(\n options: UpdateCommandOptions,\n): readonly UpdateClearCollectionDefinition[] {\n return [\n {\n enabled: options.clearDeps || options.replaceDeps,\n optionKey: \"dep\",\n clearFlag: \"--clear-deps\",\n valueFlag: \"--dep\",\n values: options.dep,\n metadataKey: \"dependencies\",\n },\n {\n enabled: options.clearComments,\n optionKey: \"comment\",\n clearFlag: \"--clear-comments\",\n valueFlag: \"--comment\",\n values: options.comment,\n metadataKey: \"comments\",\n },\n {\n enabled: options.clearNotes,\n optionKey: \"note\",\n clearFlag: \"--clear-notes\",\n valueFlag: \"--note\",\n values: options.note,\n metadataKey: \"notes\",\n },\n {\n enabled: options.clearLearnings,\n optionKey: \"learning\",\n clearFlag: \"--clear-learnings\",\n valueFlag: \"--learning\",\n values: options.learning,\n metadataKey: \"learnings\",\n },\n {\n enabled: options.clearFiles,\n optionKey: \"file\",\n clearFlag: \"--clear-files\",\n valueFlag: \"--file\",\n values: options.file,\n metadataKey: \"files\",\n },\n {\n enabled: options.clearTests || options.replaceTests,\n optionKey: \"test\",\n clearFlag: \"--clear-tests\",\n valueFlag: \"--test\",\n values: options.test,\n metadataKey: \"tests\",\n },\n {\n enabled: options.clearDocs,\n optionKey: \"doc\",\n clearFlag: \"--clear-docs\",\n valueFlag: \"--doc\",\n values: options.doc,\n metadataKey: \"docs\",\n },\n {\n enabled: options.clearReminders,\n optionKey: \"reminder\",\n clearFlag: \"--clear-reminders\",\n valueFlag: \"--reminder\",\n values: options.reminder,\n metadataKey: \"reminders\",\n },\n {\n enabled: options.clearEvents,\n optionKey: \"event\",\n clearFlag: \"--clear-events\",\n valueFlag: \"--event\",\n values: options.event,\n metadataKey: \"events\",\n },\n {\n enabled: options.clearTypeOptions,\n optionKey: \"typeOption\",\n clearFlag: \"--clear-type-options\",\n valueFlag: \"--type-option\",\n values: options.typeOption,\n metadataKey: \"type_options\",\n },\n ];\n}\n\nfunction validateReplaceOptions(options: UpdateCommandOptions): void {\n if (\n options.replaceDeps === true &&\n (options.dep === undefined || options.dep.length === 0)\n ) {\n throw new PmCliError(\n \"--replace-deps requires at least one --dep entry\",\n EXIT_CODE.USAGE,\n );\n }\n if (\n options.replaceDeps === true &&\n options.depRemove !== undefined &&\n options.depRemove.length > 0\n ) {\n throw new PmCliError(\n \"--replace-deps cannot be combined with --dep-remove\",\n EXIT_CODE.USAGE,\n );\n }\n if (\n options.replaceTests === true &&\n (options.test === undefined || options.test.length === 0)\n ) {\n throw new PmCliError(\n \"--replace-tests requires at least one --test entry\",\n EXIT_CODE.USAGE,\n );\n }\n if (options.replaceTests === true && options.clearTests === true) {\n throw new PmCliError(\n \"--replace-tests cannot be combined with --clear-tests\",\n EXIT_CODE.USAGE,\n );\n }\n}\n\nfunction applyClearCollectionDefinitions(params: {\n definitions: readonly UpdateClearCollectionDefinition[];\n options: UpdateCommandOptions;\n clearOptionKeys: Set<string>;\n clearItemMetadataKeys: Set<string>;\n}): void {\n for (const definition of params.definitions) {\n if (!definition.enabled) {\n continue;\n }\n const isReplacement =\n (definition.optionKey === \"dep\" && params.options.replaceDeps === true) ||\n (definition.optionKey === \"test\" && params.options.replaceTests === true);\n if (definition.values && definition.values.length > 0 && !isReplacement) {\n throw new PmCliError(\n `Cannot combine ${definition.clearFlag} with ${definition.valueFlag}`,\n EXIT_CODE.USAGE,\n );\n }\n params.clearOptionKeys.add(definition.optionKey);\n params.clearItemMetadataKeys.add(definition.metadataKey);\n }\n}\n\nfunction buildScalarOptionPresence(\n options: UpdateCommandOptions,\n): Record<string, boolean> {\n const presence: Record<string, boolean> = {};\n for (const key of UPDATE_LEGACY_SCALAR_OPTION_KEYS) {\n presence[String(key)] = options[key] !== undefined;\n }\n presence.order = options.order !== undefined || options.rank !== undefined;\n return presence;\n}\n\nfunction rejectUnsetScalarConflicts(\n options: UpdateCommandOptions,\n unsetTargets: { optionKeys: Set<string>; metadataKeys: Set<string> },\n): void {\n const scalarOptionPresence = buildScalarOptionPresence(options);\n for (const [optionKey, hasValue] of Object.entries(scalarOptionPresence)) {\n if (!hasValue || !unsetTargets.optionKeys.has(optionKey)) {\n continue;\n }\n const unsetField =\n UPDATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey) ?? optionKey;\n throw new PmCliError(\n `Cannot combine --unset ${unsetField} with ${commandOptionFlagLabel(\"update\", optionKey)}`,\n EXIT_CODE.USAGE,\n );\n }\n if (unsetTargets.metadataKeys.has(\"acceptance_criteria\")) {\n if (Array.isArray(options.addAc) && options.addAc.length > 0) {\n throw new PmCliError(\n \"Cannot combine --unset acceptance-criteria with --add-ac\",\n EXIT_CODE.USAGE,\n );\n }\n if (Array.isArray(options.removeAc) && options.removeAc.length > 0) {\n throw new PmCliError(\n \"Cannot combine --unset acceptance-criteria with --remove-ac\",\n EXIT_CODE.USAGE,\n );\n }\n }\n if (!unsetTargets.metadataKeys.has(\"tags\")) {\n return;\n }\n if (Array.isArray(options.addTags) && options.addTags.length > 0) {\n throw new PmCliError(\n \"Cannot combine --unset tags with --add-tags\",\n EXIT_CODE.USAGE,\n );\n }\n if (Array.isArray(options.removeTags) && options.removeTags.length > 0) {\n throw new PmCliError(\n \"Cannot combine --unset tags with --remove-tags\",\n EXIT_CODE.USAGE,\n );\n }\n}\n\nfunction rejectLegacyScalarTokens(options: UpdateCommandOptions): void {\n const assertNoLegacyScalarToken = (\n value: string | undefined,\n optionKey: string,\n ): void => {\n const unsetField = UPDATE_OPTION_KEY_TO_UNSET_CANONICAL.get(optionKey);\n const hint = unsetField\n ? `Use --unset ${unsetField} to clear this field.`\n : undefined;\n assertNoLegacyNoneToken(\n value,\n commandOptionFlagLabel(\"update\", optionKey),\n hint,\n );\n };\n for (const key of UPDATE_LEGACY_SCALAR_OPTION_KEYS) {\n assertNoLegacyScalarToken(options[key] as string | undefined, String(key));\n }\n assertNoLegacyScalarToken(options.order ?? options.rank, \"order\");\n assertNoLegacyNoneTokens(\n options.reminder,\n \"--reminder\",\n \"Use --clear-reminders to clear reminders.\",\n );\n assertNoLegacyNoneTokens(\n options.event,\n \"--event\",\n \"Use --clear-events to clear linked events.\",\n );\n}\n\nfunction buildUpdateFieldFlags(\n options: UpdateCommandOptions,\n runtimeFieldUpdates: Record<string, unknown>,\n): Record<string, boolean> {\n const flags: Record<string, boolean> = {};\n for (const key of UPDATE_SIMPLE_FIELD_FLAG_KEYS) {\n flags[String(key)] = options[key] !== undefined;\n }\n flags.tags = options.tags !== undefined;\n flags.addTags = Array.isArray(options.addTags) && options.addTags.length > 0;\n flags.removeTags =\n Array.isArray(options.removeTags) && options.removeTags.length > 0;\n flags.addAc = Array.isArray(options.addAc) && options.addAc.length > 0;\n flags.removeAc =\n Array.isArray(options.removeAc) && options.removeAc.length > 0;\n flags.order = options.order !== undefined;\n flags.rank = options.rank !== undefined;\n flags.replaceDeps = options.replaceDeps === true;\n flags.replaceTests = options.replaceTests === true;\n flags.unset = options.unset !== undefined && options.unset.length > 0;\n flags.clearDeps = options.clearDeps === true;\n flags.clearComments = options.clearComments === true;\n flags.clearNotes = options.clearNotes === true;\n flags.clearLearnings = options.clearLearnings === true;\n flags.clearFiles = options.clearFiles === true;\n flags.clearTests = options.clearTests === true;\n flags.clearDocs = options.clearDocs === true;\n flags.clearReminders = options.clearReminders === true;\n flags.clearEvents = options.clearEvents === true;\n flags.clearTypeOptions = options.clearTypeOptions === true;\n flags.runtimeFields = Object.keys(runtimeFieldUpdates).length > 0;\n return flags;\n}\n\nasync function buildNoopUpdateResult(params: {\n pmRoot: string;\n id: string;\n settings: Awaited<ReturnType<typeof readSettings>>;\n typeRegistry: ReturnType<typeof resolveItemTypeRegistry>;\n}): Promise<UpdateResult> {\n const located = await locateItem(\n params.pmRoot,\n params.id,\n params.settings.id_prefix,\n params.settings.item_format,\n params.typeRegistry.type_to_folder,\n );\n if (!located) {\n throw await buildItemNotFoundError(\n params.pmRoot,\n params.id,\n params.settings.id_prefix,\n params.typeRegistry.type_to_folder,\n );\n }\n const { document } = await readLocatedItem(located, {\n schema: params.settings.schema,\n });\n return {\n item: toItemRecord(document.metadata),\n changed_fields: [],\n warnings: [\"noop_no_update_fields\"],\n };\n}\n\nasync function assertUpdateTrackerInitialized(pmRoot: string): Promise<void> {\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(\n `Tracker is not initialized at ${pmRoot}. Run pm init first.`,\n EXIT_CODE.NOT_FOUND,\n );\n }\n}\n\nfunction assertMatchingOrderRank(options: UpdateCommandOptions): void {\n if (\n options.order !== undefined &&\n options.rank !== undefined &&\n options.order !== options.rank\n ) {\n throw new PmCliError(\n \"--order and --rank must match when both are provided\",\n EXIT_CODE.USAGE,\n );\n }\n}\n\nasync function resolveParentReferenceForUpdate(params: {\n id: string;\n options: UpdateCommandOptions;\n unsetTargets: { metadataKeys: Set<string> };\n pmRoot: string;\n settings: Awaited<ReturnType<typeof readSettings>>;\n typeRegistry: ReturnType<typeof resolveItemTypeRegistry>;\n parentReferencePolicy: Awaited<\n ReturnType<typeof readSettings>\n >[\"validation\"][\"parent_reference\"];\n}): Promise<{ resolvedParentValue: string | undefined; warnings: string[] }> {\n if (\n params.options.parent === undefined ||\n params.unsetTargets.metadataKeys.has(\"parent\")\n ) {\n return { resolvedParentValue: undefined, warnings: [] };\n }\n const resolvedParentValue = normalizeParentReferenceValue(\n params.options.parent,\n );\n assertParentReferenceIsNotSelf(\n params.id,\n resolvedParentValue,\n params.settings.id_prefix,\n );\n const parentLocated = await locateItem(\n params.pmRoot,\n resolvedParentValue,\n params.settings.id_prefix,\n params.settings.item_format,\n params.typeRegistry.type_to_folder,\n );\n if (parentLocated) {\n return { resolvedParentValue, warnings: [] };\n }\n const normalizedParentId = normalizeItemId(\n resolvedParentValue,\n params.settings.id_prefix,\n );\n return {\n resolvedParentValue,\n warnings: validateMissingParentReference(\n normalizedParentId,\n params.parentReferencePolicy,\n ).warnings,\n };\n}\n\nfunction blockedByResolutionWarnings(resolution: {\n unresolved?: string;\n}): string[] {\n return resolution.unresolved === undefined\n ? []\n : [`blocked_by_unresolved:${resolution.unresolved}`];\n}\n\nasync function collectWorkflowTransitionWarnings(params: {\n options: UpdateCommandOptions;\n fieldFlags: Record<string, boolean>;\n workflowEnforcement: GovernanceWorkflowEnforcement;\n typeWorkflows: NormalizedTypeWorkflow[];\n statusRegistry: RuntimeStatusRegistry;\n typeRegistry: ReturnType<typeof resolveItemTypeRegistry>;\n pmRoot: string;\n id: string;\n settings: Awaited<ReturnType<typeof readSettings>>;\n}): Promise<string[]> {\n if (\n params.workflowEnforcement === \"off\" ||\n params.typeWorkflows.length === 0 ||\n !params.fieldFlags.status ||\n params.options.status === undefined\n ) {\n return [];\n }\n const located = await locateItem(\n params.pmRoot,\n params.id,\n params.settings.id_prefix,\n params.settings.item_format,\n params.typeRegistry.type_to_folder,\n );\n if (!located) {\n throw await buildItemNotFoundError(\n params.pmRoot,\n params.id,\n params.settings.id_prefix,\n params.typeRegistry.type_to_folder,\n );\n }\n const { document } = await readLocatedItem(located, {\n schema: params.settings.schema,\n });\n const effectiveType =\n params.options.type !== undefined\n ? (resolveTypeName(params.options.type, params.typeRegistry) ??\n params.options.type)\n : (document.metadata?.type ?? \"\");\n const warning = enforceTypeWorkflowTransition({\n enforcement: params.workflowEnforcement,\n typeWorkflows: params.typeWorkflows,\n statusRegistry: params.statusRegistry,\n typeName: effectiveType,\n fromStatus: document.metadata?.status ?? \"\",\n toStatus: params.options.status,\n });\n return warning ? [warning] : [];\n}\n\nasync function routeCloseStatusUpdate(\n context: CloseRouteContext,\n): Promise<UpdateResult | undefined> {\n if (!context.fieldFlags.status) {\n return undefined;\n }\n const targetStatus = normalizeStatusInput(\n context.options.status as ItemStatus,\n context.statusRegistry,\n );\n if (targetStatus !== context.statusRegistry.close_status) {\n return undefined;\n }\n\n const otherFieldKeys = Object.entries(context.fieldFlags)\n .filter(\n ([key, value]) => value && key !== \"status\" && key !== \"closeReason\",\n )\n .map(([key]) => key);\n const routeWarnings: string[] = [];\n let preChangedFields: string[] = [];\n if (otherFieldKeys.length > 0) {\n const preUpdate = await runUpdate(\n context.id,\n {\n ...context.options,\n status: undefined,\n closeReason: undefined,\n message: undefined,\n },\n context.global,\n );\n preChangedFields = preUpdate.changed_fields;\n routeWarnings.push(...preUpdate.warnings);\n }\n\n const explicitReason =\n typeof context.options.closeReason === \"string\"\n ? context.options.closeReason.trim()\n : \"\";\n const fallbackMessage =\n typeof context.options.message === \"string\"\n ? context.options.message.trim()\n : \"\";\n const closeReason =\n explicitReason || fallbackMessage || \"Closed via pm update\";\n const closeResult = await runClose(\n context.id,\n closeReason,\n {\n author: context.options.author,\n message: context.options.message,\n force: context.options.force,\n },\n context.global,\n );\n\n const warnings = [\n ...context.workflowTransitionWarnings,\n ...routeWarnings,\n ...closeResult.warnings,\n \"auto_routed_from_update_to_close\",\n ];\n if (explicitReason.length === 0 && fallbackMessage.length === 0) {\n warnings.push(\"close_reason_defaulted\");\n }\n return {\n item: closeResult.item,\n changed_fields: [...preChangedFields, ...closeResult.changed_fields],\n warnings,\n };\n}\n\nfunction applySimpleItemMutations(\n document: ItemDocument,\n options: UpdateCommandOptions,\n statusRegistry: RuntimeStatusRegistry,\n changedFields: string[],\n): string {\n if (options.title !== undefined) {\n document.metadata.title = requireStringOption(options.title, \"--title\");\n changedFields.push(\"title\");\n }\n if (options.description !== undefined) {\n document.metadata.description = options.description;\n changedFields.push(\"description\");\n }\n if (options.body !== undefined) {\n document.body = options.body;\n changedFields.push(\"body\");\n }\n return (\n normalizeStatusInput(document.metadata.status, statusRegistry) ??\n document.metadata.status\n );\n}\n\nfunction hasClosedAt(metadata: ItemDocument[\"metadata\"]): boolean {\n return metadata.closed_at !== undefined && metadata.closed_at !== null;\n}\n\nfunction hasClosedAtProperty(metadata: ItemDocument[\"metadata\"]): boolean {\n return metadata.closed_at !== undefined;\n}\n\nfunction applyStatusAndCloseReasonMutations(\n document: ItemDocument,\n context: Pick<\n UpdateMutationContext,\n \"options\" | \"statusRegistry\" | \"clearItemMetadataKeys\" | \"nowIso\"\n >,\n previousStatusNormalized: string,\n changedFields: string[],\n): void {\n if (context.options.status !== undefined) {\n const status = parseStatus(context.options.status, context.statusRegistry);\n document.metadata.status = status;\n changedFields.push(\"status\");\n if (\n status === context.statusRegistry.close_status &&\n !hasClosedAt(document.metadata)\n ) {\n document.metadata.closed_at = context.nowIso;\n changedFields.push(\"closed_at\");\n } else if (\n previousStatusNormalized === context.statusRegistry.close_status &&\n status !== context.statusRegistry.close_status &&\n hasClosedAtProperty(document.metadata)\n ) {\n delete document.metadata.closed_at;\n changedFields.push(\"closed_at\");\n }\n }\n if (\n context.options.closeReason !== undefined ||\n context.clearItemMetadataKeys.has(\"close_reason\")\n ) {\n if (context.clearItemMetadataKeys.has(\"close_reason\")) {\n delete document.metadata.close_reason;\n } else {\n const closeReason = context.options.closeReason?.trim() ?? \"\";\n if (closeReason.length === 0) {\n throw new PmCliError(\n \"--close-reason must not be empty\",\n EXIT_CODE.USAGE,\n );\n }\n document.metadata.close_reason = closeReason;\n }\n changedFields.push(\"close_reason\");\n return;\n }\n if (\n context.options.status !== undefined &&\n previousStatusNormalized === context.statusRegistry.close_status &&\n document.metadata.status !== context.statusRegistry.canceled_status &&\n document.metadata.close_reason !== undefined\n ) {\n delete document.metadata.close_reason;\n changedFields.push(\"close_reason\");\n }\n}\n\nfunction applyPriorityTypeAndOptions(\n document: ItemDocument,\n context: UpdateMutationContext,\n changedFields: string[],\n): string {\n let activeTypeName =\n resolveTypeName(document.metadata.type, context.typeRegistry) ??\n document.metadata.type;\n if (context.options.priority !== undefined) {\n document.metadata.priority = ensurePriority(context.options.priority);\n changedFields.push(\"priority\");\n }\n if (context.options.type !== undefined) {\n const resolvedTypeName = resolveTypeName(\n context.options.type,\n context.typeRegistry,\n );\n if (!resolvedTypeName) {\n throw new PmCliError(\n buildInvalidTypeError(\n context.options.type,\n context.typeRegistry.types,\n resolveItemTypesFilePath(context.pmRoot, context.settings.schema),\n ),\n EXIT_CODE.USAGE,\n );\n }\n document.metadata.type = resolvedTypeName;\n activeTypeName = resolvedTypeName;\n changedFields.push(\"type\");\n }\n enforceUpdateOptionsByType(\n activeTypeName,\n context.options,\n context.typeRegistry,\n context.runtimeFieldRegistry,\n context.extensionFieldNames,\n );\n applyTypeOptionMutation(document, context, activeTypeName, changedFields);\n return activeTypeName;\n}\n\nfunction applyTypeOptionMutation(\n document: ItemDocument,\n context: UpdateMutationContext,\n activeTypeName: string,\n changedFields: string[],\n): void {\n if (\n context.options.typeOption !== undefined ||\n context.clearItemMetadataKeys.has(\"type_options\")\n ) {\n if (context.clearItemMetadataKeys.has(\"type_options\")) {\n delete document.metadata.type_options;\n } else {\n const parsedTypeOptions = parseTypeOptionEntries(\n context.options.typeOption ?? [],\n );\n const validation = validateTypeOptions(\n activeTypeName,\n parsedTypeOptions,\n context.typeRegistry,\n );\n if (validation.errors.length > 0) {\n throw new PmCliError(validation.errors.join(\"; \"), EXIT_CODE.USAGE);\n }\n document.metadata.type_options = validation.normalized;\n }\n changedFields.push(\"type_options\");\n return;\n }\n if (\n context.options.type === undefined ||\n document.metadata.type_options === undefined\n ) {\n return;\n }\n const validation = validateTypeOptions(\n activeTypeName,\n document.metadata.type_options,\n context.typeRegistry,\n );\n if (validation.errors.length > 0) {\n throw new PmCliError(\n `Current type options are incompatible with type \"${activeTypeName}\". ${validation.errors.join(\"; \")}. Use --clear-type-options to clear them.`,\n EXIT_CODE.USAGE,\n );\n }\n document.metadata.type_options = validation.normalized;\n}\n\nfunction applyDependencyMutations(\n document: ItemDocument,\n context: UpdateMutationContext,\n changedFields: string[],\n): void {\n if (\n context.options.dep === undefined &&\n context.options.depRemove === undefined &&\n !context.clearItemMetadataKeys.has(\"dependencies\")\n ) {\n return;\n }\n let nextDependencies = context.clearItemMetadataKeys.has(\"dependencies\")\n ? []\n : [...(document.metadata.dependencies ?? [])];\n if (context.dependencyUpdates.additions.length > 0) {\n const seen = new Set(nextDependencies.map((entry) => dependencyKey(entry)));\n for (const addition of context.dependencyUpdates.additions) {\n const key = dependencyKey(addition);\n if (!seen.has(key)) {\n nextDependencies.push(addition);\n seen.add(key);\n }\n }\n }\n if (context.dependencyRemovals.length > 0) {\n nextDependencies = nextDependencies.filter(\n (entry) =>\n !context.dependencyRemovals.some((selector) =>\n matchesDependencySelector(entry, selector),\n ),\n );\n }\n if (nextDependencies.length === 0) {\n delete document.metadata.dependencies;\n } else {\n document.metadata.dependencies = nextDependencies;\n }\n changedFields.push(\"dependencies\");\n}\n\nfunction applyLogCollectionMutations(\n document: ItemDocument,\n context: UpdateMutationContext,\n changedFields: string[],\n): void {\n applyLogCollectionMutation(\n document,\n \"comments\",\n context.options.comment,\n context.commentUpdates.values as Comment[] | undefined,\n context.clearItemMetadataKeys,\n changedFields,\n );\n applyLogCollectionMutation(\n document,\n \"notes\",\n context.options.note,\n context.noteUpdates.values as LogNote[] | undefined,\n context.clearItemMetadataKeys,\n changedFields,\n );\n applyLogCollectionMutation(\n document,\n \"learnings\",\n context.options.learning,\n context.learningUpdates.values as LogNote[] | undefined,\n context.clearItemMetadataKeys,\n changedFields,\n );\n}\n\nfunction applyLogCollectionMutation(\n document: ItemDocument,\n key: \"comments\" | \"notes\" | \"learnings\",\n optionValue: string[] | undefined,\n values: Comment[] | LogNote[] | undefined,\n clearItemMetadataKeys: ReadonlySet<string>,\n changedFields: string[],\n): void {\n if (optionValue === undefined && !clearItemMetadataKeys.has(key)) {\n return;\n }\n if (clearItemMetadataKeys.has(key) || !values || values.length === 0) {\n delete document.metadata[key];\n } else {\n document.metadata[key] = [\n ...(document.metadata[key] ?? []),\n ...values,\n ] as never;\n }\n changedFields.push(key);\n}\n\nfunction applyEvidenceCollectionMutations(\n document: ItemDocument,\n context: UpdateMutationContext,\n changedFields: string[],\n): void {\n applyUniqueLinkedCollectionMutation(\n document,\n \"files\",\n context.options.file,\n context.fileUpdates.values,\n fileKey,\n context.clearItemMetadataKeys,\n changedFields,\n );\n applyTestCollectionMutation(document, context, changedFields);\n applyUniqueLinkedCollectionMutation(\n document,\n \"docs\",\n context.options.doc,\n context.docUpdates.values,\n docKey,\n context.clearItemMetadataKeys,\n changedFields,\n );\n}\n\nfunction applyUniqueLinkedCollectionMutation<T extends LinkedFile | LinkedDoc>(\n document: ItemDocument,\n key: \"files\" | \"docs\",\n optionValue: string[] | undefined,\n values: T[] | undefined,\n keyOf: (value: T) => string,\n clearItemMetadataKeys: ReadonlySet<string>,\n changedFields: string[],\n): void {\n if (optionValue === undefined && !clearItemMetadataKeys.has(key)) {\n return;\n }\n if (clearItemMetadataKeys.has(key) || !values || values.length === 0) {\n delete document.metadata[key];\n } else {\n const next = [...((document.metadata[key] as T[] | undefined) ?? [])];\n const seen = new Set(next.map((entry) => keyOf(entry)));\n for (const entry of values) {\n const keyValue = keyOf(entry);\n if (!seen.has(keyValue)) {\n next.push(entry);\n seen.add(keyValue);\n }\n }\n document.metadata[key] = next as never;\n }\n changedFields.push(key);\n}\n\nfunction applyTestCollectionMutation(\n document: ItemDocument,\n context: UpdateMutationContext,\n changedFields: string[],\n): void {\n if (\n context.options.test === undefined &&\n !context.clearItemMetadataKeys.has(\"tests\")\n ) {\n return;\n }\n if (\n context.clearItemMetadataKeys.has(\"tests\") &&\n context.options.replaceTests === true\n ) {\n document.metadata.tests =\n dedupeLinkedTests(context.testUpdates.values) ?? [];\n } else if (\n context.clearItemMetadataKeys.has(\"tests\") ||\n !context.testUpdates.values ||\n context.testUpdates.values.length === 0\n ) {\n delete document.metadata.tests;\n } else {\n document.metadata.tests = dedupeLinkedTests([\n ...(document.metadata.tests ?? []),\n ...context.testUpdates.values,\n ]);\n }\n if (\n document.metadata.tests !== undefined &&\n document.metadata.tests.length === 0\n ) {\n delete document.metadata.tests;\n }\n changedFields.push(\"tests\");\n}\n\nfunction dedupeLinkedTests(\n values: LinkedTest[] | undefined,\n): LinkedTest[] | undefined {\n if (!values || values.length === 0) {\n return undefined;\n }\n const next: LinkedTest[] = [];\n const seen = new Set<string>();\n for (const entry of values) {\n const key = testKey(entry);\n if (!seen.has(key)) {\n next.push(entry);\n seen.add(key);\n }\n }\n return next;\n}\n\nfunction applyTagsAndPlanningMutations(\n document: ItemDocument,\n context: UpdateMutationContext,\n scalarMutationContext: UpdateScalarMutationContext,\n): void {\n const addTagsValues = context.options.addTags;\n const removeTagsValues = context.options.removeTags;\n const hasAdditiveTagMutation =\n (Array.isArray(addTagsValues) && addTagsValues.length > 0) ||\n (Array.isArray(removeTagsValues) && removeTagsValues.length > 0);\n if (\n context.options.tags !== undefined ||\n context.clearItemMetadataKeys.has(\"tags\") ||\n hasAdditiveTagMutation\n ) {\n const baseTags = context.clearItemMetadataKeys.has(\"tags\")\n ? []\n : context.options.tags !== undefined\n ? parseTags(context.options.tags)\n : Array.isArray(document.metadata.tags)\n ? [...(document.metadata.tags as string[])]\n : [];\n document.metadata.tags = applyTagRemovals(\n mergeAdditiveTags(baseTags, addTagsValues),\n removeTagsValues,\n );\n scalarMutationContext.changedFields.push(\"tags\");\n }\n applyUpdateScalarMutations(\n UPDATE_POST_TAG_SCALAR_MUTATIONS,\n context.options,\n scalarMutationContext,\n );\n applyOrderMutation(document, context, scalarMutationContext.changedFields);\n}\n\n// GH-612: `--add-ac` / `--remove-ac` edit individual \"; \"-separated criteria so\n// concurrent branch edits with disjoint additions merge instead of clobbering\n// the whole acceptance_criteria value (tag-API parity). Runs after the scalar\n// mutations so composition with a `--ac` replace uses the replaced base.\nfunction applyAcceptanceCriteriaAdditiveMutation(\n document: ItemDocument,\n context: UpdateMutationContext,\n scalarMutationContext: UpdateScalarMutationContext,\n warnings: string[],\n): void {\n const addValues = context.options.addAc;\n const removeValues = context.options.removeAc;\n if (\n !(Array.isArray(addValues) && addValues.length > 0) &&\n !(Array.isArray(removeValues) && removeValues.length > 0)\n ) {\n return;\n }\n const mutation = applyAcceptanceCriteriaMutations(\n splitAcceptanceCriteria(document.metadata.acceptance_criteria),\n addValues,\n removeValues,\n );\n for (const unmatched of mutation.unmatchedRemovals) {\n warnings.push(`remove_ac_unmatched:${unmatched}`);\n }\n const nextValue = mutation.criteria.join(\"; \");\n if (document.metadata.acceptance_criteria === nextValue) {\n return;\n }\n if (\n nextValue === \"\" &&\n document.metadata.acceptance_criteria === undefined\n ) {\n return;\n }\n document.metadata.acceptance_criteria = nextValue;\n if (!scalarMutationContext.changedFields.includes(\"acceptance_criteria\")) {\n scalarMutationContext.changedFields.push(\"acceptance_criteria\");\n }\n}\n\nfunction applyOrderMutation(\n document: ItemDocument,\n context: UpdateMutationContext,\n changedFields: string[],\n): void {\n const orderRaw = context.options.order ?? context.options.rank;\n if (orderRaw === undefined && !context.clearItemMetadataKeys.has(\"order\")) {\n return;\n }\n if (context.clearItemMetadataKeys.has(\"order\")) {\n delete document.metadata.order;\n } else {\n const parsedOrder = parseOptionalNumber(orderRaw ?? \"\", \"order\");\n if (!Number.isInteger(parsedOrder)) {\n throw new PmCliError(\"Order must be an integer\", EXIT_CODE.USAGE);\n }\n document.metadata.order = parsedOrder;\n }\n changedFields.push(\"order\");\n}\n\nfunction applyOwnershipAndIssueMutations(\n document: ItemDocument,\n context: UpdateMutationContext,\n scalarMutationContext: UpdateScalarMutationContext,\n warnings: string[],\n): void {\n applyAssigneeMutation(document, context, scalarMutationContext.changedFields);\n applyParentMutation(document, context, scalarMutationContext.changedFields);\n applyUpdateScalarMutations(\n UPDATE_STAKEHOLDER_SCALAR_MUTATIONS,\n context.options,\n scalarMutationContext,\n );\n applySprintReleaseMutation(\n document,\n context,\n \"sprint\",\n warnings,\n scalarMutationContext.changedFields,\n );\n applySprintReleaseMutation(\n document,\n context,\n \"release\",\n warnings,\n scalarMutationContext.changedFields,\n );\n applyBlockedByMutation(\n document,\n context,\n scalarMutationContext.changedFields,\n );\n applyUpdateScalarMutations(\n UPDATE_ISSUE_SCALAR_MUTATIONS,\n context.options,\n scalarMutationContext,\n );\n}\n\nfunction applyAssigneeMutation(\n document: ItemDocument,\n context: UpdateMutationContext,\n changedFields: string[],\n): void {\n if (\n context.options.assignee === undefined &&\n !context.clearItemMetadataKeys.has(\"assignee\")\n ) {\n return;\n }\n if (context.clearItemMetadataKeys.has(\"assignee\")) {\n delete document.metadata.assignee;\n } else {\n const assignee = context.options.assignee?.trim() ?? \"\";\n if (assignee === \"\") {\n throw new PmCliError(\n \"--assignee must not be empty. Use --unset assignee to clear it.\",\n EXIT_CODE.USAGE,\n );\n }\n document.metadata.assignee = assignee;\n }\n changedFields.push(\"assignee\");\n}\n\nfunction applyParentMutation(\n document: ItemDocument,\n context: UpdateMutationContext,\n changedFields: string[],\n): void {\n if (\n context.options.parent === undefined &&\n !context.clearItemMetadataKeys.has(\"parent\")\n ) {\n return;\n }\n if (context.clearItemMetadataKeys.has(\"parent\")) {\n delete document.metadata.parent;\n } else {\n document.metadata.parent = context.resolvedParentValue ?? \"\";\n }\n changedFields.push(\"parent\");\n}\n\nfunction applySprintReleaseMutation(\n document: ItemDocument,\n context: UpdateMutationContext,\n key: \"sprint\" | \"release\",\n warnings: string[],\n changedFields: string[],\n): void {\n if (\n context.options[key] === undefined &&\n !context.clearItemMetadataKeys.has(key)\n ) {\n return;\n }\n if (context.clearItemMetadataKeys.has(key)) {\n delete document.metadata[key];\n } else {\n const validation = validateSprintOrReleaseValue(\n key,\n context.options[key] ?? \"\",\n context.settings.validation.sprint_release_format,\n );\n document.metadata[key] = validation.value;\n warnings.push(...validation.warnings);\n }\n changedFields.push(key);\n}\n\nfunction applyBlockedByMutation(\n document: ItemDocument,\n context: UpdateMutationContext,\n changedFields: string[],\n): void {\n if (\n context.options.blockedBy === undefined &&\n !context.clearItemMetadataKeys.has(\"blocked_by\")\n ) {\n return;\n }\n if (context.clearItemMetadataKeys.has(\"blocked_by\")) {\n delete document.metadata.blocked_by;\n } else {\n document.metadata.blocked_by = context.options.blockedBy?.trim() ?? \"\";\n }\n changedFields.push(\"blocked_by\");\n if (\n context.clearItemMetadataKeys.has(\"blocked_by\") ||\n context.resolvedBlockedByDependencyId !== undefined\n ) {\n applyBlockedByDependencyEdge(\n document.metadata,\n context.resolvedBlockedByDependencyId,\n context.nowIso,\n context.author,\n changedFields,\n );\n }\n}\n\nfunction applyScheduleMutations(\n document: ItemDocument,\n context: UpdateMutationContext,\n changedFields: string[],\n): void {\n if (\n context.options.reminder !== undefined ||\n context.clearItemMetadataKeys.has(\"reminders\")\n ) {\n if (context.clearItemMetadataKeys.has(\"reminders\")) {\n delete document.metadata.reminders;\n } else {\n document.metadata.reminders = parseReminderEntries(\n context.options.reminder ?? [],\n context.nowValue,\n { valueMode: \"trimmed\" },\n );\n }\n changedFields.push(\"reminders\");\n }\n if (\n context.options.event !== undefined ||\n context.clearItemMetadataKeys.has(\"events\")\n ) {\n if (context.clearItemMetadataKeys.has(\"events\")) {\n delete document.metadata.events;\n } else {\n document.metadata.events = parseEventEntries(\n context.options.event ?? [],\n context.nowValue,\n {\n allDayEmptyGuard: \"truthy\",\n recurrenceEmptyNumericGuard: \"truthy\",\n },\n );\n }\n changedFields.push(\"events\");\n }\n}\n\nfunction applyRuntimeAndRegisteredFieldMutations(\n metadataRecord: Record<string, unknown>,\n context: UpdateMutationContext,\n changedFields: string[],\n): void {\n clearDynamicFields(\n metadataRecord,\n context.runtimeFieldRegistry.definitions.map(\n (definition) => definition.metadata_key,\n ),\n context.clearItemMetadataKeys,\n changedFields,\n );\n clearDynamicFields(\n metadataRecord,\n context.extensionFieldNames,\n context.clearItemMetadataKeys,\n changedFields,\n );\n for (const [fieldKey, fieldValue] of Object.entries(\n context.runtimeFieldUpdates,\n )) {\n if (context.clearItemMetadataKeys.has(fieldKey)) {\n const fieldFlag = fieldKey.replaceAll(\"_\", \"-\");\n const definition = context.runtimeFieldRegistry.definitions.find(\n (candidate) => candidate.metadata_key === fieldKey,\n );\n const updateFlag = definition?.cli_flag ?? fieldFlag;\n throw new PmCliError(\n `Cannot combine --unset ${fieldFlag} with --${updateFlag}`,\n EXIT_CODE.USAGE,\n );\n }\n if (stableValueEquals(metadataRecord[fieldKey], fieldValue)) {\n continue;\n }\n metadataRecord[fieldKey] = fieldValue;\n changedFields.push(fieldKey);\n }\n\n const registeredItemFieldUpdates = parseRegisteredItemFieldAssignments(\n context.options.field,\n context.extensionRegistrations,\n );\n for (const fieldKey of Object.keys(registeredItemFieldUpdates)) {\n if (context.clearItemMetadataKeys.has(fieldKey)) {\n throw new PmCliError(\n `Cannot combine --unset ${fieldKey.replaceAll(\"_\", \"-\")} with --field ${fieldKey}=...`,\n EXIT_CODE.USAGE,\n );\n }\n }\n for (const [fieldKey, fieldValue] of Object.entries(\n registeredItemFieldUpdates,\n )) {\n if (!stableValueEquals(metadataRecord[fieldKey], fieldValue)) {\n metadataRecord[fieldKey] = fieldValue;\n changedFields.push(fieldKey);\n }\n }\n}\n\nfunction clearDynamicFields(\n metadataRecord: Record<string, unknown>,\n fieldKeys: readonly string[],\n clearItemMetadataKeys: ReadonlySet<string>,\n changedFields: string[],\n): void {\n for (const fieldKey of fieldKeys) {\n if (\n !clearItemMetadataKeys.has(fieldKey) ||\n metadataRecord[fieldKey] === undefined\n ) {\n continue;\n }\n delete metadataRecord[fieldKey];\n changedFields.push(fieldKey);\n }\n}\n\nfunction mutateUpdateDocument(\n document: ItemDocument,\n context: UpdateMutationContext,\n): { changedFields: string[]; warnings: string[] } {\n const beforeMetadata = structuredClone(toItemRecord(document.metadata));\n const beforeBody = document.body;\n const changedFields: string[] = [];\n const warnings: string[] = [];\n const previousStatusNormalized = applySimpleItemMutations(\n document,\n context.options,\n context.statusRegistry,\n changedFields,\n );\n const metadataRecord = toItemRecord(document.metadata);\n const scalarMutationContext: UpdateScalarMutationContext = {\n metadataRecord,\n clearItemMetadataKeys: context.clearItemMetadataKeys,\n changedFields,\n nowValue: context.nowValue,\n };\n\n applyStatusAndCloseReasonMutations(\n document,\n context,\n previousStatusNormalized,\n changedFields,\n );\n applyPriorityTypeAndOptions(document, context, changedFields);\n applyDependencyMutations(document, context, changedFields);\n applyLogCollectionMutations(document, context, changedFields);\n applyEvidenceCollectionMutations(document, context, changedFields);\n applyTagsAndPlanningMutations(document, context, scalarMutationContext);\n applyAcceptanceCriteriaAdditiveMutation(\n document,\n context,\n scalarMutationContext,\n warnings,\n );\n applyOwnershipAndIssueMutations(\n document,\n context,\n scalarMutationContext,\n warnings,\n );\n if (\n normalizeStatusInput(document.metadata.status, context.statusRegistry) ===\n context.statusRegistry.canceled_status &&\n document.metadata.assignee !== undefined\n ) {\n delete document.metadata.assignee;\n if (!changedFields.includes(\"assignee\")) {\n changedFields.push(\"assignee\");\n }\n }\n applyScheduleMutations(document, context, changedFields);\n applyRuntimeAndRegisteredFieldMutations(\n metadataRecord,\n context,\n changedFields,\n );\n try {\n applyRegisteredItemFieldDefaultsAndValidation(\n metadataRecord,\n context.extensionRegistrations,\n { skipDefaultFields: context.clearItemMetadataKeys },\n );\n } catch (error: unknown) {\n throw new PmCliError(\n error instanceof Error\n ? error.message\n : \"Invalid extension item field values\",\n EXIT_CODE.USAGE,\n );\n }\n const afterMetadata = toItemRecord(document.metadata);\n const actualChangedFields = [...new Set(changedFields)].filter((field) =>\n field === \"body\"\n ? document.body !== beforeBody\n : !stableValueEquals(beforeMetadata[field], afterMetadata[field]),\n );\n return { changedFields: actualChangedFields, warnings };\n}\n\n/** Implements run update for the public runtime surface of this module. */\nexport async function runUpdate(\n id: string,\n options: UpdateCommandOptions,\n global: GlobalOptions,\n): Promise<UpdateResult> {\n options = await resolveStdinUpdateOptions(options);\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await assertUpdateTrackerInitialized(pmRoot);\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);\n const extensionRegistrations = getActiveExtensionRegistrations();\n const extensionFieldNames = collectRegisteredItemFieldNames(\n extensionRegistrations,\n );\n const typeRegistry = resolveItemTypeRegistry(\n settings,\n extensionRegistrations,\n );\n // Per-type allowed-transition enforcement is read RAW (not preset-derived) so\n // existing projects are unaffected when unset; defaults to \"off\".\n const workflowEnforcement: GovernanceWorkflowEnforcement =\n settings.governance.workflow_enforcement ?? \"off\";\n const typeWorkflows =\n workflowEnforcement === \"off\" ? [] : resolveTypeWorkflows(settings.schema);\n const parentReferencePolicy = settings.validation.parent_reference;\n const unsetTargets = parseUpdateUnsetTargets(\n options.unset,\n runtimeFieldRegistry,\n extensionFieldNames,\n );\n const clearOptionKeys = new Set<string>(unsetTargets.optionKeys);\n const clearItemMetadataKeys = new Set<string>(unsetTargets.metadataKeys);\n\n validateReplaceOptions(options);\n applyClearCollectionDefinitions({\n definitions: buildClearCollectionDefinitions(options),\n options,\n clearOptionKeys,\n clearItemMetadataKeys,\n });\n enforceOwnershipBypassScope(id, options, clearItemMetadataKeys);\n\n rejectUnsetScalarConflicts(options, unsetTargets);\n rejectLegacyScalarTokens(options);\n\n const author = toAuthor(options.author, settings.author_default);\n const nowValue = new Date();\n const nowIso = nowValue.toISOString();\n const dependencyUpdates = parseDependencyAdditions(\n options.dep,\n settings.id_prefix,\n nowIso,\n );\n const dependencyRemovals = parseDependencyRemovals(\n options.depRemove,\n settings.id_prefix,\n );\n const parsedCommentUpdates = parseLogSeed(\n \"--comment\",\n options.comment,\n nowIso,\n author,\n );\n const commentUpdates =\n options.ownershipMetadataBypass === true && parsedCommentUpdates.values\n ? {\n ...parsedCommentUpdates,\n values: parsedCommentUpdates.values.map((entry) => ({\n ...entry,\n author,\n })),\n }\n : parsedCommentUpdates;\n const noteUpdates = parseLogSeed(\"--note\", options.note, nowIso, author);\n const learningUpdates = parseLogSeed(\n \"--learning\",\n options.learning,\n nowIso,\n author,\n );\n const fileUpdates = parseFiles(options.file);\n const testUpdates = parseTests(options.test);\n const docUpdates = parseDocs(options.doc);\n const workflowTransitionWarnings: string[] = [];\n const parentReference = await resolveParentReferenceForUpdate({\n id,\n options,\n unsetTargets,\n pmRoot,\n settings,\n typeRegistry,\n parentReferencePolicy,\n });\n\n // pm-kyd6: resolve the --blocked-by target up front (async) so the sync\n // mutate callback can mirror create.ts and add a `blocked_by` dependency edge.\n const blockedByResolution = await resolveBlockedByDependencyTarget(\n options.blockedBy,\n clearItemMetadataKeys.has(\"blocked_by\"),\n pmRoot,\n settings.id_prefix,\n settings.item_format,\n typeRegistry.type_to_folder,\n );\n const resolvedBlockedByDependencyId = blockedByResolution.id;\n const parentReferenceWarnings = [\n ...parentReference.warnings,\n ...blockedByResolutionWarnings(blockedByResolution),\n ];\n\n const runtimeFieldUpdates = collectRuntimeUpdateFieldValues(\n options as Record<string, unknown>,\n runtimeFieldRegistry,\n options.runtimeFieldCommands,\n );\n const fieldFlags = buildUpdateFieldFlags(options, runtimeFieldUpdates);\n const changedFlags = Object.values(fieldFlags).some(Boolean);\n\n if (!changedFlags) {\n return buildNoopUpdateResult({ pmRoot, id, settings, typeRegistry });\n }\n\n workflowTransitionWarnings.push(\n ...(await collectWorkflowTransitionWarnings({\n options,\n fieldFlags,\n workflowEnforcement,\n typeWorkflows,\n statusRegistry,\n typeRegistry,\n pmRoot,\n id,\n settings,\n })),\n );\n const routedClose = await routeCloseStatusUpdate({\n options,\n fieldFlags,\n statusRegistry,\n workflowTransitionWarnings,\n global,\n id,\n });\n if (routedClose) {\n return routedClose;\n }\n assertMatchingOrderRank(options);\n\n let graphBeforeUpdate =\n fieldFlags.dep || fieldFlags.depRemove || fieldFlags.blockedBy\n ? await listAllItemMetadataLight(\n pmRoot,\n settings.item_format,\n typeRegistry.type_to_folder,\n undefined,\n settings.schema,\n )\n : undefined;\n\n const result = await mutateItem({\n pmRoot,\n settings,\n typeToFolder: typeRegistry.type_to_folder,\n id,\n op:\n options.ownershipMetadataBypass === true || options.ownershipDependencyBypass === true\n ? \"update_ownership_bypass\"\n : \"update\",\n author,\n message: options.message,\n force: options.force,\n bypassAssigneeConflict:\n options.ownershipMetadataBypass === true || options.ownershipDependencyBypass === true,\n extensionFieldNames,\n skipNoop: true,\n mutate(document) {\n graphBeforeUpdate = graphBeforeUpdate?.map((item) =>\n item.id === document.metadata.id\n ? structuredClone(document.metadata)\n : item,\n );\n return mutateUpdateDocument(document, {\n options,\n settings,\n typeRegistry,\n statusRegistry,\n runtimeFieldRegistry,\n extensionRegistrations,\n extensionFieldNames,\n clearItemMetadataKeys,\n dependencyUpdates,\n dependencyRemovals,\n commentUpdates,\n noteUpdates,\n learningUpdates,\n fileUpdates,\n testUpdates,\n docUpdates,\n resolvedParentValue: parentReference.resolvedParentValue,\n resolvedBlockedByDependencyId,\n runtimeFieldUpdates,\n nowValue,\n nowIso,\n author,\n pmRoot,\n });\n },\n });\n const orderingCycleWarnings = graphBeforeUpdate\n ? collectNewOrderingCycleWarnings(\n graphBeforeUpdate,\n graphBeforeUpdate.map((item) =>\n item.id === result.item.id ? result.item : item,\n ),\n result.item.id,\n )\n : [];\n\n return {\n item: toItemRecord(result.item),\n changed_fields: result.changedFields,\n warnings: [\n ...workflowTransitionWarnings,\n ...parentReferenceWarnings,\n ...orderingCycleWarnings,\n ...result.warnings,\n ],\n };\n}\n\n/* c8 ignore stop */\n/** Public contract for test only update command, shared by SDK and presentation-layer consumers. */\nexport const _testOnlyUpdateCommand = {\n applyStatusAndCloseReasonMutations,\n collectProvidedUpdatePolicyOptions,\n buildOwnershipBypassRestrictedOptionsError,\n enforceOwnershipBypassScope,\n enforceTypeWorkflowTransition,\n matchesDependencySelector,\n normalizeLegacyNoneUpdateOptions,\n normalizeUpdatePolicyOptionKey,\n parseDependencyAdditions,\n parseDependencyRemovals,\n parseUpdateUnsetTargets,\n reconcileBlockedByDependency,\n resolveRuntimeUnsetDefinition: (\n token: string,\n registry: RuntimeFieldRegistry | undefined,\n ) => resolveRuntimeUnsetFieldDefinition(token, \"update\", registry),\n};\n"],"names":["disallowedFlags","validation"],"mappings":"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","debugId":"f7652cf1-aaa9-5fe4-97b5-23dcce2a9d9f"}
@@ -1,6 +1,6 @@
1
1
  // dist/core/config/nested-settings.js
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="035d439d-366f-56cd-b96e-5b36b3e82210")}catch(e){}}();
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a1368a75-c772-5efa-b68d-e57fada829a4")}catch(e){}}();
4
4
  var NESTED_SETTING_DESCRIPTORS = [
5
5
  {
6
6
  key: "search_provider",
@@ -204,6 +204,14 @@ var NESTED_SETTING_DESCRIPTORS = [
204
204
  min: 0,
205
205
  summary: "Bounded jittered wait in milliseconds before a contended item mutation fails with lock_conflict; 0 fails fast. PM_LOCK_WAIT_MS overrides per invocation."
206
206
  },
207
+ {
208
+ key: "ids_token_length",
209
+ path: "ids.token_length",
210
+ kind: "integer",
211
+ min: 4,
212
+ max: 12,
213
+ summary: "Random base36 token length for newly minted item ids (4-12, default 4). Raise it to shrink cross-branch id collision odds in concurrent multi-agent workflows (pm-pibw)."
214
+ },
207
215
  {
208
216
  key: "checkpoints_retention_days",
209
217
  path: "checkpoints.retention_days",
@@ -327,6 +335,14 @@ function parseNestedIntegerValue(descriptor, rawValue, value) {
327
335
  }
328
336
  };
329
337
  }
338
+ if (descriptor.max !== void 0 && value > descriptor.max) {
339
+ return {
340
+ ok: false,
341
+ error: {
342
+ message: `Config set ${descriptor.key} requires an integer <= ${descriptor.max}, got "${rawValue}"`
343
+ }
344
+ };
345
+ }
330
346
  return { ok: true, parsed: { descriptor, value } };
331
347
  }
332
348
  function parseNestedRatioValue(descriptor, rawValue, value) {
@@ -423,6 +439,6 @@ export {
423
439
  readNestedSettingValue,
424
440
  writeNestedSettingValue
425
441
  };
426
- //# sourceMappingURL=chunk-DJAGYYCQ.js.map
442
+ //# sourceMappingURL=chunk-SC2HMDGB.js.map
427
443
 
428
- //# debugId=035d439d-366f-56cd-b96e-5b36b3e82210
444
+ //# debugId=a1368a75-c772-5efa-b68d-e57fada829a4
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../core/config/nested-settings.ts"],"sourcesContent":["/**\n * Nested leaf settings exposed via `pm config <scope> set/get <key> <value>`.\n *\n * These are simple string/number leaves of {@link PmSettings} (provider URLs,\n * vector-store adapter, search tuning) that previously required hand-editing\n * `.agents/pm/settings.json`. They live here so the same dotted path is\n * documented in one place and surfaced both to the config dispatcher and to\n * `pm config list` (so `pm config list --json` is discoverable).\n *\n * Shape conventions:\n * - `path` is the dotted JSON path in {@link PmSettings} (e.g. `search.provider`).\n * - `kind` is the value shape: \"string\" | \"boolean\" | \"integer\" | \"number\" | \"ratio\"\n * - \"ratio\" must be a finite number in [0, 1].\n * - \"integer\" must be a finite non-negative integer. Set `min: 1` for keys\n * where the runtime silently falls back when 0 is supplied (e.g. batch\n * size, timeout, max-results limits).\n * - \"number\" must be a finite number — negatives ARE allowed (e.g. score\n * thresholds may legitimately be negative when a provider normalizes\n * scores into a signed range).\n *\n * Adding a key here makes it acceptable to `pm config <scope> set <key> <value>`\n * with no other code changes — the dispatcher walks the dotted path on the\n * already-validated PmSettings shape.\n */\n\n/** Supported coercion shapes for nested settings exposed through `pm config`. */\nexport type NestedSettingKind =\n | \"string\"\n | \"boolean\"\n | \"integer\"\n | \"number\"\n | \"ratio\";\n\n/** Documents the nested setting descriptor payload exchanged by command, SDK, and package integrations. */\nexport interface NestedSettingDescriptor {\n /** CLI key (snake_case). Kebab-case form is accepted by normalizing `-` → `_`. */\n key: string;\n /** Dotted JSON path in PmSettings. */\n path: string;\n /** Value shape. */\n kind: NestedSettingKind;\n /** Short human-facing summary for `pm config list`. */\n summary: string;\n /** Optional accepted values for string settings. */\n choices?: readonly string[];\n /** Require a non-empty trimmed string value for string settings. */\n non_empty?: boolean;\n /** Optional minimum value for `integer` / `number` kinds. When set, `parseNestedSettingValue` rejects values strictly below `min`. Useful for settings where 0 would be silently ignored by the runtime (batch sizes, timeouts, max-results limits). */\n min?: number;\n /** Optional maximum value for `integer` / `number` kinds. When set, `parseNestedSettingValue` rejects values strictly above `max` (bounded knobs like `ids.token_length`). */\n max?: number;\n}\n\n/** Search/provider/vector-store leaves. Order is the display order in `pm config list` and in error hints. */\nexport const NESTED_SETTING_DESCRIPTORS: readonly NestedSettingDescriptor[] = [\n {\n key: \"search_provider\",\n path: \"search.provider\",\n kind: \"string\",\n summary:\n \"Search embedding provider name (e.g. openai, ollama, or an extension provider).\",\n },\n {\n key: \"search_mutation_refresh_policy\",\n path: \"search.mutation_refresh_policy\",\n kind: \"string\",\n choices: [\"cache_only\", \"semantic_configured\", \"semantic_auto\"],\n summary:\n \"Mutation-time search refresh policy: cache_only, semantic_configured, or semantic_auto.\",\n },\n {\n key: \"search_query_expansion_enabled\",\n path: \"search.query_expansion.enabled\",\n kind: \"boolean\",\n summary: \"Enable or disable query expansion for semantic/hybrid search.\",\n },\n {\n key: \"search_query_expansion_provider\",\n path: \"search.query_expansion.provider\",\n kind: \"string\",\n summary:\n \"Query expansion provider name (built-in openai/ollama or extension provider).\",\n },\n {\n key: \"search_rerank_enabled\",\n path: \"search.rerank.enabled\",\n kind: \"boolean\",\n summary: \"Enable or disable post-retrieval reranking for hybrid search.\",\n },\n {\n key: \"search_rerank_model\",\n path: \"search.rerank.model\",\n kind: \"string\",\n summary: \"Rerank model name override used by built-in providers.\",\n },\n {\n key: \"search_rerank_top_k\",\n path: \"search.rerank.top_k\",\n kind: \"integer\",\n min: 1,\n summary:\n \"Number of top hybrid candidates to rerank when rerank is enabled.\",\n },\n {\n key: \"search_embedding_model\",\n path: \"search.embedding_model\",\n kind: \"string\",\n summary:\n \"Default embedding model name (overrides provider-specific model when set).\",\n },\n {\n key: \"search_embedding_corpus_max_characters\",\n path: \"search.embedding_corpus_max_characters\",\n kind: \"integer\",\n min: 1,\n summary: \"Maximum semantic corpus characters per item before truncation.\",\n },\n {\n key: \"search_embedding_batch_size\",\n path: \"search.embedding_batch_size\",\n kind: \"integer\",\n min: 1,\n summary: \"Number of items embedded per request batch.\",\n },\n {\n key: \"search_embedding_timeout_ms\",\n path: \"search.embedding_timeout_ms\",\n kind: \"integer\",\n min: 1,\n summary: \"Per-request embedding timeout in milliseconds.\",\n },\n {\n key: \"search_score_threshold\",\n path: \"search.score_threshold\",\n kind: \"number\",\n summary: \"Minimum score for a hit to be returned (0 keeps all matches).\",\n },\n {\n key: \"search_hybrid_semantic_weight\",\n path: \"search.hybrid_semantic_weight\",\n kind: \"ratio\",\n summary:\n \"Hybrid mode semantic weight in [0, 1] (1-weight goes to keyword).\",\n },\n {\n key: \"search_max_results\",\n path: \"search.max_results\",\n kind: \"integer\",\n min: 1,\n summary: \"Default upper bound on search hits when --limit is not supplied.\",\n },\n {\n key: \"search_bm25_k1\",\n path: \"search.bm25.k1\",\n kind: \"number\",\n min: 0,\n summary:\n \"Offline BM25 term-frequency saturation (k1); higher saturates repeated terms slower (default 1.2).\",\n },\n {\n key: \"search_bm25_b\",\n path: \"search.bm25.b\",\n kind: \"ratio\",\n summary:\n \"Offline BM25 document-length normalization (b) in [0, 1]; 0 disables, 1 fully normalizes (default 0.75).\",\n },\n {\n key: \"openai_base_url\",\n path: \"providers.openai.base_url\",\n kind: \"string\",\n summary: \"OpenAI-compatible API base URL (LM Studio/vLLM also use this).\",\n },\n {\n key: \"openai_api_key\",\n path: \"providers.openai.api_key\",\n kind: \"string\",\n summary: \"OpenAI-compatible API key.\",\n },\n {\n key: \"openai_model\",\n path: \"providers.openai.model\",\n kind: \"string\",\n summary: \"OpenAI-compatible embedding model name.\",\n },\n {\n key: \"ollama_base_url\",\n path: \"providers.ollama.base_url\",\n kind: \"string\",\n summary: \"Ollama API base URL (typically http://localhost:11434).\",\n },\n {\n key: \"ollama_model\",\n path: \"providers.ollama.model\",\n kind: \"string\",\n summary: \"Ollama embedding model name (e.g. nomic-embed-text).\",\n },\n {\n key: \"vector_store_adapter\",\n path: \"vector_store.adapter\",\n kind: \"string\",\n summary:\n \"Vector store adapter name (lancedb, qdrant, or an extension adapter).\",\n },\n {\n key: \"vector_store_collection_name\",\n path: \"vector_store.collection_name\",\n kind: \"string\",\n non_empty: true,\n summary:\n \"Vector collection/table name shared by Qdrant and LanceDB adapters.\",\n },\n {\n key: \"qdrant_url\",\n path: \"vector_store.qdrant.url\",\n kind: \"string\",\n summary: \"Qdrant HTTP API URL.\",\n },\n {\n key: \"qdrant_api_key\",\n path: \"vector_store.qdrant.api_key\",\n kind: \"string\",\n summary: \"Qdrant API key (empty if running unauthenticated).\",\n },\n {\n key: \"lancedb_path\",\n path: \"vector_store.lancedb.path\",\n kind: \"string\",\n summary: \"LanceDB storage path (relative to pm root or absolute).\",\n },\n // General workspace leaves (id/author/output/locks/schema governance). These\n // are documented user-facing settings in CONFIGURATION.md that previously\n // required hand-editing settings.json.\n {\n key: \"id_prefix\",\n path: \"id_prefix\",\n kind: \"string\",\n non_empty: true,\n summary: 'Prefix for generated item IDs (e.g. \"pm\" produces pm-xxxx).',\n },\n {\n key: \"author_default\",\n path: \"author_default\",\n kind: \"string\",\n non_empty: true,\n summary:\n \"Default author recorded on mutations when --author is not supplied.\",\n },\n {\n key: \"output_default_format\",\n path: \"output.default_format\",\n kind: \"string\",\n choices: [\"toon\", \"json\"],\n summary:\n \"Default output format for commands that support it: toon or json.\",\n },\n {\n key: \"locks_ttl_seconds\",\n path: \"locks.ttl_seconds\",\n kind: \"integer\",\n min: 1,\n summary:\n \"Claim/lock time-to-live in seconds before a stale lock can be reclaimed.\",\n },\n {\n key: \"locks_wait_ms\",\n path: \"locks.wait_ms\",\n kind: \"integer\",\n min: 0,\n summary:\n \"Bounded jittered wait in milliseconds before a contended item mutation fails with lock_conflict; 0 fails fast. PM_LOCK_WAIT_MS overrides per invocation.\",\n },\n {\n key: \"ids_token_length\",\n path: \"ids.token_length\",\n kind: \"integer\",\n min: 4,\n max: 12,\n summary:\n \"Random base36 token length for newly minted item ids (4-12, default 4). Raise it to shrink cross-branch id collision odds in concurrent multi-agent workflows (pm-pibw).\",\n },\n {\n key: \"checkpoints_retention_days\",\n path: \"checkpoints.retention_days\",\n kind: \"integer\",\n min: 1,\n summary:\n \"Age in days above which pm gc --scope checkpoints prunes bulk-mutation rollback checkpoints.\",\n },\n {\n key: \"schema_unknown_field_policy\",\n path: \"schema.unknown_field_policy\",\n kind: \"string\",\n choices: [\"allow\", \"warn\", \"reject\"],\n summary:\n \"How item I/O handles metadata keys not in the field registry: allow, warn, or reject.\",\n },\n // History compaction policy leaves (pm health advisory + pm history-compact\n // bulk-sweep default threshold). Disabled by default; enabling makes large\n // streams discoverable without a manual stats pass.\n {\n key: \"history_compact_policy_enabled\",\n path: \"history.compact_policy.enabled\",\n kind: \"boolean\",\n summary:\n \"Enable the history-compaction advisory: pm health warns on over-threshold streams.\",\n },\n {\n key: \"history_compact_policy_max_entries\",\n path: \"history.compact_policy.max_entries\",\n kind: \"integer\",\n min: 1,\n summary:\n \"Entry count above which a history stream is flagged (and the default pm history-compact --all-over threshold).\",\n },\n {\n key: \"history_compact_policy_trigger\",\n path: \"history.compact_policy.trigger\",\n kind: \"string\",\n choices: [\"health_warn\", \"auto\"],\n summary:\n \"History-compaction policy intent: health_warn (advisory only) or auto (scheduled sweeps expected).\",\n },\n];\n\nconst DESCRIPTOR_BY_KEY: ReadonlyMap<string, NestedSettingDescriptor> = new Map(\n NESTED_SETTING_DESCRIPTORS.flatMap((descriptor) => [\n [descriptor.key, descriptor],\n [descriptor.path.toLowerCase().replaceAll(\"-\", \"_\"), descriptor],\n ]),\n);\n\n/** Map a raw user-supplied key (kebab case, snake case, or the dotted settings path surfaced by `pm config list`) onto a known nested-leaf descriptor. Returns `undefined` when the key is not a nested leaf, letting callers fall back to the regular ConfigKey path. */\nexport function resolveNestedSettingDescriptor(\n raw: string | undefined,\n): NestedSettingDescriptor | undefined {\n if (typeof raw !== \"string\") {\n return undefined;\n }\n const normalized = raw.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized.length === 0) {\n return undefined;\n }\n return DESCRIPTOR_BY_KEY.get(normalized);\n}\n\n/** Recoverable parsed value with the descriptor it satisfied. */\nexport interface NestedSettingParsedValue {\n /** Value that configures or reports descriptor for this contract. */\n descriptor: NestedSettingDescriptor;\n /** Value that configures or reports value for this contract. */\n value: string | number | boolean;\n}\n\n/** Throwable validation error returned as a structured result. */\nexport interface NestedSettingParseError {\n /** Human-readable explanation suitable for logs and agent-facing output. */\n message: string;\n}\n\n/** Restricts nested setting parse result values accepted by command, SDK, and storage contracts. */\nexport type NestedSettingParseResult =\n | { ok: true; parsed: NestedSettingParsedValue }\n | { ok: false; error: NestedSettingParseError };\n\nfunction parseNestedBooleanValue(\n descriptor: NestedSettingDescriptor,\n rawValue: string,\n): NestedSettingParseResult {\n const normalized = rawValue.trim().toLowerCase();\n if (\n normalized === \"true\" ||\n normalized === \"1\" ||\n normalized === \"yes\" ||\n normalized === \"on\"\n ) {\n return { ok: true, parsed: { descriptor, value: true } };\n }\n if (\n normalized === \"false\" ||\n normalized === \"0\" ||\n normalized === \"no\" ||\n normalized === \"off\"\n ) {\n return { ok: true, parsed: { descriptor, value: false } };\n }\n return {\n ok: false,\n error: {\n message: `Config set ${descriptor.key} requires a boolean value (true|false), got \"${rawValue}\"`,\n },\n };\n}\n\nfunction parseNestedStringValue(\n descriptor: NestedSettingDescriptor,\n rawValue: string,\n trimmed: string,\n): NestedSettingParseResult {\n if (descriptor.non_empty === true && trimmed.length === 0) {\n return {\n ok: false,\n error: {\n message: `Config set ${descriptor.key} requires a non-empty value`,\n },\n };\n }\n if (descriptor.choices && !descriptor.choices.includes(trimmed)) {\n return {\n ok: false,\n error: {\n message: `Config set ${descriptor.key} must be one of ${descriptor.choices.join(\"|\")}, got \"${rawValue}\"`,\n },\n };\n }\n return { ok: true, parsed: { descriptor, value: trimmed } };\n}\n\nfunction parseFiniteNestedNumber(\n descriptor: NestedSettingDescriptor,\n rawValue: string,\n trimmed: string,\n): { ok: true; value: number } | { ok: false; error: NestedSettingParseError } {\n if (trimmed.length === 0) {\n return {\n ok: false,\n error: {\n message: `Config set ${descriptor.key} requires a non-empty value`,\n },\n };\n }\n const parsed = Number(trimmed);\n if (!Number.isFinite(parsed)) {\n return {\n ok: false,\n error: {\n message: `Config set ${descriptor.key} requires a finite number, got \"${rawValue}\"`,\n },\n };\n }\n return { ok: true, value: parsed };\n}\n\nfunction parseNestedIntegerValue(\n descriptor: NestedSettingDescriptor,\n rawValue: string,\n value: number,\n): NestedSettingParseResult {\n if (!Number.isInteger(value) || value < 0) {\n return {\n ok: false,\n error: {\n message: `Config set ${descriptor.key} requires a non-negative integer, got \"${rawValue}\"`,\n },\n };\n }\n if (descriptor.min !== undefined && value < descriptor.min) {\n return {\n ok: false,\n error: {\n message: `Config set ${descriptor.key} requires an integer >= ${descriptor.min}, got \"${rawValue}\" (the runtime silently ignores 0 here and falls back to the default)`,\n },\n };\n }\n if (descriptor.max !== undefined && value > descriptor.max) {\n return {\n ok: false,\n error: {\n message: `Config set ${descriptor.key} requires an integer <= ${descriptor.max}, got \"${rawValue}\"`,\n },\n };\n }\n return { ok: true, parsed: { descriptor, value } };\n}\n\nfunction parseNestedRatioValue(\n descriptor: NestedSettingDescriptor,\n rawValue: string,\n value: number,\n): NestedSettingParseResult {\n if (value < 0 || value > 1) {\n return {\n ok: false,\n error: {\n message: `Config set ${descriptor.key} requires a number in [0, 1], got \"${rawValue}\"`,\n },\n };\n }\n return { ok: true, parsed: { descriptor, value } };\n}\n\nfunction parseNestedNumberValue(\n descriptor: NestedSettingDescriptor,\n rawValue: string,\n value: number,\n): NestedSettingParseResult {\n if (descriptor.min !== undefined && value < descriptor.min) {\n return {\n ok: false,\n error: {\n message: `Config set ${descriptor.key} requires a number >= ${descriptor.min}, got \"${rawValue}\"`,\n },\n };\n }\n return { ok: true, parsed: { descriptor, value } };\n}\n\n/**\n * Validate and coerce a raw string value for a nested-leaf setting. The\n * returned value is the typed leaf that should be written into PmSettings.\n *\n * Empty strings are allowed for \"string\" leaves unless `non_empty` is set.\n */\nexport function parseNestedSettingValue(\n descriptor: NestedSettingDescriptor,\n rawValue: string,\n): NestedSettingParseResult {\n if (typeof rawValue !== \"string\") {\n return {\n ok: false,\n error: {\n message: `Config set ${descriptor.key} requires a string value`,\n },\n };\n }\n const trimmed = rawValue.trim();\n if (descriptor.kind === \"boolean\") {\n return parseNestedBooleanValue(descriptor, rawValue);\n }\n if (descriptor.kind === \"string\") {\n return parseNestedStringValue(descriptor, rawValue, trimmed);\n }\n\n // Number(\"\") === 0, which would silently accept empty / whitespace-only input\n // as a valid zero. Reject explicitly so misconfigurations don't slip through.\n const parsed = parseFiniteNestedNumber(descriptor, rawValue, trimmed);\n if (!parsed.ok) {\n return { ok: false, error: parsed.error };\n }\n if (descriptor.kind === \"integer\") {\n return parseNestedIntegerValue(descriptor, rawValue, parsed.value);\n }\n if (descriptor.kind === \"ratio\") {\n return parseNestedRatioValue(descriptor, rawValue, parsed.value);\n }\n // kind === \"number\" — negatives are allowed; only apply an explicit `min`.\n return parseNestedNumberValue(descriptor, rawValue, parsed.value);\n}\n\n/** Walk a dotted path on an arbitrary record (best-effort, returns null on miss). */\nexport function readNestedSettingValue(\n settings: unknown,\n descriptor: NestedSettingDescriptor,\n): string | number | boolean | null {\n const segments = descriptor.path.split(\".\");\n let cursor: unknown = settings;\n for (const segment of segments) {\n if (typeof cursor !== \"object\" || cursor === null) {\n return null;\n }\n cursor = (cursor as Record<string, unknown>)[segment];\n }\n if (\n typeof cursor === \"string\" ||\n typeof cursor === \"number\" ||\n typeof cursor === \"boolean\"\n ) {\n return cursor;\n }\n return null;\n}\n\n/** Set a leaf value on a settings object by walking the descriptor's dotted path. Missing intermediate objects are created. Returns `true` when the value actually changed. */\nexport function writeNestedSettingValue(\n settings: Record<string, unknown>,\n descriptor: NestedSettingDescriptor,\n value: string | number | boolean,\n): boolean {\n const segments = descriptor.path.split(\".\");\n let cursor: Record<string, unknown> = settings;\n for (let index = 0; index < segments.length - 1; index += 1) {\n const segment = segments[index];\n const existing = cursor[segment];\n if (\n typeof existing !== \"object\" ||\n existing === null ||\n Array.isArray(existing)\n ) {\n const next: Record<string, unknown> = {};\n cursor[segment] = next;\n cursor = next;\n } else {\n cursor = existing as Record<string, unknown>;\n }\n }\n const leafKey = segments[segments.length - 1];\n const previous = cursor[leafKey];\n if (previous === value) {\n return false;\n }\n cursor[leafKey] = value;\n return true;\n}\n"],"names":[],"mappings":"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","debugId":"a1368a75-c772-5efa-b68d-e57fada829a4"}