@unbrained/pm-cli 2026.6.10 → 2026.6.12

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 (456) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +44 -0
  3. package/README.md +1 -1
  4. package/dist/cli/bootstrap-args.d.ts +11 -0
  5. package/dist/cli/bootstrap-args.js +88 -4
  6. package/dist/cli/bootstrap-args.js.map +1 -1
  7. package/dist/cli/commands/completion.js +20 -8
  8. package/dist/cli/commands/completion.js.map +1 -1
  9. package/dist/cli/commands/contracts.d.ts +2 -0
  10. package/dist/cli/commands/contracts.js +9 -2
  11. package/dist/cli/commands/contracts.js.map +1 -1
  12. package/dist/cli/commands/create.js +6 -3
  13. package/dist/cli/commands/create.js.map +1 -1
  14. package/dist/cli/commands/docs.d.ts +2 -0
  15. package/dist/cli/commands/docs.js +2 -2
  16. package/dist/cli/commands/docs.js.map +1 -1
  17. package/dist/cli/commands/files.d.ts +2 -0
  18. package/dist/cli/commands/files.js +2 -2
  19. package/dist/cli/commands/files.js.map +1 -1
  20. package/dist/cli/commands/health.d.ts +1 -1
  21. package/dist/cli/commands/health.js +77 -2
  22. package/dist/cli/commands/health.js.map +1 -1
  23. package/dist/cli/commands/history-repair.d.ts +36 -0
  24. package/dist/cli/commands/history-repair.js +68 -3
  25. package/dist/cli/commands/history-repair.js.map +1 -1
  26. package/dist/cli/commands/index.d.ts +1 -1
  27. package/dist/cli/commands/index.js +3 -3
  28. package/dist/cli/commands/index.js.map +1 -1
  29. package/dist/cli/commands/linked-artifacts.d.ts +18 -0
  30. package/dist/cli/commands/linked-artifacts.js +26 -3
  31. package/dist/cli/commands/linked-artifacts.js.map +1 -1
  32. package/dist/cli/commands/plan.d.ts +6 -0
  33. package/dist/cli/commands/plan.js +93 -32
  34. package/dist/cli/commands/plan.js.map +1 -1
  35. package/dist/cli/commands/validate.d.ts +20 -0
  36. package/dist/cli/commands/validate.js +292 -28
  37. package/dist/cli/commands/validate.js.map +1 -1
  38. package/dist/cli/error-guidance.d.ts +8 -0
  39. package/dist/cli/error-guidance.js +102 -2
  40. package/dist/cli/error-guidance.js.map +1 -1
  41. package/dist/cli/help-content.js +7 -3
  42. package/dist/cli/help-content.js.map +1 -1
  43. package/dist/cli/register-mutation.js +47 -16
  44. package/dist/cli/register-mutation.js.map +1 -1
  45. package/dist/cli/register-operations.js +10 -2
  46. package/dist/cli/register-operations.js.map +1 -1
  47. package/dist/cli/register-setup.js +16 -16
  48. package/dist/cli/register-setup.js.map +1 -1
  49. package/dist/cli-bundle/chunks/{activity-W6TS5F2L.js → activity-XADJOG6G.js} +11 -11
  50. package/dist/cli-bundle/chunks/activity-XZIUPGZH.js +16 -0
  51. package/dist/cli-bundle/chunks/{aggregate-UK2WJ4Z3.js → aggregate-6OTS3AOO.js} +10 -10
  52. package/dist/cli-bundle/chunks/{aggregate-NNJLKGEK.js → aggregate-OD36DJU5.js} +10 -10
  53. package/dist/cli-bundle/chunks/{append-DHGTLUZW.js → append-JYWO4P7W.js} +8 -8
  54. package/dist/cli-bundle/chunks/{append-7BS36Z2L.js → append-KG55G7S3.js} +8 -8
  55. package/dist/cli-bundle/chunks/{chunk-GF5XIBUH.js → chunk-35P4GT6E.js} +111 -10
  56. package/dist/cli-bundle/chunks/chunk-35P4GT6E.js.map +7 -0
  57. package/dist/cli-bundle/chunks/{chunk-A6XVYNQJ.js → chunk-37CYVF73.js} +5 -5
  58. package/dist/cli-bundle/chunks/{chunk-XRE4CTNP.js → chunk-3KLPFWZ4.js} +6 -6
  59. package/dist/cli-bundle/chunks/{chunk-WSWOQP3Z.js → chunk-4HFU4UO2.js} +3 -3
  60. package/dist/cli-bundle/chunks/{chunk-UNH3KSHG.js → chunk-4JCSYR6F.js} +3 -3
  61. package/dist/cli-bundle/chunks/{chunk-73PSHEMT.js → chunk-4YFAGDRH.js} +8 -8
  62. package/dist/cli-bundle/chunks/{chunk-7GYMMDDW.js → chunk-5SCT2JCT.js} +2 -2
  63. package/dist/cli-bundle/chunks/{chunk-Q6PSD5DZ.js → chunk-73ZPG2I3.js} +3 -3
  64. package/dist/cli-bundle/chunks/{chunk-XH6RA5A5.js → chunk-7AMK6DOW.js} +15 -15
  65. package/dist/cli-bundle/chunks/{chunk-XH6RA5A5.js.map → chunk-7AMK6DOW.js.map} +1 -1
  66. package/dist/cli-bundle/chunks/{chunk-CTW7QAHM.js → chunk-7IYFN5R7.js} +3 -3
  67. package/dist/cli-bundle/chunks/{chunk-OSGWBWLK.js → chunk-7UGSRQCL.js} +5 -5
  68. package/dist/cli-bundle/chunks/{chunk-WNMRICXH.js → chunk-A6LXQFO7.js} +4 -3
  69. package/dist/cli-bundle/chunks/chunk-A6LXQFO7.js.map +1 -0
  70. package/dist/cli-bundle/chunks/{chunk-UDWUDUJI.js → chunk-ATEES5SX.js} +2 -2
  71. package/dist/cli-bundle/chunks/{chunk-2MKBPWMK.js → chunk-AVGHVVF7.js} +3 -3
  72. package/dist/cli-bundle/chunks/{chunk-ZH7C7ZVX.js → chunk-AX4GEVQC.js} +14 -14
  73. package/dist/cli-bundle/chunks/{chunk-ZH7C7ZVX.js.map → chunk-AX4GEVQC.js.map} +2 -2
  74. package/dist/cli-bundle/chunks/chunk-C6SAP27O.js +187 -0
  75. package/dist/cli-bundle/chunks/chunk-C6SAP27O.js.map +1 -0
  76. package/dist/cli-bundle/chunks/{chunk-344GDQTH.js → chunk-CCX4RSYZ.js} +2 -2
  77. package/dist/cli-bundle/chunks/{chunk-6KQS23TX.js → chunk-CW6E4NAT.js} +8 -8
  78. package/dist/cli-bundle/chunks/{chunk-K45NAJV2.js → chunk-DY6C42S6.js} +9 -9
  79. package/dist/cli-bundle/chunks/chunk-EKS6O2IR.js +217 -0
  80. package/dist/cli-bundle/chunks/chunk-EKS6O2IR.js.map +1 -0
  81. package/dist/cli-bundle/chunks/{chunk-ANVZCNL5.js → chunk-ESANVZF4.js} +3 -3
  82. package/dist/cli-bundle/chunks/{chunk-6OSG3EMX.js → chunk-EWFY7SLA.js} +8 -8
  83. package/dist/cli-bundle/chunks/{chunk-DMDEC4QP.js → chunk-F75JSIOZ.js} +6 -6
  84. package/dist/cli-bundle/chunks/{chunk-TALBUVWF.js → chunk-FDH2X65L.js} +2 -2
  85. package/dist/cli-bundle/chunks/{chunk-OQGJSCZZ.js → chunk-FY4SPXSC.js} +3 -2
  86. package/dist/cli-bundle/chunks/chunk-FY4SPXSC.js.map +7 -0
  87. package/dist/cli-bundle/chunks/{chunk-TZLGCTA5.js → chunk-GKIZW7SM.js} +3 -3
  88. package/dist/cli-bundle/chunks/{chunk-UMWF6ZAS.js → chunk-GWZSYR6X.js} +2 -2
  89. package/dist/cli-bundle/chunks/{chunk-KHBRV5JU.js → chunk-HGLC63AU.js} +8 -8
  90. package/dist/cli-bundle/chunks/{chunk-CMEHZD6G.js → chunk-HHHJ2GI3.js} +8 -8
  91. package/dist/cli-bundle/chunks/{chunk-MF6KSSMF.js → chunk-HI7STVF2.js} +6 -6
  92. package/dist/cli-bundle/chunks/{chunk-IEQ3N7WP.js → chunk-I2IJY2NL.js} +2 -2
  93. package/dist/cli-bundle/chunks/{chunk-O64EYNHF.js → chunk-I53JBTJW.js} +6 -6
  94. package/dist/cli-bundle/chunks/{chunk-K7SXBA75.js → chunk-I7NYDZDV.js} +2 -2
  95. package/dist/cli-bundle/chunks/{chunk-WBU257Z4.js → chunk-IGVJRZ6H.js} +8 -8
  96. package/dist/cli-bundle/chunks/{chunk-7TW64BS5.js → chunk-IUKD4W6Z.js} +2 -2
  97. package/dist/cli-bundle/chunks/{chunk-DTRIVUTN.js → chunk-KBPQHXWG.js} +21 -8
  98. package/dist/cli-bundle/chunks/chunk-KBPQHXWG.js.map +1 -0
  99. package/dist/cli-bundle/chunks/{chunk-OVNSQHDG.js → chunk-KWAXVAXX.js} +4 -4
  100. package/dist/cli-bundle/chunks/{chunk-WWEFBBVF.js → chunk-L5EPZQIC.js} +12 -12
  101. package/dist/cli-bundle/chunks/chunk-NAWVUHXH.js +220 -0
  102. package/dist/cli-bundle/chunks/chunk-NAWVUHXH.js.map +7 -0
  103. package/dist/cli-bundle/chunks/{chunk-6ADVKPVV.js → chunk-OASDW5UI.js} +7 -7
  104. package/dist/cli-bundle/chunks/{chunk-EIS32UA4.js → chunk-OLKBSY4N.js} +2 -2
  105. package/dist/cli-bundle/chunks/{chunk-X3IPJU2O.js → chunk-P5BJOMBB.js} +9 -9
  106. package/dist/cli-bundle/chunks/{chunk-LYL32FT6.js → chunk-P5U5EOMA.js} +3 -3
  107. package/dist/cli-bundle/chunks/{chunk-EAQLLID6.js → chunk-PNYAAB4S.js} +21 -188
  108. package/dist/cli-bundle/chunks/chunk-PNYAAB4S.js.map +1 -0
  109. package/dist/cli-bundle/chunks/{chunk-TV6FZGVK.js → chunk-QJMGRZO2.js} +3 -3
  110. package/dist/cli-bundle/chunks/{chunk-KMMUDSSB.js → chunk-QKW5D45B.js} +5 -5
  111. package/dist/cli-bundle/chunks/{chunk-4H2NDEGJ.js → chunk-QNJSITCX.js} +7 -7
  112. package/dist/cli-bundle/chunks/chunk-R2OUQVBK.js +190 -0
  113. package/dist/cli-bundle/chunks/chunk-R2OUQVBK.js.map +7 -0
  114. package/dist/cli-bundle/chunks/{chunk-XSCGU4WT.js → chunk-R4VWYWRN.js} +19 -193
  115. package/dist/cli-bundle/chunks/chunk-R4VWYWRN.js.map +7 -0
  116. package/dist/cli-bundle/chunks/{chunk-VSS3CSTF.js → chunk-RXAP6JL5.js} +9 -9
  117. package/dist/cli-bundle/chunks/{chunk-3VTWCBXL.js → chunk-S26FESD4.js} +3 -3
  118. package/dist/cli-bundle/chunks/{chunk-DEYNERFX.js → chunk-S2ZLDYGS.js} +4 -4
  119. package/dist/cli-bundle/chunks/{chunk-QGIWURY3.js → chunk-SO55HRA5.js} +12 -12
  120. package/dist/cli-bundle/chunks/{chunk-F2PVV7IX.js → chunk-SXKNJPQ7.js} +3 -3
  121. package/dist/cli-bundle/chunks/{chunk-5OMABP7I.js → chunk-TK5VZFHY.js} +7 -7
  122. package/dist/cli-bundle/chunks/{chunk-UY26RIBR.js → chunk-TNAP7EJX.js} +2 -2
  123. package/dist/cli-bundle/chunks/{chunk-QJ2OIEOC.js → chunk-UIG4TW2H.js} +111 -10
  124. package/dist/cli-bundle/chunks/chunk-UIG4TW2H.js.map +1 -0
  125. package/dist/cli-bundle/chunks/{chunk-SNASEDXB.js → chunk-UUWGCWBU.js} +3 -3
  126. package/dist/cli-bundle/chunks/{chunk-6N46IM44.js → chunk-VAOUX6TK.js} +2 -2
  127. package/dist/cli-bundle/chunks/{chunk-X5YC5DZM.js → chunk-VFUZV5EB.js} +5 -5
  128. package/dist/cli-bundle/chunks/{chunk-I2FM2SMO.js → chunk-VPEAS7PS.js} +2 -2
  129. package/dist/cli-bundle/chunks/{chunk-7DUVDW7C.js → chunk-VSRZRLG3.js} +3 -3
  130. package/dist/cli-bundle/chunks/{chunk-GP6SHEAI.js → chunk-WPDMBIX6.js} +20 -7
  131. package/dist/cli-bundle/chunks/chunk-WPDMBIX6.js.map +7 -0
  132. package/dist/cli-bundle/chunks/{chunk-PYULT32I.js → chunk-WUNFKP7M.js} +2 -2
  133. package/dist/cli-bundle/chunks/{chunk-LUJQJR7G.js → chunk-XJDGS74Y.js} +5 -5
  134. package/dist/cli-bundle/chunks/{chunk-TXWMLDMG.js → chunk-XMBI6TNW.js} +4 -4
  135. package/dist/cli-bundle/chunks/{chunk-4CYHWHZU.js → chunk-XTKJSVWH.js} +2 -2
  136. package/dist/cli-bundle/chunks/{chunk-T6QLB34N.js → chunk-XUC4C4PT.js} +3 -3
  137. package/dist/cli-bundle/chunks/{chunk-KRZQGRVL.js → chunk-XWMF3POR.js} +5 -5
  138. package/dist/cli-bundle/chunks/{chunk-OROMGSBP.js → chunk-Y3YKK7CY.js} +2 -2
  139. package/dist/cli-bundle/chunks/{chunk-D6JZBUZ6.js → chunk-YW6Q3RYZ.js} +7 -7
  140. package/dist/cli-bundle/chunks/{chunk-GRHPU6EM.js → chunk-ZLMIWZUG.js} +2 -2
  141. package/dist/cli-bundle/chunks/{chunk-5HH6QRH5.js → chunk-ZMW77VWV.js} +9 -9
  142. package/dist/cli-bundle/chunks/{chunk-BE5G7HEL.js → chunk-ZYNJNPYD.js} +4 -4
  143. package/dist/cli-bundle/chunks/{claim-3TY5LE54.js → claim-2RDYMCTP.js} +10 -10
  144. package/dist/cli-bundle/chunks/{claim-LM4YY6QQ.js → claim-MJ7DZFC3.js} +10 -10
  145. package/dist/cli-bundle/chunks/close-4FMAPEMY.js +13 -0
  146. package/dist/cli-bundle/chunks/{close-CSD4LEMT.js → close-XLEKIQSW.js} +8 -8
  147. package/dist/cli-bundle/chunks/{close-many-B5SHDX6W.js → close-many-AOD4HSAZ.js} +15 -15
  148. package/dist/cli-bundle/chunks/{close-many-WRXB5KVY.js → close-many-XKAQY5CQ.js} +15 -15
  149. package/dist/cli-bundle/chunks/{comments-BDDEK3VW.js → comments-B4RWWDJT.js} +10 -10
  150. package/dist/cli-bundle/chunks/{comments-A5ALOYTG.js → comments-RN5TG4ZN.js} +10 -10
  151. package/dist/cli-bundle/chunks/{config-W2NHDNQT.js → config-3JXJ3XZ7.js} +8 -8
  152. package/dist/cli-bundle/chunks/{config-YUYBMJOW.js → config-FZ4UDC4B.js} +8 -8
  153. package/dist/cli-bundle/chunks/{context-LRJ74NSU.js → context-L36PIN35.js} +13 -13
  154. package/dist/cli-bundle/chunks/{context-R2QLOJCK.js → context-QBPO3BFM.js} +13 -13
  155. package/dist/cli-bundle/chunks/{contracts-HJHR4NCD.js → contracts-2G66IGIA.js} +309 -6
  156. package/dist/cli-bundle/chunks/contracts-2G66IGIA.js.map +1 -0
  157. package/dist/cli-bundle/chunks/{contracts-47X7RYUF.js → contracts-PJCHYSO5.js} +315 -5
  158. package/dist/cli-bundle/chunks/contracts-PJCHYSO5.js.map +7 -0
  159. package/dist/cli-bundle/chunks/{copy-P4UVYZ7M.js → copy-ALU5WMHA.js} +7 -7
  160. package/dist/cli-bundle/chunks/{copy-B7HFOWFB.js → copy-FWIVTLBO.js} +7 -7
  161. package/dist/cli-bundle/chunks/{create-5ERJF64D.js → create-5433DP3G.js} +13 -13
  162. package/dist/cli-bundle/chunks/create-VWLWS34Z.js +27 -0
  163. package/dist/cli-bundle/chunks/{delete-LX3LGBCH.js → delete-IYTIYAJS.js} +7 -7
  164. package/dist/cli-bundle/chunks/{delete-S3WVK6LP.js → delete-Y2SGJBGY.js} +7 -7
  165. package/dist/cli-bundle/chunks/{deps-YSM4LZQD.js → deps-6TSPOSGU.js} +7 -7
  166. package/dist/cli-bundle/chunks/{deps-GWSNH7OZ.js → deps-CZ4PTVXU.js} +7 -7
  167. package/dist/cli-bundle/chunks/{docs-TG6JMVMY.js → docs-I3BAF5WH.js} +11 -11
  168. package/dist/cli-bundle/chunks/docs-I3BAF5WH.js.map +1 -0
  169. package/dist/cli-bundle/chunks/{docs-7RYFBHQD.js → docs-MXLGZUIT.js} +10 -10
  170. package/dist/cli-bundle/chunks/docs-MXLGZUIT.js.map +7 -0
  171. package/dist/cli-bundle/chunks/{extension-R3LUKMX7.js → extension-Q34OEWO5.js} +5 -5
  172. package/dist/cli-bundle/chunks/{extension-VNMRKIHI.js → extension-WH2FOIOZ.js} +5 -5
  173. package/dist/cli-bundle/chunks/{files-KAKU57OT.js → files-FYP3MDPX.js} +10 -10
  174. package/dist/cli-bundle/chunks/files-FYP3MDPX.js.map +7 -0
  175. package/dist/cli-bundle/chunks/{files-QB3EYPMO.js → files-GUXUM2MB.js} +11 -11
  176. package/dist/cli-bundle/chunks/files-GUXUM2MB.js.map +1 -0
  177. package/dist/cli-bundle/chunks/{gc-KNUPLPSW.js → gc-FENB2ESG.js} +14 -176
  178. package/dist/cli-bundle/chunks/gc-FENB2ESG.js.map +1 -0
  179. package/dist/cli-bundle/chunks/{gc-B747VM4M.js → gc-KGQG66SA.js} +12 -181
  180. package/dist/cli-bundle/chunks/gc-KGQG66SA.js.map +7 -0
  181. package/dist/cli-bundle/chunks/{get-GMGLIQ5I.js → get-PCHS7RA6.js} +11 -11
  182. package/dist/cli-bundle/chunks/{get-SBL6NHYQ.js → get-QARTE6BL.js} +11 -11
  183. package/dist/cli-bundle/chunks/{health-WWZJ5KJS.js → health-7MTXAVR2.js} +82 -15
  184. package/dist/cli-bundle/chunks/health-7MTXAVR2.js.map +7 -0
  185. package/dist/cli-bundle/chunks/{health-IG43Z4KL.js → health-E4D7KGHD.js} +83 -16
  186. package/dist/cli-bundle/chunks/health-E4D7KGHD.js.map +1 -0
  187. package/dist/cli-bundle/chunks/{history-XCWRXBXC.js → history-7WUAEWHW.js} +10 -10
  188. package/dist/cli-bundle/chunks/history-L2FQFRTU.js +20 -0
  189. package/dist/cli-bundle/chunks/{history-compact-KICKUCR7.js → history-compact-3EJ3L2O7.js} +11 -11
  190. package/dist/cli-bundle/chunks/{history-compact-IDH7E7VN.js → history-compact-LW27IPFK.js} +11 -11
  191. package/dist/cli-bundle/chunks/{history-redact-JJWH3QWK.js → history-redact-G72A4EJ4.js} +11 -11
  192. package/dist/cli-bundle/chunks/history-redact-QWQCX5DZ.js +19 -0
  193. package/dist/cli-bundle/chunks/{history-repair-N5HXKJOI.js → history-repair-OSQOKJ3E.js} +71 -13
  194. package/dist/cli-bundle/chunks/history-repair-OSQOKJ3E.js.map +7 -0
  195. package/dist/cli-bundle/chunks/{history-repair-7HWBZKXN.js → history-repair-SBK7P34V.js} +72 -14
  196. package/dist/cli-bundle/chunks/history-repair-SBK7P34V.js.map +1 -0
  197. package/dist/cli-bundle/chunks/init-4BKRHGWW.js +17 -0
  198. package/dist/cli-bundle/chunks/{init-OQA3TWIS.js → init-S5WEGUJY.js} +9 -9
  199. package/dist/cli-bundle/chunks/{learnings-L7VQUSVI.js → learnings-HQXSSKZ5.js} +10 -10
  200. package/dist/cli-bundle/chunks/{learnings-Z4GAIZQ5.js → learnings-XK3P4ZDR.js} +10 -10
  201. package/dist/cli-bundle/chunks/{list-W5ROBC5U.js → list-6CL3XFT6.js} +10 -10
  202. package/dist/cli-bundle/chunks/list-BYNN4ZEO.js +19 -0
  203. package/dist/cli-bundle/chunks/{notes-JJDOEDFK.js → notes-5T6P7C5V.js} +10 -10
  204. package/dist/cli-bundle/chunks/{notes-SDCK7BEN.js → notes-U5FZCSBT.js} +10 -10
  205. package/dist/cli-bundle/chunks/{plan-H5HYHMBB.js → plan-2YTQYWGM.js} +63 -23
  206. package/dist/cli-bundle/chunks/plan-2YTQYWGM.js.map +1 -0
  207. package/dist/cli-bundle/chunks/{plan-W2B5RYR3.js → plan-7IVSICR6.js} +62 -22
  208. package/dist/cli-bundle/chunks/plan-7IVSICR6.js.map +7 -0
  209. package/dist/cli-bundle/chunks/{register-list-query-QGRFMDWA.js → register-list-query-4UPMHONX.js} +18 -18
  210. package/dist/cli-bundle/chunks/{register-list-query-V4S23735.js → register-list-query-7VOW2C3W.js} +18 -18
  211. package/dist/cli-bundle/chunks/{register-mutation-ZPZNJXSA.js → register-mutation-FARSGYRD.js} +64 -47
  212. package/dist/cli-bundle/chunks/{register-mutation-ZPZNJXSA.js.map → register-mutation-FARSGYRD.js.map} +2 -2
  213. package/dist/cli-bundle/chunks/{register-mutation-I57PLUHA.js → register-mutation-LJDNVREU.js} +65 -48
  214. package/dist/cli-bundle/chunks/{register-mutation-I57PLUHA.js.map → register-mutation-LJDNVREU.js.map} +1 -1
  215. package/dist/cli-bundle/chunks/{register-operations-KAMLXAF5.js → register-operations-FFTYAL42.js} +38 -34
  216. package/dist/cli-bundle/chunks/register-operations-FFTYAL42.js.map +1 -0
  217. package/dist/cli-bundle/chunks/{register-operations-YEN4YEZ2.js → register-operations-HCJKDUA6.js} +37 -33
  218. package/dist/cli-bundle/chunks/{register-operations-YEN4YEZ2.js.map → register-operations-HCJKDUA6.js.map} +2 -2
  219. package/dist/cli-bundle/chunks/{register-setup-BZ3TNE3G.js → register-setup-6AVIUOCC.js} +31 -31
  220. package/dist/cli-bundle/chunks/register-setup-6AVIUOCC.js.map +1 -0
  221. package/dist/cli-bundle/chunks/{register-setup-WLFL3OUF.js → register-setup-KVNLO5OJ.js} +30 -30
  222. package/dist/cli-bundle/chunks/register-setup-KVNLO5OJ.js.map +7 -0
  223. package/dist/cli-bundle/chunks/restore-CHIOQAQL.js +17 -0
  224. package/dist/cli-bundle/chunks/{restore-RGFSPG4K.js → restore-M6AFHMV4.js} +11 -11
  225. package/dist/cli-bundle/chunks/{schema-CCDU3RLC.js → schema-76HDZJCC.js} +8 -8
  226. package/dist/cli-bundle/chunks/{schema-KZASL323.js → schema-AINZ2IMM.js} +8 -8
  227. package/dist/cli-bundle/chunks/{search-7KSOLI2E.js → search-JMLFQEPJ.js} +10 -10
  228. package/dist/cli-bundle/chunks/{search-DTL7CO22.js → search-NL3TSCYB.js} +10 -10
  229. package/dist/cli-bundle/chunks/{stats-QNV7B2CE.js → stats-BKXCBIGT.js} +7 -7
  230. package/dist/cli-bundle/chunks/{stats-IOXQMGI6.js → stats-UBD56TGK.js} +7 -7
  231. package/dist/cli-bundle/chunks/{telemetry-NHR5RFXT.js → telemetry-N454RHG5.js} +4 -4
  232. package/dist/cli-bundle/chunks/{telemetry-IV5C6JOM.js → telemetry-ZJXK3H7X.js} +4 -4
  233. package/dist/cli-bundle/chunks/{test-PIL2CEEB.js → test-BQAKIXAT.js} +14 -14
  234. package/dist/cli-bundle/chunks/test-O74JFUH5.js +32 -0
  235. package/dist/cli-bundle/chunks/{test-all-MFN4MYCV.js → test-all-7LV3I6S5.js} +14 -14
  236. package/dist/cli-bundle/chunks/{test-all-GRLYHBNP.js → test-all-TDYCCBA4.js} +14 -14
  237. package/dist/cli-bundle/chunks/{test-runs-7WCSC3TY.js → test-runs-E64M6XS3.js} +5 -5
  238. package/dist/cli-bundle/chunks/{test-runs-7LRFWWCA.js → test-runs-LXZLULCI.js} +5 -5
  239. package/dist/cli-bundle/chunks/update-36JM7YZT.js +21 -0
  240. package/dist/cli-bundle/chunks/update-I246PCLO.js +25 -0
  241. package/dist/cli-bundle/chunks/{update-many-UYMTVF42.js → update-many-F4IKDWZB.js} +22 -22
  242. package/dist/cli-bundle/chunks/{update-many-LOTAYUTN.js → update-many-NTWZ5YT3.js} +22 -22
  243. package/dist/cli-bundle/chunks/{upgrade-ZZSC7CLV.js → upgrade-37F7JKES.js} +5 -5
  244. package/dist/cli-bundle/chunks/{upgrade-LT2MLLPS.js → upgrade-L32JA4TZ.js} +5 -5
  245. package/dist/cli-bundle/chunks/{validate-IQIQSKUX.js → validate-46KCRHL7.js} +462 -50
  246. package/dist/cli-bundle/chunks/validate-46KCRHL7.js.map +1 -0
  247. package/dist/cli-bundle/chunks/{validate-3XRORNMP.js → validate-CRFMPTYD.js} +482 -49
  248. package/dist/cli-bundle/chunks/validate-CRFMPTYD.js.map +7 -0
  249. package/dist/cli-bundle/main.js +180 -25
  250. package/dist/cli-bundle/main.js.map +2 -2
  251. package/dist/core/diagnostics/remediation.js +19 -6
  252. package/dist/core/diagnostics/remediation.js.map +1 -1
  253. package/dist/core/lock/lock-gc.d.ts +31 -0
  254. package/dist/core/lock/lock-gc.js +120 -62
  255. package/dist/core/lock/lock-gc.js.map +1 -1
  256. package/dist/core/output/query-summary.d.ts +31 -0
  257. package/dist/core/output/query-summary.js +62 -0
  258. package/dist/core/output/query-summary.js.map +1 -0
  259. package/dist/core/shared/constants.js +3 -2
  260. package/dist/core/shared/constants.js.map +1 -1
  261. package/dist/core/telemetry/consent.js +18 -3
  262. package/dist/core/telemetry/consent.js.map +1 -1
  263. package/dist/core/validate/fix-planning.d.ts +130 -0
  264. package/dist/core/validate/fix-planning.js +202 -0
  265. package/dist/core/validate/fix-planning.js.map +1 -0
  266. package/dist/core/validate/missing-by-type.d.ts +21 -0
  267. package/dist/core/validate/missing-by-type.js +39 -0
  268. package/dist/core/validate/missing-by-type.js.map +1 -0
  269. package/dist/core/validate/stale-file-classification.d.ts +41 -0
  270. package/dist/core/validate/stale-file-classification.js +73 -0
  271. package/dist/core/validate/stale-file-classification.js.map +1 -0
  272. package/dist/mcp/server.js +74 -266
  273. package/dist/mcp/server.js.map +1 -1
  274. package/dist/mcp/tool-definitions.d.ts +27 -0
  275. package/dist/mcp/tool-definitions.js +330 -0
  276. package/dist/mcp/tool-definitions.js.map +1 -0
  277. package/dist/sdk/cli-contracts/tool-parameter-tables.js +38 -2
  278. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  279. package/dist/sdk/cli-contracts.d.ts +6 -1
  280. package/dist/sdk/cli-contracts.js +74 -7
  281. package/dist/sdk/cli-contracts.js.map +1 -1
  282. package/docs/AGENT_GUIDE.md +7 -2
  283. package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
  284. package/docs/COMMANDS.md +25 -2
  285. package/marketplace.json +1 -1
  286. package/package.json +1 -1
  287. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  288. package/plugins/pm-claude/README.md +7 -3
  289. package/plugins/pm-claude/commands/pm-init.md +1 -1
  290. package/plugins/pm-codex/README.md +2 -2
  291. package/dist/cli-bundle/chunks/activity-5QLX6DHN.js +0 -16
  292. package/dist/cli-bundle/chunks/chunk-DTRIVUTN.js.map +0 -1
  293. package/dist/cli-bundle/chunks/chunk-EAQLLID6.js.map +0 -1
  294. package/dist/cli-bundle/chunks/chunk-GF5XIBUH.js.map +0 -7
  295. package/dist/cli-bundle/chunks/chunk-GP6SHEAI.js.map +0 -7
  296. package/dist/cli-bundle/chunks/chunk-OQGJSCZZ.js.map +0 -7
  297. package/dist/cli-bundle/chunks/chunk-QJ2OIEOC.js.map +0 -1
  298. package/dist/cli-bundle/chunks/chunk-WNMRICXH.js.map +0 -1
  299. package/dist/cli-bundle/chunks/chunk-XSCGU4WT.js.map +0 -7
  300. package/dist/cli-bundle/chunks/close-SIQCDOBR.js +0 -13
  301. package/dist/cli-bundle/chunks/contracts-47X7RYUF.js.map +0 -7
  302. package/dist/cli-bundle/chunks/contracts-HJHR4NCD.js.map +0 -1
  303. package/dist/cli-bundle/chunks/create-TXNRPS4K.js +0 -27
  304. package/dist/cli-bundle/chunks/docs-7RYFBHQD.js.map +0 -7
  305. package/dist/cli-bundle/chunks/docs-TG6JMVMY.js.map +0 -1
  306. package/dist/cli-bundle/chunks/files-KAKU57OT.js.map +0 -7
  307. package/dist/cli-bundle/chunks/files-QB3EYPMO.js.map +0 -1
  308. package/dist/cli-bundle/chunks/gc-B747VM4M.js.map +0 -7
  309. package/dist/cli-bundle/chunks/gc-KNUPLPSW.js.map +0 -1
  310. package/dist/cli-bundle/chunks/health-IG43Z4KL.js.map +0 -1
  311. package/dist/cli-bundle/chunks/health-WWZJ5KJS.js.map +0 -7
  312. package/dist/cli-bundle/chunks/history-6UKSZTRT.js +0 -20
  313. package/dist/cli-bundle/chunks/history-redact-HKYBTK6X.js +0 -19
  314. package/dist/cli-bundle/chunks/history-repair-7HWBZKXN.js.map +0 -1
  315. package/dist/cli-bundle/chunks/history-repair-N5HXKJOI.js.map +0 -7
  316. package/dist/cli-bundle/chunks/init-27JLDUO2.js +0 -17
  317. package/dist/cli-bundle/chunks/list-6U3CJVXS.js +0 -19
  318. package/dist/cli-bundle/chunks/plan-H5HYHMBB.js.map +0 -1
  319. package/dist/cli-bundle/chunks/plan-W2B5RYR3.js.map +0 -7
  320. package/dist/cli-bundle/chunks/register-operations-KAMLXAF5.js.map +0 -1
  321. package/dist/cli-bundle/chunks/register-setup-BZ3TNE3G.js.map +0 -1
  322. package/dist/cli-bundle/chunks/register-setup-WLFL3OUF.js.map +0 -7
  323. package/dist/cli-bundle/chunks/restore-GNI2W5CN.js +0 -17
  324. package/dist/cli-bundle/chunks/test-4Z37CXW4.js +0 -32
  325. package/dist/cli-bundle/chunks/update-I4G34LKJ.js +0 -21
  326. package/dist/cli-bundle/chunks/update-VI5DBZ3G.js +0 -25
  327. package/dist/cli-bundle/chunks/validate-3XRORNMP.js.map +0 -7
  328. package/dist/cli-bundle/chunks/validate-IQIQSKUX.js.map +0 -1
  329. /package/dist/cli-bundle/chunks/{activity-W6TS5F2L.js.map → activity-XADJOG6G.js.map} +0 -0
  330. /package/dist/cli-bundle/chunks/{activity-5QLX6DHN.js.map → activity-XZIUPGZH.js.map} +0 -0
  331. /package/dist/cli-bundle/chunks/{aggregate-UK2WJ4Z3.js.map → aggregate-6OTS3AOO.js.map} +0 -0
  332. /package/dist/cli-bundle/chunks/{aggregate-NNJLKGEK.js.map → aggregate-OD36DJU5.js.map} +0 -0
  333. /package/dist/cli-bundle/chunks/{append-DHGTLUZW.js.map → append-JYWO4P7W.js.map} +0 -0
  334. /package/dist/cli-bundle/chunks/{append-7BS36Z2L.js.map → append-KG55G7S3.js.map} +0 -0
  335. /package/dist/cli-bundle/chunks/{chunk-A6XVYNQJ.js.map → chunk-37CYVF73.js.map} +0 -0
  336. /package/dist/cli-bundle/chunks/{chunk-XRE4CTNP.js.map → chunk-3KLPFWZ4.js.map} +0 -0
  337. /package/dist/cli-bundle/chunks/{chunk-WSWOQP3Z.js.map → chunk-4HFU4UO2.js.map} +0 -0
  338. /package/dist/cli-bundle/chunks/{chunk-UNH3KSHG.js.map → chunk-4JCSYR6F.js.map} +0 -0
  339. /package/dist/cli-bundle/chunks/{chunk-73PSHEMT.js.map → chunk-4YFAGDRH.js.map} +0 -0
  340. /package/dist/cli-bundle/chunks/{chunk-7GYMMDDW.js.map → chunk-5SCT2JCT.js.map} +0 -0
  341. /package/dist/cli-bundle/chunks/{chunk-Q6PSD5DZ.js.map → chunk-73ZPG2I3.js.map} +0 -0
  342. /package/dist/cli-bundle/chunks/{chunk-CTW7QAHM.js.map → chunk-7IYFN5R7.js.map} +0 -0
  343. /package/dist/cli-bundle/chunks/{chunk-OSGWBWLK.js.map → chunk-7UGSRQCL.js.map} +0 -0
  344. /package/dist/cli-bundle/chunks/{chunk-UDWUDUJI.js.map → chunk-ATEES5SX.js.map} +0 -0
  345. /package/dist/cli-bundle/chunks/{chunk-2MKBPWMK.js.map → chunk-AVGHVVF7.js.map} +0 -0
  346. /package/dist/cli-bundle/chunks/{chunk-344GDQTH.js.map → chunk-CCX4RSYZ.js.map} +0 -0
  347. /package/dist/cli-bundle/chunks/{chunk-6KQS23TX.js.map → chunk-CW6E4NAT.js.map} +0 -0
  348. /package/dist/cli-bundle/chunks/{chunk-K45NAJV2.js.map → chunk-DY6C42S6.js.map} +0 -0
  349. /package/dist/cli-bundle/chunks/{chunk-ANVZCNL5.js.map → chunk-ESANVZF4.js.map} +0 -0
  350. /package/dist/cli-bundle/chunks/{chunk-6OSG3EMX.js.map → chunk-EWFY7SLA.js.map} +0 -0
  351. /package/dist/cli-bundle/chunks/{chunk-DMDEC4QP.js.map → chunk-F75JSIOZ.js.map} +0 -0
  352. /package/dist/cli-bundle/chunks/{chunk-TALBUVWF.js.map → chunk-FDH2X65L.js.map} +0 -0
  353. /package/dist/cli-bundle/chunks/{chunk-TZLGCTA5.js.map → chunk-GKIZW7SM.js.map} +0 -0
  354. /package/dist/cli-bundle/chunks/{chunk-UMWF6ZAS.js.map → chunk-GWZSYR6X.js.map} +0 -0
  355. /package/dist/cli-bundle/chunks/{chunk-KHBRV5JU.js.map → chunk-HGLC63AU.js.map} +0 -0
  356. /package/dist/cli-bundle/chunks/{chunk-CMEHZD6G.js.map → chunk-HHHJ2GI3.js.map} +0 -0
  357. /package/dist/cli-bundle/chunks/{chunk-MF6KSSMF.js.map → chunk-HI7STVF2.js.map} +0 -0
  358. /package/dist/cli-bundle/chunks/{chunk-IEQ3N7WP.js.map → chunk-I2IJY2NL.js.map} +0 -0
  359. /package/dist/cli-bundle/chunks/{chunk-O64EYNHF.js.map → chunk-I53JBTJW.js.map} +0 -0
  360. /package/dist/cli-bundle/chunks/{chunk-K7SXBA75.js.map → chunk-I7NYDZDV.js.map} +0 -0
  361. /package/dist/cli-bundle/chunks/{chunk-WBU257Z4.js.map → chunk-IGVJRZ6H.js.map} +0 -0
  362. /package/dist/cli-bundle/chunks/{chunk-7TW64BS5.js.map → chunk-IUKD4W6Z.js.map} +0 -0
  363. /package/dist/cli-bundle/chunks/{chunk-OVNSQHDG.js.map → chunk-KWAXVAXX.js.map} +0 -0
  364. /package/dist/cli-bundle/chunks/{chunk-WWEFBBVF.js.map → chunk-L5EPZQIC.js.map} +0 -0
  365. /package/dist/cli-bundle/chunks/{chunk-6ADVKPVV.js.map → chunk-OASDW5UI.js.map} +0 -0
  366. /package/dist/cli-bundle/chunks/{chunk-EIS32UA4.js.map → chunk-OLKBSY4N.js.map} +0 -0
  367. /package/dist/cli-bundle/chunks/{chunk-X3IPJU2O.js.map → chunk-P5BJOMBB.js.map} +0 -0
  368. /package/dist/cli-bundle/chunks/{chunk-LYL32FT6.js.map → chunk-P5U5EOMA.js.map} +0 -0
  369. /package/dist/cli-bundle/chunks/{chunk-TV6FZGVK.js.map → chunk-QJMGRZO2.js.map} +0 -0
  370. /package/dist/cli-bundle/chunks/{chunk-KMMUDSSB.js.map → chunk-QKW5D45B.js.map} +0 -0
  371. /package/dist/cli-bundle/chunks/{chunk-4H2NDEGJ.js.map → chunk-QNJSITCX.js.map} +0 -0
  372. /package/dist/cli-bundle/chunks/{chunk-VSS3CSTF.js.map → chunk-RXAP6JL5.js.map} +0 -0
  373. /package/dist/cli-bundle/chunks/{chunk-3VTWCBXL.js.map → chunk-S26FESD4.js.map} +0 -0
  374. /package/dist/cli-bundle/chunks/{chunk-DEYNERFX.js.map → chunk-S2ZLDYGS.js.map} +0 -0
  375. /package/dist/cli-bundle/chunks/{chunk-QGIWURY3.js.map → chunk-SO55HRA5.js.map} +0 -0
  376. /package/dist/cli-bundle/chunks/{chunk-F2PVV7IX.js.map → chunk-SXKNJPQ7.js.map} +0 -0
  377. /package/dist/cli-bundle/chunks/{chunk-5OMABP7I.js.map → chunk-TK5VZFHY.js.map} +0 -0
  378. /package/dist/cli-bundle/chunks/{chunk-UY26RIBR.js.map → chunk-TNAP7EJX.js.map} +0 -0
  379. /package/dist/cli-bundle/chunks/{chunk-SNASEDXB.js.map → chunk-UUWGCWBU.js.map} +0 -0
  380. /package/dist/cli-bundle/chunks/{chunk-6N46IM44.js.map → chunk-VAOUX6TK.js.map} +0 -0
  381. /package/dist/cli-bundle/chunks/{chunk-X5YC5DZM.js.map → chunk-VFUZV5EB.js.map} +0 -0
  382. /package/dist/cli-bundle/chunks/{chunk-I2FM2SMO.js.map → chunk-VPEAS7PS.js.map} +0 -0
  383. /package/dist/cli-bundle/chunks/{chunk-7DUVDW7C.js.map → chunk-VSRZRLG3.js.map} +0 -0
  384. /package/dist/cli-bundle/chunks/{chunk-PYULT32I.js.map → chunk-WUNFKP7M.js.map} +0 -0
  385. /package/dist/cli-bundle/chunks/{chunk-LUJQJR7G.js.map → chunk-XJDGS74Y.js.map} +0 -0
  386. /package/dist/cli-bundle/chunks/{chunk-TXWMLDMG.js.map → chunk-XMBI6TNW.js.map} +0 -0
  387. /package/dist/cli-bundle/chunks/{chunk-4CYHWHZU.js.map → chunk-XTKJSVWH.js.map} +0 -0
  388. /package/dist/cli-bundle/chunks/{chunk-T6QLB34N.js.map → chunk-XUC4C4PT.js.map} +0 -0
  389. /package/dist/cli-bundle/chunks/{chunk-KRZQGRVL.js.map → chunk-XWMF3POR.js.map} +0 -0
  390. /package/dist/cli-bundle/chunks/{chunk-OROMGSBP.js.map → chunk-Y3YKK7CY.js.map} +0 -0
  391. /package/dist/cli-bundle/chunks/{chunk-D6JZBUZ6.js.map → chunk-YW6Q3RYZ.js.map} +0 -0
  392. /package/dist/cli-bundle/chunks/{chunk-GRHPU6EM.js.map → chunk-ZLMIWZUG.js.map} +0 -0
  393. /package/dist/cli-bundle/chunks/{chunk-5HH6QRH5.js.map → chunk-ZMW77VWV.js.map} +0 -0
  394. /package/dist/cli-bundle/chunks/{chunk-BE5G7HEL.js.map → chunk-ZYNJNPYD.js.map} +0 -0
  395. /package/dist/cli-bundle/chunks/{claim-3TY5LE54.js.map → claim-2RDYMCTP.js.map} +0 -0
  396. /package/dist/cli-bundle/chunks/{claim-LM4YY6QQ.js.map → claim-MJ7DZFC3.js.map} +0 -0
  397. /package/dist/cli-bundle/chunks/{close-SIQCDOBR.js.map → close-4FMAPEMY.js.map} +0 -0
  398. /package/dist/cli-bundle/chunks/{close-CSD4LEMT.js.map → close-XLEKIQSW.js.map} +0 -0
  399. /package/dist/cli-bundle/chunks/{close-many-B5SHDX6W.js.map → close-many-AOD4HSAZ.js.map} +0 -0
  400. /package/dist/cli-bundle/chunks/{close-many-WRXB5KVY.js.map → close-many-XKAQY5CQ.js.map} +0 -0
  401. /package/dist/cli-bundle/chunks/{comments-BDDEK3VW.js.map → comments-B4RWWDJT.js.map} +0 -0
  402. /package/dist/cli-bundle/chunks/{comments-A5ALOYTG.js.map → comments-RN5TG4ZN.js.map} +0 -0
  403. /package/dist/cli-bundle/chunks/{config-W2NHDNQT.js.map → config-3JXJ3XZ7.js.map} +0 -0
  404. /package/dist/cli-bundle/chunks/{config-YUYBMJOW.js.map → config-FZ4UDC4B.js.map} +0 -0
  405. /package/dist/cli-bundle/chunks/{context-LRJ74NSU.js.map → context-L36PIN35.js.map} +0 -0
  406. /package/dist/cli-bundle/chunks/{context-R2QLOJCK.js.map → context-QBPO3BFM.js.map} +0 -0
  407. /package/dist/cli-bundle/chunks/{copy-P4UVYZ7M.js.map → copy-ALU5WMHA.js.map} +0 -0
  408. /package/dist/cli-bundle/chunks/{copy-B7HFOWFB.js.map → copy-FWIVTLBO.js.map} +0 -0
  409. /package/dist/cli-bundle/chunks/{create-5ERJF64D.js.map → create-5433DP3G.js.map} +0 -0
  410. /package/dist/cli-bundle/chunks/{create-TXNRPS4K.js.map → create-VWLWS34Z.js.map} +0 -0
  411. /package/dist/cli-bundle/chunks/{delete-LX3LGBCH.js.map → delete-IYTIYAJS.js.map} +0 -0
  412. /package/dist/cli-bundle/chunks/{delete-S3WVK6LP.js.map → delete-Y2SGJBGY.js.map} +0 -0
  413. /package/dist/cli-bundle/chunks/{deps-YSM4LZQD.js.map → deps-6TSPOSGU.js.map} +0 -0
  414. /package/dist/cli-bundle/chunks/{deps-GWSNH7OZ.js.map → deps-CZ4PTVXU.js.map} +0 -0
  415. /package/dist/cli-bundle/chunks/{extension-R3LUKMX7.js.map → extension-Q34OEWO5.js.map} +0 -0
  416. /package/dist/cli-bundle/chunks/{extension-VNMRKIHI.js.map → extension-WH2FOIOZ.js.map} +0 -0
  417. /package/dist/cli-bundle/chunks/{get-GMGLIQ5I.js.map → get-PCHS7RA6.js.map} +0 -0
  418. /package/dist/cli-bundle/chunks/{get-SBL6NHYQ.js.map → get-QARTE6BL.js.map} +0 -0
  419. /package/dist/cli-bundle/chunks/{history-XCWRXBXC.js.map → history-7WUAEWHW.js.map} +0 -0
  420. /package/dist/cli-bundle/chunks/{history-6UKSZTRT.js.map → history-L2FQFRTU.js.map} +0 -0
  421. /package/dist/cli-bundle/chunks/{history-compact-KICKUCR7.js.map → history-compact-3EJ3L2O7.js.map} +0 -0
  422. /package/dist/cli-bundle/chunks/{history-compact-IDH7E7VN.js.map → history-compact-LW27IPFK.js.map} +0 -0
  423. /package/dist/cli-bundle/chunks/{history-redact-JJWH3QWK.js.map → history-redact-G72A4EJ4.js.map} +0 -0
  424. /package/dist/cli-bundle/chunks/{history-redact-HKYBTK6X.js.map → history-redact-QWQCX5DZ.js.map} +0 -0
  425. /package/dist/cli-bundle/chunks/{init-27JLDUO2.js.map → init-4BKRHGWW.js.map} +0 -0
  426. /package/dist/cli-bundle/chunks/{init-OQA3TWIS.js.map → init-S5WEGUJY.js.map} +0 -0
  427. /package/dist/cli-bundle/chunks/{learnings-L7VQUSVI.js.map → learnings-HQXSSKZ5.js.map} +0 -0
  428. /package/dist/cli-bundle/chunks/{learnings-Z4GAIZQ5.js.map → learnings-XK3P4ZDR.js.map} +0 -0
  429. /package/dist/cli-bundle/chunks/{list-W5ROBC5U.js.map → list-6CL3XFT6.js.map} +0 -0
  430. /package/dist/cli-bundle/chunks/{list-6U3CJVXS.js.map → list-BYNN4ZEO.js.map} +0 -0
  431. /package/dist/cli-bundle/chunks/{notes-JJDOEDFK.js.map → notes-5T6P7C5V.js.map} +0 -0
  432. /package/dist/cli-bundle/chunks/{notes-SDCK7BEN.js.map → notes-U5FZCSBT.js.map} +0 -0
  433. /package/dist/cli-bundle/chunks/{register-list-query-QGRFMDWA.js.map → register-list-query-4UPMHONX.js.map} +0 -0
  434. /package/dist/cli-bundle/chunks/{register-list-query-V4S23735.js.map → register-list-query-7VOW2C3W.js.map} +0 -0
  435. /package/dist/cli-bundle/chunks/{restore-GNI2W5CN.js.map → restore-CHIOQAQL.js.map} +0 -0
  436. /package/dist/cli-bundle/chunks/{restore-RGFSPG4K.js.map → restore-M6AFHMV4.js.map} +0 -0
  437. /package/dist/cli-bundle/chunks/{schema-CCDU3RLC.js.map → schema-76HDZJCC.js.map} +0 -0
  438. /package/dist/cli-bundle/chunks/{schema-KZASL323.js.map → schema-AINZ2IMM.js.map} +0 -0
  439. /package/dist/cli-bundle/chunks/{search-7KSOLI2E.js.map → search-JMLFQEPJ.js.map} +0 -0
  440. /package/dist/cli-bundle/chunks/{search-DTL7CO22.js.map → search-NL3TSCYB.js.map} +0 -0
  441. /package/dist/cli-bundle/chunks/{stats-QNV7B2CE.js.map → stats-BKXCBIGT.js.map} +0 -0
  442. /package/dist/cli-bundle/chunks/{stats-IOXQMGI6.js.map → stats-UBD56TGK.js.map} +0 -0
  443. /package/dist/cli-bundle/chunks/{telemetry-NHR5RFXT.js.map → telemetry-N454RHG5.js.map} +0 -0
  444. /package/dist/cli-bundle/chunks/{telemetry-IV5C6JOM.js.map → telemetry-ZJXK3H7X.js.map} +0 -0
  445. /package/dist/cli-bundle/chunks/{test-PIL2CEEB.js.map → test-BQAKIXAT.js.map} +0 -0
  446. /package/dist/cli-bundle/chunks/{test-4Z37CXW4.js.map → test-O74JFUH5.js.map} +0 -0
  447. /package/dist/cli-bundle/chunks/{test-all-MFN4MYCV.js.map → test-all-7LV3I6S5.js.map} +0 -0
  448. /package/dist/cli-bundle/chunks/{test-all-GRLYHBNP.js.map → test-all-TDYCCBA4.js.map} +0 -0
  449. /package/dist/cli-bundle/chunks/{test-runs-7WCSC3TY.js.map → test-runs-E64M6XS3.js.map} +0 -0
  450. /package/dist/cli-bundle/chunks/{test-runs-7LRFWWCA.js.map → test-runs-LXZLULCI.js.map} +0 -0
  451. /package/dist/cli-bundle/chunks/{update-I4G34LKJ.js.map → update-36JM7YZT.js.map} +0 -0
  452. /package/dist/cli-bundle/chunks/{update-VI5DBZ3G.js.map → update-I246PCLO.js.map} +0 -0
  453. /package/dist/cli-bundle/chunks/{update-many-UYMTVF42.js.map → update-many-F4IKDWZB.js.map} +0 -0
  454. /package/dist/cli-bundle/chunks/{update-many-LOTAYUTN.js.map → update-many-NTWZ5YT3.js.map} +0 -0
  455. /package/dist/cli-bundle/chunks/{upgrade-ZZSC7CLV.js.map → upgrade-37F7JKES.js.map} +0 -0
  456. /package/dist/cli-bundle/chunks/{upgrade-LT2MLLPS.js.map → upgrade-L32JA4TZ.js.map} +0 -0
