@unbrained/pm-cli 2026.6.11 → 2026.6.13

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 (447) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +1 -1
  3. package/dist/cli/commands/completion.js +20 -8
  4. package/dist/cli/commands/completion.js.map +1 -1
  5. package/dist/cli/commands/create.js +13 -3
  6. package/dist/cli/commands/create.js.map +1 -1
  7. package/dist/cli/commands/docs.d.ts +2 -0
  8. package/dist/cli/commands/docs.js +2 -2
  9. package/dist/cli/commands/docs.js.map +1 -1
  10. package/dist/cli/commands/files.d.ts +2 -0
  11. package/dist/cli/commands/files.js +2 -2
  12. package/dist/cli/commands/files.js.map +1 -1
  13. package/dist/cli/commands/health.d.ts +1 -1
  14. package/dist/cli/commands/health.js +77 -2
  15. package/dist/cli/commands/health.js.map +1 -1
  16. package/dist/cli/commands/history-repair.d.ts +36 -0
  17. package/dist/cli/commands/history-repair.js +68 -3
  18. package/dist/cli/commands/history-repair.js.map +1 -1
  19. package/dist/cli/commands/index.d.ts +1 -1
  20. package/dist/cli/commands/index.js +3 -3
  21. package/dist/cli/commands/index.js.map +1 -1
  22. package/dist/cli/commands/linked-artifacts.d.ts +18 -0
  23. package/dist/cli/commands/linked-artifacts.js +26 -3
  24. package/dist/cli/commands/linked-artifacts.js.map +1 -1
  25. package/dist/cli/commands/plan.d.ts +6 -0
  26. package/dist/cli/commands/plan.js +93 -32
  27. package/dist/cli/commands/plan.js.map +1 -1
  28. package/dist/cli/commands/validate.d.ts +20 -0
  29. package/dist/cli/commands/validate.js +292 -28
  30. package/dist/cli/commands/validate.js.map +1 -1
  31. package/dist/cli/error-guidance.js +29 -2
  32. package/dist/cli/error-guidance.js.map +1 -1
  33. package/dist/cli/help-content.js +7 -3
  34. package/dist/cli/help-content.js.map +1 -1
  35. package/dist/cli/main.js +13 -3
  36. package/dist/cli/main.js.map +1 -1
  37. package/dist/cli/register-mutation.js +47 -16
  38. package/dist/cli/register-mutation.js.map +1 -1
  39. package/dist/cli/register-operations.js +10 -2
  40. package/dist/cli/register-operations.js.map +1 -1
  41. package/dist/cli/register-setup.js +16 -16
  42. package/dist/cli/register-setup.js.map +1 -1
  43. package/dist/cli-bundle/chunks/{activity-XADJOG6G.js → activity-PPO7QWJF.js} +11 -11
  44. package/dist/cli-bundle/chunks/activity-XIOTGZMU.js +16 -0
  45. package/dist/cli-bundle/chunks/{aggregate-6OTS3AOO.js → aggregate-IRHJWEKG.js} +10 -10
  46. package/dist/cli-bundle/chunks/{aggregate-OD36DJU5.js → aggregate-XEBW22UQ.js} +10 -10
  47. package/dist/cli-bundle/chunks/{append-JYWO4P7W.js → append-N2AWXKZC.js} +8 -8
  48. package/dist/cli-bundle/chunks/{append-KG55G7S3.js → append-NL67JNJU.js} +8 -8
  49. package/dist/cli-bundle/chunks/{chunk-IH4MBKK7.js → chunk-2ANTZBYF.js} +5 -5
  50. package/dist/cli-bundle/chunks/{chunk-F75JSIOZ.js → chunk-2J2AH4V5.js} +6 -6
  51. package/dist/cli-bundle/chunks/{chunk-CCX4RSYZ.js → chunk-32XSW44C.js} +2 -2
  52. package/dist/cli-bundle/chunks/{chunk-DY6C42S6.js → chunk-36BCSMKP.js} +9 -9
  53. package/dist/cli-bundle/chunks/{chunk-XUC4C4PT.js → chunk-3CQPVBK3.js} +3 -3
  54. package/dist/cli-bundle/chunks/{chunk-SXKNJPQ7.js → chunk-3FMQMHAG.js} +3 -3
  55. package/dist/cli-bundle/chunks/{chunk-I7NYDZDV.js → chunk-3VULHQNS.js} +2 -2
  56. package/dist/cli-bundle/chunks/{chunk-HHHJ2GI3.js → chunk-4FHLNNW7.js} +8 -8
  57. package/dist/cli-bundle/chunks/{chunk-RXAP6JL5.js → chunk-4JHJ7YG2.js} +9 -9
  58. package/dist/cli-bundle/chunks/{chunk-P5BJOMBB.js → chunk-4TPFXE2R.js} +9 -9
  59. package/dist/cli-bundle/chunks/{chunk-XJDGS74Y.js → chunk-4ZKKZMLH.js} +8 -8
  60. package/dist/cli-bundle/chunks/{chunk-XJDGS74Y.js.map → chunk-4ZKKZMLH.js.map} +1 -1
  61. package/dist/cli-bundle/chunks/{chunk-3SLOMKCJ.js → chunk-5HSAHRYA.js} +12 -12
  62. package/dist/cli-bundle/chunks/{chunk-ZLMIWZUG.js → chunk-5LMF75Q7.js} +2 -2
  63. package/dist/cli-bundle/chunks/{chunk-TK5VZFHY.js → chunk-6TBR5AZ2.js} +7 -7
  64. package/dist/cli-bundle/chunks/{chunk-ATEES5SX.js → chunk-6ZFTM65G.js} +2 -2
  65. package/dist/cli-bundle/chunks/{chunk-P2PSODAQ.js → chunk-7CRFV6JR.js} +111 -10
  66. package/dist/cli-bundle/chunks/chunk-7CRFV6JR.js.map +7 -0
  67. package/dist/cli-bundle/chunks/{chunk-VFUZV5EB.js → chunk-7SM7VA5I.js} +5 -5
  68. package/dist/cli-bundle/chunks/{chunk-GKIZW7SM.js → chunk-AAUYXSFF.js} +3 -3
  69. package/dist/cli-bundle/chunks/{chunk-FXRU333M.js → chunk-AGG32LKL.js} +111 -10
  70. package/dist/cli-bundle/chunks/chunk-AGG32LKL.js.map +1 -0
  71. package/dist/cli-bundle/chunks/{chunk-OASDW5UI.js → chunk-AUDDXKNX.js} +7 -7
  72. package/dist/cli-bundle/chunks/{chunk-ZMW77VWV.js → chunk-BVL5KGVA.js} +9 -9
  73. package/dist/cli-bundle/chunks/{chunk-4JCSYR6F.js → chunk-C24PWDFG.js} +3 -3
  74. package/dist/cli-bundle/chunks/{chunk-4HFU4UO2.js → chunk-CEGUH2E5.js} +3 -3
  75. package/dist/cli-bundle/chunks/{chunk-Y3YKK7CY.js → chunk-DWG4FHPY.js} +2 -2
  76. package/dist/cli-bundle/chunks/chunk-EKS6O2IR.js +217 -0
  77. package/dist/cli-bundle/chunks/chunk-EKS6O2IR.js.map +1 -0
  78. package/dist/cli-bundle/chunks/{chunk-YW6Q3RYZ.js → chunk-GFBEXDCQ.js} +7 -7
  79. package/dist/cli-bundle/chunks/{chunk-XMBI6TNW.js → chunk-GOO4UXBI.js} +4 -4
  80. package/dist/cli-bundle/chunks/{chunk-IGVJRZ6H.js → chunk-GRZGHGRG.js} +8 -8
  81. package/dist/cli-bundle/chunks/{chunk-E5DUIJA4.js → chunk-HLEGAQXT.js} +20 -7
  82. package/dist/cli-bundle/chunks/chunk-HLEGAQXT.js.map +7 -0
  83. package/dist/cli-bundle/chunks/chunk-HWHONML5.js +190 -0
  84. package/dist/cli-bundle/chunks/chunk-HWHONML5.js.map +7 -0
  85. package/dist/cli-bundle/chunks/{chunk-TNAP7EJX.js → chunk-HZOX5BYD.js} +2 -2
  86. package/dist/cli-bundle/chunks/{chunk-VSRZRLG3.js → chunk-IIOIBAQW.js} +3 -3
  87. package/dist/cli-bundle/chunks/{chunk-IUKD4W6Z.js → chunk-IXVSSHGV.js} +2 -2
  88. package/dist/cli-bundle/chunks/{chunk-WUNFKP7M.js → chunk-IZHCCG4S.js} +2 -2
  89. package/dist/cli-bundle/chunks/{chunk-VAOUX6TK.js → chunk-JCTZV7TO.js} +2 -2
  90. package/dist/cli-bundle/chunks/{chunk-ZYNJNPYD.js → chunk-JE5IZXDS.js} +4 -4
  91. package/dist/cli-bundle/chunks/{chunk-QNJSITCX.js → chunk-JW7D6437.js} +7 -7
  92. package/dist/cli-bundle/chunks/{chunk-B65UUCGQ.js → chunk-JWXTOYBI.js} +5 -5
  93. package/dist/cli-bundle/chunks/{chunk-7RIT3OCD.js → chunk-KHGTYCJ6.js} +12 -12
  94. package/dist/cli-bundle/chunks/{chunk-HI7STVF2.js → chunk-L6YQONLM.js} +11 -27
  95. package/dist/cli-bundle/chunks/chunk-L6YQONLM.js.map +1 -0
  96. package/dist/cli-bundle/chunks/{chunk-FY4SPXSC.js → chunk-LFW5NQUP.js} +59 -86
  97. package/dist/cli-bundle/chunks/chunk-LFW5NQUP.js.map +7 -0
  98. package/dist/cli-bundle/chunks/{chunk-VPEAS7PS.js → chunk-LGOXXQUW.js} +2 -2
  99. package/dist/cli-bundle/chunks/{chunk-I2IJY2NL.js → chunk-LOAR5TKX.js} +2 -2
  100. package/dist/cli-bundle/chunks/{chunk-S26FESD4.js → chunk-LSSTKL3Y.js} +3 -3
  101. package/dist/cli-bundle/chunks/{chunk-CW6E4NAT.js → chunk-LYNQ3NGI.js} +8 -8
  102. package/dist/cli-bundle/chunks/{chunk-4YFAGDRH.js → chunk-M3SI2REU.js} +8 -8
  103. package/dist/cli-bundle/chunks/{chunk-73ZPG2I3.js → chunk-MACCNKSZ.js} +3 -3
  104. package/dist/cli-bundle/chunks/{chunk-IKOH24GZ.js → chunk-MGAQ6KZG.js} +20 -15
  105. package/dist/cli-bundle/chunks/{chunk-IKOH24GZ.js.map → chunk-MGAQ6KZG.js.map} +2 -2
  106. package/dist/cli-bundle/chunks/chunk-NAWVUHXH.js +220 -0
  107. package/dist/cli-bundle/chunks/chunk-NAWVUHXH.js.map +7 -0
  108. package/dist/cli-bundle/chunks/{chunk-P5U5EOMA.js → chunk-NN6RKGFW.js} +3 -3
  109. package/dist/cli-bundle/chunks/{chunk-GWZSYR6X.js → chunk-O3YCJOVX.js} +2 -2
  110. package/dist/cli-bundle/chunks/{chunk-7UGSRQCL.js → chunk-PEH7SZD2.js} +7 -7
  111. package/dist/cli-bundle/chunks/{chunk-7UGSRQCL.js.map → chunk-PEH7SZD2.js.map} +2 -2
  112. package/dist/cli-bundle/chunks/{chunk-UOO6BYIA.js → chunk-PNYAAB4S.js} +21 -188
  113. package/dist/cli-bundle/chunks/chunk-PNYAAB4S.js.map +1 -0
  114. package/dist/cli-bundle/chunks/{chunk-UUWGCWBU.js → chunk-QQG4HEX7.js} +3 -3
  115. package/dist/cli-bundle/chunks/{chunk-XTKJSVWH.js → chunk-QU3OPNVV.js} +2 -2
  116. package/dist/cli-bundle/chunks/{chunk-LCSCXBGT.js → chunk-R4VWYWRN.js} +19 -193
  117. package/dist/cli-bundle/chunks/chunk-R4VWYWRN.js.map +7 -0
  118. package/dist/cli-bundle/chunks/{chunk-PSD7F7DX.js → chunk-RFR2YQGO.js} +21 -8
  119. package/dist/cli-bundle/chunks/chunk-RFR2YQGO.js.map +1 -0
  120. package/dist/cli-bundle/chunks/{chunk-EWFY7SLA.js → chunk-RHYBR6G7.js} +8 -8
  121. package/dist/cli-bundle/chunks/{chunk-A6LXQFO7.js → chunk-S2CDTRJ6.js} +52 -79
  122. package/dist/cli-bundle/chunks/chunk-S2CDTRJ6.js.map +1 -0
  123. package/dist/cli-bundle/chunks/{chunk-J3GD64J2.js → chunk-SGMGMCIF.js} +21 -16
  124. package/dist/cli-bundle/chunks/{chunk-J3GD64J2.js.map → chunk-SGMGMCIF.js.map} +1 -1
  125. package/dist/cli-bundle/chunks/{chunk-S2ZLDYGS.js → chunk-SOHXUA2Q.js} +4 -4
  126. package/dist/cli-bundle/chunks/{chunk-KWAXVAXX.js → chunk-SQDKAEKG.js} +4 -4
  127. package/dist/cli-bundle/chunks/{chunk-7IYFN5R7.js → chunk-TOX7YQ7X.js} +3 -3
  128. package/dist/cli-bundle/chunks/{chunk-FDH2X65L.js → chunk-TSXWFN3L.js} +2 -2
  129. package/dist/cli-bundle/chunks/{chunk-OLKBSY4N.js → chunk-UCVJP4JL.js} +2 -2
  130. package/dist/cli-bundle/chunks/{chunk-AVGHVVF7.js → chunk-V4KP3TCN.js} +3 -3
  131. package/dist/cli-bundle/chunks/{chunk-QKW5D45B.js → chunk-VNC2HBL4.js} +5 -5
  132. package/dist/cli-bundle/chunks/{chunk-QJMGRZO2.js → chunk-VYZNX4C5.js} +3 -3
  133. package/dist/cli-bundle/chunks/{chunk-5SCT2JCT.js → chunk-W6KNFAMZ.js} +2 -2
  134. package/dist/cli-bundle/chunks/{chunk-I53JBTJW.js → chunk-WLH7X4RN.js} +6 -6
  135. package/dist/cli-bundle/chunks/{chunk-ESANVZF4.js → chunk-XOYHMHFF.js} +3 -3
  136. package/dist/cli-bundle/chunks/{chunk-HGLC63AU.js → chunk-XWDZVCBJ.js} +8 -8
  137. package/dist/cli-bundle/chunks/{chunk-3KLPFWZ4.js → chunk-XXLMJDUB.js} +10 -26
  138. package/dist/cli-bundle/chunks/chunk-XXLMJDUB.js.map +7 -0
  139. package/dist/cli-bundle/chunks/chunk-Z647PYLD.js +187 -0
  140. package/dist/cli-bundle/chunks/chunk-Z647PYLD.js.map +1 -0
  141. package/dist/cli-bundle/chunks/{claim-MJ7DZFC3.js → claim-HE6KEGJW.js} +10 -10
  142. package/dist/cli-bundle/chunks/{claim-2RDYMCTP.js → claim-QJOQBH7J.js} +10 -10
  143. package/dist/cli-bundle/chunks/{close-XLEKIQSW.js → close-SPUFW5QR.js} +8 -8
  144. package/dist/cli-bundle/chunks/close-WOG5WTMZ.js +13 -0
  145. package/dist/cli-bundle/chunks/{close-many-AOD4HSAZ.js → close-many-GKAJX54X.js} +15 -15
  146. package/dist/cli-bundle/chunks/{close-many-XKAQY5CQ.js → close-many-GL6NRUU5.js} +15 -15
  147. package/dist/cli-bundle/chunks/{comments-RN5TG4ZN.js → comments-5FPT6L7N.js} +10 -10
  148. package/dist/cli-bundle/chunks/{comments-B4RWWDJT.js → comments-TOLOYWNI.js} +10 -10
  149. package/dist/cli-bundle/chunks/{config-3JXJ3XZ7.js → config-4MN45TIH.js} +8 -8
  150. package/dist/cli-bundle/chunks/{config-FZ4UDC4B.js → config-7N6D7YJE.js} +8 -8
  151. package/dist/cli-bundle/chunks/{context-QBPO3BFM.js → context-AQSLE7DZ.js} +13 -13
  152. package/dist/cli-bundle/chunks/{context-L36PIN35.js → context-U3PUJMVN.js} +13 -13
  153. package/dist/cli-bundle/chunks/{contracts-MIXBWJIB.js → contracts-H7KCQXLY.js} +4 -4
  154. package/dist/cli-bundle/chunks/{contracts-3NKWYKKU.js → contracts-ITSJXO3O.js} +4 -4
  155. package/dist/cli-bundle/chunks/{copy-ALU5WMHA.js → copy-C4W522JM.js} +7 -7
  156. package/dist/cli-bundle/chunks/{copy-FWIVTLBO.js → copy-EB3MUCSW.js} +7 -7
  157. package/dist/cli-bundle/chunks/{create-IFA26O2I.js → create-4EQNELMY.js} +13 -13
  158. package/dist/cli-bundle/chunks/create-NW3K7LVG.js +27 -0
  159. package/dist/cli-bundle/chunks/{delete-IYTIYAJS.js → delete-X5QLXIQX.js} +7 -7
  160. package/dist/cli-bundle/chunks/{delete-Y2SGJBGY.js → delete-ZLGUYIXU.js} +7 -7
  161. package/dist/cli-bundle/chunks/{deps-CZ4PTVXU.js → deps-GPB3LGWN.js} +7 -7
  162. package/dist/cli-bundle/chunks/{deps-6TSPOSGU.js → deps-HV2C2L46.js} +7 -7
  163. package/dist/cli-bundle/chunks/{docs-5WMBVQT2.js → docs-RJQPLROO.js} +11 -11
  164. package/dist/cli-bundle/chunks/docs-RJQPLROO.js.map +1 -0
  165. package/dist/cli-bundle/chunks/{docs-MB53UJAJ.js → docs-SRTLCQOL.js} +10 -10
  166. package/dist/cli-bundle/chunks/docs-SRTLCQOL.js.map +7 -0
  167. package/dist/cli-bundle/chunks/{extension-Q34OEWO5.js → extension-MM3TVWOO.js} +5 -5
  168. package/dist/cli-bundle/chunks/{extension-WH2FOIOZ.js → extension-WKPVPNCC.js} +5 -5
  169. package/dist/cli-bundle/chunks/{files-GVMNVLCB.js → files-LIFDKNCN.js} +10 -10
  170. package/dist/cli-bundle/chunks/files-LIFDKNCN.js.map +7 -0
  171. package/dist/cli-bundle/chunks/{files-DLB5LJEP.js → files-OIFN3DQX.js} +11 -11
  172. package/dist/cli-bundle/chunks/files-OIFN3DQX.js.map +1 -0
  173. package/dist/cli-bundle/chunks/{gc-4Z3IKHAZ.js → gc-DL6AVOX5.js} +12 -181
  174. package/dist/cli-bundle/chunks/gc-DL6AVOX5.js.map +7 -0
  175. package/dist/cli-bundle/chunks/{gc-2WEPW6D6.js → gc-NRFHLVFT.js} +14 -176
  176. package/dist/cli-bundle/chunks/gc-NRFHLVFT.js.map +1 -0
  177. package/dist/cli-bundle/chunks/{get-QARTE6BL.js → get-K7UULTQF.js} +11 -11
  178. package/dist/cli-bundle/chunks/{get-PCHS7RA6.js → get-SAB7CRBG.js} +11 -11
  179. package/dist/cli-bundle/chunks/{health-4ZYB3IYQ.js → health-NUVZYIEV.js} +83 -16
  180. package/dist/cli-bundle/chunks/health-NUVZYIEV.js.map +1 -0
  181. package/dist/cli-bundle/chunks/{health-YO5LRWN4.js → health-VJWH3ZFK.js} +82 -15
  182. package/dist/cli-bundle/chunks/health-VJWH3ZFK.js.map +7 -0
  183. package/dist/cli-bundle/chunks/{history-7WUAEWHW.js → history-GYFD2DJW.js} +10 -10
  184. package/dist/cli-bundle/chunks/history-IUVN4NTN.js +20 -0
  185. package/dist/cli-bundle/chunks/{history-compact-3EJ3L2O7.js → history-compact-SLL6ESXH.js} +11 -11
  186. package/dist/cli-bundle/chunks/{history-compact-LW27IPFK.js → history-compact-WQZQ6KXM.js} +11 -11
  187. package/dist/cli-bundle/chunks/history-redact-75KIIJUJ.js +19 -0
  188. package/dist/cli-bundle/chunks/{history-redact-G72A4EJ4.js → history-redact-SDTDR6WM.js} +11 -11
  189. package/dist/cli-bundle/chunks/{history-repair-RUGKD3YR.js → history-repair-BJCGM6Q3.js} +72 -14
  190. package/dist/cli-bundle/chunks/history-repair-BJCGM6Q3.js.map +1 -0
  191. package/dist/cli-bundle/chunks/{history-repair-KVPFJKOS.js → history-repair-UCYS55ZX.js} +71 -13
  192. package/dist/cli-bundle/chunks/history-repair-UCYS55ZX.js.map +7 -0
  193. package/dist/cli-bundle/chunks/init-JJFYRUKG.js +17 -0
  194. package/dist/cli-bundle/chunks/{init-S5WEGUJY.js → init-MXV57LKL.js} +9 -9
  195. package/dist/cli-bundle/chunks/{learnings-HQXSSKZ5.js → learnings-L6KTZGOT.js} +10 -10
  196. package/dist/cli-bundle/chunks/{learnings-XK3P4ZDR.js → learnings-QKJOKEAO.js} +10 -10
  197. package/dist/cli-bundle/chunks/{list-6CL3XFT6.js → list-GGVPXEV6.js} +10 -10
  198. package/dist/cli-bundle/chunks/list-VOQDQHA4.js +19 -0
  199. package/dist/cli-bundle/chunks/{notes-5T6P7C5V.js → notes-3NLK7WTZ.js} +10 -10
  200. package/dist/cli-bundle/chunks/{notes-U5FZCSBT.js → notes-HMCB7TK6.js} +10 -10
  201. package/dist/cli-bundle/chunks/{plan-VNUG3WZZ.js → plan-DWBYI5C6.js} +63 -23
  202. package/dist/cli-bundle/chunks/plan-DWBYI5C6.js.map +1 -0
  203. package/dist/cli-bundle/chunks/{plan-FQLMJRLZ.js → plan-NANUWH4T.js} +62 -22
  204. package/dist/cli-bundle/chunks/plan-NANUWH4T.js.map +7 -0
  205. package/dist/cli-bundle/chunks/{register-list-query-VHDXWEPP.js → register-list-query-PWQ5F2VI.js} +18 -18
  206. package/dist/cli-bundle/chunks/{register-list-query-NPE3ECJQ.js → register-list-query-SMMMLSWW.js} +18 -18
  207. package/dist/cli-bundle/chunks/{register-mutation-EAYNLGOS.js → register-mutation-QKFPTIZG.js} +64 -47
  208. package/dist/cli-bundle/chunks/{register-mutation-EAYNLGOS.js.map → register-mutation-QKFPTIZG.js.map} +2 -2
  209. package/dist/cli-bundle/chunks/{register-mutation-DG53FCBV.js → register-mutation-ZYJQ4DVP.js} +65 -48
  210. package/dist/cli-bundle/chunks/{register-mutation-DG53FCBV.js.map → register-mutation-ZYJQ4DVP.js.map} +1 -1
  211. package/dist/cli-bundle/chunks/{register-operations-FWFE64JG.js → register-operations-2FMZ6WEF.js} +37 -33
  212. package/dist/cli-bundle/chunks/{register-operations-FWFE64JG.js.map → register-operations-2FMZ6WEF.js.map} +2 -2
  213. package/dist/cli-bundle/chunks/{register-operations-AM6KTWB6.js → register-operations-BAFQURZG.js} +38 -34
  214. package/dist/cli-bundle/chunks/register-operations-BAFQURZG.js.map +1 -0
  215. package/dist/cli-bundle/chunks/{register-setup-G4QYI3RX.js → register-setup-DQEIKBIP.js} +30 -30
  216. package/dist/cli-bundle/chunks/register-setup-DQEIKBIP.js.map +7 -0
  217. package/dist/cli-bundle/chunks/{register-setup-IKX5524L.js → register-setup-QN2XV7UL.js} +31 -31
  218. package/dist/cli-bundle/chunks/register-setup-QN2XV7UL.js.map +1 -0
  219. package/dist/cli-bundle/chunks/restore-DRBNXJJH.js +17 -0
  220. package/dist/cli-bundle/chunks/{restore-M6AFHMV4.js → restore-FJQWXMPY.js} +11 -11
  221. package/dist/cli-bundle/chunks/{schema-AINZ2IMM.js → schema-RNVJ55V2.js} +8 -8
  222. package/dist/cli-bundle/chunks/{schema-76HDZJCC.js → schema-ZZ7ZDM2X.js} +8 -8
  223. package/dist/cli-bundle/chunks/{search-JMLFQEPJ.js → search-BJ457C2A.js} +10 -10
  224. package/dist/cli-bundle/chunks/{search-NL3TSCYB.js → search-FQDZXX7P.js} +10 -10
  225. package/dist/cli-bundle/chunks/{stats-UBD56TGK.js → stats-CUG3ZHOI.js} +7 -7
  226. package/dist/cli-bundle/chunks/{stats-BKXCBIGT.js → stats-DUQWCVOS.js} +7 -7
  227. package/dist/cli-bundle/chunks/{telemetry-ZJXK3H7X.js → telemetry-33MRGX4Z.js} +4 -4
  228. package/dist/cli-bundle/chunks/{telemetry-N454RHG5.js → telemetry-RK2VX75A.js} +4 -4
  229. package/dist/cli-bundle/chunks/test-SDMYEQHH.js +32 -0
  230. package/dist/cli-bundle/chunks/{test-BQAKIXAT.js → test-Y3CTFMEC.js} +14 -14
  231. package/dist/cli-bundle/chunks/{test-all-7LV3I6S5.js → test-all-ANYQ33O2.js} +14 -14
  232. package/dist/cli-bundle/chunks/{test-all-TDYCCBA4.js → test-all-ARSMX33Q.js} +14 -14
  233. package/dist/cli-bundle/chunks/{test-runs-E64M6XS3.js → test-runs-5URSD34O.js} +5 -5
  234. package/dist/cli-bundle/chunks/{test-runs-LXZLULCI.js → test-runs-XNACGSNQ.js} +5 -5
  235. package/dist/cli-bundle/chunks/update-PD46VOXI.js +21 -0
  236. package/dist/cli-bundle/chunks/update-U235A7WP.js +25 -0
  237. package/dist/cli-bundle/chunks/{update-many-V4LA3C4H.js → update-many-6B7PJ33I.js} +22 -22
  238. package/dist/cli-bundle/chunks/{update-many-TUGU5YXQ.js → update-many-724JCVDE.js} +22 -22
  239. package/dist/cli-bundle/chunks/{upgrade-37F7JKES.js → upgrade-ALBEZAI7.js} +5 -5
  240. package/dist/cli-bundle/chunks/{upgrade-L32JA4TZ.js → upgrade-QHRGDBSA.js} +5 -5
  241. package/dist/cli-bundle/chunks/{validate-EQTT6WVX.js → validate-IQRYFXIV.js} +462 -50
  242. package/dist/cli-bundle/chunks/validate-IQRYFXIV.js.map +1 -0
  243. package/dist/cli-bundle/chunks/{validate-XN4I4DPL.js → validate-UY6DRCG5.js} +482 -49
  244. package/dist/cli-bundle/chunks/validate-UY6DRCG5.js.map +7 -0
  245. package/dist/cli-bundle/main.js +72 -24
  246. package/dist/cli-bundle/main.js.map +3 -3
  247. package/dist/core/diagnostics/remediation.js +19 -6
  248. package/dist/core/diagnostics/remediation.js.map +1 -1
  249. package/dist/core/extensions/extension-capability-aliases.js +7 -33
  250. package/dist/core/extensions/extension-capability-aliases.js.map +1 -1
  251. package/dist/core/lock/lock-gc.d.ts +31 -0
  252. package/dist/core/lock/lock-gc.js +120 -62
  253. package/dist/core/lock/lock-gc.js.map +1 -1
  254. package/dist/core/search/background-refresh.js +3 -3
  255. package/dist/core/search/background-refresh.js.map +1 -1
  256. package/dist/core/shared/errors.d.ts +3 -0
  257. package/dist/core/shared/errors.js +2 -2
  258. package/dist/core/shared/errors.js.map +1 -1
  259. package/dist/core/store/item-store.js +6 -22
  260. package/dist/core/store/item-store.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.d.ts +1 -0
  273. package/dist/mcp/server.js +62 -9
  274. package/dist/mcp/server.js.map +1 -1
  275. package/dist/sdk/cli-contracts/tool-parameter-tables.js +38 -2
  276. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  277. package/dist/sdk/cli-contracts.d.ts +6 -1
  278. package/dist/sdk/cli-contracts.js +74 -7
  279. package/dist/sdk/cli-contracts.js.map +1 -1
  280. package/docs/AGENT_GUIDE.md +6 -1
  281. package/docs/COMMANDS.md +23 -1
  282. package/package.json +1 -1
  283. package/plugins/pm-claude/README.md +4 -12
  284. package/dist/cli-bundle/chunks/activity-XZIUPGZH.js +0 -16
  285. package/dist/cli-bundle/chunks/chunk-3KLPFWZ4.js.map +0 -7
  286. package/dist/cli-bundle/chunks/chunk-A6LXQFO7.js.map +0 -1
  287. package/dist/cli-bundle/chunks/chunk-E5DUIJA4.js.map +0 -7
  288. package/dist/cli-bundle/chunks/chunk-FXRU333M.js.map +0 -1
  289. package/dist/cli-bundle/chunks/chunk-FY4SPXSC.js.map +0 -7
  290. package/dist/cli-bundle/chunks/chunk-HI7STVF2.js.map +0 -1
  291. package/dist/cli-bundle/chunks/chunk-LCSCXBGT.js.map +0 -7
  292. package/dist/cli-bundle/chunks/chunk-P2PSODAQ.js.map +0 -7
  293. package/dist/cli-bundle/chunks/chunk-PSD7F7DX.js.map +0 -1
  294. package/dist/cli-bundle/chunks/chunk-UOO6BYIA.js.map +0 -1
  295. package/dist/cli-bundle/chunks/close-4FMAPEMY.js +0 -13
  296. package/dist/cli-bundle/chunks/create-JVXYHYH4.js +0 -27
  297. package/dist/cli-bundle/chunks/docs-5WMBVQT2.js.map +0 -1
  298. package/dist/cli-bundle/chunks/docs-MB53UJAJ.js.map +0 -7
  299. package/dist/cli-bundle/chunks/files-DLB5LJEP.js.map +0 -1
  300. package/dist/cli-bundle/chunks/files-GVMNVLCB.js.map +0 -7
  301. package/dist/cli-bundle/chunks/gc-2WEPW6D6.js.map +0 -1
  302. package/dist/cli-bundle/chunks/gc-4Z3IKHAZ.js.map +0 -7
  303. package/dist/cli-bundle/chunks/health-4ZYB3IYQ.js.map +0 -1
  304. package/dist/cli-bundle/chunks/health-YO5LRWN4.js.map +0 -7
  305. package/dist/cli-bundle/chunks/history-L2FQFRTU.js +0 -20
  306. package/dist/cli-bundle/chunks/history-redact-QWQCX5DZ.js +0 -19
  307. package/dist/cli-bundle/chunks/history-repair-KVPFJKOS.js.map +0 -7
  308. package/dist/cli-bundle/chunks/history-repair-RUGKD3YR.js.map +0 -1
  309. package/dist/cli-bundle/chunks/init-4BKRHGWW.js +0 -17
  310. package/dist/cli-bundle/chunks/list-BYNN4ZEO.js +0 -19
  311. package/dist/cli-bundle/chunks/plan-FQLMJRLZ.js.map +0 -7
  312. package/dist/cli-bundle/chunks/plan-VNUG3WZZ.js.map +0 -1
  313. package/dist/cli-bundle/chunks/register-operations-AM6KTWB6.js.map +0 -1
  314. package/dist/cli-bundle/chunks/register-setup-G4QYI3RX.js.map +0 -7
  315. package/dist/cli-bundle/chunks/register-setup-IKX5524L.js.map +0 -1
  316. package/dist/cli-bundle/chunks/restore-CHIOQAQL.js +0 -17
  317. package/dist/cli-bundle/chunks/test-O74JFUH5.js +0 -32
  318. package/dist/cli-bundle/chunks/update-2EVXOC7V.js +0 -21
  319. package/dist/cli-bundle/chunks/update-5A2B6QYB.js +0 -25
  320. package/dist/cli-bundle/chunks/validate-EQTT6WVX.js.map +0 -1
  321. package/dist/cli-bundle/chunks/validate-XN4I4DPL.js.map +0 -7
  322. /package/dist/cli-bundle/chunks/{activity-XADJOG6G.js.map → activity-PPO7QWJF.js.map} +0 -0
  323. /package/dist/cli-bundle/chunks/{activity-XZIUPGZH.js.map → activity-XIOTGZMU.js.map} +0 -0
  324. /package/dist/cli-bundle/chunks/{aggregate-6OTS3AOO.js.map → aggregate-IRHJWEKG.js.map} +0 -0
  325. /package/dist/cli-bundle/chunks/{aggregate-OD36DJU5.js.map → aggregate-XEBW22UQ.js.map} +0 -0
  326. /package/dist/cli-bundle/chunks/{append-JYWO4P7W.js.map → append-N2AWXKZC.js.map} +0 -0
  327. /package/dist/cli-bundle/chunks/{append-KG55G7S3.js.map → append-NL67JNJU.js.map} +0 -0
  328. /package/dist/cli-bundle/chunks/{chunk-IH4MBKK7.js.map → chunk-2ANTZBYF.js.map} +0 -0
  329. /package/dist/cli-bundle/chunks/{chunk-F75JSIOZ.js.map → chunk-2J2AH4V5.js.map} +0 -0
  330. /package/dist/cli-bundle/chunks/{chunk-CCX4RSYZ.js.map → chunk-32XSW44C.js.map} +0 -0
  331. /package/dist/cli-bundle/chunks/{chunk-DY6C42S6.js.map → chunk-36BCSMKP.js.map} +0 -0
  332. /package/dist/cli-bundle/chunks/{chunk-XUC4C4PT.js.map → chunk-3CQPVBK3.js.map} +0 -0
  333. /package/dist/cli-bundle/chunks/{chunk-SXKNJPQ7.js.map → chunk-3FMQMHAG.js.map} +0 -0
  334. /package/dist/cli-bundle/chunks/{chunk-I7NYDZDV.js.map → chunk-3VULHQNS.js.map} +0 -0
  335. /package/dist/cli-bundle/chunks/{chunk-HHHJ2GI3.js.map → chunk-4FHLNNW7.js.map} +0 -0
  336. /package/dist/cli-bundle/chunks/{chunk-RXAP6JL5.js.map → chunk-4JHJ7YG2.js.map} +0 -0
  337. /package/dist/cli-bundle/chunks/{chunk-P5BJOMBB.js.map → chunk-4TPFXE2R.js.map} +0 -0
  338. /package/dist/cli-bundle/chunks/{chunk-3SLOMKCJ.js.map → chunk-5HSAHRYA.js.map} +0 -0
  339. /package/dist/cli-bundle/chunks/{chunk-ZLMIWZUG.js.map → chunk-5LMF75Q7.js.map} +0 -0
  340. /package/dist/cli-bundle/chunks/{chunk-TK5VZFHY.js.map → chunk-6TBR5AZ2.js.map} +0 -0
  341. /package/dist/cli-bundle/chunks/{chunk-ATEES5SX.js.map → chunk-6ZFTM65G.js.map} +0 -0
  342. /package/dist/cli-bundle/chunks/{chunk-VFUZV5EB.js.map → chunk-7SM7VA5I.js.map} +0 -0
  343. /package/dist/cli-bundle/chunks/{chunk-GKIZW7SM.js.map → chunk-AAUYXSFF.js.map} +0 -0
  344. /package/dist/cli-bundle/chunks/{chunk-OASDW5UI.js.map → chunk-AUDDXKNX.js.map} +0 -0
  345. /package/dist/cli-bundle/chunks/{chunk-ZMW77VWV.js.map → chunk-BVL5KGVA.js.map} +0 -0
  346. /package/dist/cli-bundle/chunks/{chunk-4JCSYR6F.js.map → chunk-C24PWDFG.js.map} +0 -0
  347. /package/dist/cli-bundle/chunks/{chunk-4HFU4UO2.js.map → chunk-CEGUH2E5.js.map} +0 -0
  348. /package/dist/cli-bundle/chunks/{chunk-Y3YKK7CY.js.map → chunk-DWG4FHPY.js.map} +0 -0
  349. /package/dist/cli-bundle/chunks/{chunk-YW6Q3RYZ.js.map → chunk-GFBEXDCQ.js.map} +0 -0
  350. /package/dist/cli-bundle/chunks/{chunk-XMBI6TNW.js.map → chunk-GOO4UXBI.js.map} +0 -0
  351. /package/dist/cli-bundle/chunks/{chunk-IGVJRZ6H.js.map → chunk-GRZGHGRG.js.map} +0 -0
  352. /package/dist/cli-bundle/chunks/{chunk-TNAP7EJX.js.map → chunk-HZOX5BYD.js.map} +0 -0
  353. /package/dist/cli-bundle/chunks/{chunk-VSRZRLG3.js.map → chunk-IIOIBAQW.js.map} +0 -0
  354. /package/dist/cli-bundle/chunks/{chunk-IUKD4W6Z.js.map → chunk-IXVSSHGV.js.map} +0 -0
  355. /package/dist/cli-bundle/chunks/{chunk-WUNFKP7M.js.map → chunk-IZHCCG4S.js.map} +0 -0
  356. /package/dist/cli-bundle/chunks/{chunk-VAOUX6TK.js.map → chunk-JCTZV7TO.js.map} +0 -0
  357. /package/dist/cli-bundle/chunks/{chunk-ZYNJNPYD.js.map → chunk-JE5IZXDS.js.map} +0 -0
  358. /package/dist/cli-bundle/chunks/{chunk-QNJSITCX.js.map → chunk-JW7D6437.js.map} +0 -0
  359. /package/dist/cli-bundle/chunks/{chunk-B65UUCGQ.js.map → chunk-JWXTOYBI.js.map} +0 -0
  360. /package/dist/cli-bundle/chunks/{chunk-7RIT3OCD.js.map → chunk-KHGTYCJ6.js.map} +0 -0
  361. /package/dist/cli-bundle/chunks/{chunk-VPEAS7PS.js.map → chunk-LGOXXQUW.js.map} +0 -0
  362. /package/dist/cli-bundle/chunks/{chunk-I2IJY2NL.js.map → chunk-LOAR5TKX.js.map} +0 -0
  363. /package/dist/cli-bundle/chunks/{chunk-S26FESD4.js.map → chunk-LSSTKL3Y.js.map} +0 -0
  364. /package/dist/cli-bundle/chunks/{chunk-CW6E4NAT.js.map → chunk-LYNQ3NGI.js.map} +0 -0
  365. /package/dist/cli-bundle/chunks/{chunk-4YFAGDRH.js.map → chunk-M3SI2REU.js.map} +0 -0
  366. /package/dist/cli-bundle/chunks/{chunk-73ZPG2I3.js.map → chunk-MACCNKSZ.js.map} +0 -0
  367. /package/dist/cli-bundle/chunks/{chunk-P5U5EOMA.js.map → chunk-NN6RKGFW.js.map} +0 -0
  368. /package/dist/cli-bundle/chunks/{chunk-GWZSYR6X.js.map → chunk-O3YCJOVX.js.map} +0 -0
  369. /package/dist/cli-bundle/chunks/{chunk-UUWGCWBU.js.map → chunk-QQG4HEX7.js.map} +0 -0
  370. /package/dist/cli-bundle/chunks/{chunk-XTKJSVWH.js.map → chunk-QU3OPNVV.js.map} +0 -0
  371. /package/dist/cli-bundle/chunks/{chunk-EWFY7SLA.js.map → chunk-RHYBR6G7.js.map} +0 -0
  372. /package/dist/cli-bundle/chunks/{chunk-S2ZLDYGS.js.map → chunk-SOHXUA2Q.js.map} +0 -0
  373. /package/dist/cli-bundle/chunks/{chunk-KWAXVAXX.js.map → chunk-SQDKAEKG.js.map} +0 -0
  374. /package/dist/cli-bundle/chunks/{chunk-7IYFN5R7.js.map → chunk-TOX7YQ7X.js.map} +0 -0
  375. /package/dist/cli-bundle/chunks/{chunk-FDH2X65L.js.map → chunk-TSXWFN3L.js.map} +0 -0
  376. /package/dist/cli-bundle/chunks/{chunk-OLKBSY4N.js.map → chunk-UCVJP4JL.js.map} +0 -0
  377. /package/dist/cli-bundle/chunks/{chunk-AVGHVVF7.js.map → chunk-V4KP3TCN.js.map} +0 -0
  378. /package/dist/cli-bundle/chunks/{chunk-QKW5D45B.js.map → chunk-VNC2HBL4.js.map} +0 -0
  379. /package/dist/cli-bundle/chunks/{chunk-QJMGRZO2.js.map → chunk-VYZNX4C5.js.map} +0 -0
  380. /package/dist/cli-bundle/chunks/{chunk-5SCT2JCT.js.map → chunk-W6KNFAMZ.js.map} +0 -0
  381. /package/dist/cli-bundle/chunks/{chunk-I53JBTJW.js.map → chunk-WLH7X4RN.js.map} +0 -0
  382. /package/dist/cli-bundle/chunks/{chunk-ESANVZF4.js.map → chunk-XOYHMHFF.js.map} +0 -0
  383. /package/dist/cli-bundle/chunks/{chunk-HGLC63AU.js.map → chunk-XWDZVCBJ.js.map} +0 -0
  384. /package/dist/cli-bundle/chunks/{claim-MJ7DZFC3.js.map → claim-HE6KEGJW.js.map} +0 -0
  385. /package/dist/cli-bundle/chunks/{claim-2RDYMCTP.js.map → claim-QJOQBH7J.js.map} +0 -0
  386. /package/dist/cli-bundle/chunks/{close-XLEKIQSW.js.map → close-SPUFW5QR.js.map} +0 -0
  387. /package/dist/cli-bundle/chunks/{close-4FMAPEMY.js.map → close-WOG5WTMZ.js.map} +0 -0
  388. /package/dist/cli-bundle/chunks/{close-many-AOD4HSAZ.js.map → close-many-GKAJX54X.js.map} +0 -0
  389. /package/dist/cli-bundle/chunks/{close-many-XKAQY5CQ.js.map → close-many-GL6NRUU5.js.map} +0 -0
  390. /package/dist/cli-bundle/chunks/{comments-RN5TG4ZN.js.map → comments-5FPT6L7N.js.map} +0 -0
  391. /package/dist/cli-bundle/chunks/{comments-B4RWWDJT.js.map → comments-TOLOYWNI.js.map} +0 -0
  392. /package/dist/cli-bundle/chunks/{config-3JXJ3XZ7.js.map → config-4MN45TIH.js.map} +0 -0
  393. /package/dist/cli-bundle/chunks/{config-FZ4UDC4B.js.map → config-7N6D7YJE.js.map} +0 -0
  394. /package/dist/cli-bundle/chunks/{context-QBPO3BFM.js.map → context-AQSLE7DZ.js.map} +0 -0
  395. /package/dist/cli-bundle/chunks/{context-L36PIN35.js.map → context-U3PUJMVN.js.map} +0 -0
  396. /package/dist/cli-bundle/chunks/{contracts-MIXBWJIB.js.map → contracts-H7KCQXLY.js.map} +0 -0
  397. /package/dist/cli-bundle/chunks/{contracts-3NKWYKKU.js.map → contracts-ITSJXO3O.js.map} +0 -0
  398. /package/dist/cli-bundle/chunks/{copy-ALU5WMHA.js.map → copy-C4W522JM.js.map} +0 -0
  399. /package/dist/cli-bundle/chunks/{copy-FWIVTLBO.js.map → copy-EB3MUCSW.js.map} +0 -0
  400. /package/dist/cli-bundle/chunks/{create-IFA26O2I.js.map → create-4EQNELMY.js.map} +0 -0
  401. /package/dist/cli-bundle/chunks/{create-JVXYHYH4.js.map → create-NW3K7LVG.js.map} +0 -0
  402. /package/dist/cli-bundle/chunks/{delete-IYTIYAJS.js.map → delete-X5QLXIQX.js.map} +0 -0
  403. /package/dist/cli-bundle/chunks/{delete-Y2SGJBGY.js.map → delete-ZLGUYIXU.js.map} +0 -0
  404. /package/dist/cli-bundle/chunks/{deps-CZ4PTVXU.js.map → deps-GPB3LGWN.js.map} +0 -0
  405. /package/dist/cli-bundle/chunks/{deps-6TSPOSGU.js.map → deps-HV2C2L46.js.map} +0 -0
  406. /package/dist/cli-bundle/chunks/{extension-Q34OEWO5.js.map → extension-MM3TVWOO.js.map} +0 -0
  407. /package/dist/cli-bundle/chunks/{extension-WH2FOIOZ.js.map → extension-WKPVPNCC.js.map} +0 -0
  408. /package/dist/cli-bundle/chunks/{get-QARTE6BL.js.map → get-K7UULTQF.js.map} +0 -0
  409. /package/dist/cli-bundle/chunks/{get-PCHS7RA6.js.map → get-SAB7CRBG.js.map} +0 -0
  410. /package/dist/cli-bundle/chunks/{history-7WUAEWHW.js.map → history-GYFD2DJW.js.map} +0 -0
  411. /package/dist/cli-bundle/chunks/{history-L2FQFRTU.js.map → history-IUVN4NTN.js.map} +0 -0
  412. /package/dist/cli-bundle/chunks/{history-compact-3EJ3L2O7.js.map → history-compact-SLL6ESXH.js.map} +0 -0
  413. /package/dist/cli-bundle/chunks/{history-compact-LW27IPFK.js.map → history-compact-WQZQ6KXM.js.map} +0 -0
  414. /package/dist/cli-bundle/chunks/{history-redact-QWQCX5DZ.js.map → history-redact-75KIIJUJ.js.map} +0 -0
  415. /package/dist/cli-bundle/chunks/{history-redact-G72A4EJ4.js.map → history-redact-SDTDR6WM.js.map} +0 -0
  416. /package/dist/cli-bundle/chunks/{init-4BKRHGWW.js.map → init-JJFYRUKG.js.map} +0 -0
  417. /package/dist/cli-bundle/chunks/{init-S5WEGUJY.js.map → init-MXV57LKL.js.map} +0 -0
  418. /package/dist/cli-bundle/chunks/{learnings-HQXSSKZ5.js.map → learnings-L6KTZGOT.js.map} +0 -0
  419. /package/dist/cli-bundle/chunks/{learnings-XK3P4ZDR.js.map → learnings-QKJOKEAO.js.map} +0 -0
  420. /package/dist/cli-bundle/chunks/{list-6CL3XFT6.js.map → list-GGVPXEV6.js.map} +0 -0
  421. /package/dist/cli-bundle/chunks/{list-BYNN4ZEO.js.map → list-VOQDQHA4.js.map} +0 -0
  422. /package/dist/cli-bundle/chunks/{notes-5T6P7C5V.js.map → notes-3NLK7WTZ.js.map} +0 -0
  423. /package/dist/cli-bundle/chunks/{notes-U5FZCSBT.js.map → notes-HMCB7TK6.js.map} +0 -0
  424. /package/dist/cli-bundle/chunks/{register-list-query-VHDXWEPP.js.map → register-list-query-PWQ5F2VI.js.map} +0 -0
  425. /package/dist/cli-bundle/chunks/{register-list-query-NPE3ECJQ.js.map → register-list-query-SMMMLSWW.js.map} +0 -0
  426. /package/dist/cli-bundle/chunks/{restore-CHIOQAQL.js.map → restore-DRBNXJJH.js.map} +0 -0
  427. /package/dist/cli-bundle/chunks/{restore-M6AFHMV4.js.map → restore-FJQWXMPY.js.map} +0 -0
  428. /package/dist/cli-bundle/chunks/{schema-AINZ2IMM.js.map → schema-RNVJ55V2.js.map} +0 -0
  429. /package/dist/cli-bundle/chunks/{schema-76HDZJCC.js.map → schema-ZZ7ZDM2X.js.map} +0 -0
  430. /package/dist/cli-bundle/chunks/{search-JMLFQEPJ.js.map → search-BJ457C2A.js.map} +0 -0
  431. /package/dist/cli-bundle/chunks/{search-NL3TSCYB.js.map → search-FQDZXX7P.js.map} +0 -0
  432. /package/dist/cli-bundle/chunks/{stats-UBD56TGK.js.map → stats-CUG3ZHOI.js.map} +0 -0
  433. /package/dist/cli-bundle/chunks/{stats-BKXCBIGT.js.map → stats-DUQWCVOS.js.map} +0 -0
  434. /package/dist/cli-bundle/chunks/{telemetry-ZJXK3H7X.js.map → telemetry-33MRGX4Z.js.map} +0 -0
  435. /package/dist/cli-bundle/chunks/{telemetry-N454RHG5.js.map → telemetry-RK2VX75A.js.map} +0 -0
  436. /package/dist/cli-bundle/chunks/{test-O74JFUH5.js.map → test-SDMYEQHH.js.map} +0 -0
  437. /package/dist/cli-bundle/chunks/{test-BQAKIXAT.js.map → test-Y3CTFMEC.js.map} +0 -0
  438. /package/dist/cli-bundle/chunks/{test-all-7LV3I6S5.js.map → test-all-ANYQ33O2.js.map} +0 -0
  439. /package/dist/cli-bundle/chunks/{test-all-TDYCCBA4.js.map → test-all-ARSMX33Q.js.map} +0 -0
  440. /package/dist/cli-bundle/chunks/{test-runs-E64M6XS3.js.map → test-runs-5URSD34O.js.map} +0 -0
  441. /package/dist/cli-bundle/chunks/{test-runs-LXZLULCI.js.map → test-runs-XNACGSNQ.js.map} +0 -0
  442. /package/dist/cli-bundle/chunks/{update-2EVXOC7V.js.map → update-PD46VOXI.js.map} +0 -0
  443. /package/dist/cli-bundle/chunks/{update-5A2B6QYB.js.map → update-U235A7WP.js.map} +0 -0
  444. /package/dist/cli-bundle/chunks/{update-many-V4LA3C4H.js.map → update-many-6B7PJ33I.js.map} +0 -0
  445. /package/dist/cli-bundle/chunks/{update-many-TUGU5YXQ.js.map → update-many-724JCVDE.js.map} +0 -0
  446. /package/dist/cli-bundle/chunks/{upgrade-37F7JKES.js.map → upgrade-ALBEZAI7.js.map} +0 -0
  447. /package/dist/cli-bundle/chunks/{upgrade-L32JA4TZ.js.map → upgrade-QHRGDBSA.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]="776e2ca9-52d6-5274-9230-4d9b961456e5")}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]="24c5f96e-8535-5063-87d2-bb17fe0d4d1f")}catch(e){}}();
