@unbrained/pm-cli 2026.6.30 → 2026.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/AGENTS.md +2 -0
  2. package/CHANGELOG.md +26 -0
  3. package/dist/cli/bootstrap-args.js +89 -79
  4. package/dist/cli/bootstrap-args.js.map +1 -1
  5. package/dist/cli/commander-usage.d.ts +2 -0
  6. package/dist/cli/commander-usage.js +58 -47
  7. package/dist/cli/commander-usage.js.map +1 -1
  8. package/dist/cli/commands/aggregate.js +102 -79
  9. package/dist/cli/commands/aggregate.js.map +1 -1
  10. package/dist/cli/commands/calendar.js +339 -303
  11. package/dist/cli/commands/calendar.js.map +1 -1
  12. package/dist/cli/commands/close-many.js +89 -68
  13. package/dist/cli/commands/close-many.js.map +1 -1
  14. package/dist/cli/commands/close.js +157 -129
  15. package/dist/cli/commands/close.js.map +1 -1
  16. package/dist/cli/commands/comments-audit.js +50 -42
  17. package/dist/cli/commands/comments-audit.js.map +1 -1
  18. package/dist/cli/commands/config.d.ts +2 -0
  19. package/dist/cli/commands/config.js +443 -879
  20. package/dist/cli/commands/config.js.map +1 -1
  21. package/dist/cli/commands/context.js +365 -287
  22. package/dist/cli/commands/context.js.map +1 -1
  23. package/dist/cli/commands/contracts.js +352 -238
  24. package/dist/cli/commands/contracts.js.map +1 -1
  25. package/dist/cli/commands/create.js +483 -434
  26. package/dist/cli/commands/create.js.map +1 -1
  27. package/dist/cli/commands/dedupe-audit.js +46 -39
  28. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  29. package/dist/cli/commands/dedupe-merge.js +88 -69
  30. package/dist/cli/commands/dedupe-merge.js.map +1 -1
  31. package/dist/cli/commands/extension/bundled-catalog.js +59 -46
  32. package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
  33. package/dist/cli/commands/extension/doctor.js +129 -78
  34. package/dist/cli/commands/extension/doctor.js.map +1 -1
  35. package/dist/cli/commands/extension/managed-state.js +101 -57
  36. package/dist/cli/commands/extension/managed-state.js.map +1 -1
  37. package/dist/cli/commands/extension/scaffold.d.ts +7 -0
  38. package/dist/cli/commands/extension/scaffold.js +214 -186
  39. package/dist/cli/commands/extension/scaffold.js.map +1 -1
  40. package/dist/cli/commands/extension.d.ts +6 -1
  41. package/dist/cli/commands/extension.js +1034 -902
  42. package/dist/cli/commands/extension.js.map +1 -1
  43. package/dist/cli/commands/get.js +114 -81
  44. package/dist/cli/commands/get.js.map +1 -1
  45. package/dist/cli/commands/health.d.ts +17 -0
  46. package/dist/cli/commands/health.js +446 -307
  47. package/dist/cli/commands/health.js.map +1 -1
  48. package/dist/cli/commands/history-compact.js +209 -140
  49. package/dist/cli/commands/history-compact.js.map +1 -1
  50. package/dist/cli/commands/history-redact.js +162 -119
  51. package/dist/cli/commands/history-redact.js.map +1 -1
  52. package/dist/cli/commands/history-repair.js +120 -85
  53. package/dist/cli/commands/history-repair.js.map +1 -1
  54. package/dist/cli/commands/init.d.ts +8 -2
  55. package/dist/cli/commands/init.js +263 -162
  56. package/dist/cli/commands/init.js.map +1 -1
  57. package/dist/cli/commands/list-filter-shared.js +55 -48
  58. package/dist/cli/commands/list-filter-shared.js.map +1 -1
  59. package/dist/cli/commands/list.js +152 -102
  60. package/dist/cli/commands/list.js.map +1 -1
  61. package/dist/cli/commands/next.js +49 -32
  62. package/dist/cli/commands/next.js.map +1 -1
  63. package/dist/cli/commands/plan.js +373 -298
  64. package/dist/cli/commands/plan.js.map +1 -1
  65. package/dist/cli/commands/recurrence-parsers.js +43 -25
  66. package/dist/cli/commands/recurrence-parsers.js.map +1 -1
  67. package/dist/cli/commands/reindex.d.ts +21 -5
  68. package/dist/cli/commands/reindex.js +345 -205
  69. package/dist/cli/commands/reindex.js.map +1 -1
  70. package/dist/cli/commands/restore.d.ts +8 -7
  71. package/dist/cli/commands/restore.js +105 -69
  72. package/dist/cli/commands/restore.js.map +1 -1
  73. package/dist/cli/commands/schema.js +33 -30
  74. package/dist/cli/commands/schema.js.map +1 -1
  75. package/dist/cli/commands/search.d.ts +10 -2
  76. package/dist/cli/commands/search.js +595 -536
  77. package/dist/cli/commands/search.js.map +1 -1
  78. package/dist/cli/commands/telemetry.js +98 -87
  79. package/dist/cli/commands/telemetry.js.map +1 -1
  80. package/dist/cli/commands/test-all.js +237 -168
  81. package/dist/cli/commands/test-all.js.map +1 -1
  82. package/dist/cli/commands/test.d.ts +6 -5
  83. package/dist/cli/commands/test.js +530 -464
  84. package/dist/cli/commands/test.js.map +1 -1
  85. package/dist/cli/commands/update-many.js +57 -42
  86. package/dist/cli/commands/update-many.js.map +1 -1
  87. package/dist/cli/commands/update.d.ts +1 -1
  88. package/dist/cli/commands/update.js +764 -747
  89. package/dist/cli/commands/update.js.map +1 -1
  90. package/dist/cli/commands/validate.d.ts +18 -1
  91. package/dist/cli/commands/validate.js +466 -343
  92. package/dist/cli/commands/validate.js.map +1 -1
  93. package/dist/cli/error-guidance.js +399 -357
  94. package/dist/cli/error-guidance.js.map +1 -1
  95. package/dist/cli/extension-command-options.js +48 -21
  96. package/dist/cli/extension-command-options.js.map +1 -1
  97. package/dist/cli/main.d.ts +47 -0
  98. package/dist/cli/main.js +428 -341
  99. package/dist/cli/main.js.map +1 -1
  100. package/dist/cli/migration-gates.js +22 -45
  101. package/dist/cli/migration-gates.js.map +1 -1
  102. package/dist/cli/register-list-query.js +94 -105
  103. package/dist/cli/register-list-query.js.map +1 -1
  104. package/dist/cli/register-mutation.js +400 -416
  105. package/dist/cli/register-mutation.js.map +1 -1
  106. package/dist/cli/register-operations.js +86 -66
  107. package/dist/cli/register-operations.js.map +1 -1
  108. package/dist/cli/register-setup.js +120 -101
  109. package/dist/cli/register-setup.js.map +1 -1
  110. package/dist/cli/registration-helpers.js +117 -122
  111. package/dist/cli/registration-helpers.js.map +1 -1
  112. package/dist/cli-bundle/chunks/{activity-MVSEND6D.js → activity-CUC4JY3U.js} +9 -9
  113. package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
  114. package/dist/cli-bundle/chunks/{aggregate-MOC4TR2G.js → aggregate-DKUTRY6R.js} +109 -85
  115. package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
  116. package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js → aggregate-SW5PNGCS.js} +108 -84
  117. package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js.map → aggregate-SW5PNGCS.js.map} +2 -2
  118. package/dist/cli-bundle/chunks/{append-KDHT4GHI.js → append-H32VOR2Y.js} +6 -6
  119. package/dist/cli-bundle/chunks/{append-LEDBAM3K.js → append-UBM632FK.js} +6 -6
  120. package/dist/cli-bundle/chunks/{chunk-Z55WX4IQ.js → chunk-2227673O.js} +158 -114
  121. package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
  122. package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js → chunk-2ASNV4DH.js} +4 -4
  123. package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js → chunk-2CHRYUXL.js} +2 -2
  124. package/dist/cli-bundle/chunks/{chunk-QE5UFCCO.js → chunk-2KWL5NPW.js} +42 -27
  125. package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
  126. package/dist/cli-bundle/chunks/{chunk-ZEATCVAC.js → chunk-36UGKF4O.js} +21 -29
  127. package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-JZG5ADVE.js → chunk-3AZUFQK6.js} +1103 -963
  129. package/dist/cli-bundle/chunks/chunk-3AZUFQK6.js.map +1 -0
  130. package/dist/cli-bundle/chunks/{chunk-DRPF274X.js → chunk-3LCUASYG.js} +2 -2
  131. package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js → chunk-3Q2HBMTI.js} +2 -2
  132. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +87 -0
  133. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +7 -0
  134. package/dist/cli-bundle/chunks/{chunk-GF7EAR22.js → chunk-4NUOWFBT.js} +109 -72
  135. package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
  136. package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js → chunk-55XRYWEG.js} +6 -6
  137. package/dist/cli-bundle/chunks/{chunk-5IRVSKPS.js → chunk-5GVTFFTC.js} +150 -224
  138. package/dist/cli-bundle/chunks/chunk-5GVTFFTC.js.map +1 -0
  139. package/dist/cli-bundle/chunks/{chunk-CHRNYKNI.js → chunk-5PGBHRY3.js} +41 -26
  140. package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
  141. package/dist/cli-bundle/chunks/{chunk-53ARXF2O.js → chunk-66Z3X7ZG.js} +261 -161
  142. package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
  143. package/dist/cli-bundle/chunks/{chunk-A3UNLXNJ.js → chunk-6ITZLD4T.js} +738 -688
  144. package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
  145. package/dist/cli-bundle/chunks/{chunk-JTRKME24.js → chunk-6YCYF2AI.js} +262 -162
  146. package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
  147. package/dist/cli-bundle/chunks/{chunk-RM6MHL6A.js → chunk-6ZMBJRDJ.js} +580 -467
  148. package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
  149. package/dist/cli-bundle/chunks/{chunk-RPRW26NG.js → chunk-7MYWF4ZX.js} +110 -73
  150. package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
  151. package/dist/cli-bundle/chunks/{chunk-SNUK7H5J.js → chunk-7NSPKJUS.js} +716 -606
  152. package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
  153. package/dist/cli-bundle/chunks/{chunk-KYDYQMNW.js → chunk-7TH5NMVB.js} +95 -53
  154. package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
  155. package/dist/cli-bundle/chunks/{chunk-VD3LKZFX.js → chunk-7W4H4K26.js} +739 -689
  156. package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
  157. package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js → chunk-A6VOGKBA.js} +6 -6
  158. package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js → chunk-AIAIXG7I.js} +2 -2
  159. package/dist/cli-bundle/chunks/{chunk-NIBP3I7A.js → chunk-AJEBCRIY.js} +128 -126
  160. package/dist/cli-bundle/chunks/chunk-AJEBCRIY.js.map +1 -0
  161. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
  162. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
  163. package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js → chunk-BTX5MIQF.js} +2 -2
  164. package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js +809 -0
  165. package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js.map +7 -0
  166. package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js → chunk-CYBDUHNO.js} +3 -3
  167. package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js → chunk-CZPVDLD2.js} +4 -4
  168. package/dist/cli-bundle/chunks/{chunk-FDEVKXC4.js → chunk-EMPGXBUF.js} +22 -30
  169. package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
  170. package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js → chunk-EUKTMRN3.js} +2 -2
  171. package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js → chunk-FFOQHGNH.js} +6 -6
  172. package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js → chunk-GFMSLORL.js} +6 -6
  173. package/dist/cli-bundle/chunks/{chunk-IZQOJR2B.js → chunk-GRRG3MCT.js} +198 -189
  174. package/dist/cli-bundle/chunks/chunk-GRRG3MCT.js.map +7 -0
  175. package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js → chunk-H4GRLYJS.js} +3 -3
  176. package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js → chunk-HQTPRV4D.js} +6 -6
  177. package/dist/cli-bundle/chunks/{chunk-CY5IJMUM.js → chunk-I66WE2HE.js} +712 -602
  178. package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
  179. package/dist/cli-bundle/chunks/{chunk-ZFIEEDTJ.js → chunk-IEEJQCZ4.js} +509 -363
  180. package/dist/cli-bundle/chunks/chunk-IEEJQCZ4.js.map +7 -0
  181. package/dist/cli-bundle/chunks/{chunk-DU66JUGT.js → chunk-IG5JYZGU.js} +488 -420
  182. package/dist/cli-bundle/chunks/chunk-IG5JYZGU.js.map +7 -0
  183. package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js → chunk-JMK5GCK2.js} +2 -2
  184. package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js → chunk-JXAUVO6X.js} +258 -169
  185. package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js.map → chunk-JXAUVO6X.js.map} +2 -2
  186. package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js → chunk-K2VYLVX4.js} +2 -2
  187. package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js → chunk-KCO2EAN5.js} +3 -3
  188. package/dist/cli-bundle/chunks/{chunk-T7ZMQI4J.js → chunk-KIYCOJ63.js} +198 -189
  189. package/dist/cli-bundle/chunks/chunk-KIYCOJ63.js.map +1 -0
  190. package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js → chunk-KLXF7NCC.js} +2 -2
  191. package/dist/cli-bundle/chunks/{chunk-V3KLX7U7.js → chunk-KN3URLKS.js} +510 -364
  192. package/dist/cli-bundle/chunks/chunk-KN3URLKS.js.map +1 -0
  193. package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js → chunk-LRKMWUUV.js} +2 -2
  194. package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js → chunk-LTRAF2D7.js} +3 -3
  195. package/dist/cli-bundle/chunks/{chunk-5T6WPLRO.js → chunk-MNBPX5JS.js} +394 -354
  196. package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
  197. package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js → chunk-MRD4T5LF.js} +2 -2
  198. package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js → chunk-N2JSWVWG.js} +4 -4
  199. package/dist/cli-bundle/chunks/{chunk-7WDETKGP.js → chunk-N3QCJS4M.js} +1105 -965
  200. package/dist/cli-bundle/chunks/chunk-N3QCJS4M.js.map +7 -0
  201. package/dist/cli-bundle/chunks/{chunk-KGQ3W65B.js → chunk-NRZS637N.js} +258 -169
  202. package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
  203. package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js +799 -0
  204. package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js.map +1 -0
  205. package/dist/cli-bundle/chunks/{chunk-ZIE6WXJ2.js → chunk-Q6K2OACU.js} +153 -90
  206. package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
  207. package/dist/cli-bundle/chunks/{chunk-K46GQ265.js → chunk-Q6NXOHS6.js} +489 -421
  208. package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
  209. package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js → chunk-QH3FSKRJ.js} +2 -2
  210. package/dist/cli-bundle/chunks/{chunk-UB3V5WUI.js → chunk-RM37OPYK.js} +394 -354
  211. package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
  212. package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js → chunk-S62UANU7.js} +3 -3
  213. package/dist/cli-bundle/chunks/{chunk-NO6Y6FB2.js → chunk-SPM2XLWI.js} +37 -28
  214. package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
  215. package/dist/cli-bundle/chunks/{chunk-DORJSBGJ.js → chunk-SYNKD3ZG.js} +127 -125
  216. package/dist/cli-bundle/chunks/chunk-SYNKD3ZG.js.map +7 -0
  217. package/dist/cli-bundle/chunks/{chunk-6YRAMXRS.js → chunk-SYVUU7EK.js} +581 -468
  218. package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
  219. package/dist/cli-bundle/chunks/{chunk-D5LYZVGB.js → chunk-TPOFWBMY.js} +95 -53
  220. package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
  221. package/dist/cli-bundle/chunks/{chunk-IHXXUIXS.js → chunk-TTHCEV5Q.js} +92 -77
  222. package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
  223. package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js → chunk-U2BEEM2X.js} +3 -3
  224. package/dist/cli-bundle/chunks/{chunk-Z5BM2FKQ.js → chunk-UGLU6Q2I.js} +91 -76
  225. package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
  226. package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js → chunk-UT73HUPC.js} +3 -3
  227. package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js → chunk-UTSH5GWX.js} +4 -4
  228. package/dist/cli-bundle/chunks/{chunk-AWN4PPH5.js → chunk-UWKEJMZU.js} +157 -113
  229. package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
  230. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +84 -0
  231. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +1 -0
  232. package/dist/cli-bundle/chunks/{chunk-KTMMTOIP.js → chunk-W47SML5B.js} +152 -89
  233. package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
  234. package/dist/cli-bundle/chunks/{chunk-UFKNF23C.js → chunk-WJAMWAHZ.js} +157 -118
  235. package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
  236. package/dist/cli-bundle/chunks/{chunk-HIBK6H4S.js → chunk-XCHUVHKU.js} +685 -544
  237. package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
  238. package/dist/cli-bundle/chunks/{chunk-DJDXAU74.js → chunk-XEWQKDYZ.js} +685 -544
  239. package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
  240. package/dist/cli-bundle/chunks/{chunk-BOWQWXLI.js → chunk-XTHQWXVC.js} +158 -119
  241. package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
  242. package/dist/cli-bundle/chunks/{chunk-6T5ZIWBS.js → chunk-XWGEMNBR.js} +150 -224
  243. package/dist/cli-bundle/chunks/chunk-XWGEMNBR.js.map +7 -0
  244. package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js → chunk-Y4NRKBFW.js} +3 -3
  245. package/dist/cli-bundle/chunks/{chunk-WTRUDJ3R.js → chunk-YLZZ6T54.js} +38 -29
  246. package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
  247. package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js → chunk-YPKFV2JR.js} +6 -6
  248. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
  249. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
  250. package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js → chunk-ZNHEYCDD.js} +2 -2
  251. package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js → chunk-ZNT7KEWE.js} +2 -2
  252. package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js → claim-SENTPZBN.js} +8 -8
  253. package/dist/cli-bundle/chunks/{claim-6NINZYB3.js → claim-Z7MEQCBT.js} +8 -8
  254. package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js → close-424MX4CU.js} +7 -7
  255. package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
  256. package/dist/cli-bundle/chunks/{close-many-CXJBOWWY.js → close-many-2IV4J2TR.js} +103 -82
  257. package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
  258. package/dist/cli-bundle/chunks/{close-many-BFMP6HHK.js → close-many-SWY34BII.js} +102 -81
  259. package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
  260. package/dist/cli-bundle/chunks/{comments-ETHABIY6.js → comments-4FGNTSNV.js} +8 -8
  261. package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js → comments-7YS5MY5X.js} +8 -8
  262. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js +1062 -0
  263. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js.map +1 -0
  264. package/dist/cli-bundle/chunks/config-G74GISC4.js +1072 -0
  265. package/dist/cli-bundle/chunks/config-G74GISC4.js.map +7 -0
  266. package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js → context-LHVKJSPJ.js} +12 -12
  267. package/dist/cli-bundle/chunks/{context-XDI4DKKT.js → context-ZQY54JNS.js} +12 -12
  268. package/dist/cli-bundle/chunks/{contracts-SMOAN5NF.js → contracts-CP2EZJC7.js} +320 -199
  269. package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
  270. package/dist/cli-bundle/chunks/{contracts-KP4QAGVW.js → contracts-FIZLMP7O.js} +321 -200
  271. package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
  272. package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js → copy-GYNQQPW2.js} +5 -5
  273. package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js → copy-TLW7JTQT.js} +5 -5
  274. package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js → create-VSKYSOCD.js} +12 -12
  275. package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
  276. package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js → delete-4W5JYCEG.js} +5 -5
  277. package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js → delete-ANTOTI2I.js} +5 -5
  278. package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js → deps-HPPE6MJN.js} +5 -5
  279. package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js → deps-ZQZN54EZ.js} +5 -5
  280. package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js → docs-RPOVFMP3.js} +7 -7
  281. package/dist/cli-bundle/chunks/{docs-2TIFR62T.js → docs-XJNYBJGE.js} +7 -7
  282. package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js → eval-DM6JBZTS.js} +10 -10
  283. package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js → eval-RFBI5FGS.js} +10 -10
  284. package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js → extension-B3YY4WY5.js} +11 -10
  285. package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js → extension-TTSEFQTS.js} +11 -10
  286. package/dist/cli-bundle/chunks/{files-DF3HO6XK.js → files-5D65CHGE.js} +7 -7
  287. package/dist/cli-bundle/chunks/{files-T5ODMETM.js → files-GPIG77EN.js} +7 -7
  288. package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js → focus-C3PEJV2C.js} +6 -6
  289. package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js → focus-ZHN7WIGX.js} +6 -6
  290. package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js → gc-D4JQ6OWN.js} +3 -3
  291. package/dist/cli-bundle/chunks/{gc-FULIVYR4.js → gc-VZIXDL32.js} +3 -3
  292. package/dist/cli-bundle/chunks/{get-VYPIICPC.js → get-GIBRUUOP.js} +121 -81
  293. package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
  294. package/dist/cli-bundle/chunks/{get-AWK324RS.js → get-IOVAN6RU.js} +120 -80
  295. package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
  296. package/dist/cli-bundle/chunks/{health-Q66C43GN.js → health-L2U3AFKV.js} +437 -264
  297. package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
  298. package/dist/cli-bundle/chunks/{health-FBCVZGSX.js → health-MM7AWXYF.js} +436 -263
  299. package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +7 -0
  300. package/dist/cli-bundle/chunks/history-DD7L7BNL.js +18 -0
  301. package/dist/cli-bundle/chunks/{history-X4OSES6K.js → history-IL7XCEX2.js} +8 -8
  302. package/dist/cli-bundle/chunks/{history-compact-2GHT32UX.js → history-compact-HALOTOU7.js} +214 -135
  303. package/dist/cli-bundle/chunks/history-compact-HALOTOU7.js.map +1 -0
  304. package/dist/cli-bundle/chunks/{history-compact-WLCQEKXS.js → history-compact-MV25P7DM.js} +213 -134
  305. package/dist/cli-bundle/chunks/history-compact-MV25P7DM.js.map +7 -0
  306. package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +19 -0
  307. package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js → history-redact-VYCWQFK7.js} +9 -9
  308. package/dist/cli-bundle/chunks/{history-repair-FY75IC26.js → history-repair-44MODPQF.js} +124 -84
  309. package/dist/cli-bundle/chunks/history-repair-44MODPQF.js.map +1 -0
  310. package/dist/cli-bundle/chunks/{history-repair-GABSDSVD.js → history-repair-CPNAOCNF.js} +123 -83
  311. package/dist/cli-bundle/chunks/history-repair-CPNAOCNF.js.map +7 -0
  312. package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js → init-F27NHENZ.js} +12 -11
  313. package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
  314. package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js → learnings-HJVDQIGY.js} +8 -8
  315. package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js → learnings-XSFSUUWK.js} +8 -8
  316. package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js → list-HPMEKCAA.js} +8 -8
  317. package/dist/cli-bundle/chunks/{list-ROT7JF62.js → list-VMPWTURB.js} +8 -8
  318. package/dist/cli-bundle/chunks/{next-66BJB4N2.js → next-ETXF2ZCN.js} +59 -37
  319. package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
  320. package/dist/cli-bundle/chunks/{next-N5MWJTBY.js → next-QM6YJIIS.js} +60 -38
  321. package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
  322. package/dist/cli-bundle/chunks/{notes-FW6YFLND.js → notes-GDZIKGR6.js} +8 -8
  323. package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js → notes-WDDBPC4D.js} +8 -8
  324. package/dist/cli-bundle/chunks/{plan-ZHKZ7JVF.js → plan-BGDR73Z6.js} +373 -279
  325. package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
  326. package/dist/cli-bundle/chunks/{plan-DQ7G4EDC.js → plan-C5IMM335.js} +372 -278
  327. package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
  328. package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js → profile-CCOKZ2IQ.js} +9 -9
  329. package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js → profile-HUCENIEQ.js} +9 -9
  330. package/dist/cli-bundle/chunks/{register-list-query-Y2VRHPCL.js → register-list-query-ROSNIL52.js} +80 -83
  331. package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +1 -0
  332. package/dist/cli-bundle/chunks/{register-list-query-KY6Z6WV7.js → register-list-query-XN4ZRHSV.js} +79 -82
  333. package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +7 -0
  334. package/dist/cli-bundle/chunks/{register-mutation-PCARIGZS.js → register-mutation-CFSB2MS3.js} +406 -385
  335. package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
  336. package/dist/cli-bundle/chunks/{register-mutation-N6AYSKPM.js → register-mutation-KRLAHEL2.js} +405 -384
  337. package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
  338. package/dist/cli-bundle/chunks/{register-operations-L6CYTOIH.js → register-operations-4PASGJDB.js} +112 -93
  339. package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +7 -0
  340. package/dist/cli-bundle/chunks/{register-operations-YAT6FUUB.js → register-operations-MBN4KGUM.js} +113 -94
  341. package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +1 -0
  342. package/dist/cli-bundle/chunks/{register-setup-N7UGXYJC.js → register-setup-VIAWYFP5.js} +129 -104
  343. package/dist/cli-bundle/chunks/register-setup-VIAWYFP5.js.map +1 -0
  344. package/dist/cli-bundle/chunks/{register-setup-MPANILQF.js → register-setup-ZCGKHDKL.js} +128 -103
  345. package/dist/cli-bundle/chunks/register-setup-ZCGKHDKL.js.map +7 -0
  346. package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js → restore-4CBWUMCX.js} +9 -9
  347. package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
  348. package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
  349. package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
  350. package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js → schema-TDGK6N3I.js} +7 -7
  351. package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js → schema-UE5KKAUX.js} +7 -7
  352. package/dist/cli-bundle/chunks/{search-KP6H7COV.js → search-FP7MEU4S.js} +10 -10
  353. package/dist/cli-bundle/chunks/{search-CX5UMV4H.js → search-K4CFLQ5S.js} +10 -10
  354. package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js → stats-NJJCALEZ.js} +6 -6
  355. package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js → stats-XT6QRKQY.js} +6 -6
  356. package/dist/cli-bundle/chunks/{telemetry-DIFPXCAT.js → telemetry-5SQ5UDXC.js} +84 -70
  357. package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
  358. package/dist/cli-bundle/chunks/{telemetry-WTYFUPRL.js → telemetry-HVXFZA2U.js} +85 -71
  359. package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
  360. package/dist/cli-bundle/chunks/{test-QNDXZQCW.js → test-UFSJ5YIO.js} +15 -14
  361. package/dist/cli-bundle/chunks/{test-HU2BS7EY.js → test-YCDAUBWF.js} +15 -14
  362. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js +427 -0
  363. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js.map +1 -0
  364. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js +430 -0
  365. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js.map +7 -0
  366. package/dist/cli-bundle/chunks/{test-runs-CA6K32RD.js → test-runs-FK5E75AA.js} +185 -147
  367. package/dist/cli-bundle/chunks/test-runs-FK5E75AA.js.map +1 -0
  368. package/dist/cli-bundle/chunks/{test-runs-LANLLPVO.js → test-runs-H4TGWGRN.js} +184 -146
  369. package/dist/cli-bundle/chunks/test-runs-H4TGWGRN.js.map +7 -0
  370. package/dist/cli-bundle/chunks/update-MTCFES6X.js +24 -0
  371. package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js → update-Y5WQVT5O.js} +15 -15
  372. package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js → update-many-6YAYYRLE.js} +83 -68
  373. package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js.map → update-many-6YAYYRLE.js.map} +2 -2
  374. package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js → update-many-JTKKSA7Y.js} +84 -69
  375. package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js.map → update-many-JTKKSA7Y.js.map} +1 -1
  376. package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js → upgrade-DTAHZ236.js} +11 -10
  377. package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js.map → upgrade-DTAHZ236.js.map} +1 -1
  378. package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js → upgrade-JUDU7YL4.js} +13 -12
  379. package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js.map → upgrade-JUDU7YL4.js.map} +1 -1
  380. package/dist/cli-bundle/chunks/{validate-2G566PKQ.js → validate-732RWS5W.js} +440 -319
  381. package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
  382. package/dist/cli-bundle/chunks/{validate-BDPVXHHH.js → validate-W7H5TEDC.js} +441 -320
  383. package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
  384. package/dist/cli-bundle/main.js +986 -1500
  385. package/dist/cli-bundle/main.js.map +4 -4
  386. package/dist/core/config/nested-settings.js +89 -67
  387. package/dist/core/config/nested-settings.js.map +1 -1
  388. package/dist/core/extensions/activation-summary-markdown.js +23 -12
  389. package/dist/core/extensions/activation-summary-markdown.js.map +1 -1
  390. package/dist/core/extensions/extension-policy.d.ts +18 -3
  391. package/dist/core/extensions/extension-policy.js +116 -106
  392. package/dist/core/extensions/extension-policy.js.map +1 -1
  393. package/dist/core/extensions/loader.js +310 -232
  394. package/dist/core/extensions/loader.js.map +1 -1
  395. package/dist/core/governance/metadata-coverage.js +20 -28
  396. package/dist/core/governance/metadata-coverage.js.map +1 -1
  397. package/dist/core/history/drift-scan.js +93 -81
  398. package/dist/core/history/drift-scan.js.map +1 -1
  399. package/dist/core/item/item-format.js +523 -410
  400. package/dist/core/item/item-format.js.map +1 -1
  401. package/dist/core/item/item-type-definition.js +14 -14
  402. package/dist/core/item/item-type-definition.js.map +1 -1
  403. package/dist/core/item/type-registry.js +87 -82
  404. package/dist/core/item/type-registry.js.map +1 -1
  405. package/dist/core/output/mutation-projection.js +42 -26
  406. package/dist/core/output/mutation-projection.js.map +1 -1
  407. package/dist/core/schema/runtime-schema.js +34 -28
  408. package/dist/core/schema/runtime-schema.js.map +1 -1
  409. package/dist/core/search/semantic-defaults.js +64 -37
  410. package/dist/core/search/semantic-defaults.js.map +1 -1
  411. package/dist/core/search/vector-stores.js +32 -17
  412. package/dist/core/search/vector-stores.js.map +1 -1
  413. package/dist/core/sentry/helpers.js +31 -28
  414. package/dist/core/sentry/helpers.js.map +1 -1
  415. package/dist/core/sentry/instrument.js +54 -43
  416. package/dist/core/sentry/instrument.js.map +1 -1
  417. package/dist/core/store/front-matter-cache.js +239 -153
  418. package/dist/core/store/front-matter-cache.js.map +1 -1
  419. package/dist/core/store/item-store.js +33 -26
  420. package/dist/core/store/item-store.js.map +1 -1
  421. package/dist/core/store/settings.js +247 -203
  422. package/dist/core/store/settings.js.map +1 -1
  423. package/dist/core/test/background-runs.js +189 -160
  424. package/dist/core/test/background-runs.js.map +1 -1
  425. package/dist/mcp/server.js +387 -367
  426. package/dist/mcp/server.js.map +1 -1
  427. package/dist/sdk/cli-contracts/flag-contracts.js +111 -180
  428. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  429. package/dist/sdk/cli-contracts/tool-schema.js +76 -45
  430. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  431. package/dist/sdk/compose.d.ts +4 -1
  432. package/dist/sdk/compose.js +181 -115
  433. package/dist/sdk/compose.js.map +1 -1
  434. package/docs/RELEASING.md +2 -3
  435. package/package.json +2 -2
  436. package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
  437. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
  438. package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
  439. package/dist/cli-bundle/chunks/activity-EJBMXUBH.js +0 -16
  440. package/dist/cli-bundle/chunks/aggregate-MOC4TR2G.js.map +0 -1
  441. package/dist/cli-bundle/chunks/chunk-53ARXF2O.js.map +0 -7
  442. package/dist/cli-bundle/chunks/chunk-5IRVSKPS.js.map +0 -1
  443. package/dist/cli-bundle/chunks/chunk-5T6WPLRO.js.map +0 -7
  444. package/dist/cli-bundle/chunks/chunk-6T5ZIWBS.js.map +0 -7
  445. package/dist/cli-bundle/chunks/chunk-6YRAMXRS.js.map +0 -1
  446. package/dist/cli-bundle/chunks/chunk-7WDETKGP.js.map +0 -7
  447. package/dist/cli-bundle/chunks/chunk-A3UNLXNJ.js.map +0 -7
  448. package/dist/cli-bundle/chunks/chunk-AWN4PPH5.js.map +0 -7
  449. package/dist/cli-bundle/chunks/chunk-BOWQWXLI.js.map +0 -1
  450. package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js +0 -115
  451. package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js.map +0 -1
  452. package/dist/cli-bundle/chunks/chunk-CHRNYKNI.js.map +0 -7
  453. package/dist/cli-bundle/chunks/chunk-CY5IJMUM.js.map +0 -1
  454. package/dist/cli-bundle/chunks/chunk-D5LYZVGB.js.map +0 -1
  455. package/dist/cli-bundle/chunks/chunk-DJDXAU74.js.map +0 -7
  456. package/dist/cli-bundle/chunks/chunk-DORJSBGJ.js.map +0 -7
  457. package/dist/cli-bundle/chunks/chunk-DU66JUGT.js.map +0 -7
  458. package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js +0 -118
  459. package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js.map +0 -7
  460. package/dist/cli-bundle/chunks/chunk-FDEVKXC4.js.map +0 -1
  461. package/dist/cli-bundle/chunks/chunk-GF7EAR22.js.map +0 -7
  462. package/dist/cli-bundle/chunks/chunk-HIBK6H4S.js.map +0 -1
  463. package/dist/cli-bundle/chunks/chunk-IHXXUIXS.js.map +0 -1
  464. package/dist/cli-bundle/chunks/chunk-ISEKN64V.js +0 -35
  465. package/dist/cli-bundle/chunks/chunk-ISEKN64V.js.map +0 -7
  466. package/dist/cli-bundle/chunks/chunk-IZQOJR2B.js.map +0 -7
  467. package/dist/cli-bundle/chunks/chunk-JTRKME24.js.map +0 -1
  468. package/dist/cli-bundle/chunks/chunk-JZG5ADVE.js.map +0 -1
  469. package/dist/cli-bundle/chunks/chunk-K46GQ265.js.map +0 -1
  470. package/dist/cli-bundle/chunks/chunk-KGQ3W65B.js.map +0 -1
  471. package/dist/cli-bundle/chunks/chunk-KTMMTOIP.js.map +0 -7
  472. package/dist/cli-bundle/chunks/chunk-KYDYQMNW.js.map +0 -7
  473. package/dist/cli-bundle/chunks/chunk-NIBP3I7A.js.map +0 -1
  474. package/dist/cli-bundle/chunks/chunk-NO6Y6FB2.js.map +0 -7
  475. package/dist/cli-bundle/chunks/chunk-QE5UFCCO.js.map +0 -1
  476. package/dist/cli-bundle/chunks/chunk-RM6MHL6A.js.map +0 -7
  477. package/dist/cli-bundle/chunks/chunk-RPRW26NG.js.map +0 -1
  478. package/dist/cli-bundle/chunks/chunk-SNUK7H5J.js.map +0 -7
  479. package/dist/cli-bundle/chunks/chunk-T7ZMQI4J.js.map +0 -1
  480. package/dist/cli-bundle/chunks/chunk-UB3V5WUI.js.map +0 -1
  481. package/dist/cli-bundle/chunks/chunk-UFKNF23C.js.map +0 -7
  482. package/dist/cli-bundle/chunks/chunk-V3KLX7U7.js.map +0 -1
  483. package/dist/cli-bundle/chunks/chunk-VD3LKZFX.js.map +0 -1
  484. package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js +0 -32
  485. package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js.map +0 -1
  486. package/dist/cli-bundle/chunks/chunk-WTRUDJ3R.js.map +0 -1
  487. package/dist/cli-bundle/chunks/chunk-Z55WX4IQ.js.map +0 -1
  488. package/dist/cli-bundle/chunks/chunk-Z5BM2FKQ.js.map +0 -7
  489. package/dist/cli-bundle/chunks/chunk-ZEATCVAC.js.map +0 -7
  490. package/dist/cli-bundle/chunks/chunk-ZFIEEDTJ.js.map +0 -7
  491. package/dist/cli-bundle/chunks/chunk-ZIE6WXJ2.js.map +0 -1
  492. package/dist/cli-bundle/chunks/close-37KEHLYM.js +0 -14
  493. package/dist/cli-bundle/chunks/close-many-BFMP6HHK.js.map +0 -7
  494. package/dist/cli-bundle/chunks/close-many-CXJBOWWY.js.map +0 -1
  495. package/dist/cli-bundle/chunks/config-FIXJZEQK.js +0 -1541
  496. package/dist/cli-bundle/chunks/config-FIXJZEQK.js.map +0 -7
  497. package/dist/cli-bundle/chunks/config-X3ZVCUUG.js +0 -1531
  498. package/dist/cli-bundle/chunks/config-X3ZVCUUG.js.map +0 -1
  499. package/dist/cli-bundle/chunks/contracts-KP4QAGVW.js.map +0 -1
  500. package/dist/cli-bundle/chunks/contracts-SMOAN5NF.js.map +0 -7
  501. package/dist/cli-bundle/chunks/create-DFMNBKBS.js +0 -28
  502. package/dist/cli-bundle/chunks/get-AWK324RS.js.map +0 -7
  503. package/dist/cli-bundle/chunks/get-VYPIICPC.js.map +0 -1
  504. package/dist/cli-bundle/chunks/health-FBCVZGSX.js.map +0 -7
  505. package/dist/cli-bundle/chunks/health-Q66C43GN.js.map +0 -1
  506. package/dist/cli-bundle/chunks/history-5XUSLAJA.js +0 -18
  507. package/dist/cli-bundle/chunks/history-compact-2GHT32UX.js.map +0 -1
  508. package/dist/cli-bundle/chunks/history-compact-WLCQEKXS.js.map +0 -7
  509. package/dist/cli-bundle/chunks/history-redact-BVHWDXPR.js +0 -19
  510. package/dist/cli-bundle/chunks/history-repair-FY75IC26.js.map +0 -1
  511. package/dist/cli-bundle/chunks/history-repair-GABSDSVD.js.map +0 -7
  512. package/dist/cli-bundle/chunks/init-TRYJELH4.js +0 -21
  513. package/dist/cli-bundle/chunks/next-66BJB4N2.js.map +0 -7
  514. package/dist/cli-bundle/chunks/next-N5MWJTBY.js.map +0 -1
  515. package/dist/cli-bundle/chunks/plan-DQ7G4EDC.js.map +0 -7
  516. package/dist/cli-bundle/chunks/plan-ZHKZ7JVF.js.map +0 -1
  517. package/dist/cli-bundle/chunks/register-list-query-KY6Z6WV7.js.map +0 -7
  518. package/dist/cli-bundle/chunks/register-list-query-Y2VRHPCL.js.map +0 -1
  519. package/dist/cli-bundle/chunks/register-mutation-N6AYSKPM.js.map +0 -7
  520. package/dist/cli-bundle/chunks/register-mutation-PCARIGZS.js.map +0 -1
  521. package/dist/cli-bundle/chunks/register-operations-L6CYTOIH.js.map +0 -7
  522. package/dist/cli-bundle/chunks/register-operations-YAT6FUUB.js.map +0 -1
  523. package/dist/cli-bundle/chunks/register-setup-MPANILQF.js.map +0 -7
  524. package/dist/cli-bundle/chunks/register-setup-N7UGXYJC.js.map +0 -1
  525. package/dist/cli-bundle/chunks/restore-IRAKSWIW.js +0 -17
  526. package/dist/cli-bundle/chunks/telemetry-DIFPXCAT.js.map +0 -7
  527. package/dist/cli-bundle/chunks/telemetry-WTYFUPRL.js.map +0 -1
  528. package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js +0 -360
  529. package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js.map +0 -7
  530. package/dist/cli-bundle/chunks/test-all-XLPI4USF.js +0 -357
  531. package/dist/cli-bundle/chunks/test-all-XLPI4USF.js.map +0 -1
  532. package/dist/cli-bundle/chunks/test-runs-CA6K32RD.js.map +0 -1
  533. package/dist/cli-bundle/chunks/test-runs-LANLLPVO.js.map +0 -7
  534. package/dist/cli-bundle/chunks/update-UXDLTEOZ.js +0 -24
  535. package/dist/cli-bundle/chunks/validate-2G566PKQ.js.map +0 -7
  536. package/dist/cli-bundle/chunks/validate-BDPVXHHH.js.map +0 -1
  537. /package/dist/cli-bundle/chunks/{activity-MVSEND6D.js.map → activity-CUC4JY3U.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{activity-EJBMXUBH.js.map → activity-WEIEMM73.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{append-KDHT4GHI.js.map → append-H32VOR2Y.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{append-LEDBAM3K.js.map → append-UBM632FK.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js.map → chunk-2ASNV4DH.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js.map → chunk-2CHRYUXL.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{chunk-DRPF274X.js.map → chunk-3LCUASYG.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js.map → chunk-3Q2HBMTI.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js.map → chunk-55XRYWEG.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js.map → chunk-A6VOGKBA.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js.map → chunk-AIAIXG7I.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js.map → chunk-BTX5MIQF.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js.map → chunk-CYBDUHNO.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js.map → chunk-CZPVDLD2.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js.map → chunk-EUKTMRN3.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js.map → chunk-FFOQHGNH.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js.map → chunk-GFMSLORL.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js.map → chunk-H4GRLYJS.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js.map → chunk-HQTPRV4D.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js.map → chunk-JMK5GCK2.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js.map → chunk-K2VYLVX4.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js.map → chunk-KCO2EAN5.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js.map → chunk-KLXF7NCC.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js.map → chunk-LRKMWUUV.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js.map → chunk-LTRAF2D7.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js.map → chunk-MRD4T5LF.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js.map → chunk-N2JSWVWG.js.map} +0 -0
  564. /package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js.map → chunk-QH3FSKRJ.js.map} +0 -0
  565. /package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js.map → chunk-S62UANU7.js.map} +0 -0
  566. /package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js.map → chunk-U2BEEM2X.js.map} +0 -0
  567. /package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js.map → chunk-UT73HUPC.js.map} +0 -0
  568. /package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js.map → chunk-UTSH5GWX.js.map} +0 -0
  569. /package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js.map → chunk-Y4NRKBFW.js.map} +0 -0
  570. /package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js.map → chunk-YPKFV2JR.js.map} +0 -0
  571. /package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js.map → chunk-ZNHEYCDD.js.map} +0 -0
  572. /package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
  573. /package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js.map → claim-SENTPZBN.js.map} +0 -0
  574. /package/dist/cli-bundle/chunks/{claim-6NINZYB3.js.map → claim-Z7MEQCBT.js.map} +0 -0
  575. /package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js.map → close-424MX4CU.js.map} +0 -0
  576. /package/dist/cli-bundle/chunks/{close-37KEHLYM.js.map → close-YCWQQPDS.js.map} +0 -0
  577. /package/dist/cli-bundle/chunks/{comments-ETHABIY6.js.map → comments-4FGNTSNV.js.map} +0 -0
  578. /package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js.map → comments-7YS5MY5X.js.map} +0 -0
  579. /package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js.map → context-LHVKJSPJ.js.map} +0 -0
  580. /package/dist/cli-bundle/chunks/{context-XDI4DKKT.js.map → context-ZQY54JNS.js.map} +0 -0
  581. /package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js.map → copy-GYNQQPW2.js.map} +0 -0
  582. /package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js.map → copy-TLW7JTQT.js.map} +0 -0
  583. /package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js.map → create-VSKYSOCD.js.map} +0 -0
  584. /package/dist/cli-bundle/chunks/{create-DFMNBKBS.js.map → create-XTMAPS7I.js.map} +0 -0
  585. /package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js.map → delete-4W5JYCEG.js.map} +0 -0
  586. /package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js.map → delete-ANTOTI2I.js.map} +0 -0
  587. /package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js.map → deps-HPPE6MJN.js.map} +0 -0
  588. /package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js.map → deps-ZQZN54EZ.js.map} +0 -0
  589. /package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js.map → docs-RPOVFMP3.js.map} +0 -0
  590. /package/dist/cli-bundle/chunks/{docs-2TIFR62T.js.map → docs-XJNYBJGE.js.map} +0 -0
  591. /package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js.map → eval-DM6JBZTS.js.map} +0 -0
  592. /package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js.map → eval-RFBI5FGS.js.map} +0 -0
  593. /package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js.map → extension-B3YY4WY5.js.map} +0 -0
  594. /package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js.map → extension-TTSEFQTS.js.map} +0 -0
  595. /package/dist/cli-bundle/chunks/{files-DF3HO6XK.js.map → files-5D65CHGE.js.map} +0 -0
  596. /package/dist/cli-bundle/chunks/{files-T5ODMETM.js.map → files-GPIG77EN.js.map} +0 -0
  597. /package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js.map → focus-C3PEJV2C.js.map} +0 -0
  598. /package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js.map → focus-ZHN7WIGX.js.map} +0 -0
  599. /package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js.map → gc-D4JQ6OWN.js.map} +0 -0
  600. /package/dist/cli-bundle/chunks/{gc-FULIVYR4.js.map → gc-VZIXDL32.js.map} +0 -0
  601. /package/dist/cli-bundle/chunks/{history-5XUSLAJA.js.map → history-DD7L7BNL.js.map} +0 -0
  602. /package/dist/cli-bundle/chunks/{history-X4OSES6K.js.map → history-IL7XCEX2.js.map} +0 -0
  603. /package/dist/cli-bundle/chunks/{history-redact-BVHWDXPR.js.map → history-redact-IX4YEWMY.js.map} +0 -0
  604. /package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js.map → history-redact-VYCWQFK7.js.map} +0 -0
  605. /package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js.map → init-F27NHENZ.js.map} +0 -0
  606. /package/dist/cli-bundle/chunks/{init-TRYJELH4.js.map → init-HHVQQP6C.js.map} +0 -0
  607. /package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js.map → learnings-HJVDQIGY.js.map} +0 -0
  608. /package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js.map → learnings-XSFSUUWK.js.map} +0 -0
  609. /package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js.map → list-HPMEKCAA.js.map} +0 -0
  610. /package/dist/cli-bundle/chunks/{list-ROT7JF62.js.map → list-VMPWTURB.js.map} +0 -0
  611. /package/dist/cli-bundle/chunks/{notes-FW6YFLND.js.map → notes-GDZIKGR6.js.map} +0 -0
  612. /package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js.map → notes-WDDBPC4D.js.map} +0 -0
  613. /package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js.map → profile-CCOKZ2IQ.js.map} +0 -0
  614. /package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js.map → profile-HUCENIEQ.js.map} +0 -0
  615. /package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js.map → restore-4CBWUMCX.js.map} +0 -0
  616. /package/dist/cli-bundle/chunks/{restore-IRAKSWIW.js.map → restore-5UEAGG3W.js.map} +0 -0
  617. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
  618. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
  619. /package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js.map → schema-TDGK6N3I.js.map} +0 -0
  620. /package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js.map → schema-UE5KKAUX.js.map} +0 -0
  621. /package/dist/cli-bundle/chunks/{search-KP6H7COV.js.map → search-FP7MEU4S.js.map} +0 -0
  622. /package/dist/cli-bundle/chunks/{search-CX5UMV4H.js.map → search-K4CFLQ5S.js.map} +0 -0
  623. /package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js.map → stats-NJJCALEZ.js.map} +0 -0
  624. /package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js.map → stats-XT6QRKQY.js.map} +0 -0
  625. /package/dist/cli-bundle/chunks/{test-QNDXZQCW.js.map → test-UFSJ5YIO.js.map} +0 -0
  626. /package/dist/cli-bundle/chunks/{test-HU2BS7EY.js.map → test-YCDAUBWF.js.map} +0 -0
  627. /package/dist/cli-bundle/chunks/{update-UXDLTEOZ.js.map → update-MTCFES6X.js.map} +0 -0
  628. /package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js.map → update-Y5WQVT5O.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  extractReferencedPmItemIdsFromCommand