@@ -1,33 +1,35 @@
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]="c8e3c91e-a467-515d-8fdd-02fd7c237ebe")}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]="50b9ae79-2f9d-56b7-8b52-24c0a6416cd8")}catch(e){}}();
3
3
  import {
4
- buildRemediationCommands,
5
- scanHistoryDrift
6
- } from "./chunk-EAQLLID6.js";
4
+ buildRemediationCommands
5
+ } from "./chunk-PNYAAB4S.js";
7
6
  import {
8
7
  extractReferencedPmItemIdsFromCommand
9
- } from "./chunk-6OSG3EMX.js";
10
- import "./chunk-BE5G7HEL.js";
11
- import "./chunk-WSWOQP3Z.js";
12
- import "./chunk-K7SXBA75.js";
13
- import "./chunk-DMDEC4QP.js";
14
- import "./chunk-TALBUVWF.js";
15
- import "./chunk-DEYNERFX.js";
16
- import "./chunk-6N46IM44.js";
8
+ } from "./chunk-EWFY7SLA.js";
9
+ import {
10
+ scanHistoryDrift
11
+ } from "./chunk-C6SAP27O.js";
12
+ import "./chunk-ZYNJNPYD.js";
13
+ import "./chunk-4HFU4UO2.js";
14
+ import "./chunk-I7NYDZDV.js";
15
+ import "./chunk-F75JSIOZ.js";
16
+ import "./chunk-FDH2X65L.js";
17
+ import "./chunk-S2ZLDYGS.js";
18
+ import "./chunk-VAOUX6TK.js";
17
19
  import "./chunk-LXYVKYMQ.js";