3
3
  import fs from "node:fs/promises";
4
4
  import { realpathSync } from "node:fs";
5
5
  import { execFile } from "node:child_process";
@@ -19,6 +19,9 @@ import { nowIso } from "../../core/shared/time.js";
19
19
  import { listAllFrontMatterWithBody } from "../../core/store/item-store.js";
20
20
  import { getSettingsPath, resolvePmRoot } from "../../core/store/paths.js";
21
21
  import { readSettings } from "../../core/store/settings.js";
22
+ import { partitionFixesByGrant, planCloseReasonBackfillFixes, planResolutionBackfillFixes, planStaleLinkPruneFixes, planTerminalParentFixes, resolveGrantedFixScopes, toFixOutputRow, } from "../../core/validate/fix-planning.js";
23
+ import { buildMissingByTypeCounts } from "../../core/validate/missing-by-type.js";
24
+ import { classifyStaleLinkedPaths, summarizeStaleLinkedPathClassifications, } from "../../core/validate/stale-file-classification.js";
22
25
  import { extractReferencedPmItemIdsFromCommand } from "./test.js";
23
26
  const FILE_SCAN_DIRECTORIES = ["src", "tests", "docs"];
24
27
  const FILE_SCAN_ROOT_FILES = [
@@ -540,17 +543,38 @@ function resolveRequestedChecks(options) {
540
543
  requested.add("command_references");
541
544
  }
542
545
  if (requested.size === 0) {
543
- requested.add("metadata");
544
- requested.add("resolution");
545
- requested.add("lifecycle");
546
+ // Remediation flags without explicit --check-* flags scope the run to the
547
+ // checks that can produce fixes: --auto-fix plans metadata/resolution
548
+ // backfills and gated lifecycle fixes; --prune-missing needs the files
549
+ // scan. With neither, the historical run-everything default applies.
550
+ if (options.autoFix) {
551
+ requested.add("metadata");
552
+ requested.add("resolution");
553
+ requested.add("lifecycle");
554
+ }
555
+ if (options.pruneMissing) {
556
+ requested.add("files");
557
+ }
558
+ if (requested.size === 0) {
559
+ requested.add("metadata");
560
+ requested.add("resolution");
561
+ requested.add("lifecycle");
562
+ requested.add("files");
563
+ requested.add("command_references");
564
+ requested.add("history_drift");
565
+ }
566
+ return requested;
567
+ }
568
+ // Explicit check flags are respected as-is, except --prune-missing always
569
+ // needs the files scan it acts on.
570
+ if (options.pruneMissing) {
546
571
  requested.add("files");
547
- requested.add("command_references");
548
- requested.add("history_drift");
549
572
  }
550
573
  return requested;
551
574
  }
