@unbrained/pm-cli 2026.7.1 → 2026.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (563) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cli/commander-usage.d.ts +2 -0
  3. package/dist/cli/commander-usage.js +58 -47
  4. package/dist/cli/commander-usage.js.map +1 -1
  5. package/dist/cli/commands/aggregate.js +102 -79
  6. package/dist/cli/commands/aggregate.js.map +1 -1
  7. package/dist/cli/commands/calendar.js +278 -243
  8. package/dist/cli/commands/calendar.js.map +1 -1
  9. package/dist/cli/commands/close-many.js +89 -68
  10. package/dist/cli/commands/close-many.js.map +1 -1
  11. package/dist/cli/commands/close.js +157 -129
  12. package/dist/cli/commands/close.js.map +1 -1
  13. package/dist/cli/commands/comments-audit.js +50 -42
  14. package/dist/cli/commands/comments-audit.js.map +1 -1
  15. package/dist/cli/commands/config.d.ts +2 -0
  16. package/dist/cli/commands/config.js +443 -879
  17. package/dist/cli/commands/config.js.map +1 -1
  18. package/dist/cli/commands/context.js +365 -287
  19. package/dist/cli/commands/context.js.map +1 -1
  20. package/dist/cli/commands/contracts.js +352 -238
  21. package/dist/cli/commands/contracts.js.map +1 -1
  22. package/dist/cli/commands/dedupe-audit.js +46 -39
  23. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  24. package/dist/cli/commands/dedupe-merge.js +88 -69
  25. package/dist/cli/commands/dedupe-merge.js.map +1 -1
  26. package/dist/cli/commands/get.js +114 -81
  27. package/dist/cli/commands/get.js.map +1 -1
  28. package/dist/cli/commands/health.d.ts +17 -0
  29. package/dist/cli/commands/health.js +446 -307
  30. package/dist/cli/commands/health.js.map +1 -1
  31. package/dist/cli/commands/history-compact.js +209 -140
  32. package/dist/cli/commands/history-compact.js.map +1 -1
  33. package/dist/cli/commands/history-redact.js +162 -119
  34. package/dist/cli/commands/history-redact.js.map +1 -1
  35. package/dist/cli/commands/history-repair.js +120 -85
  36. package/dist/cli/commands/history-repair.js.map +1 -1
  37. package/dist/cli/commands/init.d.ts +8 -2
  38. package/dist/cli/commands/init.js +263 -162
  39. package/dist/cli/commands/init.js.map +1 -1
  40. package/dist/cli/commands/list.js +152 -102
  41. package/dist/cli/commands/list.js.map +1 -1
  42. package/dist/cli/commands/next.js +49 -32
  43. package/dist/cli/commands/next.js.map +1 -1
  44. package/dist/cli/commands/plan.js +373 -298
  45. package/dist/cli/commands/plan.js.map +1 -1
  46. package/dist/cli/commands/recurrence-parsers.js +43 -25
  47. package/dist/cli/commands/recurrence-parsers.js.map +1 -1
  48. package/dist/cli/commands/reindex.d.ts +21 -5
  49. package/dist/cli/commands/reindex.js +345 -205
  50. package/dist/cli/commands/reindex.js.map +1 -1
  51. package/dist/cli/commands/restore.d.ts +8 -7
  52. package/dist/cli/commands/restore.js +105 -69
  53. package/dist/cli/commands/restore.js.map +1 -1
  54. package/dist/cli/commands/schema.js +33 -30
  55. package/dist/cli/commands/schema.js.map +1 -1
  56. package/dist/cli/commands/search.d.ts +10 -2
  57. package/dist/cli/commands/search.js +503 -470
  58. package/dist/cli/commands/search.js.map +1 -1
  59. package/dist/cli/commands/telemetry.js +98 -87
  60. package/dist/cli/commands/telemetry.js.map +1 -1
  61. package/dist/cli/commands/test-all.js +237 -168
  62. package/dist/cli/commands/test-all.js.map +1 -1
  63. package/dist/cli/commands/test.d.ts +6 -5
  64. package/dist/cli/commands/test.js +424 -344
  65. package/dist/cli/commands/test.js.map +1 -1
  66. package/dist/cli/commands/update-many.js +57 -42
  67. package/dist/cli/commands/update-many.js.map +1 -1
  68. package/dist/cli/commands/update.d.ts +1 -1
  69. package/dist/cli/commands/update.js +738 -671
  70. package/dist/cli/commands/update.js.map +1 -1
  71. package/dist/cli/commands/validate.d.ts +18 -1
  72. package/dist/cli/commands/validate.js +466 -343
  73. package/dist/cli/commands/validate.js.map +1 -1
  74. package/dist/cli/error-guidance.js +399 -357
  75. package/dist/cli/error-guidance.js.map +1 -1
  76. package/dist/cli/main.d.ts +47 -0
  77. package/dist/cli/main.js +428 -341
  78. package/dist/cli/main.js.map +1 -1
  79. package/dist/cli/migration-gates.js +22 -45
  80. package/dist/cli/migration-gates.js.map +1 -1
  81. package/dist/cli/register-list-query.js +94 -105
  82. package/dist/cli/register-list-query.js.map +1 -1
  83. package/dist/cli/register-mutation.js +400 -416
  84. package/dist/cli/register-mutation.js.map +1 -1
  85. package/dist/cli/register-operations.js +86 -66
  86. package/dist/cli/register-operations.js.map +1 -1
  87. package/dist/cli/register-setup.js +120 -101
  88. package/dist/cli/register-setup.js.map +1 -1
  89. package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js → activity-CUC4JY3U.js} +9 -9
  90. package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
  91. package/dist/cli-bundle/chunks/{aggregate-JTEF4BP7.js → aggregate-DKUTRY6R.js} +108 -84
  92. package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
  93. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js → aggregate-SW5PNGCS.js} +107 -83
  94. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js.map → aggregate-SW5PNGCS.js.map} +2 -2
  95. package/dist/cli-bundle/chunks/{append-QCFJSDFL.js → append-H32VOR2Y.js} +6 -6
  96. package/dist/cli-bundle/chunks/{append-LOVPGVPT.js → append-UBM632FK.js} +6 -6
  97. package/dist/cli-bundle/chunks/{chunk-RLDHZHQS.js → chunk-2227673O.js} +158 -114
  98. package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
  99. package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js → chunk-2ASNV4DH.js} +4 -4
  100. package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js → chunk-2CHRYUXL.js} +2 -2
  101. package/dist/cli-bundle/chunks/{chunk-NWMZWYYB.js → chunk-2KWL5NPW.js} +42 -27
  102. package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
  103. package/dist/cli-bundle/chunks/{chunk-NFDPYAIP.js → chunk-36UGKF4O.js} +21 -29
  104. package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
  105. package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js → chunk-3AZUFQK6.js} +6 -6
  106. package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js → chunk-3LCUASYG.js} +2 -2
  107. package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js → chunk-3Q2HBMTI.js} +2 -2
  108. package/dist/cli-bundle/chunks/{chunk-IPYBJWTE.js → chunk-4NUOWFBT.js} +109 -72
  109. package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
  110. package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js → chunk-55XRYWEG.js} +6 -6
  111. package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js → chunk-5GVTFFTC.js} +2 -2
  112. package/dist/cli-bundle/chunks/{chunk-BDTISOSD.js → chunk-5PGBHRY3.js} +41 -26
  113. package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
  114. package/dist/cli-bundle/chunks/{chunk-YITK2PJ6.js → chunk-66Z3X7ZG.js} +261 -161
  115. package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
  116. package/dist/cli-bundle/chunks/{chunk-NUHHPVVS.js → chunk-6ITZLD4T.js} +712 -612
  117. package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
  118. package/dist/cli-bundle/chunks/{chunk-V3NOKJF2.js → chunk-6YCYF2AI.js} +262 -162
  119. package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
  120. package/dist/cli-bundle/chunks/{chunk-BZCEN4JA.js → chunk-6ZMBJRDJ.js} +492 -403
  121. package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
  122. package/dist/cli-bundle/chunks/{chunk-CF7RL6FR.js → chunk-7MYWF4ZX.js} +110 -73
  123. package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
  124. package/dist/cli-bundle/chunks/{chunk-RVUALSJF.js → chunk-7NSPKJUS.js} +356 -285
  125. package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
  126. package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js → chunk-7TH5NMVB.js} +95 -53
  127. package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-ZETXE4SE.js → chunk-7W4H4K26.js} +713 -613
  129. package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
  130. package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js → chunk-A6VOGKBA.js} +6 -6
  131. package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js → chunk-AIAIXG7I.js} +2 -2
  132. package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js → chunk-AJEBCRIY.js} +5 -5
  133. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
  134. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
  135. package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js → chunk-BTX5MIQF.js} +2 -2
  136. package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js → chunk-BVZZN2LH.js} +3 -3
  137. package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js → chunk-CYBDUHNO.js} +3 -3
  138. package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js → chunk-CZPVDLD2.js} +4 -4
  139. package/dist/cli-bundle/chunks/{chunk-3VGN2UWE.js → chunk-EMPGXBUF.js} +22 -30
  140. package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
  141. package/dist/cli-bundle/chunks/{chunk-JPECA746.js → chunk-EUKTMRN3.js} +2 -2
  142. package/dist/cli-bundle/chunks/{chunk-2466X6E4.js → chunk-FFOQHGNH.js} +6 -6
  143. package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js → chunk-GFMSLORL.js} +6 -6
  144. package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js → chunk-GRRG3MCT.js} +4 -4
  145. package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js → chunk-H4GRLYJS.js} +3 -3
  146. package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js → chunk-HQTPRV4D.js} +6 -6
  147. package/dist/cli-bundle/chunks/{chunk-7R4QEMZZ.js → chunk-I66WE2HE.js} +354 -283
  148. package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
  149. package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js → chunk-IEEJQCZ4.js} +3 -3
  150. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js → chunk-IG5JYZGU.js} +390 -312
  151. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js.map → chunk-IG5JYZGU.js.map} +2 -2
  152. package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js → chunk-JMK5GCK2.js} +2 -2
  153. package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js → chunk-JXAUVO6X.js} +258 -169
  154. package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js.map → chunk-JXAUVO6X.js.map} +2 -2
  155. package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js → chunk-K2VYLVX4.js} +2 -2
  156. package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js → chunk-KCO2EAN5.js} +3 -3
  157. package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js → chunk-KIYCOJ63.js} +4 -4
  158. package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js → chunk-KLXF7NCC.js} +2 -2
  159. package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js → chunk-KN3URLKS.js} +3 -3
  160. package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js → chunk-LRKMWUUV.js} +2 -2
  161. package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js → chunk-LTRAF2D7.js} +3 -3
  162. package/dist/cli-bundle/chunks/{chunk-VARHOHYV.js → chunk-MNBPX5JS.js} +55 -36
  163. package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
  164. package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js → chunk-MRD4T5LF.js} +2 -2
  165. package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js → chunk-N2JSWVWG.js} +4 -4
  166. package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js → chunk-N3QCJS4M.js} +6 -6
  167. package/dist/cli-bundle/chunks/{chunk-JSU5P7VS.js → chunk-NRZS637N.js} +258 -169
  168. package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
  169. package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js → chunk-OTUJZKGI.js} +3 -3
  170. package/dist/cli-bundle/chunks/{chunk-5CGRF3L5.js → chunk-Q6K2OACU.js} +153 -90
  171. package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
  172. package/dist/cli-bundle/chunks/{chunk-3XZCOZ5J.js → chunk-Q6NXOHS6.js} +391 -313
  173. package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
  174. package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js → chunk-QH3FSKRJ.js} +2 -2
  175. package/dist/cli-bundle/chunks/{chunk-4XOIEKSD.js → chunk-RM37OPYK.js} +56 -37
  176. package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
  177. package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js → chunk-S62UANU7.js} +3 -3
  178. package/dist/cli-bundle/chunks/{chunk-RMMQ74TG.js → chunk-SPM2XLWI.js} +37 -28
  179. package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
  180. package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js → chunk-SYNKD3ZG.js} +5 -5
  181. package/dist/cli-bundle/chunks/{chunk-FFMQB7WR.js → chunk-SYVUU7EK.js} +493 -404
  182. package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
  183. package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js → chunk-TPOFWBMY.js} +95 -53
  184. package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
  185. package/dist/cli-bundle/chunks/{chunk-OTUHB4HS.js → chunk-TTHCEV5Q.js} +92 -77
  186. package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
  187. package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js → chunk-U2BEEM2X.js} +3 -3
  188. package/dist/cli-bundle/chunks/{chunk-KNPEF7QG.js → chunk-UGLU6Q2I.js} +91 -76
  189. package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
  190. package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js → chunk-UT73HUPC.js} +3 -3
  191. package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js → chunk-UTSH5GWX.js} +4 -4
  192. package/dist/cli-bundle/chunks/{chunk-IZBR4NRW.js → chunk-UWKEJMZU.js} +157 -113
  193. package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
  194. package/dist/cli-bundle/chunks/{chunk-3S2KT7NG.js → chunk-W47SML5B.js} +152 -89
  195. package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
  196. package/dist/cli-bundle/chunks/{chunk-RGEMWD6Q.js → chunk-WJAMWAHZ.js} +157 -118
  197. package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
  198. package/dist/cli-bundle/chunks/{chunk-JWXRETDF.js → chunk-XCHUVHKU.js} +626 -484
  199. package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
  200. package/dist/cli-bundle/chunks/{chunk-55SNVXRQ.js → chunk-XEWQKDYZ.js} +626 -484
  201. package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
  202. package/dist/cli-bundle/chunks/{chunk-TP5Q5ZD3.js → chunk-XTHQWXVC.js} +158 -119
  203. package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
  204. package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js → chunk-XWGEMNBR.js} +2 -2
  205. package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js → chunk-Y4NRKBFW.js} +3 -3
  206. package/dist/cli-bundle/chunks/{chunk-2D4HATP2.js → chunk-YLZZ6T54.js} +38 -29
  207. package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
  208. package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js → chunk-YPKFV2JR.js} +6 -6
  209. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
  210. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
  211. package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js → chunk-ZNHEYCDD.js} +2 -2
  212. package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js → chunk-ZNT7KEWE.js} +2 -2
  213. package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js → claim-SENTPZBN.js} +8 -8
  214. package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js → claim-Z7MEQCBT.js} +8 -8
  215. package/dist/cli-bundle/chunks/{close-TQYAAFJP.js → close-424MX4CU.js} +7 -7
  216. package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
  217. package/dist/cli-bundle/chunks/{close-many-LDRVEQY2.js → close-many-2IV4J2TR.js} +102 -81
  218. package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
  219. package/dist/cli-bundle/chunks/{close-many-BG5QQIDQ.js → close-many-SWY34BII.js} +101 -80
  220. package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
  221. package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js → comments-4FGNTSNV.js} +8 -8
  222. package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js → comments-7YS5MY5X.js} +8 -8
  223. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js +1062 -0
  224. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js.map +1 -0
  225. package/dist/cli-bundle/chunks/config-G74GISC4.js +1072 -0
  226. package/dist/cli-bundle/chunks/config-G74GISC4.js.map +7 -0
  227. package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js → context-LHVKJSPJ.js} +12 -12
  228. package/dist/cli-bundle/chunks/{context-B6275WPX.js → context-ZQY54JNS.js} +12 -12
  229. package/dist/cli-bundle/chunks/{contracts-HN7ABKLP.js → contracts-CP2EZJC7.js} +320 -199
  230. package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
  231. package/dist/cli-bundle/chunks/{contracts-W4FZVVD6.js → contracts-FIZLMP7O.js} +321 -200
  232. package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
  233. package/dist/cli-bundle/chunks/{copy-DEM4DATS.js → copy-GYNQQPW2.js} +5 -5
  234. package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js → copy-TLW7JTQT.js} +5 -5
  235. package/dist/cli-bundle/chunks/{create-RLRJMRTM.js → create-VSKYSOCD.js} +12 -12
  236. package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
  237. package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js → delete-4W5JYCEG.js} +5 -5
  238. package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js → delete-ANTOTI2I.js} +5 -5
  239. package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js → deps-HPPE6MJN.js} +5 -5
  240. package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js → deps-ZQZN54EZ.js} +5 -5
  241. package/dist/cli-bundle/chunks/{docs-GYZNVS26.js → docs-RPOVFMP3.js} +7 -7
  242. package/dist/cli-bundle/chunks/{docs-26S44RXU.js → docs-XJNYBJGE.js} +7 -7
  243. package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js → eval-DM6JBZTS.js} +10 -10
  244. package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js → eval-RFBI5FGS.js} +10 -10
  245. package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js → extension-B3YY4WY5.js} +11 -11
  246. package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js → extension-TTSEFQTS.js} +11 -11
  247. package/dist/cli-bundle/chunks/{files-NQHEXUZD.js → files-5D65CHGE.js} +7 -7
  248. package/dist/cli-bundle/chunks/{files-MBNICQFM.js → files-GPIG77EN.js} +7 -7
  249. package/dist/cli-bundle/chunks/{focus-XZW5423D.js → focus-C3PEJV2C.js} +6 -6
  250. package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js → focus-ZHN7WIGX.js} +6 -6
  251. package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js → gc-D4JQ6OWN.js} +3 -3
  252. package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js → gc-VZIXDL32.js} +3 -3
  253. package/dist/cli-bundle/chunks/{get-DSDEKJ3L.js → get-GIBRUUOP.js} +121 -81
  254. package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
  255. package/dist/cli-bundle/chunks/{get-A7MAOHCU.js → get-IOVAN6RU.js} +120 -80
  256. package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
  257. package/dist/cli-bundle/chunks/{health-3IPFLKXB.js → health-L2U3AFKV.js} +437 -265
  258. package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
  259. package/dist/cli-bundle/chunks/{health-GZXGBZ36.js → health-MM7AWXYF.js} +436 -264
  260. package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +7 -0
  261. package/dist/cli-bundle/chunks/history-DD7L7BNL.js +18 -0
  262. package/dist/cli-bundle/chunks/{history-NERDJNUB.js → history-IL7XCEX2.js} +8 -8
  263. package/dist/cli-bundle/chunks/{history-compact-HR7BB4LR.js → history-compact-HALOTOU7.js} +214 -135
  264. package/dist/cli-bundle/chunks/history-compact-HALOTOU7.js.map +1 -0
  265. package/dist/cli-bundle/chunks/{history-compact-2WRZ2WK4.js → history-compact-MV25P7DM.js} +213 -134
  266. package/dist/cli-bundle/chunks/history-compact-MV25P7DM.js.map +7 -0
  267. package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +19 -0
  268. package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js → history-redact-VYCWQFK7.js} +9 -9
  269. package/dist/cli-bundle/chunks/{history-repair-XA3LC4GA.js → history-repair-44MODPQF.js} +124 -84
  270. package/dist/cli-bundle/chunks/history-repair-44MODPQF.js.map +1 -0
  271. package/dist/cli-bundle/chunks/{history-repair-LCMOS45X.js → history-repair-CPNAOCNF.js} +123 -83
  272. package/dist/cli-bundle/chunks/history-repair-CPNAOCNF.js.map +7 -0
  273. package/dist/cli-bundle/chunks/{init-64XDLQJB.js → init-F27NHENZ.js} +12 -12
  274. package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
  275. package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js → learnings-HJVDQIGY.js} +8 -8
  276. package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js → learnings-XSFSUUWK.js} +8 -8
  277. package/dist/cli-bundle/chunks/{list-G5Y65VF6.js → list-HPMEKCAA.js} +8 -8
  278. package/dist/cli-bundle/chunks/{list-DNBJVO3E.js → list-VMPWTURB.js} +8 -8
  279. package/dist/cli-bundle/chunks/{next-BCERKDUR.js → next-ETXF2ZCN.js} +59 -37
  280. package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
  281. package/dist/cli-bundle/chunks/{next-FYTQF6HG.js → next-QM6YJIIS.js} +60 -38
  282. package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
  283. package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js → notes-GDZIKGR6.js} +8 -8
  284. package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js → notes-WDDBPC4D.js} +8 -8
  285. package/dist/cli-bundle/chunks/{plan-RKZHQVXR.js → plan-BGDR73Z6.js} +373 -279
  286. package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
  287. package/dist/cli-bundle/chunks/{plan-4WXEQCTN.js → plan-C5IMM335.js} +372 -278
  288. package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
  289. package/dist/cli-bundle/chunks/{profile-QLER5ENE.js → profile-CCOKZ2IQ.js} +9 -9
  290. package/dist/cli-bundle/chunks/{profile-4OMM32CD.js → profile-HUCENIEQ.js} +9 -9
  291. package/dist/cli-bundle/chunks/{register-list-query-7LV46VAU.js → register-list-query-ROSNIL52.js} +80 -83
  292. package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +1 -0
  293. package/dist/cli-bundle/chunks/{register-list-query-SNG5PGA4.js → register-list-query-XN4ZRHSV.js} +79 -82
  294. package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +7 -0
  295. package/dist/cli-bundle/chunks/{register-mutation-ENNDUAZG.js → register-mutation-CFSB2MS3.js} +403 -382
  296. package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
  297. package/dist/cli-bundle/chunks/{register-mutation-KK7PHYYU.js → register-mutation-KRLAHEL2.js} +402 -381
  298. package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
  299. package/dist/cli-bundle/chunks/{register-operations-HZ6XERQG.js → register-operations-4PASGJDB.js} +112 -93
  300. package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +7 -0
  301. package/dist/cli-bundle/chunks/{register-operations-C6OWLDSH.js → register-operations-MBN4KGUM.js} +113 -94
  302. package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +1 -0
  303. package/dist/cli-bundle/chunks/{register-setup-P67EMBDJ.js → register-setup-VIAWYFP5.js} +129 -104
  304. package/dist/cli-bundle/chunks/register-setup-VIAWYFP5.js.map +1 -0
  305. package/dist/cli-bundle/chunks/{register-setup-ZKJ53RS7.js → register-setup-ZCGKHDKL.js} +128 -103
  306. package/dist/cli-bundle/chunks/register-setup-ZCGKHDKL.js.map +7 -0
  307. package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js → restore-4CBWUMCX.js} +9 -9
  308. package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
  309. package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
  310. package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
  311. package/dist/cli-bundle/chunks/{schema-73HR2OJW.js → schema-TDGK6N3I.js} +7 -7
  312. package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js → schema-UE5KKAUX.js} +7 -7
  313. package/dist/cli-bundle/chunks/{search-KILGT37L.js → search-FP7MEU4S.js} +10 -10
  314. package/dist/cli-bundle/chunks/{search-AXPXKZER.js → search-K4CFLQ5S.js} +10 -10
  315. package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js → stats-NJJCALEZ.js} +6 -6
  316. package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js → stats-XT6QRKQY.js} +6 -6
  317. package/dist/cli-bundle/chunks/{telemetry-GAHHQTOS.js → telemetry-5SQ5UDXC.js} +84 -70
  318. package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
  319. package/dist/cli-bundle/chunks/{telemetry-BZUF6H7G.js → telemetry-HVXFZA2U.js} +85 -71
  320. package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
  321. package/dist/cli-bundle/chunks/{test-ACD52Z3S.js → test-UFSJ5YIO.js} +15 -15
  322. package/dist/cli-bundle/chunks/{test-PWDIZ255.js → test-YCDAUBWF.js} +15 -15
  323. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js +427 -0
  324. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js.map +1 -0
  325. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js +430 -0
  326. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js.map +7 -0
  327. package/dist/cli-bundle/chunks/{test-runs-UXIXPDKU.js → test-runs-FK5E75AA.js} +185 -147
  328. package/dist/cli-bundle/chunks/test-runs-FK5E75AA.js.map +1 -0
  329. package/dist/cli-bundle/chunks/{test-runs-PLRAZEFW.js → test-runs-H4TGWGRN.js} +184 -146
  330. package/dist/cli-bundle/chunks/test-runs-H4TGWGRN.js.map +7 -0
  331. package/dist/cli-bundle/chunks/update-MTCFES6X.js +24 -0
  332. package/dist/cli-bundle/chunks/{update-KFX2SIAC.js → update-Y5WQVT5O.js} +15 -15
  333. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js → update-many-6YAYYRLE.js} +82 -67
  334. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js.map → update-many-6YAYYRLE.js.map} +2 -2
  335. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js → update-many-JTKKSA7Y.js} +83 -68
  336. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js.map → update-many-JTKKSA7Y.js.map} +1 -1
  337. package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js → upgrade-DTAHZ236.js} +11 -11
  338. package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js → upgrade-JUDU7YL4.js} +11 -11
  339. package/dist/cli-bundle/chunks/{validate-MTUVL5VC.js → validate-732RWS5W.js} +440 -320
  340. package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
  341. package/dist/cli-bundle/chunks/{validate-X5W76YJL.js → validate-W7H5TEDC.js} +441 -321
  342. package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
  343. package/dist/cli-bundle/main.js +945 -812
  344. package/dist/cli-bundle/main.js.map +3 -3
  345. package/dist/core/config/nested-settings.js +89 -67
  346. package/dist/core/config/nested-settings.js.map +1 -1
  347. package/dist/core/governance/metadata-coverage.js +20 -28
  348. package/dist/core/governance/metadata-coverage.js.map +1 -1
  349. package/dist/core/history/drift-scan.js +93 -81
  350. package/dist/core/history/drift-scan.js.map +1 -1
  351. package/dist/core/item/item-type-definition.js +14 -14
  352. package/dist/core/item/item-type-definition.js.map +1 -1
  353. package/dist/core/item/type-registry.js +87 -82
  354. package/dist/core/item/type-registry.js.map +1 -1
  355. package/dist/core/output/mutation-projection.js +42 -26
  356. package/dist/core/output/mutation-projection.js.map +1 -1
  357. package/dist/core/schema/runtime-schema.js +34 -28
  358. package/dist/core/schema/runtime-schema.js.map +1 -1
  359. package/dist/core/search/semantic-defaults.js +64 -37
  360. package/dist/core/search/semantic-defaults.js.map +1 -1
  361. package/dist/core/search/vector-stores.js +32 -17
  362. package/dist/core/search/vector-stores.js.map +1 -1
  363. package/dist/core/sentry/helpers.js +31 -28
  364. package/dist/core/sentry/helpers.js.map +1 -1
  365. package/dist/core/sentry/instrument.js +54 -43
  366. package/dist/core/sentry/instrument.js.map +1 -1
  367. package/dist/core/store/front-matter-cache.js +239 -153
  368. package/dist/core/store/front-matter-cache.js.map +1 -1
  369. package/dist/core/store/item-store.js +33 -26
  370. package/dist/core/store/item-store.js.map +1 -1
  371. package/dist/core/store/settings.js +247 -203
  372. package/dist/core/store/settings.js.map +1 -1
  373. package/dist/core/test/background-runs.js +189 -160
  374. package/dist/core/test/background-runs.js.map +1 -1
  375. package/package.json +2 -2
  376. package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
  377. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
  378. package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
  379. package/dist/cli-bundle/chunks/activity-AW6XVFH6.js +0 -16
  380. package/dist/cli-bundle/chunks/aggregate-JTEF4BP7.js.map +0 -1
  381. package/dist/cli-bundle/chunks/chunk-2D4HATP2.js.map +0 -1
  382. package/dist/cli-bundle/chunks/chunk-3S2KT7NG.js.map +0 -7
  383. package/dist/cli-bundle/chunks/chunk-3VGN2UWE.js.map +0 -1
  384. package/dist/cli-bundle/chunks/chunk-3XZCOZ5J.js.map +0 -1
  385. package/dist/cli-bundle/chunks/chunk-4DSGXSBL.js.map +0 -7
  386. package/dist/cli-bundle/chunks/chunk-4XOIEKSD.js.map +0 -1
  387. package/dist/cli-bundle/chunks/chunk-55SNVXRQ.js.map +0 -7
  388. package/dist/cli-bundle/chunks/chunk-5CGRF3L5.js.map +0 -1
  389. package/dist/cli-bundle/chunks/chunk-7R4QEMZZ.js.map +0 -1
  390. package/dist/cli-bundle/chunks/chunk-BDTISOSD.js.map +0 -7
  391. package/dist/cli-bundle/chunks/chunk-BZCEN4JA.js.map +0 -7
  392. package/dist/cli-bundle/chunks/chunk-CF7RL6FR.js.map +0 -1
  393. package/dist/cli-bundle/chunks/chunk-FFMQB7WR.js.map +0 -1
  394. package/dist/cli-bundle/chunks/chunk-IPYBJWTE.js.map +0 -7
  395. package/dist/cli-bundle/chunks/chunk-IZBR4NRW.js.map +0 -7
  396. package/dist/cli-bundle/chunks/chunk-JSU5P7VS.js.map +0 -1
  397. package/dist/cli-bundle/chunks/chunk-JWXRETDF.js.map +0 -1
  398. package/dist/cli-bundle/chunks/chunk-KNPEF7QG.js.map +0 -7
  399. package/dist/cli-bundle/chunks/chunk-NFDPYAIP.js.map +0 -7
  400. package/dist/cli-bundle/chunks/chunk-NUHHPVVS.js.map +0 -7
  401. package/dist/cli-bundle/chunks/chunk-NWMZWYYB.js.map +0 -1
  402. package/dist/cli-bundle/chunks/chunk-OTUHB4HS.js.map +0 -1
  403. package/dist/cli-bundle/chunks/chunk-RGEMWD6Q.js.map +0 -7
  404. package/dist/cli-bundle/chunks/chunk-RLDHZHQS.js.map +0 -1
  405. package/dist/cli-bundle/chunks/chunk-RMMQ74TG.js.map +0 -7
  406. package/dist/cli-bundle/chunks/chunk-RVUALSJF.js.map +0 -7
  407. package/dist/cli-bundle/chunks/chunk-TP5Q5ZD3.js.map +0 -1
  408. package/dist/cli-bundle/chunks/chunk-UYUYDGIB.js.map +0 -1
  409. package/dist/cli-bundle/chunks/chunk-V3NOKJF2.js.map +0 -1
  410. package/dist/cli-bundle/chunks/chunk-VARHOHYV.js.map +0 -7
  411. package/dist/cli-bundle/chunks/chunk-YITK2PJ6.js.map +0 -7
  412. package/dist/cli-bundle/chunks/chunk-ZETXE4SE.js.map +0 -1
  413. package/dist/cli-bundle/chunks/close-E6ZZGCJY.js +0 -14
  414. package/dist/cli-bundle/chunks/close-many-BG5QQIDQ.js.map +0 -7
  415. package/dist/cli-bundle/chunks/close-many-LDRVEQY2.js.map +0 -1
  416. package/dist/cli-bundle/chunks/config-DMSU64QO.js +0 -1541
  417. package/dist/cli-bundle/chunks/config-DMSU64QO.js.map +0 -7
  418. package/dist/cli-bundle/chunks/config-QH2DICD6.js +0 -1531
  419. package/dist/cli-bundle/chunks/config-QH2DICD6.js.map +0 -1
  420. package/dist/cli-bundle/chunks/contracts-HN7ABKLP.js.map +0 -7
  421. package/dist/cli-bundle/chunks/contracts-W4FZVVD6.js.map +0 -1
  422. package/dist/cli-bundle/chunks/create-OH3BDGBB.js +0 -28
  423. package/dist/cli-bundle/chunks/get-A7MAOHCU.js.map +0 -7
  424. package/dist/cli-bundle/chunks/get-DSDEKJ3L.js.map +0 -1
  425. package/dist/cli-bundle/chunks/health-3IPFLKXB.js.map +0 -1
  426. package/dist/cli-bundle/chunks/health-GZXGBZ36.js.map +0 -7
  427. package/dist/cli-bundle/chunks/history-WSZHY3PN.js +0 -18
  428. package/dist/cli-bundle/chunks/history-compact-2WRZ2WK4.js.map +0 -7
  429. package/dist/cli-bundle/chunks/history-compact-HR7BB4LR.js.map +0 -1
  430. package/dist/cli-bundle/chunks/history-redact-MP6CH7U5.js +0 -19
  431. package/dist/cli-bundle/chunks/history-repair-LCMOS45X.js.map +0 -7
  432. package/dist/cli-bundle/chunks/history-repair-XA3LC4GA.js.map +0 -1
  433. package/dist/cli-bundle/chunks/init-PAX32BJA.js +0 -22
  434. package/dist/cli-bundle/chunks/next-BCERKDUR.js.map +0 -7
  435. package/dist/cli-bundle/chunks/next-FYTQF6HG.js.map +0 -1
  436. package/dist/cli-bundle/chunks/plan-4WXEQCTN.js.map +0 -7
  437. package/dist/cli-bundle/chunks/plan-RKZHQVXR.js.map +0 -1
  438. package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js.map +0 -1
  439. package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js.map +0 -7
  440. package/dist/cli-bundle/chunks/register-mutation-ENNDUAZG.js.map +0 -1
  441. package/dist/cli-bundle/chunks/register-mutation-KK7PHYYU.js.map +0 -7
  442. package/dist/cli-bundle/chunks/register-operations-C6OWLDSH.js.map +0 -1
  443. package/dist/cli-bundle/chunks/register-operations-HZ6XERQG.js.map +0 -7
  444. package/dist/cli-bundle/chunks/register-setup-P67EMBDJ.js.map +0 -1
  445. package/dist/cli-bundle/chunks/register-setup-ZKJ53RS7.js.map +0 -7
  446. package/dist/cli-bundle/chunks/restore-YALDGTQR.js +0 -17
  447. package/dist/cli-bundle/chunks/telemetry-BZUF6H7G.js.map +0 -1
  448. package/dist/cli-bundle/chunks/telemetry-GAHHQTOS.js.map +0 -7
  449. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js +0 -358
  450. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js.map +0 -1
  451. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js +0 -361
  452. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js.map +0 -7
  453. package/dist/cli-bundle/chunks/test-runs-PLRAZEFW.js.map +0 -7
  454. package/dist/cli-bundle/chunks/test-runs-UXIXPDKU.js.map +0 -1
  455. package/dist/cli-bundle/chunks/update-AMRSOIWP.js +0 -24
  456. package/dist/cli-bundle/chunks/validate-MTUVL5VC.js.map +0 -7
  457. package/dist/cli-bundle/chunks/validate-X5W76YJL.js.map +0 -1
  458. /package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js.map → activity-CUC4JY3U.js.map} +0 -0
  459. /package/dist/cli-bundle/chunks/{activity-AW6XVFH6.js.map → activity-WEIEMM73.js.map} +0 -0
  460. /package/dist/cli-bundle/chunks/{append-QCFJSDFL.js.map → append-H32VOR2Y.js.map} +0 -0
  461. /package/dist/cli-bundle/chunks/{append-LOVPGVPT.js.map → append-UBM632FK.js.map} +0 -0
  462. /package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js.map → chunk-2ASNV4DH.js.map} +0 -0
  463. /package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js.map → chunk-2CHRYUXL.js.map} +0 -0
  464. /package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js.map → chunk-3AZUFQK6.js.map} +0 -0
  465. /package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js.map → chunk-3LCUASYG.js.map} +0 -0
  466. /package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js.map → chunk-3Q2HBMTI.js.map} +0 -0
  467. /package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js.map → chunk-55XRYWEG.js.map} +0 -0
  468. /package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js.map → chunk-5GVTFFTC.js.map} +0 -0
  469. /package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js.map → chunk-A6VOGKBA.js.map} +0 -0
  470. /package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js.map → chunk-AIAIXG7I.js.map} +0 -0
  471. /package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js.map → chunk-AJEBCRIY.js.map} +0 -0
  472. /package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js.map → chunk-BTX5MIQF.js.map} +0 -0
  473. /package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js.map → chunk-BVZZN2LH.js.map} +0 -0
  474. /package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js.map → chunk-CYBDUHNO.js.map} +0 -0
  475. /package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js.map → chunk-CZPVDLD2.js.map} +0 -0
  476. /package/dist/cli-bundle/chunks/{chunk-JPECA746.js.map → chunk-EUKTMRN3.js.map} +0 -0
  477. /package/dist/cli-bundle/chunks/{chunk-2466X6E4.js.map → chunk-FFOQHGNH.js.map} +0 -0
  478. /package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js.map → chunk-GFMSLORL.js.map} +0 -0
  479. /package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js.map → chunk-GRRG3MCT.js.map} +0 -0
  480. /package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js.map → chunk-H4GRLYJS.js.map} +0 -0
  481. /package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js.map → chunk-HQTPRV4D.js.map} +0 -0
  482. /package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js.map → chunk-IEEJQCZ4.js.map} +0 -0
  483. /package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js.map → chunk-JMK5GCK2.js.map} +0 -0
  484. /package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js.map → chunk-K2VYLVX4.js.map} +0 -0
  485. /package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js.map → chunk-KCO2EAN5.js.map} +0 -0
  486. /package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js.map → chunk-KIYCOJ63.js.map} +0 -0
  487. /package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js.map → chunk-KLXF7NCC.js.map} +0 -0
  488. /package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js.map → chunk-KN3URLKS.js.map} +0 -0
  489. /package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js.map → chunk-LRKMWUUV.js.map} +0 -0
  490. /package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js.map → chunk-LTRAF2D7.js.map} +0 -0
  491. /package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js.map → chunk-MRD4T5LF.js.map} +0 -0
  492. /package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js.map → chunk-N2JSWVWG.js.map} +0 -0
  493. /package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js.map → chunk-N3QCJS4M.js.map} +0 -0
  494. /package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js.map → chunk-OTUJZKGI.js.map} +0 -0
  495. /package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js.map → chunk-QH3FSKRJ.js.map} +0 -0
  496. /package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js.map → chunk-S62UANU7.js.map} +0 -0
  497. /package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js.map → chunk-SYNKD3ZG.js.map} +0 -0
  498. /package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js.map → chunk-U2BEEM2X.js.map} +0 -0
  499. /package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js.map → chunk-UT73HUPC.js.map} +0 -0
  500. /package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js.map → chunk-UTSH5GWX.js.map} +0 -0
  501. /package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js.map → chunk-XWGEMNBR.js.map} +0 -0
  502. /package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js.map → chunk-Y4NRKBFW.js.map} +0 -0
  503. /package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js.map → chunk-YPKFV2JR.js.map} +0 -0
  504. /package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js.map → chunk-ZNHEYCDD.js.map} +0 -0
  505. /package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
  506. /package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js.map → claim-SENTPZBN.js.map} +0 -0
  507. /package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js.map → claim-Z7MEQCBT.js.map} +0 -0
  508. /package/dist/cli-bundle/chunks/{close-TQYAAFJP.js.map → close-424MX4CU.js.map} +0 -0
  509. /package/dist/cli-bundle/chunks/{close-E6ZZGCJY.js.map → close-YCWQQPDS.js.map} +0 -0
  510. /package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js.map → comments-4FGNTSNV.js.map} +0 -0
  511. /package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js.map → comments-7YS5MY5X.js.map} +0 -0
  512. /package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js.map → context-LHVKJSPJ.js.map} +0 -0
  513. /package/dist/cli-bundle/chunks/{context-B6275WPX.js.map → context-ZQY54JNS.js.map} +0 -0
  514. /package/dist/cli-bundle/chunks/{copy-DEM4DATS.js.map → copy-GYNQQPW2.js.map} +0 -0
  515. /package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js.map → copy-TLW7JTQT.js.map} +0 -0
  516. /package/dist/cli-bundle/chunks/{create-RLRJMRTM.js.map → create-VSKYSOCD.js.map} +0 -0
  517. /package/dist/cli-bundle/chunks/{create-OH3BDGBB.js.map → create-XTMAPS7I.js.map} +0 -0
  518. /package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js.map → delete-4W5JYCEG.js.map} +0 -0
  519. /package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js.map → delete-ANTOTI2I.js.map} +0 -0
  520. /package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js.map → deps-HPPE6MJN.js.map} +0 -0
  521. /package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js.map → deps-ZQZN54EZ.js.map} +0 -0
  522. /package/dist/cli-bundle/chunks/{docs-GYZNVS26.js.map → docs-RPOVFMP3.js.map} +0 -0
  523. /package/dist/cli-bundle/chunks/{docs-26S44RXU.js.map → docs-XJNYBJGE.js.map} +0 -0
  524. /package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js.map → eval-DM6JBZTS.js.map} +0 -0
  525. /package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js.map → eval-RFBI5FGS.js.map} +0 -0
  526. /package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js.map → extension-B3YY4WY5.js.map} +0 -0
  527. /package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js.map → extension-TTSEFQTS.js.map} +0 -0
  528. /package/dist/cli-bundle/chunks/{files-NQHEXUZD.js.map → files-5D65CHGE.js.map} +0 -0
  529. /package/dist/cli-bundle/chunks/{files-MBNICQFM.js.map → files-GPIG77EN.js.map} +0 -0
  530. /package/dist/cli-bundle/chunks/{focus-XZW5423D.js.map → focus-C3PEJV2C.js.map} +0 -0
  531. /package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js.map → focus-ZHN7WIGX.js.map} +0 -0
  532. /package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js.map → gc-D4JQ6OWN.js.map} +0 -0
  533. /package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js.map → gc-VZIXDL32.js.map} +0 -0
  534. /package/dist/cli-bundle/chunks/{history-WSZHY3PN.js.map → history-DD7L7BNL.js.map} +0 -0
  535. /package/dist/cli-bundle/chunks/{history-NERDJNUB.js.map → history-IL7XCEX2.js.map} +0 -0
  536. /package/dist/cli-bundle/chunks/{history-redact-MP6CH7U5.js.map → history-redact-IX4YEWMY.js.map} +0 -0
  537. /package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js.map → history-redact-VYCWQFK7.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{init-64XDLQJB.js.map → init-F27NHENZ.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{init-PAX32BJA.js.map → init-HHVQQP6C.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js.map → learnings-HJVDQIGY.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js.map → learnings-XSFSUUWK.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{list-G5Y65VF6.js.map → list-HPMEKCAA.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{list-DNBJVO3E.js.map → list-VMPWTURB.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js.map → notes-GDZIKGR6.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js.map → notes-WDDBPC4D.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{profile-QLER5ENE.js.map → profile-CCOKZ2IQ.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{profile-4OMM32CD.js.map → profile-HUCENIEQ.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js.map → restore-4CBWUMCX.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{restore-YALDGTQR.js.map → restore-5UEAGG3W.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{schema-73HR2OJW.js.map → schema-TDGK6N3I.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js.map → schema-UE5KKAUX.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{search-KILGT37L.js.map → search-FP7MEU4S.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{search-AXPXKZER.js.map → search-K4CFLQ5S.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js.map → stats-NJJCALEZ.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js.map → stats-XT6QRKQY.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{test-ACD52Z3S.js.map → test-UFSJ5YIO.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{test-PWDIZ255.js.map → test-YCDAUBWF.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{update-AMRSOIWP.js.map → update-MTCFES6X.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{update-KFX2SIAC.js.map → update-Y5WQVT5O.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js.map → upgrade-DTAHZ236.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js.map → upgrade-JUDU7YL4.js.map} +0 -0
@@ -1,8 +1,8 @@
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]="7af30e70-6b7d-5750-9dab-2031781c0d9d")}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]="0642e966-0611-51ff-ad2f-1a0d7416c80b")}catch(e){}}();
3
3
  import {
4
4
  extractReferencedPmItemIdsFromCommand
5
- } from "./chunk-3XZCOZ5J.js";
5
+ } from "./chunk-Q6NXOHS6.js";
6
6
  import {
7
7
  buildRemediationCommands
8
8
  } from "./chunk-R2EMWY7Q.js";
@@ -11,30 +11,30 @@ import {
11
11
  } from "./chunk-IBMFIKVS.js";
12
12
  import {
13
13
  scanHistoryDrift
14
- } from "./chunk-OTUHB4HS.js";
15
- import "./chunk-EJUDVUYZ.js";
16
- import "./chunk-ZRP4VG5U.js";
17
- import "./chunk-SLMUGTK3.js";
18
- import "./chunk-V3NOKJF2.js";
19
- import "./chunk-NU2UEROZ.js";
14
+ } from "./chunk-TTHCEV5Q.js";
15
+ import "./chunk-KCO2EAN5.js";
16
+ import "./chunk-KLXF7NCC.js";
17
+ import "./chunk-2ASNV4DH.js";
18
+ import "./chunk-6YCYF2AI.js";
19
+ import "./chunk-3AZUFQK6.js";
20
20
  import "./chunk-P4SESZGT.js";
21
- import "./chunk-2D4HATP2.js";
22
- import "./chunk-MAUKX7JC.js";
23
- import "./chunk-6AQZPVHQ.js";
24
- import "./chunk-4A3BJ675.js";
25
- import "./chunk-HXTQJXWT.js";
21
+ import "./chunk-YLZZ6T54.js";
22
+ import "./chunk-ZNT7KEWE.js";
23
+ import "./chunk-KIYCOJ63.js";
24
+ import "./chunk-OTUJZKGI.js";
25
+ import "./chunk-5GVTFFTC.js";
26
26
  import {
27
27
  listAllFrontMatterWithBody
28
- } from "./chunk-JSU5P7VS.js";
28
+ } from "./chunk-NRZS637N.js";
29
29
  import {
30
30
  CURRENT_ITEM_FORMAT_VERSION,
31
31
  effectiveItemFormatVersion,
32
32
  normalizeStatusInput,
33
33
  scanItemFormatVersions
34
- } from "./chunk-QCWF6IYD.js";
34
+ } from "./chunk-KN3URLKS.js";
35
35
  import {
36
36
  nowIso
37
- } from "./chunk-AXIDKKAT.js";
37
+ } from "./chunk-K2VYLVX4.js";
38
38
  import {
39
39
  DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS,
40
40
  DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS,
@@ -50,7 +50,7 @@ import {
50
50
  resolvePmRoot,
51
51
  resolveRuntimeStatusRegistry,
52
52
  toNonEmptyStringOrUndefined
53
- } from "./chunk-7R4QEMZZ.js";
53
+ } from "./chunk-I66WE2HE.js";
54
54
 
55
55
  // dist/cli/commands/validate.js
56
56
  import fs from "node:fs/promises";
@@ -912,61 +912,59 @@ function summarizeDuplicateIssueCodes(duplicates, verboseDiagnostics) {
912
912
  warnings: [`${DUPLICATE_ISSUE_CODE_WARNING_TOKEN}:${duplicates.length}`]
913
913
  };
914
914
  }