18
20
  import {
19
21
  listAllFrontMatterWithBody
20
- } from "./chunk-MF6KSSMF.js";
21
- import "./chunk-UDWUDUJI.js";
22
+ } from "./chunk-HI7STVF2.js";
23
+ import "./chunk-ATEES5SX.js";
22
24
  import {
23
25
  normalizeStatusInput
24
- } from "./chunk-SNASEDXB.js";
26
+ } from "./chunk-UUWGCWBU.js";
25
27
  import {
26
28
  resolveItemTypeRegistry
27
- } from "./chunk-344GDQTH.js";
29
+ } from "./chunk-CCX4RSYZ.js";
28
30
  import {
29
31
  nowIso
30
- } from "./chunk-PYULT32I.js";
32
+ } from "./chunk-WUNFKP7M.js";
31
33
  import {
32
34
  DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS,
33
35
  DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS,
@@ -41,7 +43,7 @@ import {
41
43
  resolvePmRoot,
42
44
  resolveRuntimeStatusRegistry,
43
45
  toNonEmptyStringOrUndefined
44
- } from "./chunk-WNMRICXH.js";
46
+ } from "./chunk-A6LXQFO7.js";
45
47
 
46
48
  // dist/cli/commands/validate.js
47
49
  import fs from "node:fs/promises";