552
575
  function buildMetadataCheck(items, metadataPolicy, statusRegistry, verboseDiagnostics) {
553
576
  const missingByField = Object.fromEntries(SUPPORTED_METADATA_REQUIRED_FIELDS.map((field) => [field, []]));
577
+ const itemsById = new Map(items.map((item) => [item.id, item]));
554
578
  for (const item of items) {
555
579
  for (const field of SUPPORTED_METADATA_REQUIRED_FIELDS) {
556
580
  if (!isMetadataFieldMissing(item, field, statusRegistry)) {
@@ -582,6 +606,18 @@ function buildMetadataCheck(items, metadataPolicy, statusRegistry, verboseDiagno
582
606
  counts[countKey] = value;
583
607
  }
584
608
  }
609
+ // Per-item-type grouping of missing required-field counts (pm-pmyq /
610
+ // GH-172): counts only — never row dumps — and only for the ACTIVE required
611
+ // fields, so the grouping mirrors `counts` at type granularity (e.g.
612
+ // `{ Task: { close_reason: 3 } }`). Zero-suppressed at both levels.
613
+ const missingFieldOccurrences = [];
614
+ for (const field of metadataPolicy.required_fields) {
615
+ for (const itemId of missingByField[field] ?? []) {
616
+ const itemType = itemsById.get(itemId)?.type;
617
+ missingFieldOccurrences.push({ item_type: typeof itemType === "string" && itemType.length > 0 ? itemType : "Unknown", field });
618
+ }
619
+ }
620
+ const missingByType = buildMissingByTypeCounts(missingFieldOccurrences);
585
621
  const details = {
586
622
  checked_items: items.length,
587
623
  metadata_profile: metadataPolicy.profile,
@@ -590,6 +626,7 @@ function buildMetadataCheck(items, metadataPolicy, statusRegistry, verboseDiagno
590
626
  required_fields: [...metadataPolicy.required_fields],
591
627
  supported_required_fields: [...SUPPORTED_METADATA_REQUIRED_FIELDS],
592
628
  counts,
629
+ missing_by_type: missingByType,
593
630
  };
594
631
  if (metadataPolicy.configured_custom_fields.length > 0) {
595
632
  details.configured_custom_required_fields = [...metadataPolicy.configured_custom_fields];
@@ -616,6 +653,16 @@ function buildMetadataCheck(items, metadataPolicy, statusRegistry, verboseDiagno
616
653
  details[idsKey] = summarized.values;
617
654
  details[truncatedKey] = summarized.truncated;
618
655
  }
656
+ // Auto-fix planning input (pm-c3sz): closed items flagged for a missing
657
+ // close_reason whose resolution can serve as the derivable source value.
658
+ // Only collected when close_reason is an active required field, so fixes
659
+ // always trace back to an actual finding of this run.
660
+ const closeReasonBackfillRows = metadataPolicy.required_fields.includes("close_reason")
661
+ ? (missingByField.close_reason ?? []).map((itemId) => ({
662
+ id: itemId,
663
+ resolution: toNonEmptyStringOrUndefined(itemsById.get(itemId)?.resolution),
664
+ }))
665
+ : [];
619
666
  return {
620
667
  check: {
621
668
  name: "metadata",
@@ -623,6 +670,7 @@ function buildMetadataCheck(items, metadataPolicy, statusRegistry, verboseDiagno
623
670
  details,
624
671
  },
625
672
  warnings: warningTokens,
673
+ closeReasonBackfillRows,
626
674
  };
627
675
  }
628
676
  function buildResolutionCheck(items, statusRegistry, verboseDiagnostics) {
@@ -630,6 +678,7 @@ function buildResolutionCheck(items, statusRegistry, verboseDiagnostics) {
630
678
  terminalDoneStatuses.add(statusRegistry.close_status);
631
679
  const closedItems = items.filter((item) => terminalDoneStatuses.has(normalizeStatusForRegistry(item.status, statusRegistry)));
632
680
  const missingResolutionRows = [];
681
+ const resolutionBackfillRows = [];
633
682
  for (const item of closedItems) {
634
683
  const missingFields = RESOLUTION_FIELD_KEYS.filter((field) => !toNonEmptyStringOrUndefined(item[field]));
635
684
  if (missingFields.length === 0) {
@@ -639,6 +688,13 @@ function buildResolutionCheck(items, statusRegistry, verboseDiagnostics) {
639
688
  id: item.id,
640
689
  missing_fields: missingFields,
641
690
  });
691
+ // Auto-fix planning input (pm-c3sz): the planner backfills only the
692
+ // `resolution` field, deriving from the item's close_reason when present.
693
+ resolutionBackfillRows.push({
694
+ id: item.id,
695
+ missing_fields: missingFields,
696
+ close_reason: toNonEmptyStringOrUndefined(item.close_reason),
697
+ });
642
698
  }
643
699
  const warnings = missingResolutionRows.length > 0 ? [`validate_resolution_missing_fields:${missingResolutionRows.length}`] : [];
644
700
  const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;
@@ -659,6 +715,7 @@ function buildResolutionCheck(items, statusRegistry, verboseDiagnostics) {
659
715
  },
660
716
  },
661
717
  warnings,
718
+ resolutionBackfillRows,
662
719
  };
663
720
  }
664
721
  function buildLifecycleDependencyGraph(activeItems) {
@@ -782,6 +839,7 @@ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverit
782
839
  const activeItems = items.filter((item) => !isTerminalStatus(item.status, statusRegistry));
783
840
  const closureLikeRows = [];
784
841
  const terminalParentRows = [];
842
+ const terminalParentFixRows = [];
785
843
  const staleBlockerRows = [];
786
844
  for (const item of activeItems) {
787
845
  const closureLikeFields = Object.entries(lifecyclePatternPolicy.closure_like_metadata_field_patterns)
@@ -810,6 +868,17 @@ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverit
810
868
  parent_id: parent.id,
811
869
  parent_status: parent.status,
812
870
  });
871
+ // Gated lifecycle auto-fix input (pm-8jss): when the terminal parent
872
+ // has its own ACTIVE parent, the child can be reparented one level up;
873
+ // otherwise the suggested fix clears the parent link.
874
+ const grandparentId = toMeaningfulString(parent.parent);
875
+ const grandparent = grandparentId ? itemsById.get(grandparentId) : undefined;
876
+ terminalParentFixRows.push({
877
+ id: item.id,
878
+ parent_id: parent.id,
879
+ grandparent_id: grandparent?.id,
880
+ grandparent_active: grandparent !== undefined && !isTerminalStatus(grandparent.status, statusRegistry),
881
+ });
813
882
  }
814
883
  }
815
884
  if (includeStaleBlockers) {
@@ -849,6 +918,7 @@ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverit
849
918
  }
850
919
  closureLikeRows.sort((left, right) => left.id.localeCompare(right.id));
851
920
  terminalParentRows.sort((left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id));
921
+ terminalParentFixRows.sort((left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id));
852
922
  staleBlockerRows.sort((left, right) => left.id.localeCompare(right.id));
853
923
  const dependencyCycleDiagnostics = detectLifecycleDependencyCycles(activeItems);
854
924
  const warnings = [];
@@ -912,32 +982,44 @@ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverit
912
982
  },
913
983
  },