3
- } from "./chunk-DU66JUGT.js";
3
+ } from "./chunk-IG5JYZGU.js";
4
4
  import {
5
5
  buildRemediationCommands
6
6
  } from "./chunk-JINYH2DB.js";
@@ -9,29 +9,30 @@ import {
9
9
  } from "./chunk-7M2HAZEB.js";
10
10
  import {
11
11
  scanHistoryDrift
12
- } from "./chunk-Z5BM2FKQ.js";
13
- import "./chunk-JIP67N2K.js";
14
- import "./chunk-BN3CWK6G.js";
15
- import "./chunk-E2Q2ULMR.js";
16
- import "./chunk-53ARXF2O.js";
17
- import "./chunk-7WDETKGP.js";
12
+ } from "./chunk-UGLU6Q2I.js";
13
+ import "./chunk-Y4NRKBFW.js";
14
+ import "./chunk-ZNHEYCDD.js";
15
+ import "./chunk-N2JSWVWG.js";
16
+ import "./chunk-66Z3X7ZG.js";
17
+ import "./chunk-N3QCJS4M.js";
18
18
  import "./chunk-5HIZDR5A.js";
19
- import "./chunk-NO6Y6FB2.js";
20
- import "./chunk-DRPF274X.js";
21
- import "./chunk-IZQOJR2B.js";
22
- import "./chunk-F6VH3LFC.js";
19
+ import "./chunk-SPM2XLWI.js";
20
+ import "./chunk-3LCUASYG.js";
21
+ import "./chunk-GRRG3MCT.js";
22
+ import "./chunk-BVZZN2LH.js";
23
+ import "./chunk-XWGEMNBR.js";
23
24
  import {
24
25
  listAllFrontMatterWithBody
25
- } from "./chunk-LBH7UYKY.js";
26
+ } from "./chunk-JXAUVO6X.js";
26
27
  import {
27
28
  CURRENT_ITEM_FORMAT_VERSION,
28
29
  effectiveItemFormatVersion,
29
30
  normalizeStatusInput,
30
31
  scanItemFormatVersions
31
- } from "./chunk-ZFIEEDTJ.js";
32
+ } from "./chunk-IEEJQCZ4.js";
32
33
  import {
33
34
  nowIso
34
- } from "./chunk-MLHX6DN5.js";
35
+ } from "./chunk-AIAIXG7I.js";
35
36
  import {
36
37
  DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS,
37
38
  DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS,
@@ -47,7 +48,7 @@ import {
47
48
  resolvePmRoot,
48
49
  resolveRuntimeStatusRegistry,
49
50
  toNonEmptyStringOrUndefined
50
- } from "./chunk-SNUK7H5J.js";
51
+ } from "./chunk-7NSPKJUS.js";
51
52
 