@@ -49,6 +51,205 @@ import { realpathSync } from "node:fs";
49
51
  import { execFile } from "node:child_process";
50
52
  import path from "node:path";
51
53
  import { promisify } from "node:util";
54
+
55
+ // dist/core/validate/fix-planning.js
56
+ var DEFAULT_GRANTED_FIX_SCOPES = ["metadata", "resolution"];
57
+ var SUPPORTED_FIX_SCOPES = ["metadata", "resolution", "lifecycle"];
58
+ var DEFAULT_RESOLUTION_BACKFILL_VALUE = "completed";
59
+ function quoteForCommand(value) {
60
+ return `"${value.replaceAll("\\", "\\\\").replaceAll('"', '\\"')}"`;
61
+ }
62
+ function toMeaningfulValue(value) {
63
+ const trimmed = value?.trim();
64
+ return trimmed !== void 0 && trimmed.length > 0 ? trimmed : void 0;
65
+ }
66
+ function planResolutionBackfillFixes(rows) {
67
+ const fixes = [];
68
+ for (const row of rows) {
69
+ if (!row.missing_fields.includes("resolution")) {
70
+ continue;
71
+ }
72
+ const value = toMeaningfulValue(row.close_reason) ?? DEFAULT_RESOLUTION_BACKFILL_VALUE;
73
+ fixes.push({
74
+ item_id: row.id,
75
+ check: "resolution",
76
+ field: "resolution",
77
+ kind: "set_resolution",
78
+ value,
79
+ command: `pm update ${row.id} --resolution ${quoteForCommand(value)}`,
80
+ gate: "resolution"
81
+ });
82
+ }
83
+ return fixes;
84
+ }
85
+ function planCloseReasonBackfillFixes(rows) {
86
+ const fixes = [];
87
+ for (const row of rows) {
88
+ const value = toMeaningfulValue(row.resolution);
89
+ if (value === void 0) {
90
+ continue;
91
+ }
92
+ fixes.push({
93
+ item_id: row.id,
94
+ check: "metadata",
95
+ field: "close_reason",
96
+ kind: "set_close_reason",
97
+ value,
98
+ command: `pm update ${row.id} --close-reason ${quoteForCommand(value)}`,
99
+ gate: "metadata"
100
+ });
101
+ }
102
+ return fixes;
103
+ }
104
+ function planTerminalParentFixes(rows) {
105
+ return rows.map((row) => {
106
+ if (row.grandparent_id !== void 0 && row.grandparent_active === true) {
107
+ return {
108
+ item_id: row.id,
109
+ check: "lifecycle",
110
+ field: "parent",
111
+ kind: "reparent",
112
+ parent_id: row.grandparent_id,
113
+ command: `pm update ${row.id} --parent ${row.grandparent_id}`,
114
+ gate: "lifecycle"
115
+ };
116
+ }
117
+ return {
118
+ item_id: row.id,
119
+ check: "lifecycle",
120
+ field: "parent",
121
+ kind: "unset_parent",
122
+ command: `pm update ${row.id} --unset parent`,
123
+ gate: "lifecycle"
124
+ };
125
+ });
126
+ }
127
+ function planStaleLinkPruneFixes(rows) {
128
+ const fixes = [];
129
+ for (const row of rows) {
130
+ if (row.classification !== "deleted") {
131
+ continue;
132
+ }
133
+ const noun = row.link_kind === "files" ? "files" : "docs";
134
+ fixes.push({
135
+ item_id: row.item_id,
136
+ check: "files",
137
+ field: row.link_kind,
138
+ kind: row.link_kind === "files" ? "prune_file_link" : "prune_doc_link",
139
+ path: row.path,
140
+ command: `pm ${noun} ${row.item_id} --remove ${quoteForCommand(row.path)}`
141
+ });
142
+ }
143
+ return fixes;
144
+ }
145
+ function resolveGrantedFixScopes(rawScopes) {
146
+ const tokens = (rawScopes ?? []).flatMap((raw) => raw.split(",")).map((raw) => raw.trim()).filter((raw) => raw.length > 0);
147
+ if (tokens.length === 0) {
148
+ if (rawScopes !== void 0 && rawScopes.length > 0) {
149
+ throw new PmCliError(`--fix-scope values must not be empty. Supported values: ${SUPPORTED_FIX_SCOPES.join(", ")}.`, EXIT_CODE.USAGE);
150
+ }
151
+ return new Set(DEFAULT_GRANTED_FIX_SCOPES);
152
+ }
153
+ const granted = /* @__PURE__ */ new Set();
154
+ for (const raw of tokens) {
155
+ const normalized = raw.toLowerCase().replaceAll("-", "_");
156
+ if (SUPPORTED_FIX_SCOPES.includes(normalized)) {
157
+ granted.add(normalized);
158
+ continue;
159
+ }
160
+ throw new PmCliError(`Unknown --fix-scope value "${raw}". Supported values: ${SUPPORTED_FIX_SCOPES.join(", ")}.`, EXIT_CODE.USAGE);
161
+ }
162
+ return granted;
163
+ }
164
+ function partitionFixesByGrant(fixes, granted) {
165
+ const applicable = [];
166
+ const gated = [];
167
+ for (const fix of fixes) {
168
+ if (fix.gate !== void 0 && !granted.has(fix.gate)) {
169
+ gated.push(fix);
170
+ } else {
171
+ applicable.push(fix);
172
+ }
173
+ }
174
+ return { applicable, gated };
175
+ }
176
+ function toFixOutputRow(fix) {
177
+ return {
178
+ item_id: fix.item_id,
179
+ check: fix.check,
180
+ field: fix.field,
181
+ command: fix.command,
182
+ ...fix.gate !== void 0 ? { gate: fix.gate } : {}
183
+ };
184
+ }
185
+
186
+ // dist/core/validate/missing-by-type.js
187
+ function buildMissingByTypeCounts(occurrences) {
188
+ const countsByType = /* @__PURE__ */ new Map();
189
+ for (const occurrence of occurrences) {
190
+ let fieldCounts = countsByType.get(occurrence.item_type);
191
+ if (!fieldCounts) {
192
+ fieldCounts = /* @__PURE__ */ new Map();
193
+ countsByType.set(occurrence.item_type, fieldCounts);
194
+ }
195
+ fieldCounts.set(occurrence.field, (fieldCounts.get(occurrence.field) ?? 0) + 1);
196
+ }
197
+ const result = {};
198
+ for (const type of [...countsByType.keys()].sort((left, right) => left.localeCompare(right))) {
199
+ const fieldCounts = countsByType.get(type);
200
+ const fields = {};
201
+ for (const field of [...fieldCounts.keys()].sort((left, right) => left.localeCompare(right))) {
202
+ fields[field] = fieldCounts.get(field);
203
+ }
204
+ result[type] = fields;
205
+ }
206
+ return result;
207
+ }
208
+
209
+ // dist/core/validate/stale-file-classification.js
210
+ var DEFAULT_STALE_PATH_CANDIDATE_LIMIT = 3;
211
+ function basenameOf(relativePath) {
212
+ const lastSlash = Math.max(relativePath.lastIndexOf("/"), relativePath.lastIndexOf("\\"));
213
+ return lastSlash === -1 ? relativePath : relativePath.slice(lastSlash + 1);
214
+ }
215
+ function classifyStaleLinkedPaths(stalePaths, candidateFiles, candidateLimit = DEFAULT_STALE_PATH_CANDIDATE_LIMIT) {
216
+ const limit = Number.isFinite(candidateLimit) && candidateLimit >= 1 ? Math.floor(candidateLimit) : DEFAULT_STALE_PATH_CANDIDATE_LIMIT;
217
+ const candidatesByBasename = /* @__PURE__ */ new Map();
218
+ for (const candidate of candidateFiles) {
219
+ const basename = basenameOf(candidate);
220
+ if (basename.length === 0) {
221
+ continue;
222
+ }
223
+ const bucket = candidatesByBasename.get(basename);
224
+ if (bucket) {
225
+ bucket.push(candidate);
226
+ } else {
227
+ candidatesByBasename.set(basename, [candidate]);
228
+ }
229
+ }
230
+ return stalePaths.map((stalePath) => {
231
+ const matches = (candidatesByBasename.get(basenameOf(stalePath)) ?? []).filter((candidate) => candidate !== stalePath).sort((left, right) => left.localeCompare(right));
232
+ if (matches.length === 0) {
233
+ return {
234
+ path: stalePath,
235
+ classification: "deleted",
236
+ candidates: [],
237
+ candidates_truncated: false
238
+ };
239
+ }
240
+ return {
241
+ path: stalePath,
242
+ classification: "moved",
243
+ candidates: matches.slice(0, limit),
244
+ candidates_truncated: matches.length > limit
245
+ };
246
+ });
247
+ }
248
+ function summarizeStaleLinkedPathClassifications(classified) {
249
+ return classified.map((entry) => entry.classification === "moved" ? `${entry.path}:moved:${entry.candidates[0]}` : `${entry.path}:deleted`);
250
+ }
251
+
252
+ // dist/cli/commands/validate.js
52
253
  var FILE_SCAN_DIRECTORIES = ["src", "tests", "docs"];