915
- function buildMetadataCheck(items, metadataPolicy, statusRegistry, verboseDiagnostics) {
916
- const missingByField = Object.fromEntries(SUPPORTED_METADATA_REQUIRED_FIELDS.map((field) => [field, []]));
917
- const itemsById = new Map(items.map((item) => [item.id, item]));
918
- const enforcePlanningFieldsOnTerminal = metadataPolicy.profile === "strict";
915
+ function initializeMissingMetadataByField() {
916
+ return Object.fromEntries(SUPPORTED_METADATA_REQUIRED_FIELDS.map((field) => [field, []]));
917
+ }
918
+ function collectMissingMetadataByField(items, statusRegistry, enforcePlanningFieldsOnTerminal) {
919
+ const missingByField = initializeMissingMetadataByField();
919
920
  for (const item of items) {
920
921
  for (const field of SUPPORTED_METADATA_REQUIRED_FIELDS) {
921
- if (!isMetadataFieldMissing(item, field, statusRegistry, enforcePlanningFieldsOnTerminal)) {
922
- continue;
922
+ if (isMetadataFieldMissing(item, field, statusRegistry, enforcePlanningFieldsOnTerminal)) {
923
+ missingByField[field].push(item.id);
923
924
  }
924
- missingByField[field].push(item.id);
925
925
  }
926
926
  }
927
+ return missingByField;
928
+ }
929
+ function buildMetadataWarningTokens(metadataPolicy, missingByField, duplicateWarnings) {
927
930
  const warningTokens = [...metadataPolicy.warnings];
928
931
  for (const field of metadataPolicy.required_fields) {
929
932
  const missingItems = missingByField[field];
930
- if (missingItems.length === 0) {
931
- continue;
933
+ if (missingItems.length > 0) {
934
+ warningTokens.push(`${METADATA_WARNING_TOKEN_BY_FIELD[field]}:${missingItems.length}`);
932
935
  }
933
- warningTokens.push(`${METADATA_WARNING_TOKEN_BY_FIELD[field]}:${missingItems.length}`);
934
936
  }
935
- const duplicateIssueCodes = findDuplicateIssueCodes(items);
936
- const duplicateIssueCodeSummary = summarizeDuplicateIssueCodes(duplicateIssueCodes, verboseDiagnostics);
937
- warningTokens.push(...duplicateIssueCodeSummary.warnings);
937
+ warningTokens.push(...duplicateWarnings);
938
+ return warningTokens;
939
+ }
940
+ function buildMetadataCounts(metadataPolicy, missingByField) {
938
941
  const counts = {};
939
942
  for (const field of metadataPolicy.required_fields) {
940
- const value = missingByField[field]?.length ?? 0;
943
+ const missing = missingByField[field];
944
+ const value = missing ? missing.length : 0;
941
945
  const countKey = METADATA_COUNT_KEY_BY_FIELD[field];
942
946
  if (value > 0 && countKey) {
943
947
  counts[countKey] = value;
944
948
  }
945
949
  }
946
- const missingFieldOccurrences = [];
950
+ return counts;
951
+ }
952
+ function buildMissingFieldOccurrences(metadataPolicy, missingByField, itemsById) {
953
+ const occurrences = [];
947
954
  for (const field of metadataPolicy.required_fields) {
948
- for (const itemId of missingByField[field] ?? []) {
955
+ const missing = missingByField[field];
956
+ if (!missing) {
957
+ continue;
958
+ }
959
+ for (const itemId of missing) {
949
960
  const itemType = itemsById.get(itemId)?.type;
950
- missingFieldOccurrences.push({ item_type: typeof itemType === "string" && itemType.length > 0 ? itemType : "Unknown", field });
961
+ const normalizedItemType = typeof itemType === "string" && itemType.length > 0 ? itemType : "Unknown";
962
+ occurrences.push({ item_type: normalizedItemType, field });
951
963
  }
952
964
  }
953
- const missingByType = buildMissingByTypeCounts(missingFieldOccurrences);
954
- const details = {
955
- checked_items: items.length,
956
- metadata_profile: metadataPolicy.profile,
957
- metadata_profile_source: metadataPolicy.profile_source,
958
- metadata_profile_fallback_to_core: metadataPolicy.fallback_to_core,
959
- required_fields: [...metadataPolicy.required_fields],
960
- supported_required_fields: [...SUPPORTED_METADATA_REQUIRED_FIELDS],
961
- counts,
962
- missing_by_type: missingByType,
963
- duplicate_issue_codes_count: duplicateIssueCodes.length,
964
- duplicate_issue_codes: duplicateIssueCodeSummary.rows,
965
- duplicate_issue_codes_truncated: duplicateIssueCodeSummary.truncated
966
- };
967
- if (metadataPolicy.configured_custom_fields.length > 0) {
968
- details.configured_custom_required_fields = [...metadataPolicy.configured_custom_fields];
969
- }
965
+ return occurrences;
966
+ }
967
+ function attachMissingMetadataItemIds(details, metadataPolicy, missingByField, verboseDiagnostics) {
970
968
  for (const field of metadataPolicy.required_fields) {
971
969
  const missing = missingByField[field];
972
970
  if (!missing || missing.length === 0) {
@@ -981,14 +979,62 @@ function buildMetadataCheck(items, metadataPolicy, statusRegistry, verboseDiagno
981
979
  details[idsKey] = summarized.values;
982
980
  details[truncatedKey] = summarized.truncated;
983
981
  }
984
- const closeReasonBackfillRows = metadataPolicy.required_fields.includes("close_reason") ? (missingByField.close_reason ?? []).map((itemId) => ({
982
+ }
983
+ function buildCloseReasonBackfillRows(metadataPolicy, missingByField, itemsById) {
984
+ if (!metadataPolicy.required_fields.includes("close_reason")) {
985
+ return [];
986
+ }
987
+ const missing = missingByField.close_reason;
988
+ if (!missing) {
989
+ return [];
990
+ }
991
+ return missing.map((itemId) => ({
985
992
  id: itemId,
986
993
  resolution: toNonEmptyStringOrUndefined(itemsById.get(itemId)?.resolution)
987
- })) : [];
988
- const estimateBackfillRows = metadataPolicy.required_fields.includes("estimated_minutes") ? (missingByField.estimated_minutes ?? []).map((itemId) => ({
994
+ }));
995
+ }
996
+ function buildEstimateBackfillRows(metadataPolicy, missingByField, itemsById) {
997
+ if (!metadataPolicy.required_fields.includes("estimated_minutes")) {
998
+ return [];
999
+ }
1000
+ const missing = missingByField.estimated_minutes;
1001
+ if (!missing) {
1002
+ return [];
1003
+ }
1004
+ return missing.map((itemId) => ({
989
1005
  id: itemId,
990
1006
  type: toNonEmptyStringOrUndefined(itemsById.get(itemId)?.type)
991
- })) : [];
1007
+ }));
1008
+ }
1009
+ function buildMetadataCheck(items, metadataPolicy, statusRegistry, verboseDiagnostics) {
1010
+ const itemsById = new Map(items.map((item) => [item.id, item]));
1011
+ const enforcePlanningFieldsOnTerminal = metadataPolicy.profile === "strict";
1012
+ const missingByField = collectMissingMetadataByField(items, statusRegistry, enforcePlanningFieldsOnTerminal);
1013
+ const duplicateIssueCodes = findDuplicateIssueCodes(items);
1014
+ const duplicateIssueCodeSummary = summarizeDuplicateIssueCodes(duplicateIssueCodes, verboseDiagnostics);
1015
+ const warningTokens = buildMetadataWarningTokens(metadataPolicy, missingByField, duplicateIssueCodeSummary.warnings);
1016
+ const counts = buildMetadataCounts(metadataPolicy, missingByField);
1017
+ const missingFieldOccurrences = buildMissingFieldOccurrences(metadataPolicy, missingByField, itemsById);
1018
+ const missingByType = buildMissingByTypeCounts(missingFieldOccurrences);
1019
+ const details = {
1020
+ checked_items: items.length,
1021
+ metadata_profile: metadataPolicy.profile,
1022
+ metadata_profile_source: metadataPolicy.profile_source,
1023
+ metadata_profile_fallback_to_core: metadataPolicy.fallback_to_core,
1024
+ required_fields: [...metadataPolicy.required_fields],
1025
+ supported_required_fields: [...SUPPORTED_METADATA_REQUIRED_FIELDS],
1026
+ counts,
1027
+ missing_by_type: missingByType,
1028
+ duplicate_issue_codes_count: duplicateIssueCodes.length,
1029
+ duplicate_issue_codes: duplicateIssueCodeSummary.rows,
1030
+ duplicate_issue_codes_truncated: duplicateIssueCodeSummary.truncated
1031
+ };
1032
+ if (metadataPolicy.configured_custom_fields.length > 0) {
1033
+ details.configured_custom_required_fields = [...metadataPolicy.configured_custom_fields];
1034
+ }
1035
+ attachMissingMetadataItemIds(details, metadataPolicy, missingByField, verboseDiagnostics);
1036
+ const closeReasonBackfillRows = buildCloseReasonBackfillRows(metadataPolicy, missingByField, itemsById);
1037
+ const estimateBackfillRows = buildEstimateBackfillRows(metadataPolicy, missingByField, itemsById);
992
1038
  return {
993
1039
  check: {
994
1040
  name: "metadata",
@@ -1229,6 +1275,24 @@ function sharedDirectoryPrefixLength(left, right) {
1229
1275
  }
1230
1276
  return count;
1231
1277
  }
1278
+ function scoreOrphanOwnerCandidate(pathValue, linkedPath) {
1279
+ const linkedDir = directoryOf(linkedPath);
1280
+ const orphanDir = directoryOf(pathValue);
1281
+ const directoryPrefix = linkedPath.endsWith("/") ? linkedPath : `${linkedPath}/`;
1282
+ const isDirectoryPrefix = pathValue.startsWith(directoryPrefix);
1283
+ const sameDirectory = linkedDir.length > 0 && linkedDir === orphanDir;
1284
+ const sharedPrefixLength = sharedDirectoryPrefixLength(pathValue, linkedPath);
1285
+ if (!isDirectoryPrefix && !sameDirectory && sharedPrefixLength === 0) {
1286
+ return null;
1287
+ }
1288
+ if (isDirectoryPrefix) {
1289
+ return { score: linkedPath.length + 1e3, confidence: "path_prefix" };
1290
+ }
1291
+ return sameDirectory ? { score: sharedPrefixLength + 500, confidence: "same_directory" } : { score: sharedPrefixLength, confidence: "shared_directory" };
1292
+ }
1293
+ function shouldReplaceOrphanOwnerCandidate(best, item, score) {
1294
+ return best === void 0 || score > best.score || score === best.score && item.id.localeCompare(best.item.id) < 0;
1295
+ }
1232
1296
  function findOrphanOwnerCandidate(pathValue, classification, items) {
1233
1297
  const linkKind = classification === "docs_unowned" ? "docs" : "files";
1234
1298
  let best;
@@ -1242,21 +1306,15 @@ function findOrphanOwnerCandidate(pathValue, classification, items) {
1242
1306
  if (linkedPath.length === 0 || linkedPath === pathValue) {
1243
1307
  continue;
1244
1308
  }
1245
- const linkedDir = directoryOf(linkedPath);
1246
- const orphanDir = directoryOf(pathValue);
1247
- const directoryPrefix = linkedPath.endsWith("/") ? linkedPath : `${linkedPath}/`;
1248
- const isDirectoryPrefix = pathValue.startsWith(directoryPrefix);
1249
- const sameDirectory = linkedDir.length > 0 && linkedDir === orphanDir;
1250
- const sharedPrefixLength = sharedDirectoryPrefixLength(pathValue, linkedPath);
1251
- if (!isDirectoryPrefix && !sameDirectory && sharedPrefixLength === 0) {
1309
+ const scored = scoreOrphanOwnerCandidate(pathValue, linkedPath);
1310
+ if (scored === null) {
1252
1311
  continue;
1253
1312
  }
1254
- const score = isDirectoryPrefix ? linkedPath.length + 1e3 : sameDirectory ? sharedPrefixLength + 500 : sharedPrefixLength;
1255
- if (best === void 0 || score > best.score || score === best.score && item.id.localeCompare(best.item.id) < 0) {
1313
+ if (shouldReplaceOrphanOwnerCandidate(best, item, scored.score)) {
1256
1314
  best = {
1257
1315
  item,
1258
- score,
1259
- confidence: isDirectoryPrefix ? "path_prefix" : sameDirectory ? "same_directory" : "shared_directory"
1316
+ score: scored.score,
1317
+ confidence: scored.confidence
1260
1318
  };
1261
1319
  }
1262
1320
  }
@@ -1289,74 +1347,74 @@ function buildOrphanedPathRows(orphanedFiles, items) {
1289
1347
  function summarizeOrphanedPathRows(rows) {
1290
1348
  return rows.map((row) => `${row.path}:${row.classification} owner_candidate=${row.owner_candidate?.id ?? "unowned"} hint=${JSON.stringify(row.remediation_hint)}`);
1291
1349
  }
1292
- function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverity, parentCycleSeverity, statusRegistry, lifecyclePatternPolicy, verboseDiagnostics, idPrefix = "pm") {
1350
+ function closureLikeFieldsForItem(item, lifecyclePatternPolicy) {
1351
+ return Object.entries(lifecyclePatternPolicy.closure_like_metadata_field_patterns).filter(([field, patterns]) => {
1352
+ const value = toMeaningfulString(item[field]);
1353
+ return value ? patterns.some((pattern) => value.toLowerCase().includes(pattern)) : false;
1354
+ }).map(([field]) => field).sort((left, right) => left.localeCompare(right));
1355
+ }
1356
+ function buildTerminalParentFixRow(item, parent, itemsById, canonicalIdByLowercase, statusRegistry) {
1357
+ const grandparentId = toMeaningfulString(parent.parent);
1358
+ const grandparent = grandparentId ? itemsById.get(canonicalIdByLowercase.get(grandparentId.toLowerCase()) ?? grandparentId) : void 0;
1359
+ return {
1360
+ id: item.id,
1361
+ parent_id: parent.id,
1362
+ grandparent_id: grandparent?.id,
1363
+ grandparent_active: grandparent !== void 0 && !isTerminalStatus(grandparent.status, statusRegistry)
1364
+ };
1365
+ }
1366
+ function staleBlockerReasonsForItem(item, blockedStatuses, statusRegistry, lifecyclePatternPolicy) {
1367
+ const blockedBy = toMeaningfulString(item.blocked_by);
1368
+ const blockedReason = toMeaningfulString(item.blocked_reason);
1369
+ const blockedReasonNormalized = blockedReason?.toLowerCase();
1370
+ const normalizedStatus = normalizeStatusForRegistry(item.status, statusRegistry);
1371
+ const reasons = [];
1372
+ if (!blockedStatuses.has(normalizedStatus)) {
1373
+ if (blockedBy) {
1374
+ reasons.push("non_blocked_status_has_blocked_by");
1375
+ }
1376
+ if (blockedReason) {
1377
+ reasons.push("non_blocked_status_has_blocked_reason");
1378
+ }
1379
+ return reasons;
1380
+ }
1381
+ if (!blockedBy && !blockedReason) {
1382
+ reasons.push("blocked_status_missing_blocker_context");
1383
+ }
1384
+ if (blockedReasonNormalized?.includes("no active blocker")) {
1385
+ reasons.push("blocked_status_reason_reports_no_active_blocker");
1386
+ }
1387
+ if (blockedReasonNormalized && lifecyclePatternPolicy.stale_blocker_reason_patterns.some((pattern) => blockedReasonNormalized.includes(pattern))) {
1388
+ reasons.push("blocked_status_reason_matches_stale_pattern");
1389
+ }
1390
+ return reasons;
1391
+ }
1392
+ function collectLifecycleScanRows(items, includeStaleBlockers, statusRegistry, lifecyclePatternPolicy) {
1293
1393
  const itemsById = new Map(items.map((item) => [item.id, item]));
1394
+ const canonicalIdByLowercase = new Map(items.map((item) => [item.id.toLowerCase(), item.id]));
1294
1395
  const blockedStatuses = statusRegistry.blocked_statuses.size > 0 ? statusRegistry.blocked_statuses : /* @__PURE__ */ new Set(["blocked"]);
1295
- const activeItems = items.filter((item) => !isTerminalStatus(item.status, statusRegistry));
1296
- const closureLikeRows = [];
1297
- const terminalParentRows = [];
1298
- const terminalParentFixRows = [];
1299
- const staleBlockerRows = [];
1300
- for (const item of activeItems) {
1301
- const closureLikeFields = Object.entries(lifecyclePatternPolicy.closure_like_metadata_field_patterns).filter(([field, patterns]) => {
1302
- const value = toMeaningfulString(item[field]);
1303
- if (!value) {
1304
- return false;
1305
- }
1306
- const normalized = value.toLowerCase();
1307
- return patterns.some((pattern) => normalized.includes(pattern));
1308
- }).map(([field]) => field).sort((left, right) => left.localeCompare(right));
1396
+ const rows = {
1397
+ activeItems: items.filter((item) => !isTerminalStatus(item.status, statusRegistry)),
1398
+ closureLikeRows: [],
1399
+ terminalParentRows: [],
1400
+ terminalParentFixRows: [],
1401
+ staleBlockerRows: []
1402
+ };
1403
+ for (const item of rows.activeItems) {
1404
+ const closureLikeFields = closureLikeFieldsForItem(item, lifecyclePatternPolicy);
1309
1405
  if (closureLikeFields.length > 0) {
1310
- closureLikeRows.push({
1311
- id: item.id,
1312
- fields: closureLikeFields
1313
- });
1406
+ rows.closureLikeRows.push({ id: item.id, fields: closureLikeFields });
1314
1407
  }
1315
1408
  const parentId = toMeaningfulString(item.parent);
1316
- if (parentId) {
1317
- const parent = itemsById.get(parentId);
1318
- if (parent && isTerminalStatus(parent.status, statusRegistry)) {
1319
- terminalParentRows.push({
1320
- id: item.id,
1321
- parent_id: parent.id,
1322
- parent_status: parent.status
1323
- });
1324
- const grandparentId = toMeaningfulString(parent.parent);
1325
- const grandparent = grandparentId ? itemsById.get(grandparentId) : void 0;
1326
- terminalParentFixRows.push({
1327
- id: item.id,
1328
- parent_id: parent.id,
1329
- grandparent_id: grandparent?.id,
1330
- grandparent_active: grandparent !== void 0 && !isTerminalStatus(grandparent.status, statusRegistry)
1331
- });
1332
- }
1409
+ const parent = parentId ? itemsById.get(canonicalIdByLowercase.get(parentId.toLowerCase()) ?? parentId) : void 0;
1410
+ if (parent && isTerminalStatus(parent.status, statusRegistry)) {
1411
+ rows.terminalParentRows.push({ id: item.id, parent_id: parent.id, parent_status: parent.status });
1412
+ rows.terminalParentFixRows.push(buildTerminalParentFixRow(item, parent, itemsById, canonicalIdByLowercase, statusRegistry));
1333
1413
  }
1334
1414
  if (includeStaleBlockers) {
1335
- const blockedBy = toMeaningfulString(item.blocked_by);
1336
- const blockedReason = toMeaningfulString(item.blocked_reason);
1337
- const blockedReasonNormalized = blockedReason?.toLowerCase();
1338
- const reasons = [];
1339
- const normalizedStatus = normalizeStatusForRegistry(item.status, statusRegistry);
1340
- if (!blockedStatuses.has(normalizedStatus)) {
1341
- if (blockedBy) {
1342
- reasons.push("non_blocked_status_has_blocked_by");
1343
- }
1344
- if (blockedReason) {
1345
- reasons.push("non_blocked_status_has_blocked_reason");
1346
- }
1347
- } else {
1348
- if (!blockedBy && !blockedReason) {
1349
- reasons.push("blocked_status_missing_blocker_context");
1350
- }
1351
- if (blockedReasonNormalized?.includes("no active blocker")) {
1352
- reasons.push("blocked_status_reason_reports_no_active_blocker");
1353
- }
1354
- if (blockedReasonNormalized && lifecyclePatternPolicy.stale_blocker_reason_patterns.some((pattern) => blockedReasonNormalized.includes(pattern))) {
1355
- reasons.push("blocked_status_reason_matches_stale_pattern");
1356
- }
1357
- }
1415
+ const reasons = staleBlockerReasonsForItem(item, blockedStatuses, statusRegistry, lifecyclePatternPolicy);
1358
1416
  if (reasons.length > 0) {
1359
- staleBlockerRows.push({
1417
+ rows.staleBlockerRows.push({
1360
1418
  id: item.id,
1361
1419
  status: item.status,
1362
1420
  reasons: [...new Set(reasons)].sort((left, right) => left.localeCompare(right))
@@ -1364,32 +1422,117 @@ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverit
1364
1422
  }
1365
1423
  }
1366
1424
  }
1367
- closureLikeRows.sort((left, right) => left.id.localeCompare(right.id));
1368
- terminalParentRows.sort((left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id));
1369
- terminalParentFixRows.sort((left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id));
1370
- staleBlockerRows.sort((left, right) => left.id.localeCompare(right.id));
1371
- const dependencyCycleDiagnostics = detectLifecycleDependencyCycles(activeItems, idPrefix);
1372
- const parentCycleDiagnostics = detectLifecycleParentCycles(items);
1425
+ return rows;
1426
+ }
1427
+ function sortLifecycleScanRows(rows) {
1428
+ rows.closureLikeRows.sort((left, right) => left.id.localeCompare(right.id));
1429
+ rows.terminalParentRows.sort((left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id));
1430
+ rows.terminalParentFixRows.sort((left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id));
1431
+ rows.staleBlockerRows.sort((left, right) => left.id.localeCompare(right.id));
1432
+ }
1433
+ function lifecycleCycleWarningToken(prefix, severity, count) {
1434
+ if (count <= 0 || severity === "off") {
1435
+ return null;
1436
+ }
1437
+ return `${severity === "error" ? `${prefix}_error` : prefix}:${count}`;
1438
+ }
1439
+ function buildLifecycleWarnings(rows, includeStaleBlockers, dependencyCycleSeverity, parentCycleSeverity, dependencyCycleCount, parentCycleCount) {
1373
1440
  const warnings = [];
1374
- if (closureLikeRows.length > 0) {
1375
- warnings.push(`validate_lifecycle_active_closure_like_metadata:${closureLikeRows.length}`);
1441
+ if (rows.closureLikeRows.length > 0) {
1442
+ warnings.push(`validate_lifecycle_active_closure_like_metadata:${rows.closureLikeRows.length}`);
1376
1443
  }
1377
- if (terminalParentRows.length > 0) {
1378
- warnings.push(`validate_lifecycle_active_terminal_parent:${terminalParentRows.length}`);
1444
+ if (rows.terminalParentRows.length > 0) {
1445
+ warnings.push(`validate_lifecycle_active_terminal_parent:${rows.terminalParentRows.length}`);
1379
1446
  }
1380
- if (includeStaleBlockers && staleBlockerRows.length > 0) {
1381
- warnings.push(`validate_lifecycle_stale_blockers:${staleBlockerRows.length}`);
1447
+ if (includeStaleBlockers && rows.staleBlockerRows.length > 0) {
1448
+ warnings.push(`validate_lifecycle_stale_blockers:${rows.staleBlockerRows.length}`);
1382
1449
  }
1383
- if (dependencyCycleDiagnostics.cycle_count > 0 && dependencyCycleSeverity !== "off") {
1384
- warnings.push(`${dependencyCycleSeverity === "error" ? "validate_lifecycle_dependency_cycles_error" : "validate_lifecycle_dependency_cycles"}:${dependencyCycleDiagnostics.cycle_count}`);
1450
+ const dependencyWarning = lifecycleCycleWarningToken("validate_lifecycle_dependency_cycles", dependencyCycleSeverity, dependencyCycleCount);
1451
+ const parentWarning = lifecycleCycleWarningToken("validate_hierarchy_parent_cycle", parentCycleSeverity, parentCycleCount);
1452
+ return [...warnings, ...dependencyWarning ? [dependencyWarning] : [], ...parentWarning ? [parentWarning] : []];
1453
+ }
1454
+ async function linkedArtifactIsMissing(workspaceRoot, artifactPath) {
1455
+ const absolutePath = path.isAbsolute(artifactPath) ? artifactPath : path.resolve(workspaceRoot, artifactPath);
1456
+ try {
1457
+ const stats = await fs.stat(absolutePath);
1458
+ return !stats.isFile() && !stats.isDirectory();
1459
+ } catch (error) {
1460
+ const code = typeof error === "object" && error !== null && "code" in error ? error.code : void 0;
1461
+ return code === "ENOENT" || code === "ENOTDIR";
1385
1462
  }
1386
- if (parentCycleDiagnostics.cycle_count > 0 && parentCycleSeverity !== "off") {
1387
- warnings.push(`${parentCycleSeverity === "error" ? "validate_hierarchy_parent_cycle_error" : "validate_hierarchy_parent_cycle"}:${parentCycleDiagnostics.cycle_count}`);
1463
+ }
1464
+ async function collectLinkedPathScanState(items, workspaceRoot) {
1465
+ const state = {
1466
+ linkedProjectPaths: /* @__PURE__ */ new Set(),
1467
+ remoteLinkedPaths: /* @__PURE__ */ new Set(),
1468
+ missingLinkedPaths: [],
1469
+ staleLinkRows: []
1470
+ };
1471
+ for (const item of items) {
1472
+ const linkedArtifactGroups = [
1473
+ { link_kind: "files", artifacts: item.files ?? [] },
1474
+ { link_kind: "docs", artifacts: item.docs ?? [] }
1475
+ ];
1476
+ for (const group of linkedArtifactGroups) {
1477
+ for (const artifact of group.artifacts) {
1478
+ if (artifact.scope !== "project") {
1479
+ continue;
1480
+ }
1481
+ if (isRemoteLinkedArtifactReference(artifact.path)) {
1482
+ state.remoteLinkedPaths.add(artifact.path.trim());
1483
+ continue;
1484
+ }
1485
+ const normalizedPath = normalizeRelativePath(artifact.path);
1486
+ if (normalizedPath.length === 0) {
1487
+ continue;
1488
+ }
1489
+ state.linkedProjectPaths.add(normalizedPath);
1490
+ if (await linkedArtifactIsMissing(workspaceRoot, artifact.path)) {
1491
+ state.missingLinkedPaths.push(normalizedPath);
1492
+ state.staleLinkRows.push({ item_id: item.id, path: normalizedPath, link_kind: group.link_kind });
1493
+ }
1494
+ }
1495
+ }
1496
+ }
1497
+ return state;
1498
+ }
1499
+ function partitionFileCandidates(fileCandidates, pmRoot, workspaceRoot, fileScanMode, includePmInternals, verboseFileLists) {
1500
+ const strictTrackedAllMode = fileScanMode === "tracked-all-strict";
1501
+ const strictModeForcesPmInternals = strictTrackedAllMode && !includePmInternals;
1502
+ const includePmInternalsEffective = includePmInternals || strictTrackedAllMode;
1503
+ const pmInternalCandidatePrefixes = includePmInternalsEffective ? [] : resolvePmInternalCandidatePrefixes(pmRoot, workspaceRoot);
1504
+ const excludedPmInternalPaths = pmInternalCandidatePrefixes.length === 0 ? [] : fileCandidates.candidateFiles.filter((candidate) => hasPathPrefix(candidate, pmInternalCandidatePrefixes));
1505
+ const candidateFiles = pmInternalCandidatePrefixes.length === 0 ? fileCandidates.candidateFiles : fileCandidates.candidateFiles.filter((candidate) => !hasPathPrefix(candidate, pmInternalCandidatePrefixes));
1506
+ const excludedByReason = {};
1507
+ if (excludedPmInternalPaths.length > 0) {
1508
+ const summarizedPmInternalPaths = summarizeFileList(excludedPmInternalPaths, verboseFileLists);
1509
+ excludedByReason.pm_internals = {
1510
+ count: excludedPmInternalPaths.length,
1511
+ paths: summarizedPmInternalPaths.values,
1512
+ paths_truncated: summarizedPmInternalPaths.truncated,
1513
+ paths_total: summarizedPmInternalPaths.total
1514
+ };
1388
1515
  }
1516
+ return {
1517
+ strictTrackedAllMode,
1518
+ strictModeForcesPmInternals,
1519
+ includePmInternalsEffective,
1520
+ pmInternalCandidatePrefixes,
1521
+ excludedPmInternalPaths,
1522
+ candidateFiles,
1523
+ excludedByReason
1524
+ };
1525
+ }
1526
+ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverity, parentCycleSeverity, statusRegistry, lifecyclePatternPolicy, verboseDiagnostics, idPrefix = "pm") {
1527
+ const rows = collectLifecycleScanRows(items, includeStaleBlockers, statusRegistry, lifecyclePatternPolicy);
1528
+ sortLifecycleScanRows(rows);
1529
+ const dependencyCycleDiagnostics = detectLifecycleDependencyCycles(rows.activeItems, idPrefix);
1530
+ const parentCycleDiagnostics = detectLifecycleParentCycles(items);
1531
+ const warnings = buildLifecycleWarnings(rows, includeStaleBlockers, dependencyCycleSeverity, parentCycleSeverity, dependencyCycleDiagnostics.cycle_count, parentCycleDiagnostics.cycle_count);
1389
1532
  const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;
1390
- const summarizedClosureLikeRows = summarizeList(closureLikeRows.map((row) => `${row.id}:${row.fields.join(",")}`), diagnosticLimit);
1391
- const summarizedTerminalParentRows = summarizeList(terminalParentRows.map((row) => `${row.id}:${row.parent_id}:${row.parent_status}`), diagnosticLimit);
1392
- const summarizedStaleBlockerRows = summarizeList(staleBlockerRows.map((row) => `${row.id}:${row.status}:${row.reasons.join(",")}`), diagnosticLimit);
1533
+ const summarizedClosureLikeRows = summarizeList(rows.closureLikeRows.map((row) => `${row.id}:${row.fields.join(",")}`), diagnosticLimit);
1534
+ const summarizedTerminalParentRows = summarizeList(rows.terminalParentRows.map((row) => `${row.id}:${row.parent_id}:${row.parent_status}`), diagnosticLimit);
1535
+ const summarizedStaleBlockerRows = summarizeList(rows.staleBlockerRows.map((row) => `${row.id}:${row.status}:${row.reasons.join(",")}`), diagnosticLimit);
1393
1536
  const summarizedDependencyCycleItemIds = summarizeList(dependencyCycleDiagnostics.cycle_item_ids, diagnosticLimit);
1394
1537
  const summarizedDependencyCycleSamplePaths = summarizeList(dependencyCycleDiagnostics.cycle_sample_paths, diagnosticLimit);
1395
1538
  const summarizedParentCycleItemIds = summarizeList(parentCycleDiagnostics.cycle_item_ids, diagnosticLimit);
@@ -1400,15 +1543,15 @@ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverit
1400
1543
  name: "lifecycle",
1401
1544
  status: hasErrorSeverityCycle ? "error" : warnings.length === 0 ? "ok" : "warn",
1402
1545
  details: {
1403
- checked_active_items: activeItems.length,
1404
- active_closure_like_metadata_items: closureLikeRows.length,
1546
+ checked_active_items: rows.activeItems.length,
1547
+ active_closure_like_metadata_items: rows.closureLikeRows.length,
1405
1548
  active_closure_like_metadata_rows: summarizedClosureLikeRows.values,
1406
1549
  active_closure_like_metadata_rows_truncated: summarizedClosureLikeRows.truncated,
1407
- active_terminal_parent_items: terminalParentRows.length,
1550
+ active_terminal_parent_items: rows.terminalParentRows.length,
1408
1551
  active_terminal_parent_rows: summarizedTerminalParentRows.values,
1409
1552
  active_terminal_parent_rows_truncated: summarizedTerminalParentRows.truncated,
1410
1553
  stale_blocker_checks_enabled: includeStaleBlockers,
1411
- stale_blocker_items: staleBlockerRows.length,
1554
+ stale_blocker_items: rows.staleBlockerRows.length,
1412
1555
  stale_blocker_rows: summarizedStaleBlockerRows.values,
1413
1556
  stale_blocker_rows_truncated: summarizedStaleBlockerRows.truncated,
1414
1557
  dependency_cycle_severity_policy: dependencyCycleSeverity,
@@ -1438,81 +1581,26 @@ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverit
1438
1581
  }
1439
1582
  },
1440
1583
  warnings,
1441
- terminalParentFixRows
1584
+ terminalParentFixRows: rows.terminalParentFixRows
1442
1585
  };
1443
1586
  }
1444
1587
  async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, includePmInternals, verboseFileLists) {
1445
- const linkedProjectPaths = /* @__PURE__ */ new Set();
1446
- const remoteLinkedPaths = /* @__PURE__ */ new Set();
1447
- const missingLinkedPaths = [];
1448
- const staleLinkRows = [];
1588
+ const linkedPathState = await collectLinkedPathScanState(items, workspaceRoot);
1449
1589
  const itemsById = new Map(items.map((item) => [item.id, item]));
1450
- for (const item of items) {
1451
- const linkedArtifactGroups = [
1452
- { link_kind: "files", artifacts: item.files ?? [] },
1453
- { link_kind: "docs", artifacts: item.docs ?? [] }
1454
- ];
1455
- for (const group of linkedArtifactGroups) {
1456
- for (const artifact of group.artifacts) {
1457
- if (artifact.scope !== "project") {
1458
- continue;
1459
- }
1460
- if (isRemoteLinkedArtifactReference(artifact.path)) {
1461
- remoteLinkedPaths.add(artifact.path.trim());
1462
- continue;
1463
- }
1464
- const normalizedPath = normalizeRelativePath(artifact.path);
1465
- if (normalizedPath.length === 0) {
1466
- continue;
1467
- }
1468
- linkedProjectPaths.add(normalizedPath);
1469
- const absolutePath = path.isAbsolute(artifact.path) ? artifact.path : path.resolve(workspaceRoot, artifact.path);
1470
- let missing = false;
1471
- try {
1472
- const stats = await fs.stat(absolutePath);
1473
- if (!stats.isFile() && !stats.isDirectory()) {
1474
- missing = true;
1475
- }
1476
- } catch {
1477
- missing = true;
1478
- }
1479
- if (missing) {
1480
- missingLinkedPaths.push(normalizedPath);
1481
- staleLinkRows.push({ item_id: item.id, path: normalizedPath, link_kind: group.link_kind });
1482
- }
1483
- }
1484
- }
1485
- }
1486
- const uniqueMissingLinkedPaths = [...new Set(missingLinkedPaths)].sort((left, right) => left.localeCompare(right));
1590
+ const uniqueMissingLinkedPaths = [...new Set(linkedPathState.missingLinkedPaths)].sort((left, right) => left.localeCompare(right));
1487
1591
  const fileCandidates = await collectProjectFileCandidates(workspaceRoot, fileScanMode);
1488
- const strictTrackedAllMode = fileScanMode === "tracked-all-strict";
1489
- const strictModeForcesPmInternals = strictTrackedAllMode && !includePmInternals;
1490
- const includePmInternalsEffective = includePmInternals || strictTrackedAllMode;
1491
- const pmInternalCandidatePrefixes = includePmInternalsEffective ? [] : resolvePmInternalCandidatePrefixes(pmRoot, workspaceRoot);
1492
- const excludedPmInternalPaths = pmInternalCandidatePrefixes.length === 0 ? [] : fileCandidates.candidateFiles.filter((candidate) => hasPathPrefix(candidate, pmInternalCandidatePrefixes));
1493
- const candidateFiles = pmInternalCandidatePrefixes.length === 0 ? fileCandidates.candidateFiles : fileCandidates.candidateFiles.filter((candidate) => !hasPathPrefix(candidate, pmInternalCandidatePrefixes));
1494
- const excludedPmInternalCount = excludedPmInternalPaths.length;
1495
- const excludedByReason = {};
1496
- if (excludedPmInternalCount > 0) {
1497
- const summarizedPmInternalPaths = summarizeFileList(excludedPmInternalPaths, verboseFileLists);
1498
- excludedByReason.pm_internals = {
1499
- count: excludedPmInternalCount,
1500
- paths: summarizedPmInternalPaths.values,
1501
- paths_truncated: summarizedPmInternalPaths.truncated,
1502
- paths_total: summarizedPmInternalPaths.total
1503
- };
1504
- }
1505
- const orphanedFiles = candidateFiles.filter((candidate) => !linkedProjectPaths.has(candidate));
1592
+ const partition = partitionFileCandidates(fileCandidates, pmRoot, workspaceRoot, fileScanMode, includePmInternals, verboseFileLists);
1593
+ const orphanedFiles = partition.candidateFiles.filter((candidate) => !linkedPathState.linkedProjectPaths.has(candidate));
1506
1594
  const orphanedPathRows = buildOrphanedPathRows(orphanedFiles, items);
1507
- const classifiedStalePaths = classifyStaleLinkedPaths(uniqueMissingLinkedPaths, candidateFiles);
1595
+ const classifiedStalePaths = classifyStaleLinkedPaths(uniqueMissingLinkedPaths, partition.candidateFiles);
1508
1596
  const classificationByPath = new Map(classifiedStalePaths.map((entry) => [entry.path, entry.classification]));
1509
1597
  const movedStalePathCount = classifiedStalePaths.filter((entry) => entry.classification === "moved").length;
1510
- const staleLinkPruneRows = staleLinkRows.map((row) => ({
1598
+ const staleLinkPruneRows = linkedPathState.staleLinkRows.map((row) => ({
1511
1599
  ...row,
1512
1600
  classification: classificationByPath.get(row.path) ?? "deleted"
1513
1601
  })).sort((left, right) => left.item_id.localeCompare(right.item_id) || left.path.localeCompare(right.path) || left.link_kind.localeCompare(right.link_kind));
1514
1602
  const warnings = [];
1515
- if (strictModeForcesPmInternals) {
1603
+ if (partition.strictModeForcesPmInternals) {
1516
1604
  warnings.push("validate_files_tracked_all_strict_forces_pm_internals");
1517
1605
  }
1518
1606
  if (uniqueMissingLinkedPaths.length > 0) {
@@ -1521,7 +1609,7 @@ async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, inclu
1521
1609
  if (orphanedFiles.length > 0) {
1522
1610
  warnings.push(`validate_files_orphaned_paths:${orphanedFiles.length}`);
1523
1611
  }
1524
- const uniqueRemoteLinkedPaths = [...remoteLinkedPaths].sort((left, right) => left.localeCompare(right));
1612
+ const uniqueRemoteLinkedPaths = [...linkedPathState.remoteLinkedPaths].sort((left, right) => left.localeCompare(right));
1525
1613
  const summarizedRemote = summarizeFileList(uniqueRemoteLinkedPaths, verboseFileLists);
1526
1614
  const summarizedMissing = summarizeFileList(uniqueMissingLinkedPaths, verboseFileLists);
1527
1615
  const summarizedOrphaned = summarizeFileList(orphanedFiles, verboseFileLists);
@@ -1547,28 +1635,28 @@ async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, inclu
1547
1635
  workspace_root: workspaceRoot,
1548
1636
  scan_mode_requested: fileCandidates.requestedMode,
1549
1637
  scan_mode_applied: fileCandidates.appliedMode,
1550
- strict_tracked_all_mode: strictTrackedAllMode,
1551
- strict_mode_forces_pm_internals: strictModeForcesPmInternals,
1552
- strict_mode_forces_pm_internals_notice: strictModeForcesPmInternals ? "tracked-all-strict force-enables PM internals; pass --include-pm-internals to make inclusion explicit." : null,
1638
+ strict_tracked_all_mode: partition.strictTrackedAllMode,
1639
+ strict_mode_forces_pm_internals: partition.strictModeForcesPmInternals,
1640
+ strict_mode_forces_pm_internals_notice: partition.strictModeForcesPmInternals ? "tracked-all-strict force-enables PM internals; pass --include-pm-internals to make inclusion explicit." : null,
1553
1641
  file_list_detail_mode: verboseFileLists ? "full" : "summary",
1554
1642
  file_list_summary_limit: FILE_LIST_SUMMARY_LIMIT,
1555
1643
  candidate_scan_source: fileCandidates.source,
1556
- include_pm_internals: includePmInternalsEffective,
1644
+ include_pm_internals: partition.includePmInternalsEffective,
1557
1645
  include_pm_internals_requested: includePmInternals,
1558
- pm_internal_candidate_prefixes: pmInternalCandidatePrefixes,
1559
- pm_internal_excluded_count: excludedPmInternalCount,
1560
- excluded_total: excludedPmInternalCount,
1561
- excluded_by_reason: excludedByReason,
1562
- linked_project_paths: linkedProjectPaths.size,
1646
+ pm_internal_candidate_prefixes: partition.pmInternalCandidatePrefixes,
1647
+ pm_internal_excluded_count: partition.excludedPmInternalPaths.length,
1648
+ excluded_total: partition.excludedPmInternalPaths.length,
1649
+ excluded_by_reason: partition.excludedByReason,
1650
+ linked_project_paths: linkedPathState.linkedProjectPaths.size,
1563
1651
  remote_linked_paths_count: uniqueRemoteLinkedPaths.length,
1564
1652
  remote_linked_paths_total: summarizedRemote.total,
1565
1653
  remote_linked_paths: summarizedRemote.values,
1566
1654
  remote_linked_paths_truncated: summarizedRemote.truncated,
1567
1655
  candidate_total_raw: fileCandidates.candidateTotal,
1568
1656
  candidate_scanned_raw: fileCandidates.candidateScanned,
1569
- candidate_total: candidateFiles.length,
1570
- candidate_scanned: candidateFiles.length,
1571
- scanned_candidate_files: candidateFiles.length,
1657
+ candidate_total: partition.candidateFiles.length,
1658
+ candidate_scanned: partition.candidateFiles.length,
1659
+ scanned_candidate_files: partition.candidateFiles.length,
1572
1660
  missing_linked_paths_count: uniqueMissingLinkedPaths.length,
1573
1661
  missing_linked_paths_total: summarizedMissing.total,
1574
1662
  missing_linked_paths: summarizedMissing.values,
@@ -1728,7 +1816,7 @@ async function applyValidateFix(fix, global) {
1728
1816
  case "set_estimate":
1729
1817
  case "reparent":
1730
1818
  case "unset_parent": {
1731
- const { runUpdate } = await import("./update-KFX2SIAC.js");
1819
+ const { runUpdate } = await import("./update-Y5WQVT5O.js");
1732
1820
  const updateOptions = { message: VALIDATE_AUTO_FIX_MESSAGE };
1733
1821
  if (fix.kind === "set_resolution") {
1734
1822
  updateOptions.resolution = fix.value;
@@ -1788,10 +1876,10 @@ async function applyValidateFixes(applicable, global) {
1788
1876
  const remove = batch.map((fix) => fix.path).filter((value) => typeof value === "string" && value.length > 0);
1789
1877
  try {
1790
1878
  if (first.kind === "prune_file_link") {
1791
- const { runFiles } = await import("./files-NQHEXUZD.js");
1879
+ const { runFiles } = await import("./files-5D65CHGE.js");
1792
1880
  await runFiles(first.item_id, { remove, message: VALIDATE_AUTO_FIX_MESSAGE }, global);
1793
1881
  } else {
1794
- const { runDocs } = await import("./docs-GYZNVS26.js");
1882
+ const { runDocs } = await import("./docs-RPOVFMP3.js");
1795
1883
  await runDocs(first.item_id, { remove, message: VALIDATE_AUTO_FIX_MESSAGE }, global);
1796
1884
  }
1797
1885
  applied.push(...batch);
@@ -1806,10 +1894,14 @@ var _testOnlyValidateCommand = {
1806
1894
  applyValidateFixes,
1807
1895
  attachValidateFixHints,
1808
1896
  buildCommandReferencesCheck,
1897
+ buildCloseReasonBackfillRows,
1809
1898
  buildFilesCheck,
1810
1899
  buildLifecycleCheck,
1811
1900
  buildLifecycleDependencyGraph,
1812
1901
  buildLifecycleParentGraph,
1902
+ buildEstimateBackfillRows,
1903
+ buildMetadataCounts,
1904
+ buildMissingFieldOccurrences,
1813
1905
  buildOrphanedPathRows,
1814
1906
  classifyOrphanedPath,
1815
1907
  collectDefaultProjectFileCandidates,
@@ -1833,6 +1925,105 @@ var _testOnlyValidateCommand = {
1833
1925
  summarizeDuplicateIssueCodes,
1834
1926
  toMeaningfulString
1835
1927
  };
1928
+ function recordValidateCheck(state, built, fixHintsEnabled) {
1929
+ if (fixHintsEnabled) {
1930
+ attachValidateFixHints(built.check, built.warnings);
1931
+ }
1932
+ state.checks.push(built.check);
1933
+ state.warnings.push(...built.warnings);
1934
+ }
1935
+ async function executeRequestedValidateChecks(params) {
1936
+ const state = {
1937
+ checks: [],
1938
+ warnings: [...params.initialWarnings],
1939
+ closeReasonBackfillRows: [],
1940
+ estimateBackfillRows: [],
1941
+ resolutionBackfillRows: [],
1942
+ terminalParentFixRows: [],
1943
+ staleLinkPruneRows: []
1944
+ };
1945
+ const fixHintsEnabled = params.options.fixHints === true;
1946
+ const fullDiagnostics = params.options.verboseDiagnostics === true || params.options.allAffectedIds === true || params.global.json === true;
1947
+ if (params.requestedChecks.has("metadata")) {
1948
+ const built = buildMetadataCheck(params.items, params.metadataPolicy, params.statusRegistry, fullDiagnostics);
1949
+ state.closeReasonBackfillRows = built.closeReasonBackfillRows;
1950
+ state.estimateBackfillRows = built.estimateBackfillRows;
1951
+ recordValidateCheck(state, built, fixHintsEnabled);
1952
+ }
1953
+ if (params.requestedChecks.has("resolution")) {
1954
+ const built = buildResolutionCheck(params.items, params.statusRegistry, fullDiagnostics);
1955
+ state.resolutionBackfillRows = built.resolutionBackfillRows;
1956
+ recordValidateCheck(state, built, fixHintsEnabled);
1957
+ }
1958
+ if (params.requestedChecks.has("lifecycle")) {
1959
+ const built = buildLifecycleCheck(params.items, Boolean(params.options.checkStaleBlockers), params.dependencyCycleSeverity, params.parentCycleSeverity, params.statusRegistry, params.lifecyclePatternPolicy, fullDiagnostics, params.settings.id_prefix);
1960
+ state.terminalParentFixRows = built.terminalParentFixRows;
1961
+ recordValidateCheck(state, built, fixHintsEnabled);
1962
+ }
1963
+ if (params.requestedChecks.has("files")) {
1964
+ const built = await buildFilesCheck(params.items, params.workspaceRoot, params.pmRoot, params.fileScanMode, Boolean(params.options.includePmInternals), Boolean(params.options.verboseFileLists));
1965
+ state.staleLinkPruneRows = built.staleLinkPruneRows;
1966
+ recordValidateCheck(state, built, fixHintsEnabled);
1967
+ }
1968
+ if (params.requestedChecks.has("command_references")) {
1969
+ recordValidateCheck(state, buildCommandReferencesCheck(params.items, params.settings.id_prefix, fullDiagnostics), fixHintsEnabled);
1970
+ }
1971
+ if (params.requestedChecks.has("history_drift")) {
1972
+ recordValidateCheck(state, await buildHistoryDriftCheck(params.pmRoot, params.items, fullDiagnostics), fixHintsEnabled);
1973
+ }
1974
+ if (params.requestedChecks.has("format_version")) {
1975
+ recordValidateCheck(state, buildFormatVersionCheck(params.items, fullDiagnostics), fixHintsEnabled);
1976
+ }
1977
+ return state;
1978
+ }
1979
+ function planValidateFixes(options, state, settings) {
1980
+ const planned = [];
1981
+ if (options.autoFix === true) {
1982
+ planned.push(...planCloseReasonBackfillFixes(state.closeReasonBackfillRows));
1983
+ planned.push(...planResolutionBackfillFixes(state.resolutionBackfillRows));
1984
+ planned.push(...planEstimateBackfillFixes(state.estimateBackfillRows, settings.validation.estimate_defaults_by_type));
1985
+ planned.push(...planTerminalParentFixes(state.terminalParentFixRows));
1986
+ }
1987
+ if (options.pruneMissing === true) {
1988
+ planned.push(...planStaleLinkPruneFixes(state.staleLinkPruneRows));
1989
+ }
1990
+ return planned;
1991
+ }
1992
+ async function buildValidateFixesSummary(options, state, settings, grantedFixScopes, global) {
1993
+ if (options.autoFix !== true && options.pruneMissing !== true) {
1994
+ return void 0;
1995
+ }
1996
+ const planned = planValidateFixes(options, state, settings);
1997
+ const { applicable, gated } = partitionFixesByGrant(planned, grantedFixScopes);
1998
+ const dryRun = options.dryRun === true;
1999
+ const appliedFixRows = [];
2000
+ const failedFixRows = [];
2001
+ if (!dryRun) {
2002
+ const applied = await applyValidateFixes(applicable, global);
2003
+ appliedFixRows.push(...applied.applied.map(toFixOutputRow));
2004
+ failedFixRows.push(...applied.failed.map(({ fix, error }) => ({
2005
+ ...toFixOutputRow(fix),
2006
+ error: error instanceof Error ? error.message : String(error)
2007
+ })));
2008
+ }
2009
+ return {
2010
+ mode: dryRun ? "dry_run" : "apply",
2011
+ auto_fix: options.autoFix === true,
2012
+ prune_missing: options.pruneMissing === true,
2013
+ granted_fix_scopes: [...grantedFixScopes].sort((left, right) => left.localeCompare(right)),
2014
+ planned_count: planned.length,
2015
+ applied_count: appliedFixRows.length,
2016
+ gated_count: gated.length,
2017
+ failed_count: failedFixRows.length,
2018
+ planned_fixes: planned.map(toFixOutputRow),
2019
+ applied_fixes: appliedFixRows,
2020
+ gated_fixes: gated.map((fix) => ({
2021
+ ...toFixOutputRow(fix),
2022
+ gate_hint: `Withheld: re-run with --fix-scope ${fix.gate} to apply.`
2023
+ })),
2024
+ failed_fixes: failedFixRows
2025
+ };
2026
+ }
1836
2027
  async function runValidate(options, global) {
1837
2028
  const fixesRequested = options.autoFix === true || options.pruneMissing === true;
1838
2029
  if (options.dryRun === true && !fixesRequested) {
@@ -1860,100 +2051,29 @@ async function runValidate(options, global) {
1860
2051
  const parentCycleSeverity = resolveParentCycleSeverity(options.parentCycleSeverity);
1861
2052
  const fileScanMode = resolveFileScanMode(options.scanMode);
1862
2053
  const workspaceRoot = resolveWorkspaceRoot(pmRoot);
1863
- const checks = [];
1864
- const warnings = [...new Set(itemReadWarnings)];
1865
- const fixHintsEnabled = options.fixHints === true;
1866
- const fullDiagnostics = options.verboseDiagnostics === true || options.allAffectedIds === true || global.json === true;
1867
- const record = (built) => {
1868
- if (fixHintsEnabled) {
1869
- attachValidateFixHints(built.check, built.warnings);
1870
- }
1871
- checks.push(built.check);
1872
- warnings.push(...built.warnings);
1873
- };
1874
- let closeReasonBackfillRows = [];
1875
- let estimateBackfillRows = [];
1876
- let resolutionBackfillRows = [];
1877
- let terminalParentFixRows = [];
1878
- let staleLinkPruneRows = [];
1879
- if (requestedChecks.has("metadata")) {
1880
- const built = buildMetadataCheck(items, metadataPolicy, statusRegistry, fullDiagnostics);
1881
- closeReasonBackfillRows = built.closeReasonBackfillRows;
1882
- estimateBackfillRows = built.estimateBackfillRows;
1883
- record(built);
1884
- }
1885
- if (requestedChecks.has("resolution")) {
1886
- const built = buildResolutionCheck(items, statusRegistry, fullDiagnostics);
1887
- resolutionBackfillRows = built.resolutionBackfillRows;
1888
- record(built);
1889
- }
1890
- if (requestedChecks.has("lifecycle")) {
1891
- const built = buildLifecycleCheck(items, Boolean(options.checkStaleBlockers), dependencyCycleSeverity, parentCycleSeverity, statusRegistry, lifecyclePatternPolicy, fullDiagnostics, settings.id_prefix);
1892
- terminalParentFixRows = built.terminalParentFixRows;
1893
- record(built);
1894
- }
1895
- if (requestedChecks.has("files")) {
1896
- const built = await buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, Boolean(options.includePmInternals), Boolean(options.verboseFileLists));
1897
- staleLinkPruneRows = built.staleLinkPruneRows;
1898
- record(built);
1899
- }
1900
- if (requestedChecks.has("command_references")) {
1901
- record(buildCommandReferencesCheck(items, settings.id_prefix, fullDiagnostics));
1902
- }
1903
- if (requestedChecks.has("history_drift")) {
1904
- record(await buildHistoryDriftCheck(pmRoot, items, fullDiagnostics));
1905
- }
1906
- if (requestedChecks.has("format_version")) {
1907
- record(buildFormatVersionCheck(items, fullDiagnostics));
1908
- }
1909
- let fixes;
1910
- if (fixesRequested) {
1911
- const planned = [];
1912
- if (options.autoFix === true) {
1913
- planned.push(...planCloseReasonBackfillFixes(closeReasonBackfillRows));
1914
- planned.push(...planResolutionBackfillFixes(resolutionBackfillRows));
1915
- planned.push(...planEstimateBackfillFixes(estimateBackfillRows, settings.validation.estimate_defaults_by_type));
1916
- planned.push(...planTerminalParentFixes(terminalParentFixRows));
1917
- }
1918
- if (options.pruneMissing === true) {
1919
- planned.push(...planStaleLinkPruneFixes(staleLinkPruneRows));
1920
- }
1921
- const { applicable, gated } = partitionFixesByGrant(planned, grantedFixScopes);
1922
- const dryRun = options.dryRun === true;
1923
- const appliedFixRows = [];
1924
- const failedFixRows = [];
1925
- if (!dryRun) {
1926
- const applied = await applyValidateFixes(applicable, global);
1927
- appliedFixRows.push(...applied.applied.map(toFixOutputRow));
1928
- failedFixRows.push(...applied.failed.map(({ fix, error }) => ({
1929
- ...toFixOutputRow(fix),
1930
- error: error instanceof Error ? error.message : String(error)
1931
- })));
1932
- }
1933
- fixes = {
1934
- mode: dryRun ? "dry_run" : "apply",
1935
- auto_fix: options.autoFix === true,
1936
- prune_missing: options.pruneMissing === true,
1937
- granted_fix_scopes: [...grantedFixScopes].sort((left, right) => left.localeCompare(right)),
1938
- planned_count: planned.length,
1939
- applied_count: appliedFixRows.length,
1940
- gated_count: gated.length,
1941
- failed_count: failedFixRows.length,
1942
- planned_fixes: planned.map(toFixOutputRow),
1943
- applied_fixes: appliedFixRows,
1944
- gated_fixes: gated.map((fix) => ({
1945
- ...toFixOutputRow(fix),
1946
- gate_hint: `Withheld: re-run with --fix-scope ${fix.gate} to apply.`
1947
- })),
1948
- failed_fixes: failedFixRows
1949
- };
1950
- }
1951
- const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));
1952
- const hasErrors = checks.some((check) => check.status === "error");
2054
+ const state = await executeRequestedValidateChecks({
2055
+ requestedChecks,
2056
+ options,
2057
+ global,
2058
+ pmRoot,
2059
+ workspaceRoot,
2060
+ settings,
2061
+ items,
2062
+ statusRegistry,
2063
+ metadataPolicy,
2064
+ lifecyclePatternPolicy,
2065
+ dependencyCycleSeverity,
2066
+ parentCycleSeverity,
2067
+ fileScanMode,
2068
+ initialWarnings: [...new Set(itemReadWarnings)]
2069
+ });
2070
+ const fixes = fixesRequested ? await buildValidateFixesSummary(options, state, settings, grantedFixScopes, global) : void 0;
2071
+ const normalizedWarnings = [...new Set(state.warnings)].sort((left, right) => left.localeCompare(right));
2072
+ const hasErrors = state.checks.some((check) => check.status === "error");
1953
2073
  return {
1954
2074
  ok: !hasErrors,
1955
2075
  has_warnings: normalizedWarnings.length > 0,
1956
- checks,
2076
+ checks: state.checks,
1957
2077
  warnings: normalizedWarnings,
1958
2078
  ...fixes !== void 0 ? { fixes } : {},
1959
2079
  generated_at: nowIso()
@@ -1963,6 +2083,6 @@ export {
1963
2083
  _testOnlyValidateCommand,
1964
2084
  runValidate
1965
2085
  };
1966
- //# sourceMappingURL=validate-X5W76YJL.js.map
2086
+ //# sourceMappingURL=validate-W7H5TEDC.js.map
1967
2087
 
1968
- //# debugId=7af30e70-6b7d-5750-9dab-2031781c0d9d
2088
+ //# debugId=0642e966-0611-51ff-ad2f-1a0d7416c80b