914
984
  warnings,
985
+ terminalParentFixRows,
915
986
  };
916
987
  }
917
988
  async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, includePmInternals, verboseFileLists) {
918
989
  const linkedProjectPaths = new Set();
919
990
  const missingLinkedPaths = [];
991
+ const staleLinkRows = [];
920
992
  for (const item of items) {
921
- const linkedArtifacts = [...(item.files ?? []), ...(item.docs ?? [])];
922
- for (const artifact of linkedArtifacts) {
923
- if (artifact.scope !== "project") {
924
- continue;
925
- }
926
- const normalizedPath = normalizeRelativePath(artifact.path);
927
- if (normalizedPath.length === 0) {
928
- continue;
929
- }
930
- linkedProjectPaths.add(normalizedPath);
931
- const absolutePath = path.isAbsolute(artifact.path) ? artifact.path : path.resolve(workspaceRoot, artifact.path);
932
- try {
933
- const stats = await fs.stat(absolutePath);
934
- if (!stats.isFile()) {
993
+ const linkedArtifactGroups = [
994
+ { link_kind: "files", artifacts: item.files ?? [] },
995
+ { link_kind: "docs", artifacts: item.docs ?? [] },
996
+ ];
997
+ for (const group of linkedArtifactGroups) {
998
+ for (const artifact of group.artifacts) {
999
+ if (artifact.scope !== "project") {
1000
+ continue;
1001
+ }
1002
+ const normalizedPath = normalizeRelativePath(artifact.path);
1003
+ if (normalizedPath.length === 0) {
1004
+ continue;
1005
+ }
1006
+ linkedProjectPaths.add(normalizedPath);
1007
+ const absolutePath = path.isAbsolute(artifact.path) ? artifact.path : path.resolve(workspaceRoot, artifact.path);
1008
+ let missing = false;
1009
+ try {
1010
+ const stats = await fs.stat(absolutePath);
1011
+ if (!stats.isFile() && !stats.isDirectory()) {
1012
+ missing = true;
1013
+ }
1014
+ }
1015
+ catch {
1016
+ missing = true;
1017
+ }
1018
+ if (missing) {
935
1019
  missingLinkedPaths.push(normalizedPath);
1020
+ staleLinkRows.push({ item_id: item.id, path: normalizedPath, link_kind: group.link_kind });
936
1021
  }
937
1022
  }
938
- catch {
939
- missingLinkedPaths.push(normalizedPath);
940
- }
941
1023
  }
942
1024
  }
943
1025
  const uniqueMissingLinkedPaths = [...new Set(missingLinkedPaths)].sort((left, right) => left.localeCompare(right));
@@ -964,6 +1046,20 @@ async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, inclu
964
1046
  };
965
1047
  }
966
1048
  const orphanedFiles = candidateFiles.filter((candidate) => !linkedProjectPaths.has(candidate));
1049
+ // Stale-path classification (pm-0v2m / GH-184): a missing linked path whose
1050
+ // basename still exists in the candidate scan is reported as `moved` (with
1051
+ // relink candidates); otherwise it is `deleted` and safe to prune.
1052
+ const classifiedStalePaths = classifyStaleLinkedPaths(uniqueMissingLinkedPaths, candidateFiles);
1053
+ const classificationByPath = new Map(classifiedStalePaths.map((entry) => [entry.path, entry.classification]));
1054
+ const movedStalePathCount = classifiedStalePaths.filter((entry) => entry.classification === "moved").length;
1055
+ const staleLinkPruneRows = staleLinkRows
1056
+ .map((row) => ({
1057
+ ...row,
1058
+ classification: classificationByPath.get(row.path) ?? "deleted",
1059
+ }))
1060
+ .sort((left, right) => left.item_id.localeCompare(right.item_id) ||
1061
+ left.path.localeCompare(right.path) ||
1062
+ left.link_kind.localeCompare(right.link_kind));
967
1063
  const warnings = [];
968
1064
  if (strictModeForcesPmInternals) {
969
1065
  warnings.push("validate_files_tracked_all_strict_forces_pm_internals");
@@ -976,6 +1072,7 @@ async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, inclu
976
1072
  }
977
1073
  const summarizedMissing = summarizeFileList(uniqueMissingLinkedPaths, verboseFileLists);
978
1074
  const summarizedOrphaned = summarizeFileList(orphanedFiles, verboseFileLists);
1075
+ const summarizedClassifications = summarizeFileList(summarizeStaleLinkedPathClassifications(classifiedStalePaths), verboseFileLists);
979
1076
  return {
980
1077
  check: {
981
1078
  name: "files",
@@ -1008,6 +1105,10 @@ async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, inclu
1008
1105
  missing_linked_paths_total: summarizedMissing.total,
1009
1106
  missing_linked_paths: summarizedMissing.values,
1010
1107
  missing_linked_paths_truncated: summarizedMissing.truncated,
1108
+ missing_linked_paths_moved_count: movedStalePathCount,
1109
+ missing_linked_paths_deleted_count: uniqueMissingLinkedPaths.length - movedStalePathCount,
1110
+ missing_linked_path_classifications: summarizedClassifications.values,
1111
+ missing_linked_path_classifications_truncated: summarizedClassifications.truncated,
1011
1112
  orphaned_paths_count: orphanedFiles.length,
1012
1113
  orphaned_paths_total: summarizedOrphaned.total,
1013
1114
  orphaned_paths: summarizedOrphaned.values,
@@ -1015,6 +1116,7 @@ async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, inclu
1015
1116
  },
1016
1117
  },
1017
1118
  warnings,
1119
+ staleLinkPruneRows,
1018
1120
  };
1019
1121
  }