53
254
  var FILE_SCAN_ROOT_FILES = [
54
255
  "README.md",
@@ -520,17 +721,32 @@ function resolveRequestedChecks(options) {
520
721
  requested.add("command_references");
521
722
  }
522
723
  if (requested.size === 0) {
523
- requested.add("metadata");
524
- requested.add("resolution");
525
- requested.add("lifecycle");
724
+ if (options.autoFix) {
725
+ requested.add("metadata");
726
+ requested.add("resolution");
727
+ requested.add("lifecycle");
728
+ }
729
+ if (options.pruneMissing) {
730
+ requested.add("files");
731
+ }
732
+ if (requested.size === 0) {
733
+ requested.add("metadata");
734
+ requested.add("resolution");
735
+ requested.add("lifecycle");
736
+ requested.add("files");
737
+ requested.add("command_references");
738
+ requested.add("history_drift");
739
+ }
740
+ return requested;
741
+ }
742
+ if (options.pruneMissing) {
526
743
  requested.add("files");
527
- requested.add("command_references");
528
- requested.add("history_drift");
529
744
  }
530
745
  return requested;
531
746
  }
532
747
  function buildMetadataCheck(items, metadataPolicy, statusRegistry, verboseDiagnostics) {
533
748
  const missingByField = Object.fromEntries(SUPPORTED_METADATA_REQUIRED_FIELDS.map((field) => [field, []]));
749
+ const itemsById = new Map(items.map((item) => [item.id, item]));
534
750
  for (const item of items) {
535
751
  for (const field of SUPPORTED_METADATA_REQUIRED_FIELDS) {
536
752
  if (!isMetadataFieldMissing(item, field, statusRegistry)) {
@@ -555,6 +771,14 @@ function buildMetadataCheck(items, metadataPolicy, statusRegistry, verboseDiagno
555
771
  counts[countKey] = value;
556
772
  }
557
773
  }
774
+ const missingFieldOccurrences = [];
775
+ for (const field of metadataPolicy.required_fields) {
776
+ for (const itemId of missingByField[field] ?? []) {
777
+ const itemType = itemsById.get(itemId)?.type;
778
+ missingFieldOccurrences.push({ item_type: typeof itemType === "string" && itemType.length > 0 ? itemType : "Unknown", field });
779
+ }
780
+ }
781
+ const missingByType = buildMissingByTypeCounts(missingFieldOccurrences);
558
782
  const details = {
559
783
  checked_items: items.length,
560
784
  metadata_profile: metadataPolicy.profile,
@@ -562,7 +786,8 @@ function buildMetadataCheck(items, metadataPolicy, statusRegistry, verboseDiagno
562
786
  metadata_profile_fallback_to_core: metadataPolicy.fallback_to_core,
563
787
  required_fields: [...metadataPolicy.required_fields],
564
788
  supported_required_fields: [...SUPPORTED_METADATA_REQUIRED_FIELDS],
565
- counts
789
+ counts,
790
+ missing_by_type: missingByType
566
791
  };
567
792
  if (metadataPolicy.configured_custom_fields.length > 0) {
568
793
  details.configured_custom_required_fields = [...metadataPolicy.configured_custom_fields];
@@ -581,13 +806,18 @@ function buildMetadataCheck(items, metadataPolicy, statusRegistry, verboseDiagno
581
806
  details[idsKey] = summarized.values;
582
807
  details[truncatedKey] = summarized.truncated;
583
808
  }
809
+ const closeReasonBackfillRows = metadataPolicy.required_fields.includes("close_reason") ? (missingByField.close_reason ?? []).map((itemId) => ({
810
+ id: itemId,
811
+ resolution: toNonEmptyStringOrUndefined(itemsById.get(itemId)?.resolution)
812
+ })) : [];
584
813
  return {
585
814
  check: {
586
815
  name: "metadata",
587
816
  status: warningTokens.length === 0 ? "ok" : "warn",
588
817
  details
589
818
  },
590
- warnings: warningTokens
819
+ warnings: warningTokens,
820
+ closeReasonBackfillRows
591
821
  };
592
822
  }
593
823
  function buildResolutionCheck(items, statusRegistry, verboseDiagnostics) {
@@ -595,6 +825,7 @@ function buildResolutionCheck(items, statusRegistry, verboseDiagnostics) {
595
825
  terminalDoneStatuses.add(statusRegistry.close_status);
596
826
  const closedItems = items.filter((item) => terminalDoneStatuses.has(normalizeStatusForRegistry(item.status, statusRegistry)));
597
827
  const missingResolutionRows = [];
828
+ const resolutionBackfillRows = [];
598
829
  for (const item of closedItems) {
599
830
  const missingFields = RESOLUTION_FIELD_KEYS.filter((field) => !toNonEmptyStringOrUndefined(item[field]));
600
831
  if (missingFields.length === 0) {
@@ -604,6 +835,11 @@ function buildResolutionCheck(items, statusRegistry, verboseDiagnostics) {
604
835
  id: item.id,
605
836
  missing_fields: missingFields
606
837
  });
838
+ resolutionBackfillRows.push({
839
+ id: item.id,
840
+ missing_fields: missingFields,
841
+ close_reason: toNonEmptyStringOrUndefined(item.close_reason)
842
+ });
607
843
  }
608
844
  const warnings = missingResolutionRows.length > 0 ? [`validate_resolution_missing_fields:${missingResolutionRows.length}`] : [];
609
845
  const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;
@@ -623,7 +859,8 @@ function buildResolutionCheck(items, statusRegistry, verboseDiagnostics) {
623
859
  missing_resolution_remediation_hints_truncated: summarizedHints.truncated
624
860
  }
625
861
  },
626
- warnings
862
+ warnings,
863
+ resolutionBackfillRows
627
864
  };
628
865
  }
629
866
  function buildLifecycleDependencyGraph(activeItems) {
@@ -744,6 +981,7 @@ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverit
744
981
  const activeItems = items.filter((item) => !isTerminalStatus(item.status, statusRegistry));
745
982
  const closureLikeRows = [];
746
983
  const terminalParentRows = [];
984
+ const terminalParentFixRows = [];
747
985
  const staleBlockerRows = [];
748
986
  for (const item of activeItems) {
749
987
  const closureLikeFields = Object.entries(lifecyclePatternPolicy.closure_like_metadata_field_patterns).filter(([field, patterns]) => {
@@ -769,6 +1007,14 @@ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverit
769
1007
  parent_id: parent.id,
770
1008
  parent_status: parent.status
771
1009
  });
1010
+ const grandparentId = toMeaningfulString(parent.parent);
1011
+ const grandparent = grandparentId ? itemsById.get(grandparentId) : void 0;
1012
+ terminalParentFixRows.push({
1013
+ id: item.id,
1014
+ parent_id: parent.id,
1015
+ grandparent_id: grandparent?.id,
1016
+ grandparent_active: grandparent !== void 0 && !isTerminalStatus(grandparent.status, statusRegistry)
1017
+ });
772
1018
  }
773
1019
  }
774
1020
  if (includeStaleBlockers) {
@@ -806,6 +1052,7 @@ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverit
806
1052
  }
807
1053
  closureLikeRows.sort((left, right) => left.id.localeCompare(right.id));
808
1054
  terminalParentRows.sort((left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id));
1055
+ terminalParentFixRows.sort((left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id));
809
1056
  staleBlockerRows.sort((left, right) => left.id.localeCompare(right.id));
810
1057
  const dependencyCycleDiagnostics = detectLifecycleDependencyCycles(activeItems);
811
1058
  const warnings = [];
@@ -862,31 +1109,43 @@ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverit
862
1109
  closure_like_actual_result_pattern_source: lifecyclePatternPolicy.closure_like_metadata_field_pattern_sources.actual_result
863
1110
  }
864
1111
  },
865
- warnings
1112
+ warnings,
1113
+ terminalParentFixRows
866
1114
  };