52
53
  // dist/cli/commands/validate.js
53
54
  import fs from "node:fs/promises";
@@ -417,7 +418,7 @@ function summarizeMissingLinkedPathRows(rows) {
417
418
  !(function() {
418
419
  try {
419
420
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
420
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "a9087567-b334-5e9c-8ed7-e52d8cb35801");
421
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "96011574-703c-57e6-979f-dbae265fd01b");
421
422
  } catch (e2) {
422
423
  }
423
424
  })();
@@ -951,61 +952,59 @@ function summarizeDuplicateIssueCodes(duplicates, verboseDiagnostics) {
951
952
  warnings: [`${DUPLICATE_ISSUE_CODE_WARNING_TOKEN}:${duplicates.length}`]
952
953
  };
953
954
  }
954
- function buildMetadataCheck(items, metadataPolicy, statusRegistry, verboseDiagnostics) {
955
- const missingByField = Object.fromEntries(SUPPORTED_METADATA_REQUIRED_FIELDS.map((field) => [field, []]));
956
- const itemsById = new Map(items.map((item) => [item.id, item]));
957
- const enforcePlanningFieldsOnTerminal = metadataPolicy.profile === "strict";
955
+ function initializeMissingMetadataByField() {
956
+ return Object.fromEntries(SUPPORTED_METADATA_REQUIRED_FIELDS.map((field) => [field, []]));
957
+ }
958
+ function collectMissingMetadataByField(items, statusRegistry, enforcePlanningFieldsOnTerminal) {
959
+ const missingByField = initializeMissingMetadataByField();
958
960
  for (const item of items) {
959
961
  for (const field of SUPPORTED_METADATA_REQUIRED_FIELDS) {
960
- if (!isMetadataFieldMissing(item, field, statusRegistry, enforcePlanningFieldsOnTerminal)) {
961
- continue;
962
+ if (isMetadataFieldMissing(item, field, statusRegistry, enforcePlanningFieldsOnTerminal)) {
963
+ missingByField[field].push(item.id);
962
964
  }
963
- missingByField[field].push(item.id);
964
965
  }
965
966
  }
967
+ return missingByField;
968
+ }
969
+ function buildMetadataWarningTokens(metadataPolicy, missingByField, duplicateWarnings) {
966
970
  const warningTokens = [...metadataPolicy.warnings];
967
971
  for (const field of metadataPolicy.required_fields) {
968
972
  const missingItems = missingByField[field];
969
- if (missingItems.length === 0) {
970
- continue;
973
+ if (missingItems.length > 0) {
974
+ warningTokens.push(`${METADATA_WARNING_TOKEN_BY_FIELD[field]}:${missingItems.length}`);
971
975
  }
972
- warningTokens.push(`${METADATA_WARNING_TOKEN_BY_FIELD[field]}:${missingItems.length}`);
973
976
  }
974
- const duplicateIssueCodes = findDuplicateIssueCodes(items);
975
- const duplicateIssueCodeSummary = summarizeDuplicateIssueCodes(duplicateIssueCodes, verboseDiagnostics);
976
- warningTokens.push(...duplicateIssueCodeSummary.warnings);
977
+ warningTokens.push(...duplicateWarnings);
978
+ return warningTokens;
979
+ }
980
+ function buildMetadataCounts(metadataPolicy, missingByField) {
977
981
  const counts = {};
978
982
  for (const field of metadataPolicy.required_fields) {
979
- const value = missingByField[field]?.length ?? 0;
983
+ const missing = missingByField[field];
984
+ const value = missing ? missing.length : 0;
980
985
  const countKey = METADATA_COUNT_KEY_BY_FIELD[field];
981
986
  if (value > 0 && countKey) {
982
987
  counts[countKey] = value;
983
988
  }
984
989
  }
985
- const missingFieldOccurrences = [];
990
+ return counts;
991
+ }
992
+ function buildMissingFieldOccurrences(metadataPolicy, missingByField, itemsById) {
993
+ const occurrences = [];
986
994
  for (const field of metadataPolicy.required_fields) {
987
- for (const itemId of missingByField[field] ?? []) {
995
+ const missing = missingByField[field];
996
+ if (!missing) {
997
+ continue;
998
+ }
999
+ for (const itemId of missing) {
988
1000
  const itemType = itemsById.get(itemId)?.type;
989
- missingFieldOccurrences.push({ item_type: typeof itemType === "string" && itemType.length > 0 ? itemType : "Unknown", field });
1001
+ const normalizedItemType = typeof itemType === "string" && itemType.length > 0 ? itemType : "Unknown";
1002
+ occurrences.push({ item_type: normalizedItemType, field });
990
1003
  }
991
1004
  }
992
- const missingByType = buildMissingByTypeCounts(missingFieldOccurrences);
993
- const details = {
994
- checked_items: items.length,
995
- metadata_profile: metadataPolicy.profile,
996
- metadata_profile_source: metadataPolicy.profile_source,
997
- metadata_profile_fallback_to_core: metadataPolicy.fallback_to_core,
998
- required_fields: [...metadataPolicy.required_fields],
999
- supported_required_fields: [...SUPPORTED_METADATA_REQUIRED_FIELDS],
1000
- counts,
1001
- missing_by_type: missingByType,
1002
- duplicate_issue_codes_count: duplicateIssueCodes.length,
1003
- duplicate_issue_codes: duplicateIssueCodeSummary.rows,
1004
- duplicate_issue_codes_truncated: duplicateIssueCodeSummary.truncated
1005
- };
1006
- if (metadataPolicy.configured_custom_fields.length > 0) {
1007
- details.configured_custom_required_fields = [...metadataPolicy.configured_custom_fields];
1008
- }
1005
+ return occurrences;
1006
+ }
1007
+ function attachMissingMetadataItemIds(details, metadataPolicy, missingByField, verboseDiagnostics) {
1009
1008
  for (const field of metadataPolicy.required_fields) {
1010
1009
  const missing = missingByField[field];
1011
1010
  if (!missing || missing.length === 0) {
@@ -1020,14 +1019,62 @@ function buildMetadataCheck(items, metadataPolicy, statusRegistry, verboseDiagno
1020
1019
  details[idsKey] = summarized.values;
1021
1020
  details[truncatedKey] = summarized.truncated;
1022
1021
  }
1023
- const closeReasonBackfillRows = metadataPolicy.required_fields.includes("close_reason") ? (missingByField.close_reason ?? []).map((itemId) => ({
1022
+ }
1023
+ function buildCloseReasonBackfillRows(metadataPolicy, missingByField, itemsById) {
1024
+ if (!metadataPolicy.required_fields.includes("close_reason")) {
1025
+ return [];
1026
+ }
1027
+ const missing = missingByField.close_reason;
1028
+ if (!missing) {
1029
+ return [];
1030
+ }
1031
+ return missing.map((itemId) => ({
1024
1032
  id: itemId,
1025
1033
  resolution: toNonEmptyStringOrUndefined(itemsById.get(itemId)?.resolution)
1026
- })) : [];
1027
- const estimateBackfillRows = metadataPolicy.required_fields.includes("estimated_minutes") ? (missingByField.estimated_minutes ?? []).map((itemId) => ({
1034
+ }));
1035
+ }
1036
+ function buildEstimateBackfillRows(metadataPolicy, missingByField, itemsById) {
1037
+ if (!metadataPolicy.required_fields.includes("estimated_minutes")) {
1038
+ return [];
1039
+ }
1040
+ const missing = missingByField.estimated_minutes;
1041
+ if (!missing) {
1042
+ return [];
1043
+ }
1044
+ return missing.map((itemId) => ({
1028
1045
  id: itemId,
1029
1046
  type: toNonEmptyStringOrUndefined(itemsById.get(itemId)?.type)
1030
- })) : [];
1047
+ }));
1048
+ }
1049
+ function buildMetadataCheck(items, metadataPolicy, statusRegistry, verboseDiagnostics) {
1050
+ const itemsById = new Map(items.map((item) => [item.id, item]));
1051
+ const enforcePlanningFieldsOnTerminal = metadataPolicy.profile === "strict";
1052
+ const missingByField = collectMissingMetadataByField(items, statusRegistry, enforcePlanningFieldsOnTerminal);
1053
+ const duplicateIssueCodes = findDuplicateIssueCodes(items);
1054
+ const duplicateIssueCodeSummary = summarizeDuplicateIssueCodes(duplicateIssueCodes, verboseDiagnostics);
1055
+ const warningTokens = buildMetadataWarningTokens(metadataPolicy, missingByField, duplicateIssueCodeSummary.warnings);
1056
+ const counts = buildMetadataCounts(metadataPolicy, missingByField);
1057
+ const missingFieldOccurrences = buildMissingFieldOccurrences(metadataPolicy, missingByField, itemsById);
1058
+ const missingByType = buildMissingByTypeCounts(missingFieldOccurrences);
1059
+ const details = {
1060
+ checked_items: items.length,
1061
+ metadata_profile: metadataPolicy.profile,
1062
+ metadata_profile_source: metadataPolicy.profile_source,
1063
+ metadata_profile_fallback_to_core: metadataPolicy.fallback_to_core,
1064
+ required_fields: [...metadataPolicy.required_fields],
1065
+ supported_required_fields: [...SUPPORTED_METADATA_REQUIRED_FIELDS],
1066
+ counts,
1067
+ missing_by_type: missingByType,
1068
+ duplicate_issue_codes_count: duplicateIssueCodes.length,
1069
+ duplicate_issue_codes: duplicateIssueCodeSummary.rows,
1070
+ duplicate_issue_codes_truncated: duplicateIssueCodeSummary.truncated
1071
+ };
1072
+ if (metadataPolicy.configured_custom_fields.length > 0) {
1073
+ details.configured_custom_required_fields = [...metadataPolicy.configured_custom_fields];
1074
+ }
1075
+ attachMissingMetadataItemIds(details, metadataPolicy, missingByField, verboseDiagnostics);
1076
+ const closeReasonBackfillRows = buildCloseReasonBackfillRows(metadataPolicy, missingByField, itemsById);
1077
+ const estimateBackfillRows = buildEstimateBackfillRows(metadataPolicy, missingByField, itemsById);
1031
1078
  return {
1032
1079
  check: {
1033
1080
  name: "metadata",
@@ -1268,6 +1315,24 @@ function sharedDirectoryPrefixLength(left, right) {
1268
1315
  }
1269
1316
  return count;
1270
1317
  }
1318
+ function scoreOrphanOwnerCandidate(pathValue, linkedPath) {
1319
+ const linkedDir = directoryOf(linkedPath);
1320
+ const orphanDir = directoryOf(pathValue);
1321
+ const directoryPrefix = linkedPath.endsWith("/") ? linkedPath : `${linkedPath}/`;
1322
+ const isDirectoryPrefix = pathValue.startsWith(directoryPrefix);
1323
+ const sameDirectory = linkedDir.length > 0 && linkedDir === orphanDir;
1324
+ const sharedPrefixLength = sharedDirectoryPrefixLength(pathValue, linkedPath);
1325
+ if (!isDirectoryPrefix && !sameDirectory && sharedPrefixLength === 0) {
1326
+ return null;
1327
+ }
1328
+ if (isDirectoryPrefix) {
1329
+ return { score: linkedPath.length + 1e3, confidence: "path_prefix" };
1330
+ }
1331
+ return sameDirectory ? { score: sharedPrefixLength + 500, confidence: "same_directory" } : { score: sharedPrefixLength, confidence: "shared_directory" };
1332
+ }
1333
+ function shouldReplaceOrphanOwnerCandidate(best, item, score) {
1334
+ return best === void 0 || score > best.score || score === best.score && item.id.localeCompare(best.item.id) < 0;
1335
+ }
1271
1336
  function findOrphanOwnerCandidate(pathValue, classification, items) {
1272
1337
  const linkKind = classification === "docs_unowned" ? "docs" : "files";
1273
1338
  let best;
@@ -1281,21 +1346,15 @@ function findOrphanOwnerCandidate(pathValue, classification, items) {
1281
1346
  if (linkedPath.length === 0 || linkedPath === pathValue) {
1282
1347
  continue;
1283
1348
  }
1284
- const linkedDir = directoryOf(linkedPath);
1285
- const orphanDir = directoryOf(pathValue);
1286
- const directoryPrefix = linkedPath.endsWith("/") ? linkedPath : `${linkedPath}/`;
1287
- const isDirectoryPrefix = pathValue.startsWith(directoryPrefix);
1288
- const sameDirectory = linkedDir.length > 0 && linkedDir === orphanDir;
1289
- const sharedPrefixLength = sharedDirectoryPrefixLength(pathValue, linkedPath);
1290
- if (!isDirectoryPrefix && !sameDirectory && sharedPrefixLength === 0) {
1349
+ const scored = scoreOrphanOwnerCandidate(pathValue, linkedPath);
1350
+ if (scored === null) {
1291
1351
  continue;
1292
1352
  }
1293
- const score = isDirectoryPrefix ? linkedPath.length + 1e3 : sameDirectory ? sharedPrefixLength + 500 : sharedPrefixLength;
1294
- if (best === void 0 || score > best.score || score === best.score && item.id.localeCompare(best.item.id) < 0) {
1353
+ if (shouldReplaceOrphanOwnerCandidate(best, item, scored.score)) {
1295
1354
  best = {
1296
1355
  item,
1297
- score,
1298
- confidence: isDirectoryPrefix ? "path_prefix" : sameDirectory ? "same_directory" : "shared_directory"
1356
+ score: scored.score,
1357
+ confidence: scored.confidence
1299
1358
  };
1300
1359
  }
1301
1360
  }
@@ -1328,74 +1387,74 @@ function buildOrphanedPathRows(orphanedFiles, items) {
1328
1387
  function summarizeOrphanedPathRows(rows) {
1329
1388
  return rows.map((row) => `${row.path}:${row.classification} owner_candidate=${row.owner_candidate?.id ?? "unowned"} hint=${JSON.stringify(row.remediation_hint)}`);
1330
1389
  }
1331
- function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverity, parentCycleSeverity, statusRegistry, lifecyclePatternPolicy, verboseDiagnostics, idPrefix = "pm") {
1390
+ function closureLikeFieldsForItem(item, lifecyclePatternPolicy) {
1391
+ return Object.entries(lifecyclePatternPolicy.closure_like_metadata_field_patterns).filter(([field, patterns]) => {
1392
+ const value = toMeaningfulString(item[field]);
1393
+ return value ? patterns.some((pattern) => value.toLowerCase().includes(pattern)) : false;
1394
+ }).map(([field]) => field).sort((left, right) => left.localeCompare(right));
1395
+ }
1396
+ function buildTerminalParentFixRow(item, parent, itemsById, canonicalIdByLowercase, statusRegistry) {
1397
+ const grandparentId = toMeaningfulString(parent.parent);
1398
+ const grandparent = grandparentId ? itemsById.get(canonicalIdByLowercase.get(grandparentId.toLowerCase()) ?? grandparentId) : void 0;
1399
+ return {
1400
+ id: item.id,
1401
+ parent_id: parent.id,
1402
+ grandparent_id: grandparent?.id,
1403
+ grandparent_active: grandparent !== void 0 && !isTerminalStatus(grandparent.status, statusRegistry)
1404
+ };
1405
+ }
1406
+ function staleBlockerReasonsForItem(item, blockedStatuses, statusRegistry, lifecyclePatternPolicy) {
1407
+ const blockedBy = toMeaningfulString(item.blocked_by);
1408
+ const blockedReason = toMeaningfulString(item.blocked_reason);
1409
+ const blockedReasonNormalized = blockedReason?.toLowerCase();
1410
+ const normalizedStatus = normalizeStatusForRegistry(item.status, statusRegistry);
1411
+ const reasons = [];
1412
+ if (!blockedStatuses.has(normalizedStatus)) {
1413
+ if (blockedBy) {
1414
+ reasons.push("non_blocked_status_has_blocked_by");
1415
+ }
1416
+ if (blockedReason) {
1417
+ reasons.push("non_blocked_status_has_blocked_reason");
1418
+ }
1419
+ return reasons;
1420
+ }
1421
+ if (!blockedBy && !blockedReason) {
1422
+ reasons.push("blocked_status_missing_blocker_context");
1423
+ }
1424
+ if (blockedReasonNormalized?.includes("no active blocker")) {
1425
+ reasons.push("blocked_status_reason_reports_no_active_blocker");
1426
+ }
1427
+ if (blockedReasonNormalized && lifecyclePatternPolicy.stale_blocker_reason_patterns.some((pattern) => blockedReasonNormalized.includes(pattern))) {
1428
+ reasons.push("blocked_status_reason_matches_stale_pattern");
1429
+ }
1430
+ return reasons;
1431
+ }
1432
+ function collectLifecycleScanRows(items, includeStaleBlockers, statusRegistry, lifecyclePatternPolicy) {
1332
1433
  const itemsById = new Map(items.map((item) => [item.id, item]));
1434
+ const canonicalIdByLowercase = new Map(items.map((item) => [item.id.toLowerCase(), item.id]));
1333
1435
  const blockedStatuses = statusRegistry.blocked_statuses.size > 0 ? statusRegistry.blocked_statuses : /* @__PURE__ */ new Set(["blocked"]);
1334
- const activeItems = items.filter((item) => !isTerminalStatus(item.status, statusRegistry));
1335
- const closureLikeRows = [];
1336
- const terminalParentRows = [];
1337
- const terminalParentFixRows = [];
1338
- const staleBlockerRows = [];
1339
- for (const item of activeItems) {
1340
- const closureLikeFields = Object.entries(lifecyclePatternPolicy.closure_like_metadata_field_patterns).filter(([field, patterns]) => {
1341
- const value = toMeaningfulString(item[field]);
1342
- if (!value) {
1343
- return false;
1344
- }
1345
- const normalized = value.toLowerCase();
1346
- return patterns.some((pattern) => normalized.includes(pattern));
1347
- }).map(([field]) => field).sort((left, right) => left.localeCompare(right));
1436
+ const rows = {
1437
+ activeItems: items.filter((item) => !isTerminalStatus(item.status, statusRegistry)),
1438
+ closureLikeRows: [],
1439
+ terminalParentRows: [],
1440
+ terminalParentFixRows: [],
1441
+ staleBlockerRows: []
1442
+ };
1443
+ for (const item of rows.activeItems) {
1444
+ const closureLikeFields = closureLikeFieldsForItem(item, lifecyclePatternPolicy);
1348
1445
  if (closureLikeFields.length > 0) {
1349
- closureLikeRows.push({
1350
- id: item.id,
1351
- fields: closureLikeFields
1352
- });
1446
+ rows.closureLikeRows.push({ id: item.id, fields: closureLikeFields });
1353
1447
  }
1354
1448
  const parentId = toMeaningfulString(item.parent);
1355
- if (parentId) {
1356
- const parent = itemsById.get(parentId);
1357
- if (parent && isTerminalStatus(parent.status, statusRegistry)) {
1358
- terminalParentRows.push({
1359
- id: item.id,
1360
- parent_id: parent.id,
1361
- parent_status: parent.status
1362
- });
1363
- const grandparentId = toMeaningfulString(parent.parent);
1364
- const grandparent = grandparentId ? itemsById.get(grandparentId) : void 0;
1365
- terminalParentFixRows.push({
1366
- id: item.id,
1367
- parent_id: parent.id,
1368
- grandparent_id: grandparent?.id,
1369
- grandparent_active: grandparent !== void 0 && !isTerminalStatus(grandparent.status, statusRegistry)
1370
- });
1371
- }
1449
+ const parent = parentId ? itemsById.get(canonicalIdByLowercase.get(parentId.toLowerCase()) ?? parentId) : void 0;
1450
+ if (parent && isTerminalStatus(parent.status, statusRegistry)) {
1451
+ rows.terminalParentRows.push({ id: item.id, parent_id: parent.id, parent_status: parent.status });
1452
+ rows.terminalParentFixRows.push(buildTerminalParentFixRow(item, parent, itemsById, canonicalIdByLowercase, statusRegistry));
1372
1453
  }
1373
1454
  if (includeStaleBlockers) {
1374
- const blockedBy = toMeaningfulString(item.blocked_by);
1375
- const blockedReason = toMeaningfulString(item.blocked_reason);
1376
- const blockedReasonNormalized = blockedReason?.toLowerCase();
1377
- const reasons = [];
1378
- const normalizedStatus = normalizeStatusForRegistry(item.status, statusRegistry);
1379
- if (!blockedStatuses.has(normalizedStatus)) {
1380
- if (blockedBy) {
1381
- reasons.push("non_blocked_status_has_blocked_by");
1382
- }
1383
- if (blockedReason) {
1384
- reasons.push("non_blocked_status_has_blocked_reason");
1385
- }
1386
- } else {
1387
- if (!blockedBy && !blockedReason) {
1388
- reasons.push("blocked_status_missing_blocker_context");
1389
- }
1390
- if (blockedReasonNormalized?.includes("no active blocker")) {
1391
- reasons.push("blocked_status_reason_reports_no_active_blocker");
1392
- }
1393
- if (blockedReasonNormalized && lifecyclePatternPolicy.stale_blocker_reason_patterns.some((pattern) => blockedReasonNormalized.includes(pattern))) {
1394
- reasons.push("blocked_status_reason_matches_stale_pattern");
1395
- }
1396
- }
1455
+ const reasons = staleBlockerReasonsForItem(item, blockedStatuses, statusRegistry, lifecyclePatternPolicy);
1397
1456
  if (reasons.length > 0) {
1398
- staleBlockerRows.push({
1457
+ rows.staleBlockerRows.push({
1399
1458
  id: item.id,
1400
1459
  status: item.status,
1401
1460
  reasons: [...new Set(reasons)].sort((left, right) => left.localeCompare(right))
@@ -1403,32 +1462,117 @@ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverit
1403
1462
  }
1404
1463
  }
1405
1464
  }
1406
- closureLikeRows.sort((left, right) => left.id.localeCompare(right.id));
1407
- terminalParentRows.sort((left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id));
1408
- terminalParentFixRows.sort((left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id));
1409
- staleBlockerRows.sort((left, right) => left.id.localeCompare(right.id));
1410
- const dependencyCycleDiagnostics = detectLifecycleDependencyCycles(activeItems, idPrefix);
1411
- const parentCycleDiagnostics = detectLifecycleParentCycles(items);
1465
+ return rows;
1466
+ }
1467
+ function sortLifecycleScanRows(rows) {
1468
+ rows.closureLikeRows.sort((left, right) => left.id.localeCompare(right.id));
1469
+ rows.terminalParentRows.sort((left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id));
1470
+ rows.terminalParentFixRows.sort((left, right) => left.id.localeCompare(right.id) || left.parent_id.localeCompare(right.parent_id));
1471
+ rows.staleBlockerRows.sort((left, right) => left.id.localeCompare(right.id));
1472
+ }
1473
+ function lifecycleCycleWarningToken(prefix, severity, count) {
1474
+ if (count <= 0 || severity === "off") {
1475
+ return null;
1476
+ }
1477
+ return `${severity === "error" ? `${prefix}_error` : prefix}:${count}`;
1478
+ }
1479
+ function buildLifecycleWarnings(rows, includeStaleBlockers, dependencyCycleSeverity, parentCycleSeverity, dependencyCycleCount, parentCycleCount) {
1412
1480
  const warnings = [];
1413
- if (closureLikeRows.length > 0) {
1414
- warnings.push(`validate_lifecycle_active_closure_like_metadata:${closureLikeRows.length}`);
1481
+ if (rows.closureLikeRows.length > 0) {
1482
+ warnings.push(`validate_lifecycle_active_closure_like_metadata:${rows.closureLikeRows.length}`);
1415
1483
  }
1416
- if (terminalParentRows.length > 0) {
1417
- warnings.push(`validate_lifecycle_active_terminal_parent:${terminalParentRows.length}`);
1484
+ if (rows.terminalParentRows.length > 0) {
1485
+ warnings.push(`validate_lifecycle_active_terminal_parent:${rows.terminalParentRows.length}`);
1418
1486
  }
1419
- if (includeStaleBlockers && staleBlockerRows.length > 0) {
1420
- warnings.push(`validate_lifecycle_stale_blockers:${staleBlockerRows.length}`);
1487
+ if (includeStaleBlockers && rows.staleBlockerRows.length > 0) {
1488
+ warnings.push(`validate_lifecycle_stale_blockers:${rows.staleBlockerRows.length}`);
1421
1489
  }
1422
- if (dependencyCycleDiagnostics.cycle_count > 0 && dependencyCycleSeverity !== "off") {
1423
- warnings.push(`${dependencyCycleSeverity === "error" ? "validate_lifecycle_dependency_cycles_error" : "validate_lifecycle_dependency_cycles"}:${dependencyCycleDiagnostics.cycle_count}`);
1490
+ const dependencyWarning = lifecycleCycleWarningToken("validate_lifecycle_dependency_cycles", dependencyCycleSeverity, dependencyCycleCount);
1491
+ const parentWarning = lifecycleCycleWarningToken("validate_hierarchy_parent_cycle", parentCycleSeverity, parentCycleCount);
1492
+ return [...warnings, ...dependencyWarning ? [dependencyWarning] : [], ...parentWarning ? [parentWarning] : []];
1493
+ }
1494
+ async function linkedArtifactIsMissing(workspaceRoot, artifactPath) {
1495
+ const absolutePath = path.isAbsolute(artifactPath) ? artifactPath : path.resolve(workspaceRoot, artifactPath);
1496
+ try {
1497
+ const stats = await fs.stat(absolutePath);
1498
+ return !stats.isFile() && !stats.isDirectory();
1499
+ } catch (error) {
1500
+ const code = typeof error === "object" && error !== null && "code" in error ? error.code : void 0;
1501
+ return code === "ENOENT" || code === "ENOTDIR";
1424
1502
  }
1425
- if (parentCycleDiagnostics.cycle_count > 0 && parentCycleSeverity !== "off") {
1426
- warnings.push(`${parentCycleSeverity === "error" ? "validate_hierarchy_parent_cycle_error" : "validate_hierarchy_parent_cycle"}:${parentCycleDiagnostics.cycle_count}`);
1503
+ }
1504
+ async function collectLinkedPathScanState(items, workspaceRoot) {
1505
+ const state = {
1506
+ linkedProjectPaths: /* @__PURE__ */ new Set(),
1507
+ remoteLinkedPaths: /* @__PURE__ */ new Set(),
1508
+ missingLinkedPaths: [],
1509
+ staleLinkRows: []
1510
+ };
1511
+ for (const item of items) {
1512
+ const linkedArtifactGroups = [
1513
+ { link_kind: "files", artifacts: item.files ?? [] },
1514
+ { link_kind: "docs", artifacts: item.docs ?? [] }
1515
+ ];
1516
+ for (const group of linkedArtifactGroups) {
1517
+ for (const artifact of group.artifacts) {
1518
+ if (artifact.scope !== "project") {
1519
+ continue;
1520
+ }
1521
+ if (isRemoteLinkedArtifactReference(artifact.path)) {
1522
+ state.remoteLinkedPaths.add(artifact.path.trim());
1523
+ continue;
1524
+ }
1525
+ const normalizedPath = normalizeRelativePath(artifact.path);
1526
+ if (normalizedPath.length === 0) {
1527
+ continue;
1528
+ }
1529
+ state.linkedProjectPaths.add(normalizedPath);
1530
+ if (await linkedArtifactIsMissing(workspaceRoot, artifact.path)) {
1531
+ state.missingLinkedPaths.push(normalizedPath);
1532
+ state.staleLinkRows.push({ item_id: item.id, path: normalizedPath, link_kind: group.link_kind });
1533
+ }
1534
+ }
1535
+ }
1536
+ }
1537
+ return state;
1538
+ }
1539
+ function partitionFileCandidates(fileCandidates, pmRoot, workspaceRoot, fileScanMode, includePmInternals, verboseFileLists) {
1540
+ const strictTrackedAllMode = fileScanMode === "tracked-all-strict";
1541
+ const strictModeForcesPmInternals = strictTrackedAllMode && !includePmInternals;
1542
+ const includePmInternalsEffective = includePmInternals || strictTrackedAllMode;
1543
+ const pmInternalCandidatePrefixes = includePmInternalsEffective ? [] : resolvePmInternalCandidatePrefixes(pmRoot, workspaceRoot);
1544
+ const excludedPmInternalPaths = pmInternalCandidatePrefixes.length === 0 ? [] : fileCandidates.candidateFiles.filter((candidate) => hasPathPrefix(candidate, pmInternalCandidatePrefixes));
1545
+ const candidateFiles = pmInternalCandidatePrefixes.length === 0 ? fileCandidates.candidateFiles : fileCandidates.candidateFiles.filter((candidate) => !hasPathPrefix(candidate, pmInternalCandidatePrefixes));
1546
+ const excludedByReason = {};
1547
+ if (excludedPmInternalPaths.length > 0) {
1548
+ const summarizedPmInternalPaths = summarizeFileList(excludedPmInternalPaths, verboseFileLists);
1549
+ excludedByReason.pm_internals = {
1550
+ count: excludedPmInternalPaths.length,
1551
+ paths: summarizedPmInternalPaths.values,
1552
+ paths_truncated: summarizedPmInternalPaths.truncated,
1553
+ paths_total: summarizedPmInternalPaths.total
1554
+ };
1427
1555
  }
1556
+ return {
1557
+ strictTrackedAllMode,
1558
+ strictModeForcesPmInternals,
1559
+ includePmInternalsEffective,
1560
+ pmInternalCandidatePrefixes,
1561
+ excludedPmInternalPaths,
1562
+ candidateFiles,
1563
+ excludedByReason
1564
+ };
1565
+ }
1566
+ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverity, parentCycleSeverity, statusRegistry, lifecyclePatternPolicy, verboseDiagnostics, idPrefix = "pm") {
1567
+ const rows = collectLifecycleScanRows(items, includeStaleBlockers, statusRegistry, lifecyclePatternPolicy);
1568
+ sortLifecycleScanRows(rows);
1569
+ const dependencyCycleDiagnostics = detectLifecycleDependencyCycles(rows.activeItems, idPrefix);
1570
+ const parentCycleDiagnostics = detectLifecycleParentCycles(items);
1571
+ const warnings = buildLifecycleWarnings(rows, includeStaleBlockers, dependencyCycleSeverity, parentCycleSeverity, dependencyCycleDiagnostics.cycle_count, parentCycleDiagnostics.cycle_count);
1428
1572
  const diagnosticLimit = verboseDiagnostics ? Number.POSITIVE_INFINITY : DIAGNOSTIC_LIST_SUMMARY_LIMIT;
1429
- const summarizedClosureLikeRows = summarizeList(closureLikeRows.map((row) => `${row.id}:${row.fields.join(",")}`), diagnosticLimit);
1430
- const summarizedTerminalParentRows = summarizeList(terminalParentRows.map((row) => `${row.id}:${row.parent_id}:${row.parent_status}`), diagnosticLimit);
1431
- const summarizedStaleBlockerRows = summarizeList(staleBlockerRows.map((row) => `${row.id}:${row.status}:${row.reasons.join(",")}`), diagnosticLimit);
1573
+ const summarizedClosureLikeRows = summarizeList(rows.closureLikeRows.map((row) => `${row.id}:${row.fields.join(",")}`), diagnosticLimit);
1574
+ const summarizedTerminalParentRows = summarizeList(rows.terminalParentRows.map((row) => `${row.id}:${row.parent_id}:${row.parent_status}`), diagnosticLimit);
1575
+ const summarizedStaleBlockerRows = summarizeList(rows.staleBlockerRows.map((row) => `${row.id}:${row.status}:${row.reasons.join(",")}`), diagnosticLimit);
1432
1576
  const summarizedDependencyCycleItemIds = summarizeList(dependencyCycleDiagnostics.cycle_item_ids, diagnosticLimit);
1433
1577
  const summarizedDependencyCycleSamplePaths = summarizeList(dependencyCycleDiagnostics.cycle_sample_paths, diagnosticLimit);
1434
1578
  const summarizedParentCycleItemIds = summarizeList(parentCycleDiagnostics.cycle_item_ids, diagnosticLimit);
@@ -1439,15 +1583,15 @@ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverit
1439
1583
  name: "lifecycle",
1440
1584
  status: hasErrorSeverityCycle ? "error" : warnings.length === 0 ? "ok" : "warn",
1441
1585
  details: {
1442
- checked_active_items: activeItems.length,
1443
- active_closure_like_metadata_items: closureLikeRows.length,
1586
+ checked_active_items: rows.activeItems.length,
1587
+ active_closure_like_metadata_items: rows.closureLikeRows.length,
1444
1588
  active_closure_like_metadata_rows: summarizedClosureLikeRows.values,
1445
1589
  active_closure_like_metadata_rows_truncated: summarizedClosureLikeRows.truncated,
1446
- active_terminal_parent_items: terminalParentRows.length,
1590
+ active_terminal_parent_items: rows.terminalParentRows.length,
1447
1591
  active_terminal_parent_rows: summarizedTerminalParentRows.values,
1448
1592
  active_terminal_parent_rows_truncated: summarizedTerminalParentRows.truncated,
1449
1593
  stale_blocker_checks_enabled: includeStaleBlockers,
1450
- stale_blocker_items: staleBlockerRows.length,
1594
+ stale_blocker_items: rows.staleBlockerRows.length,
1451
1595
  stale_blocker_rows: summarizedStaleBlockerRows.values,
1452
1596
  stale_blocker_rows_truncated: summarizedStaleBlockerRows.truncated,
1453
1597
  dependency_cycle_severity_policy: dependencyCycleSeverity,
@@ -1477,81 +1621,26 @@ function buildLifecycleCheck(items, includeStaleBlockers, dependencyCycleSeverit
1477
1621
  }
1478
1622
  },
1479
1623
  warnings,
1480
- terminalParentFixRows
1624
+ terminalParentFixRows: rows.terminalParentFixRows
1481
1625
  };
1482
1626
  }
1483
1627
  async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, includePmInternals, verboseFileLists) {
1484
- const linkedProjectPaths = /* @__PURE__ */ new Set();
1485
- const remoteLinkedPaths = /* @__PURE__ */ new Set();
1486
- const missingLinkedPaths = [];
1487
- const staleLinkRows = [];
1628
+ const linkedPathState = await collectLinkedPathScanState(items, workspaceRoot);
1488
1629
  const itemsById = new Map(items.map((item) => [item.id, item]));
1489
- for (const item of items) {
1490
- const linkedArtifactGroups = [
1491
- { link_kind: "files", artifacts: item.files ?? [] },
1492
- { link_kind: "docs", artifacts: item.docs ?? [] }
1493
- ];
1494
- for (const group of linkedArtifactGroups) {
1495
- for (const artifact of group.artifacts) {
1496
- if (artifact.scope !== "project") {
1497
- continue;
1498
- }
1499
- if (isRemoteLinkedArtifactReference(artifact.path)) {
1500
- remoteLinkedPaths.add(artifact.path.trim());
1501
- continue;
1502
- }
1503
- const normalizedPath = normalizeRelativePath(artifact.path);
1504
- if (normalizedPath.length === 0) {
1505
- continue;
1506
- }
1507
- linkedProjectPaths.add(normalizedPath);
1508
- const absolutePath = path.isAbsolute(artifact.path) ? artifact.path : path.resolve(workspaceRoot, artifact.path);
1509
- let missing = false;
1510
- try {
1511
- const stats = await fs.stat(absolutePath);
1512
- if (!stats.isFile() && !stats.isDirectory()) {
1513
- missing = true;
1514
- }
1515
- } catch {
1516
- missing = true;
1517
- }
1518
- if (missing) {
1519
- missingLinkedPaths.push(normalizedPath);
1520
- staleLinkRows.push({ item_id: item.id, path: normalizedPath, link_kind: group.link_kind });
1521
- }
1522
- }
1523
- }
1524
- }
1525
- const uniqueMissingLinkedPaths = [...new Set(missingLinkedPaths)].sort((left, right) => left.localeCompare(right));
1630
+ const uniqueMissingLinkedPaths = [...new Set(linkedPathState.missingLinkedPaths)].sort((left, right) => left.localeCompare(right));
1526
1631
  const fileCandidates = await collectProjectFileCandidates(workspaceRoot, fileScanMode);
1527
- const strictTrackedAllMode = fileScanMode === "tracked-all-strict";
1528
- const strictModeForcesPmInternals = strictTrackedAllMode && !includePmInternals;
1529
- const includePmInternalsEffective = includePmInternals || strictTrackedAllMode;
1530
- const pmInternalCandidatePrefixes = includePmInternalsEffective ? [] : resolvePmInternalCandidatePrefixes(pmRoot, workspaceRoot);
1531
- const excludedPmInternalPaths = pmInternalCandidatePrefixes.length === 0 ? [] : fileCandidates.candidateFiles.filter((candidate) => hasPathPrefix(candidate, pmInternalCandidatePrefixes));
1532
- const candidateFiles = pmInternalCandidatePrefixes.length === 0 ? fileCandidates.candidateFiles : fileCandidates.candidateFiles.filter((candidate) => !hasPathPrefix(candidate, pmInternalCandidatePrefixes));
1533
- const excludedPmInternalCount = excludedPmInternalPaths.length;
1534
- const excludedByReason = {};
1535
- if (excludedPmInternalCount > 0) {
1536
- const summarizedPmInternalPaths = summarizeFileList(excludedPmInternalPaths, verboseFileLists);
1537
- excludedByReason.pm_internals = {
1538
- count: excludedPmInternalCount,
1539
- paths: summarizedPmInternalPaths.values,
1540
- paths_truncated: summarizedPmInternalPaths.truncated,
1541
- paths_total: summarizedPmInternalPaths.total
1542
- };
1543
- }
1544
- const orphanedFiles = candidateFiles.filter((candidate) => !linkedProjectPaths.has(candidate));
1632
+ const partition = partitionFileCandidates(fileCandidates, pmRoot, workspaceRoot, fileScanMode, includePmInternals, verboseFileLists);
1633
+ const orphanedFiles = partition.candidateFiles.filter((candidate) => !linkedPathState.linkedProjectPaths.has(candidate));
1545
1634
  const orphanedPathRows = buildOrphanedPathRows(orphanedFiles, items);
1546
- const classifiedStalePaths = classifyStaleLinkedPaths(uniqueMissingLinkedPaths, candidateFiles);
1635
+ const classifiedStalePaths = classifyStaleLinkedPaths(uniqueMissingLinkedPaths, partition.candidateFiles);
1547
1636
  const classificationByPath = new Map(classifiedStalePaths.map((entry) => [entry.path, entry.classification]));
1548
1637
  const movedStalePathCount = classifiedStalePaths.filter((entry) => entry.classification === "moved").length;
1549
- const staleLinkPruneRows = staleLinkRows.map((row) => ({
1638
+ const staleLinkPruneRows = linkedPathState.staleLinkRows.map((row) => ({
1550
1639
  ...row,
1551
1640
  classification: classificationByPath.get(row.path) ?? "deleted"
1552
1641
  })).sort((left, right) => left.item_id.localeCompare(right.item_id) || left.path.localeCompare(right.path) || left.link_kind.localeCompare(right.link_kind));
1553
1642
  const warnings = [];
1554
- if (strictModeForcesPmInternals) {
1643
+ if (partition.strictModeForcesPmInternals) {
1555
1644
  warnings.push("validate_files_tracked_all_strict_forces_pm_internals");
1556
1645
  }
1557
1646
  if (uniqueMissingLinkedPaths.length > 0) {
@@ -1560,7 +1649,7 @@ async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, inclu
1560
1649
  if (orphanedFiles.length > 0) {
1561
1650
  warnings.push(`validate_files_orphaned_paths:${orphanedFiles.length}`);
1562
1651
  }
1563
- const uniqueRemoteLinkedPaths = [...remoteLinkedPaths].sort((left, right) => left.localeCompare(right));
1652
+ const uniqueRemoteLinkedPaths = [...linkedPathState.remoteLinkedPaths].sort((left, right) => left.localeCompare(right));
1564
1653
  const summarizedRemote = summarizeFileList(uniqueRemoteLinkedPaths, verboseFileLists);
1565
1654
  const summarizedMissing = summarizeFileList(uniqueMissingLinkedPaths, verboseFileLists);
1566
1655
  const summarizedOrphaned = summarizeFileList(orphanedFiles, verboseFileLists);
@@ -1586,28 +1675,28 @@ async function buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, inclu
1586
1675
  workspace_root: workspaceRoot,
1587
1676
  scan_mode_requested: fileCandidates.requestedMode,
1588
1677
  scan_mode_applied: fileCandidates.appliedMode,
1589
- strict_tracked_all_mode: strictTrackedAllMode,
1590
- strict_mode_forces_pm_internals: strictModeForcesPmInternals,
1591
- strict_mode_forces_pm_internals_notice: strictModeForcesPmInternals ? "tracked-all-strict force-enables PM internals; pass --include-pm-internals to make inclusion explicit." : null,
1678
+ strict_tracked_all_mode: partition.strictTrackedAllMode,
1679
+ strict_mode_forces_pm_internals: partition.strictModeForcesPmInternals,
1680
+ strict_mode_forces_pm_internals_notice: partition.strictModeForcesPmInternals ? "tracked-all-strict force-enables PM internals; pass --include-pm-internals to make inclusion explicit." : null,
1592
1681
  file_list_detail_mode: verboseFileLists ? "full" : "summary",
1593
1682
  file_list_summary_limit: FILE_LIST_SUMMARY_LIMIT,
1594
1683
  candidate_scan_source: fileCandidates.source,
1595
- include_pm_internals: includePmInternalsEffective,
1684
+ include_pm_internals: partition.includePmInternalsEffective,
1596
1685
  include_pm_internals_requested: includePmInternals,
1597
- pm_internal_candidate_prefixes: pmInternalCandidatePrefixes,
1598
- pm_internal_excluded_count: excludedPmInternalCount,
1599
- excluded_total: excludedPmInternalCount,
1600
- excluded_by_reason: excludedByReason,
1601
- linked_project_paths: linkedProjectPaths.size,
1686
+ pm_internal_candidate_prefixes: partition.pmInternalCandidatePrefixes,
1687
+ pm_internal_excluded_count: partition.excludedPmInternalPaths.length,
1688
+ excluded_total: partition.excludedPmInternalPaths.length,
1689
+ excluded_by_reason: partition.excludedByReason,
1690
+ linked_project_paths: linkedPathState.linkedProjectPaths.size,
1602
1691
  remote_linked_paths_count: uniqueRemoteLinkedPaths.length,
1603
1692
  remote_linked_paths_total: summarizedRemote.total,
1604
1693
  remote_linked_paths: summarizedRemote.values,
1605
1694
  remote_linked_paths_truncated: summarizedRemote.truncated,
1606
1695
  candidate_total_raw: fileCandidates.candidateTotal,
1607
1696
  candidate_scanned_raw: fileCandidates.candidateScanned,
1608
- candidate_total: candidateFiles.length,
1609
- candidate_scanned: candidateFiles.length,
1610
- scanned_candidate_files: candidateFiles.length,
1697
+ candidate_total: partition.candidateFiles.length,
1698
+ candidate_scanned: partition.candidateFiles.length,
1699
+ scanned_candidate_files: partition.candidateFiles.length,
1611
1700
  missing_linked_paths_count: uniqueMissingLinkedPaths.length,
1612
1701
  missing_linked_paths_total: summarizedMissing.total,
1613
1702
  missing_linked_paths: summarizedMissing.values,
@@ -1767,7 +1856,7 @@ async function applyValidateFix(fix, global2) {
1767
1856
  case "set_estimate":
1768
1857
  case "reparent":
1769
1858
  case "unset_parent": {
1770
- const { runUpdate } = await import("./update-UXDLTEOZ.js");
1859
+ const { runUpdate } = await import("./update-MTCFES6X.js");
1771
1860
  const updateOptions = { message: VALIDATE_AUTO_FIX_MESSAGE };
1772
1861
  if (fix.kind === "set_resolution") {
1773
1862
  updateOptions.resolution = fix.value;
@@ -1827,10 +1916,10 @@ async function applyValidateFixes(applicable, global2) {
1827
1916
  const remove = batch.map((fix) => fix.path).filter((value) => typeof value === "string" && value.length > 0);
1828
1917
  try {
1829
1918
  if (first.kind === "prune_file_link") {
1830
- const { runFiles } = await import("./files-T5ODMETM.js");
1919
+ const { runFiles } = await import("./files-GPIG77EN.js");
1831
1920
  await runFiles(first.item_id, { remove, message: VALIDATE_AUTO_FIX_MESSAGE }, global2);
1832
1921
  } else {
1833
- const { runDocs } = await import("./docs-2TIFR62T.js");
1922
+ const { runDocs } = await import("./docs-XJNYBJGE.js");
1834
1923
  await runDocs(first.item_id, { remove, message: VALIDATE_AUTO_FIX_MESSAGE }, global2);
1835
1924
  }
1836
1925
  applied.push(...batch);
@@ -1845,10 +1934,14 @@ var _testOnlyValidateCommand = {
1845
1934
  applyValidateFixes,
1846
1935
  attachValidateFixHints,
1847
1936
  buildCommandReferencesCheck,
1937
+ buildCloseReasonBackfillRows,
1848
1938
  buildFilesCheck,
1849
1939
  buildLifecycleCheck,
1850
1940
  buildLifecycleDependencyGraph,
1851
1941
  buildLifecycleParentGraph,
1942
+ buildEstimateBackfillRows,
1943
+ buildMetadataCounts,
1944
+ buildMissingFieldOccurrences,
1852
1945
  buildOrphanedPathRows,
1853
1946
  classifyOrphanedPath,
1854
1947
  collectDefaultProjectFileCandidates,
@@ -1872,6 +1965,105 @@ var _testOnlyValidateCommand = {
1872
1965
  summarizeDuplicateIssueCodes,
1873
1966
  toMeaningfulString
1874
1967
  };
1968
+ function recordValidateCheck(state, built, fixHintsEnabled) {
1969
+ if (fixHintsEnabled) {
1970
+ attachValidateFixHints(built.check, built.warnings);
1971
+ }
1972
+ state.checks.push(built.check);
1973
+ state.warnings.push(...built.warnings);
1974
+ }
1975
+ async function executeRequestedValidateChecks(params) {
1976
+ const state = {
1977
+ checks: [],
1978
+ warnings: [...params.initialWarnings],
1979
+ closeReasonBackfillRows: [],
1980
+ estimateBackfillRows: [],
1981
+ resolutionBackfillRows: [],
1982
+ terminalParentFixRows: [],
1983
+ staleLinkPruneRows: []
1984
+ };
1985
+ const fixHintsEnabled = params.options.fixHints === true;
1986
+ const fullDiagnostics = params.options.verboseDiagnostics === true || params.options.allAffectedIds === true || params.global.json === true;
1987
+ if (params.requestedChecks.has("metadata")) {
1988
+ const built = buildMetadataCheck(params.items, params.metadataPolicy, params.statusRegistry, fullDiagnostics);
1989
+ state.closeReasonBackfillRows = built.closeReasonBackfillRows;
1990
+ state.estimateBackfillRows = built.estimateBackfillRows;
1991
+ recordValidateCheck(state, built, fixHintsEnabled);
1992
+ }
1993
+ if (params.requestedChecks.has("resolution")) {
1994
+ const built = buildResolutionCheck(params.items, params.statusRegistry, fullDiagnostics);
1995
+ state.resolutionBackfillRows = built.resolutionBackfillRows;
1996
+ recordValidateCheck(state, built, fixHintsEnabled);
1997
+ }
1998
+ if (params.requestedChecks.has("lifecycle")) {
1999
+ const built = buildLifecycleCheck(params.items, Boolean(params.options.checkStaleBlockers), params.dependencyCycleSeverity, params.parentCycleSeverity, params.statusRegistry, params.lifecyclePatternPolicy, fullDiagnostics, params.settings.id_prefix);
2000
+ state.terminalParentFixRows = built.terminalParentFixRows;
2001
+ recordValidateCheck(state, built, fixHintsEnabled);
2002
+ }
2003
+ if (params.requestedChecks.has("files")) {
2004
+ const built = await buildFilesCheck(params.items, params.workspaceRoot, params.pmRoot, params.fileScanMode, Boolean(params.options.includePmInternals), Boolean(params.options.verboseFileLists));
2005
+ state.staleLinkPruneRows = built.staleLinkPruneRows;
2006
+ recordValidateCheck(state, built, fixHintsEnabled);
2007
+ }
2008
+ if (params.requestedChecks.has("command_references")) {
2009
+ recordValidateCheck(state, buildCommandReferencesCheck(params.items, params.settings.id_prefix, fullDiagnostics), fixHintsEnabled);
2010
+ }
2011
+ if (params.requestedChecks.has("history_drift")) {
2012
+ recordValidateCheck(state, await buildHistoryDriftCheck(params.pmRoot, params.items, fullDiagnostics), fixHintsEnabled);
2013
+ }
2014
+ if (params.requestedChecks.has("format_version")) {
2015
+ recordValidateCheck(state, buildFormatVersionCheck(params.items, fullDiagnostics), fixHintsEnabled);
2016
+ }
2017
+ return state;
2018
+ }
2019
+ function planValidateFixes(options, state, settings) {
2020
+ const planned = [];
2021
+ if (options.autoFix === true) {
2022
+ planned.push(...planCloseReasonBackfillFixes(state.closeReasonBackfillRows));
2023
+ planned.push(...planResolutionBackfillFixes(state.resolutionBackfillRows));
2024
+ planned.push(...planEstimateBackfillFixes(state.estimateBackfillRows, settings.validation.estimate_defaults_by_type));
2025
+ planned.push(...planTerminalParentFixes(state.terminalParentFixRows));
2026
+ }
2027
+ if (options.pruneMissing === true) {
2028
+ planned.push(...planStaleLinkPruneFixes(state.staleLinkPruneRows));
2029
+ }
2030
+ return planned;
2031
+ }
2032
+ async function buildValidateFixesSummary(options, state, settings, grantedFixScopes, global2) {
2033
+ if (options.autoFix !== true && options.pruneMissing !== true) {
2034
+ return void 0;
2035
+ }
2036
+ const planned = planValidateFixes(options, state, settings);
2037
+ const { applicable, gated } = partitionFixesByGrant(planned, grantedFixScopes);
2038
+ const dryRun = options.dryRun === true;
2039
+ const appliedFixRows = [];
2040
+ const failedFixRows = [];
2041
+ if (!dryRun) {
2042
+ const applied = await applyValidateFixes(applicable, global2);
2043
+ appliedFixRows.push(...applied.applied.map(toFixOutputRow));
2044
+ failedFixRows.push(...applied.failed.map(({ fix, error }) => ({
2045
+ ...toFixOutputRow(fix),
2046
+ error: error instanceof Error ? error.message : String(error)
2047
+ })));
2048
+ }
2049
+ return {
2050
+ mode: dryRun ? "dry_run" : "apply",
2051
+ auto_fix: options.autoFix === true,
2052
+ prune_missing: options.pruneMissing === true,
2053
+ granted_fix_scopes: [...grantedFixScopes].sort((left, right) => left.localeCompare(right)),
2054
+ planned_count: planned.length,
2055
+ applied_count: appliedFixRows.length,
2056
+ gated_count: gated.length,
2057
+ failed_count: failedFixRows.length,
2058
+ planned_fixes: planned.map(toFixOutputRow),
2059
+ applied_fixes: appliedFixRows,
2060
+ gated_fixes: gated.map((fix) => ({
2061
+ ...toFixOutputRow(fix),
2062
+ gate_hint: `Withheld: re-run with --fix-scope ${fix.gate} to apply.`
2063
+ })),
2064
+ failed_fixes: failedFixRows
2065
+ };
2066
+ }
1875
2067
  async function runValidate(options, global2) {
1876
2068
  const fixesRequested = options.autoFix === true || options.pruneMissing === true;
1877
2069
  if (options.dryRun === true && !fixesRequested) {
@@ -1899,100 +2091,29 @@ async function runValidate(options, global2) {
1899
2091
  const parentCycleSeverity = resolveParentCycleSeverity(options.parentCycleSeverity);
1900
2092
  const fileScanMode = resolveFileScanMode(options.scanMode);
1901
2093
  const workspaceRoot = resolveWorkspaceRoot(pmRoot);
1902
- const checks = [];
1903
- const warnings = [...new Set(itemReadWarnings)];
1904
- const fixHintsEnabled = options.fixHints === true;
1905
- const fullDiagnostics = options.verboseDiagnostics === true || options.allAffectedIds === true || global2.json === true;
1906
- const record = (built) => {
1907
- if (fixHintsEnabled) {
1908
- attachValidateFixHints(built.check, built.warnings);
1909
- }
1910
- checks.push(built.check);
1911
- warnings.push(...built.warnings);
1912
- };
1913
- let closeReasonBackfillRows = [];
1914
- let estimateBackfillRows = [];
1915
- let resolutionBackfillRows = [];
1916
- let terminalParentFixRows = [];
1917
- let staleLinkPruneRows = [];
1918
- if (requestedChecks.has("metadata")) {
1919
- const built = buildMetadataCheck(items, metadataPolicy, statusRegistry, fullDiagnostics);
1920
- closeReasonBackfillRows = built.closeReasonBackfillRows;
1921
- estimateBackfillRows = built.estimateBackfillRows;
1922
- record(built);
1923
- }
1924
- if (requestedChecks.has("resolution")) {
1925
- const built = buildResolutionCheck(items, statusRegistry, fullDiagnostics);
1926
- resolutionBackfillRows = built.resolutionBackfillRows;
1927
- record(built);
1928
- }
1929
- if (requestedChecks.has("lifecycle")) {
1930
- const built = buildLifecycleCheck(items, Boolean(options.checkStaleBlockers), dependencyCycleSeverity, parentCycleSeverity, statusRegistry, lifecyclePatternPolicy, fullDiagnostics, settings.id_prefix);
1931
- terminalParentFixRows = built.terminalParentFixRows;
1932
- record(built);
1933
- }
1934
- if (requestedChecks.has("files")) {
1935
- const built = await buildFilesCheck(items, workspaceRoot, pmRoot, fileScanMode, Boolean(options.includePmInternals), Boolean(options.verboseFileLists));
1936
- staleLinkPruneRows = built.staleLinkPruneRows;
1937
- record(built);
1938
- }
1939
- if (requestedChecks.has("command_references")) {
1940
- record(buildCommandReferencesCheck(items, settings.id_prefix, fullDiagnostics));
1941
- }
1942
- if (requestedChecks.has("history_drift")) {
1943
- record(await buildHistoryDriftCheck(pmRoot, items, fullDiagnostics));
1944
- }
1945
- if (requestedChecks.has("format_version")) {
1946
- record(buildFormatVersionCheck(items, fullDiagnostics));
1947
- }
1948
- let fixes;
1949
- if (fixesRequested) {
1950
- const planned = [];
1951
- if (options.autoFix === true) {
1952
- planned.push(...planCloseReasonBackfillFixes(closeReasonBackfillRows));
1953
- planned.push(...planResolutionBackfillFixes(resolutionBackfillRows));
1954
- planned.push(...planEstimateBackfillFixes(estimateBackfillRows, settings.validation.estimate_defaults_by_type));
1955
- planned.push(...planTerminalParentFixes(terminalParentFixRows));
1956
- }
1957
- if (options.pruneMissing === true) {
1958
- planned.push(...planStaleLinkPruneFixes(staleLinkPruneRows));
1959
- }
1960
- const { applicable, gated } = partitionFixesByGrant(planned, grantedFixScopes);
1961
- const dryRun = options.dryRun === true;
1962
- const appliedFixRows = [];
1963
- const failedFixRows = [];
1964
- if (!dryRun) {
1965
- const applied = await applyValidateFixes(applicable, global2);
1966
- appliedFixRows.push(...applied.applied.map(toFixOutputRow));
1967
- failedFixRows.push(...applied.failed.map(({ fix, error }) => ({
1968
- ...toFixOutputRow(fix),
1969
- error: error instanceof Error ? error.message : String(error)
1970
- })));
1971
- }
1972
- fixes = {
1973
- mode: dryRun ? "dry_run" : "apply",
1974
- auto_fix: options.autoFix === true,
1975
- prune_missing: options.pruneMissing === true,
1976
- granted_fix_scopes: [...grantedFixScopes].sort((left, right) => left.localeCompare(right)),
1977
- planned_count: planned.length,
1978
- applied_count: appliedFixRows.length,
1979
- gated_count: gated.length,
1980
- failed_count: failedFixRows.length,
1981
- planned_fixes: planned.map(toFixOutputRow),
1982
- applied_fixes: appliedFixRows,
1983
- gated_fixes: gated.map((fix) => ({
1984
- ...toFixOutputRow(fix),
1985
- gate_hint: `Withheld: re-run with --fix-scope ${fix.gate} to apply.`
1986
- })),
1987
- failed_fixes: failedFixRows
1988
- };
1989
- }
1990
- const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));
1991
- const hasErrors = checks.some((check) => check.status === "error");
2094
+ const state = await executeRequestedValidateChecks({
2095
+ requestedChecks,
2096
+ options,
2097
+ global: global2,
2098
+ pmRoot,
2099
+ workspaceRoot,
2100
+ settings,
2101
+ items,
2102
+ statusRegistry,
2103
+ metadataPolicy,
2104
+ lifecyclePatternPolicy,
2105
+ dependencyCycleSeverity,
2106
+ parentCycleSeverity,
2107
+ fileScanMode,
2108
+ initialWarnings: [...new Set(itemReadWarnings)]
2109
+ });
2110
+ const fixes = fixesRequested ? await buildValidateFixesSummary(options, state, settings, grantedFixScopes, global2) : void 0;
2111
+ const normalizedWarnings = [...new Set(state.warnings)].sort((left, right) => left.localeCompare(right));
2112
+ const hasErrors = state.checks.some((check) => check.status === "error");
1992
2113
  return {
1993
2114
  ok: !hasErrors,
1994
2115
  has_warnings: normalizedWarnings.length > 0,
1995
- checks,
2116
+ checks: state.checks,
1996
2117
  warnings: normalizedWarnings,
1997
2118
  ...fixes !== void 0 ? { fixes } : {},
1998
2119
  generated_at: nowIso()
@@ -2002,4 +2123,4 @@ export {
2002
2123
  _testOnlyValidateCommand,
2003
2124
  runValidate
2004
2125
  };
2005
- //# sourceMappingURL=validate-2G566PKQ.js.map
2126
+ //# sourceMappingURL=validate-732RWS5W.js.map