1020
1122
  async function buildHistoryDriftCheck(pmRoot, items, verboseDiagnostics) {
@@ -1115,7 +1217,110 @@ function buildCommandReferencesCheck(items, idPrefix, verboseDiagnostics) {
1115
1217
  warnings,
1116
1218
  };
1117
1219
  }
1220
+ const VALIDATE_AUTO_FIX_MESSAGE = "pm validate auto-fix";
1221
+ /**
1222
+ * Apply one planned fix through the SAME audited command paths an operator
1223
+ * would use by hand (`pm update` / `pm files --remove` / `pm docs --remove`),
1224
+ * so every applied fix carries normal history, locking, and hook behavior.
1225
+ * Command modules are imported lazily: plain validate runs stay read-only and
1226
+ * never pay the mutation-stack import cost.
1227
+ */
1228
+ async function applyValidateFix(fix, global) {
1229
+ switch (fix.kind) {
1230
+ case "set_resolution":
1231
+ case "set_close_reason":
1232
+ case "reparent":
1233
+ case "unset_parent": {
1234
+ const { runUpdate } = await import("./update.js");
1235
+ const updateOptions = { message: VALIDATE_AUTO_FIX_MESSAGE };
1236
+ if (fix.kind === "set_resolution") {
1237
+ updateOptions.resolution = fix.value;
1238
+ }
1239
+ else if (fix.kind === "set_close_reason") {
1240
+ updateOptions.closeReason = fix.value;
1241
+ }
1242
+ else if (fix.kind === "reparent") {
1243
+ updateOptions.parent = fix.parent_id;
1244
+ }
1245
+ else {
1246
+ updateOptions.unset = ["parent"];
1247
+ }
1248
+ await runUpdate(fix.item_id, updateOptions, global);
1249
+ return;
1250
+ }
1251
+ case "prune_file_link": {
1252
+ throw new Error(`Unsupported non-batched fix kind: ${fix.kind}`);
1253
+ }
1254
+ case "prune_doc_link": {
1255
+ throw new Error(`Unsupported non-batched fix kind: ${fix.kind}`);
1256
+ }
1257
+ }
1258
+ }
1259
+ function pruneBatchKey(fix) {
1260
+ if (fix.kind !== "prune_file_link" && fix.kind !== "prune_doc_link") {
1261
+ return null;
1262
+ }
1263
+ return `${fix.kind}:${fix.item_id}`;
1264
+ }
1265
+ async function applyValidateFixes(applicable, global) {
1266
+ const applied = [];
1267
+ const failed = [];
1268
+ const pruneBatches = new Map();
1269
+ for (const fix of applicable) {
1270
+ const batchKey = pruneBatchKey(fix);
1271
+ if (batchKey === null) {
1272
+ try {
1273
+ await applyValidateFix(fix, global);
1274
+ applied.push(fix);
1275
+ }
1276
+ catch (error) {
1277
+ failed.push({ fix, error });
1278
+ }
1279
+ continue;
1280
+ }
1281
+ const existing = pruneBatches.get(batchKey);
1282
+ if (existing) {
1283
+ existing.push(fix);
1284
+ }
1285
+ else {
1286
+ pruneBatches.set(batchKey, [fix]);
1287
+ }
1288
+ }
1289
+ for (const batch of pruneBatches.values()) {
1290
+ const first = batch[0];
1291
+ if (!first) {
1292
+ continue;
1293
+ }
1294
+ const remove = batch
1295
+ .map((fix) => fix.path)
1296
+ .filter((value) => typeof value === "string" && value.length > 0);
1297
+ try {
1298
+ if (first.kind === "prune_file_link") {
1299
+ const { runFiles } = await import("./files.js");
1300
+ await runFiles(first.item_id, { remove, message: VALIDATE_AUTO_FIX_MESSAGE }, global);
1301
+ }
1302
+ else {
1303
+ const { runDocs } = await import("./docs.js");
1304
+ await runDocs(first.item_id, { remove, message: VALIDATE_AUTO_FIX_MESSAGE }, global);
1305
+ }
1306
+ applied.push(...batch);
1307
+ }
1308
+ catch (error) {
1309
+ failed.push(...batch.map((fix) => ({ fix, error })));
1310
+ }
1311
+ }
1312
+ return { applied, failed };
1313
+ }
1118
1314
  export async function runValidate(options, global) {
1315
+ const fixesRequested = options.autoFix === true || options.pruneMissing === true;
1316
+ if (options.dryRun === true && !fixesRequested) {
1317
+ throw new PmCliError("--dry-run requires --auto-fix or --prune-missing (there is nothing to preview otherwise).", EXIT_CODE.USAGE);
1318
+ }
1319
+ if (options.fixScope !== undefined && options.fixScope.length > 0 && options.autoFix !== true) {
1320
+ throw new PmCliError("--fix-scope requires --auto-fix.", EXIT_CODE.USAGE);
1321
+ }
1322
+ // Resolved up-front so unknown --fix-scope values fail fast before any scan.
1323
+ const grantedFixScopes = resolveGrantedFixScopes(options.fixScope);
1119
1324
  const pmRoot = resolvePmRoot(process.cwd(), global.path);
1120
1325
  if (!(await pathExists(getSettingsPath(pmRoot)))) {
1121
1326
  throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
@@ -1143,17 +1348,29 @@ export async function runValidate(options, global) {
1143
1348
  checks.push(built.check);
1144
1349
  warnings.push(...built.warnings);
1145
1350
  };
1351
+ let closeReasonBackfillRows = [];
1352
+ let resolutionBackfillRows = [];
1353
+ let terminalParentFixRows = [];
1354
+ let staleLinkPruneRows = [];
1146
1355
  if (requestedChecks.has("metadata")) {
1147
- record(buildMetadataCheck(items, metadataPolicy, statusRegistry, Boolean(options.verboseDiagnostics)));
1356
+ const built = buildMetadataCheck(items, metadataPolicy, statusRegistry, Boolean(options.verboseDiagnostics));
1357
+ closeReasonBackfillRows = built.closeReasonBackfillRows;
1358
+ record(built);
1148
1359
  }
1149
1360
  if (requestedChecks.has("resolution")) {
1150
- record(buildResolutionCheck(items, statusRegistry, Boolean(options.verboseDiagnostics)));
1361
+ const built = buildResolutionCheck(items, statusRegistry, Boolean(options.verboseDiagnostics));
1362
+ resolutionBackfillRows = built.resolutionBackfillRows;
1363
+ record(built);
1151
1364
  }
1152
1365
  if (requestedChecks.has("lifecycle")) {
1153
- record(buildLifecycleCheck(items, Boolean(options.checkStaleBlockers), dependencyCycleSeverity, statusRegistry, lifecyclePatternPolicy, Boolean(options.verboseDiagnostics)));
1366
+ const built = buildLifecycleCheck(items, Boolean(options.checkStaleBlockers), dependencyCycleSeverity, statusRegistry, lifecyclePatternPolicy, Boolean(options.verboseDiagnostics));
1367
+ terminalParentFixRows = built.terminalParentFixRows;
1368
+ record(built);
1154
1369
  }
1155
1370
  if (requestedChecks.has("files")) {
1156
- record(await buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, Boolean(options.includePmInternals), Boolean(options.verboseFileLists)));
1371
+ const built = await buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, Boolean(options.includePmInternals), Boolean(options.verboseFileLists));
1372
+ staleLinkPruneRows = built.staleLinkPruneRows;
1373
+ record(built);
1157
1374
  }