867
1115
  }
868
1116
  async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, includePmInternals, verboseFileLists) {
869
1117
  const linkedProjectPaths = /* @__PURE__ */ new Set();
870
1118
  const missingLinkedPaths = [];
1119
+ const staleLinkRows = [];
871
1120
  for (const item of items) {
872
- const linkedArtifacts = [...item.files ?? [], ...item.docs ?? []];
873
- for (const artifact of linkedArtifacts) {
874
- if (artifact.scope !== "project") {
875
- continue;
876
- }
877
- const normalizedPath = normalizeRelativePath(artifact.path);
878
- if (normalizedPath.length === 0) {
879
- continue;
880
- }
881
- linkedProjectPaths.add(normalizedPath);
882
- const absolutePath = path.isAbsolute(artifact.path) ? artifact.path : path.resolve(workspaceRoot, artifact.path);
883
- try {
884
- const stats = await fs.stat(absolutePath);
885
- if (!stats.isFile()) {
1121
+ const linkedArtifactGroups = [
1122
+ { link_kind: "files", artifacts: item.files ?? [] },
1123
+ { link_kind: "docs", artifacts: item.docs ?? [] }
1124
+ ];
1125
+ for (const group of linkedArtifactGroups) {
1126
+ for (const artifact of group.artifacts) {
1127
+ if (artifact.scope !== "project") {
1128
+ continue;
1129
+ }
1130
+ const normalizedPath = normalizeRelativePath(artifact.path);
1131
+ if (normalizedPath.length === 0) {
1132
+ continue;
1133
+ }
1134
+ linkedProjectPaths.add(normalizedPath);
1135
+ const absolutePath = path.isAbsolute(artifact.path) ? artifact.path : path.resolve(workspaceRoot, artifact.path);
1136
+ let missing = false;
1137
+ try {
1138
+ const stats = await fs.stat(absolutePath);
1139
+ if (!stats.isFile()) {
1140
+ missing = true;
1141
+ }
1142
+ } catch {
1143
+ missing = true;
1144
+ }
1145
+ if (missing) {
886
1146
  missingLinkedPaths.push(normalizedPath);
1147
+ staleLinkRows.push({ item_id: item.id, path: normalizedPath, link_kind: group.link_kind });
887
1148
  }
888
- } catch {
889
- missingLinkedPaths.push(normalizedPath);
890
1149
  }
891
1150
  }
892
1151
  }
@@ -910,6 +1169,13 @@ async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, inclu
910
1169
  };
911
1170
  }
912
1171
  const orphanedFiles = candidateFiles.filter((candidate) => !linkedProjectPaths.has(candidate));
1172
+ const classifiedStalePaths = classifyStaleLinkedPaths(uniqueMissingLinkedPaths, candidateFiles);
1173
+ const classificationByPath = new Map(classifiedStalePaths.map((entry) => [entry.path, entry.classification]));
1174
+ const movedStalePathCount = classifiedStalePaths.filter((entry) => entry.classification === "moved").length;
1175
+ const staleLinkPruneRows = staleLinkRows.map((row) => ({
1176
+ ...row,
1177
+ classification: classificationByPath.get(row.path) ?? "deleted"
1178
+ })).sort((left, right) => left.item_id.localeCompare(right.item_id) || left.path.localeCompare(right.path) || left.link_kind.localeCompare(right.link_kind));
913
1179
  const warnings = [];
914
1180
  if (strictModeForcesPmInternals) {
915
1181
  warnings.push("validate_files_tracked_all_strict_forces_pm_internals");
@@ -922,6 +1188,7 @@ async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, inclu
922
1188
  }
923
1189
  const summarizedMissing = summarizeFileList(uniqueMissingLinkedPaths, verboseFileLists);
924
1190
  const summarizedOrphaned = summarizeFileList(orphanedFiles, verboseFileLists);
1191
+ const summarizedClassifications = summarizeFileList(summarizeStaleLinkedPathClassifications(classifiedStalePaths), verboseFileLists);
925
1192
  return {
926
1193
  check: {
927
1194
  name: "files",
@@ -952,13 +1219,18 @@ async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, inclu
952
1219
  missing_linked_paths_total: summarizedMissing.total,
953
1220
  missing_linked_paths: summarizedMissing.values,
954
1221
  missing_linked_paths_truncated: summarizedMissing.truncated,
1222
+ missing_linked_paths_moved_count: movedStalePathCount,
1223
+ missing_linked_paths_deleted_count: uniqueMissingLinkedPaths.length - movedStalePathCount,
1224
+ missing_linked_path_classifications: summarizedClassifications.values,
1225
+ missing_linked_path_classifications_truncated: summarizedClassifications.truncated,
955
1226
  orphaned_paths_count: orphanedFiles.length,
956
1227
  orphaned_paths_total: summarizedOrphaned.total,
957
1228
  orphaned_paths: summarizedOrphaned.values,
958
1229
  orphaned_paths_truncated: summarizedOrphaned.truncated
959
1230
  }
960
1231
  },
961
- warnings
1232
+ warnings,
1233
+ staleLinkPruneRows
962
1234
  };
963
1235
  }