1158
1375
  if (requestedChecks.has("command_references")) {
1159
1376
  record(buildCommandReferencesCheck(items, settings.id_prefix, Boolean(options.verboseDiagnostics)));
@@ -1161,6 +1378,52 @@ export async function runValidate(options, global) {
1161
1378
  if (requestedChecks.has("history_drift")) {
1162
1379
  record(await buildHistoryDriftCheck(pmRoot, items, Boolean(options.verboseDiagnostics)));
1163
1380
  }
1381
+ // Remediation phase (pm-c3sz / pm-8jss / pm-0v2m). Plans are derived from
1382
+ // the findings of THIS run; checks above always report the pre-fix state.
1383
+ // Safe field backfills apply by default under --auto-fix; gated lifecycle
1384
+ // fixes are planned but withheld unless --fix-scope lifecycle grants them;
1385
+ // --dry-run previews without mutating; failures never abort the run.
1386
+ let fixes;
1387
+ if (fixesRequested) {
1388
+ const planned = [];
1389
+ if (options.autoFix === true) {
1390
+ planned.push(...planCloseReasonBackfillFixes(closeReasonBackfillRows));
1391
+ planned.push(...planResolutionBackfillFixes(resolutionBackfillRows));
1392
+ planned.push(...planTerminalParentFixes(terminalParentFixRows));
1393
+ }
1394
+ if (options.pruneMissing === true) {
1395
+ planned.push(...planStaleLinkPruneFixes(staleLinkPruneRows));
1396
+ }
1397
+ const { applicable, gated } = partitionFixesByGrant(planned, grantedFixScopes);
1398
+ const dryRun = options.dryRun === true;
1399
+ const appliedFixRows = [];
1400
+ const failedFixRows = [];
1401
+ if (!dryRun) {
1402
+ const applied = await applyValidateFixes(applicable, global);
1403
+ appliedFixRows.push(...applied.applied.map(toFixOutputRow));
1404
+ failedFixRows.push(...applied.failed.map(({ fix, error }) => ({
1405
+ ...toFixOutputRow(fix),
1406
+ error: error instanceof Error ? error.message : String(error),
1407
+ })));
1408
+ }
1409
+ fixes = {
1410
+ mode: dryRun ? "dry_run" : "apply",
1411
+ auto_fix: options.autoFix === true,
1412
+ prune_missing: options.pruneMissing === true,
1413
+ granted_fix_scopes: [...grantedFixScopes].sort((left, right) => left.localeCompare(right)),
1414
+ planned_count: planned.length,
1415
+ applied_count: appliedFixRows.length,
1416
+ gated_count: gated.length,
1417
+ failed_count: failedFixRows.length,
1418
+ planned_fixes: planned.map(toFixOutputRow),
1419
+ applied_fixes: appliedFixRows,
1420
+ gated_fixes: gated.map((fix) => ({
1421
+ ...toFixOutputRow(fix),
1422
+ gate_hint: `Withheld: re-run with --fix-scope ${fix.gate} to apply.`,
1423
+ })),
1424
+ failed_fixes: failedFixRows,
1425
+ };
1426
+ }
1164
1427
  const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));
1165
1428
  const hasErrors = checks.some((check) => check.status === "error");
1166
1429
  return {
@@ -1168,8 +1431,9 @@ export async function runValidate(options, global) {
1168
1431
  has_warnings: normalizedWarnings.length > 0,
1169
1432
  checks,
1170
1433
  warnings: normalizedWarnings,
1434
+ ...(fixes !== undefined ? { fixes } : {}),
1171
1435
  generated_at: nowIso(),
1172
1436
  };
1173
1437
  }
1174
1438
  //# sourceMappingURL=validate.js.map
1175
- //# debugId=776e2ca9-52d6-5274-9230-4d9b961456e5
1439
+ //# debugId=24c5f96e-8535-5063-87d2-bb17fe0d4d1f