964
1236
  async function buildHistoryDriftCheck(pmRoot, items, verboseDiagnostics) {
@@ -1057,7 +1329,93 @@ function buildCommandReferencesCheck(items, idPrefix, verboseDiagnostics) {
1057
1329
  warnings
1058
1330
  };
1059
1331
  }
1332
+ var VALIDATE_AUTO_FIX_MESSAGE = "pm validate auto-fix";
1333
+ async function applyValidateFix(fix, global) {
1334
+ switch (fix.kind) {
1335
+ case "set_resolution":
1336
+ case "set_close_reason":
1337
+ case "reparent":
1338
+ case "unset_parent": {
1339
+ const { runUpdate } = await import("./update-I246PCLO.js");
1340
+ const updateOptions = { message: VALIDATE_AUTO_FIX_MESSAGE };
1341
+ if (fix.kind === "set_resolution") {
1342
+ updateOptions.resolution = fix.value;
1343
+ } else if (fix.kind === "set_close_reason") {
1344
+ updateOptions.closeReason = fix.value;
1345
+ } else if (fix.kind === "reparent") {
1346
+ updateOptions.parent = fix.parent_id;
1347
+ } else {
1348
+ updateOptions.unset = ["parent"];
1349
+ }
1350
+ await runUpdate(fix.item_id, updateOptions, global);
1351
+ return;
1352
+ }
1353
+ case "prune_file_link": {
1354
+ throw new Error(`Unsupported non-batched fix kind: ${fix.kind}`);
1355
+ }
1356
+ case "prune_doc_link": {
1357
+ throw new Error(`Unsupported non-batched fix kind: ${fix.kind}`);
1358
+ }
1359
+ }
1360
+ }
1361
+ function pruneBatchKey(fix) {
1362
+ if (fix.kind !== "prune_file_link" && fix.kind !== "prune_doc_link") {
1363
+ return null;
1364
+ }
1365
+ return `${fix.kind}:${fix.item_id}`;
1366
+ }
1367
+ async function applyValidateFixes(applicable, global) {
1368
+ const applied = [];
1369
+ const failed = [];
1370
+ const pruneBatches = /* @__PURE__ */ new Map();
1371
+ for (const fix of applicable) {
1372
+ const batchKey = pruneBatchKey(fix);
1373
+ if (batchKey === null) {
1374
+ try {
1375
+ await applyValidateFix(fix, global);
1376
+ applied.push(fix);
1377
+ } catch (error) {
1378
+ failed.push({ fix, error });
1379
+ }
1380
+ continue;
1381
+ }
1382
+ const existing = pruneBatches.get(batchKey);
1383
+ if (existing) {
1384
+ existing.push(fix);
1385
+ } else {
1386
+ pruneBatches.set(batchKey, [fix]);
1387
+ }
1388
+ }
1389
+ for (const batch of pruneBatches.values()) {
1390
+ const first = batch[0];
1391
+ if (!first) {
1392
+ continue;
1393
+ }
1394
+ const remove = batch.map((fix) => fix.path).filter((value) => typeof value === "string" && value.length > 0);
1395
+ try {
1396
+ if (first.kind === "prune_file_link") {
1397
+ const { runFiles } = await import("./files-GUXUM2MB.js");
1398
+ await runFiles(first.item_id, { remove, message: VALIDATE_AUTO_FIX_MESSAGE }, global);
1399
+ } else {
1400
+ const { runDocs } = await import("./docs-I3BAF5WH.js");
1401
+ await runDocs(first.item_id, { remove, message: VALIDATE_AUTO_FIX_MESSAGE }, global);
1402
+ }
1403
+ applied.push(...batch);
1404
+ } catch (error) {
1405
+ failed.push(...batch.map((fix) => ({ fix, error })));
1406
+ }
1407
+ }
1408
+ return { applied, failed };
1409
+ }
1060
1410
  async function runValidate(options, global) {
1411
+ const fixesRequested = options.autoFix === true || options.pruneMissing === true;
1412
+ if (options.dryRun === true && !fixesRequested) {
1413
+ throw new PmCliError("--dry-run requires --auto-fix or --prune-missing (there is nothing to preview otherwise).", EXIT_CODE.USAGE);
1414
+ }
1415
+ if (options.fixScope !== void 0 && options.fixScope.length > 0 && options.autoFix !== true) {
1416
+ throw new PmCliError("--fix-scope requires --auto-fix.", EXIT_CODE.USAGE);
1417
+ }
1418
+ const grantedFixScopes = resolveGrantedFixScopes(options.fixScope);
1061
1419
  const pmRoot = resolvePmRoot(process.cwd(), global.path);
1062
1420
  if (!await pathExists(getSettingsPath(pmRoot))) {
1063
1421
  throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
@@ -1085,17 +1443,29 @@ async function runValidate(options, global) {
1085
1443
  checks.push(built.check);
1086
1444
  warnings.push(...built.warnings);
1087
1445
  };
1446
+ let closeReasonBackfillRows = [];
1447
+ let resolutionBackfillRows = [];
1448
+ let terminalParentFixRows = [];
1449
+ let staleLinkPruneRows = [];
1088
1450
  if (requestedChecks.has("metadata")) {
1089
- record(buildMetadataCheck(items, metadataPolicy, statusRegistry, Boolean(options.verboseDiagnostics)));
1451
+ const built = buildMetadataCheck(items, metadataPolicy, statusRegistry, Boolean(options.verboseDiagnostics));
1452
+ closeReasonBackfillRows = built.closeReasonBackfillRows;
1453
+ record(built);
1090
1454
  }
1091
1455
  if (requestedChecks.has("resolution")) {
1092
- record(buildResolutionCheck(items, statusRegistry, Boolean(options.verboseDiagnostics)));
1456
+ const built = buildResolutionCheck(items, statusRegistry, Boolean(options.verboseDiagnostics));
1457
+ resolutionBackfillRows = built.resolutionBackfillRows;
1458
+ record(built);
1093
1459
  }
1094
1460
  if (requestedChecks.has("lifecycle")) {
1095
- record(buildLifecycleCheck(items, Boolean(options.checkStaleBlockers), dependencyCycleSeverity, statusRegistry, lifecyclePatternPolicy, Boolean(options.verboseDiagnostics)));
1461
+ const built = buildLifecycleCheck(items, Boolean(options.checkStaleBlockers), dependencyCycleSeverity, statusRegistry, lifecyclePatternPolicy, Boolean(options.verboseDiagnostics));
1462
+ terminalParentFixRows = built.terminalParentFixRows;
1463
+ record(built);
1096
1464
  }
1097
1465
  if (requestedChecks.has("files")) {
1098
- record(await buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, Boolean(options.includePmInternals), Boolean(options.verboseFileLists)));
1466
+ const built = await buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, Boolean(options.includePmInternals), Boolean(options.verboseFileLists));
1467
+ staleLinkPruneRows = built.staleLinkPruneRows;
1468
+ record(built);
1099
1469
  }
1100
1470
  if (requestedChecks.has("command_references")) {
1101
1471
  record(buildCommandReferencesCheck(items, settings.id_prefix, Boolean(options.verboseDiagnostics)));
@@ -1103,6 +1473,47 @@ async function runValidate(options, global) {
1103
1473
  if (requestedChecks.has("history_drift")) {
1104
1474
  record(await buildHistoryDriftCheck(pmRoot, items, Boolean(options.verboseDiagnostics)));
1105
1475
  }
1476
+ let fixes;
1477
+ if (fixesRequested) {
1478
+ const planned = [];
1479
+ if (options.autoFix === true) {
1480
+ planned.push(...planCloseReasonBackfillFixes(closeReasonBackfillRows));
1481
+ planned.push(...planResolutionBackfillFixes(resolutionBackfillRows));
1482
+ planned.push(...planTerminalParentFixes(terminalParentFixRows));
1483
+ }
1484
+ if (options.pruneMissing === true) {
1485
+ planned.push(...planStaleLinkPruneFixes(staleLinkPruneRows));
1486
+ }
1487
+ const { applicable, gated } = partitionFixesByGrant(planned, grantedFixScopes);
1488
+ const dryRun = options.dryRun === true;
1489
+ const appliedFixRows = [];
1490
+ const failedFixRows = [];
1491
+ if (!dryRun) {
1492
+ const applied = await applyValidateFixes(applicable, global);
1493
+ appliedFixRows.push(...applied.applied.map(toFixOutputRow));
1494
+ failedFixRows.push(...applied.failed.map(({ fix, error }) => ({
1495
+ ...toFixOutputRow(fix),
1496
+ error: error instanceof Error ? error.message : String(error)
1497
+ })));
1498
+ }
1499
+ fixes = {
1500
+ mode: dryRun ? "dry_run" : "apply",
1501
+ auto_fix: options.autoFix === true,
1502
+ prune_missing: options.pruneMissing === true,
1503
+ granted_fix_scopes: [...grantedFixScopes].sort((left, right) => left.localeCompare(right)),
1504
+ planned_count: planned.length,
1505
+ applied_count: appliedFixRows.length,
1506
+ gated_count: gated.length,
1507
+ failed_count: failedFixRows.length,
1508
+ planned_fixes: planned.map(toFixOutputRow),
1509
+ applied_fixes: appliedFixRows,
1510
+ gated_fixes: gated.map((fix) => ({
1511
+ ...toFixOutputRow(fix),
1512
+ gate_hint: `Withheld: re-run with --fix-scope ${fix.gate} to apply.`
1513
+ })),
1514
+ failed_fixes: failedFixRows
1515
+ };
1516
+ }
1106
1517
  const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));
1107
1518
  const hasErrors = checks.some((check) => check.status === "error");
1108
1519
  return {
@@ -1110,12 +1521,13 @@ async function runValidate(options, global) {
1110
1521
  has_warnings: normalizedWarnings.length > 0,
1111
1522
  checks,
1112
1523
  warnings: normalizedWarnings,
1524
+ ...fixes !== void 0 ? { fixes } : {},
1113
1525
  generated_at: nowIso()
1114
1526
  };
1115
1527
  }
1116
1528
  export {
1117
1529
  runValidate
1118
1530
  };
1119
- //# sourceMappingURL=validate-IQIQSKUX.js.map
1531
+ //# sourceMappingURL=validate-46KCRHL7.js.map
1120
1532
 
1121
- //# debugId=c8e3c91e-a467-515d-8fdd-02fd7c237ebe
1533
+ //# debugId=50b9ae79-2f9d-56b7-8b52-24c0a6416cd8